硬體描述語言與驗證
原本打算做成組合電路,卻如上方般撰寫。可能發生的問題,下列何者正確?
always @(a)
y = a & b;
- Ab會從電路中被移除,y與a變成相同
- B合成時發生錯誤,不會產生電路
- C即使只有b改變,模擬中y也不會更新,與合成後的電路(b改變y也會改變)的動作產生不一致
查看答案與解析
正確答案:C. 即使只有b改變,模擬中y也不會更新,與合成後的電路(b改變y也會改變)的動作產生不一致
模擬器只會在敏感度清單中所列的訊號改變時才執行區塊,因此只有b改變時,y會維持舊值。另一方面,邏輯合成不看清單,而是依區塊的內容產生AND閘,所以在實際電路中,b的變化也會反映到y。這是一種危險的狀態:模擬中看起來正確,電路卻有不同的動作。寫成「@(*)」即可避免。
- A. 合成會產生AND閘。
- B. 許多合成工具會發出警告,同時產生電路。
- C. 正確。這是敏感度清單遺漏的典型問題。