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

📄 fifo7881.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 5 页
字号:
----------------------------------------------------------------------------------  File Name: fifo7881.vhd----------------------------------------------------------------------------------  Copyright (C) 1998, 2000 Free Model Foundry; http://www.FreeModelFoundry.com----  This program is free software; you can redistribute it and/or modify--  it under the terms of the GNU General Public License version 2 as--  published by the Free Software Foundation.----  MODIFICATION HISTORY:----  version: |  author:  | mod date: | changes made:--    V1.0    R. Munden    98 JUN 11   initial release--    V1.1    R. Munden    00 SEP 09   deleted unused signal------------------------------------------------------------------------------------  PART DESCRIPTION:----  Library:    FIFO--  Technology: TTL--  Part:       ACT7881----  Desciption: 1K x 18 FIFO--------------------------------------------------------------------------------LIBRARY IEEE;   USE IEEE.std_logic_1164.ALL;                USE IEEE.VITAL_timing.ALL;                USE IEEE.VITAL_primitives.ALL;LIBRARY FMF;    USE FMF.gen_utils.ALL;                USE FMF.conversions.ALL;---------------------------------------------------------------------------------- ENTITY DECLARATION--------------------------------------------------------------------------------ENTITY fifo7881 IS    GENERIC (        -- tipd delays: interconnect path delays        tipd_D0         : VitalDelayType01 := VitalZeroDelay01;        tipd_D1         : VitalDelayType01 := VitalZeroDelay01;        tipd_D2         : VitalDelayType01 := VitalZeroDelay01;        tipd_D3         : VitalDelayType01 := VitalZeroDelay01;        tipd_D4         : VitalDelayType01 := VitalZeroDelay01;        tipd_D5         : VitalDelayType01 := VitalZeroDelay01;        tipd_D6         : VitalDelayType01 := VitalZeroDelay01;        tipd_D7         : VitalDelayType01 := VitalZeroDelay01;        tipd_D8         : VitalDelayType01 := VitalZeroDelay01;        tipd_D9         : VitalDelayType01 := VitalZeroDelay01;        tipd_D10        : VitalDelayType01 := VitalZeroDelay01;        tipd_D11        : VitalDelayType01 := VitalZeroDelay01;        tipd_D12        : VitalDelayType01 := VitalZeroDelay01;        tipd_D13        : VitalDelayType01 := VitalZeroDelay01;        tipd_D14        : VitalDelayType01 := VitalZeroDelay01;        tipd_D15        : VitalDelayType01 := VitalZeroDelay01;        tipd_D16        : VitalDelayType01 := VitalZeroDelay01;        tipd_D17        : VitalDelayType01 := VitalZeroDelay01;        tipd_RSNeg      : VitalDelayType01 := VitalZeroDelay01;        tipd_WCLK       : VitalDelayType01 := VitalZeroDelay01;        tipd_WEN1       : VitalDelayType01 := VitalZeroDelay01;        tipd_WEN2       : VitalDelayType01 := VitalZeroDelay01;        tipd_RCLK       : VitalDelayType01 := VitalZeroDelay01;        tipd_REN1       : VitalDelayType01 := VitalZeroDelay01;        tipd_REN2       : VitalDelayType01 := VitalZeroDelay01;        tipd_OE         : VitalDelayType01 := VitalZeroDelay01;        tipd_DAFNeg     : VitalDelayType01 := VitalZeroDelay01;        -- tpd delays: propagation delays        tpd_RSNeg_AF            : VitalDelayType01:= UnitDelay01;        tpd_RSNeg_HF            : VitalDelayType01:= UnitDelay01;        tpd_RSNeg_Q0            : VitalDelayType01Z:= UnitDelay01Z;        tpd_RCLK_Q0             : VitalDelayType01Z:= UnitDelay01Z;        tpd_OE_Q0               : VitalDelayType01Z:= UnitDelay01Z;        tpd_WCLK_IRF            : VitalDelayType01 := UnitDelay01;        tpd_RCLK_ORF            : VitalDelayType01 := UnitDelay01;        tpd_RCLK_AF             : VitalDelayType01 := UnitDelay01;        tpd_RCLK_HF             : VitalDelayType01 := UnitDelay01;        -- tpw values: pulse widths        tpw_RCLK_posedge        : VitalDelayType := UnitDelay;        tpw_RCLK_negedge        : VitalDelayType := UnitDelay;        tpw_WCLK_posedge        : VitalDelayType := UnitDelay;        tpw_WCLK_negedge        : VitalDelayType := UnitDelay;        tpw_RSNeg_negedge       : VitalDelayType := UnitDelay;        tpw_DAFNeg_posedge      : VitalDelayType := UnitDelay;        -- tperiod min (calculated as 1/max freq)        tperiod_RCLK_posedge    : VitalDelayType := UnitDelay;        -- tsetup values: setup times        tsetup_D0_WCLK          : VitalDelayType := UnitDelay;        tsetup_D0_DAFNeg        : VitalDelayType := UnitDelay;        tsetup_WEN1_WCLK        : VitalDelayType := UnitDelay;        tsetup_REN1_RCLK        : VitalDelayType := UnitDelay;        tsetup_OE_RCLK          : VitalDelayType := UnitDelay;        tsetup_RSNeg_RCLK       : VitalDelayType := UnitDelay;        tsetup_DAFNeg_RSNeg     : VitalDelayType := UnitDelay;        -- thold values: hold times        thold_D0_WCLK           : VitalDelayType := UnitDelay;        thold_D0_DAFNeg         : VitalDelayType := UnitDelay;        thold_WEN1_WCLK         : VitalDelayType := UnitDelay;        thold_REN1_RCLK         : VitalDelayType := UnitDelay;        thold_OE_RCLK           : VitalDelayType := UnitDelay;        thold_RSNeg_RCLK        : VitalDelayType := UnitDelay;        thold_DAFNeg_RSNeg      : VitalDelayType := UnitDelay;        -- generic control parameters        InstancePath   : STRING  := DefaultInstancePath;        TimingChecksOn : BOOLEAN := DefaultTimingChecks;        MsgOn          : BOOLEAN := DefaultMsgOn;        XOn            : BOOLEAN := DefaultXOn;        TimingModel    : STRING  := DefaultTimingModel    );    PORT (        D0      : IN    std_logic := 'X';  -- Data Input Bus        D1      : IN    std_logic := 'X';        D2      : IN    std_logic := 'X';        D3      : IN    std_logic := 'X';        D4      : IN    std_logic := 'X';        D5      : IN    std_logic := 'X';        D6      : IN    std_logic := 'X';        D7      : IN    std_logic := 'X';        D8      : IN    std_logic := 'X';        D9      : IN    std_logic := 'X';        D10     : IN    std_logic := 'X';        D11     : IN    std_logic := 'X';        D12     : IN    std_logic := 'X';        D13     : IN    std_logic := 'X';        D14     : IN    std_logic := 'X';        D15     : IN    std_logic := 'X';        D16     : IN    std_logic := 'X';        D17     : IN    std_logic := 'X';        RSNeg   : IN    std_logic := 'X';  -- Reset        WCLK    : IN    std_logic := 'X';  -- Write Clock        WEN1    : IN    std_logic := 'X';  -- Write Enable        WEN2    : IN    std_logic := 'X';  -- Write Enable        RCLK    : IN    std_logic := 'X';  -- Read Clock        REN1    : IN    std_logic := 'X';  -- Read Enable        REN2    : IN    std_logic := 'X';  -- Read Enable        OE      : IN    std_logic := 'X';  -- Output Enable        DAFNeg  : IN    std_logic := 'X';  -- Write Expansion Input        AF      : OUT   std_logic := 'U';  -- Programmable Almost Full/Empty Flag        HF      : OUT   std_logic := 'U';  -- Half-Full Flag        IRF     : OUT   std_logic := 'U';  -- Input Ready Flag        ORF     : OUT   std_logic := 'U';  -- Output Ready Flag        Q0      : OUT   std_logic := 'U';  -- Data Output Bus        Q1      : OUT   std_logic := 'U';        Q2      : OUT   std_logic := 'U';        Q3      : OUT   std_logic := 'U';        Q4      : OUT   std_logic := 'U';        Q5      : OUT   std_logic := 'U';        Q6      : OUT   std_logic := 'U';        Q7      : OUT   std_logic := 'U';        Q8      : OUT   std_logic := 'U';        Q9      : OUT   std_logic := 'U';        Q10     : OUT   std_logic := 'U';        Q11     : OUT   std_logic := 'U';        Q12     : OUT   std_logic := 'U';        Q13     : OUT   std_logic := 'U';        Q14     : OUT   std_logic := 'U';        Q15     : OUT   std_logic := 'U';        Q16     : OUT   std_logic := 'U';        Q17     : OUT   std_logic := 'U'    );    ATTRIBUTE VITAL_LEVEL0 OF fifo7881 : ENTITY IS TRUE;END fifo7881;---------------------------------------------------------------------------------- ARCHITECTURE DECLARATION--------------------------------------------------------------------------------ARCHITECTURE vhdl_behavioral OF fifo7881 IS    ATTRIBUTE VITAL_LEVEL0 OF vhdl_behavioral : ARCHITECTURE IS TRUE;    TYPE statetype IS ARRAY (0 to 3) OF std_ulogic ;    TYPE mem_type IS ARRAY (0 to 1023 ) OF std_ulogic_vector(17 downto 0) ;    SIGNAL wordcount : INTEGER := 0 ;    SIGNAL D0_ipd              : std_ulogic := 'X';    SIGNAL D1_ipd              : std_ulogic := 'X';    SIGNAL D2_ipd              : std_ulogic := 'X';    SIGNAL D3_ipd              : std_ulogic := 'X';    SIGNAL D4_ipd              : std_ulogic := 'X';    SIGNAL D5_ipd              : std_ulogic := 'X';    SIGNAL D6_ipd              : std_ulogic := 'X';    SIGNAL D7_ipd              : std_ulogic := 'X';    SIGNAL D8_ipd              : std_ulogic := 'X';    SIGNAL D9_ipd              : std_ulogic := 'X';    SIGNAL D10_ipd             : std_ulogic := 'X';    SIGNAL D11_ipd             : std_ulogic := 'X';    SIGNAL D12_ipd             : std_ulogic := 'X';    SIGNAL D13_ipd             : std_ulogic := 'X';    SIGNAL D14_ipd             : std_ulogic := 'X';    SIGNAL D15_ipd             : std_ulogic := 'X';    SIGNAL D16_ipd             : std_ulogic := 'X';    SIGNAL D17_ipd             : std_ulogic := 'X';    SIGNAL RSNeg_ipd           : std_ulogic := 'X';    SIGNAL WCLK_ipd            : std_ulogic := 'X';    SIGNAL WEN1_ipd            : std_ulogic := 'X';    SIGNAL WEN2_ipd            : std_ulogic := 'X';    SIGNAL RCLK_ipd            : std_ulogic := 'X';    SIGNAL REN1_ipd            : std_ulogic := 'X';    SIGNAL REN2_ipd            : std_ulogic := 'X';    SIGNAL OE_ipd              : std_ulogic := 'X';    SIGNAL DAFNeg_ipd          : std_ulogic := 'X';BEGIN    ----------------------------------------------------------------------------    -- Wire Delays    ----------------------------------------------------------------------------    WireDelay : BLOCK    BEGIN        w_1: VitalWireDelay (D0_ipd, D0, tipd_D0);        w_2: VitalWireDelay (D1_ipd, D1, tipd_D1);        w_3: VitalWireDelay (D2_ipd, D2, tipd_D2);        w_4: VitalWireDelay (D3_ipd, D3, tipd_D3);        w_5: VitalWireDelay (D4_ipd, D4, tipd_D4);        w_6: VitalWireDelay (D5_ipd, D5, tipd_D5);        w_7: VitalWireDelay (D6_ipd, D6, tipd_D6);        w_8: VitalWireDelay (D7_ipd, D7, tipd_D7);        w_9: VitalWireDelay (D8_ipd, D8, tipd_D8);        w_10: VitalWireDelay (D9_ipd, D9, tipd_D9);        w_11: VitalWireDelay (D10_ipd, D10, tipd_D10);        w_12: VitalWireDelay (D11_ipd, D11, tipd_D11);        w_13: VitalWireDelay (D12_ipd, D12, tipd_D12);        w_14: VitalWireDelay (D13_ipd, D13, tipd_D13);        w_15: VitalWireDelay (D14_ipd, D14, tipd_D14);        w_16: VitalWireDelay (D15_ipd, D15, tipd_D15);        w_17: VitalWireDelay (D16_ipd, D16, tipd_D16);        w_18: VitalWireDelay (D17_ipd, D17, tipd_D17);        w_19: VitalWireDelay (RSNeg_ipd, RSNeg, tipd_RSNeg);        w_20: VitalWireDelay (WCLK_ipd, WCLK, tipd_WCLK);        w_21: VitalWireDelay (WEN1_ipd, WEN1, tipd_WEN1);        w_22: VitalWireDelay (WEN2_ipd, WEN2, tipd_WEN2);        w_23: VitalWireDelay (RCLK_ipd, RCLK, tipd_RCLK);        w_24: VitalWireDelay (REN1_ipd, REN1, tipd_REN1);        w_25: VitalWireDelay (REN2_ipd, REN2, tipd_REN2);        w_26: VitalWireDelay (OE_ipd, OE, tipd_OE);        w_27: VitalWireDelay (DAFNeg_ipd, DAFNeg, tipd_DAFNeg);    END BLOCK;    ----------------------------------------------------------------------------    -- VITALBehavior Process    ----------------------------------------------------------------------------        VITALBehavior1 : PROCESS(RSNeg_ipd, WCLK_ipd, RCLK_ipd, OE_ipd, REN1_ipd,                                 REN2_ipd, WEN1_ipd, WEN2_ipd, DAFNeg_ipd)        VARIABLE flagstate   : statetype := "0000" ;        VARIABLE wordcounter : INTEGER := 0 ;        VARIABLE ae_offset   : NATURAL := 0 ;        VARIABLE af_offset   : NATURAL := 0 ;        VARIABLE d           : std_logic_vector(17 downto 0) ;        VARIABLE d_temp      : std_logic_vector(17 downto 0) ;        VARIABLE wrtclkcount : INTEGER := 0 ;        VARIABLE rdclkcount  : INTEGER := 0 ;        VARIABLE i           : INTEGER := 17 ;        VARIABLE rst         : INTEGER := 2 ;        VARIABLE memory      : mem_type ;        VARIABLE waddr       : INTEGER := 0 ;        VARIABLE raddr       : INTEGER := 0 ;        VARIABLE irflag      : INTEGER := 2 ;        VARIABLE orflag      : INTEGER := 2 ;        VARIABLE hf_limit    : INTEGER := 0 ;        VARIABLE f_limit     : INTEGER := 0 ;        VARIABLE ae_limit    : INTEGER := 0 ;        VARIABLE af_limit    : INTEGER := 0 ;        -- Timing Check Variables        VARIABLE Tviol_D0_WCLK  : X01 := '0';        VARIABLE TD_D0_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D1_WCLK  : X01 := '0';        VARIABLE TD_D1_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D2_WCLK  : X01 := '0';        VARIABLE TD_D2_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D3_WCLK  : X01 := '0';        VARIABLE TD_D3_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D4_WCLK  : X01 := '0';        VARIABLE TD_D4_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D5_WCLK  : X01 := '0';        VARIABLE TD_D5_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D6_WCLK  : X01 := '0';        VARIABLE TD_D6_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D7_WCLK  : X01 := '0';        VARIABLE TD_D7_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D8_WCLK  : X01 := '0';        VARIABLE TD_D8_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D9_WCLK  : X01 := '0';        VARIABLE TD_D9_WCLK     : VitalTimingDataType;        VARIABLE Tviol_D10_WCLK : X01 := '0';        VARIABLE TD_D10_WCLK    : VitalTimingDataType;        VARIABLE Tviol_D11_WCLK : X01 := '0';        VARIABLE TD_D11_WCLK    : VitalTimingDataType;        VARIABLE Tviol_D12_WCLK : X01 := '0';        VARIABLE TD_D12_WCLK    : VitalTimingDataType;        VARIABLE Tviol_D13_WCLK : X01 := '0';        VARIABLE TD_D13_WCLK    : VitalTimingDataType;        VARIABLE Tviol_D14_WCLK : X01 := '0';        VARIABLE TD_D14_WCLK    : VitalTimingDataType;

⌨️ 快捷键说明

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