moerjielovecookie

Sawen_Blog

一个普通工科牲的博客网站
x
github
follow
email

阻塞賦值和非阻塞賦值

阻塞和非阻塞的區別#

阻塞賦值 “=”#

必須在阻塞賦值完成後,才進行下一條語句的執行;賦值一旦完成,等號左邊的變量值立即變化。在同一個塊中,阻塞賦值表達式的書寫順序會影響賦值的結果。硬體沒有對應的電路。

即串行賦值,語句從上到下順序執行,立即生效

非阻塞賦值 “<=”#

在賦值開始時計算表達式右邊的值,在本次仿真週期時鐘的下降沿時才更新被賦值變量,即賦值不是立即生效的;非阻塞賦值允許塊中其他語句同時執行。在同一個塊中,非阻塞賦值表達式的書寫順序不影響賦值的結果。硬體有對應的電路。

並行執行,不是立即生效,語句同時執行

總結#

阻塞賦值對應的硬體電路與時鐘觸發沿沒有關係,只和輸入的電平變化有關;阻塞賦值對應觸發器,只有觸發沿才會發生賦值。

  1. 時序電路建模時,用非阻塞賦值
  2. 鎖存器建模時,用非阻塞賦值
  3. 在 always 塊中建立組合邏輯時,用阻塞賦值
  4. 在同一個 always 塊中建立時序和組合邏輯時,用非阻塞
  5. 在同一個 always 塊中不能既用阻塞又用非阻塞
  6. 不要在一個以上的 always 塊中為同一個變量賦值
  7. 賦值時不能延時
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。