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

📄 plx9054-localbus-cpld-vhdl-src.vhd

📁 PLX 公司 PLX9054 pci target controller
💻 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 + -