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

📄 idt71124.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 2 页
字号:
            WENegIn         : IN    std_ulogic := 'U';            CENegIn         : IN    std_ulogic := 'U'        );        PORT MAP (            DataOut(0) =>  D0,            DataOut(1) =>  D1,            DataOut(2) =>  D2,            DataOut(3) =>  D3,            DataOut(4) =>  D4,            DataOut(5) =>  D5,            DataOut(6) =>  D6,            DataOut(7) =>  D7,            DataIn(0) =>  D0_ipd,            DataIn(1) =>  D1_ipd,            DataIn(2) =>  D2_ipd,            DataIn(3) =>  D3_ipd,            DataIn(4) =>  D4_ipd,            DataIn(5) =>  D5_ipd,            DataIn(6) =>  D6_ipd,            DataIn(7) =>  D7_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,            OENegIn => OENeg_ipd,            WENegIn => WENeg_ipd,            CENegIn => CENeg_ipd        );        SIGNAL D_zd     : std_logic_vector(HiDbit DOWNTO 0);     BEGIN         ------------------------------------------------------------------------        -- Behavior Process        ------------------------------------------------------------------------        Behavior : PROCESS (OENegIn, WENegIn, CENegIn, AddressIn, DataIn)                                     -- Timing Check Variables            VARIABLE Tviol_D0_WENeg: X01 := '0';            VARIABLE TD_D0_WENeg   : VitalTimingDataType;            VARIABLE Tviol_D0_CENeg: X01 := '0';            VARIABLE TD_D0_CENeg   : VitalTimingDataType;            VARIABLE Pviol_WENeg   : X01 := '0';            VARIABLE PD_WENeg      : VitalPeriodDataType := VitalPeriodDataInit;            -- Memory array declaration            TYPE MemStore IS ARRAY (0 to TotalLOC) OF INTEGER                              RANGE  -2 TO MaxData;            -- Functionality Results Variables            VARIABLE Violation  : X01 := '0';            VARIABLE DataDrive  : std_logic_vector(HiDbit DOWNTO 0)                                   := (OTHERS => 'X');            VARIABLE DataTemp   : INTEGER RANGE -2 TO MaxData  := -2;            VARIABLE Location   : NATURAL RANGE 0 TO TotalLOC := 0;            VARIABLE MemData    : MemStore;            -- No Weak Values Variables            VARIABLE OENeg_nwv   : UX01 := 'U';            VARIABLE WENeg_nwv   : UX01 := 'U';            VARIABLE CENeg_nwv   : UX01 := 'U';        BEGIN             OENeg_nwv   := To_UX01 (s => OENegIn);            WENeg_nwv   := To_UX01 (s => WENegIn);            CENeg_nwv   := To_UX01 (s => CENegIn);            --------------------------------------------------------------------            -- Timing Check Section            --------------------------------------------------------------------            IF (TimingChecksOn) THEN                VitalSetupHoldCheck (                    TestSignal      => DataIn,                    TestSignalName  => "Data",                    RefSignal       => WENegIn,                    RefSignalName   => "WENeg",                    SetupHigh       => tsetup_D0_WENeg,                    SetupLow        => tsetup_D0_WENeg,                    HoldHigh        => thold_D0_WENeg,                    HoldLow         => thold_D0_WENeg,                    CheckEnabled    => (CENeg_nwv ='0' and OENeg_nwv ='1'),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_D0_WENeg,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_D0_WENeg );                VitalSetupHoldCheck (                    TestSignal      => DataIn,                    TestSignalName  => "Data",                    RefSignal       => CENegIn,                    RefSignalName   => "CENeg",                    SetupHigh       => tsetup_D0_CENeg,                    SetupLow        => tsetup_D0_CENeg,                    HoldHigh        => thold_D0_CENeg,                    HoldLow         => thold_D0_CENeg,                    CheckEnabled    => (WENeg_nwv ='0' and OENeg_nwv ='1'),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_D0_CENeg,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_D0_CENeg );                VitalPeriodPulseCheck (                    TestSignal      =>  WENegIn,                    TestSignalName  =>  "WENeg",                    PulseWidthLow   =>  tpw_WENeg_negedge,                    PeriodData      =>  PD_WENeg,                    XOn             =>  XOn,                    MsgOn           =>  MsgOn,                    Violation       =>  Pviol_WENeg,                    HeaderMsg       =>  InstancePath & PartID,                    CheckEnabled    =>  TRUE );                Violation := Pviol_WENeg OR Tviol_D0_WENeg OR Tviol_D0_CENeg;                ASSERT Violation = '0'                    REPORT InstancePath & partID & ": simulation may be" &                           " inaccurate due to timing violations"                    SEVERITY SeverityMode;            END IF; -- Timing Check Section            --------------------------------------------------------------------            -- Functional Section            --------------------------------------------------------------------            DataDrive := (OTHERS => 'Z');            IF (CENeg_nwv = '0') THEN                IF (OENeg_nwv = '0' OR WENeg_nwv = '0') THEN                    Location := To_Nat(AddressIn);                    IF (OENeg_nwv = '0' AND WENeg_nwv = '1') THEN                        DataTemp  := MemData(Location);                        IF DataTemp >= 0 THEN                            DataDrive := To_slv(DataTemp, DataWidth);                        ELSIF DataTemp = -2 THEN                            DataDrive := (OTHERS => 'U');                        ELSE                            DataDrive := (OTHERS => 'X');                        END IF;                    ELSE                        IF Violation = '0' THEN                            DataTemp := To_Nat(DataIn);                        ELSE                            DataTemp := -1;                        END IF;                        MemData(Location) := DataTemp;                    END IF;                END IF;            END IF;            --------------------------------------------------------------------            -- Output Section            --------------------------------------------------------------------            D_zd <= DataDrive;        END PROCESS;                                   ------------------------------------------------------------------------        -- Path Delay Processes generated as a function of data width        ------------------------------------------------------------------------        DataOut_Width : FOR i IN HiDbit DOWNTO 0 GENERATE            DataOut_Delay : PROCESS (D_zd(i))                 VARIABLE D_GlitchData:VitalGlitchDataArrayType(HiDbit Downto 0);            BEGIN                VitalPathDelay01Z (                    OutSignal       => DataOut(i),                    OutSignalName   => "Data",                    OutTemp         => D_zd(i),                    Mode            => OnEvent,                     GlitchData      => D_GlitchData(i),                    Paths           => (                             0 => (InputChangeTime => OENeg_ipd'LAST_EVENT,                              PathDelay       => tpd_OENeg_D0,                              PathCondition   => TRUE),                           1 => (InputChangeTime => CENeg_ipd'LAST_EVENT,                              PathDelay       => tpd_CENeg_D0,                              PathCondition   => TRUE),                           2 => (InputChangeTime => AddressIn'LAST_EVENT,                              PathDelay => VitalExtendToFillDelay(tpd_A0_D0),                              PathCondition   => TRUE)                    )                );            END PROCESS;                                   END GENERATE;    END BLOCK;END vhdl_behavioral;

⌨️ 快捷键说明

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