verilog
中
reg
和
wire
类型的区别
reg
相当于存储单元,
wire
相当于物理连线
Verilog
中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要
设置位宽,缺省为
1
位。变量的每一位可以是
0
,
1
,
X
,
Z
。其中
x
代表一个未
被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同
的值而引起的冲突型线型变量。
z
代表高阻状态或浮空量。
线型数据包括
wire,wand,wor
等几种类型在被一个以上激励源驱动时,
不同的线
型数据有各自决定其最终值的分辨办法。
两者的区别是:
即存器型数据保持最后一次的赋值,
而线型数据需要持续的驱动
输入端口可以由
net/reg
驱动,但输入端口只能是
net
;输出端口可以使
net/reg
类型,输出端口只能驱动
net
;若输出端口在过程块中赋值则为
reg
型,若在过
程块外赋值则为
net
型
用关键词
inout
声明一个双向端口
, inout
端口不能声明为寄存器类型,
只能是
net
类型。
****************************************************************************************
******************************
wire
表示直通,即只要输入有变化,输出马上无条件地反映;
reg
表示一定
要有触发,输出才会反映输入。
不指定就默认为
1
位
wire
类型。专门指定出
wire
类型,可能是多位或为
使程序易读。
wire
只能被
assign
连续赋值,
reg
只能在
initial
和
always
中赋值。
wire
使用在连续赋值语句中,而
reg
使用在过程赋值语句中。
在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。
在理解上,
相当于一个逻辑之后直接连了一条线,
这个逻辑对应于表达式的右侧,
而这条线就对应于
wire
。
在过程赋值语句中,
表达式右侧的计算结果在某种条件
的触发下放到一个变量当中,
而这个变量可以声明成
reg
类型的。
根据触发条件
的不同,
过程赋值语句可以建模不同的硬件结构:
如果这个条件是时钟的上升沿
或下降沿,
那么这个硬件模型就是一个触发器;
如果这个条件是某一信号的高电
平或低电平,
那么这个硬件模型就是一个锁存器;
如果这个条件是赋值语句右侧
任意操作数的变化,那么这个硬件模型就是一个组合逻辑。
输入端口可以由
wire/reg
驱动,但输入端口只能是
wire
;输出端口可以使
wire/reg
类型,
输出端口只能驱动
wire
;
若输出端口在过程块中赋值则为
reg
型,
若在过程块外赋值则为
net
型。用关键词
inout
声明一个双向端口
, inout
端口不
能声明为
reg
类型,只能是
wire
类型;输入和双向端口不能声明为寄存器类型。
简单来说硬件描述语言有两种用途:
1
、仿真,
2
、综合。
对于
wire
和
reg
,也要从这两个角度来考虑。