硬體描述語言與驗證

在上方的描述中,時脈上升之前a=0、b=1。上升之後a與b的值會變成什麼?

always @(posedge clk) begin
    a <= b;
    b <= a;
end
  1. Aa=1、b=0(互換)
  2. Ba=1、b=1
  3. Ca=0、b=0
查看答案與解析

正確答案:A. a=1、b=0(互換)

在非阻塞賦值中,會先評估兩個右邊(b的舊值1與a的舊值0),再同時將1寫入a、0寫入b,因此值會互換。以電路來看,就是將兩個正反器的輸出互相接到對方的輸入。若以阻塞賦值(=)撰寫,第1行a會變成1,第2行的b會代入新的a值1,結果兩者都變成1。

  • A. 正確。右邊兩者都是以舊值來評估。
  • B. 這是以「=」撰寫時的結果。
  • C. 值不會遺失。
練習這個領域 前往領域頁面

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

  1. 原本打算做成2級位移暫存器,卻如上方般以阻塞賦值(=)撰寫。會發生的問題,下列何者正確?
  2. 在Verilog中區分使用賦值種類時的一般準則,下列何者正確?
  3. 在Verilog中寫「always @(*)」的意義,下列何者正確?
  4. 原本打算做成組合電路,卻如上方般撰寫。可能發生的問題,下列何者正確?
  5. 原本打算做成組合電路,卻如上方般撰寫,邏輯合成會產生什麼?

這個領域的比較