为什么端口大小与';在Verilog(16位进位选择加法器)中不匹配?
这里我正在设计一个16位的进位加法器 以下是加法器文件:为什么端口大小与';在Verilog(16位进位选择加法器)中不匹配?,verilog,Verilog,这里我正在设计一个16位的进位加法器 以下是加法器文件: module multiplexer2x1_4 (X, I0, I1, S); output [3:0] X; input [3:0] I1; input [3:0] I0; input S; assign X = (S == 1'b0) ? I0 : I1; endmodule module multiplexer2x1_1 (X, I0, I1, S); output X;
module multiplexer2x1_4 (X, I0, I1, S);
output [3:0] X;
input [3:0] I1;
input [3:0] I0;
input S;
assign X = (S == 1'b0) ? I0 : I1;
endmodule
module multiplexer2x1_1 (X, I0, I1, S);
output X;
input I1;
input I0;
input S;
assign X = (S == 1'b0) ? I0 : I1;
endmodule
module halfAdder(S,Cout,A,B);
output S;
output Cout;
input A;
input B;
xor(S,A,B);
and(Cout,A,B);
endmodule
module fullAdder(S, Cout, A, B, Cin);
output S;
output Cout;
input A;
input B;
input Cin;
wire C1;
wire C2;
wire S1;
halfAdder h1 (S1,C1,A,B);
halfAdder h2 (S,C2,S1,Cin);
or(Cout, C1, C2);
endmodule
module rippleCarryAdder(S, C, A, B, Cin);
output [3:0] S;
output C;
input [3:0] A;
input [3:0] B;
input Cin;
wire C0;
wire C1;
wire C2;
fullAdder f0(S[0], C0, A[0], B[0], Cin);
fullAdder f1(S[1], C1, A[1], B[1], C0);
fullAdder f2(S[2], C2, A[2], B[2], C1);
fullAdder f3(S[3], C, A[3], B[3], C2);
endmodule
module carrySelectAdder(S, C, A, B);
output [15:0] S;
output C;
input [15:0] A;
input [15:0] B;
wire [11:0] S0;
wire [11:0] S1;
wire C0;
wire C1;
wire C2;
wire C3;
wire C4;
wire C5;
wire C6;
wire C7;
wire C8;
rippleCarryAdder R1 (S[3:0], C0, A[3:0], B[3:0], 0);
rippleCarryAdder R2_1 (S0[3:0], C1, A[7:4], B[7:4], 0);
rippleCarryAdder R2_2 (S1[3:0], C2, A[7:4], B[7:4], 1);
multiplexer2x1_4 mux2 (S[7:4], S0[3:0], S1[3:0], C0);
multiplexer2x1_1 mc2 (C3,C1,C2,C0);
rippleCarryAdder R3_1 (S0[7:4], C4, A[11:8], B[11:8], 0);
rippleCarryAdder R3_2 (S1[7:4], C5, A[11:8], B[11:8], 1);
multiplexer2x1_4 mux3 (S[11:8], S0[11:8], S1[11:8], C3);
multiplexer2x1_1 mc3 (C6,C4,C5,C3);
rippleCarryAdder R4_1 (S0[11:8], C7, A[15:12], B[15:12], 0);
rippleCarryAdder R4_2 (S1[11:8], C8, A[15:12], B[15:12], 1);
multiplexer2x1_4 mux4 (S[15:12], S0[11:8], S1[11:8], C6);
multiplexer2x1_1 mc4 (C,C7,C8,C6);
endmodule
这是测试台:
module carrySelectAdder_testBench;
reg [15:0] a;
reg [15:0] b;
wire [15:0] sum;
wire carry;
carrySelectAdder sl (sum[15:0],carry,a[15:0],b[15:0]);
initial
begin
$monitor("%b \t %b",sum,carry);
assign a = 16'b1001010110010101;
assign b = 16'b1001010111110101;
$finish;
end
endmodule
rippleCarryAdder中的端口5出现大小匹配错误,怎么了
design.sv:L78:警告:端口#5 design.sv中的端口大小不匹配:
L80:警告:端口大小与端口#5 design.sv:L81中的不匹配:
警告:端口大小与端口#5 design.sv:L86中的不匹配:警告:
端口大小与端口#5 design.sv:L87:警告:端口大小不匹配
端口#5 design.sv中不匹配:L92:警告:端口大小不匹配
在端口5 design.sv中:L93:警告:端口5中的端口大小不匹配
问题是您将
rippleCarryAdder
实例的输入端口绑定到0
而不是1'b0
0
在这里是一个无大小的文字常量,表示您没有定义此常量的位宽度。当查看的第5.7.1节(整型文字常量)时,我们发现:
组成无大小编号的位数(简单的十进制数或带有基本说明符但没有大小规格的数字)应至少为32。高阶位未知(X或X)或三态(Z或Z)的无符号文字常量应扩展到包含文字常量的表达式的大小
因此,编译器将RTL解释为将32位(或更多)常量连接到
rippleCarryAdder
的1位输入端口。问题是将rippleCarryAdder
实例的输入端口绑定到0
,而不是1'b0
0
在这里是一个无大小的文字常量,表示您没有定义此常量的位宽度。当查看的第5.7.1节(整型文字常量)时,我们发现:
组成无大小编号的位数(简单的十进制数或带有基本说明符但没有大小规格的数字)应至少为32。高阶位未知(X或X)或三态(Z或Z)的无符号文字常量应扩展到包含文字常量的表达式的大小
因此,编译器解释RTL时,就好像将32位(或更多)常量连接到rippleCarryAdder
的1位输入端口一样