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

📄 mt48lc32m16a2.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        IF (DQML_nwv = '0') THEN            Mem(Bank)(Loc) := -1;            IF Violation = '0' THEN                Mem(Bank)(Loc) := to_nat(DataIn(7 downto 0));            END IF;        END IF;        IF (DQMH_nwv = '0') THEN            Mem(Bank)(Loc+1) := -1;            IF Violation = '0' THEN                Mem(Bank)(Loc+1) := to_nat(DataIn(15 downto 8));            END IF;        END IF;    END PROCEDURE MemWrite;    PROCEDURE BurstIncProc    (Bank  :   IN  NATURAL )    IS    BEGIN        BurstInc(bank) := 0;        IF (Burst_Bits > 0) THEN            BurstInc(bank) := to_nat(AddressIn(Burst_Bits-1 downto 0));        END IF;    END PROCEDURE BurstIncProc;    PROCEDURE NextStateAuto    (Bank  :   IN  NATURAL;     state :   IN mem_state )    IS    BEGIN        IF (AddressIn(10) = '0') THEN            statebank(bank) <= state;        ELSIF (AddressIn(10) = '1') THEN            IF state = write THEN                statebank(bank) <= write_auto_pre;            ELSE                statebank(bank) <= read_auto_pre;            END IF;        END IF;     END PROCEDURE NextStateAuto;    BEGIN        --------------------------------------------------------------------        -- Timing Check Section        --------------------------------------------------------------------        IF (TimingChecksOn) THEN            VitalSetupHoldCheck (                TestSignal      => BAIn,                TestSignalName  => "BA",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_BA_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_BA_CLK );            VitalSetupHoldCheck (                TestSignal      => DQMLIn,                TestSignalName  => "DQML",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_DQML_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_DQML_CLK );            VitalSetupHoldCheck (                TestSignal      => DQMHIn,                TestSignalName  => "DQMH",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_DQMH_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_DQMH_CLK );            VitalSetupHoldCheck (                TestSignal      => DataIn,                TestSignalName  => "Data",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_D0_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_D0_CLK );            VitalSetupHoldCheck (                TestSignal      => CKEIn,                TestSignalName  => "CKE",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => true,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_CKE_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_CKE_CLK );            VitalSetupHoldCheck (                TestSignal      => AddressIn,                TestSignalName  => "Address",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_Address_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_Address_CLK );            VitalSetupHoldCheck (                TestSignal      => WENegIn,                TestSignalName  => "WENeg",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_WENeg_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_WENeg_CLK );            VitalSetupHoldCheck (                TestSignal      => RASNegIn,                TestSignalName  => "RASNeg",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_RASNeg_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_RASNeg_CLK );            VitalSetupHoldCheck (                TestSignal      => CSNegIn,                TestSignalName  => "CSNeg",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_CSNeg_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_CSNeg_CLK );            VitalSetupHoldCheck (                TestSignal      => CASNegIn,                TestSignalName  => "CASNeg",                RefSignal       => CLKIn,                RefSignalName   => "CLK",                SetupHigh       => tsetup_DQ0_CLK,                SetupLow        => tsetup_DQ0_CLK,                HoldHigh        => thold_DQ0_CLK,                HoldLow         => thold_DQ0_CLK,                CheckEnabled    => chip_en,                RefTransition   => '/',                HeaderMsg       => InstancePath & PartID,                TimingData      => TD_CASNeg_CLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_CASNeg_CLK );            VitalPeriodPulseCheck (                TestSignal      =>  CLKIn,                TestSignalName  =>  "CLK",                Period          =>  tperiod_CLK_posedge,                PulseWidthLow   =>  tpw_CLK_negedge,                PulseWidthHigh  =>  tpw_CLK_posedge,                PeriodData      =>  PD_CLK,                XOn             =>  XOn,                MsgOn           =>  MsgOn,                Violation       =>  Pviol_CLK,                HeaderMsg       =>  InstancePath & PartID,                CheckEnabled    =>  TRUE );            Violation := Pviol_CLK OR Tviol_BA_CLK OR Tviol_DQMH_CLK OR                        Tviol_DQML_CLK OR Tviol_D0_CLK OR Tviol_CKE_CLK OR                        Tviol_Address_CLK OR Tviol_WENeg_CLK OR                        Tviol_RASNeg_CLK OR Tviol_CSNeg_CLK OR                        Tviol_CASNeg_CLK;            ASSERT Violation = '0'                REPORT InstancePath & partID & ": simulation may be" &                        " inaccurate due to timing violations"                SEVERITY SeverityMode;        END IF; -- Timing Check Section    --------------------------------------------------------------------    -- Functional Section    --------------------------------------------------------------------    IF (rising_edge(CLKIn)) THEN        CKEreg <= CKE_nwv;        IF (NOW > Next_Ref AND PoweredUp AND Ref_Cnt > 0) THEN            Ref_Cnt  := Ref_Cnt - 1;            Next_Ref := NOW + tdevice_REF;        END IF;        IF CKEreg = '1' THEN            IF CSNegIn = '0' THEN                chip_en := true;            ELSE                chip_en := false;            END IF;        END IF;    END IF;    IF (rising_edge(CLKIn) AND CKEreg = '1' AND to_X01(CSNegIn) = '0') THEN        ASSERT (not(Is_X(DQMLIn)))            REPORT InstancePath & partID & ": Unusable value for DQML"            SEVERITY SeverityMode;        ASSERT (not(Is_X(DQMHIn)))            REPORT InstancePath & partID & ": Unusable value for DQMH"            SEVERITY SeverityMode;        ASSERT (not(Is_X(WENegIn)))            REPORT InstancePath & partID & ": Unusable value for WENeg"            SEVERITY SeverityMode;        ASSERT (not(Is_X(RASNegIn)))            REPORT InstancePath & partID & ": Unusable value for RASNeg"            SEVERITY SeverityMode;        ASSERT (not(Is_X(CASNegIn)))            REPORT InstancePath & partID & ": Unusable value for CASNeg"            SEVERITY SeverityMode;        -- Command Decode        IF ((RASNegIn = '1') AND (CASNegIn = '1') AND (WENegIn = '1')) THEN            command := nop;        ELSIF ((RASNegIn = '0') AND (CASNegIn = '1') AND (WENegIn = '1')) THEN            command := act;        ELSIF ((RASNegIn = '1') AND (CASNegIn = '0') AND (WENegIn = '1')) THEN            command := read;        ELSIF ((RASNegIn = '1') AND (CASNegIn = '0') AND (WENegIn = '0')) THEN            command := writ;        ELSIF ((RASNegIn = '1') AND (CASNegIn = '1') AND (WENegIn = '0')) THEN            command := bst;        ELSIF ((RASNegIn = '0') AND (CASNegIn = '1') AND (WENegIn = '0')) THEN            command := pre;        ELSIF ((RASNegIn = '0') AND (CASNegIn = '0') AND (WENegIn = '1')) THEN            command := ref;        ELSIF ((RASNegIn = '0') AND (CASNegIn = '0') AND (WENegIn = '0')) THEN            command := mrs;        END IF;        -- PowerUp Check        IF (NOT(PoweredUp) AND command /= nop) THEN            ASSERT false                REPORT InstancePath & partID & ": Incorrect power up. Command"                        & " issued before power up complete."                SEVERITY SeverityMode;        END IF;        -- Bank Decode        CASE BAIn IS            WHEN "00" => cur_bank := 0; BankString := " Bank-0 ";            WHEN "01" => cur_bank := 1; BankString := " Bank-1 ";            WHEN "10" => cur_bank := 2; BankString := " Bank-2 ";            WHEN "11" => cur_bank := 3; BankString := " Bank-3 ";            WHEN others =>                ASSERT false                    REPORT InstancePath & partID & ": Could not decode bank"                        & " selection - results may be incorrect."

⌨️ 快捷键说明

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