verilog中wire和reg的使⽤wire V.S. reg
wire(组合逻辑)
1. wire⽤来连接模块实例化的输⼊和输出端⼝;
2. wire⽤作实际模块声明中输⼊和输出;
3. wire 元素必须由某些东西驱动,并且在没有被驱动的情况下,⽆法存储值;
4. wire 元素不能⽤在 always模块中 = 或者 <= 的左边;
5. wire元素是assign语句左侧 唯⼀的合法类型;
6. wire 元素是在基于Verilog的设计中连接两⽚的⽆状态⽅式;
7. wire 只能⽤在 组合逻辑;
// wire 的⼀些正确使⽤
wire A,B,C,D,E ; //1-bit wide
wire [8:0] Wide; //9-bit
assign A= B & C;
always @(B or C)
begin
I=B | C;
end
mymodule mymodule_instance(.In(D),Out(E));
reg(组合和时序逻辑)
reg 和 wire类似,但它可以⽤来存储信息(状态),就像寄存器
1. reg可以连接到模块实例化的输⼊端⼝;
2. reg 不能连接到模块实例化的输出端⼝;
3. reg 可以⽤作实际模块声明中的输出;
4. reg 不能 ⽤作实际模块声明中的输⼊;
5. reg是always 模块中 = 或者 <= 左侧的唯⼀正确类型;
6. reg是initial模块中 = 左侧唯⼀的合法类型;
7. reg**不能⽤在assign的左边**;
8. reg 当与always @(podge Clock)块结合使⽤时,reg可⽤于创建寄存器。
//reg⼀些合法使⽤
wire A,B;
reg I,J,K; // 1-bit
reg [8:0] Wide; // 9-bit
always @(A or B) begin
I=A | B; // using a reg as the left - hand side of an always
initial begin // using a reg in an initial block
J=1'b1;
#1
J=1'b0;
end
always @(podge Clock) begin
// using a reg to create a positive -edge - triggered register
K<=I;
end
什么时候wire 和reg 可以互换?
1. 两者都可以出现在assign语句和 always 模块中=或<=的右侧;
2. 两者都可以连接到模块实例的输⼊端⼝;