Advertisement
ForcaDz

top

Nov 17th, 2023
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.89 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Company: UPMC
  3. -- Engineer: Julien Denoulet
  4. --
  5. -- Module Principal - Casse Briques
  6. --
  7. ----------------------------------------------------------------------------------
  8. library IEEE,work;
  9. use IEEE.STD_LOGIC_1164.ALL;
  10. use IEEE.STD_LOGIC_unsigned.ALL;
  11. use work.pong_pack.all;
  12.  
  13. entity top_baxys is
  14. Port ( clk100 : in STD_LOGIC; -- Horloge 100 Mhz
  15. ouest : in STD_LOGIC; -- Reset Asynchrone (Bouton Ouest)
  16. nord,sud,est : in STD_LOGIC; -- Boutons Poussoir
  17. centre : in STD_LOGIC; -- Bouton Central (Demande de Pause)
  18.  
  19. S15,S3,S2,S1,S0 : in STD_LOGIC; -- Switchs
  20.  
  21. rot_a_console : in STD_LOGIC; -- Encodeur Rotatif (Mode Console)
  22. rot_b_console : in STD_LOGIC; -- Encodeur Rotatif (Mode Console)
  23. rot_a_manette : in STD_LOGIC; -- Encodeur Rotatif (Mode Manette)
  24. rot_b_manette : in STD_LOGIC; -- Encodeur Rotatif (Mode Manette)
  25.  
  26. tx_left : out std_logic; -- Emission Commande Gauche vers Autre Carte
  27. rx_left : in std_logic; -- Réception Commande Gauche d'une Autre Carte
  28. tx_right : out std_logic; -- Emission Commande Droite vers Autre Carte
  29. rx_right : in std_logic; -- Réception Commande Droite d'une Autre Carte
  30.  
  31. hsync : out STD_LOGIC; -- Synchro Horizontale VGA
  32. vsync : out STD_LOGIC; -- Synchro Verticale VGA
  33. VGA_red : out STD_LOGIC_VECTOR(3 downto 0); -- Rouge VGA
  34. VGA_green : out STD_LOGIC_VECTOR(3 downto 0); -- Vert VGA
  35. VGA_blue : out STD_LOGIC_VECTOR(3 downto 0); -- Bleu VGA
  36.  
  37. SS : out STD_LOGIC; -- Bus SPI Accéléromètre - Slave Select
  38. SCLK : out STD_LOGIC; -- Bus SPI Accéléromètre - Clock
  39. SDI : in STD_LOGIC; -- Bus SPI Accéléromètre - Data Input
  40. SDO : out STD_LOGIC; -- Bus SPI Accéléromètre - Data Output
  41.  
  42. SEL_SEG : out STD_LOGIC_VECTOR (3 downto 0); -- Selection de l'Afficheur
  43. SEG : out STD_LOGIC_VECTOR (7 downto 0); -- Segments Afficheurs
  44.  
  45. led : out STD_LOGIC_VECTOR(11 downto 0) -- LEDs
  46.  
  47. -------------------------------------------------------------------------
  48.  
  49. );
  50. end top_baxys;
  51.  
  52. architecture Behavioral of top_baxys is
  53.  
  54. signal clk25: std_logic; -- Horloge 25 Mhz
  55. signal reset: std_logic; -- Reset Asynchrone
  56.  
  57. signal display: std_logic_vector(11 downto 0); -- Pour Affichage des LEDs
  58.  
  59. -- PARAMETRES DE JEU
  60. signal game_rqt: std_logic; -- Demande de Changement de Jeu (Appui sur un Bouton Poussoir)
  61. signal master_slave: std_logic; -- Mode Maitre (Console) ou Esclave (Manette)
  62. signal master_slave_rqt: std_logic; -- Demande de Changement de Mode (Appui sur un Bouton Poussoir)
  63.  
  64.  
  65. -- SIGNAUX D'AFFICHAGE
  66. signal xpos,ypos: std_logic_vector(9 downto 0); -- Coordonnees Pixel Courant
  67. signal visible: std_logic; -- Zone Visible de l'Image
  68. signal endframe: std_logic; -- Fin Image Visible
  69. signal VGA_red_i: std_logic_vector(3 downto 0); -- Couleur R Fournie au VGA (sur 3x4 bits)
  70. signal VGA_green_i: std_logic_vector(3 downto 0); -- Couleur G Fournie au VGA (sur 3x4 bits)
  71. signal VGA_blue_i: std_logic_vector(3 downto 0); -- Couleur B Fournie au VGA (sur 3x4 bits)
  72. signal red,green,blue: std_logic_vector(3 downto 0); -- Consigne de Couleur des Objets à Afficher (sur 3x1 bit)
  73. signal variable_red: std_logic_vector(3 downto 0); -- Consigne de Couleur RED variable(sur 4 bits)
  74. signal variable_green: std_logic_vector(3 downto 0); -- Consigne de Couleur GREEN variable(sur 4 bits)
  75. signal variable_blue: std_logic_vector(3 downto 0); -- Consigne de Couleur BLUE variable(sur 4 bits)
  76. signal moving_color_cmd: std_logic; -- Commande d'affichage des couleurs variables
  77.  
  78. -- SIGNAUX DES MANETTES DE JEU
  79. signal manette: std_logic; -- Selection Manette de Jeu (Encodeur / Accéléromètre)
  80. signal rot_a,rot_b: std_logic; -- Signaux de l'Encodeur Rotatif (Selon le Mode Choisi)
  81. signal own_rot_left,own_rot_right: std_logic; -- Mouvement de l'Encodeur Rotatif de la Carte
  82. signal own_left,own_right: std_logic; -- Mouvement de Déplacement de la Carte (Selon Commande Acc/Enc)
  83. signal other_left,other_right: std_logic; -- Mouvement de Déplacement de l'Autre Carte
  84. signal own_press,other_press: std_logic; -- Appui sur Bouton Encodeur
  85. signal pause_rqt: std_logic; -- Demande de Pause
  86.  
  87. -- SIGNAUX ACCELEROMETRE
  88. signal Clk_Acc : STD_LOGIC; -- Horloge pour les Commandes de Déplacement de l'Accéléromètre
  89. signal own_acc_left,own_acc_right: STD_LOGIC; -- Commandes de Déplacement de l'Accéléromètre
  90.  
  91. -- SIGNAUX OPTIONS DE JEU
  92. signal game_type: std_logic; -- Type de Jeu (0 = Casse Brique / 1 = Pong)
  93. signal taille: std_logic; -- Parametre Taille de la Raquette
  94. signal speed: std_logic; -- Parametre Vitesse de la Balle
  95. signal obstacle: std_logic; -- Presence d'un Obstacle (Pong)
  96. signal game_lost: std_logic; -- Drapeau Partie Perdue
  97. signal pause: std_logic; -- Mode Pause
  98.  
  99. -- SIGNAUX OBJETS DU JEU
  100. signal bluebox: std_logic; -- Pixel Courant = Case Bleue du Decor
  101. signal left: std_logic; -- Pixel Courant = Bord Gauche de L'Ecran
  102. signal right: std_logic; -- Pixel Courant = Bord Droit de L'Ecran
  103. signal bottom: std_logic; -- Pixel Courant = En Bas de L'Ecran
  104. signal lost: std_logic; -- La Balle Va Sortir de L'Ecran
  105. signal pad: std_logic; -- Pixel Courant = Raquette
  106. signal ball: std_logic; -- Pixel Courant = Balle
  107. signal wall_pong: std_logic; -- Pixel Courant = Mur Jeu Pong
  108. signal wall_brick: std_logic; -- Pixel Courant = Mur Jeu Casse Briques
  109. signal barrier: std_logic; -- Pixel Courant = Obstacle (Jeu Pong)
  110. signal brick: tableau; -- Pixel Courant = Brique(i)(j)
  111. signal brick_bounce: tableau; -- Pixel Courant Rebondit Contre une Brique(i)(j)
  112.  
  113.  
  114.  
  115. begin
  116.  
  117.  
  118. -----------------------------------------------------------------------------------------
  119. -- GENERATEURS D'HORLOGES
  120. clk25MHz: entity work.ClkDiv
  121. port map (
  122. clk100 => clk100, -- Horloge 100 MHz
  123. reset => reset, -- Reset Asynchrone
  124. clk25 => clk25 -- Horloge 25 MHz
  125. );
  126.  
  127. clk25Hz: entity work.ClkAcc
  128. port map (
  129. clk100 => clk100, -- Horloge 100 MHz
  130. reset => reset, -- Reset Asynchrone
  131. Clk_Acc => Clk_Acc); -- Horloge 25 Hz (Pour Traitement des Commandes Accéléromètre)
  132.  
  133. -----------------------------------------------------------------------------------------
  134.  
  135.  
  136. -----------------------------------------------------------------------------------------
  137. -- GESTION DES ENTREES/SORTIES DE LA CARTE
  138.  
  139. -- Switch S0: 0 = Systeme OFF / 1 = Systeme ON
  140. -- Reset Asynchrone COnnecte au Bouton Ouest
  141. reset <= (not ouest) and S0 ;
  142.  
  143. -- CONTROLEUR DES INTERRUPTEURS
  144. switch: entity work.switch_mgr
  145. port map(
  146. S15 => S15,
  147. S3 => S3,
  148. S2 => S2,
  149. S1 => S1,
  150. taille => taille,
  151. speed => speed,
  152. obstacle => obstacle,
  153. manette => manette
  154. );
  155.  
  156.  
  157. -- CONTROLEUR DES BOUTONS POUSSOIRS
  158. buttons: entity work.button_mgr
  159. port map (
  160. clk25 => clk25, -- Horloge
  161. reset => reset, -- Reset Asynchrone
  162. nord => nord, -- Bouton Nord
  163. sud => sud, -- Bouton Sud
  164. est => est, -- Bouton Est
  165. press_sud => master_slave_rqt, -- Demande de Changement de Mode (Bouton Sud)
  166. press_nord_est => game_rqt -- Demande de Changement de Jeu (Bouton Nord ou Est)
  167. );
  168.  
  169.  
  170. -- AFFICHEURS 7 SEGMENTS
  171. aff: entity work.aff_mgr_basys
  172. port map (
  173. clk25 => clk25, -- Horloge 25 MHz
  174. reset => reset, -- Reset Asynchrone
  175. pause => pause, -- Commande Pause
  176. master_slave => master_slave, -- Mode Maitre (Console) ou Esclave (Manette)
  177. game_type => game_type, -- Type de Jeu (Pong / Casse-Briques=
  178. sel_seg => sel_seg, -- Selection de l'Afficheur
  179. seg => seg); -- Valeur des Segments de l'Afficheur
  180.  
  181.  
  182.  
  183. -- Sélection de l'Entrée à Utiliser pour l'Encodeur Rotatif
  184. -- En Fonction du Mode Console (PMOD B) ou Manette (PMOD C)
  185. rot_a <= rot_a_console when master_slave = '1' else rot_a_manette;
  186. rot_b <= rot_b_console when master_slave = '1' else rot_b_manette;
  187.  
  188.  
  189. -- CONTROLEUR DE L'ENCODEUR ROTATIF DE LA CARTE
  190. codeur: entity work.ip_rotary
  191. port map (
  192. clk25 => clk25, -- Horloge
  193. reset => reset, -- Reset Asynchrone
  194. rot_a => rot_a, -- Switch A du Codeur
  195. rot_b => rot_b, -- Switch B du Codeur
  196. rot_left => own_rot_left, -- Commande de Rotation a Gauche
  197. rot_right => own_rot_right); -- Commande de Rotation a Droite
  198.  
  199. -----------------------------------------------------------------
  200.  
  201. -- GESTION ACCELEROMETRE
  202. accelero_mgr : entity work.accelero_mgr(Behavioral)
  203.  
  204. port map(
  205. clk25 => clk25, -- Horloge
  206. reset => RESET, -- Reset
  207.  
  208. -- Accelerometer data signals
  209. own_acc_left => own_acc_left, -- Commande de Déplacement à Gauche
  210. own_acc_right => own_acc_right, -- Commande de Déplacement à Droite
  211.  
  212. --SPI Interface Signals
  213. SCLK => SCLK, -- Serial Clock
  214. SDO => SDO, -- Data Output
  215. SDI => SDI, -- Data Input
  216. SS => SS -- Slave Select
  217. );
  218.  
  219. -----------------------------------------------------------------
  220.  
  221.  
  222. -- Choix de la Manette par le Switch S15 (Manette)
  223. -- - 0 --> Encodeur Rotatif
  224. -- - 1 --> Accéléromètre
  225. own_left <= own_acc_left when manette = '1' else own_rot_left;
  226. own_right <= own_acc_right when manette = '1' else own_rot_right;
  227.  
  228. -- Envoi des Commandes de Déplacement (pour le Mode Manette)
  229. tx_left <= own_left; tx_right <= own_right;
  230.  
  231. -- Acquisition des Commandes de Déplacement d'une Autre Carte Utilisée comme Manette
  232. other_left <= rx_left; other_right <= rx_right;
  233.  
  234. -- Gestion de la Pause: Seule la Carte Maitre Peut Mettre le Jeu en Pause
  235. own_press <= centre;
  236. pause_rqt <= own_press;
  237.  
  238.  
  239. -----------------------------------------------------------------
  240.  
  241.  
  242. -- GESTION DES LEDS
  243. -- LED Allumees Si On Est en Mode Maitre (Console)
  244. -- LED Eteintes Si On Est en Mode Esclave (Manette)
  245.  
  246. display <= (others => '1') when (S0 = '1' and master_slave = '1')
  247. else (others => '0');
  248.  
  249. -- Envoi de la Valeur a Afficher sur les LEDs
  250. led <= display;
  251.  
  252. --------------------------------------------------------------------------------------------------------
  253.  
  254. -- GESTION DES OBJETS
  255. obj_ctrl: entity work.objects
  256. port map (
  257. clk25 => clk25, -- Horloge 25 MHz
  258. clk_acc => Clk_Acc, -- Horloge pour les Commandes de Déplacement de l'Accéléromètre
  259. reset => reset, -- Reset Asynchrone
  260. endframe => endframe, -- Fin de l'Image Visible
  261. xpos => xpos, -- Coordonnee X du Pixel Courant
  262. ypos => ypos, -- Coordonnee Y du Pixel Courant
  263.  
  264. own_left => own_left, -- Commande Deplacement Gauche Codeur de la Carte
  265. own_right => own_right, -- Commande Deplacement Droite Codeur de la Carte
  266. other_left => other_left, -- Commande Deplacement Gauche Codeur Autre Carte
  267. other_right => other_right, -- Commande Deplacement Droite Codeur Autre Carte
  268.  
  269. game_type => game_type, -- Choix du Type de Jeu
  270. manette => manette, -- Selection Manette (Encodeur vs Accéléromètre)
  271. taille => taille, -- Parametre Taille
  272. speed => speed, -- Vitesse du Jeu
  273. obstacle => obstacle, -- Presence d'un Obstacle (Pong)
  274. pause => pause, -- Commande Mode Pause
  275. game_lost => game_lost, -- Mode Echec
  276. bluebox => bluebox, -- Pixel Courant = Case Bleue
  277. left => left, -- Pixel Courant = Gauche de l'Ecran
  278. right => right, -- Pixel Courant = Droite de l'Ecran
  279. bottom => bottom, -- Pixel Courant = Bas de l'Ecran
  280. wall_pong => wall_pong, -- Pixel Courant = Mur Jeu Pong
  281. wall_brick => wall_brick, -- Pixel Courant = Mur Jeu Casse Briques
  282. barrier => barrier, -- Pixel Courant = Obstacle (Jeu Pong)
  283. pad => pad, -- Pixel Appartient a la Raquette
  284. brick => brick, -- Pixel Courant = Brique
  285. brick_bounce => brick_bounce, -- Rebond Contre une Brique
  286. ball => ball -- Pixel Courant = Balle
  287. );
  288.  
  289. -- Génération Signal de Commande d'Affichage d'une Couleur Variable
  290. -- Mise à 1 si le Pixel Courant Appartient à une Brique, Mise à 0 sinon
  291. process(brick)
  292. begin
  293. moving_color_cmd <= '0';
  294. for i in 0 to 1 loop
  295. for j in 0 to 8 loop
  296. if brick(i)(j)='1' then
  297. moving_color_cmd <= '1';
  298. end if;
  299. end loop;
  300. end loop;
  301. end process;
  302.  
  303. ------------------------------------------------------------------
  304.  
  305. lost <= ball and (bottom or left or right); -- La Balle Sort de L'Exran Si Elle Atteint un des Bords
  306.  
  307. -- GESTION DU JEU
  308. game_ctrl: entity work.game
  309. port map (
  310. clk25 => clk25, -- Horloge 25 MHz
  311. reset => reset, -- Reset Asynchrone
  312. master_slave_rqt => master_slave_rqt, -- Demande de Changement de Mode (Console / Manette)
  313. game_rqt => game_rqt, -- Demande de Changement de Jeu (Pong / Casse Briques)
  314.  
  315. -- ************** REMPLACER L'INSTRUCTION CI-DESSOUS PAR CELLE EN COMMENTAIRE *****************
  316. pause_rqt => S1, -- Demande de Pause - Appui sur Bouton Encodeur
  317. -- pause_rqt => pause_rqt, -- Demande de Pause - Appui sur Bouton Encodeur
  318. -- ********************************************************************************************
  319.  
  320. endframe => endframe, -- Fin de l'Image Visible
  321. visible => visible, -- Zone Visible de l'Image
  322. wall_pong => wall_pong, -- Pixel Courant = Mur Jeu Pong
  323. wall_brick => wall_brick, -- Pixel Courant = Mur Jeu Casse Briques
  324. barrier => barrier, -- Pixel Courant = Obstacle (Jeu Pong)
  325. lost => lost, -- La Balle Sort de L'Ecran
  326. bluebox => bluebox, -- Pixel Courant = Case Bleue
  327. pad => pad, -- Pixel Courant = Raquette
  328. ball => ball, -- Pixel Courant = Balle
  329. brick => brick, -- Pixel Courant = Brique
  330. red => red(3), -- Commande Affichage Rouge
  331. green => green(3), -- Commande Affichage Vert
  332. blue => blue(3), -- Commande Affichage Bleu
  333. brick_bounce => brick_bounce, -- Rebond Contre une Brique
  334. master_slave => master_slave, -- Selection Mode Esclave / Maitre
  335. game_type => game_type, -- Selection du Type de Jeu
  336. game_lost => game_lost, -- Timer du Mode Partie Perdue
  337. pause => pause -- Mode Pause
  338. );
  339.  
  340.  
  341. -----------------------------------------------------------------------------------
  342.  
  343.  
  344. -- -- CONTROLEUR VGA
  345. -- vga_ctrl: entity work.VGA
  346. -- port map (
  347. -- clk25 => clk25, -- Horloge 25 MHz
  348. -- reset => reset, -- Reset Asynchrone
  349. -- r => red(3), -- Commande Affichage Rouge
  350. -- g => green(3), -- Commande Affichage Vert
  351. -- b => blue(3), -- Commande Affichage Bleu
  352. -- red => VGA_red(3), -- Affichage Pixel Rouge
  353. -- green => VGA_green(3), -- Affichage Pixel Vert
  354. -- blue => VGA_blue(3), -- Affichage Pixel Bleu
  355. -- vsync => vsync, -- Synchro Verticale
  356. -- hsync => hsync, -- Synchro Horizontale
  357. -- visible => visible, -- Zone Visible de l'Image
  358. -- endframe => endframe, -- Fin de l'Image Visible
  359. -- xpos => xpos, -- Coordonnee X du Pixel Courant
  360. -- ypos => ypos); -- Coordonnee Y du Pixel Courant
  361.  
  362. --VGA_red(2 downto 0) <= "000";
  363. --VGA_green(2 downto 0) <= "000";
  364. --VGA_blue(2 downto 0) <= "000";
  365.  
  366. -----------------------------------------------------------------------------------
  367.  
  368. -- CONTROLEUR VGA 4 bits
  369. vga_ctrl: entity work.VGA_4bits
  370. port map (
  371. clk25 => clk25, -- Horloge 25 MHz
  372. reset => reset, -- Reset Asynchrone
  373. r => VGA_red_i, -- Commande Affichage Rouge
  374. g => VGA_green_i, -- Commande Affichage Vert
  375. b => VGA_blue_i, -- Commande Affichage Bleu
  376. red => VGA_red, -- Affichage Pixel Rouge
  377. green => VGA_green, -- Affichage Pixel Vert
  378. blue => VGA_blue, -- Affichage Pixel Bleu
  379. vsync => vsync, -- Synchro Verticale
  380. hsync => hsync, -- Synchro Horizontale
  381. visible => visible, -- Zone Visible de l'Image
  382. endframe => endframe, -- Fin de l'Image Visible
  383. xpos => xpos, -- Coordonnee X du Pixel Courant
  384. ypos => ypos); -- Coordonnee Y du Pixel Courant
  385.  
  386.  
  387. -- INSTANCIATION MODULE DE GENERATION DE COULEURS VARIABLES
  388. ColorGen: entity work.Moving_Colors
  389. port map(
  390. Clk100 => clk100, -- Horloge 100 Mhz
  391. Reset => reset, -- Reset Asynchrone
  392. RED_OUT => variable_red, -- Consigne Couleur Rouge
  393. GREEN_OUT => variable_green, -- Consigne Couleur Verte
  394. BLUE_OUT => variable_blue -- Consigne Couleur Bleue
  395. );
  396.  
  397.  
  398. -- CONSIGNE DE COULEUR ENVOYEE AU CONTROLEUR VGA
  399. VGA_red_i <= "0000" when master_slave = '0' else -- Noir Si on Est en Mode Manette
  400. variable_red when (moving_color_cmd='1') -- Sinon Couleur Variable si Commande Activée
  401. else red; -- Sinon Consigne ROUGE Standard
  402.  
  403. VGA_green_i <= "0000" when master_slave = '0' else -- Noir Si on Est en Mode Manette
  404. variable_green when (moving_color_cmd='1') -- Sinon Couleur Variable si Commande Activée
  405. else green; -- Sinon Consigne VERTE Standard
  406.  
  407. VGA_blue_i <= "0000" when master_slave = '0' else -- Noir Si on Est en Mode Manette
  408. variable_blue when (moving_color_cmd='1') -- Sinon Couleur Variable si Commande Activée
  409. else blue; -- Sinon Consigne BLEUE Standard
  410.  
  411.  
  412.  
  413. end Behavioral;
  414.  
  415.  
  416.  
  417.  
  418.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement