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

这篇具有很好参考价值的文章主要介绍了浅显易懂-Verilog中什么时候用wire?什么时候用reg?wire与reg只有又有啥区别?如何去选择性的使用呢?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用FPGA的时候我们经常会遇到这样一个问题,这个信号我们到底是定义成wire类型还是定义成reg类型,如果定义不对编译软件也会通不过,有时候你通过编译软件的的提示将它改了回来,但你却并不明白是为什么会报错,而且下次还会再出现,当它再次出现时,我们又得重复的去修改,这样不仅耽误我们开发的时间,而且还影响我们学习的心情,所以这篇文章就是帮助你如何正确使用wire和reg来定义一个信号。

1wire和reg的区别

我们知道Verilog是硬件描述语言,就是通过描述构造底层的硬件电路来实现我们所需要的功能,那么当我们在设计数字电路的过程中经常需要将不同的芯片的引脚相互连接起来,而这一个过程其实就是wire所定义的变量类型,事实上当你写下如下语句时wire busy;其实就是将某一连线命名为busy,接下来如何连线,就只需要对busy这个线型的信号进行操作了。而reg类型的变量则不同,他是一个寄存器类型的变量,寄存器的功能就是可以将我需要的数据保存在我的寄存器里面,里面的数据也可以根据我的需要随时变化,也就是说当你定义一个需要保存一段时间的数据时,你可以将它定义为一个寄存器变量,如果当你写下如下语句时,reg busy;这里就是将busy定义成为一个寄存器类型的变量,接下来你要如何去操作这个寄存器,就需要你用别的语句去描述了。综合来看wire就是给某个连线取名字,reg就是给某个寄存器取名字。理解这一点后其实就很好区分那个时候用wire那个时候用reg了。

2什么时候定义wire型变量

2.1输入变量input以及双向变量inout

输入进来的变量都会使用wire来定义,这是因为input的意思是输入引脚的意思,你输入到芯片内部的引脚是不可能具有存储功能的,一般你输入进来的变量都需要去连接到某个特定位置去参与逻辑运算。因此这个信号也都是做连线使用,所以一般定义为wire。同理inout也是这个原理必须使用wire来定义。

2.2例化过程中两个模块的连接

在进行例化的过程中我们经常遇到这种情形,需要将两个模块儿通过线连起来,这个时候,我们就需要定义一个线型的变量,两段分别连接两个模块所对应的引脚。

2.3assign语句被指定的对象也被定义为wire

assign本身的意思就是指定,例如

assign andv = a&b;

其中的意思就是指定andv的值为a&b的值,由于它不受时钟的约束,所以他是一个立即生成的组合逻辑,因此它不需要存储信号的值,也不能存储信号的值,因此这种语句在使用时被指定的信号只能用wire来定义它的变量类型。

2.4 部分output类型的变量

对于FPGA中的输出顶层只能为wire类型的变量,而被例化的模块儿内部的output既可以为wire型的变量也可以为reg型的变量,这是因为在FPGA内部的变量的输出取决于信号的源头是从组合电路中输出的还是从时序电路中输出的,无论那种输出对应的外部例化都有一个线与之连接,而顶层模块中的output直接是连接到外部的输出引脚,而这个输出的外部的真实引脚与内部的虚拟的信号必须要有一个信号线连接,所以这种情况就必须使用wire来作为信号的定义。

3什么时候定义reg型变量

3.1由always引导的时序逻辑电路

在时序逻辑电路中,信号不是立即发生变化,而是在驱动时钟到来后才开始变化,这种电路需要临时存储信号的信息,固需要用reg来定义时序逻辑电路中的变量。

3.2在做仿真是initial中的变量也用reg型变量定义

这是因为initial中的变量是需要你赋初值的,有初始值就需要你有相应的存储位置,那么这必定是一个reg类型的变量。

3.3部分output中的变量

在非顶层模块中的部分output中的变量如果是直接从时序逻辑电路中运算出来的信号,可以直接定义为reg类型的变量输出,如果直接从组合逻辑电路中输出来的电路信号则只需要定义成wire类型的变量即可。
总而言之,究竟在什么时候定义它的数据类型,完全取决于它的电路需要,我们上面所总结的几种情形是从我需要用在那些情形下,所以在这些情形下我应该定义什么样的参数类型,这其实是一种就着结果看方法的方式,最好的方式应该是我需要设计的电路电路早已胸有成竹,固我需要什么样的定义来服务我的电路。
熟能生巧,当你熟悉了以后,什么时候定义什么变量都是理所应当。如果觉得我的文章对你有用请给我点赞关注和收藏,如果有那那些不妥的地方请评论指正。文章来源地址https://www.toymoban.com/news/detail-763017.html

到了这里,关于浅显易懂-Verilog中什么时候用wire?什么时候用reg?wire与reg只有又有啥区别?如何去选择性的使用呢?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

    2024年02月06日
    浏览(27)
  • Java入门基础:浅显易懂 死循环

      死循环就是循环语句的 循环布尔表达式 一直为true,没有终止循环的条件或者终止循环的条件根本不可能达成   避免死循环的方法只有一个:给循环语句加上终止循环的条件

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

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

    2024年02月12日
    浏览(28)
  • 超详解线段树(浅显易懂,几乎涵盖所有线段树类型讲解,匠心之作,图文并茂)

    线段树是一种 二叉搜索树 ,而 二叉搜索树 ,首先 满足二叉树 ,即 每个结点 最多有 两颗子树 ,并且是一颗 搜索树 ,我们要知道,线段树的每个结点都存储了 一个区间 ,也可以理解成 一个线段 ,而 搜索 ,就是在这些 线段 上进行 搜索操作 得到你想要的 答案 。 线段树

    2024年02月05日
    浏览(26)
  • Verilog中 reg,integer

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

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

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

    2024年02月11日
    浏览(27)
  • idea创建项目的时候只有java 21和17

    今天创建项目,发现java这一项只有21和17 因为spring2在23年11月24日停止维护了,所以通过spring来创建,没有spring2,只有spring3+,最低jdk版本也是17 要是还想用spring2,可以更换 Server Url ,默认是spring的服务器地址 start.spring.io ,现在更换成阿里云的 https://start.aliyun.com ,更换以后,

    2024年01月19日
    浏览(37)
  • 什么是链游?链游又有哪些风险?

    最近随着元宇宙这个概念的兴起与发展,打着Play to Earn玩游戏挣钱的口号,链游以星火燎原的态势迅速发展。一边玩游戏,一边赚钱,可是很多人的梦想,那么到底什么是链游?链游就是区块链游戏,英文叫GameFi,区块链游戏把游戏与金融相融合,简单来说就是将去中心化的

    2024年02月11日
    浏览(24)
  • 什么是对象存储COS?它又有哪些优势?

    对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。 COS 通过控制台、API、SDK 和工具等多样化方式简单、快速地接入

    2024年01月16日
    浏览(50)
  • 路由器和交换机有什么区别各自又有什么作用

    随着社会的发展,很多家庭都拥有2台或者数台电脑,为了实现电脑的共同上网,路由器和交换机也慢慢的被更多人认知,但是由于家用路由器和交换机从外面看起来很像,很多人都不知道路由器和交换机的区别,以及各自又有什么作用。 路由器 路由器和交换机的区别:交换

    2024年02月07日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包