在學(xué)習(xí)和使用 Verilog 的過(guò)程中,難免會(huì)碰到需要深入理解仿真器調(diào)度的問(wèn)題。今天這篇聊聊使用 Verdi 去分析 NBA Delay 的問(wèn)題。
NBA 就是 NonBlocking Assignment,非阻塞賦值 的縮寫(xiě)。它通常用來(lái)描述一個(gè)用時(shí)鐘沿觸發(fā)的寄存器。在 Verilog 普及早期,人們通常會(huì)在 NBA 的<=
之后加個(gè)單位延時(shí)#1
來(lái)解決早期仿真器行為不一致的問(wèn)題。
所謂習(xí)慣成自然,NBA Unit Delay 在某些設(shè)計(jì)中一直沿用下來(lái),那么如何去理解這個(gè)延時(shí)的作用呢?SNUG 上的知名作者 Clifford E. Cummings
在 2002 年有篇文章闡述的挺詳細(xì),感興趣的朋友可以搜來(lái)研究,不再贅述。
下面給出一些代碼片斷,同樣感興趣的朋友可以自己完善并用 VCS 仿真生成波形,然后用 Verdi 打開(kāi)。
首先創(chuàng)建三個(gè)時(shí)鐘,注意兩個(gè)二分頻時(shí)鐘的創(chuàng)建方式不同。
always #(10/2) clk = ~clk;
always #(20/2) clk_div2_direct = ~clk_div2_direct;
always @ ( posedge clk or negedge rst_n ) begin
if ( ~ rst_n ) begin
clk_div2 <= 1'b0;
end
else begin
clk_div2 <= ~clk_div2;
end
end
然后用 clk 觸發(fā)一個(gè)不停翻轉(zhuǎn)的寄存器 d1,再分別用兩個(gè)二分頻時(shí)鐘去采樣,保存在 d5 和 d6 中。
always @ ( posedge clk or negedge rst_n ) begin
if ( ~ rst_n ) begin
d1 <= 1'b0;
end
else begin
d1 <= ~d1;
end
end
always @ ( posedge clk_div2 or negedge rst_n ) begin
if ( ~ rst_n ) begin
d5 <= 1'b0;
end
else begin
d5 <= d1;
end
end
always @ ( posedge clk_div2_direct or negedge rst_n ) begin
if ( ~ rst_n ) begin
d6 <= 1'b0;
end
else begin
d6 <= d1;
end
end
用 VCS 仿真的時(shí)候,加上編譯時(shí)選項(xiàng)+fsdb+region
和運(yùn)行時(shí)選項(xiàng)+fsdb+delta
。
然后用 Verdi 打開(kāi)生成的 fsdb 波形。正常的話,可以看到 d5 和 d6 的波形是完全不同的,一個(gè)是常0,一個(gè)是常1。
只從上圖分析的話,兩個(gè)二分頻時(shí)鐘的波形是完全一致的,被采樣的數(shù)據(jù)是同一個(gè),那么采到的數(shù)據(jù)也應(yīng)該是相同的。但我們知道這兩個(gè)二分頻時(shí)鐘的生成方式是不同的,那么不同在什么地方呢?
在 Verdi 的 nWave 窗口中選中 View - Expand Delta - Region Mode,把 Cursor 移動(dòng)到二分頻時(shí)鐘的上升沿,然后點(diǎn)擊 Expand/Collapse Time at Cursor,簡(jiǎn)單點(diǎn)的話直接按 w 鍵。
然后就可以看到這個(gè)仿真時(shí)刻的 Simulation Region,里面展示了各個(gè) Event 和 Region 的關(guān)系。
這個(gè)例子中,只存在綠色的 Active Region 和 紅色的 NBA Region。在某些 glitch debug 的例子中,還能看到 Re-Active Region 和 Re-NBA Region。
Region 的展示可以幫助我們很好的理解 Verilog 規(guī)范中的定義的信號(hào)調(diào)度。
此外,Verdi 還可以通過(guò)點(diǎn)擊 Tools - Event Sequence 來(lái)顯示圖形化的 Event 序列。
Verdi 真得是很好很強(qiáng)大。
不過(guò)隨著工具的逐漸強(qiáng)大,站在工具背后的人呢?是在逐漸退化還是改變了進(jìn)化方向?歡迎留言說(shuō)說(shuō)你的看法。
-
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120581 -
仿真器
+關(guān)注
關(guān)注
14文章
1018瀏覽量
83795 -
VCS
+關(guān)注
關(guān)注
0文章
80瀏覽量
9625 -
Verdi
+關(guān)注
關(guān)注
0文章
22瀏覽量
8791 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17183
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論