硬體描述語言與驗證

原本打算做成組合電路,卻如上方般撰寫。可能發生的問題,下列何者正確?

always @(a)
    y = a & b;
  1. Ab會從電路中被移除,y與a變成相同
  2. B合成時發生錯誤,不會產生電路
  3. C即使只有b改變,模擬中y也不會更新,與合成後的電路(b改變y也會改變)的動作產生不一致
查看答案與解析

正確答案:C. 即使只有b改變,模擬中y也不會更新,與合成後的電路(b改變y也會改變)的動作產生不一致

模擬器只會在敏感度清單中所列的訊號改變時才執行區塊,因此只有b改變時,y會維持舊值。另一方面,邏輯合成不看清單,而是依區塊的內容產生AND閘,所以在實際電路中,b的變化也會反映到y。這是一種危險的狀態:模擬中看起來正確,電路卻有不同的動作。寫成「@(*)」即可避免。

  • A. 合成會產生AND閘。
  • B. 許多合成工具會發出警告,同時產生電路。
  • C. 正確。這是敏感度清單遺漏的典型問題。
練習這個領域 前往領域頁面

硬體描述語言與驗證的其他題目

  1. 原本打算做成組合電路,卻如上方般撰寫,邏輯合成會產生什麼?
  2. 上方描述會產生閂鎖器的原因與對策的組合,下列何者正確?
  3. 在組合電路的always區塊中,為了防止非預期的閂鎖器而常用的寫法為何?
  4. 下列Verilog的描述中,在邏輯合成時不會成為電路而被忽略的(模擬用描述)是哪一個?
  5. 如上方般計算8位元d中1的個數的描述,經邏輯合成後會成為什麼樣的電路?

這個領域的比較