0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SystemVerilog/Verilog中的各種延遲模型

sanyue7758 ? 來源:處芯積律 ? 2023-04-09 10:26 ? 次閱讀

為了在仿真階段能夠模擬物理器件的延遲,進(jìn)行結(jié)構(gòu)模型建模,SystemVerilog/Verilog中提供了兩種類型的延遲用以模擬信號經(jīng)過模型時的傳輸延遲,這兩種延遲分別是:分布延遲(Distributed Delay)和模塊路徑延遲(Module Path Delay).本文及下面一篇將針對這兩種延遲分別進(jìn)行示例說明.

1 分布延遲(Distributed Delay)

分布延遲指模塊內(nèi)信號從邏輯門的輸入到輸出或者線網(wǎng)的延遲,這里我們僅以邏輯門延遲為例進(jìn)行說明.常見的門延遲主要有三種,如下圖:

9a3ed986-d629-11ed-bfe3-dac502259ad0.png

【注意】如果信號從0/1/z變化到x,那么此時的門傳輸延遲為上述三種延遲最小的.另外,在進(jìn)行仿真時,有些邏輯門的輸出不可能會出現(xiàn)高阻態(tài)z,所以對于這些邏輯門實際上就不存在關(guān)斷延遲了,類似的邏輯門有:and、nand、or、nor、xor、xnor、buf和not等.

1.1 門級延遲的格式

9a490406-d629-11ed-bfe3-dac502259ad0.png

其中delay用于指定延遲,如果不指定,則所有延遲的默認(rèn)值為0.如果指定,主要有兩種形式:

?基本延遲表達(dá)式;

?"最小值:典型值:最大值"形式;

并且這兩種形式結(jié)合不同的延遲類型經(jīng)常會混合使用,下面我們針對兩種形式進(jìn)行說明:

1.2 基本延遲表達(dá)式

針對延遲的類型,基本延遲一般不指定"最小值:典型值:最大值",可以簡單粗暴的認(rèn)為在簡單延遲中,最小值、典型值和最大值可以認(rèn)為是相同的,常見的簡單延遲使用格式如下表示例.

延遲類型 無延遲 1個延遲值(d) 2個延遲值(d1,d2) 3個延遲值(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 "最小值:典型值:最大值"形式

采用這種方式表示延遲時,延遲中的每一項將都以"最小值:典型值:最大值"形式出現(xiàn),根據(jù)具體指定的延遲的個數(shù),其常見格式如下:

9a50cc22-d629-11ed-bfe3-dac502259ad0.png

【示例:指定一個延遲】and #(13) u(out,d1,d2);

工況 上升延遲 下降延遲 輸出為x延遲 關(guān)斷延遲
最小 1 1 1 1
典型 2 2 2 2
最大 3 3 3 3

此時的各種延遲在特定工況下的值都是相同的.

【示例:指定二個延遲】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)

此時的兩個延遲分別指的是上升延遲和下降延遲,關(guān)斷和輸出為x的延遲取決于每種工況下上升延遲和下降延遲的最小值.

【示例:指定三個延遲】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

此時的三個延遲分別指的是上升延遲、下降延遲和關(guān)斷延遲,輸出為x的延遲取決于每種工況下上升延遲、下降延遲和關(guān)斷延遲的最小值.

門單元可以指定這么多種的延遲,那么在進(jìn)行仿真時如何告訴仿真器應(yīng)該使用哪種工況下指定的延遲呢?目前在使用主流EDA工具進(jìn)行仿真時可以針對需要使用的延遲在命令參數(shù)中指定"+mindelays"(對應(yīng)最小值,此時所有的延遲取最小值)、"+typdelays"(對應(yīng)典型值,此時所有的延遲取典型值)、"+maxdelays"(對應(yīng)最大值,此時所有的延遲取最大值)來實現(xiàn),但是每次仿真時只能指定一種延遲模式,并且這種選擇在仿真過程中是不能修改的.

2模塊路徑延遲(Module Path Delay)

模塊路徑延遲描述的是模塊中信號從源端到目的端傳輸?shù)难舆t,這些路徑以及對應(yīng)的延遲是在模塊中的specify塊中指定的,其中信號源端一般為input或者inout,而目的端則只能為output或者inout.在specify中指定的模塊路徑,常見的形式主要三種,分別是:簡單路徑(Simple Path),邊沿敏感路徑(Edge Secsitive Path)和條件相關(guān)路徑(State-dependent Path).

在這三種路徑中根據(jù)源端和目的端之間路徑的可能連接方式又分為兩種:并行連接(Parallel Connection)和全連接(Full Connection),在specify塊中的三種模塊路徑中描述延遲時主要就是通過這兩種連接方式進(jìn)行描述的.

2.1并行連接(Parallel Connection)

并行連接表示每條延遲路徑只有一個源端和目的端,其語法格式如下:

(=>) = ;

其中delay_value可以為1~3個延遲量表達(dá)方式,延遲量也可以采用"最小值:典型值:最大值"的形式,如果延遲量多于兩個,則可以使用小括號將延遲量包括其來,延遲量之間用逗號分隔.

2.2全連接(Full Connection)

全連接中源端中的每一位可以與目的端中的每一位相連接,即使源端位數(shù)與目的端位數(shù)不一致也可以,其格式如下:

(*>) = ;

其中delay_value的指定方式同并行連接.

下面是上述兩種連接方式的示意圖和注意事項和區(qū)別:

9a588228-d629-11ed-bfe3-dac502259ad0.png

不管是并行連接還是全連接,都可以應(yīng)用于模塊路徑延遲的三種類型中.

2.3模塊路徑

2.3.1簡單路徑

一般只包含*>和=>連接的路徑,在其中僅描述簡單的源端到目的端的延遲,屬于基本模塊路徑延遲表示形式.

2.3.2邊沿敏感路徑

主要用來描述信號在特定邊沿事件發(fā)生時數(shù)據(jù)從源端傳遞到目的端的路徑,其中延遲主要指的是邊沿敏感事件發(fā)生時刻到數(shù)據(jù)信號傳遞到目的端的時間,常用的格式如下:

9a6224b8-d629-11ed-bfe3-dac502259ad0.png

【示例】

9a680a5e-d629-11ed-bfe3-dac502259ad0.png

【仿真結(jié)果】

9a6f5da4-d629-11ed-bfe3-dac502259ad0.png

示例中,在時刻5ns時,clk發(fā)生上升沿事件,經(jīng)過10ns延遲后信號dat_in的上升變化傳遞到了輸出端dat_out.在時刻15ns時,clk再次發(fā)生上升沿事件,經(jīng)過8ns延遲后信號dat_in的下降變化傳遞到了輸出端dat_out,后續(xù)變化與此雷同,不再贅述.可見此時的延遲指的是采樣事件發(fā)生到輸出的延遲,并不是數(shù)據(jù)輸入端到數(shù)據(jù)輸出端的延遲.這里需要注意的是在dat_out和dat_in之間指定傳輸方向是使用了極性操作符"+",主要表示輸入到輸出是否取反,如果要對數(shù)據(jù)取反可以將"+"換為"-",但是這里需要注意這個操作符對于仿真來說不會產(chǎn)生任何影響,即在仿真時不會出現(xiàn)取反現(xiàn)象,僅對時序分析工具會產(chǎn)生影響.

9a79622c-d629-11ed-bfe3-dac502259ad0.png

【示例】

9a7e97c4-d629-11ed-bfe3-dac502259ad0.png

【仿真結(jié)果】

9a868222-d629-11ed-bfe3-dac502259ad0.png

示例中,在5ns時,clk發(fā)生上升沿事件,在clk下一次跳變發(fā)生前dat_in保持0,dat_in沒有發(fā)生變化,dat_out保持不變.在10ns時,clk發(fā)生下降沿事件,dat_in的值應(yīng)該在clk下降沿事件之后10ns后更新至dat_out,但是在clk下一次跳變發(fā)生前dat_in變?yōu)榱?,即dat_in發(fā)生了上升變化,所以,此時最終更新至dat_out的值為dat_in的最新值,并且發(fā)生在clk下降沿事件發(fā)生后的10ns處,即20ns時刻.在20ns時,clk發(fā)生下降沿變化,此時dat_in為1,但是在clk下一次跳邊沿之前dat_in變?yōu)榱?,即dat_in發(fā)生了下降沿變化,所以,此時最終更新至dat_out的值為dat_in的最新值0,并且發(fā)生在clk下降沿事件發(fā)生后的8ns處,即28ns時刻.后續(xù)變化分析類似,不再贅述.

2.3.3條件相關(guān)路徑(狀態(tài)依賴路徑)

在指定條件成立的情況下,才會將延遲作用于模塊路徑,格式如下:

9a8c7e48-d629-11ed-bfe3-dac502259ad0.png

【示例】

9a95e4d8-d629-11ed-bfe3-dac502259ad0.png

【仿真結(jié)果】

9a9e38d6-d629-11ed-bfe3-dac502259ad0.png

示例中,在sel不為高時,此時在specify塊中指定的模塊路徑延遲并不會并不會作用到dat_in到dat_out這條路徑上.但是在sel為高后,此時specify塊中指定的模塊路徑延遲會作用到從dat_in傳遞到dat_out的數(shù)據(jù).這里需要注意的是,在specify塊中指定條件的if語句塊不能使用else分支結(jié)構(gòu).

3分布延遲和模塊路徑延遲同時存在情況

一般情況下,一個模塊中不止會包含specify塊,還會包含大量的門單元,在specify塊中會指定模塊路徑延遲,模塊內(nèi)的路徑上各個基本單元(可以是基本的門級單元、開關(guān)級元件或者子模塊)又存在分布延遲,模塊中這兩種延遲經(jīng)常會共存,那么此時進(jìn)行仿真時應(yīng)該使用哪種延遲呢?下面通過下面電路進(jìn)行示例說明兩種延遲對于信號在模塊中傳遞是如何產(chǎn)生影響的.

【電路結(jié)構(gòu)】電路中存在三個輸入端口in1、in2、in3和一個輸出端out,并且in1到out的模塊路徑延遲為4個時間單位,in2到out的模塊路徑延遲為6個時間單位,in3到out的模塊路徑延遲為1個時間單位,或門產(chǎn)生延遲為2,與非門延遲3.

9aa747a0-d629-11ed-bfe3-dac502259ad0.png

【示例】

9aaf74ca-d629-11ed-bfe3-dac502259ad0.png

【仿真結(jié)果】

9abdcc82-d629-11ed-bfe3-dac502259ad0.png

示例中針對幾個時間點變化匯總?cè)缦拢?/p>

在10ns時,in1變?yōu)?,in2為0,in3為1,此時in1和in2經(jīng)過或操作輸出wnet,且或門延遲為2,所以wnet延遲2個時間單位后變化,wnet和in3經(jīng)過與非門后輸出至out,因為此時wnet和in3連接的與非門門延遲為3,所以wnet變化后3個時間單位變化更新至out,此時out變?yōu)?,可見此時從端口in1信號的變化到輸出端輸出的延遲時間不是in1和out之間指定的模塊路徑延遲4,而是該路徑經(jīng)過的所有門單元延遲總和,即是該路徑分布延遲值;

在30ns時,in2從0變?yōu)榱?,in1為0,in3為1,此時in1和in2經(jīng)過或操作輸出wnet,且或門延遲為2,所以wnet延遲2個時間單位后變化,wnet和in3經(jīng)過與非門后輸出至out,雖然此時wnet和in3連接的與非門門延遲為3,但是因為從端口in2信號的變化延遲到輸出端輸出的分布延遲為2+3=5,小于從in2到out的模塊路徑延遲6,所以此時從端口in2信號的變化到輸出端輸出的延遲時間為6;

在60ns時,in3從1變?yōu)榱?,in1為0,in2為1,此時因為in1和in2都沒有變化,所有wnet保持1,所以此時影響輸出的只有in3,in3在60ns變化后,out發(fā)生變化的時間為3ns,即與非門的門延遲值,并不是in3到out的模塊路徑延遲1;

通過上述三個時間點in1、in2、in3的分別變化到out輸出的延遲情況可以看出,模塊端口的最終延遲取決于分布延遲和模塊路徑延遲中的最大者,因此本電路輸入端口到輸出端口的延遲可以表示如下表所示.

選項 分布延遲 模塊路徑延遲 最終延遲
in1 -> out 2+3=5 4 5
in2 -> out 2+3=5 6 6
in3 -> out 3 1 3

最后,大家需要注意,上述這些延遲的單位和精度為當(dāng)前模塊使用的時間單位和時間精度.

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1338

    瀏覽量

    109861
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3065

    瀏覽量

    48578

原文標(biāo)題:SystemVerilog/Verilog中的各種延遲模型

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    SystemVerilog的Virtual Methods

    SystemVerilog多態(tài)能夠工作的前提是父類的方法被聲明為virtual的。
    發(fā)表于 11-28 11:12 ?658次閱讀

    systemverilog學(xué)習(xí)教程

    systemverilog的一些基本語法以及和verilog語言之間的區(qū)別。
    發(fā)表于 04-01 14:24

    verilog在psoc延遲

    大家好使用Verilog語言,可以在PSoC創(chuàng)建類似CysDelay-()、CysDelayUs()的毫秒級或微秒級延遲?!魏稳苏垘椭胰绾问褂?b class='flag-5'>Verilog在PSoC
    發(fā)表于 11-06 14:17

    使用SystemVerilog來簡化FPGA接口的連接方式

    FPGA接口的連接方式?! ??也許很多FPGA工程師對SystemVerilog并不是很了解,因為以前的FPGA開發(fā)工具是不支持SystemVerilog的,導(dǎo)致大家都是用VHDL或者Ve
    發(fā)表于 01-08 17:23

    循環(huán)模型編譯器Verilog和System Verilog語言支持指南

    本節(jié)介紹循環(huán)模型編譯器響應(yīng)不受支持或被忽略的構(gòu)造的行為。 一般而言,Cycle Model Compiler支持VerilogSystemVerilog語言的大部分可合成子集。 如果周期模型
    發(fā)表于 08-12 06:55

    SystemVerilog 3.1a語言參考手冊

    本參考手冊詳細(xì)描述了Accellera為使用Verilog硬件描述語言在更高的抽象層次上進(jìn)行系統(tǒng)的建模和驗證所作的擴(kuò)展。這些擴(kuò)展將Verilog語言推向了系統(tǒng)級空間和驗證級空間。SystemVerilog
    發(fā)表于 07-22 12:14 ?187次下載

    SystemC 和SystemVerilog的比較

    就 SystemC 和 SystemVerilog 這兩種語言而言, SystemC 是C++在硬件支持方面的擴(kuò)展,而 SystemVerilog 則繼承了 Verilog,并對 Verilo
    發(fā)表于 08-16 10:52 ?5334次閱讀

    使用Verilog/SystemVerilog硬件描述語言練習(xí)數(shù)字硬件設(shè)計

    HDLBits 是一組小型電路設(shè)計習(xí)題集,使用 Verilog/SystemVerilog 硬件描述語言 (HDL) 練習(xí)數(shù)字硬件設(shè)計~
    的頭像 發(fā)表于 08-31 09:06 ?1597次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對象復(fù)制的概念是有區(qū)別的。
    的頭像 發(fā)表于 11-21 10:32 ?826次閱讀

    Verilog PLI到SystemVerilog DPI的演變過程

    寫過Verilogsystemverilog的人肯定都用過系統(tǒng)自定義的函數(shù)$display,這是預(yù)定好的,可以直接調(diào)用的功能。
    的頭像 發(fā)表于 05-16 09:27 ?827次閱讀
    從<b class='flag-5'>Verilog</b> PLI到<b class='flag-5'>SystemVerilog</b> DPI的演變過程

    verilog/systemverilog隱藏的初始化說明

    VerilogSystemVerilog中經(jīng)常需要在使用變量或者線網(wǎng)之前,期望變量和線網(wǎng)有對應(yīng)的初始值
    的頭像 發(fā)表于 08-25 09:47 ?962次閱讀
    <b class='flag-5'>verilog</b>/<b class='flag-5'>systemverilog</b><b class='flag-5'>中</b>隱藏的初始化說明

    verilog-2005和systemverilog-2017標(biāo)準(zhǔn)規(guī)范

    作為邏輯工程師,在FPGA和數(shù)字IC開發(fā)和設(shè)計,一般采用verilog,VHDL或SystemVerilog等作為硬件描述語言進(jìn)行工程設(shè)計,將一張白板描繪出萬里江山圖景。
    的頭像 發(fā)表于 09-04 10:10 ?2480次閱讀
    <b class='flag-5'>verilog</b>-2005和<b class='flag-5'>systemverilog</b>-2017標(biāo)準(zhǔn)規(guī)范

    SystemVerilog在硬件設(shè)計部分有哪些優(yōu)勢

    談到SystemVerilog,很多工程師都認(rèn)為SystemVerilog僅僅是一門驗證語言,事實上不只如此。傳統(tǒng)的Verilog和VHDL被稱為HDL(Hardware Description
    的頭像 發(fā)表于 10-19 11:19 ?1049次閱讀
    <b class='flag-5'>SystemVerilog</b>在硬件設(shè)計部分有哪些優(yōu)勢

    SystemVerilog相比于Verilog的優(yōu)勢

    我們再從對可綜合代碼的支持角度看看SystemVerilog相比于Verilog的優(yōu)勢。針對硬件設(shè)計,SystemVerilog引入了三種進(jìn)程always_ff,always_comb
    的頭像 發(fā)表于 10-26 10:05 ?823次閱讀
    <b class='flag-5'>SystemVerilog</b>相比于<b class='flag-5'>Verilog</b>的優(yōu)勢

    如何利用Verilog-A開發(fā)器件模型

    Verilog-A對緊湊型模型的支持逐步完善,在模型的實現(xiàn)上扮演越來越重要的角色,已經(jīng)成為緊湊模型開發(fā)的新標(biāo)準(zhǔn)。而且Verilog-A能夠在
    的頭像 發(fā)表于 10-18 14:16 ?131次閱讀
    如何利用<b class='flag-5'>Verilog</b>-A開發(fā)器件<b class='flag-5'>模型</b>