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

📄 testbench.vhd

📁 在逻辑的系统仿真中使用的FLASH模型(AMD的Am29lv160d)
💻 VHD
📖 第 1 页 / 共 5 页
字号:
--------------------------------------------------------------------------------  File name : testbench_640.vhd---------------------------------------------------------------------------------  Copyright (C) 2003 AMD.----  MODIFICATION HISTORY :----  version: | author:     | mod date: | changes made:--    V0.1    M.Marinkovic  11 July 03  Initial--    v0.2    M.Marinkovic  28 Aug  03  Changed protected sector selection-----------------------------------------------------------------------------------  PART DESCRIPTION:----  Description:--              Generic test enviroment for verification of AMD flash memory--              VITAL models.my_mem-----------------------------------------------------------------------------------  Note:   VHDL code formating not done--          For High/Low sector protection selection change:--             TimingModel constant and TimingModel generic value---------------------------------------------------------------------------------LIBRARY IEEE;    USE IEEE.std_logic_1164.ALL;--USE IEEE.VITAL_timing.ALL;--USE IEEE.VITAL_primitives.ALL;    USE STD.textio.ALL;LIBRARY VITAL2000;    USE VITAL2000.vital_timing.ALL;    USE VITAL2000.vital_primitives.ALL;LIBRARY FMF;    USE FMF.gen_utils.ALL;    USE FMF.conversions.ALL;LIBRARY work;    USE work.amd_tc_pkg.ALL;--------------------------------------------------------------------------------- ENTITY DECLARATION-------------------------------------------------------------------------------ENTITY testbench_640 ISEND testbench_640;--------------------------------------------------------------------------------- ARCHITECTURE DECLARATION-------------------------------------------------------------------------------ARCHITECTURE vhdl_behavioral of testbench_640 IS    COMPONENT my_mem     GENERIC (        -- tipd delays: interconnect path delays        tipd_A0             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A1             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A2             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A3             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A4             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A5             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A6             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A7             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A8             : VitalDelayType01 := VitalZeroDelay01; --        tipd_A9             : VitalDelayType01 := VitalZeroDelay01; --address        tipd_A10            : VitalDelayType01 := VitalZeroDelay01; --lines        tipd_A11            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A12            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A13            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A14            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A15            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A16            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A17            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A18            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A19            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A20            : VitalDelayType01 := VitalZeroDelay01; --        tipd_A21            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ0            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ1            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ2            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ3            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ4            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ5            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ6            : VitalDelayType01 := VitalZeroDelay01; -- data        tipd_DQ7            : VitalDelayType01 := VitalZeroDelay01; -- lines        tipd_DQ8            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ9            : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ10           : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ11           : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ12           : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ13           : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ14           : VitalDelayType01 := VitalZeroDelay01; --        tipd_DQ15           : VitalDelayType01 := VitalZeroDelay01; -- DQ15/A-1        tipd_CENeg          : VitalDelayType01 := VitalZeroDelay01;        tipd_OENeg          : VitalDelayType01 := VitalZeroDelay01;        tipd_WENeg          : VitalDelayType01 := VitalZeroDelay01;        tipd_RESETNeg       : VitalDelayType01 := VitalZeroDelay01;        tipd_WPNeg          : VitalDelayType01 := VitalZeroDelay01; --WP#/ACC        tipd_BYTENeg        : VitalDelayType01 := VitalZeroDelay01;        -- tpd delays        tpd_A0_DQ0          : VitalDelayType01 := UnitDelay01;--tACC        tpd_A0_DQ1          : VitalDelayType01 := UnitDelay01;--tPACC        tpd_CENeg_DQ0       : VitalDelayType01Z := UnitDelay01Z;        --(tCE,tCE,tDF,-,tDF,-)        tpd_OENeg_DQ0       : VitalDelayType01Z := UnitDelay01Z;        --(tOE,tOE,tDF,-,tDF,-)        tpd_RESETNeg_DQ0    : VitalDelayType01Z := UnitDelay01Z;        --(-,-,0,-,0,-)        tpd_CENeg_RY        : VitalDelayType01 := UnitDelay01; --tBUSY        tpd_WENeg_RY        : VitalDelayType01 := UnitDelay01; --tBUSY        --tsetup values        tsetup_A0_CENeg     : VitalDelayType := UnitDelay;  --tAS edge \        tsetup_A0_OENeg     : VitalDelayType := UnitDelay;  --tASO edge \        tsetup_DQ0_CENeg    : VitalDelayType := UnitDelay;  --tDS edge /        --thold values        thold_CENeg_RESETNeg: VitalDelayType := UnitDelay;   --tRH  edge /        thold_OENeg_WENeg   : VitalDelayType := UnitDelay;   --tOEH edge /        thold_A0_CENeg      : VitalDelayType := UnitDelay;   --tAH  edge \        thold_A0_OENeg      : VitalDelayType := UnitDelay;   --tAHT edge \        thold_DQ0_CENeg     : VitalDelayType := UnitDelay;   --tDH edge /        thold_WENeg_OENeg   : VitalDelayType := UnitDelay;   --tGHWL edge /        --tpw values: pulse width        tpw_RESETNeg_negedge: VitalDelayType := UnitDelay; --tRP        tpw_OENeg_posedge   : VitalDelayType := UnitDelay; --tOEPH        tpw_WENeg_negedge   : VitalDelayType := UnitDelay; --tWP        tpw_WENeg_posedge   : VitalDelayType := UnitDelay; --tWPH        tpw_CENeg_negedge   : VitalDelayType := UnitDelay; --tCP        tpw_CENeg_posedge   : VitalDelayType := UnitDelay; --tCEPH        tpw_A0_negedge      : VitalDelayType := UnitDelay; --tWC tRC        -- tdevice values: values for internal delays            --Effective Write Buffer Program Operation  tWHWH1        tdevice_WBPB        : VitalDelayType    := 11 us;            --Program Operation        tdevice_POB         : VitalDelayType    := 100 us;            --Sector Erase Operation    tWHWH2        tdevice_SEO         : VitalDelayType    := 500 ms;            --Timing Limit Exceeded        tdevice_HANG        : VitalDelayType    := 400 ms; --?            --program/erase suspend timeout        tdevice_START_T1    : VitalDelayType    := 5 us;            --sector erase command sequence timeout        tdevice_CTMOUT      : VitalDelayType    := 50 us;            --device ready after Hardware reset(during embeded algorithm)        tdevice_READY       : VitalDelayType    := 20 us; --tReady        -- generic control parameters        InstancePath        : STRING    := DefaultInstancePath;        TimingChecksOn      : BOOLEAN   := DefaultTimingChecks;        MsgOn               : BOOLEAN   := DefaultMsgOn;        XOn                 : BOOLEAN   := DefaultXon;        -- memory file to be loaded        mem_file_name       : STRING    ;--:= "am29lv640m.mem";        prot_file_name      : STRING    ;--:= "am29lv640m_prot.mem";        secsi_file_name     : STRING    ;--:= "am29lv_secsi.mem";        UserPreload         : BOOLEAN   ;--:= TRUE;        LongTimming         : BOOLEAN   ;--:= TRUE;        -- For FMF SDF technology file usage        TimingModel         : STRING    --:= "AM29LV640MH90R"    );    PORT (        A21             : IN    std_logic := 'U'; --        A20             : IN    std_logic := 'U'; --        A19             : IN    std_logic := 'U'; --        A18             : IN    std_logic := 'U'; --        A17             : IN    std_logic := 'U'; --        A16             : IN    std_logic := 'U'; --        A15             : IN    std_logic := 'U'; --        A14             : IN    std_logic := 'U'; --        A13             : IN    std_logic := 'U'; --address        A12             : IN    std_logic := 'U'; --lines        A11             : IN    std_logic := 'U'; --        A10             : IN    std_logic := 'U'; --        A9              : IN    std_logic := 'U'; --        A8              : IN    std_logic := 'U'; --        A7              : IN    std_logic := 'U'; --        A6              : IN    std_logic := 'U'; --        A5              : IN    std_logic := 'U'; --        A4              : IN    std_logic := 'U'; --        A3              : IN    std_logic := 'U'; --        A2              : IN    std_logic := 'U'; --        A1              : IN    std_logic := 'U'; --        A0              : IN    std_logic := 'U'; --        DQ15            : INOUT std_logic := 'U'; -- DQ15/A-1        DQ14            : INOUT std_logic := 'U'; --        DQ13            : INOUT std_logic := 'U'; --        DQ12            : INOUT std_logic := 'U'; --        DQ11            : INOUT std_logic := 'U'; --        DQ10            : INOUT std_logic := 'U'; --        DQ9             : INOUT std_logic := 'U'; -- data        DQ8             : INOUT std_logic := 'U'; -- lines        DQ7             : INOUT std_logic := 'U'; --        DQ6             : INOUT std_logic := 'U'; --        DQ5             : INOUT std_logic := 'U'; --        DQ4             : INOUT std_logic := 'U'; --        DQ3             : INOUT std_logic := 'U'; --        DQ2             : INOUT std_logic := 'U'; --        DQ1             : INOUT std_logic := 'U'; --        DQ0             : INOUT std_logic := 'U'; --        CENeg           : IN    std_logic := 'U';        OENeg           : IN    std_logic := 'U';        WENeg           : IN    std_logic := 'U';        RESETNeg        : IN    std_logic := 'U';        WPNeg           : IN    std_logic := 'U'; --WP#/ACC        BYTENeg         : IN    std_logic := 'U';        RY              : OUT   std_logic := 'U'  --RY/BY#    );    END COMPONENT;    FOR ALL: my_mem USE ENTITY WORK.my_mem(VHDL_BEHAVIORAL);    ---------------------------------------------------------------------------    --memory configuration    ---------------------------------------------------------------------------    CONSTANT MaxData        :   NATURAL :=  16#FF#; --255;    CONSTANT SecSize        :   NATURAL :=  16#FFFF#; --65535    CONSTANT SecSiSize      :   NATURAL :=  255;    CONSTANT SecNum         :   NATURAL :=  127;    CONSTANT HiAddrBit      :   NATURAL :=  21;    --Address of the Protected Sector--    CONSTANT ProtSecNum     :   NATURAL :=  SecNum;    ---------------------------------------------------------------------------    --model configuration    ---------------------------------------------------------------------------    CONSTANT mem_file       :   STRING  := "am29lv640m.mem";    CONSTANT prot_file      :   STRING  := "am29lv640m_prot.mem";    CONSTANT secsi_file     :   STRING  := "am29lv_secsi.mem";    CONSTANT UserPreload    :   boolean :=  TRUE;    CONSTANT DebugInfo      :   boolean :=  FALSE;    CONSTANT LongTimming    :   boolean :=  TRUE;    CONSTANT TimingModel    :   STRING  :=  "MY_MEM";
	                                     -- "AM29LV640MH90R";--High sect prot.                                         -- "AM29LV128ML93R";--Low sect. prot.    ---------------------------------------------------------------------------    SIGNAL ProtSecNum       :   NATURAL :=  SecNum ;    --Flash Memory Array    TYPE SecType  IS ARRAY (0 TO SecSize) OF                     INTEGER RANGE -1 TO MaxData;    TYPE MemArray IS ARRAY (0 TO SecNum) OF                     SecType;    --Common Flash Interface Query codes    TYPE CFItype  IS ARRAY (16#10# TO 16#50#) OF                    NATURAL RANGE 0 TO 16#FF#;    --SecSi Sector    TYPE SecSiType  IS ARRAY ( 0 TO SecSiSize) OF                     INTEGER RANGE -1 TO MaxData;    ---------------------------------------------------------------------------    --  memory declaration    ---------------------------------------------------------------------------    --             -- Mem(SecAddr)(Address)....    SHARED  VARIABLE Mem            : MemArray := (OTHERS => (OTHERS=> MaxData));    SHARED  VARIABLE CFI_array      : CFItype   :=(OTHERS=>0);    SHARED  VARIABLE SecSi          : SecSiType :=(OTHERS=>0);    --command sequence    SHARED VARIABLE cmd_seq         : cmd_seq_type;    SIGNAL          status          : status_type := none;    SIGNAL          sts_check       : std_logic_vector(7 downto 0);    SIGNAL check_err      :   std_logic := '0';    SIGNAL ErrorInTest    :   std_logic := '0'; --    ----------------------------------------------------------------------------    --Personality module:    --    --  instanciates the DUT module and adapts generic test signals to it    --  TBD: block port    ----------------------------------------------------------------------------    --DUT port    SIGNAL T_DQ       : std_logic_vector(15 downto 0) := (OTHERS=>'U');    SIGNAL T_A        : std_logic_vector(HiAddrBit downto 0) := (OTHERS=>'U');    SIGNAL T_RESETNeg : std_logic                     := 'U';    SIGNAL T_CENeg    : std_logic                     := 'U';    SIGNAL T_WENeg    : std_logic                     := 'U';    SIGNAL T_OENeg    : std_logic                     := 'U';    SIGNAL T_WPNeg    : std_logic                     := 'U';    SIGNAL T_BYTENeg  : std_logic                     := 'U';    SIGNAL T_RY       : std_logic                     := 'U';    ---------------------------------------------------------------------------    --    ---------------------------------------------------------------------------    --SecSi ProtectionStatus    SHARED VARIABLE FactoryProt     : std_logic := '1';    --Sector Protection Status    SHARED VARIABLE Sec_Prot        : std_logic_vector (SecNum downto 0) :=                                                        (OTHERS => '0');    SHARED VARIABLE Sect            : NATURAL RANGE 0 TO SecNum  := 0;    SHARED VARIABLE Addr            : NATURAL RANGE 0 TO SecSize := 0;    SHARED VARIABLE WriteData       : NATURAL RANGE 0 TO MaxData := 0;    --CONSTANT    --timming parameters    CONSTANT RESETNeg_pw            : time    :=  500 ns; --tRP    SIGNAL pwron                    : std_logic := '0';    SIGNAL Tseries                  : NATURAL;    SIGNAL Tcase                    : NATURAL;    SHARED VARIABLE ts_cnt  :   NATURAL RANGE 1 TO 30:=1; -- testseries counter

⌨️ 快捷键说明

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