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

📄 cy7c453.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 3 页
字号:
----------------------------------------------------------------------------------  File Name: cy7c453.vhd----------------------------------------------------------------------------------  Copyright (C) 2001 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     B.Bizic    01 Oct 02   Initial release------------------------------------------------------------------------------------  PART DESCRIPTION:----  Library:    FIFO--  Technology: CMOS--  Part:       CY7C453----  Description: Clocked FIFO with Programmable Flags 2,048 x 9--------------------------------------------------------------------------------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 cy7c453 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_ENWNeg              : VitalDelayType01 := VitalZeroDelay01;        tipd_ENRNeg              : VitalDelayType01 := VitalZeroDelay01;        tipd_CKW                 : VitalDelayType01 := VitalZeroDelay01;        tipd_CKR                 : VitalDelayType01 := VitalZeroDelay01;        tipd_XINeg               : VitalDelayType01 := VitalZeroDelay01;        tipd_MRNeg               : VitalDelayType01 := VitalZeroDelay01;        tipd_FLNeg               : VitalDelayType01 := VitalZeroDelay01;        tipd_OENeg               : VitalDelayType01 := VitalZeroDelay01;        -- tpd delays        tpd_CKR_Q0                 : VitalDelayType01 := UnitDelay01;        tpd_MRNeg_Q0             : VitalDelayType01 := UnitDelay01;-- tAMR        tpd_MRNeg_ENeg          : VitalDelayType01 := UnitDelay01;-- tMEF        tpd_CKW_ENeg             : VitalDelayType01 := UnitDelay01;        tpd_OENeg_Q0             : VitalDelayType01Z := UnitDelay01Z;        -- tpw values: pulse widths        tpw_CKR_negedge          : VitalDelayType   := UnitDelay;        tpw_CKR_posedge          : VitalDelayType   := UnitDelay;        tpw_MRNeg_negedge        : VitalDelayType   := UnitDelay;        tpw_FLNeg_negedge        : VitalDelayType   := UnitDelay;        -- tperiod_min: minimum clock period = 1/max freq        tperiod_CKR              : VitalDelayType   := UnitDelay;        -- tsetup values: setup times        tsetup_D0_CKW            : VitalDelayType   := UnitDelay; --tSD        tsetup_ENWNeg_CKW        : VitalDelayType   := UnitDelay; --tSEN        tsetup_CKW_MRNeg         : VitalDelayType   := UnitDelay; --tSCMR        -- thold values: hold times        thold_D0_CKW             : VitalDelayType   := UnitDelay; --tHD        thold_ENWNeg_CKW         : VitalDelayType   := UnitDelay; --tHEN        -- tskew time:skew times         tdevice_SKEW1  : VitalDelayType := UnitDelay; -- tSKEW1        tdevice_SKEW2  : VitalDelayType := UnitDelay; -- tSKEW2        -- trecovery time:recovery time        trecovery_CKW_MRNeg     : VitalDelayType := UnitDelay; -- tMRR        trecovery_ENRNeg_FLNeg    : VitalDelayType := UnitDelay;        -- generic control parameters        InstancePath        : STRING    := DefaultInstancePath;        TimingChecksOn      : BOOLEAN   := DefaultTimingChecks;        MsgOn               : BOOLEAN   := DefaultMsgOn;        XOn                 : BOOLEAN   := DefaultXon;        -- For FMF SDF technology file usage        TimingModel         : STRING    := DefaultTimingModel    );    PORT (        D0              : IN    STD_ULOGIC := 'U';        D1              : IN    STD_ULOGIC := 'U';        D2              : IN    STD_ULOGIC := 'U';        D3              : IN    STD_ULOGIC := 'U';        D4              : IN    STD_ULOGIC := 'U';        D5              : IN    STD_ULOGIC := 'U';        D6              : IN    STD_ULOGIC := 'U';        D7              : IN    STD_ULOGIC := 'U';        D8              : IN    STD_ULOGIC := 'U';        Q0              : OUT   STD_ULOGIC := 'U';        Q1              : OUT   STD_ULOGIC := 'U';        Q2              : OUT   STD_ULOGIC := 'U';        Q3              : OUT   STD_ULOGIC := 'U';        Q4              : OUT   STD_ULOGIC := 'U';        Q5              : OUT   STD_ULOGIC := 'U';        Q6              : OUT   STD_ULOGIC := 'U';        Q7              : OUT   STD_ULOGIC := 'U';        Q8              : OUT   STD_ULOGIC := 'U';        ENWNeg          : IN   STD_ULOGIC := 'U';        ENRNeg          : IN   STD_ULOGIC := 'U';        CKW             : IN   STD_ULOGIC := 'U';        CKR             : IN   STD_ULOGIC := 'U';        ENeg            : OUT   STD_ULOGIC := 'U';        FLNeg           : IN    STD_ULOGIC := 'U';        MRNeg           : IN    STD_ULOGIC := 'U';        OENeg           : IN    STD_ULOGIC := 'U';        XINeg           : IN    STD_ULOGIC := 'U';        HFNeg           : OUT   STD_ULOGIC := 'U';        XONeg           : OUT   STD_ULOGIC := 'U'    );    ATTRIBUTE VITAL_LEVEL0 of cy7c453 : ENTITY IS TRUE;END cy7c453;---------------------------------------------------------------------------------- ARCHITECTURE DECLARATION--------------------------------------------------------------------------------ARCHITECTURE vhdl_behavioral of cy7c453 IS    ATTRIBUTE VITAL_LEVEL0 of vhdl_behavioral : ARCHITECTURE IS TRUE;    CONSTANT partID         : STRING := "CY7C453";    SIGNAL D0_ipd              : STD_ULOGIC := 'U';    SIGNAL D1_ipd              : STD_ULOGIC := 'U';    SIGNAL D2_ipd              : STD_ULOGIC := 'U';    SIGNAL D3_ipd              : STD_ULOGIC := 'U';    SIGNAL D4_ipd              : STD_ULOGIC := 'U';    SIGNAL D5_ipd              : STD_ULOGIC := 'U';    SIGNAL D6_ipd              : STD_ULOGIC := 'U';    SIGNAL D7_ipd              : STD_ULOGIC := 'U';    SIGNAL D8_ipd              : STD_ULOGIC := 'U';    SIGNAL ENWNeg_ipd          : STD_ULOGIC := 'U';    SIGNAL ENRNeg_ipd          : STD_ULOGIC := 'U';    SIGNAL CKW_ipd             : STD_ULOGIC := 'U';    SIGNAL CKR_ipd             : STD_ULOGIC := 'U';    SIGNAL XINeg_ipd           : STD_ULOGIC := 'U';    SIGNAL FLNeg_ipd           : STD_ULOGIC := 'U';    SIGNAL MRNeg_ipd           : STD_ULOGIC := 'U';    SIGNAL OENeg_ipd           : STD_ULOGIC := 'U';    -- No Weak Values --    SIGNAL D0_nwv              : STD_ULOGIC := 'U';    SIGNAL D1_nwv              : STD_ULOGIC := 'U';    SIGNAL D2_nwv              : STD_ULOGIC := 'U';    SIGNAL D3_nwv              : STD_ULOGIC := 'U';    SIGNAL D4_nwv              : STD_ULOGIC := 'U';    SIGNAL D5_nwv              : STD_ULOGIC := 'U';    SIGNAL D6_nwv              : STD_ULOGIC := 'U';    SIGNAL D7_nwv              : STD_ULOGIC := 'U';    SIGNAL D8_nwv              : STD_ULOGIC := 'U';    SIGNAL ENWNeg_nwv          : STD_ULOGIC := 'U';    SIGNAL ENRNeg_nwv          : STD_ULOGIC := 'U';    SIGNAL CKW_nwv             : STD_ULOGIC := 'U';    SIGNAL CKR_nwv             : STD_ULOGIC := 'U';    SIGNAL XINeg_nwv           : STD_ULOGIC := 'U';    SIGNAL FLNeg_nwv           : STD_ULOGIC := 'U';    SIGNAL MRNeg_nwv           : STD_ULOGIC := 'U';    SIGNAL OENeg_nwv           : STD_ULOGIC := 'U';        -- FIFO memory definations    CONSTANT FIFOSize       : POSITIVE  := 2048;    CONSTANT FIFOWordLenght : POSITIVE  := 9;    TYPE     FIFOArray     IS array (0 to FIFOSize) of INTEGER RANGE -2 TO 511;    -- internal signals    SIGNAL CountPointer     : NATURAL RANGE 0 TO FIFOSize :=0;    SIGNAL ReadPointer      : NATURAL RANGE 0 TO FIFOSize :=0;    SIGNAL WritePointer     : NATURAL RANGE 0 TO FIFOSize :=0;    SIGNAL EmptyOffReg      : NATURAL:=16;    SIGNAL FullOffReg       : NATURAL:=16;    SIGNAL ProgReg          : STD_LOGIC_VECTOR(FIFOWordLenght - 1 DOWNTO 0)    :="000000001";    SIGNAL Start            : STD_ULOGIC := '0';    SIGNAL parity_enable    : BOOLEAN:=FALSE;    SIGNAL parity_odd_even  : STD_LOGIC;    SIGNAL parity_generate  : BOOLEAN:=FALSE;    -- SKEW stuff (see also generics list)    ALIAS  tSKEW1          : VitalDelayType IS tdevice_SKEW1;    ALIAS  tSKEW2          : VitalDelayType IS tdevice_SKEW2;    SIGNAL tSKEW_CKW_CKR   : Time := 0 ns;    -- actual /CKW/CKR skew time    SIGNAL tSKEW_CKR_CKW   : Time := 0 ns;    -- actual /CKR/CKW skew time    SIGNAL OpenIn, OpenOut : STD_LOGIC;    ALIAS  tCKR            : VitalDelayType IS tperiod_CKR;    ALIAS  tCKW            : VitalDelayType IS tperiod_CKR;BEGIN---------------------------------------------------------------------------------- Dummy instances for exporting tSKEW vals from SDF file-- using DEVICE construct--------------------------------------------------------------------------------  SKEW1: VitalBuf (OpenOut, OpenIn, (tdevice_SKEW1, tdevice_SKEW1));  SKEW2: VitalBuf (OpenOut, OpenIn, (tdevice_SKEW2, tdevice_SKEW2));    -------------------------------------------------------------------    -- 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_20 : VitalWireDelay (ENWNeg_ipd, ENWNeg, tipd_ENWNeg);        w_21 : VitalWireDelay (ENRNeg_ipd, ENRNeg, tipd_ENRNeg);        w_22 : VitalWireDelay (CKW_ipd, CKW, tipd_CKW);        w_23 : VitalWireDelay (CKR_ipd, CKR, tipd_CKR);        w_24 : VitalWireDelay (XINeg_ipd, XINeg, tipd_XINeg);        w_25 : VitalWireDelay (FLNeg_ipd, FLNeg, tipd_FLNeg);        w_26 : VitalWireDelay (MRNeg_ipd, MRNeg, tipd_MRNeg);        w_27 : VitalWireDelay (OENeg_ipd, OENeg, tipd_OENeg);    END BLOCK WireDelay;    D0_nwv      <= To_UX01 (s => D0_ipd);    D1_nwv      <= To_UX01 (s => D1_ipd);    D2_nwv      <= To_UX01 (s => D2_ipd);    D3_nwv      <= To_UX01 (s => D3_ipd);    D4_nwv      <= To_UX01 (s => D4_ipd);    D5_nwv      <= To_UX01 (s => D5_ipd);    D6_nwv      <= To_UX01 (s => D6_ipd);    D7_nwv      <= To_UX01 (s => D7_ipd);    D8_nwv      <= To_UX01 (s => D8_ipd);    ENWNeg_nwv  <= To_UX01 (s => ENWNeg_ipd);    ENRNeg_nwv  <= To_UX01 (s => ENRNeg_ipd);    CKW_nwv     <= To_UX01 (s => CKW_ipd);    CKR_nwv     <= To_UX01 (s => CKR_ipd);    MRNeg_nwv   <= To_UX01 (s => MRNeg_ipd);    OENeg_nwv   <= To_UX01 (s => OENeg_ipd);    XINeg_nwv   <= To_UX01 (s => XINeg_ipd);    FLNeg_nwv   <= To_UX01 (s => FLNeg_ipd);        -------------------------------------------------------------------    --  Main behavior Block    -------------------------------------------------------------------    VitalBehavior: BLOCK        PORT (            Data    : IN    STD_LOGIC_VECTOR(FIFOWordLenght-1 downto 0);            Q       : OUT   STD_LOGIC_VECTOR(FIFOWordLenght-1 downto 0);            ENWNeg  : IN    std_Ulogic := 'U';            ENRNeg  : IN    std_Ulogic := 'U';            CKW     : IN    std_Ulogic := 'U';            CKR     : IN    std_Ulogic := 'U';            HFNeg   : OUT   std_Ulogic := 'U';            ENeg    : OUT   std_Ulogic := 'U';            XONeg   : OUT   std_Ulogic := 'U';            XINeg   : IN    std_Ulogic := 'U';            FLNeg   : IN    std_Ulogic := 'U';            MRNeg   : IN    std_Ulogic := 'U';            OENeg   : IN    std_Ulogic := 'U'              );        PORT MAP (            Data(0) => D0_nwv,            Data(1) => D1_nwv,            Data(2) => D2_nwv,            Data(3) => D3_nwv,            Data(4) => D4_nwv,            Data(5) => D5_nwv,            Data(6) => D6_nwv,            Data(7) => D7_nwv,            Data(8) => D8_nwv,            Q(0)    => Q0,            Q(1)    => Q1,            Q(2)    => Q2,            Q(3)    => Q3,            Q(4)    => Q4,            Q(5)    => Q5,            Q(6)    => Q6,            Q(7)    => Q7,            Q(8)    => Q8,            ENWNeg  => ENWNeg_nwv,            ENRNeg  => ENRNeg_nwv,            CKW     => CKW_nwv,            CKR     => CKR_nwv,            XINeg   => XINeg_nwv,            FLNeg   => FLNeg_nwv,            MRNeg   => MRNeg_nwv,            OENeg   => OENeg_nwv,            HFNeg   => HFNeg,            ENeg    => ENeg,            XONeg   => XONeg        );    SIGNAL ENeg_zd       : STD_ULOGIC := 'X';      ---------------------    SIGNAL HFNeg_zd      : STD_ULOGIC := 'X';      -- regs for output --    SIGNAL XONeg_zd      : STD_ULOGIC := 'X';      -- flags           --    SIGNAL Q_zd          : STD_LOGIC_VECTOR(FIFOWordLenght-1 DOWNTO 0)                         :=(OTHERS=>'X');    BEGIN  -- VitalBehavior block    ---------------------------------------------------------------    -- Timinf Check Section    ---------------------------------------------------------------        MainReadWrite:PROCESS (Data,ENWNeg, ENRNeg, CKW, CKR,                                FLNeg, MRNeg, XINeg, OENeg)            VARIABLE FIFOMemory : FIFOArray;            TYPE fifo_mode_type IS (unk, single, first_exp, other_exp);            TYPE stat_type IS (inact, act);            VARIABLE check_parity : STD_LOGIC:='X';            VARIABLE fifo_mode  : fifo_mode_type:=unk;            VARIABLE rd_stat    : stat_type;

⌨️ 快捷键说明

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