接口电路 秘书论文 设计应用 手机问答 教育考试 通信网络 工业控制 家庭生活 嵌入式 模拟技术
电源技术 家庭生活 DSP 商业金融 存储器 论坛新贴 显示光电 计算机 作品展厅 书籍介绍
资料下载 期刊杂志 展会动态 新兴电子 公司汇总 多媒体 软件教程 基本电路 疑问解答 EDA/PLD
    
位置:首页>设计应用>正文

【VHDL 程序举例大全-存储器举例:(注3)】

 

-- 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 is   generic(m, n : Positive := 8); --m is fifo depth, n is fifo width   port(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 is   type 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 : process        begin                wait 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 : process   begin      wait until rising_edge(CLOCK);      if RESET = '1' then         Rdaddr <= 0;         Databuffer <= (others => '0');      elsif (Rdpulse = '1' and EMPTY = '0') then         Databuffer <= Fifo_memory(Rdaddr);         Rdaddr <= (Rdaddr + 1) mod m;      end if;   end process;Fifo_write : process   begin      wait until rising_edge(CLOCK);      if RESET = '1' then         Wraddr <= 0;      elsif (Wrpulse = '1' and FULL = '0') then         Fifo_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;


上一篇:【VHDL 程序举例大全-基本语法】
下一篇: 中文输入法在B超系统中的实现(图)

来源: 编辑: 日期:2007-1-20 21:18:07

收藏此页到365Key

  Powered By 一起上网络<中国电子>