Gate level implementation for the following components: - FULL_ADDER - HALF_ADDER - RC_ADD_SUB_32
76 lines
1.6 KiB
Verilog
76 lines
1.6 KiB
Verilog
// Name: rc_add_sub_32.v
|
|
// Module: RC_ADD_SUB_32
|
|
//
|
|
// Output: Y : Output 32-bit
|
|
// CO : Carry Out
|
|
//
|
|
//
|
|
// Input: A : 32-bit input
|
|
// B : 32-bit input
|
|
// SnA : if SnA=0 it is add, subtraction otherwise
|
|
//
|
|
// Notes: 32-bit adder / subtractor implementaiton.
|
|
//
|
|
//
|
|
// Revision History:
|
|
//
|
|
// Version Date Who email note
|
|
//------------------------------------------------------------------------------------------
|
|
// 1.0 Sep 10, 2014 Kaushik Patra kpatra@sjsu.edu Initial creation
|
|
//------------------------------------------------------------------------------------------
|
|
`include "prj_definition.v"
|
|
|
|
module RC_ADD_SUB_64(Y, CO, A, B, SnA);
|
|
// output list
|
|
output [63:0] Y;
|
|
output CO;
|
|
// input list
|
|
input [63:0] A;
|
|
input [63:0] B;
|
|
input SnA;
|
|
|
|
// 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
|
|
wire B_xor;
|
|
xor (B_xor, B[i], SnA);
|
|
FULL_ADDER add64_inst(Y[i], C[i+1], A[i], B_xor, C[i]);
|
|
end
|
|
endgenerate
|
|
|
|
buf (CO, C[64]);
|
|
|
|
endmodule
|
|
|
|
module RC_ADD_SUB_32(Y, CO, A, B, SnA);
|
|
// output list
|
|
output [`DATA_INDEX_LIMIT:0] Y;
|
|
output CO;
|
|
// input list
|
|
input [`DATA_INDEX_LIMIT:0] A;
|
|
input [`DATA_INDEX_LIMIT:0] B;
|
|
input SnA;
|
|
|
|
// carry-in bits for each 1-bit full adder
|
|
wire C[0:32];
|
|
buf (C[0], SnA);
|
|
|
|
genvar i;
|
|
generate
|
|
for (i = 0; i < 32; i = i + 1)
|
|
begin : add32_gen_loop
|
|
wire B_xor;
|
|
xor (B_xor, B[i], SnA);
|
|
FULL_ADDER add32_inst(Y[i], C[i+1], A[i], B_xor, C[i]);
|
|
end
|
|
endgenerate
|
|
|
|
buf (CO, C[32]);
|
|
|
|
endmodule
|