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

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

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

Systemverilog中的Driving Strength講解

冬至子 ? 來(lái)源:CSDN ? 作者:谷公子 ? 2023-06-14 15:50 ? 次閱讀

在systemverilog中,net用于對(duì)電路中連線進(jìn)行建模,driving strength(驅(qū)動(dòng)強(qiáng)度)可以讓net變量值的建模更加精確。net變量擁有4態(tài)邏輯值(0,1,z,x),它的driving strength有(supply,strong,pull,weak,highz)。net的值由連接到net的driver源(驅(qū)動(dòng)源)決定的,這些driver源可以是連續(xù)賦值語(yǔ)句(例如assign),也可以是門(mén)級(jí)建模原語(yǔ)(例如門(mén)級(jí)or或and或cmos等)。

在每個(gè)Δ仿真周期中,仿真器通過(guò)查看net上所有驅(qū)動(dòng)源的邏輯值(logical value)和強(qiáng)度值(strength level)來(lái)決定該net的邏輯值和強(qiáng)度值。如果net沒(méi)有驅(qū)動(dòng)源,那么它的值將是’z’態(tài)。如果net只有1個(gè)驅(qū)動(dòng)源,那么它的邏輯值和強(qiáng)度值等于驅(qū)動(dòng)源的值和強(qiáng)度。但是,如果net有多個(gè)驅(qū)動(dòng)源,那么需要比較它們的強(qiáng)度值了,強(qiáng)度最大的驅(qū)動(dòng)源將成功驅(qū)動(dòng)net。不過(guò)如果有多個(gè)強(qiáng)度最大的驅(qū)動(dòng)源,但它們的邏輯值不一樣的話,net的邏輯值將會(huì)是’x’態(tài),強(qiáng)度值是最強(qiáng)的strength。

需要注意的是driving strength是用于gate輸出和連續(xù)賦值語(yǔ)句輸出的(assign)。對(duì)于非net類型的多驅(qū)動(dòng),仿真工具會(huì)報(bào)多驅(qū)的編譯錯(cuò)誤。

Systemverilog的driving strength level(驅(qū)動(dòng)強(qiáng)度)有以下幾種:

image.png

上述strength level可以歸為3類:

  • Driving strength:supply,strong,pull和weak
  • Charge storage strength:large,medium和small
  • High impedance:highz

Charge storage strength只用于trireg類型的net。

Driving strength的語(yǔ)法如下:

drive_strength ::=
  ( strength0 , strength1 )
| ( strength1 , strength0 )
| ( strength0 , highz1 )
| ( strength1 , highz0 )
| ( highz0 , strength1 )
| ( highz1 , strength0 )
strength0 ::= supply0 | strong0 | pull0 | weak0
strength1 ::= supply1 | strong1 | pull1 | weak1
charge_strength ::= ( small ) | ( medium ) | ( large )

strength0表示當(dāng)驅(qū)動(dòng)源驅(qū)動(dòng)net為0時(shí)的驅(qū)動(dòng)強(qiáng)度。Strength1表示當(dāng)驅(qū)動(dòng)源驅(qū)動(dòng)net為1時(shí)的驅(qū)動(dòng)強(qiáng)度。

net默認(rèn)的strength level是(strong0, strong1)。對(duì)于pullup和pulldown gate,默認(rèn)的strength level是pull。trireg默認(rèn)的strength level是medium。Supply net的默認(rèn)strength level是supply。另外從上面syntax看出,(highz1, highz0)和(highz0, highz1)的strength level組合是非法的。

結(jié)合上面的理論講解,給出1個(gè)例子如下:

module strength;
  
  logic i1, i2;
  wire logic out;
  
  assign (supply1, weak0) out = i1;
  assign (pull1, supply0) out = i2;
  
  initial begin
    i1 = 1'b0;
    i2 = 1'b0;
    $strobe("[time:%0t],i1:%b, i2:%b, out:%b, out_strength:%v", $time, i1, i2, out, out);
    #1ns;
    i1 = 1'b0;
    i2 = 1'b1;
    $strobe("[time:%0t],i1:%b, i2:%b, out:%b, out_strength:%v", $time, i1, i2, out, out);
    #1ns;
    i1 = 1'b1;
    i2 = 1'b0;
    $strobe("[time:%0t],i1:%b, i2:%b, out:%b, out_strength:%v", $time, i1, i2, out, out);
    #1ns;
    i1 = 1'b1;
    i2 = 1'b1;
    $strobe("[time:%0t],i1:%b, i2:%b, out:%b, out_strength:%v", $time, i1, i2, out, out);
  end
  
endmodule

使用Questasim仿真輸出的log結(jié)果為:

# [time:0],i1=0, i2=0, out=0, out_strength=Su0
# [time:1],i1=0, i2=1, out=1, out_strength=Pu1
# [time:2],i1=1, i2=0, out=x, out_strength=SuX
# [time:3],i1=1, i2=1, out=1, out_strength=Su1

"assign (supply1, weak0) out = i1"行給net類型的out驅(qū)動(dòng)i1的值,其中strength1為supply1(level=7),strength0為weak0(level=3)。12行給net類型的out驅(qū)動(dòng)i2的值,其中strength1為pull1(level=5),strength為supply0(level=7)。

" assign (pull1, supply0) out = i2"行給net類型的out驅(qū)動(dòng)i2的值,其中strength1為pull1(level=5),strength為supply0(level=7)。

image.png

Driving strength還有很多其它的組合,大家可以復(fù)制上述代碼,并修改assign out語(yǔ)句的strength0與strength1去產(chǎn)生其它的組合并分析結(jié)果。

另外,大家可能好奇如何打印出net變量的strength level?在systemverilog中提供了%v格式化打印。%v的輸出是3個(gè)字符的string類型,前2個(gè)字符指示strength類型,第三個(gè)字符指示當(dāng)前邏輯值。比如上述log中的Su0或Pu1或SuX或Su1。

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

    關(guān)注

    52

    文章

    8099

    瀏覽量

    145817
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1014

    瀏覽量

    83591
  • Verilog語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8206
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SystemVerilog的Virtual Methods

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

    SystemVerilog的“const”類屬性

    SystemVerilog可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
    發(fā)表于 11-29 10:25 ?2071次閱讀

    SystemVerilog的聯(lián)合(union)介紹

    SystemVerilog ,聯(lián)合只是信號(hào),可通過(guò)不同名稱和縱橫比來(lái)加以引用。
    的頭像 發(fā)表于 10-08 15:45 ?1273次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯(lián)合(union)介紹

    protel的“have no driving source”問(wèn)題

    畫(huà)原理圖的時(shí)候,在編譯時(shí)出現(xiàn)警告:have no driving source,請(qǐng)問(wèn)有高手能否指點(diǎn)一下,如何解決
    發(fā)表于 06-14 11:20

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

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

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊(cè)

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    SystemVerilog$cast的應(yīng)用

    SystemVerilog casting意味著將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。在將一個(gè)變量賦值給另一個(gè)變量時(shí),SystemVerilog要求這兩個(gè)變量具有相同的數(shù)據(jù)類型。
    的頭像 發(fā)表于 10-17 14:35 ?2770次閱讀

    SystemVerilog的操作方法

    SystemVerilog提供了幾個(gè)內(nèi)置方法來(lái)支持?jǐn)?shù)組搜索、排序等功能。
    的頭像 發(fā)表于 10-31 10:10 ?2644次閱讀

    SystemVerilog可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog除了數(shù)組、隊(duì)列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1538次閱讀

    SystemVerilog的package

    SystemVerilog packages提供了對(duì)于許多不同數(shù)據(jù)類型的封裝,包括變量、task、function、assertion等等,以至于可以在多個(gè)module中共享。
    的頭像 發(fā)表于 11-07 09:44 ?1193次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數(shù)據(jù)類型的集合。
    的頭像 發(fā)表于 11-07 10:18 ?2356次閱讀

    SystemVerilog的Shallow Copy

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

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗語(yǔ))是一個(gè)多個(gè)進(jìn)程之間同步的機(jī)制之一,這里需要同步的原因是這多個(gè)進(jìn)程共享某些資源。
    的頭像 發(fā)表于 12-12 09:50 ?3273次閱讀

    帶你了解SystemVerilog的關(guān)聯(lián)數(shù)組

    SystemVerilog,我們知道可以使用動(dòng)態(tài)數(shù)組實(shí)現(xiàn)數(shù)組元素個(gè)數(shù)的動(dòng)態(tài)分配,即隨用隨分
    的頭像 發(fā)表于 06-09 09:46 ?7187次閱讀
    帶你了解<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的關(guān)聯(lián)數(shù)組