为什么端口大小与';在Verilog(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;

这里我正在设计一个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;   
   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位输入端口一样