Commit d329d9f24c4093a1b5e972e3f1817609ea591205
1 parent
2ceacc81
Code VHDL pour le control VGA
Showing
1 changed file
with
81 additions
and
107 deletions
Show diff stats
TP_VGA/TP_VGA.srcs/sources_1/new/VGA_vhdl.vhd
1 | ----------------------------------------------------------------------------------- | |
2 | --- Company: | |
3 | --- Engineer: | |
4 | --- | |
5 | --- Create Date: 04.10.2023 16:25:02 | |
6 | --- Design Name: | |
7 | --- Module Name: VGA_vhdl - Behavioral | |
8 | --- Project Name: | |
9 | --- Target Devices: | |
10 | --- Tool Versions: | |
11 | --- Description: | |
12 | --- | |
13 | --- Dependencies: | |
14 | --- | |
15 | --- Revision: | |
16 | --- Revision 0.01 - File Created | |
17 | --- Additional Comments: | |
18 | --- | |
19 | ----------------------------------------------------------------------------------- | |
1 | +library IEEE; | |
2 | +use IEEE.STD_LOGIC_1164.ALL; | |
3 | +use IEEE.STD_LOGIC_ARITH.ALL; | |
4 | +use IEEE.STD_LOGIC_UNSIGNED.ALL; | |
20 | 5 | |
21 | -library ieee; | |
22 | -use ieee.std_logic_unsigned.all; | |
23 | -use ieee.numeric_std.all; | |
24 | -use ieee.std_logic_1164.all; | |
6 | +entity VGA_Rectangle is | |
7 | + Port ( Clk_sys: in STD_LOGIC; | |
8 | + Rst: in STD_LOGIC; | |
9 | + vga_hsync: out STD_LOGIC; | |
10 | + vga_vsync: out STD_LOGIC; | |
11 | + Vga_red, Vga_green, Vga_blue: out STD_LOGIC_VECTOR (3 downto 0) | |
12 | + ); | |
13 | +end VGA_Rectangle; | |
25 | 14 | |
26 | --- Uncomment the following library declaration if using | |
27 | ---use IEEE.NUMERIC_STD.ALL; | |
15 | +architecture Behavioral of VGA_Rectangle is | |
16 | + -- Définition des pixels de la zone visible, front porche, back et synchronisation horizontale. | |
17 | + -- Zone de synchronisation horizontale de 136 Pixels, Tpw | |
18 | + constant H_SYNC_CYC : integer := 136; | |
19 | + -- Zone horizontale arrière de 160 Pixels, Tbp. | |
20 | + constant H_SYNC_BACK: integer := 160; | |
21 | + -- Zone active d’affichage horizontale de 1024 pixels | |
22 | + constant H_SYNC_ACT : integer := 1024; | |
23 | + -- Zone horizontale avant. | |
24 | + constant H_SYNC_FRONT: integer := 24; | |
25 | + constant H_SYNC_TOTAL: integer := 1344; | |
26 | + | |
27 | + -- Définition des pixels de la zone visible, front porche, back et synchronisation Verticale. | |
28 | + -- Zone de synchronisation verticale de 6 Pixels, Tpw | |
29 | + constant V_SYNC_CYC : integer := 6; | |
30 | + -- Zone horizontale arrière de 29 Pixels, Tbp. | |
31 | + constant V_SYNC_BACK: integer := 29; | |
32 | + -- Zone active d’affichage horizontale de 768 pixels. | |
33 | + constant V_SYNC_ACT : integer := 768; | |
34 | + -- Zone horizontale avant. | |
35 | + constant V_SYNC_FRONT: integer := 3; | |
28 | 36 | |
29 | --- Uncomment the following library declaration if instantiating | |
30 | ---library UNISIM; | |
31 | ---use UNISIM.VComponents.all; | |
37 | + signal h_counter: integer range 0 to 1343 := 0; | |
38 | + signal v_counter: integer range 0 to 805 := 0; | |
32 | 39 | |
33 | -entity VGA_vhdl is | |
34 | - Port ( Clk_sys : in STD_LOGIC; | |
35 | - b1 : in STD_LOGIC; | |
36 | - b2 : in STD_LOGIC; | |
37 | - b3 : in STD_LOGIC; | |
38 | - Reset : in STD_LOGIC; | |
39 | - HS : out std_logic; | |
40 | - HV : out std_logic; | |
41 | - R : out std_logic_vector(3 downto 0); | |
42 | - G : out std_logic_vector(3 downto 0); | |
43 | - B : out std_logic_vector(3 downto 0) | |
44 | - ); | |
45 | -end VGA_vhdl; | |
46 | - | |
47 | -architecture Behavioral of VGA_vhdl is | |
48 | - | |
49 | -signal pixel_clk : std_logic := '0'; | |
50 | -signal CompteurHS: std_logic_vector(11 downto 0); -- Generation du signal VH | |
51 | -signal CompteurVS: std_logic_vector(9 downto 0); | |
52 | -------------------- | |
53 | --- CLOCK 65 MHZ -- | |
54 | -------------------- | |
55 | -component clk_wiz_0 | |
56 | -port | |
57 | - (-- Clock in ports | |
58 | - -- Clock out ports | |
59 | - clk_out1 : out std_logic; | |
60 | - clk_in1 : in std_logic | |
61 | - ); | |
62 | -end component; | |
63 | - | |
64 | -begin | |
65 | ----------- | |
66 | --- Compteur Horizental -- | |
67 | ------------- | |
68 | -Compteur_HS: process(pixel_clk) | |
40 | + constant RECTANGLE_WIDTH: integer := 200; -- Rectangle width | |
41 | + constant RECTANGLE_HEIGHT: integer := 200; -- Rectangle height | |
42 | + signal pixel_clk : std_logic; | |
43 | + -- Pour faire la division de fréquence d'FPGA de 100Mhz a 63 MHz. | |
44 | + component clk_wiz_0 port( | |
45 | + clk_out1 : out std_logic; | |
46 | + clk_in1 : in std_logic | |
47 | + ); | |
69 | 48 | begin |
70 | - if rising_edge(pixel_clk) then | |
71 | - if CompteurHS < 1344 then | |
72 | - CompteurHS <= CompteurHS +1; | |
73 | - HS <= '1'; | |
74 | - if CompteurHS = 1048 then | |
75 | - HS <= '0'; | |
76 | - elsif CompteurHS = 1184 then | |
77 | - HS <= '1'; | |
49 | + Clk_divide: clk_wizard_0 port map( | |
50 | + clk_ou1 => pixel_clk; | |
51 | + clk_in1 => Clk_sys | |
52 | + ); | |
53 | + -- Le première processus pour faire le balayage des pixels d'image. | |
54 | + Blayage :process(pixel_clk, Rst) | |
55 | + begin | |
56 | + if Rst = '1' then | |
57 | + h_counter <= 0; | |
58 | + v_counter <= 0; | |
59 | + elsif rising_edge(clk) then | |
60 | + if h_counter = 1343 then | |
61 | + h_counter <= 0; | |
62 | + if v_counter = 805 then | |
63 | + v_counter <= 0; | |
64 | + else | |
65 | + v_counter <= v_counter + 1; | |
66 | + end if; | |
67 | + else | |
68 | + h_counter <= h_counter + 1; | |
78 | 69 | end if; |
79 | - else CompteurHS <= (others => '0'); | |
80 | - end if; | |
81 | - end if; | |
82 | -end process; | |
83 | ----------- | |
84 | --- Compteur Vertical -- | |
85 | ------------- | |
86 | -Compteur_VS: process(pixel_clk) | |
87 | -begin | |
88 | - if rising_edge(pixel_clk) then | |
89 | - if CompteurVS < 806 then | |
90 | - CompteurHS <= CompteurHS +1; | |
91 | - HS <= '1'; | |
92 | - if CompteurVS = 771 then | |
93 | - HS <= '0'; | |
94 | - elsif CompteurVS = 777 then | |
95 | - HS <= '1'; | |
96 | - end if; | |
97 | - else CompteurVS <= (others => '0'); | |
98 | 70 | end if; |
99 | - end if; | |
100 | -end process; | |
101 | ------------- | |
102 | - | |
103 | -your_instance_name : clk_wiz_0 | |
104 | - port map ( | |
105 | - -- Clock out ports | |
106 | - clk_out1 => pixel_clk, | |
107 | - -- Clock in ports | |
108 | - clk_in1 => Clk_sys | |
109 | - ); | |
110 | - ---------------- | |
111 | - | |
112 | - | |
71 | + end process; | |
72 | + | |
73 | + Afficheur : process(h_counyter, v_counter) | |
74 | + begin | |
75 | + vga_hsync <= '1' when (h_counter < H_SYNC_CYC) else '0'; | |
76 | + vga_vsync <= '1' when (v_counter < V_SYNC_CYC) else '0'; | |
77 | + -- Afficher le rectangle. | |
78 | + if (h_counter >= H_SYNC_BACK + 200) and (h_counter < H_SYNC_BACK + 600) | |
79 | + and (v_counter >= V_SYNC_BACK 200) and (v_counter < V_SYNC_BACK + 600) then | |
80 | + vga_red <= "1111"; | |
81 | + vga_green <= "0000"; | |
82 | + vga_blue <= "0000"; | |
83 | + else | |
84 | + vga_red <= "0000"; | |
85 | + vga_green <= "0000"; | |
86 | + vga_blue <= "0000"; | |
87 | + end if; | |
88 | + end process; | |
113 | 89 | end Behavioral; | ... | ... |