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。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    51

    文章

    7319

    浏览量

    142986
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82997
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8160
收藏 人收藏

    评论

    相关推荐

    protel的“have no driving source”问题

    画原理图的时候,在编译时出现警告:have no driving source,请问有高手能否指点一下,如何解决
    发表于 06-14 11:20

    [启芯公开课] SystemVerilog for Verification

    学快速发展,这些趋势你了解吗?SystemVerilog + VM是目前的主流,在未来也将被大量采用,这些语言和方法学,你熟练掌握了吗?对SoC芯片设计验证感兴趣的朋友,可以关注启芯工作室推出的SoC芯片
    发表于 06-10 09:25

    systemverilog--语法详解

    官方的一个systemverilog详解,很详细。推荐给打算往IC方面发展的朋友。
    发表于 06-02 09:30

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    round robin 的 systemverilog 代码

    大家好,我对一个 round robin 的 systemverilog 代码有疑惑。https://www.edaplayground.com/x/2TzD代码第49和54行是怎么解析呢 ?
    发表于 03-14 19:16

    做FPGA工程师需要掌握SystemVerilog吗?

    在某大型科技公司的招聘网站上看到招聘逻辑硬件工程师需要掌握SystemVerilog语言,感觉SystemVerilog语言是用于ASIC验证的,那么做FPGA工程师有没有必要掌握SystemVerilog语言呢?
    发表于 08-02 20:30

    如何在SystemVerilog为状态机的命令序列的生成建模

     我们将展示如何在SystemVerilog为状态机的命令序列的生成建模,并且我们将看到它是如何实现更高效的建模,以及实现更好的测试生成。​
    发表于 01-01 06:05

    使用SystemVerilog来简化FPGA接口的连接方式

    FPGA接口的连接方式。    也许很多FPGA工程师对SystemVerilog并不是很了解,因为以前的FPGA开发工具是不支持SystemVerilog的,导致大家都是用VHDL或者Verilog来
    发表于 01-08 17:23

    SystemVerilog有哪些标准?

    SystemVerilog有哪些标准?
    发表于 06-21 08:09

    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的正式验证和混合验证

    手册的这一部分探讨了使用SystemVerilog进行验证,然后查看了使用SystemVerilog的优点和缺点。
    发表于 03-29 10:32 23次下载

    SystemVerilog中的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 1923次阅读

    SystemVerilog在硬件设计部分有哪些优势

    谈到SystemVerilog,很多工程师都认为SystemVerilog仅仅是一门验证语言,事实上不只如此。传统的Verilog和VHDL被称为HDL(Hardware Description
    的头像 发表于 10-19 11:19 458次阅读
    <b class='flag-5'>SystemVerilog</b>在硬件设计部分有哪些优势

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的头像 发表于 11-22 09:17 319次阅读
    分享一些<b class='flag-5'>SystemVerilog</b>的coding  guideline