Verilog: wire VS reg
wire 元素(组合逻辑)
wire
元素是 Verilog 设计中的简单导线(或任意宽度的总线)。以下是使用 wire
时的语法规则:
wire
元素用于将模块实例化的input
和output
端口与设计中的某些其他元素连接在一起。wire
元素在实际模块中被用来声明input
和output
。wire
元素必须由某种东西驱动,并且不被驱动就不能存储值。wire
元素不能在always@
块中=
或<=
的左侧。wire
元素是assign
语句左侧唯一合法类型。wire
元素是基于 Verilog 的设计中连接两个零件的无状态方式。wire
元素只能用于组合逻辑的建模。
程序 1 显示了 wire
的合法使用
程序 1
1 | wire A, B, C, D, E; // 1 bit 宽度的 wire |
reg 元素(组合逻辑与时序逻辑)
reg
元素和 wire
很像,但是能够用来存储信息(状态)像寄存器一样。reg
元素的语法规则如下:
reg
元素能够被连接到模块实例的input
端口reg
元素不能被连接到模块实例的output
端口reg
元素能够被使用在实际模块声明中的output
reg
元素不能被使用在实际模块声明中的input
reg
是always @
块中=
与<=
左侧唯一的合法类型reg
是initial
块中=
左侧唯一的合法类型(用于 Test Benches)reg
不能用于assign
语句的左侧reg
与always @ (posedge Clock)
块一起使用时,可用于创建寄存器reg
因此可用于创建组合逻辑和时序逻辑。
程序 2 显示了 reg
元素的合法使用
程序 2
1 | wire A, B; |
什么时候 wire 与 reg 可以互换?
在这些情况下,wire
与 reg
可以互换使用:
- 两者都可以出现在
assign
语句和always @
语句的=
或<=
符号的右侧。 - 两者都可以被连接到模块实例的
input
端口
原文
http://inst.eecs.berkeley.edu/~cs150/Documents/Nets.pdf