Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module sw10_1(DIN, Resetn, Clock, Run, Done, BusWires);
  2. input [8:0] DIN;
  3. input Resetn, Clock, Run;
  4. output Done;
  5. output [8:0] BusWires;
  6. parameter T0 = 2'b00, T1 = 2'b01, T2 = 2'b10, T3 = 2'b11;
  7. reg [8:0] BusWires;
  8. reg [0:7] Rin, Rout;
  9. reg [8:0] Sum;
  10. reg IRin, Done, DINout, Ain, Gin, Gout, AddSub;
  11. reg [1:0] Tstep_Q, Tstep_D;
  12. wire [2:0] I;
  13. wire [0:7] Xreg, Yreg;
  14. wire [8:0] R0, R1, R2, R3, R4, R5, R6, R7;
  15. wire [8:0] A, G;
  16. wire [1:9] IR;
  17. wire [1:10] Sel;
  18. assign I = IR[1:3];
  19. dec3to8 decX (IR[4:6], 1'b1, Xreg);
  20. dec3to8 decY (IR[7:9], 1'b1, Yreg);
  21. always @(Tstep_Q, Run, Done)
  22. begin
  23. case (Tstep_Q)
  24. T0:
  25. if (~Run) Tstep_D = T0;
  26. else Tstep_D = T1;
  27. T1:
  28. if (Done) Tstep_D = T0;
  29. else Tstep_D = T2;
  30. T2:
  31. Tstep_D = T3;
  32. T3:
  33. Tstep_D = T0;
  34. endcase
  35. end
  36. parameter mv = 3'b000, mvi = 3'b001, add = 3'b010, sub = 3'b011;
  37. always @(Tstep_Q or I or Xreg or Yreg)
  38. begin
  39. Done = 1'b0; Ain = 1'b0; Gin = 1'b0; Gout = 1'b0; AddSub = 1'b0;
  40. IRin = 1'b0; DINout = 1'b0; Rin = 8'b0; Rout = 8'b0;
  41. case (Tstep_Q)
  42. T0:
  43. begin
  44. IRin = 1'b1;
  45. end
  46. T1:
  47. case (I)
  48. mv:
  49. begin
  50. Rout = Yreg;
  51. Rin = Xreg;
  52. Done = 1'b1;
  53. end
  54. mvi:
  55. begin
  56. DINout = 1'b1;
  57. Rin = Xreg;
  58. Done = 1'b1;
  59. end
  60. add, sub:
  61. begin
  62. Rout = Xreg;
  63. Ain = 1'b1;
  64. end
  65. default: ;
  66. endcase
  67. T2:
  68. case (I)
  69. add:
  70. begin
  71. Rout = Yreg;
  72. Gin = 1'b1;
  73. end
  74. sub:
  75. begin
  76. Rout = Yreg;
  77. AddSub = 1'b1;
  78. Gin = 1'b1;
  79. end
  80. default: ;
  81. endcase
  82. T3:
  83. case (I)
  84. add, sub:
  85. begin
  86. Gout = 1'b1;
  87. Rin = Xreg;
  88. Done = 1'b1;
  89. end
  90. default: ;
  91. endcase
  92. endcase
  93. end
  94. always @(posedge Clock, negedge Resetn)
  95. if (!Resetn)
  96. Tstep_Q <= T0;
  97. else
  98. Tstep_Q <= Tstep_D;
  99. regn reg_0 (BusWires, Rin[0], Clock, R0);
  100. regn reg_1 (BusWires, Rin[1], Clock, R1);
  101. regn reg_2 (BusWires, Rin[2], Clock, R2);
  102. regn reg_3 (BusWires, Rin[3], Clock, R3);
  103. regn reg_4 (BusWires, Rin[4], Clock, R4);
  104. regn reg_5 (BusWires, Rin[5], Clock, R5);
  105. regn reg_6 (BusWires, Rin[6], Clock, R6);
  106. regn reg_7 (BusWires, Rin[7], Clock, R7);
  107. regn reg_A (BusWires, Ain, Clock, A);
  108. regn #(.n(9)) reg_IR (DIN[8:0], IRin, Clock, IR);
  109. // alu
  110. always @(AddSub or A or BusWires)
  111. begin
  112. if (!AddSub)
  113. Sum = A + BusWires;
  114.  else
  115. Sum = A - BusWires;
  116. end
  117. regn reg_G (Sum, Gin, Clock, G);
  118. assign Sel = {Rout, Gout, DINout};
  119. always @(*)
  120. begin
  121. if (Sel == 10'b1000000000)
  122. BusWires = R0;
  123. else if (Sel == 10'b0100000000)
  124. BusWires = R1;
  125. else if (Sel == 10'b0010000000)
  126. BusWires = R2;
  127. else if (Sel == 10'b0001000000)
  128. BusWires = R3;
  129. else if (Sel == 10'b0000100000)
  130. BusWires = R4;
  131. else if (Sel == 10'b0000010000)
  132. BusWires = R5;
  133. else if (Sel == 10'b0000001000)
  134. BusWires = R6;
  135. else if (Sel == 10'b0000000100)
  136. BusWires = R7;
  137. else if (Sel == 10'b0000000010)
  138. BusWires = G;
  139. else BusWires = DIN;
  140. end
  141. endmodule
  142. module dec3to8(W, En, Y);
  143. input [2:0] W;
  144. input En;
  145. output [0:7] Y;
  146. reg [0:7] Y;
  147. always @(W or En)
  148. begin
  149. if (En == 1)
  150. case (W)
  151. 3'b000: Y = 8'b10000000;
  152.  3'b001: Y = 8'b01000000;
  153. 3'b010: Y = 8'b00100000;
  154. 3'b011: Y = 8'b00010000;
  155. 3'b100: Y = 8'b00001000;
  156. 3'b101: Y = 8'b00000100;
  157. 3'b110: Y = 8'b00000010;
  158. 3'b111: Y = 8'b00000001;
  159. endcase
  160. else
  161. Y = 8'b00000000;
  162. end
  163. endmodule
  164. module regn(R, Rin, Clock, Q);
  165. parameter n = 9;
  166. input [n-1:0] R;
  167. input Rin, Clock;
  168. output [n-1:0] Q;
  169. reg [n-1:0] Q;
  170. always @(posedge Clock)
  171. if (Rin)
  172. Q <= R;
  173. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement