硬體描述語言與驗證
在上方的描述中,當sel為X(不定)時,Verilog的模擬會讓y選擇b。這個性質在驗證上成為問題的原因,下列何者正確?
always @(*)
if (sel) y = a;
else y = b;
- A因為y一定會變成X,使模擬停止
- B因為sel為X時,在實際的晶片中也一定會選擇b
- C因為X被當作「假」處理而輸出b這個確定的值,使得sel不定這個錯誤在模擬中看不出來
查看答案與解析
正確答案:C. 因為X被當作「假」處理而輸出b這個確定的值,使得sel不定這個錯誤在模擬中看不出來
Verilog的if語句在條件為X時會將其視為假,執行else一側。因此y會輸出b這個確定的值,使得sel不定這個錯誤在模擬中被隱藏。在實際的電路中,sel是0或1其中之一,也可能選到a。這稱為X樂觀(X-optimism),對策有採用會傳遞X的寫法、加入偵測X的斷言等。
- A. y不會變成X,而是變成b。
- B. 在實際的晶片中,無法確定會是a還是b。
- C. 正確。這是稱為X樂觀(X-optimism)的問題。