| //Reduced Full Adder Cell (for CLA, 8 gates instead of 9) |
| module rfa (sum, g, p, a, b, cin); |
| |
| output sum; |
| output g; |
| output p; |
| input a; |
| input b; |
| input cin; |
| |
| xor x1 (sum, a, b, cin); |
| and a1 (g, a, b); |
| or o1 (p, a, b); |
| |
| endmodule |
| |
| //17-bit Register with reset |
| module dffr_17 (q, d, clk, reset); |
| |
| output [15:0] q; |
| input [15:0] d; |
| input clk, reset; |
| |
| reg [15:0] q; |
| |
| always @ (posedge clk or negedge reset) |
| if (reset == 0) |
| q <= 0; |
| else |
| q <= d; |
| |
| endmodule // dffr_17 |
| |
| module HA (Cout, Sum, A, B); |
| |
| input A,B; |
| output Sum,Cout; |
| |
| xor xor1(Sum,A,B); |
| and and1(Cout,A,B); |
| |
| endmodule // ha |
| |
| //Basic adders for Multiplier |
| module FA (Sum, Cout, A, B, Cin); |
| |
| input A; |
| input B; |
| input Cin; |
| |
| output Sum; |
| output Cout; |
| |
| wire w1; |
| wire w2; |
| wire w3; |
| wire w4; |
| |
| xor x1 (w1, A, B); |
| xor x2 (Sum, w1, Cin); |
| |
| nand n1 (w2, A, B); |
| nand n2 (w3, A, Cin); |
| nand n3 (w4, B, Cin); |
| nand n4 (Cout, w2, w3, w4); |
| |
| endmodule // FA |
| |
| module MFA (Sum, Cout, A, B, Sin, Cin); |
| |
| input A; |
| input B; |
| input Sin; |
| input Cin; |
| |
| output Sum; |
| output Cout; |
| |
| wire w0; |
| wire w1; |
| wire w2; |
| wire w3; |
| wire w4; |
| |
| and a1(w0, A, B); |
| |
| xor x1 (w1, w0, Sin); |
| xor x2 (Sum, w1, Cin); |
| |
| nand n1 (w2, w0, Sin); |
| nand n2 (w3, w0, Cin); |
| nand n3 (w4, Sin, Cin); |
| nand n4 (Cout, w2, w3, w4); |
| |
| endmodule // MFA |
| |
| module NMFA (Sum, Cout, A, B, Sin, Cin); |
| |
| input A; |
| input B; |
| input Sin; |
| input Cin; |
| |
| output Sum; |
| output Cout; |
| |
| wire w0; |
| wire w1; |
| wire w2; |
| wire w3; |
| wire w4; |
| |
| nand n0(w0, A, B); |
| |
| xor x1 (w1, w0, Sin); |
| xor x2 (Sum, w1, Cin); |
| |
| nand n1 (w2, w0, Sin); |
| nand n2 (w3, w0, Cin); |
| nand n3 (w4, Sin, Cin); |
| nand n4 (Cout, w2, w3, w4); |
| |
| endmodule // NMFA |
| |
| module MHA (Sum, Cout, A, B, Sin); |
| |
| input A; |
| input B; |
| input Sin; |
| |
| output Sum; |
| output Cout; |
| |
| wire w1; |
| |
| and a0 (w1, A, B); |
| xor x1 (Sum, w1, Sin); |
| and a1 (Cout, w1, Sin); |
| |
| endmodule // MHA |
| |