Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1.  
  2. library IEEE;
  3. use IEEE.STD_LOGIC_1164.ALL;
  4. use IEEE.Numeric_STD.ALL;
  5.  
  6.  
  7. entity Game is
  8. Port ( clk : in STD_LOGIC;
  9. SW0,SW1,SW2,SW3 : in STD_LOGIC;
  10. DAC_CLK : out STD_LOGIC;
  11. H : out STD_LOGIC;
  12. V : out STD_LOGIC;
  13. Bout : out STD_LOGIC_VECTOR (7 downto 0);
  14. Gout : out STD_LOGIC_VECTOR (7 downto 0);
  15. Rout : out STD_LOGIC_VECTOR (7 downto 0)
  16. );
  17. end Game;
  18.  
  19. architecture Behavioral of Game is
  20.  
  21. signal x, y, VSync, HSync, hBP, vBP : Integer := 0;
  22. signal xR,xB,xG : STD_LOGIC_VECTOR(7 downto 0):= "00000000";
  23. signal xH, xV,xDAC_CLK : STD_LOGIC :='0';
  24.  
  25. signal Paddle1y : integer := 240;
  26. signal Paddle2y : integer := 240;
  27.  
  28. signal Paddle1counter, Paddle2counter, ball_counter : integer;
  29.  
  30.  
  31. signal bx : integer := 80;
  32. signal by : integer := 80;
  33.  
  34.  
  35. signal b_pos_x :integer := 1;
  36. signal b_pos_y :integer := 1;
  37.  
  38. --
  39. -- signal score1,score2 : integer :=0;
  40.  
  41. signal pause : integer :=0;
  42. begin
  43.  
  44.  
  45. process(clk)
  46. begin
  47. if (rising_edge(clk)) then
  48. xDAC_CLK <= NOT(xDAC_CLK);
  49. end if;
  50. end process;
  51.  
  52.  
  53. process(xDAC_CLK)
  54. begin
  55. if (rising_edge(xDAC_CLK)) then
  56. if (HSync < 800 -1) then
  57. HSync <= HSync + 1;
  58. else
  59. HSync <= 0;
  60. if (VSync < 525 - 1) then
  61. VSync <= VSync + 1;
  62. else
  63. VSync <= 0;
  64. end if;
  65. end if;
  66. end if;
  67. end process;
  68.  
  69.  
  70. xH <=
  71. '1' when (HSync < 640 + 16) OR (HSync > 640 + 16 + 96) else
  72. '0';
  73.  
  74.  
  75. xV <=
  76. '1' when (VSync < 480 + 10) OR (VSync > 480 + 10 + 2) else
  77. '0';
  78.  
  79.  
  80. x <=
  81. HSync when (HSync < 640) else
  82. X;
  83.  
  84. y <=
  85. VSync when (VSync < 480) else
  86. X;
  87.  
  88.  
  89. process(xDAC_CLK)
  90. begin
  91. if (rising_edge(xDAC_CLK)) then
  92. Paddle1counter <= Paddle1counter +1;
  93. if (Paddle1counter > 300000) then
  94. Paddle1counter <= 0;
  95. if ((SW0 XOR SW1)= '1') then
  96. if (SW0 = '1' AND Paddle1y - 30 > 30) then
  97. Paddle1y <= Paddle1y - 1;
  98. elsif (SW1 = '1' AND Paddle1y + 30 < 450) then
  99. Paddle1y <= Paddle1y + 1;
  100. end if;
  101. end if;
  102. end if;
  103. end if;
  104. end process;
  105.  
  106.  
  107. process(xDAC_CLK)
  108. begin
  109. if (rising_edge(xDAC_CLK)) then
  110. Paddle2counter <= Paddle2counter + 1;
  111. if (Paddle2counter > 300000) then
  112. Paddle2counter <= 0;
  113. if ((SW2 XOR SW3) = '1') then
  114. if (SW2 = '1' AND Paddle2y - 30 > 30) then
  115. Paddle2y <= Paddle2y - 1;
  116. elsif (SW3 = '1' AND Paddle2y + 30 < 450) then
  117. Paddle2y <= Paddle2y + 1;
  118. end if;
  119. end if;
  120. end if;
  121. end if;
  122. end process;
  123.  
  124. process(xDAC_CLK)
  125. begin
  126. if (rising_edge(xDAC_CLK)) then
  127. ball_counter <= ball_counter + 1;
  128. if (ball_counter > 175000) then
  129. ball_counter <= 0;
  130. -- if (score1 = 4 OR score2 = 4) then
  131. -- bx <= 320;
  132. -- by <= 240;
  133. -- score1 <= 0;
  134. -- score2 <= 0;
  135. -- end if;
  136. if (((bx + b_pos_x - 8) < 30) AND ( ((by + b_pos_y - 8) > 160) AND ((by + b_pos_y + 8) < 320 ) )) then
  137. pause <= pause + 1;
  138. if (pause = 20) then
  139. bx <= 320;
  140. by <= 240;
  141. -- score1 <= score1 + 1;
  142. pause <= 0;
  143.  
  144. end if;
  145. elsif (((bx + b_pos_x + 8) > 610) AND ( ((by + b_pos_y - 8) > 160) AND ((by + b_pos_y + 8) < 320 ) )) then
  146. pause <= pause + 1;
  147. if (pause = 20) then
  148. bx <= 320;
  149. by <= 240;
  150. -- score2 <= score2 + 1;
  151. pause <= 0;
  152. end if;
  153. else
  154.  
  155. if ( (((bx + b_pos_x - 8 < 70) AND (bx + b_pos_x + 8 > 60)) AND ( (Paddle1y+30 > by + b_pos_y + 8 ) AND (Paddle1y-30 < by + b_pos_y - 8) ) ) OR (((bx + b_pos_x + 8 > 570) AND (bx + b_pos_x - 8 < 580)) AND ( (Paddle2y+30 > by + b_pos_y + 8 ) AND (Paddle2y-30 < by + b_pos_y - 8) ))) Then
  156. b_pos_x <= -b_pos_x;
  157. b_pos_y <= -b_pos_y;
  158. else
  159. if ((bx + b_pos_x +8 > 610) OR (bx + b_pos_x - 8 < 30) ) then
  160. b_pos_x <= -b_pos_x;
  161. elsif (by + b_pos_y + 8 > 450 OR by +b_pos_y -8 < 30) then
  162. b_pos_y <= -b_pos_y;
  163. end if;
  164. end if;
  165. bx <= bx + b_pos_x;
  166. by <= by + b_pos_y;
  167. end if;
  168. end if;
  169. end if;
  170. end process;
  171.  
  172.  
  173. process (xDAC_CLK)
  174. begin
  175. if (VSync < 480 AND HSync < 640) then
  176.  
  177. if ((y < 10) OR (y > 470)) then
  178. xR <= "11111111";
  179. xG <= "11111111";
  180. xB <= "11111111";
  181.  
  182. elsif( ((y > 15 AND y < 30) AND (x > 30 AND x < 610)) OR ((y < 465 AND y>450) AND (x > 30 AND x < 610)) OR (((y>15 AND y<160) OR (y>320 AND y<465)) AND (x>30 AND x<45)) OR (((y>15 AND y<160) OR (y>320 AND y<465)) AND (x>595 AND x<610))) then
  183. xR <= "00000000";
  184. xG <= "00000000";
  185. xB <= "00000000";
  186.  
  187. elsif ((x > 318 AND x < 322) AND ((y>60 AND y<100) OR (y>140 AND y<180) OR (y>220 AND y<260) OR (y>300 AND y<340) OR (y>380 AND y<420))) then
  188. xR <= "10101010";
  189. xG <= "00000000";
  190. xB <= "11111111";
  191. elsif(((y > 29 AND y < 451) AND (x > 44 AND x < 104)) OR ((y > 29 AND y < 451) AND (x > 164 AND x < 224)) OR ((y > 29 AND y < 451) AND (x > 284 AND x < 344)) OR ((y > 29 AND y < 451) AND (x > 404 AND x < 464)) OR ((y > 29 AND y < 451) AND (x > 524 AND x < 584)) OR ((y > 29 AND y < 451) AND (x > 644 AND x < 704))) then
  192. xR <= "00000000";
  193. xG <= "11111111";
  194. xB <= "00000000";
  195. else
  196. xR <= "11111111";
  197. xG <= "11111111";
  198. xB <= "11111111";
  199. end if;
  200.  
  201. if((y>(Paddle1y-30) AND y<(Paddle1y+30)) AND (x>60 AND x<70)) then
  202. xB <= "11111111";
  203. xR <= "00000000";
  204. xG <= "00000000";
  205.  
  206. end if;
  207. if ((y>(Paddle2y-30) AND y<(Paddle2y+30)) AND (x>570 AND x<580)) then
  208. xB <= "00000000";
  209. xR <= "11110111";
  210. xG <= "00000000";
  211. end if;
  212. if(((y > (by-8)) AND (y < (by+8))) AND ((x > (bx-8)) AND (x < (bx+8)))) then
  213. xR <= "10101010";
  214. xG <= "00000000";
  215. xB <= "11111111";
  216. end if;
  217. if (((((bx) < 40) AND (((by) > 160) AND ((by) < 320 ))) OR (((bx) > 600) AND (((by) > 160) AND ((by) < 320 )))) AND ((y > (by-8)) AND (y < (by+8))) AND ((x > (bx-8)) AND (x < (bx+8)))) then
  218. xR <= "10101010";
  219. xG <= "11111111";
  220. xB <= "00000000";
  221. end if;
  222. else
  223. xR <= "00000000";
  224. xG <= "00000000";
  225. xB <= "00000000";
  226. end if;
  227. end process;
  228.  
  229. --PORT MAPING
  230.  
  231. DAC_CLK <= xDAC_CLK;
  232. Rout <= xR;
  233. Gout <= xG;
  234. Bout <= xB;
  235. H <= xH;
  236. V <= xV;
  237.  
  238. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement