SystemVerilog logic、wire、reg数据类型详解

这篇具有很好参考价值的文章主要介绍了SystemVerilog logic、wire、reg数据类型详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在Verilog中,wirereg是最常见的两种数据类型,也是初学者非常容易混淆的概念。           SystemVerilog的一大改进是支持logic数据类型,它在多数时候可以不加区分地替代wirereg。但如果不熟悉logic的限制随意使用,也容易遇到意想不到的错误。本文主要对比三种数据类型的区别,并总结它们的使用方法。

Verilog的wire和reg类型

在Verilog中,由于需要描述不同的硬件结构,数据类型总体分为netvariable两大类。

net类型设计用于表示导线结构,它不存储状态,只能负责传递驱动级的输出。net类型数据需要使用assign关键字连续赋值(continuous assignment)。虽然assign语句一般被综合成组合逻辑,但net本质还是导线,真正被综合成组合逻辑的是assign右边的逻辑运算表达式。常见的net类型数据包括wiretriwandsupply0等。

variable类型设计用于表示存储结构,它内部存储状态,并在时钟沿到来或异步信号改变等条件触发时改变内部状态。variable类型数据需要使用过程赋值(procedural assignment),即赋值定义在alwaysinitialtaskfunction语法块中。reg是最典型的variable类型数据,但需要说明的是,综合工具可能将reg优化综合成组合逻辑,并不一定是寄存器。常见的variable类型数据包括regintegertimerealrealtime等。

所以总结Verilog wire和reg的区别:

  • wire表示导线结构,reg表示存储结构。
  • wire使用assign赋值,reg赋值定义在alwaysinitialtaskfunction代码块中。
  • wire赋值综合成组合逻辑,reg可能综合成时序逻辑,也可能综合成组合逻辑。

SystemVerilog的logic类型

SystemVerilog在Verilog基础上新增支持logic数据类型,logicreg类型的改进,它既可被过程赋值也能被连续赋值,编译器可自动推断logicreg还是wire。唯一的限制是logic只允许一个输入,不能被多重驱动,所以inout类型端口不能定义为logic。不过这个限制也带来了一个好处,由于大部分电路结构本就是单驱动,如果误接了多个驱动,使用logic在编译时会报错,帮助发现bug。所以单驱动时用logic,多驱动时用wire

        在Jason的博客评论中,Evan还提到一点logicwire的区别。wire定义时赋值是连续赋值,而logic定义时赋值只是赋初值,并且赋初值是不能被综合的。

wire mysignal0 = A & B;     // continuous assignment, AND gate
logic mysignal1 = A & B;    // not synthesizable, initializes mysignal1 to the value of A & B at time 0 and then makes no further changes to it.
logic mysignal2;
assign mysignal2 = A & B;   // Continuous assignment, AND gate

所以总结SystemVerilog logic的使用方法:

  • 单驱动时logic可完全替代regwire,除了Evan提到的赋初值问题。
  • 多驱动时,如inout类型端口,使用wire

参考资料

[1]https://www.verilogpro.com/verilog-reg-verilog-wire-systemverilog-logic

[2] Spear, Chris. SystemVerilog for Verification, Second Edition: A Guide to Learning the Testbench Language Features. Springer, 2008.文章来源地址https://www.toymoban.com/news/detail-739132.html

到了这里,关于SystemVerilog logic、wire、reg数据类型详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅显易懂-Verilog中什么时候用wire?什么时候用reg?wire与reg只有又有啥区别?如何去选择性的使用呢?

    在使用FPGA的时候我们经常会遇到这样一个问题,这个信号我们到底是定义成wire类型还是定义成reg类型,如果定义不对编译软件也会通不过,有时候你通过编译软件的的提示将它改了回来,但你却并不明白是为什么会报错,而且下次还会再出现,当它再次出现时,我们又得重

    2024年02月04日
    浏览(32)
  • FPGA设计Verilog基础之数据类型的作用和特点、常量和变量的代码示例详解

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus 在Verilog中,有多种数据类型可供使用,包括位向量类型、整数类型、实数类型、布尔型、时间类型和字符串类型等。下面详细介绍Verilog的所

    2024年02月03日
    浏览(37)
  • wire和reg型变量的组合使用

    实现寄存器之间的连线 实现寄存器的声明 建构时钟的时序系统 `timescale 1ns / 1ps /* */ 声明寄存器 reg类型变量实际上是对FF(除法器)的快速声明方法 使用FDCE的原语可以实现寄存器的准确描述,但是比较少用 其中位宽的作用是声明多个FDCE组合成寄存器组,实现多bit数据的处理

    2024年03月28日
    浏览(37)
  • 【FPGA学习记录3-1】Verilog语法之Verilog的数据类型

    写在前面 本科时学过FPGA的相关课程,因此对于Verilog相关语法的学习重在回顾。 1.Verilog的数据类型 Verilog 最常用的 2 种数据类型就是 线(wire)与寄存器(reg) ,其余类型可以理解为这两种数据类型的扩展或辅助。 1.1wire类型 wire 类型表示硬件单元之间的物理连线,由其连接

    2024年02月02日
    浏览(37)
  • 数字逻辑电路设计例化模块输入输出,何时用reg,何时用wire?

    初学者应该总会遇到这个问题,许多资料都介绍的是:        reg  寄存器类型可以存储数据,wire 是一根线,不能存储保持数据,是如此,但是在例化模块,或者调用通用的fifo模板,算法模板时候,难免经常连线,用寄存器打拍~~~        下图中,绿色部分是子模块,灰色

    2024年02月12日
    浏览(35)
  • SystemVerilog 第2章:数据类型

            在 Verilog中,初学者经常分不清reg和wire两者的区别。应该使用它们中哪一个来驱动端口?连接不同模块时又该如何做? Systemverilog对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改

    2024年02月15日
    浏览(33)
  • Verilog中 reg,integer

    整数(integer) integer类型也是一种寄存器数据类型,integer类型的变量为有符号数,而reg类型的变量则为无符号数,除非特别声明为有符号数 还有就是integer的位宽为宿主机的字的位数,但最小为32位,用integer的变量都可以用reg定义,只是用于计数更方便而已。 reg,integer,real,

    2024年02月13日
    浏览(33)
  • Verilog给reg型变量赋初值

    在使用Verilog进行开发时,有的reg型变量需要赋初值。经过尝试,有三种方法可以实现给reg变量赋初值。(测试使用的是EP4CE6E22C8开发板,测试时使用串口将变量值发给上位机。) 1、在定义reg变量时赋初值: 2、复位时给reg变量赋值; 3、用initial语句赋初值: 但是很多资料说

    2024年02月11日
    浏览(34)
  • systemverilog/verilog文件操作

            Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1.1、打开和关闭文件 文件操作选项: 1.1.2、写文件         每个系统函数都以基数十进制打印值。它们还有其他三个版本,可以以二进制、八进制和十

    2024年01月21日
    浏览(34)
  • Verilog FPGA实现倍频方法详解

    Verilog FPGA实现倍频方法详解 在FPGA中实现倍频是一个常见的任务,Verilog作为一种硬件描述语言,在这个过程中发挥了重要作用。本文将会详细介绍使用Verilog语言实现倍频的方法,并提供相应的代码和描述。 在Verilog中实现倍频的方法有很多种,这里我们将介绍其中一种简单有

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包