Здесь я создаю 16-битный CarrySelectAdder
Вот файл сумматора:
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
it выдает ошибку соответствия размеров в порту 5 в rippleCarryAdder. Что не так?
design.sv: L78: предупреждение: размеры портов не совпадают в порту № 5 design.sv: L80: предупреждение : Размеры порта не совпадают в порту № 5 design.sv: L81: предупреждение: размеры порта не совпадают в порту № 5 design.sv: L86: предупреждение: размеры порта не совпадают в порту № 5 design.sv : L87: предупреждение: размеры порта не совпадают в дизайне порта № 5..s.s: L92: предупреждение: размеры порта не совпадают в дизайне порта № 5. L93: предупреждение: размеры порта не совпадают в порту #. 5