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

📄 cy7c1363.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 4 页
字号:
        );        PORT MAP (            BWANIn        =>  BWANeg_ipd,            BWBNIn        =>  BWBNeg_ipd,            GWNIn         =>  GWNeg_ipd,            BWENIn        =>  BWENeg_ipd,            CLKIn         =>  CLK_ipd,            OENegIn       =>  OENeg_ipd,            ADVNIn        =>  ADVNeg_ipd,            ADSPNIn       =>  ADSPNeg_ipd,            ADSCNIn       =>  ADSCNeg_ipd,            MODEIn        =>  MODE_ipd,            ZZIn          =>  ZZ_ipd,            CE2In         =>  CE2_ipd,            CENegIn       =>  CENeg_ipd,            CE2NegIn      =>  CE2Neg_ipd,            DataOut(0)    =>  DQA0,            DataOut(1)    =>  DQA1,            DataOut(2)    =>  DQA2,            DataOut(3)    =>  DQA3,            DataOut(4)    =>  DQA4,            DataOut(5)    =>  DQA5,            DataOut(6)    =>  DQA6,            DataOut(7)    =>  DQA7,            DataOut(8)    =>  DQA8,            DataOut(9)    =>  DQB0,            DataOut(10)   =>  DQB1,            DataOut(11)   =>  DQB2,            DataOut(12)   =>  DQB3,            DataOut(13)   =>  DQB4,            DataOut(14)   =>  DQB5,            DataOut(15)   =>  DQB6,            DataOut(16)   =>  DQB7,            DataOut(17)   =>  DQB8,            DatAIn(0)     =>  DQA0_ipd,            DatAIn(1)     =>  DQA1_ipd,            DatAIn(2)     =>  DQA2_ipd,            DatAIn(3)     =>  DQA3_ipd,            DatAIn(4)     =>  DQA4_ipd,            DatAIn(5)     =>  DQA5_ipd,            DatAIn(6)     =>  DQA6_ipd,            DatAIn(7)     =>  DQA7_ipd,            DatAIn(8)     =>  DQA8_ipd,            DatBIn(0)     =>  DQB0_ipd,            DatBIn(1)     =>  DQB1_ipd,            DatBIn(2)     =>  DQB2_ipd,            DatBIn(3)     =>  DQB3_ipd,            DatBIn(4)     =>  DQB4_ipd,            DatBIn(5)     =>  DQB5_ipd,            DatBIn(6)     =>  DQB6_ipd,            DatBIn(7)     =>  DQB7_ipd,            DatBIn(8)     =>  DQB8_ipd,            AddressIn(0)  =>  A0_ipd,            AddressIn(1)  =>  A1_ipd,            AddressIn(2)  =>  A2_ipd,            AddressIn(3)  =>  A3_ipd,            AddressIn(4)  =>  A4_ipd,            AddressIn(5)  =>  A5_ipd,            AddressIn(6)  =>  A6_ipd,            AddressIn(7)  =>  A7_ipd,            AddressIn(8)  =>  A8_ipd,            AddressIn(9)  =>  A9_ipd,            AddressIn(10) =>  A10_ipd,            AddressIn(11) =>  A11_ipd,            AddressIn(12) =>  A12_ipd,            AddressIn(13) =>  A13_ipd,            AddressIn(14) =>  A14_ipd,            AddressIn(15) =>  A15_ipd,            AddressIn(16) =>  A16_ipd,            AddressIn(17) =>  A17_ipd,            AddressIn(18) =>  A18_ipd        );        -- Type definition for state machine        TYPE mem_state IS (desel,                           begin_rdwr,                           SPwrite,                           SCwrite,                           read                          );        SIGNAL state     : mem_state;        TYPE sequence IS ARRAY (0 to 3) OF INTEGER RANGE -3 to 3;        TYPE seqtab IS ARRAY (0 to 3) OF sequence;        FILE mem_file    : text IS mem_file_name;        CONSTANT il0 : sequence := (0, 1, 2, 3);        CONSTANT il1 : sequence := (0, -1, 2, 1);        CONSTANT il2 : sequence := (0, 1, -2, -1);        CONSTANT il3 : sequence := (0, -1, -2, -3);        CONSTANT il  : seqtab := (il0, il1, il2, il3);        CONSTANT ln0 : sequence := (0, 1, 2, 3);        CONSTANT ln1 : sequence := (0, 1, 2, -1);        CONSTANT ln2 : sequence := (0, 1, -2, -1);        CONSTANT ln3 : sequence := (0, -3, -2, -1);        CONSTANT ln  : seqtab := (ln0, ln1, ln2, ln3);        CONSTANT MemSize : INTEGER := 16#7FFFF#;  -- 512K        CONSTANT MaxData : INTEGER := 16#1FF#;    -- 511        -- Memory array declaration        TYPE MemStore IS ARRAY (0 to MemSize) OF INTEGER                         RANGE  -2 TO MaxData;        SHARED VARIABLE MemDataA   : MemStore;        SHARED VARIABLE MemDataB   : MemStore;        -- Functionality Results Variables        SHARED VARIABLE Violation  : X01 := '0';        SHARED VARIABLE OBuf1      : std_logic_vector(17 DOWNTO 0)                                   := (OTHERS => 'Z');        SIGNAL Burst_Seq : seqtab := ln;        SIGNAL D_zd      : std_logic_vector(17 DOWNTO 0);        PROCEDURE ReadMem            (RAddr     : IN natural)        IS        BEGIN            IF MemDataA(RAddr) = -2 THEN                OBuf1(8 downto 0) := (others => 'U');            ELSIF MemDataA(RAddr) = -1 THEN                OBuf1(8 downto 0) := (others => 'X');            ELSE                OBuf1(8 downto 0) := to_slv(MemDataA(RAddr),9);            END IF;            IF MemDataB(RAddr) = -2 THEN                OBuf1(17 downto 9) := (others => 'U');            ELSIF MemDataB(RAddr) = -1 THEN                OBuf1(17 downto 9) := (others => 'X');            ELSE                OBuf1(17 downto 9) := to_slv(MemDataB(RAddr),9);            END IF;        END PROCEDURE ReadMem;        PROCEDURE WriteMem            (WAddr     : IN natural;             WDatA     : IN std_logic_vector(8 downto 0);             WDatB     : IN std_logic_vector(8 downto 0);             WGWN      : IN std_logic;             WBWA      : IN std_logic;             WBWB      : IN std_logic)        IS        BEGIN            IF WGWN = '0' THEN                MemDataA(WAddr) := -1;                MemDataB(WAddr) := -1;                IF Violation /= 'X' THEN                    MemDataA(WAddr) := to_nat(WDatA);                    MemDataB(WAddr) := to_nat(WDatB);                END IF;            ELSE                IF (WBWA = '0') THEN                    MemDataA(WAddr) := -1;                    IF Violation /= 'X' THEN                        MemDataA(WAddr) := to_nat(WDatA);                    END IF;                END IF;                IF (WBWB = '0') THEN                    MemDataB(WAddr) := -1;                    IF Violation /= 'X' THEN                        MemDataB(WAddr) := to_nat(WDatB);                    END IF;                END IF;            END IF;        END PROCEDURE WriteMem;    BEGIN        Burst_Setup : PROCESS (MODEIn)        BEGIN           IF (MODEIn = '0') THEN               Burst_Seq <= ln;  -- linear burst           ELSE               Burst_Seq <= il;  -- interleaved burst           END IF;        END PROCESS Burst_Setup;    ----------------------------------------------------------------------------    -- Main Behavior Process    ----------------------------------------------------------------------------        Behavior : PROCESS (BWANIn, BWBNIn, DatAIn, DatBIn, CLKIn, AddressIn,                            GWNIn, BWENIn, OENegIn, ADVNIn, ADSPNIn, ADSCNIn,                            CE2In, CENegIn, CE2NegIn, ZZIn)            -- Type definition for commands            TYPE command_type is (ds,                                  SPwr_burst,                                  SPwr_susp,                                  SCwr,                                  begin_rw,                                  read_burst,                                  read_susp                                 );            -- Timing Check Variables            VARIABLE Tviol_AddressIn_CLK : X01 := '0';            VARIABLE TD_AddressIn_CLK    : VitalTimingDataType;            VARIABLE Tviol_DatBIn_CLK    : X01 := '0';            VARIABLE TD_DatBIn_CLK       : VitalTimingDataType;            VARIABLE Tviol_DatAIn_CLK    : X01 := '0';            VARIABLE TD_DatAIn_CLK       : VitalTimingDataType;            VARIABLE Tviol_BWBN_CLK      : X01 := '0';            VARIABLE TD_BWBN_CLK         : VitalTimingDataType;            VARIABLE Tviol_BWAN_CLK      : X01 := '0';            VARIABLE TD_BWAN_CLK         : VitalTimingDataType;            VARIABLE Tviol_BWEN_CLK      : X01 := '0';            VARIABLE TD_BWEN_CLK         : VitalTimingDataType;            VARIABLE Tviol_GWN_CLK       : X01 := '0';            VARIABLE TD_GWN_CLK          : VitalTimingDataType;            VARIABLE Tviol_ADVNIn_CLK    : X01 := '0';            VARIABLE TD_ADVNIn_CLK       : VitalTimingDataType;            VARIABLE Tviol_ADSCNIn_CLK   : X01 := '0';            VARIABLE TD_ADSCNIn_CLK      : VitalTimingDataType;            VARIABLE Tviol_ADSPNIn_CLK   : X01 := '0';            VARIABLE TD_ADSPNIn_CLK      : VitalTimingDataType;            VARIABLE Tviol_CENegIn_CLK   : X01 := '0';            VARIABLE TD_CENegIn_CLK      : VitalTimingDataType;            VARIABLE Tviol_CE2NegIn_CLK  : X01 := '0';            VARIABLE TD_CE2NegIn_CLK     : VitalTimingDataType;            VARIABLE Tviol_CE2In_CLK     : X01 := '0';            VARIABLE TD_CE2In_CLK        : VitalTimingDataType;            VARIABLE Pviol_CLK    : X01 := '0';            VARIABLE PD_CLK       : VitalPeriodDataType := VitalPeriodDataInit;            VARIABLE MemAddr    : NATURAL RANGE 0 TO MemSize;            VARIABLE startaddr  : NATURAL RANGE 0 TO MemSize;            VARIABLE Burst_Cnt  : NATURAL RANGE 0 TO 4 := 0;            VARIABLE memstart   : NATURAL RANGE 0 TO 3 := 0;            VARIABLE offset     : INTEGER RANGE -3 TO 3 := 0;            VARIABLE command    : command_type;            VARIABLE R          : std_logic;            VARIABLE zz_set     : BOOLEAN := false;            VARIABLE zz_reset   : BOOLEAN := true;            VARIABLE zz_cnt     : INTEGER RANGE 0 TO 2 := 0;        BEGIN            --------------------------------------------------------------------            -- Timing Check Section            --------------------------------------------------------------------            IF (TimingChecksOn) THEN                VitalSetupHoldCheck (                    TestSignal      => AddressIn,                    TestSignalName  => "Address",                    RefSignal       => CLKIn,                    RefSignalName   => "CLK",                    SetupHigh       => tsetup_A0_CLK,                    SetupLow        => tsetup_A0_CLK,                    HoldHigh        => thold_A0_CLK,                    HoldLow         => thold_A0_CLK,                    CheckEnabled    => (ZZIn = '0'),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_AddressIn_CLK,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_AddressIn_CLK );                VitalSetupHoldCheck (                    TestSignal      => DatBIn,                    TestSignalName  => "DatB",                    RefSignal       => CLKIn,                    RefSignalName   => "CLK",                    SetupHigh       => tsetup_DQA0_CLK,                    SetupLow        => tsetup_DQA0_CLK,                    HoldHigh        => thold_DQA0_CLK,                    HoldLow         => thold_DQA0_CLK,                    CheckEnabled    => (ZZIn ='0') AND                                       (DatBIn/=D_zd(17 downto 9)),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_DatBIn_CLK,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_DatBIn_CLK );                VitalSetupHoldCheck (                    TestSignal      => DatAIn,                    TestSignalName  => "DatA",                    RefSignal       => CLKIn,                    RefSignalName   => "CLK",                    SetupHigh       => tsetup_DQA0_CLK,                    SetupLow        => tsetup_DQA0_CLK,                    HoldHigh        => thold_DQA0_CLK,                    HoldLow         => thold_DQA0_CLK,                    CheckEnabled    => (ZZIn ='0') AND                                       (DatAIn/=D_zd(8 downto 0)),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_DatAIn_CLK,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_DatAIn_CLK );                VitalSetupHoldCheck (                    TestSignal      => GWNIn,                    TestSignalName  => "GW",                    RefSignal       => CLKIn,                    RefSignalName   => "CLK",                    SetupHigh       => tsetup_BWANeg_CLK,                    SetupLow        => tsetup_BWANeg_CLK,                    HoldHigh        => thold_BWANeg_CLK,                    HoldLow         => thold_BWANeg_CLK,                    CheckEnabled    => (ZZIn ='0'),

⌨️ 快捷键说明

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