Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. module Lab7Part2(
  2. input [9:0]SW,
  3. input [3:0]KEY,
  4. input CLOCK_50,
  5. output [6:0]X,
  6. output [6:0]Y,
  7. output [2:0]color
  8. );
  9. wire loadx,loady,ld_draw,ld_clear;
  10. wire [4:0]counter;
  11. wire [7:0]clear;
  12.  
  13.  
  14. control b1(
  15. .clk(CLOCK_50),
  16. .resetn(KEY[0]),
  17. .KEY3(KEY[3]),
  18. .KEY1(KEY[1]),
  19. .KEY2(KEY[2]),
  20. .loadx(loadx),
  21. .loady(loady),
  22. .ld_draw(ld_draw),
  23. .ld_clear(ld_clear),
  24. .counter(counter),
  25. .clear(clear)
  26. );
  27. datapath b2(
  28. .clk(CLOCK_50),
  29. .resetn(KEY[0]),
  30. .datain(SW[9:0]),
  31. .loadx(loadx),
  32. .loady(loady),
  33. .ld_draw(ld_draw),
  34. .ld_clear(ld_clear),
  35. .X(X),
  36. .Y(Y),
  37. .color(color),
  38. .counter(counter),
  39. .clear(clear)
  40. );
  41. endmodule
  42.  
  43. module control(
  44. input clk,
  45. input resetn,
  46. input KEY3,
  47. input KEY1,
  48. input KEY2,
  49. output reg loadx,loady,ld_draw,ld_clear,
  50. input [4:0]counter,
  51. input [7:0]clear
  52. );
  53.  
  54. reg [5:0] current_state, next_state;
  55.  
  56. localparam S_LOAD_X = 5'd0,
  57. S_LOAD_X_Wait = 5'd1,
  58. S_LOAD_Y = 5'd2,
  59. S_LOAD_Y_Wait = 5'd3,
  60. drawstate = 5'd4,
  61. clearstate = 5'd5;
  62.  
  63.  
  64.  
  65. always@(*)
  66. begin: state_table
  67. case (current_state)
  68. S_LOAD_X: next_state = KEY3 ? S_LOAD_X_Wait : S_LOAD_X;
  69. S_LOAD_X_Wait : next_state = KEY3 ? S_LOAD_X_Wait : S_LOAD_Y;
  70. S_LOAD_Y: next_state = KEY1 ? S_LOAD_Y_Wait : S_LOAD_Y;
  71. S_LOAD_Y_Wait: next_state = KEY1 ? S_LOAD_Y_Wait : drawstate;
  72. drawstate: next_state = ((counter == 5'b10000)? S_LOAD_X : drawstate);
  73. clearstate: next_state = ((clear == 8'b10000000)? S_LOAD_X : clearstate);
  74. default: next_state = S_LOAD_X;
  75. endcase
  76. end // state_table
  77.  
  78.  
  79.  
  80. // Output logic aka all of our datapath control signals
  81. always @(*)
  82. begin: enable_signals
  83. loadx = 1'b0;
  84. loady = 1'b0;
  85. ld_draw = 1'b0;
  86. ld_clear =1'b0;
  87.  
  88. case (current_state)
  89. S_LOAD_X: begin
  90. loadx = 1'b1;
  91. end
  92. S_LOAD_Y: begin
  93. loady = 1'b1;
  94. end
  95. drawstate: begin
  96. ld_draw = 1'b1;
  97. end
  98. clearstate: begin
  99. ld_clear = 1'b1;
  100. end
  101. endcase
  102. end
  103.  
  104. // current_state registers
  105.  
  106. always@(posedge clk)
  107. begin: state_FFs
  108. if(!resetn)
  109. current_state <= S_LOAD_X;
  110. if(KEY2)
  111. current_state <= clearstate;
  112. else
  113. current_state <= next_state;
  114. end
  115.  
  116. endmodule
  117.  
  118.  
  119.  
  120.  
  121. module datapath(
  122. input clk,
  123. input resetn,
  124. input [9:0] datain,
  125. input loadx,loady,ld_draw,ld_clear,
  126. output reg[6:0]X,
  127. output reg[6:0]Y,
  128. output reg[2:0]color,
  129. output reg [4:0]counter,
  130. output reg[7:0]clear
  131. );
  132. reg [6:0]Xdraw;
  133. reg [6:0]Ydraw;
  134. reg [6:0]Xclear;
  135. reg [6:0]Yclear;
  136. reg [6:0]Xo;
  137. reg [6:0]Yo;
  138.  
  139.  
  140. always@(posedge clk) begin
  141. if(!resetn) begin
  142. Xo <= 7'b0;
  143. Yo <= 7'b0;
  144. end
  145. else begin
  146.  
  147. if(loadx)
  148. Xo <= datain[6:0];
  149. if(loady)
  150. Yo <= datain[6:0];
  151. end
  152. end
  153.  
  154.  
  155. always@(posedge clk)
  156. begin
  157. if(!resetn)
  158. begin
  159. Xclear <= 7'b0;
  160. Yclear <= 7'b0;
  161. clear <= 8'b00000000;
  162. end
  163.  
  164. else
  165. begin
  166. if(ld_clear && (clear != 8'b10000000))
  167. begin
  168. Xclear <= 0 + clear;
  169. Yclear <= 0 + clear;
  170. clear <= clear + 1;
  171. end
  172. if(!ld_clear)
  173. begin
  174. clear <= 8'b00000000;
  175. end
  176. end
  177. end
  178.  
  179. always@(posedge clk)
  180. begin
  181. if(!resetn) begin
  182. Xdraw<=7'b0;
  183. Ydraw<=7'b0;
  184. end
  185. else
  186. begin
  187. if(ld_draw && (counter != 5'b10000))
  188. begin
  189. Xdraw <= Xo + counter[1:0];
  190. Ydraw <= Yo + counter[3:2];
  191. counter <= counter + 1;
  192. end
  193. else
  194. begin
  195. if(!ld_draw)
  196. begin
  197. counter <= 5'b00000;
  198. Xdraw <= Xo;
  199. Ydraw <= Yo;
  200. end
  201. end
  202. end
  203. end
  204.  
  205. always@(posedge clk) begin
  206. if(!resetn) begin
  207. X <= 7'b0;
  208. Y <= 7'b0;
  209. color <= 3'b0;
  210. end
  211. else
  212. begin
  213. if(ld_draw)
  214. begin
  215. X <= Xdraw;
  216. Y <= Ydraw;
  217. color <= datain[9:7];
  218. end
  219. if(ld_clear)
  220. begin
  221. X <= Xclear;
  222. Y <= Yclear;
  223. color <= 3'b000;
  224. end
  225. end
  226. end
  227. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement