implement a Verilog gate level model for 64-bit Ripple Carry Adder and 32/64-bit twos complement

Gate level implementation for the following components:
- RC_ADD_SUB_64
- TWOSCOMP64
- TWOSCOMP32
This commit is contained in:
Yuri Tatishchev 2024-10-02 16:18:00 -07:00
parent 3801d523de
commit bb7e172316
Signed by: CaZzzer
GPG Key ID: 28BE602058C08557
2 changed files with 31 additions and 5 deletions

19
logic.v
View File

@ -20,7 +20,9 @@ output [63:0] Y;
//input list
input [63:0] A;
// TBD
wire _CO;
RC_ADD_SUB_64 twoscomp64_sub(.Y(Y), .CO(_CO), .A(64'b0), .B(A), .SnA(1'b1));
endmodule
@ -31,7 +33,20 @@ output [31:0] Y;
//input list
input [31:0] A;
// TBD
// inverted bits
// wire A_inv[31:0];
//genvar i;
//generate
// for (i = 0; i < 32; i = i + 1)
// begin : inv32_gen_loop
// not (A_inv[i], A[i]);
// end
//endgenerate
wire _CO;
RC_ADD_SUB_32 twoscomp32_sub(.Y(Y), .CO(_CO), .A(0), .B(A), .SnA(1'b1));
endmodule

View File

@ -29,7 +29,19 @@ input [63:0] A;
input [63:0] B;
input SnA;
// TBD
// carry-in bits for each 1-bit full adder
wire C[0:64];
buf (C[0], SnA);
genvar i;
generate
for (i = 0; i < 64; i = i + 1)
begin : add64_gen_loop
FULL_ADDER add64_inst(Y[i], C[i+1], A[i], B[i] ^ SnA, C[i]);
end
endgenerate
buf (CO, C[64]);
endmodule
@ -50,11 +62,10 @@ 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]);
FULL_ADDER add32_inst(Y[i], C[i+1], A[i], B[i] ^ SnA, C[i]);
end
endgenerate
//assign CO = C[32];
buf (CO, C[32]);
endmodule