⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lg.vhd

📁 基于fpga的逻辑分析仪可显示八路波形
💻 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 + -