📄 lg.vhd
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity lg is
port(
clk,en:in std_logic;
qx,qy:out integer range 0 to 255;
fbs:out std_logic_vector(7 downto 0)
);
end lg;
architecture dac of lg is
signal fb,count_4: std_logic_vector(7 downto 0);
signal q: std_logic_vector(7 downto 0):="11111111";
signal hcnt: std_logic_vector(23 downto 0);
signal kongzhi1,mfb,mfb0,mfb1,mfb2,mfb3,mfb4,mfb5,mfb6,mfb7:integer range 0 to 255;
signal count_sh: std_logic_vector(3 downto 0);
signal jwsh,fp4096,fp0,fp1,fp2,fp4,fp1024,fp2048:std_logic;
begin
jwsh<=(q(7) and q(6)and q(5)and q(4)and q(3)and q(2)and q(1)and q(0));
----------分频器-----------------------------------------------------------
process(clk)
begin
if (clk'event and clk='1') then
hcnt<=hcnt+1;
end if;
end process;
fp0 <=clk;--16M
fp1 <=hcnt(0);--8M
fp2 <=hcnt(1);--4M
fp4 <=hcnt(2);--2M
fp1024<=hcnt(6);
fp2048<=hcnt(11);
fb<=hcnt(16 downto 9);
---hcnt(20);-------1 hz
------------------------------------------------------------------------------------
---------------------加线脉冲-----------------------------------------------------------
process(en,clk)
begin
if en='0' then
fp4096<='1';
elsif clk'event and clk='1' then
fp4096<=hcnt(19);
end if;
end process;
---------------------------------------------------------------------------------------------
------------------------锯齿波实现--------------------------------------------------
process(fp1024)
begin
if(fp1024'event and fp1024='1')then
q<=q-1;
end if;
end process;
-----------------------------------------
------------x,y同步-----------------------
process(jwsh)
begin
if count_sh>8 then
count_sh<="0000";
elsif(jwsh'event and jwsh='1')then
count_sh<=count_sh+1;
end if;
end process;
---------------------------------------------
-----------方 波 发 生--------------------
mfb0<=25 when fb(0)='1' else
5;
mfb1<=57 when fb(1)='1' else
37;
mfb2<=89 when fb(2)='1' else
69;
mfb3<=121 when fb(3)='1' else
101;
mfb4<=153 when fb(4)='1' else
133;
mfb5<=185 when fb(5)='1' else
165;
mfb6<=217 when fb(4)='1' else
197;
mfb7<=249 when fb(3)='1' else
229;
----------------------------------------------
----------方波同步发生------------------------
process(clk,count_sh)
begin
if(clk'event and clk='1')then
case count_sh is
when "0000" => mfb<=mfb0;
when "0001" => mfb<=mfb1;
when "0010" => mfb<=mfb2;
when "0011" => mfb<=mfb3;
when "0100" => mfb<=mfb4;
when "0101" => mfb<=mfb5;
when "0110" => mfb<=mfb6;
when "0111" => mfb<=mfb7;
when others => null;
end case;
end if;
end process;
---process(fp4096)
--begin
--if(fp4096'event and fp4096='1')then
-- fbs(7)<=fb(3);
-- fbs(6)<=fb(4);
-- fbs(5)<=fb(5);
-- fbs(4)<=fb(4);
-- fbs(3)<=fb(3);
-- fbs(2)<=fb(2);
-- fbs(1)<=fb(1);
-- fbs(0)<=fb(0);
--end if;
--end process;
---------------------------------------------------
-----------方波竖线综合-----------------------------
qy<=mfb when count_sh<=7 else
conv_integer(q) when count_sh=8;
qx<= conv_integer(q) when count_sh<=7 else
kongzhi1 ;fbs(7)<=fb(3);
fbs(6)<=fb(4);
fbs(5)<=fb(5);
fbs(4)<=fb(4);
fbs(3)<=fb(3);
fbs(2)<=fb(2);
fbs(1)<=fb(1);
fbs(0)<=fb(0) when count_sh=8;
---------------------------------------------------
--------------竖线位置确定-------------------------
process(fp4096)
begin
if(fp4096'event and fp4096='1')then
if(count_4="11111111")then
count_4<="00000000";
else
count_4<=count_4 +'1';
end if;
end if;
end process;
kongzhi1<=conv_integer(count_4);
---en<=conv_integer(count_4);
--process(count_4)
--begin
--case count_4 is
--when "0000" =>kongzhi1<=0;
--when "0001" =>kongzhi1<=20;
--when "0010" =>kongzhi1<=45;
--when "0011" =>kongzhi1<=70;
--when "0100" =>kongzhi1<=95;
--when "0101" =>kongzhi1<=120;
--when "0110" =>kongzhi1<=145;
--when "0111" =>kongzhi1<=170;
--when "1000" =>kongzhi1<=195;
--when "1001" =>kongzhi1<=220;
--when "1010" =>kongzhi1<=245;
--when others=>null;
--end case;
--end process;
----------------------------------------------------
----------------------------------------------------
end dac;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -