為了在仿真階段能夠模擬物理器件的延遲,進(jìn)行結(jié)構(gòu)模型建模,SystemVerilog/Verilog中提供了兩種類型的延遲用以模擬信號(hào)經(jīng)過模型時(shí)的傳輸延遲,這兩種延遲分別是:分布延遲(Distributed Delay)和模塊路徑延遲(Module Path Delay).本文及下面一篇將針對(duì)這兩種延遲分別進(jìn)行示例說明.
1 分布延遲(Distributed Delay)
分布延遲指模塊內(nèi)信號(hào)從邏輯門的輸入到輸出或者線網(wǎng)的延遲,這里我們僅以邏輯門延遲為例進(jìn)行說明.常見的門延遲主要有三種,如下圖:
【注意】如果信號(hào)從0/1/z變化到x,那么此時(shí)的門傳輸延遲為上述三種延遲最小的.另外,在進(jìn)行仿真時(shí),有些邏輯門的輸出不可能會(huì)出現(xiàn)高阻態(tài)z,所以對(duì)于這些邏輯門實(shí)際上就不存在關(guān)斷延遲了,類似的邏輯門有:and、nand、or、nor、xor、xnor、buf和not等.
1.1 門級(jí)延遲的格式
其中delay用于指定延遲,如果不指定,則所有延遲的默認(rèn)值為0.如果指定,主要有兩種形式:
?基本延遲表達(dá)式;
?"最小值:典型值:最大值"形式;
并且這兩種形式結(jié)合不同的延遲類型經(jīng)常會(huì)混合使用,下面我們針對(duì)兩種形式進(jìn)行說明:
1.2 基本延遲表達(dá)式
針對(duì)延遲的類型,基本延遲一般不指定"最小值:典型值:最大值",可以簡(jiǎn)單粗暴的認(rèn)為在簡(jiǎn)單延遲中,最小值、典型值和最大值可以認(rèn)為是相同的,常見的簡(jiǎn)單延遲使用格式如下表示例.
延遲類型 | 無延遲 | 1個(gè)延遲值(d) | 2個(gè)延遲值(d1,d2) | 3個(gè)延遲值(d1,d2,d3) |
上升延遲(Rise) | 0 | d | d1 | d1 |
下降延遲(Fall) | 0 | d | d2 | d2 |
輸出為x(To_x) | 0 | d | min(d1,d2) | min(d1,d2,d3) |
關(guān)斷延遲(Turn_off) | 0 | d | min(d1,d2) | d3 |
示例 | and u(out,d1,d2) | and #d u(out,d1,d2) | and #(d1,d2) u(out,d1,d2) | and #(d1,d2,d3) u(out,d1,d2) |
1.3 "最小值:典型值:最大值"形式
采用這種方式表示延遲時(shí),延遲中的每一項(xiàng)將都以"最小值:典型值:最大值"形式出現(xiàn),根據(jù)具體指定的延遲的個(gè)數(shù),其常見格式如下:
【示例:指定一個(gè)延遲】and #(13) u(out,d1,d2);
工況 | 上升延遲 | 下降延遲 | 輸出為x延遲 | 關(guān)斷延遲 |
最小 | 1 | 1 | 1 | 1 |
典型 | 2 | 2 | 2 | 2 |
最大 | 3 | 3 | 3 | 3 |
此時(shí)的各種延遲在特定工況下的值都是相同的.
【示例:指定二個(gè)延遲】and #(13,46) u(out,d1,d2);
工況 | 上升延遲 | 下降延遲 | 輸出為x延遲 | 關(guān)斷延遲 |
最小 | 1 | 4 | min(1,4) | min(1,4) |
典型 | 2 | 5 | min(2,5) | min(2,5) |
最大 | 3 | 6 | min(3,6) | min(3,6) |
此時(shí)的兩個(gè)延遲分別指的是上升延遲和下降延遲,關(guān)斷和輸出為x的延遲取決于每種工況下上升延遲和下降延遲的最小值.
【示例:指定三個(gè)延遲】and #(13,46,79) u(out,d1,d2);
上升延遲 | 下降延遲 | 輸出為x延遲 | 關(guān)斷延遲 | |
最小 | 1 | 4 | min(1,4,7) | 7 |
典型 | 2 | 5 | min(2,5,8) | 8 |
最大 | 3 | 6 | min(3,6,9) | 9 |
此時(shí)的三個(gè)延遲分別指的是上升延遲、下降延遲和關(guān)斷延遲,輸出為x的延遲取決于每種工況下上升延遲、下降延遲和關(guān)斷延遲的最小值.
門單元可以指定這么多種的延遲,那么在進(jìn)行仿真時(shí)如何告訴仿真器應(yīng)該使用哪種工況下指定的延遲呢?目前在使用主流EDA工具進(jìn)行仿真時(shí)可以針對(duì)需要使用的延遲在命令參數(shù)中指定"+mindelays"(對(duì)應(yīng)最小值,此時(shí)所有的延遲取最小值)、"+typdelays"(對(duì)應(yīng)典型值,此時(shí)所有的延遲取典型值)、"+maxdelays"(對(duì)應(yīng)最大值,此時(shí)所有的延遲取最大值)來實(shí)現(xiàn),但是每次仿真時(shí)只能指定一種延遲模式,并且這種選擇在仿真過程中是不能修改的.
2模塊路徑延遲(Module Path Delay)
模塊路徑延遲描述的是模塊中信號(hào)從源端到目的端傳輸?shù)难舆t,這些路徑以及對(duì)應(yīng)的延遲是在模塊中的specify塊中指定的,其中信號(hào)源端一般為input或者inout,而目的端則只能為output或者inout.在specify中指定的模塊路徑,常見的形式主要三種,分別是:簡(jiǎn)單路徑(Simple Path),邊沿敏感路徑(Edge Secsitive Path)和條件相關(guān)路徑(State-dependent Path).
在這三種路徑中根據(jù)源端和目的端之間路徑的可能連接方式又分為兩種:并行連接(Parallel Connection)和全連接(Full Connection),在specify塊中的三種模塊路徑中描述延遲時(shí)主要就是通過這兩種連接方式進(jìn)行描述的.
2.1并行連接(Parallel Connection)
并行連接表示每條延遲路徑只有一個(gè)源端和目的端,其語法格式如下:
(
其中delay_value可以為1~3個(gè)延遲量表達(dá)方式,延遲量也可以采用"最小值:典型值:最大值"的形式,如果延遲量多于兩個(gè),則可以使用小括號(hào)將延遲量包括其來,延遲量之間用逗號(hào)分隔.
2.2全連接(Full Connection)
全連接中源端中的每一位可以與目的端中的每一位相連接,即使源端位數(shù)與目的端位數(shù)不一致也可以,其格式如下:
(
其中delay_value的指定方式同并行連接.
下面是上述兩種連接方式的示意圖和注意事項(xiàng)和區(qū)別:
不管是并行連接還是全連接,都可以應(yīng)用于模塊路徑延遲的三種類型中.
2.3模塊路徑
2.3.1簡(jiǎn)單路徑
一般只包含*>和=>連接的路徑,在其中僅描述簡(jiǎn)單的源端到目的端的延遲,屬于基本模塊路徑延遲表示形式.
2.3.2邊沿敏感路徑
主要用來描述信號(hào)在特定邊沿事件發(fā)生時(shí)數(shù)據(jù)從源端傳遞到目的端的路徑,其中延遲主要指的是邊沿敏感事件發(fā)生時(shí)刻到數(shù)據(jù)信號(hào)傳遞到目的端的時(shí)間,常用的格式如下:
【示例】
【仿真結(jié)果】
示例中,在時(shí)刻5ns時(shí),clk發(fā)生上升沿事件,經(jīng)過10ns延遲后信號(hào)dat_in的上升變化傳遞到了輸出端dat_out.在時(shí)刻15ns時(shí),clk再次發(fā)生上升沿事件,經(jīng)過8ns延遲后信號(hào)dat_in的下降變化傳遞到了輸出端dat_out,后續(xù)變化與此雷同,不再贅述.可見此時(shí)的延遲指的是采樣事件發(fā)生到輸出的延遲,并不是數(shù)據(jù)輸入端到數(shù)據(jù)輸出端的延遲.這里需要注意的是在dat_out和dat_in之間指定傳輸方向是使用了極性操作符"+",主要表示輸入到輸出是否取反,如果要對(duì)數(shù)據(jù)取反可以將"+"換為"-",但是這里需要注意這個(gè)操作符對(duì)于仿真來說不會(huì)產(chǎn)生任何影響,即在仿真時(shí)不會(huì)出現(xiàn)取反現(xiàn)象,僅對(duì)時(shí)序分析工具會(huì)產(chǎn)生影響.
【示例】
【仿真結(jié)果】
示例中,在5ns時(shí),clk發(fā)生上升沿事件,在clk下一次跳變發(fā)生前dat_in保持0,dat_in沒有發(fā)生變化,dat_out保持不變.在10ns時(shí),clk發(fā)生下降沿事件,dat_in的值應(yīng)該在clk下降沿事件之后10ns后更新至dat_out,但是在clk下一次跳變發(fā)生前dat_in變?yōu)榱?,即dat_in發(fā)生了上升變化,所以,此時(shí)最終更新至dat_out的值為dat_in的最新值,并且發(fā)生在clk下降沿事件發(fā)生后的10ns處,即20ns時(shí)刻.在20ns時(shí),clk發(fā)生下降沿變化,此時(shí)dat_in為1,但是在clk下一次跳邊沿之前dat_in變?yōu)榱?,即dat_in發(fā)生了下降沿變化,所以,此時(shí)最終更新至dat_out的值為dat_in的最新值0,并且發(fā)生在clk下降沿事件發(fā)生后的8ns處,即28ns時(shí)刻.后續(xù)變化分析類似,不再贅述.
2.3.3條件相關(guān)路徑(狀態(tài)依賴路徑)
在指定條件成立的情況下,才會(huì)將延遲作用于模塊路徑,格式如下:
【示例】
【仿真結(jié)果】
示例中,在sel不為高時(shí),此時(shí)在specify塊中指定的模塊路徑延遲并不會(huì)并不會(huì)作用到dat_in到dat_out這條路徑上.但是在sel為高后,此時(shí)specify塊中指定的模塊路徑延遲會(huì)作用到從dat_in傳遞到dat_out的數(shù)據(jù).這里需要注意的是,在specify塊中指定條件的if語句塊不能使用else分支結(jié)構(gòu).
3分布延遲和模塊路徑延遲同時(shí)存在情況
一般情況下,一個(gè)模塊中不止會(huì)包含specify塊,還會(huì)包含大量的門單元,在specify塊中會(huì)指定模塊路徑延遲,模塊內(nèi)的路徑上各個(gè)基本單元(可以是基本的門級(jí)單元、開關(guān)級(jí)元件或者子模塊)又存在分布延遲,模塊中這兩種延遲經(jīng)常會(huì)共存,那么此時(shí)進(jìn)行仿真時(shí)應(yīng)該使用哪種延遲呢?下面通過下面電路進(jìn)行示例說明兩種延遲對(duì)于信號(hào)在模塊中傳遞是如何產(chǎn)生影響的.
【電路結(jié)構(gòu)】電路中存在三個(gè)輸入端口in1、in2、in3和一個(gè)輸出端out,并且in1到out的模塊路徑延遲為4個(gè)時(shí)間單位,in2到out的模塊路徑延遲為6個(gè)時(shí)間單位,in3到out的模塊路徑延遲為1個(gè)時(shí)間單位,或門產(chǎn)生延遲為2,與非門延遲3.
【示例】
【仿真結(jié)果】
示例中針對(duì)幾個(gè)時(shí)間點(diǎn)變化匯總?cè)缦拢?/p>
在10ns時(shí),in1變?yōu)?,in2為0,in3為1,此時(shí)in1和in2經(jīng)過或操作輸出wnet,且或門延遲為2,所以wnet延遲2個(gè)時(shí)間單位后變化,wnet和in3經(jīng)過與非門后輸出至out,因?yàn)榇藭r(shí)wnet和in3連接的與非門門延遲為3,所以wnet變化后3個(gè)時(shí)間單位變化更新至out,此時(shí)out變?yōu)?,可見此時(shí)從端口in1信號(hào)的變化到輸出端輸出的延遲時(shí)間不是in1和out之間指定的模塊路徑延遲4,而是該路徑經(jīng)過的所有門單元延遲總和,即是該路徑分布延遲值;
在30ns時(shí),in2從0變?yōu)榱?,in1為0,in3為1,此時(shí)in1和in2經(jīng)過或操作輸出wnet,且或門延遲為2,所以wnet延遲2個(gè)時(shí)間單位后變化,wnet和in3經(jīng)過與非門后輸出至out,雖然此時(shí)wnet和in3連接的與非門門延遲為3,但是因?yàn)閺亩丝趇n2信號(hào)的變化延遲到輸出端輸出的分布延遲為2+3=5,小于從in2到out的模塊路徑延遲6,所以此時(shí)從端口in2信號(hào)的變化到輸出端輸出的延遲時(shí)間為6;
在60ns時(shí),in3從1變?yōu)榱?,in1為0,in2為1,此時(shí)因?yàn)閕n1和in2都沒有變化,所有wnet保持1,所以此時(shí)影響輸出的只有in3,in3在60ns變化后,out發(fā)生變化的時(shí)間為3ns,即與非門的門延遲值,并不是in3到out的模塊路徑延遲1;
通過上述三個(gè)時(shí)間點(diǎn)in1、in2、in3的分別變化到out輸出的延遲情況可以看出,模塊端口的最終延遲取決于分布延遲和模塊路徑延遲中的最大者,因此本電路輸入端口到輸出端口的延遲可以表示如下表所示.
選項(xiàng) | 分布延遲 | 模塊路徑延遲 | 最終延遲 |
in1 -> out | 2+3=5 | 4 | 5 |
in2 -> out | 2+3=5 | 6 | 6 |
in3 -> out | 3 | 1 | 3 |
最后,大家需要注意,上述這些延遲的單位和精度為當(dāng)前模塊使用的時(shí)間單位和時(shí)間精度.
審核編輯 :李倩
-
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110223 -
模型
+關(guān)注
關(guān)注
1文章
3290瀏覽量
49020
原文標(biāo)題:SystemVerilog/Verilog中的各種延遲模型
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論