女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Systemverilog中的Driving Strength講解

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

在systemverilog中,net用于對電路中連線進行建模,driving strength(驅動強度)可以讓net變量值的建模更加精確。net變量擁有4態邏輯值(0,1,z,x),它的driving strength有(supply,strong,pull,weak,highz)。net的值由連接到net的driver源(驅動源)決定的,這些driver源可以是連續賦值語句(例如assign),也可以是門級建模原語(例如門級or或and或cmos等)。

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

需要注意的是driving strength是用于gate輸出和連續賦值語句輸出的(assign)。對于非net類型的多驅動,仿真工具會報多驅的編譯錯誤。

Systemverilog的driving strength level(驅動強度)有以下幾種:

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的語法如下:

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表示當驅動源驅動net為0時的驅動強度。Strength1表示當驅動源驅動net為1時的驅動強度。

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

結合上面的理論講解,給出1個例子如下:

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結果為:

# [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驅動i1的值,其中strength1為supply1(level=7),strength0為weak0(level=3)。12行給net類型的out驅動i2的值,其中strength1為pull1(level=5),strength為supply0(level=7)。

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

image.png

Driving strength還有很多其它的組合,大家可以復制上述代碼,并修改assign out語句的strength0與strength1去產生其它的組合并分析結果。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    54

    文章

    8619

    瀏覽量

    149045
  • 仿真器
    +關注

    關注

    14

    文章

    1033

    瀏覽量

    84941
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8483
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    SystemVerilog的Virtual Methods

    SystemVerilog多態能夠工作的前提是父類的方法被聲明為virtual的。
    發表于 11-28 11:12 ?830次閱讀

    SystemVerilog的“const”類屬性

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

    SystemVerilog的聯合(union)介紹

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

    protel的“have no driving source”問題

    畫原理圖的時候,在編譯時出現警告:have no driving source,請問有高手能否指點一下,如何解決
    發表于 06-14 11:20

    systemverilog學習教程

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

    SystemVerilog Assertion Handbo

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

    SystemVerilog的斷言手冊

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

    SystemVerilog$cast的應用

    SystemVerilog casting意味著將一種數據類型轉換為另一種數據類型。在將一個變量賦值給另一個變量時,SystemVerilog要求這兩個變量具有相同的數據類型。
    的頭像 發表于 10-17 14:35 ?3259次閱讀

    SystemVerilog的操作方法

    SystemVerilog提供了幾個內置方法來支持數組搜索、排序等功能。
    的頭像 發表于 10-31 10:10 ?3380次閱讀

    SystemVerilog可以嵌套的數據結構

    SystemVerilog除了數組、隊列和關聯數組等數據結構,這些數據結構還可以嵌套。
    的頭像 發表于 11-03 09:59 ?1889次閱讀

    SystemVerilog的package

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

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數據類型的集合。
    的頭像 發表于 11-07 10:18 ?2795次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對象復制的概念是有區別的。
    的頭像 發表于 11-21 10:32 ?1101次閱讀

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗語)是一個多個進程之間同步的機制之一,這里需要同步的原因是這多個進程共享某些資源。
    的頭像 發表于 12-12 09:50 ?3694次閱讀

    帶你了解SystemVerilog的關聯數組

    SystemVerilog,我們知道可以使用動態數組實現數組元素個數的動態分配,即隨用隨分
    的頭像 發表于 06-09 09:46 ?8139次閱讀
    帶你了解<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的關聯數組