Verilog 中定义信号为什么要区分 wire 和 reg 两种类型

如题所述

这是一个历史遗留问题。在 Verilog 被 Cadence 买下之前(大约上世纪八九十年代的样子),Verilog 只是一个用来做仿真的 HDL,不可综合。在那个年代,仿真器看到 wire 和 reg 会区别处理(实际上至今也是这样)。不知道你有没有发现,reg 类型信号的跳变,是依靠输入和敏感列表的,而且在非阻塞赋值中也存在一种并行的概念(同样条件下 B <= A、C <= B 的时候,A 的值不会直接到 C 去)。而 wire 只需要输入就足够了。这样区分两种类型也是为了更好地模拟真实硬件中时序逻辑和组合逻辑的行为。
仿真器对 wire 类型会在每个 delta time 都进行计算并赋值,而 reg 类型只有在满足敏感列表条件时才会计算。
而如今随着 SV 的推出 Verilog 都已经到 2005 了,但当初的这一习惯继承了下来。虽然 reg 不一定综合出来 register,但这属于综合工具对代码描述的硬件行为的一种解读。always @ (*) 当中这个敏感列表依然存在,仿真器依然会依照敏感列表的指示去干活,不论你的敏感列表是不是*。反过来看 wire,虽然 RTL 代码中这个 wire 信号可能就是综合后网表中某个寄存器的 Q 端,但是在行为级描述中你对这根 wire 重命名也确实是在描述一种硬件行为。
温馨提示:内容为网友见解,仅供参考
无其他回答

Verilog 中定义信号为什么要区分 wire 和 reg 两种类型
而 wire 只需要输入就足够了。这样区分两种类型也是为了更好地模拟真实硬件中时序逻辑和组合逻辑的行为。仿真器对 wire 类型会在每个 delta time 都进行计算并赋值,而 reg 类型只有在满足敏感列表条件时才会计算。而如今随着 SV 的推出 Verilog 都已经到 2005 了,但当初的这一习惯继承了下来。虽然 r...

Verilog中的Reg和Wire
在Verilog编程中,reg和wire这两个概念常常引起初学者的疑惑。简单来说,reg和wire的主要区别在于它们在always块中的使用以及编译后的电路实现。官方定义中,reg可以理解为存储单元,它具有记忆功能,能保持上次的输入值,无需持续激励。相比之下,wire更像是物理连线,它需要通过assign指令来赋值,不能在al...

verilog HDL中wire和reg的区别
reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语句(initial ,always)中。wire若无驱动器连接,其...

小白学习Verilog语法-reg和wire的区别
在学习Verilog语法的过程中,小白认识到reg和wire在编程中的重要区别。这两者在数字电路设计中扮演着传输与存储的角色,就像信号的流动与存储单元。wire通常用于组合逻辑电路,可以作为输入接收表达式的输出,或通过assign赋值。其声明格式为wire [n-1:0] signal_name;相比之下,reg型变量则更像触发器,适...

verilog中reg和wire的区别
从名字理解:wire,线型,实际上在电路中的作用就是一根连线;reg,寄存器型,在电路中就作为寄存器存在。连线和寄存器是构成数字电路的基本结构,这也是verilog这两种变量类型的来源。当然,在verilog的升级版system verilog中提供了更多的,更一些抽象化的变量类型 ...

verilog中reg和wire类型的区别和用法
reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量。z代表高阻...

verilog中的基本数据类型
数组在Verilog中广泛使用,可以是reg、wire等类型的多维结构,允许指定不同维度的索引。尽管与向量类似,但它们在结构上有着本质区别。存储器变量则是寄存器数组,用于模拟RAM或ROM的行为。参数是常量,用parameter声明,不能改变;而localparam用于局部定义的常量,其值不可修改。字符串则存储在reg变量中,...

verilog里wire类型和reg类型有什么区别
wire是线网型,可以相当于一根导线相连,wire型变量可以作为连续赋值中的左值,也可以作为过程赋值语句中的右值;reg是寄存器类型,相当于一个寄存器,可以作为过程赋值语句中的左值和右值。

wire和reg的区别
为什么在verilog中要定义wire?有几种情况变量需要定义成wire。第一。assign 语句 例如:reg a,b;wire and_result;...assign and_result =a&&b;你可以试试把wire定义成reg。综合器会报错。第二。元件例化时候的输出必须用wire 例如:wire dout;ram u_ram (...out(dout)...);wire按照国外的教材...

在Verilog中对于一个变量,是选成wire型还是选成reg型,根据什么标准来选 ...
wire属于net型数据类型,相当于硬件电路中的各种物理连接,其特点是输出值紧跟输入值的变化而变化。例如,wire cout=cin; \/\/只要cin变化,cout就变化 reg属于variable型数据类型,必须放在过程语句中,通过过程赋值语句赋值;在过程块内被赋值的信号也必须定义成variable型。也就是说,要在always和initial中...

相似回答