Page 16 of 19
Product_out; assign Product_out[0] =
A[0] & B[0];
HalfAdder u0 (A[0]&B[1], A[1]&B[0], Product_out[1], C0);
FullAdder u1 (A[1]&B[1], A[2]&B[0], C0, sum_u1, C1);
FullAdder u2 (A[2]&B[1], A[3]&B[0], C1, sum_u2, C2);
HalfAdder u3 (A[3]&B[1], C2, sum_u3, C3);
HalfAdder u4 (A[0]&B[2], sum_u1, Product_out[2], C4);
FullAdder u5 (A[1]&B[2], sum_u2, C4, sum_u5, C5);
FullAdder u6 (A[2]&B[2], sum_u3, C5, sum_u6, C6);
FullAdder u7 (A[3]&B[2], C3, C6, sum_u7, C7);
HalfAdder u8 (A[0]&B[3], sum_u5, Product_out[3], C8);
FullAdder u9 (A[1]&B[3], sum_u6, C8, Product_out[4], C9);
FullAdder u10 (A[2]&B[3], sum_u7, C9, Product_out[5], C10); FullAdder
u11 (A[3]&B[3], C7, C10, Product_out[6], Product_out[7]);
endmodule
TEST BENCH
module
multitb;
// Inputs
reg [3:0] A;
reg [3:0] B;