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

📄 fifo.vhd

📁 用VHDL语言写的VGA核心,是个很好很齐全的核心,有很多功能.
💻 VHD
字号:
---- File fifo.vhd (universal FIFO)-- Author : Richard Herveille-- rev.: 0.1 May 04th, 2001-- rev.: 0.2 June 16th, 2001. Changed "function bitcount" until it compiled under Xilinx Webpack-- rev.: 0.3 June 23nd, 2001. Removed unused "dummy" variable from function bitcount.-- rev.: 1.0 June 29th, 2001. Synchronized Q output. Design now correctly maps to Xilinx-BlockRAMs--library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity FIFO is	generic(		DEPTH : natural := 128;		WIDTH : natural := 32	);	port(		clk : in std_logic;                           -- clock input		aclr : in std_logic := '1';                   -- active low asynchronous clear		sclr : in std_logic := '0';                   -- active high synchronous clear		D : in std_logic_vector(WIDTH -1 downto 0);   -- Data input		wreq : in std_logic;                          -- write request		Q : out std_logic_vector(WIDTH -1 downto 0);  -- Data output		rreq : in std_logic;                          -- read request				empty,                                        -- FIFO is empty		hfull,                                        -- FIFO is half full		full : out std_logic                          -- FIFO is full	);end entity FIFO;architecture structural of FIFO is	-- bitcount, return no.of bits required for 'n'	function bitcount(n : in natural) return natural is		variable tmp : unsigned(32 downto 1);		variable cnt : natural;	begin		tmp := conv_unsigned(n, 32);-- "while..loop" is not supported by xilinx webpack yet--		cnt := 32;--		while ( (tmp(cnt) = '0') and (cnt > 0) ) loop--			cnt := cnt -1;--		end loop;	-- replaced "while..loop" with "loop..exit" for xilinx web-pack-- "loop" is not supported by xilinx webpack yet--		cnt := 32;--		loop--			exit when ( (tmp(cnt) /= '0') or (cnt = 0) );--			cnt := cnt -1;--		end loop;		-- same construction as above, now using for..loop-- "exit" statement not supported by xilinx webpack yet (what IS supported ?????)--		for cnt in 32 downto 1 loop--			exit when ( (tmp(cnt) /= '0') or (cnt = 0) );--		end loop;		-- yet another try		cnt := 32;		for dummy in 32 downto 1 loop			if (tmp(cnt) = '0') then				cnt := cnt -1;			end if;		end loop;		return cnt;	end function bitcount;	constant ADEPTH : natural := bitcount(DEPTH -1); -- 256 entries: range 255 downto 0	type mem_type is array (DEPTH -1 downto 0) of std_logic_vector(WIDTH -1 downto 0);	signal mem : mem_type; -- VHDL '87 syntax	signal rptr, wptr : unsigned(ADEPTH -1 downto 0);	signal fifo_cnt : unsigned(ADEPTH downto 0);begin	-- read pointer	gen_rd_ptr: process(clk, aclr)	begin		if (aclr = '0') then			rptr <= (others => '0');		elsif (clk'event and clk = '1') then			if (sclr = '1') then				rptr <= (others => '0');			elsif (rreq = '1') then				rptr <= rptr +1;			end if;		end if;	end process gen_rd_ptr;	-- write pointer	gen_wr_ptr: process(clk, aclr)	begin		if (aclr = '0') then			wptr <= (others => '0');		elsif (clk'event and clk = '1') then			if (sclr = '1') then				wptr <= (others => '0');			elsif (wreq = '1') then				wptr <= wptr +1;			end if;		end if;	end process gen_wr_ptr;	-- memory array operations	gen_mem: process(clk)	begin		if (clk'event and clk = '1') then			if (wreq = '1') then				mem(conv_integer(wptr)) <= D; -- store D in memory array			end if;			Q <= mem(conv_integer(rptr));    -- assign output		end if;	end process gen_mem;	-- number of words in fifo	gen_fifo_cnt: process(clk, aclr, fifo_cnt, wreq, rreq)		variable count : unsigned(ADEPTH downto 0);	begin		count := fifo_cnt;		if (wreq = '1') then			count := count +1;		end if;		if (rreq = '1') then			count := count -1;		end if;		if (aclr = '0') then			fifo_cnt <= (others => '0');		elsif (clk'event and clk = '1') then			if (sclr = '1') then				fifo_cnt <= (others => '0');			else				fifo_cnt <= count;			end if;		end if;	end process gen_fifo_cnt;	-- status flags	empty <= '1' when (fifo_cnt = 0) else '0';	hfull <= fifo_cnt(ADEPTH -1);	full  <= fifo_cnt(ADEPTH);end architecture structural;

⌨️ 快捷键说明

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