Advertisement
ForcaDz

vga

Nov 17th, 2023
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Company: UPMC
  3. -- Engineer: Julien Denoulet
  4. --
  5. -- Controleur VGA - Generation des Coordonnees Pixels et Signaux de Synchro
  6. --
  7. ----------------------------------------------------------------------------------
  8. library ieee;
  9. use ieee.std_logic_1164.all;
  10. use ieee.std_logic_unsigned.all;
  11.  
  12. entity VGA_4bits is
  13. port (
  14. clk25,reset: in std_logic; -- Horloge, Reset Asynchrone
  15. r,g,b: in std_logic_vector(3 downto 0); -- Commande de Couleur Donnee par le Controleur de Jeu
  16. red,green,blue: out std_logic_vector(3 downto 0); -- Affichage Couleur vers Ecran VGA
  17. hsync,vsync: out std_logic; -- Synchro Ligne (H) et Trame (V)
  18. visible: out std_logic; -- Partie Visible de l'Image
  19. endframe: out std_logic; -- Dernier Pixel Visible d'une Trame
  20. xpos,ypos: out std_logic_vector(9 downto 0) -- Coordonnees du Pixel Courant
  21. );
  22. end VGA_4bits;
  23.  
  24. architecture archi of VGA_4bits is
  25.  
  26. -- Compteur Coordonnnees Pixel
  27. signal xcord,ycord: std_logic_vector(9 downto 0);
  28.  
  29. -- Signal de Fin de Ligne
  30. signal endline: std_logic;
  31.  
  32. -- Signal Zone Visible de l'Image
  33. signal image_visible: std_logic;
  34.  
  35. begin
  36.  
  37. -- Affichage Couleur
  38. red <= r when image_visible='1' else "0000";
  39. green <= g when image_visible='1' else "0000";
  40. blue <= b when image_visible='1' else "0000";
  41.  
  42. -- Affectation en Sortie des Coordonnnees Pixel
  43. xpos <= xcord;
  44. ypos <= ycord;
  45.  
  46. -- Partie Visible de l'Image (Matrice 640 Colonnes x 480 Lignes)
  47. image_visible <= '1' when (xcord < 640) and (ycord < 480)
  48. else '0';
  49. visible <= image_visible;
  50.  
  51. -- Signal de Fin de Ligne (Partie Visible + Non Visible)
  52. endline <='1' when xcord = 799 else '0';
  53.  
  54. -- Fin de Trame (Dernier Pixel Visible de l'Image
  55. endframe <='1' when (xcord=0) and (ycord=480) else '0';
  56.  
  57. --led <='1' when
  58.  
  59.  
  60. -------------------------------------------------------------------------
  61. -- COMPTEURS LIGNE ET COLONNE
  62. process(clk25,reset)
  63.  
  64. begin
  65.  
  66. if reset = '0' then
  67.  
  68. xcord <= (others=>'0');
  69. ycord <= (others=>'0');
  70.  
  71. elsif rising_edge(clk25) then
  72.  
  73. -- Incrementation Compteur Colonne
  74. xcord <= xcord + 1;
  75.  
  76. -- Si on Arrive en Fin de Ligne
  77. if (endline = '1') then
  78.  
  79. -- RAZ Compteur Colonne
  80. xcord <= (others=>'0');
  81.  
  82. -- Incrementation Compteur Ligne
  83. -- RAZ apres 521 Lignes
  84. if (ycord = 520) then
  85. ycord <= (others =>'0');
  86. else
  87. ycord <= ycord + 1;
  88. end if;
  89.  
  90. end if;
  91.  
  92. end if;
  93. end process;
  94.  
  95.  
  96. -------------------------------------------------------------------------
  97. -- GENERATION DES SIGNAUX DE SYNCHRO
  98.  
  99. -- SYNCHRO LIGNE (HSYNC)
  100. -- Colonne 0 --> 639 : Partie Visible
  101. -- Colonne 640 --> 664 : Pre-Synchro
  102. -- Colonne 665 --> 759 : Synchro
  103. -- Colonne 760 --> 799 : Post-Synchro
  104.  
  105. -- SYNCHRO TRAME (VSYNC)
  106. -- Colonne 0 --> 479 : Partie Visible
  107. -- Colonne 480 --> 489 : Pre-Synchro
  108. -- Colonne 490 --> 491 : Synchro
  109. -- Colonne 492 --> 520 : Post-Synchro
  110.  
  111. process (clk25,reset)
  112.  
  113. begin
  114.  
  115. if reset = '0' then
  116.  
  117. hsync <= '1';
  118. vsync <= '1';
  119.  
  120. elsif rising_edge(clk25) then
  121.  
  122. -- Synchro Ligne
  123. if (xcord > 664) and (xcord <= 759) then
  124. hsync <= '0';
  125. else
  126. hsync <= '1';
  127. end if;
  128.  
  129. -- Synchro Trame
  130. if (ycord = 490) or (ycord = 491) then
  131. vsync <= '0';
  132. else
  133. vsync <= '1';
  134. end if;
  135.  
  136. end if;
  137. end process;
  138.  
  139. end archi;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement