vhdl_libs/VGA_Vert.vhd
2024-02-12 09:45:51 -07:00

90 lines
1.9 KiB
VHDL
Executable File

Library IEEE;
use ieee.numeric_std.all;
use ieee.std_logic_1164.all;
entity VGA_Vert is
port(
clk :in std_logic;
areset_l :in std_logic;
trig :in std_logic;
data_en :out std_logic;
sync_v :out std_logic
);
end VGA_Vert;
architecture behave of VGA_Vert is
type state is (sync, data);
signal PS,NS :state;
signal count :integer;
begin
syncProc : process(clk,areset_l)
begin
if(areset_l='0')then
PS<=sync;
elsif(rising_edge(clk))then
PS<=NS;
end if;
end process syncProc;
countProc : process(clk,areset_l,trig)
begin
if(areset_l='0')then
count<=0;
elsif(rising_edge(clk))then
if(PS=data and NS=sync)then
count<=0;
else
if(trig='1')then
count<=count+1;
end if;
end if;
end if;
end process countProc;
stateProc : process (PS,count)
begin
case PS is
when sync=>
if(count>=44)then
NS<=data;
else
NS<=sync;
end if;
when data=>
if(count>=524)then
NS<=sync;
else
NS<=data;
end if;
end case;
end process stateProc;
outputProc : process(PS, count)
begin
case PS is
when sync =>
data_en<='0';
if(count>9 and count<12)then
sync_v<='0';
else
sync_v<='1';
end if;
when data=>
data_en<='1';
sync_v<='1';
end case;
end process outputProc;
end behave;