Advertisement
redsees

Untitled

Feb 5th, 2016
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //1 bit Half Adder Implementation
  2.  
  3. module myHA(input A, B, output S, Co);
  4. assign S = A^B;
  5. assign Co = A&B;
  6. endmodule
  7.  
  8. //1 bit Full Adder Implementation
  9.  
  10. module myFA(input A, B, Ci, output S, Co);
  11. assign S = A^B^Ci;
  12. assign Co = (A&B) | ((A^B)&Ci);
  13. endmodule
  14.  
  15. // N-bit Carry Look-Ahead Adder Implementation
  16.  
  17. module myCLA #(parameter N=4)(input [N-1:0] A,B,input Ci, output [N-1:0] S, output Co);
  18. wire [N-2:0] Couts;
  19. wire [N-1:0] Cg,Cp;
  20.  
  21. assign Cg = A&B;        // Carry Generate Signals
  22. assign Cp = A|B;        // Carry Propagate Signals
  23.  
  24. assign Couts[0] = Cg[0] | (Cp[0]&Ci);
  25. assign Co       = Cg[N-1] | (Cp[N-1]&Couts[N-2]);
  26.  
  27. assign S[0]     = A[0]^B[0]^Ci;
  28.  
  29. genvar i;
  30. generate
  31.     for(i=1;i<N-1;i=i+1)
  32.     begin: CoutsLoop
  33.         assign Couts[i] = Cg[i] | (Cp[i]&Couts[i-1]);
  34.     end
  35.     for(i=1;i<N;i=i+1)
  36.     begin: SLoop
  37.         assign S[i] = A[i]^B[i]^Couts[i-1];
  38.     end
  39. endgenerate
  40.  
  41. endmodule
  42.  
  43. // 4x4 Multiplier Circuit Implementation using HA's, FA's and CLA's
  44.  
  45. module mymult(input [3:0] A,B, output [7:0] out);
  46. wire[16:0] temp;
  47. wire[16:0] prod;
  48.  
  49. /*
  50. genvar i,x;
  51. generate
  52.     for(i=0;i<4;i=i+1)
  53.     begin: productsloop
  54.         for(x=0;x<4;x=x+1)
  55.         begin: prodloop
  56.             assign prod[a]=B[i]&A[x];
  57.         end
  58.     end
  59. endgenerate
  60. */
  61.  
  62. assign prod[0] = B[0]&A[0];
  63. assign prod[1] = B[0]&A[1];
  64. assign prod[2] = B[0]&A[2];
  65. assign prod[3] = B[0]&A[3];
  66. assign prod[4] = B[1]&A[0];
  67. assign prod[5] = B[1]&A[1];
  68. assign prod[6] = B[1]&A[2];
  69. assign prod[7] = B[1]&A[3];
  70. assign prod[8] = B[2]&A[0];
  71. assign prod[9] = B[2]&A[1];
  72. assign prod[10] = B[2]&A[2];
  73. assign prod[11] = B[2]&A[3];
  74. assign prod[12] = B[3]&A[0];
  75. assign prod[13] = B[3]&A[1];
  76. assign prod[14] = B[3]&A[2];
  77. assign prod[15] = B[3]&A[3];
  78.  
  79. assign out[0] = A[0]&B[0];
  80.  
  81. myHA myHA0(.A(prod[1]),.B(prod[4]),.S(out[1]),.Co(temp[0]));
  82. myFA myFA0(.A(prod[2]),.B(prod[5]),.Ci(prod[8]),.S(temp[1]),.Co(temp[2]));
  83. myHA myHA1(.A(temp[0]),.B(temp[1]),.S(out[2]),.Co(temp[7]));
  84. myFA myFA1(.A(prod[3]),.B(prod[6]),.Ci(prod[9]),.S(temp[3]),.Co(temp[4]));
  85. myHA myHA2(.A(prod[7]),.B(prod[10]),.S(temp[5]),.Co(temp[6]));
  86. myFA myFA2(.A(temp[3]),.B(prod[12]),.Ci(temp[2]),.S(temp[8]),.Co(temp[9]));
  87. myFA myFA3(.A(temp[5]),.B(prod[13]),.Ci(temp[4]),.S(temp[10]),.Co(temp[11]));
  88. myFA myFA4(.A(prod[11]),.B(prod[14]),.Ci(temp[6]),.S(temp[12]),.Co(temp[13]));
  89.  
  90. myCLA #(.N(4)) myCLA0(.A({prod[15],temp[12],temp[10],temp[8]}),.B({temp[13],temp[11],temp[9],temp[7]}),.Ci(1'b0),.S({out[6],out[5],out[4],out[3]}),.Co(out[7]));
  91.  
  92. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement