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

📄 top.vhdl

📁 FPGA读SRAM中的数再传给CY7C68013
💻 VHDL
字号:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity top is
  port( clk  : 	in std_logic;
  	   reset:		in std_logic;

        slwr: 		buffer std_logic;
	   pktend: 	out std_logic;
	   fifoaddr: 	out std_logic_vector(1 downto 0);
	   fifodata: 	out std_logic_vector(7 downto 0);
        full_flag : in std_logic;	  -- FLAGB pin
	  
	   led:		out std_logic;
	   addr_SRAM:	out std_logic_vector(15 downto 0);
	   data_SRAM:	inout  std_logic_vector(7 downto 0);
	   WE_SRAM:	out std_logic;
    	   OE_SRAM:	out std_logic;
	   CE_SRAM:	out std_logic;
	   LB_SRAM:	out std_logic;
	   UB_SRAM:	out std_logic
	   ) ;       
end top;

architecture Behavioral of top is

signal  count : std_logic_vector(10 downto 0);
signal  inclk: std_logic;

begin

process(clk)
  begin
    	if clk'event and clk='1' then
	  count<=count+'1'; 
	end if;
end process;

inclk<=count(10);

process(inclk, reset)

variable temp_addr_SRAM: std_logic_vector(15 downto 0);	-- 地址变量
variable data_out:		std_logic_vector(7 downto 0);	 	-- 数据变量
variable state:	integer range 0 to 3;		  		-- 状态变量
variable is_end:	std_logic; 					     -- 读数据结束标志
variable flag:   std_logic;

begin

if(inclk'event and inclk='1') then

	if reset='1' then	-- 复位
		fifoaddr<="10";	-- EP6
		pktend<='1';	
		OE_SRAM<='0';	-- 输出使能
		CE_SRAM<='0';	-- 芯片使能
		WE_SRAM<='1';	-- 写禁能
		LB_SRAM<='1';	-- 低位禁能
		UB_SRAM<='1';	-- 高位禁能
		temp_addr_SRAM:=(others=>'0');	-- 地址初始化
		led<='1';		-- LED 暗
		slwr<='1';
		is_end:='0';	-- 写结束标芯初始化
		state:=0;	 	-- 状态变量初始化
	
	else
		if is_end='0' then	 -- 读数据没有结束
			case state is
				when 0 => 
					slwr<='1';    -- deassert SLWR, 地址加1
					data_SRAM<=(others=>'Z');   -- 给数据线上送高阻 
					LB_SRAM<='0'; 	 -- 低位使能
        				addr_SRAM<=temp_addr_SRAM;  -- 送地址
					state:=1;				   -- 转到状态1
				when 1 =>
					data_out:=data_SRAM;	   -- 送数据
					state:=2;
				when 2 =>	
				     flag:=full_flag; 	--and start;
					if flag='1' then	   -- check full flag
						fifodata<=data_out;	   -- not full, drive data to bus
						slwr<='0';      -- assert  SLWR
						state:=3;
			 		else  
						state:=2;
			   		end if;
				when 3 =>
					temp_addr_SRAM:= temp_addr_SRAM+1;	-- 地址变量加1
					state:=0;
					if temp_addr_SRAM="0001000000000000" then -- 已读完
						slwr<='1';
						is_end:='1';	     -- 写结束标志置位
					end if;

					
		  	end case;
		end if;
	end if;
end if;
end process;

end 	 Behavioral;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -