阻塞和非阻塞的區別#
阻塞賦值 “=”#
必須在阻塞賦值完成後,才進行下一條語句的執行;賦值一旦完成,等號左邊的變量值立即變化。在同一個塊中,阻塞賦值表達式的書寫順序會影響賦值的結果。硬體沒有對應的電路。
即串行賦值,語句從上到下順序執行,立即生效
非阻塞賦值 “<=”#
在賦值開始時計算表達式右邊的值,在本次仿真周期時鐘的下降沿時才更新被賦值變量,即賦值不是立即生效的;非阻塞賦值允許塊中其他語句同時執行。在同一個塊中,非阻塞賦值表達式的書寫順序不影響賦值的結果。硬體有對應的電路。
並行執行,不是立即生效,語句同時執行
總結#
阻塞賦值對應的硬體電路與時鐘觸發沿沒有關係,只和輸入的電平變化有關;阻塞賦值對應觸發器,只有觸發沿才會發生賦值。
- 時序電路建模時,用非阻塞賦值
- 鎖存器建模時,用非阻塞賦值
- 在 always 塊中建立組合邏輯時,用阻塞賦值
- 在同一個 always 塊中建立時序和組合邏輯時,用非阻塞
- 在同一個 always 塊中不能既用阻塞又用非阻塞
- 不要在一個以上的 always 塊中為同一個變量賦值
- 賦值時不能延時