wire和reg的区别
- reg相当于存储单元,wire相当于物理连线。
- reg保持最后一次的赋值,而wire需要持续的驱动。
- wire使用在连续赋值语句assign中,reg使用在过程赋值语句中(always、测试文件中的initial)。(除此之外,元件实例化时必须使用wire类型)
- wire若无驱动器连接,其值为z,reg默认初始值为不定值x
- wire表示直通,没有逻辑性,即输入有变化,输出马上无条件反应(如与、非门的简单连接);
reg表示一定要有触发,输出才会反应输入的状态,在没有输入的情况下可以保持原来的值,但不直接与实际的硬件电路对应。 - 在过程赋值语句(always)中,可以理解成表达式右侧的结果在某种触发下放到一个变量中,这个变量可以被声明成reg类型,根据触发条件的不同,可以建模不同的硬件结构:
1)时钟的上升沿或下降沿 ———— 触发器
2)某一信号的高电平或低电平 ———— 锁存器
3)赋值语句右侧任意操作数的变化 ————组合逻辑 - 对于组合逻辑输出变量,可以直接用assign,若不指定reg类型,则默认为一位wire,当wire为多位时,需专门指定wire的类型。
- 在Verilog中使用reg,并不表示综合出来就是暂存器register,在组合电路中使用,组合后只是net,在时序电路中使用,综合才是Flip-Flop形式表示的register触发器。
- 输入端口可由wire/reg驱动,但输入端口只能是wire类型;
输出端口只能驱动wire,但输出端口可以是wire/reg类型。
模块调用时信号类型的确定方法
信号可分为端口信号和内部信号,出现在端口列表中的即为端口信号,其它则为内部信号。
1)对于端口信号,输入端口只能是wire类型,输出端口为wire或reg类型。若输出端口在过程块(begin…end)中赋值则为reg类型,在过程块外赋值(包括实例化语句)为wire类型;
2)内部信号类型与输出端口相同,判断方法也与输出端口相同。
3)若信号既需要在过程块中赋值,又需要在过程块外赋值时,需要一个中间信号转换。这种情况是有可能出现的,如决断信号。