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;