📄 vga_16.vhd
字号:
--VGA 显示源程序:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity vga_16 is
Port ( clk : in std_logic;
hs : out std_logic;
vs : out std_logic;
r : out std_logic;
g : out std_logic;
b : out std_logic;
innum : in std_logic_vector(15 downto 0);
innum0 : in std_logic_vector(15 downto 0);
innum1 : in std_logic_vector(6 downto 0);
innum2 : in std_logic_vector(6 downto 0);
innum3 : in std_logic_vector(6 downto 0);
innum4 : in std_logic_vector(6 downto 0));
end vga_16;
architecture Behavioral of vga_16 is
constant color1: std_logic_vector:="010"; --显示颜色为红色
constant color2: std_logic_vector:="100";
constant color3: std_logic_vector:="001";
constant color4: std_logic_vector:="110";
signal hs1,vs1,fclk,cclk: std_logic;
signal fs: std_logic_vector(5 downto 0);
signal cc: std_logic_vector(4 downto 0);
signal ll: std_logic_vector(8 downto 0);
signal rgbp: std_logic_vector(3 downto 1);
signal rgb: std_logic_vector(3 downto 1);
begin
rgb(1)<=rgbp(1) and hs1 and vs1;
rgb(2)<=rgbp(2) and hs1 and vs1;
rgb(3)<=rgbp(3) and hs1 and vs1;
fclk<=fs(5);
cclk<=cc(4);
hs<=hs1;
vs<=vs1;
r<=rgb(2);
g<=rgb(3);
b<=rgb(1);
process(clk)
begin
if clk'event and clk='1' then
if fs=50 then
fs<="000000";
else
fs<=fs+1;
end if;
end if;
end process;
process(fclk)
begin
if fclk'event and fclk='1' then
if cc=27 then
cc<="00000";
else
cc<=cc+1;
end if;
end if;
end process;
process(cclk)
begin
if cclk'event and cclk='1' then
if ll=481 then
ll<="000000000";
else
ll<=ll+1;
end if;
end if;
end process;
process(cc, ll)
begin
if cc>23 then --行同步
hs1<='0';
else hs1<='1';
end if;
if ll>479 then --场同步
vs1<='0';
else vs1<='1';
end if;
end process;
process(cc,ll,innum,innum0,innum1,innum2,innum3,innum4)
begin
if cc>2 and cc<7 then
if ll>60 and ll<101 and innum4(0)='0' then --a0
rgbp<=color1;
elsif ll>180 and ll<221 and innum4(6)='0' then --g0
rgbp<=color1;
elsif ll>300 and ll<341 and innum4(3)='0' then --d0
rgbp<=color1;
elsif ll>60 and ll<202 then
if (cc>2 and cc<4) and innum4(5)='0' then --f0
rgbp<=color1;
elsif (cc>5 and cc<7) and innum4(1)='0' then --b0
rgbp<=color1;
else rgbp<="000";
end if;
elsif ll>201 and ll<341 then
if (cc>2 and cc<4) and innum4(4)='0' then --e0
rgbp<=color1;
elsif (cc>5 and cc<7) and innum4(2)='0' then --c0
rgbp<=color1;
else rgbp<="000";
end if;
elsif ll>350 and ll<370 then
if cc>2 and cc<4 and innum(15)='1' then --p8
rgbp<=color1;
elsif cc>3 and cc<5 and innum(14)='1' then --p4
rgbp<=color1;
elsif cc>4 and cc<6 and innum(13)='1' then --p2
rgbp<=color1;
elsif cc>5 and cc<7 and innum(12)='1' then --p1
rgbp<=color1;
else rgbp<="000";
end if;
elsif ll>380 and ll<400 then
if cc>2 and cc<4 and innum0(15)='1' then --q8
rgbp<=color1;
elsif cc>3 and cc<5 and innum0(14)='1' then --q4
rgbp<=color1;
elsif cc>4 and cc<6 and innum0(13)='1' then --q2
rgbp<=color1;
elsif cc>5 and cc<7 and innum0(12)='1' then --q1
rgbp<=color1;
else rgbp<="000";
end if;
else
rgbp<="000";
end if;
elsif cc>7 and cc<12 then
if ll>60 and ll<101 and innum3(0)='0' then
rgbp<=color2;
elsif ll>180 and ll<221 and innum3(6)='0' then
rgbp<=color2;
elsif ll>300 and ll<341 and innum3(3)='0' then
rgbp<=color2;
elsif ll>60 and ll<202 then
if (cc>7 and cc<9) and innum3(5)='0' then
rgbp<=color2;
elsif (cc>10 and cc<12) and innum3(1)='0' then
rgbp<=color2;
else rgbp<="000";
end if;
elsif ll>201 and ll<341 then
if (cc>7 and cc<9) and innum3(4)='0' then
rgbp<=color2;
elsif (cc>10 and cc<12) and innum3(2)='0' then
rgbp<=color2;
else rgbp<="000";
end if;
elsif ll>350 and ll<370 then
if cc>7 and cc<9 and innum(11)='1' then
rgbp<=color2;
elsif cc>8 and cc<10 and innum(10)='1' then
rgbp<=color2;
elsif cc>9 and cc<11 and innum(9)='1' then
rgbp<=color2;
elsif cc>10 and cc<12 and innum(8)='1' then
rgbp<=color2;
else rgbp<="000";
end if;
elsif ll>380 and ll<400 then
if cc>7 and cc<9 and innum0(11)='1' then
rgbp<=color2;
elsif cc>8 and cc<10 and innum0(10)='1' then
rgbp<=color2;
elsif cc>9 and cc<11 and innum0(9)='1' then
rgbp<=color2;
elsif cc>10 and cc<12 and innum0(8)='1' then
rgbp<=color2;
else rgbp<="000";
end if;
else
rgbp<="000";
end if;
elsif cc>12 and cc<17 then
if ll>60 and ll<101 and innum2(0)='0' then
rgbp<=color3;
elsif ll>180 and ll<221 and innum2(6)='0' then
rgbp<=color3;
elsif ll>300 and ll<341 and innum2(3)='0' then
rgbp<=color3;
elsif ll>60 and ll<202 then
if (cc>12 and cc<14) and innum2(5)='0' then
rgbp<=color3;
elsif (cc>15 and cc<17) and innum2(1)='0' then
rgbp<=color3;
else rgbp<="000";
end if;
elsif ll>201 and ll<341 then
if (cc>12 and cc<14) and innum2(4)='0' then
rgbp<=color3;
elsif (cc>15 and cc<17) and innum2(2)='0' then
rgbp<=color3;
else rgbp<="000";
end if;
elsif ll>350 and ll<370 then
if cc>12 and cc<14 and innum(7)='1' then
rgbp<=color3;
elsif cc>13 and cc<15 and innum(6)='1' then
rgbp<=color3;
elsif cc>14 and cc<16 and innum(5)='1' then
rgbp<=color3;
elsif cc>15 and cc<17 and innum(4)='1' then
rgbp<=color3;
else rgbp<="000";
end if;
elsif ll>380 and ll<400 then
if cc>12 and cc<14 and innum0(7)='1' then
rgbp<=color3;
elsif cc>13 and cc<15 and innum0(6)='1' then
rgbp<=color3;
elsif cc>14 and cc<16 and innum0(5)='1' then
rgbp<=color3;
elsif cc>15 and cc<17 and innum0(4)='1' then
rgbp<=color3;
else rgbp<="000";
end if;
else
rgbp<="000";
end if;
elsif cc>17 and cc<22 then
if ll>60 and ll<101 and innum1(0)='0' then
rgbp<=color4;
elsif ll>180 and ll<221 and innum1(6)='0' then
rgbp<=color4;
elsif ll>300 and ll<341 and innum1(3)='0' then
rgbp<=color4;
elsif ll>60 and ll<202 then
if (cc>17 and cc<19) and innum1(5)='0' then
rgbp<=color4;
elsif (cc>20 and cc<22) and innum1(1)='0' then
rgbp<=color4;
else rgbp<="000";
end if;
elsif ll>201 and ll<341 then
if (cc>17 and cc<19) and innum1(4)='0' then
rgbp<=color4;
elsif (cc>20 and cc<22) and innum1(2)='0' then
rgbp<=color4;
else rgbp<="000";
end if;
elsif ll>350 and ll<370 then
if cc>17 and cc<19 and innum(3)='1' then
rgbp<=color4;
elsif cc>18 and cc<20 and innum(2)='1' then
rgbp<=color4;
elsif cc>19 and cc<21 and innum(1)='1' then
rgbp<=color4;
elsif cc>20 and cc<22 and innum(0)='1' then
rgbp<=color4;
else rgbp<="000";
end if;
elsif ll>380 and ll<400 then
if cc>17 and cc<19 and innum0(3)='1' then
rgbp<=color4;
elsif cc>18 and cc<20 and innum0(2)='1' then
rgbp<=color4;
elsif cc>19 and cc<21 and innum0(1)='1' then
rgbp<=color4;
elsif cc>20 and cc<22 and innum0(0)='1' then
rgbp<=color4;
else rgbp<="000";
end if;
else rgbp<="000";
end if;
else rgbp<="000";
end if;
end process;
end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -