verilog HDL中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。
温馨提示:内容为网友见解,仅供参考
无其他回答

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

reg和wire的区别
1、仿真角度不同 当HDL语言面对的是编译器(如Modelsim等)时:wire对应于连续赋值,如assign。reg对应于过程赋值,如always,initial。2、综合角度不同 当HDL语言面对的是综合器(如DC等)时:wire型的变量综合出来一般是一根导线。reg变量在always块中有两种情况:(1)、always后的敏感表中是(a or ...

Verilog HDL菜鸟学习笔记———五、一些基础知识
(1) reg与wire的区别:reg类型数据保持最后一次赋值,用于always过程赋值语句;wire用于assign连续赋值语句,表示信号间连接,构成信号传递或组合逻辑,而reg则抽象为寄存器,用于时序逻辑,如always或initial语句。Verilog中使用reg,并非直接生成寄存器:在组合电路中使用reg,综合后仅生成net;在时序电路中使用...

verilog中reg和wire类型的区别和用法
wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。在连续赋值语...

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

Verilog 中定义信号为什么要区分 wire 和 reg 两种类型
在 Verilog 被 Cadence 买下之前(大约上世纪八九十年代的样子),Verilog 只是一个用来做仿真的 HDL,不可综合。在那个年代,仿真器看到 wire 和 reg 会区别处理(实际上至今也是这样)。不知道你有没有发现,reg 类型信号的跳变,是依靠输入和敏感列表的,而且在非阻塞赋值中也存在一种并行的概念(...

verilog-1.语法、数值表示、数据类型、表达式、编译指令
Verilog主要数据类型为线网(wire)和寄存器(reg)。reg作为存储单元,保持数据不变,wire用于物理连接。向量表示位宽大于1的wire\/reg,允许访问特定位或相邻位。可变向量域和固定位宽向量域支持。整数(integer)、实数(real)和时间(time)变量分别用于整型、浮点型和仿真时间。数组维数不受限制,声明和...

verilog hdl 输出端out为什么要同时定义为wire型
verilog里一般不声明输出类型的话 默认是wire型的 如果你想在输出处寄存一下:比如使用always语句,则必须声明为reg类型 wire是线网,就是相当于实际中的连接线,你想assign的话就是直接连接,就是用wire型,他的值是随时变化的。比如你想寄存一下,让他在时钟边沿才变化就需要reg类型了 你的问题...

Verilog HDL基本语法规则
6. parameter和localparam的区别:两者用于定义常量,但localparam通常在模块内部使用,作用域更窄。7. 数据类型:wire表示线网型变量,值随输入变化;reg代表寄存器型,具有状态保持;memory型用于模拟存储器,通过数组索引访问。在编写Verilog代码时,需要注意避免多重驱动,即避免同一变量被多个信号同时赋值,...

【Verilog】一文带你了解verilog基础语法
数据类型丰富多样,包括reg、wire等,reg用于寄存器存储,wire用于信号传输。参数型用来定义常量,wire和reg是设计中常见的两种类型。Verilog支持多种运算符,如算术、逻辑和位运算,以及赋值和块语句,如非阻塞和阻塞赋值的区别。条件语句和循环语句模仿C语言,易于理解。always块是核心结构,用于实现时序逻辑...

相似回答