为什么我们必须采用与输出相同的变量名并连接来获取值?例如:
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 ;
获取两个数字的进位输出和和以及进位输入作为输入的示例。
最佳答案
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;
可以写成:
module TEST(A,B,C,D);
input [31:0] A;
input [31:0] B;
output [31:0] C;
output reg D; //Only declared twice
自 Verilog 2001 起,不再需要额外的定义,并且可以将它们声明为内联(ANSI 样式)。
module TEST(
input [31:0] A,
input [31:0] B,
output [31:0] C,
output reg D // Declared Once
);
从SystemVerilog (2009)开始,我们有了逻辑类型,您不再需要在reg和wire类型之间切换。唯一的要求是,如果您需要三态,请使用电线或三态。
module TEST(
input [31:0] A,
input [31:0] B,
output logic [31:0] C,
output logic D
);
我对reg和wire类型的最初要求的理解是为了模拟速度或模拟器设计的简易性。导线的值在每个模拟增量周期进行评估,而寄存器仅在被敏感度列表触发时评估。
关于verilog - 为什么输出网络也需要重新声明为 'wire' 或 'reg' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229477/