硬體描述語言與驗證
上方描述會產生閂鎖器的原因與對策的組合,下列何者正確?
always @(*) begin
case (sel)
2'b00: y = a;
2'b01: y = b;
2'b10: y = c;
endcase
end
- A因為在case中使用了3個輸入。將輸入減為2個
- B因為sel=2'b11時沒有對y的賦值。加上default子句,在所有情況下都決定值
- 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. 那會變成正反器,成為另一種電路。