0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈Verilog中wire和reg变量类型的区别

454398 来源:CSDN博主 作者:MangoWen 2020-11-13 15:50 次阅读

wire 和reg是Verilog程序里的常见的两种变量类型,他们都是构成verilog程序逻辑最基本的元素。正确掌握两者的使用方法是写好verilog程序的前提。但同时,因为他们在大多数编程语言中不存在,很多新接触verilog语言的人并不能很清楚的区别两种变量的不同之处。这里简单对他们做一个比较,方便在编程时区别使用。

功能和状态

Wire主要起信号间连接作用,用以构成信号的传递或者形成组合逻辑。因为没有时序限定,wire的赋值语句通常和其他block语句并行执行。

Wire不保存状态,它的值可以随时改变,不受时钟信号限制。

除了可以在module内声明,所有module的input 和output默认都是wire型的。

Reg是寄存器的抽象表达,作用类似通常编程语言中的变量,可以储存数值,作为参与表达式的运算,通常负责时序逻辑,以串行方式执行。

Reg可以保存输出状态。状态改变通常在下一个时钟信号边沿翻转时进行。

赋值方式

Wire有两种赋值方式

1.在定义变量时赋初值,方式是用=。如果之后没有再做赋值,初值会一直保留,(是否可以给逻辑?)

wire wire_a = 1’b0;

2.用assign语句赋值,等式右边可以是wire,reg,一个常量或者是逻辑运算

Wire wire_a;
Wire wire_b;
Wire wire_c;
Reg reg_a;
assign wire_b = wire_a;
assign wire_c =reg_a;
assign wire_d =wire_b & wire_c;

如果不赋值,wire的默认状态是高阻态,即z。

对reg的使用通常需要有触发条件,在always的block下进行。触发条件可以是时钟信号上升沿。赋值语句可以是=或者

Wire wire_a;
Wire wire_b;
Reg reg_a;
Reg reg_b;
Always @( posedge clk)
Begin
Reg_b =reg_a;
Reg_c = wire_a | wire_b;
end

Reg在声明时候不赋初值。未赋值的reg变量处于不定态,即x。

使用方式

在引用一个module时,输入端口可以是wire型,也可以reg型。这里可以把对input的赋值看作一个assign语句,使用的变量相当于等号右边的变量,所以两者都可以。

而对于输出端口,必须使用reg型,而不能是wire型。同样用assign的角度考虑,module的输出在等号右边,而使用的变量成了等号左边,assign语句等号左边只能是wire型。

位宽

这是个使用注意事项。所有的wire和reg在声明时如果不做特殊声明,只有1位。这个对于熟悉其他编程语言的人是一个容易犯错的地方。

执行

wire wire_a = 4’he;

语句最后得到的wire_a是0x1,而不是0xe。因为wire_a只取了0xe的最低位的值而省略掉了其他值。所以正确的语句应该是

wire[3:0] wire_a = 4’he;

这样wire_a输出的结果才是一个0xe。

小结

这篇文章从功能,变量状态,赋值方式,使用方式等角度讨论了wire和reg变量类型的区别。并且给出了一个在verilog中常见的使用错误及解决方法。

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

    关注

    30

    文章

    5020

    浏览量

    117612
  • Verilog
    +关注

    关注

    28

    文章

    1324

    浏览量

    109276
  • 编程语言
    +关注

    关注

    9

    文章

    1877

    浏览量

    33010
收藏 人收藏

    评论

    相关推荐

    VHDL与verilogif判断条件的一点小区别

    ,如果是boolean类型就能if(not a)了。verilog:if内容不论是什么类型,比如reg 或者wire ,都可以写成if(!a
    发表于 04-09 09:24

    wirereg 区别

    assign赋值b. 定义为reg, 只在always @(a b c d) block赋值在verilog语言中的reg 类型只是语法意
    发表于 02-20 10:51

    verilog inout的 用法

    端口使用.link_data可以通过相关电路来控制.2 编写测试模块时,对于inout类型的端口,需要定义成wire类型变量,而其它输入端口都定义成
    发表于 01-24 12:27

    【小白求问】verilogreg类型变量可以和integer类型变量相乘吗?

    RT,已知integer变量为正数,那么和两个reg变量相乘有区别吗?谢谢!
    发表于 11-29 12:34

    关于verilog 语句中变量类型的确定,例:请指出下面几条语句中变量类型:8.1) assign A=B; 8.2) always #1 Count=C+1;

    regwire类型区别和用法,还有regwire
    发表于 01-06 17:20

    FPGA小技巧,在设计文件,如何确定信号是reg型还是wire型?

    在设计文件,如何确定信号是reg型还是wire型?当我们使用Verilog时,对于信号定义为reg型还是
    发表于 10-21 10:47

    【技巧分享】在设计文件,如何确定信号是reg型还是wire型?

    当我们使用Verilog时,对于信号定义为reg型还是wire型比较混乱,那么今天我们就来讲一讲如何快速的进行信号定义。在Verilog
    发表于 03-01 23:58

    基本Verilog变量有线网类型和寄存器类型

    逻辑,应在敏感信号表列出所有的输入信号;7、所有的内部寄存器都应该可以被复位;8、用户自定义原件(UDP元件)是不能被综合的。一:基本Verilog变量有线网
    发表于 07-29 06:10

    Verilog 变量位的数值类型

    Verilog 变量位的数值类型Verilog变量
    发表于 08-04 09:42

    Verilog 变量声明与数据类型

    Verilog 变量声明与数据类型二上节介绍了wirereg数据类型及其用法,并对
    发表于 08-06 09:21

    Verilog 变量声明与数据类型

    Verilog 变量声明与数据类型Verilog语法中最基本的数据类型有 线网(wire),寄
    发表于 08-10 14:01

    比较VerilogWireReg的不同之处

    wireregVerilog程序里的常见的两种变量类型,他们都是构成verilog程序逻辑
    的头像 发表于 03-08 17:18 1.1w次阅读

    不同情况下,在Verilog中什么时候用wire,什么时候用reg

    Verilog中何时用wire,何时用regVerilog HDL中的变量可以定义为wire
    的头像 发表于 09-28 11:26 1.2w次阅读
    不同情况下,在<b class='flag-5'>Verilog</b>中什么时候用<b class='flag-5'>wire</b>,什么时候用<b class='flag-5'>reg</b>

    regwire区别

    1,regwire区别: 相同点: 都能表示一种类型类型。 不同点: wire 连线型数据,
    的头像 发表于 07-03 10:00 1.1w次阅读

    Verilog最常用的2种数据类型

    Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据
    的头像 发表于 05-29 16:27 1174次阅读
    <b class='flag-5'>Verilog</b>最常用的2种数据<b class='flag-5'>类型</b>