📄 plx9054-localbus-cpld-vhdl-src.vhd
字号:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity pcicard is
port (
irdy,clk,frame: in std_logic;
addr: in std_logic_vector (15 downto 0);
CBE: in std_logic_vector (3 downto 0);
ldata,hdata,sdata,fdata: out std_logic_vector (6 downto 0)
);
end pcicard;
architecture pcicard_arc of pcicard is
type states is (s0,s1,s2,s3,s4);
signal current_state,next_state : states;
begin
comb_proc:process(current_state,irdy,frame,addr,CBE)
begin
case(current_state) is
when s0=>
if frame='1' then
next_state<=s1;
else
next_state<=s0;
end if;
when s1=>
if frame='0' then
if addr="0000000010000000" and CBE="0011" then
next_state<=s2;
else
next_state<=s4;
end if;
else
next_state<=s1;
end if;
when s2=>
if irdy='0' then
next_state<=s3;
else
next_state<=s2;
end if;
when s3=>
if frame='1' then
next_state<=s1;
else
next_state<=s3;
end if;
when s4=>
if frame='1' then
next_state<=s1;
else
next_state<=s4;
end if;
end case;
end process comb_proc;
synch_proc:process(clk,current_state)
begin
if rising_edge(clk) then
current_state<=next_state;
if current_state=s3 then
case addr(3 downto 0) is
when "0000" => ldata <= "1011111"; -- 0
when "0001" => ldata <= "0000110"; -- 1
when "0010" => ldata <= "0111011"; -- 2
when "0011" => ldata <= "0101111"; -- 3
when "0100" => ldata <= "1100110"; -- 4
when "0101" => ldata <= "1101101"; -- 5
when "0110" => ldata <= "1111101"; -- 6
when "0111" => ldata <= "0000111"; -- 7
when "1000" => ldata <= "1111111"; -- 8
when "1001" => ldata <= "1101111"; -- 9
when "1010" => ldata <= "1110111"; -- A
when "1011" => ldata <= "1111100"; -- b
when "1100" => ldata <= "1011001"; -- c
when "1101" => ldata <= "0111110"; -- d
when "1110" => ldata <= "1111001"; -- E
when "1111" => ldata <= "1110001"; -- F
when others => NULL;
end case;
case addr(7 downto 4) is
when "0000" => hdata <= "1011111"; -- 0
when "0001" => hdata <= "0000110"; -- 1
when "0010" => hdata <= "0111011"; -- 2
when "0011" => hdata <= "0101111"; -- 3
when "0100" => hdata <= "1100110"; -- 4
when "0101" => hdata <= "1101101"; -- 5
when "0110" => hdata <= "1111101"; -- 6
when "0111" => hdata <= "0000111"; -- 7
when "1000" => hdata <= "1111111"; -- 8
when "1001" => hdata <= "1101111"; -- 9
when "1010" => hdata <= "1110111"; -- A
when "1011" => hdata <= "1111100"; -- b
when "1100" => hdata <= "1011001"; -- c
when "1101" => hdata <= "0111110"; -- d
when "1110" => hdata <= "1111001"; -- E
when "1111" => hdata <= "1110001"; -- F
when others => NULL;
end case;
case addr(11 downto 8) is
when "0000" => sdata <= "1011111"; -- 0
when "0001" => sdata <= "0000110"; -- 1
when "0010" => sdata <= "0111011"; -- 2
when "0011" => sdata <= "0101111"; -- 3
when "0100" => sdata <= "1100110"; -- 4
when "0101" => sdata <= "1101101"; -- 5
when "0110" => sdata <= "1111101"; -- 6
when "0111" => sdata <= "0000111"; -- 7
when "1000" => sdata <= "1111111"; -- 8
when "1001" => sdata <= "1101111"; -- 9
when "1010" => sdata <= "1110111"; -- A
when "1011" => sdata <= "1111100"; -- b
when "1100" => sdata <= "1011001"; -- c
when "1101" => sdata <= "0111110"; -- d
when "1110" => sdata <= "1111001"; -- E
when "1111" => sdata <= "1110001"; -- F
when others => NULL;
end case;
case addr(15 downto 12) is
when "0000" => fdata <= "1011111"; -- 0
when "0001" => fdata <= "0000110"; -- 1
when "0010" => fdata <= "0111011"; -- 2
when "0011" => fdata <= "0101111"; -- 3
when "0100" => fdata <= "1100110"; -- 4
when "0101" => fdata <= "1101101"; -- 5
when "0110" => fdata <= "1111101"; -- 6
when "0111" => fdata <= "0000111"; -- 7
when "1000" => fdata <= "1111111"; -- 8
when "1001" => fdata <= "1101111"; -- 9
when "1010" => fdata <= "1110111"; -- A
when "1011" => fdata <= "1111100"; -- b
when "1100" => fdata <= "1011001"; -- c
when "1101" => fdata <= "0111110"; -- d
when "1110" => fdata <= "1111001"; -- E
when "1111" => fdata <= "1110001"; -- F
when others => NULL;
end case;
elsif current_state=s0 then
ldata <= "0001111"; -- F
hdata <= "1011111"; -- F
sdata <= "1011111"; -- F
fdata <= "1011001"; -- F
else
Null;
end if;
end if;
end process synch_proc;
end pcicard_arc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -