module prefix_adder(sum, cout, a, b, cin); // The inputs: input [3:0] a; input [3:0] b; input cin; // The outputs: output [3:0] sum; output cout; wire d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,du,d11,d13,d14,d15,d16,d17,d18,d20,d21; // ***** Adders ***** assign d1 = a[0] ^ b[0]; //assign d1 = a[0] & b[0]; assign d2 = cin & b[0]; assign d3 = cin & a[0]; assign d4 = a[0] & b[0]; assign d5 = a[1] ^ b[1]; assign d6 = a[1] & b[1]; assign d7 = a[2] ^ b[2]; assign d8 = a[2] & b[2]; assign d9 = a[3] ^ b[3]; assign d10 = a[3] & b[3]; assign du = d2 | d3; assign d11 = du | d4; assign d13 = d11 & d5; assign d14 = d7 & d9; assign d15 = d8 & d9; assign d16 = d13 | d6; assign d17 = d15 | d10; assign d18 = d16 & d7; assign d20 = d16 & d14; assign d21 = d18 | d8; assign cout = d20 | d17; assign sum[0] = cin ^ d1; assign sum[1] = d11 ^ d5; assign sum[2] = d16 ^ d7; assign sum[3] = d21 ^ d9; endmodule