Verilog學習筆記設計和驗證篇(五)...............層次化事件隊列


詳細的了解層次化事件隊列有助於理解Verilog的阻塞賦值和非阻塞賦值功能。所謂層次化事件隊列指的是用於調度仿真時間的不同Verilog事件隊列。在IEEE的5.3節中定義了層次化事件隊列在邏輯上分為用於當前仿真事件的4個不同隊列,和用於下一段仿真事件的若干個附加隊列:

1)動態事件隊列(下列事件隊列的執行順序可以隨意安排)

a)阻塞賦值 b)計算非阻塞賦值的RHS  c)連續賦值  d)執行$display命令  e)計算原語的輸入輸出變化

2)停止運行的事件隊列: #0延時阻塞賦值

3)非阻塞賦值事件隊列: 更新非阻塞賦值的LHS

4)監控事件隊列

a)執行$monitor命令 b)執行$strobe命令

5)其他指定的PLI命令隊列:其他PLI命令。

大多數Verilog事件是由動態事件隊列調度的。這些事件包括阻塞賦值、連續賦值、$display命令,實例和原語的輸入輸出變化以及他們的輸出更新,非阻塞賦值語句RHS的計算。而非阻塞賦值語句LHS的更新卻不是由動態事件調度。除了這些以外,排列在其他的隊列中的事件要等到被“激活”后,即被排入動態事件隊列中后,才能真正的開始等待執行。

 綜合前面阻塞賦值和非阻塞賦值,在Verilog程序中要遵循以下原則:

1)時序電路建模,采用非阻塞賦值;

2)鎖存器建模,采用非阻塞賦值;

3)用always塊來描述組合邏輯,采用阻塞賦值;

4)用always塊來描述組合和時序混合邏輯,采用非阻塞賦值;

5)在同一個always塊中,不能同時使用非阻塞賦值和阻塞賦值;

6)在不同always中,不要為同一個變量賦值。

7)用$strobe系統任務來顯示非阻塞賦值的變量值;

8)在賦值時,不要使用#0延遲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM