硬體描述語言與驗證

上方描述會產生閂鎖器的原因與對策的組合,下列何者正確?

always @(*) begin
    case (sel)
        2'b00: y = a;
        2'b01: y = b;
        2'b10: y = c;
    endcase
end
  1. A因為在case中使用了3個輸入。將輸入減為2個
  2. B因為sel=2'b11時沒有對y的賦值。加上default子句,在所有情況下都決定值
  3. C因為使用了always @(*)。改為always @(posedge clk)
查看答案與解析

正確答案:B. 因為sel=2'b11時沒有對y的賦值。加上default子句,在所有情況下都決定值

sel為2位元,有4種值,但沒有寫出2'b11的情況,因此那時y必須保持之前的值,於是產生閂鎖器。像「default: y = 0;」一樣為其餘所有情況決定值,或在case之前先對y賦予預設值,就會成為組合電路。因條件遺漏而產生閂鎖器,是HDL初學者經常遇到的錯誤。

  • A. 輸入的數量不是原因。
  • B. 正確。必須涵蓋所有情況。
  • C. 那會變成正反器,成為另一種電路。
練習這個領域 前往領域頁面

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

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

這個領域的比較