为什么我们必须采用与输出相同的变量名称,还要连线以获取值?例如:
module TEST(INP1,INP2,CIN,COUT,SUM);
input [31:0] INP1;
input [31:0] INP2;
output [31:0] SUM;
input CIN;
output COUT;
wire [31:0] SUM;// Again redefined
wire COUT; // Again Redefined
assign {COUT,SUM} = INP1 + INP2 + CIN ;
Run Code Online (Sandbox Code Playgroud)
获取两个数字的进位和总和并将进位作为输入的示例。
Verilog 1995确实要求在后面列出端口方向。输出线类型是隐式的,regs 可以与方向内联声明。
module TEST(A,B,C,D);
input [31:0] A;
input [31:0] B;
output [31:0] C;
output D;
reg D;
Run Code Online (Sandbox Code Playgroud)
可以写成:
module TEST(A,B,C,D);
input [31:0] A;
input [31:0] B;
output [31:0] C;
output reg D; //Only declared twice
Run Code Online (Sandbox Code Playgroud)
从Verilog 2001 开始,不再需要额外的定义,它们可以被声明为内联(ANSI 样式)。
module TEST(
input [31:0] A,
input [31:0] B,
output [31:0] C,
output reg D // Declared Once
);
Run Code Online (Sandbox Code Playgroud)
从SystemVerilog (2009) 开始,我们有了逻辑类型,您不再需要在 reg 和 wire 类型之间切换。唯一的要求是,如果您需要三态使用线或三。
module TEST(
input [31:0] A,
input [31:0] B,
output logic [31:0] C,
output logic D
);
Run Code Online (Sandbox Code Playgroud)
我对拥有 reg 和 wire 类型的原始要求的理解是为了仿真速度或仿真器设计的简易性。每个模拟增量周期都会评估导线的值,而仅在由灵敏度列表触发时评估 reg。