Advertisement
jawadtp

RAM VERILOG

Nov 28th, 2020
1,213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module and2(output c, input a, input b);
  2.  
  3. wire w;
  4. nand mynand(w,a,b);
  5. nand mynand2(c,w);
  6.  
  7. endmodule
  8.  
  9.  
  10. module or2(output c, input a, input b);
  11.  
  12. wire a1, b1;
  13.  
  14. nand not1(a1, a);
  15. nand not2(b1, b);
  16. nand mynand(c, a1, b1);
  17.  
  18. endmodule
  19.  
  20. module mux21(output o, input s, i0, i1);
  21.  
  22. wire s1, a1, a2;
  23. nand not1(s1, s);
  24. and2 and_1(a1, s1, i0);
  25. and2 and_2(a2, s, i1);
  26. or2 or_1(o, a1, a2);
  27.  
  28. endmodule
  29.  
  30. module dlatch(output q, q0, input d, clock);
  31.  
  32. wire s,r,s0,r_;
  33. and2 myand(s,d,d);
  34. nand not1(r,d);
  35. nand(s0, clock, s);
  36. nand(r_,clock,r);
  37. nand(q,s0,q0);
  38. nand(q0,r_,q);
  39.  
  40. endmodule
  41.  
  42. module dff_rising(output q, q0, input d, clock);
  43.  
  44. wire clock0, Q,Q0;
  45. nand not1(clock0,clock);
  46. dlatch d1(Q,Q0,d,clock0);
  47. dlatch d2(q,q0,Q,clock);
  48.  
  49. endmodule
  50.  
  51. module binary_cell(output out, input in, input load, input clock);
  52.  
  53. wire w1,w2;
  54. mux21 mux(w1, load, out,in);
  55. dff_rising dff(out, w2, w1, clock);
  56.  
  57. endmodule
  58.  
  59. module demux21(output o0, o1, input s, in);
  60.  
  61. wire w;
  62.  
  63. nand mynand(w, s);
  64. and2 myand1(o0, w, in);
  65. and2 myand2(o1, s, in);
  66.  
  67. endmodule
  68.  
  69. module demux41(output [3:0] o, input [1:0] s, input in, e);
  70.  
  71. wire o0, o1;
  72. wire [3:0] o2;
  73.  
  74. demux21 d4_1(o0, o1, s[1], in);
  75. demux21 d4_2(o2[0], o2[1], s[0], o0);
  76. demux21 d4_3(o2[2], o2[3], s[0], o1);
  77. and2 myand [3:0] (o, o2, e);
  78.  
  79. endmodule
  80.  
  81.  
  82.  
  83. module mux16(output [15:0] o, input s, input [15:0] i0, i1);
  84.  
  85. wire w;
  86. wire [15:0] a1, a2;
  87.  
  88. nand(w, s);
  89. and2 myand [15:0] (a1, w, i0);
  90. and2 myand1 [15:0] (a2, s, i1);
  91. or2 myor1 [15:0] (o, a1, a2);
  92.  
  93. endmodule
  94.  
  95. module mux4(output [15:0] o, input [1:0] s, input [15:0] i0, i1, i2, i3);
  96.  
  97. wire [15:0]o1, o2;
  98. mux16 m1(o1, s[0], i0, i1);
  99. mux16 m2(o2, s[0], i2, i3);
  100. mux16 m3(o, s[1], o1, o2);
  101.  
  102. endmodule
  103.  
  104. module mux8(output [15:0] o, input [2:0] s, input [15:0] i0, i1, i2, i3, i4, i5, i6, i7);
  105.  
  106. wire [15:0] o1, o2;
  107.  
  108. mux4 m1(o1, s[1:0], i0, i1, i2, i3);
  109. mux4 m2(o2, s[1:0], i4, i5, i6, i7);
  110. mux16 m3(o, s[2], o1, o2);
  111.  
  112. endmodule
  113.  
  114. module demux81(output [7:0] o, input [2:0] s, input in);
  115.  
  116. wire w;
  117. nand mynand(w, s[2]);
  118. demux41 d1(o[3:0], s[1:0], in, w);
  119. demux41 d2(o[7:4], s[1:0], in, s[2]);
  120.  
  121. endmodule
  122.  
  123. module reg_16bit(output [15:0] out, input [15:0] in, input load, input clock);
  124.  
  125. binary_cell mycell[15:0](out,in,load,clock);
  126.  
  127. endmodule
  128.  
  129. module ram_8(output [15:0] out, input [2:0] address,input [15:0] in, input load, input clock);
  130.  
  131. wire [7:0] l;
  132. wire [15:0] o0, o1, o2,o3,o4,o5,o6,o7;
  133.  
  134. demux81 d1(l,address,load);
  135.  
  136. reg_16bit reg0(o0, in, l[0], clock);
  137. reg_16bit reg1(o1, in, l[1], clock);
  138. reg_16bit reg2(o2, in, l[2], clock);
  139. reg_16bit reg3(o3, in, l[3], clock);
  140. reg_16bit reg4(o4, in, l[4], clock);
  141. reg_16bit reg5(o5, in, l[5], clock);
  142. reg_16bit reg6(o6, in, l[6], clock);
  143. reg_16bit reg7(o7, in, l[7], clock);
  144.  
  145. mux8 m1(out, address, o0,o1,o2,o3,o4,o5,o6,o7);
  146.  
  147. endmodule
  148.  
  149. module ram_64(output [15:0] out, input [5:0] address, input [15:0] in, input load, input clock);
  150.  
  151. wire [7:0] l;
  152. wire [15:0] o0, o1, o2 ,o3 ,o4, o5, o6, o7;
  153.  
  154. demux81 d1(l, address[5:3], load);
  155.  
  156. ram_8 r0(o0, address[2:0], in, l[0], clock);
  157. ram_8 r1(o1, address[2:0], in, l[1], clock);
  158. ram_8 r2(o2, address[2:0], in, l[2], clock);
  159. ram_8 r3(o3, address[2:0], in, l[3], clock);
  160. ram_8 r4(o4, address[2:0], in, l[4], clock);
  161. ram_8 r5(o5, address[2:0], in, l[5], clock);
  162. ram_8 r6(o6, address[2:0], in, l[6], clock);
  163. ram_8 r7(o7, address[2:0], in, l[7], clock);
  164.  
  165. mux8 m1(out, address[5:3], o0,o1,o2,o3,o4,o5,o6,o7);
  166.  
  167. endmodule
  168.  
  169. module ram_512(output [15:0] out, input [8:0] address, input [15:0] in, input load, input clock);
  170.  
  171. wire [7:0] l;
  172. wire [15:0] o0, o1, o2 ,o3 ,o4, o5, o6, o7;
  173.  
  174. demux81 d1(l,address[8:6],load);
  175.  
  176. ram_64 r0(o0, address[5:0], in, l[0], clock);
  177. ram_64 r1(o1, address[5:0], in, l[1], clock);
  178. ram_64 r2(o2, address[5:0], in, l[2], clock);
  179. ram_64 r3(o3, address[5:0], in, l[3], clock);
  180. ram_64 r4(o4, address[5:0], in, l[4], clock);
  181. ram_64 r5(o5, address[5:0], in, l[5], clock);
  182. ram_64 r6(o6, address[5:0], in, l[6], clock);
  183. ram_64 r7(o7, address[5:0], in, l[7], clock);
  184.  
  185. mux8 m1(out,address[8:6], o0,o1,o2,o3,o4,o5,o6,o7);
  186.  
  187. endmodule
  188.  
  189. module ram_4k(output [15:0] out, input [11:0] address, input [15:0] in, input load, input clock);
  190.  
  191. wire [7:0] l;
  192. wire [15:0] o0, o1, o2 ,o3 ,o4, o5, o6, o7;
  193.  
  194. demux81 d1(l,address[11:9],load);
  195.  
  196. ram_512 r0(o0, address[8:0], in, l[0], clock);
  197. ram_512 r1(o1, address[8:0], in, l[1], clock);
  198. ram_512 r2(o2, address[8:0], in, l[2], clock);
  199. ram_512 r3(o3, address[8:0], in, l[3], clock);
  200. ram_512 r4(o4, address[8:0], in, l[4], clock);  
  201. ram_512 r5(o5, address[8:0], in, l[5], clock);
  202. ram_512 r6(o6, address[8:0], in, l[6], clock);
  203. ram_512 r7(o7, address[8:0], in, l[7], clock);
  204.  
  205. mux8 m1(out, address[11:9], o0,o1,o2,o3,o4,o5,o6,o7);
  206.  
  207. endmodule
  208.  
  209. module ram_16k(output [15:0] out, input [14:0] address, input [15:0] in, input load, input clock);
  210.  
  211. wire [7:0] l;
  212. wire [15:0] o0, o1, o2 ,o3 ,o4, o5, o6, o7;
  213.  
  214. demux81 d1(l,address[14:12],load);
  215.  
  216. ram_4k r0(o0, address[11:0], in, l[0], clock);
  217. ram_4k r1(o1, address[11:0], in, l[1], clock);
  218. ram_4k r2(o2, address[11:0], in, l[2], clock);
  219. ram_4k r3(o3, address[11:0], in, l[3], clock);
  220. ram_4k r4(o4, address[11:0], in, l[4], clock);
  221. ram_4k r5(o5, address[11:0], in, l[5], clock);
  222. ram_4k r6(o6, address[11:0], in, l[6], clock);
  223. ram_4k r7(o7, address[11:0], in, l[7], clock);
  224.  
  225. mux8 m1(out, address[14:12], o0,o1,o2,o3,o4,o5,o6,o7);
  226.  
  227. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement