Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.61 KB | None | 0 0
  1. module lab7_5(A,B, CARRY,ADDERS,WALLACE);
  2. input [7:0] A,B;
  3. output [15:0] CARRY,ADDERS,WALLACE;
  4.  
  5. multiplier_8bit_carry M0 (A, B, CARRY[15:0]);
  6. multiplier_8bit_adders M1 (A,B,ADDERS[15:0]);
  7. multiplier_8bit_wallace M2 (A,B,WALLACE[15:0]);
  8. endmodule
  9.  
  10. module fulladderr (a, b, ci, s, co);
  11. input a, b, ci;
  12. output co, s;
  13. wire d;
  14. assign d = a ^ b;
  15. assign s = d ^ ci;
  16. assign co = (b & ~d) | (d & ci);
  17. endmodule
  18.  
  19. module fulladder (sum,carry,a,b,cin);
  20. input a, b, cin;
  21. output carry, sum;
  22. wire d;
  23. assign d = a ^ b;
  24. assign sum = d ^ cin;
  25. assign carry = (b & ~d) | (d & cin);
  26. endmodule
  27. module halfadder (sum,carry,a,b);
  28. input a,b;
  29. output sum,carry;
  30. assign sum=a^b;
  31. assign carry=a&b;
  32. endmodule
  33.  
  34. module multiplier_8bit_carry (A, B, P);
  35. input [7:0] A, B;
  36. output [15:0] P;
  37.  
  38. wire c01, c02, c03, c04, c05, c06, c07, c08;
  39. wire s02, s03, s04, s05, s06, s07, s08;
  40.  
  41. wire c12, c13, c14, c15, c16, c17, c18, c19;
  42. wire s13, s14, s15, s16, s17, s18, s19;
  43.  
  44. wire c23, c24, c25, c26, c27, c28, c29, c20;
  45. wire s24, s25, s26, s27, s28, s29, s20;
  46.  
  47. wire c34, c35, c36, c37, c38, c39, c30, c31;
  48. wire s35, s36, s37, s38, s39, s30, s31;
  49.  
  50. wire c45, c46, c47, c48, c49, c40, c41, c42;
  51. wire s46, s47, s48, s49, s40, s41, s42;
  52.  
  53. wire c56, c57, c58, c59, c50, c51, c52, c53;
  54. wire s57, s58, s59, s50, s51, s52, s53;
  55.  
  56. wire c67, c68, c69, c60, c61, c62, c63, c64;
  57.  
  58. assign P[0] = A[0] & B[0];
  59.  
  60. fulladderr F01 (A[1] & B[0], A[0] & B[1], 0, P[1], c01);
  61. fulladderr F02 (A[2] & B[0], A[1] & B[1], c01, s02, c02);
  62. fulladderr F03 (A[3] & B[0], A[2] & B[1], c02, s03, c03);
  63. fulladderr F04 (A[4] & B[0], A[3] & B[1], c03, s04, c04);
  64. fulladderr F05 (A[5] & B[0], A[4] & B[1], c04, s05, c05);
  65. fulladderr F06 (A[6] & B[0], A[5] & B[1], c05, s06, c06);
  66. fulladderr F07 (A[7] & B[0], A[6] & B[1], c06, s07, c07);
  67. fulladderr F08 (0, A[7] & B[1], c07, s08, c08);
  68.  
  69. fulladderr F12 (s02, A[0] & B[2], 0, P[2], c12);
  70. fulladderr F13 (s03, A[1] & B[2], c12, s13, c13);
  71. fulladderr F14 (s04, A[2] & B[2], c13, s14, c14);
  72. fulladderr F15 (s05, A[3] & B[2], c14, s15, c15);
  73. fulladderr F16 (s06, A[4] & B[2], c15, s16, c16);
  74. fulladderr F17 (s07, A[5] & B[2], c16, s17, c17);
  75. fulladderr F18 (s08, A[6] & B[2], c17, s18, c18);
  76. fulladderr F19 (c08, A[7] & B[2], c18, s19, c19);
  77.  
  78. fulladderr F23 (s13, A[0] & B[3], 0, P[3], c23);
  79. fulladderr F24 (s14, A[1] & B[3], c23, s24, c24);
  80. fulladderr F25 (s15, A[2] & B[3], c24, s25, c25);
  81. fulladderr F26 (s16, A[3] & B[3], c25, s26, c26);
  82. fulladderr F27 (s17, A[4] & B[3], c26, s27, c27);
  83. fulladderr F28 (s18, A[5] & B[3], c27, s28, c28);
  84. fulladderr F29 (s19, A[6] & B[3], c28, s29, c29);
  85. fulladderr F20 (c19, A[7] & B[3], c29, s20, c20);
  86.  
  87. fulladderr F34 (s24, A[0] & B[4], 0, P[4], c34);
  88. fulladderr F35 (s25, A[1] & B[4], c34, s35, c35);
  89. fulladderr F36 (s26, A[2] & B[4], c35, s36, c36);
  90. fulladderr F37 (s27, A[3] & B[4], c36, s37, c37);
  91. fulladderr F38 (s28, A[4] & B[4], c37, s38, c38);
  92. fulladderr F39 (s29, A[5] & B[4], c38, s39, c39);
  93. fulladderr F30 (s20, A[6] & B[4], c39, s30, c30);
  94. fulladderr F31 (c20, A[7] & B[4], c30, s31, c31);
  95.  
  96. fulladderr F45 (s35, A[0] & B[5], 0, P[5], c45);
  97. fulladderr F46 (s36, A[1] & B[5], c45, s46, c46);
  98. fulladderr F47 (s37, A[2] & B[5], c46, s47, c47);
  99. fulladderr F48 (s38, A[3] & B[5], c47, s48, c48);
  100. fulladderr F49 (s39, A[4] & B[5], c48, s49, c49);
  101. fulladderr F40 (s30, A[5] & B[5], c49, s40, c40);
  102. fulladderr F41 (s31, A[6] & B[5], c40, s41, c41);
  103. fulladderr F42 (c31, A[7] & B[5], c41, s42, c42);
  104.  
  105. fulladderr F56 (s46, A[0] & B[6], 0, P[6], c56);
  106. fulladderr F57 (s47, A[1] & B[6], c56, s57, c57);
  107. fulladderr F58 (s48, A[2] & B[6], c57, s58, c58);
  108. fulladderr F59 (s49, A[3] & B[6], c58, s59, c59);
  109. fulladderr F50 (s40, A[4] & B[6], c59, s50, c50);
  110. fulladderr F51 (s41, A[5] & B[6], c50, s51, c51);
  111. fulladderr F52 (s42, A[6] & B[6], c51, s52, c52);
  112. fulladderr F53 (c42, A[7] & B[6], c52, s53, c53);
  113.  
  114. fulladderr F67 (s57, A[0] & B[7], 0, P[7 ], c67);
  115. fulladderr F68 (s58, A[1] & B[7], c67, P[8 ], c68);
  116. fulladderr F69 (s59, A[2] & B[7], c68, P[9 ], c69);
  117. fulladderr F60 (s50, A[3] & B[7], c69, P[10], c60);
  118. fulladderr F61 (s51, A[4] & B[7], c60, P[11], c61);
  119. fulladderr F62 (s52, A[5] & B[7], c61, P[12], c62);
  120. fulladderr F63 (s53, A[6] & B[7], c62, P[13], c63);
  121. fulladderr F64 (c53, A[7] & B[7], c63, P[14], P[15]);
  122. endmodule
  123.  
  124. module multiplier_8bit_adders (A, B, P);
  125. input [7:0] A, B;
  126. output [15:0] P;
  127.  
  128. wire [7:0] m[7:0];
  129. wire [7:0] s[1:7];
  130. wire cout[1:7];
  131.  
  132. assign m[0] = A & {8{B[0]}};
  133. assign m[1] = A & {8{B[1]}};
  134. assign m[2] = A & {8{B[2]}};
  135. assign m[3] = A & {8{B[3]}};
  136. assign m[4] = A & {8{B[4]}};
  137. assign m[5] = A & {8{B[5]}};
  138. assign m[6] = A & {8{B[6]}};
  139. assign m[7] = A & {8{B[7]}};
  140.  
  141. adder_N_bits #(8) ex1({1'b0,m[0][7:1]},m[1],1'b0,s[1],cout[1]);
  142. adder_N_bits #(8) ex2({cout[1],s[1][7:1]},m[2],1'b0,s[2],cout[2]);
  143. adder_N_bits #(8) ex3({cout[2],s[2][7:1]},m[3],1'b0,s[3],cout[3]);
  144. adder_N_bits #(8) ex4({cout[3],s[3][7:1]},m[4],1'b0,s[4],cout[4]);
  145. adder_N_bits #(8) ex5({cout[4],s[4][7:1]},m[5],1'b0,s[5],cout[5]);
  146. adder_N_bits #(8) ex6({cout[5],s[5][7:1]},m[6],1'b0,s[6],cout[6]);
  147. adder_N_bits #(8) ex7({cout[6],s[6][7:1]},m[7],1'b0,s[7],cout[7]);
  148.  
  149. assign P[0] = m[0][0];
  150. assign P[1] = s[1][0];
  151. assign P[2] = s[2][0];
  152. assign P[3] = s[3][0];
  153. assign P[4] = s[4][0];
  154. assign P[5] = s[5][0];
  155. assign P[6] = s[6][0];
  156. assign P[14:7] = s[7];
  157. assign P[15] = cout[7];
  158.  
  159. endmodule
  160.  
  161. module adder_N_bits #(parameter N=8)
  162. (input [N-1:0] A,B,
  163. input cin,
  164. output [N-1:0] S,
  165. output cout);
  166.  
  167. assign {cout,S} = A + B + cin;
  168.  
  169. endmodule
  170.  
  171. module multiplier_8bit_wallace (A, B, P);
  172. input [7:0] A, B;
  173. output reg [15:0] P;
  174.  
  175. reg p [7:0][7:0]; // array which stores the partial products
  176.  
  177. wire [55:0] s ,c ; //iintermediate sum and carry
  178.  
  179. integer i,j;
  180.  
  181. always@(A, B) //x is multiplicand AND y is multiplier
  182.  
  183. begin
  184.  
  185. for ( i = 0; i <= 7; i = i + 1)
  186.  
  187. for ( j = 0; j <= 7; j = j + 1)
  188.  
  189. p[j][i] <= A[j] & B[i];
  190.  
  191. end
  192.  
  193. halfadder ha_11 ( (s[0]), (c[0]), (p[1][0]), ( p[0][1])); //P1
  194. fulladder fa_21 ( (s[1]), (c[1]), (p[2][0]), ( p[1][1]), ( (c[0]) ) );
  195. halfadder ha_21 ( (s[2]), (c[2]), (p[0][2]), ( s[1])); //P2
  196. fulladder fa_31 ( (s[3]), (c[3]), (p[3][0]), ( p[2][1]), ( c[1]) );
  197. fulladder fa_32 ( (s[4]), (c[4]), (p[1][2]), ( s[3]), ( c[2]) );
  198. halfadder ha_31 ( (s[5]), (c[5]), (p[0][3]), ( s[4])); //P3
  199. fulladder fa_41 ( (s[6]), (c[6]), (p[4][0]), ( p[3][1]), ( c[3]) );
  200. fulladder fa_42 ( (s[7]), (c[7]), (p[2][2]), (s[6]), ( c[4]) );
  201. fulladder fa_43 ( (s[8]), (c[8]), (p[1][3]), (s[7]), ( c[5]) );
  202. halfadder ha_41 ( (s[9]), (c[9]), (p[0][4]), ( s[8])); //P4
  203. fulladder fa_51 ( (s[10]), (c[10]), (p[5][0]), ( p[4][1]), ( c[6]) );
  204. fulladder fa_52 ( (s[11]), (c[11]), (p[3][2]), ( s[10]), ( c[7]) );
  205. fulladder fa_53 ( (s[12]), (c[12]), (p[2][3]), ( s[11]), ( c[8]) );
  206. fulladder fa_54 ( (s[13]), (c[13]), (p[1][4]), ( s[12]), ( c[9]) );
  207. halfadder ha_55 ( (s[14]), (c[14]), (p[0][4]), ( s[13])); //P5
  208. fulladder fa_61 ( (s[15]), (c[15]), (p[6][0]), ( p[5][1]), ( c[10]) );
  209. fulladder fa_62 ( (s[16]), (c[16]), (p[4][2]), ( s[15]), ( c[11]) );
  210. fulladder fa_63 ( (s[17]), (c[17]), (p[3][3]), ( s[16]), ( c[12]) );
  211. fulladder fa_64 ( (s[18]), (c[18]), (p[2][4]), ( s[17]), ( c[13]) );
  212. halfadder ha_61 ( (s[19]), (c[19]), (p[1][5]), ( s[18]));
  213. halfadder ha_42 ( (s[20]), (c[20]), (p[0][6]), ( s[19])); //P6
  214. fulladder fa_71 ( (s[21]), (c[21]), (p[7][0]), ( p[6][1]), ( c[15]) );
  215. fulladder fa_72 ( (s[22]), (c[22]), (p[5][2]), ( s[21]), ( c[16]) );
  216. fulladder fa_73 ( (s[23]), (c[23]), (p[4][3]), ( s[22]), ( c[17]) );
  217. fulladder fa_74 ( (s[24]), (c[24]), (p[3][4]), ( s[23]), ( c[18]) );
  218. fulladder fa_75 ( (s[25]), (c[25]), (p[2][5]), ( s[24]), ( c[19]) );
  219. fulladder fa_76 ( (s[26]), (c[26]), (p[1][6]), ( s[25]), ( c[20]) );
  220. halfadder ha_71 ( (s[27]), (c[27]), (p[0][7]), ( s[26])); //P7
  221. fulladder fa_81 ( (s[28]), (c[28]), (p[7][1]), ( p[6][2]), ( c[21]) );
  222. fulladder fa_82 ( (s[29]), (c[29]), (p[5][3]), ( s[28]), ( c[22]) );
  223. fulladder fa_83 ( (s[30]), (c[30]), (p[4][4]), ( s[29]), ( c[23]) );
  224. fulladder fa_84 ( (s[31]), (c[31]), (p[3][5]), ( s[30]), ( c[24]) );
  225. fulladder fa_85 ( (s[32]), (c[32]), (p[2][6]), ( s[31]), ( c[25]) );
  226. fulladder fa_86 ( (s[33]), (c[33]), (p[1][7]), ( s[32]), ( c[26]) );
  227. halfadder ha_81 ( (s[34]), (c[34]), (s[33]), ( c[27])); //P8
  228. fulladder fa_91 ( (s[35]), (c[35]), (p[7][2]), ( p[6][3]), ( c[28]) );
  229. fulladder fa_92 ( (s[36]), (c[36]), (p[5][4]), ( s[35]), ( c[29]) );
  230. fulladder fa_93 ( (s[37]), (c[37]), (p[4][5]), ( s[36]), ( c[30]) );
  231. fulladder fa_94 ( (s[38]), (c[38]), (p[3][6]), ( s[37]), ( c[31]) );
  232. fulladder fa_95 ( (s[39]), (c[39]), (p[2][7]), ( s[38]), ( c[32]) );
  233. fulladder fa_96 ( (s[40]), (c[40]), (s[39]), ( c[33]), ( c[34]) ); //P9
  234. fulladder fa_101 ( (s[41]), (c[41]), (p[7][3]), ( p[6][4]), ( c[35]) );
  235. fulladder fa_102 ( (s[42]), (c[42]), (p[5][5]), ( s[41]), ( c[36]) );
  236. fulladder fa_103 ( (s[43]), (c[43]), (p[4][6]), ( s[42]), ( c[37]) );
  237. fulladder fa_104 ( (s[44]), (c[44]), (p[3][7]), ( s[43]), ( c[38]) );
  238. fulladder fa_105 ( (s[45]), (c[45]), (s[44]), ( c[39]), ( c[40]) ); //P10
  239. fulladder fa_111 ( (s[46]), (c[46]), (p[7][4]), ( p[6][5]), ( c[41]) );
  240. fulladder fa_112 ( (s[47]), (c[47]), (p[5][6]), ( s[46]), ( c[42]) );
  241. fulladder fa_113 ( (s[48]), (c[48]), (p[4][7]), ( s[47]), ( c[43]) );
  242. fulladder fa_114 ( (s[49]), (c[49]), (s[48]), ( c[44]), ( c[45]) ); //P11
  243. fulladder fa_121 ( (s[50]), (c[50]), (p[7][5]), ( p[6][6]), ( c[46]) );
  244. fulladder fa_122 ( (s[51]), (c[51]), (p[5][7]), (s[50]), ( c[47]) );
  245. fulladder fa_123 ( (s[52]), (c[52]), (s[51]), (c[48]), ( c[49]) ); //P12
  246. fulladder fa_131 ( (s[53]), (c[53]), (p[7][6]), ( p[6][7]), ( c[50]) );
  247. fulladder fa_132 ( (s[54]), (c[54]), (s[53]), (c[51]), ( c[52]) ); //P13
  248. fulladder fa_141 ( (s[55]), (c[55]), (p[7][7]), (c[53]), ( c[54]) ); //P14
  249.  
  250. always@(*)
  251. P <= {c[55],s[55],s[54],s[52],s[49],s[45],s[40],s[34],s[27],s[20],s[14],s[9],s[5],s[2],s[0],p[0][0]}; //p[0][0]=P0
  252.  
  253.  
  254. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement