| /* | |
| ********************************************************* | |
| * Design: Carry Look-Ahead Adder * | |
| * Model Name: cla * | |
| * Modelling Style: Structural Modelling * | |
| * Language: Verilog * | |
| ********************************************************* | |
| * Description: * | |
| * This is an implementation of a Carry Look-Ahead * | |
| * Adder which has two 4-bit Input Ports "A" and "B" * | |
| * and a single bit input carry port "cin". It also * | |
| * has a 4-bit Output Port "S" and a single bit * | |
| * output carry port "cout". * | |
| * * | |
| * The carry look-ahead adder is very fast because * | |
| * the calculation of the next carry is independent * | |
| * of the previous carry and only depends on the * | |
| * input carry. * | |
| ********************************************************* | |
| * This Project is developed by: * | |
| * 1. Vrushabh Damle * | |
| * 2. Debayan Mazumdar * | |
| * 3. Nishad Potdar * | |
| ********************************************************* | |
| */ | |
| `default_nettype none | |
| module cla ( | |
| //Definition of the Power Pins | |
| `ifdef USE_POWER_PINS | |
| inout vccd1, //User area 1 1.8V Supply | |
| inout vssd1, //User area 1 digital ground | |
| `endif | |
| //Input Pins | |
| input [3:0] A, | |
| input [3:0] B, | |
| input cin, | |
| //Output Pins | |
| output [3:0] S, | |
| output cout, | |
| ); | |
| //Wire Declaration | |
| wire [3:0] p,g; | |
| wire c1, c2, c3; | |
| wire [9:0]t ; | |
| //Instantiation of the Carry Propagator | |
| genvar i ; | |
| generate | |
| for (i=0 ; i<4 ; i=i+1) | |
| begin : carry_propagator | |
| xor cp (p[i], A[i], B[i]) ; | |
| end | |
| endgenerate | |
| //Instantiation of the Carry Generator | |
| genvar j ; | |
| generate | |
| for (j=0 ; j<4 ; j=j+1) | |
| begin : carry_generator | |
| and cg (g[j], A[j], B[j]) ; | |
| end | |
| endgenerate | |
| //Logical derivation of C1 | |
| and a1 (t[0], p[0],cin) ; | |
| or o1 (c1, t[0], g[0]) ; | |
| //Logical derivation of C2 | |
| and a2 (t[1], p[1], p[0], cin) ; | |
| and a3 (t[2], p[1], g[0]); | |
| or o2 (c2, g[1], t[1], t[2]); | |
| //Logical derivation of C3 | |
| and a4 (t[3], p[2], p[1], p[0], cin) ; | |
| and a5 (t[4], p[2], p[1], g[0]); | |
| and a6 (t[5], p[2], g[1]); | |
| or o3 (c3, t[3], t[4], t[5], g[2]) ; | |
| //Logical derivation of Cout | |
| and a7 (t[6], p[3], p[2], p[1], p[0], cin) ; | |
| and a8 (t[7], p[3], p[2], p[1], g[0]); | |
| and a9 (t[8], p[3], p[2], g[1]); | |
| and a10 (t[9], p[3], g[2]); | |
| or o4 (cout, t[6], t[7], t[8], t[9], g[3]) ; | |
| //Logical derivation of the Sums | |
| xor x1(S[0], p[0], cin) ; | |
| xor x2(S[1], p[1], c1) ; | |
| xor x3(S[2], p[2], c2) ; | |
| xor x4(S[3], p[3], c3) ; | |
| endmodule | |
| `default_nettype wire |