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

📄 fifo存储器.vhd

📁 含有各类寄存器
💻 VHD
字号:
--A First-in First-out Memory--a first-in first out memory, uses a synchronising clock--generics allow fifos of different sizes to be instantiatedlibrary IEEE;use IEEE.Std_logic_1164.all;entity FIFOMXN isgeneric(m, n : Positive := 8); --m is fifo depth, n is fifo widthport(RESET, WRREQ, RDREQ, CLOCK : in Std_logic;DATAIN : in Std_logic_vector((n-1) downto 0);DATAOUT : out Std_logic_vector((n-1) downto 0);FULL, EMPTY : inout Std_logic);end FIFOMXN;architecture V2 of FIFOMXN istype Fifo_array is array(0 to (m-1)) of Bit_vector((n-1) downto 0);signal Fifo_memory : Fifo_array;signal Wraddr, Rdaddr, Offset : Natural range 0 to (m-1);signal Rdpulse, Wrpulse, Q1, Q2, Q3, Q4 : Std_logic;signal Databuffer : Bit_vector((n-1) downto 0);begin--pulse synchronisers for WRREQ and RDREQ--modified for Synplify to a processsync_ffs : processbeginwait until rising_edge(CLOCK);Q1 <= WRREQ;Q2 <= Q1;Q3 <= RDREQ;Q4 <= Q3;end process;--concurrent logic to generate pulsesWrpulse <= Q2 and not(Q1);Rdpulse <= Q4 and not(Q3);Fifo_read : processbeginwait until rising_edge(CLOCK);if RESET = '1' thenRdaddr <= 0;Databuffer <= (others => '0');elsif (Rdpulse = '1' and EMPTY = '0') thenDatabuffer <= Fifo_memory(Rdaddr);Rdaddr <= (Rdaddr + 1) mod m;end if;end process;Fifo_write : processbeginwait until rising_edge(CLOCK);if RESET = '1' thenWraddr <= 0;elsif (Wrpulse = '1' and FULL = '0') thenFifo_memory(Wraddr) <= To_Bitvector(DATAIN);Wraddr <= (Wraddr + 1) mod m;end if;end process;Offset <= (Wraddr - Rdaddr) when (Wraddr > Rdaddr)else (m - (Rdaddr - Wraddr)) when (Rdaddr > Wraddr)else 0;EMPTY <= '1' when (Offset = 0) else '0';FULL <= '1' when (Offset = (m-1)) else '0';DATAOUT <= To_Stdlogicvector(Databuffer) when RDREQ = '0'else (others => 'Z');end V2;

⌨️ 快捷键说明

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