【ASIC设计】Verilog: wire vs. reg
EN
1 Introduction
Sections 1.1 to 1.3 discuss the difference between wire and reg in Verilog, and when to use each of them.
1.1 wire Elements (Combinational logic)
wire elements are simple wires (or busses of arbitrary width) in Verilog designs. The following are syntax rules when using wires:
wireelements are used to connectinputandoutputports of a module instantiation together with some other element in your designwireelements are used asinputs andoutputs within an actual module declaration.wireelements must be driven by something, and cannot store a value without being driven.wireelements cannot be used as the left-hand side of an = or <= sign in an always@ block.wireelements are the only legal type on the left-hand side of anassignstatement.wireelements are a stateless way of connecting two peices in a Verilog-based design.wireelements can only be used to model combinational logic.
Program 1 shows various legal uses of the wire element.
Program 1 Legal uses of the wire element
wire A, B, C, D, E; // simple 1- bit wide wires
wire [8:0] Wide ; // a 9- bit wide wire
reg I;
assign A = B & C; // using a wire with an assign statement
always @(B or C) begin
I = B | C; // using wires on the right - hand side of an always@ assignment
end
mymodule mymodule_instance (.In (D),
.Out(E)); // using a wire as the output of a module
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
1.2 reg Elements (Combinational and Sequential logic)
reg are similar to wires, but can be used to store information (‘state’) like registers. The following are syntax rules when using reg elements.
regelements can be connected to the input port of a module instantiation.regelements cannot be connected to the output port of a module instantiation.regelements can be used asoutputs within an actual module declaration.regelements cannot be used asinputs within an actual module declaration.regis the only legal type on the left-hand side of an always@ block = or <= sign.regis the only legal type on the left-hand side of aninitialblock = sign (used in Test Benches).regcannot be used on the left-hand side of anassignstatement.regcan be used to create registers when used in conjunction with always@(posedgeClock) blocks.regcan, therefore, be used to create both combinational and sequential logic.
Program 2 shows various legal uses of the reg element.
Program 2 Legal uses of the reg element
wire A, B;
reg I, J, K; // simple 1- bit wide reg elements
reg [8:0] Wide ; // a 9- bit wide reg element
always @(A or B) begin
I = A | B; // using a reg as the left - hand side of an always@ assignment
end
initial begin // using a reg in an initial block
J = 1’b1;
#1
J = 1’b0;
end
always @( posedge Clock ) begin
K <= I; // using a reg to create a positive -edge - triggered register
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
1.3 When wire and reg Elements are Interchangable
wire and reg elements can be used interchangably in certain situations:
- Both can appear on the right-hand side of
assignstatements and always@ block = or <= signs. - Both can be connected to the input ports of module instantiations.
CN
参考
文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。
原文链接:recclay.blog.csdn.net/article/details/109955751
- 点赞
- 收藏
- 关注作者
评论(0)