implement a Verilog gate level model for ripple carry adder subtractor

Gate level implementation for the following components:
- FULL_ADDER
- HALF_ADDER
- RC_ADD_SUB_32
This commit is contained in:
Iurii Tatishchev 2024-10-01 11:01:17 -07:00
parent 87e48f162e
commit d1475b5a4f
Signed by: CaZzzer
GPG Key ID: E0EBF441EA424369
3 changed files with 42 additions and 6 deletions

View File

@ -23,6 +23,19 @@ module FULL_ADDER(S,CO,A,B, CI);
output S,CO;
input A,B, CI;
//TBD
// half adder 1
//assign Y = A ^ B;
//assign CO1 = A & B;
endmodule;
// half adder 2
//assign S = Y ^ CI;
//assign CO2 = Y & CI;
//assign CO = CO1 | CO2;
wire Y, CO1, CO2;
HALF_ADDER ha1(.Y(Y), .C(CO1), .A(A), .B(B));
HALF_ADDER ha2(.Y(S), .C(CO2), .A(Y), .B(CI));
assign CO = CO1 | CO2;
endmodule

View File

@ -22,6 +22,12 @@ module HALF_ADDER(Y,C,A,B);
output Y,C;
input A,B;
// TBD
// this
assign Y = A ^ B;
assign C = A & B;
endmodule;
// or this
//xor digit(Y, A, B);
//and carry(C, A, B);
endmodule

View File

@ -42,7 +42,24 @@ input [`DATA_INDEX_LIMIT:0] A;
input [`DATA_INDEX_LIMIT:0] B;
input SnA;
// TBD
//wire C0, C1, C2, C3;
//assign C0 = SnA;
//FULL_ADDER b0(Y[0], C1, A[0], B[0], C0);
// module FULL_ADDER(S,CO,A,B, CI);
// carry-in bits for each 1 bit full adder
wire C[0:32];
assign C[0] = SnA;
genvar i;
generate
for (i = 0; i < 32; i = i + 1)
begin : add32_gen_loop
FULL_ADDER add_inst(Y[i], C[i+1], A[i], B[i] ^ SnA, C[i]);
end
endgenerate
assign CO = C[32];
endmodule