硬體描述語言與驗證

原本打算做成組合電路,卻如上方般撰寫,邏輯合成會產生什麼?

always @(*) begin
    if (en)
        y = d;
end
  1. Aen為0時y會自動變成0的組合電路
  2. B以時脈動作的D型正反器
  3. Cen為0時需要保持y的值,因此會產生非預期的閂鎖器
查看答案與解析

正確答案:C. en為0時需要保持y的值,因此會產生非預期的閂鎖器

en為0時沒有對y的賦值,所以y必須記住之前的值。組合電路沒有記憶的功能,因此邏輯合成會產生用來保持值的閂鎖器。閂鎖器會使時序分析變得困難,也會因雜訊而造成誤動作,因此在非預期的情況下要避免。若像「else y = 0;」一樣在所有情況下都賦值,就會成為組合電路。

  • A. 因為沒有設為0的描述,所以不會變成0。
  • B. 因為沒有使用時脈,所以不會成為正反器。
  • C. 正確。原因在於沒有else。
練習這個領域 前往領域頁面

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

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

這個領域的比較