Verilog中wire与reg的使用

wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。

reg表示一定要有触发,输出才会反映输入的状态。

reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。

      两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语句(initial ,always)中。wire若无驱动器连接,其值为z,reg默认初始值为不定值 x 。

     在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑

      对组合逻辑输出变量,可以直接用assign。即如果不指定为reg类型,那么就默认为1位wire类型,故无需指定1位wire类型的变量。当然专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。

      输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以是wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型(wire/tri)。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型。

      默认信号是wire类型,reg类型要申明。这里所说的默认是指输出信号申明成output时为wire。如果是模块内部信号,必须申明成wire或者reg.

      对于always语句而言,赋值要申明成reg,连续赋值assign的时候要用wire。

模块调用时 信号类型确定方法总结如下:

•信号可以分为端口信号内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。

对于端口信号,输入端口只能是net类型。输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值(包括实例化语句),则为net类型。

•内部信号类型与输出端口相同,可以是net或register类型。判断方法也与输出端口相同。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。

若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信号。这时需要一个中间信号转换

下面所列是常出的错误及相应的错误信息(error message)

•用过程语句给一个net类型的或忘记声明类型的信号赋值。

           信息:illegal …… assignment.

•将实例的输出连接到声明为register类型的信号上。

           信息:<name> has illegal output port specification.

•将模块的输入信号声明为register类型。

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Verilogwire和reg都是用来声明信号的关键字。wire用于声明连续的信号,而reg用于声明时序的信号。 wire信号可以用于连接模块之间的输入和输出,也可以用于连接内部的信号。它们的值可以随时改变,因此不能用于存储状态。 reg信号用于存储状态,例如存储计数器的值或存储状态机的状态。它们只能在always块赋值,并且只能在时钟上升沿或下降沿时更新。 在Verilogwire和reg的使用取决于信号的类型和用途。在设计,需要根据需要选择合适的信号类型来实现所需的功能。 ### 回答2: Verilog是一种硬件描述语言,用于设计数字电路和嵌入式系统。 在Verilogwire和reg是两个非常重要的关键字,用于声明信号或变量。他们有各自独特的特点和使用场景。 wire:wire表示无符号宽度可变的网络,可以理解为连接电路的线。这些连接线用于连接不同的模块和电路,将它们连接起来。对于wire变量,其值是从现在所在的位置传播而来,并可能被其他信号修改。在Verilog使用wire声明的变量只能被赋值一次,不能直接赋值或者在代码进行修改。 reg:reg则表示寄存器,用于存储数字逻辑电路的值。这些值可以在电路传递,并根据电路设计的逻辑进行修改。与wire不同的是,reg在使用时可以通过赋值或其他运算进行重复修改。它可以作为时序电路的计数器,状态机状态存储等等。 在实际的Verilog设计wire和reg的使用具有多种场景。比如,在电路有许多模块需要信息交换,这个时候就需要使用wire来进行电路连接。同时,在时序逻辑电路,设计者需要记录电路状态以及状态变化,这个时候就可以使用reg来进行状态变量的存储。 总之,Verilogwire和reg的使用非常重要,它们在电路设计有着不同的使用场景。了解它们的特点和用法,对于设计高效、正确的数字电路非常必要。 ### 回答3: Verilog是一种硬件描述语言,用于设计数字电路。在Verilogwire和reg是两种重要的数据类型,用于连接模块、寄存器和其他电路组件。 Wire是连线类型,用于表示模块之间的连接。它可以传输信号,但不能存储数据。在Verilogwire可以用于连接输入/输出端口和内部信号。当wire用于连接模块时,需要将信号从输出端口传输到输入端口,以便在模块使用。例如,在组合逻辑wire可用于将两个逻辑门的输出连在一起。当其一个门的输出发生变化时,wire将传递新信号到另一个门,从而实现逻辑门的操作。因为wire是连线类型,不需要初始化,所以可以在声明时省略赋值语句。 Reg是寄存器类型,用于存储数据。它可以传输信号,并且可以在时钟边沿处读取和写入数据。在Verilog,reg可以用于存储内部信号,如状态变量和计数器。当reg用于连接模块时,需要在模块使用assign语句将它与输入端口或其他信号连接起来。例如,在时序逻辑,reg可用于存储状态变量,以记录电路的状态。每当时钟沿上升时,reg将更新其值,以反映当前状态。在初始化时,reg必须使用初始值赋值语句赋值,以确保其值在模拟开始时正确。 在Verilogwire和reg之间的区别是wire连接模块和寄存器之间的数据传输,而reg存储内部变量。使用wire和reg需要根据实际需要进行选择和设计。在设计电路时,应该根据电路的功能和性能要求来决定使用哪种类型的数据类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值