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

📄 mt46v32m8.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 5 页
字号:
            VARIABLE Tviol_DQS_CLK       : X01 := '0';            VARIABLE TD_DQS_CLK          : VitalTimingDataType;            VARIABLE Tviol_CKE_CLK      : X01 := '0';            VARIABLE TD_CKE_CLK         : VitalTimingDataType;            VARIABLE Tviol_Address_CLK  : X01 := '0';            VARIABLE TD_Address_CLK     : VitalTimingDataType;            VARIABLE Tviol_WENeg_CLK    : X01 := '0';            VARIABLE TD_WENeg_CLK       : VitalTimingDataType;            VARIABLE Tviol_RASNeg_CLK   : X01 := '0';            VARIABLE TD_RASNeg_CLK      : VitalTimingDataType;            VARIABLE Tviol_CSNeg_CLK    : X01 := '0';            VARIABLE TD_CSNeg_CLK       : VitalTimingDataType;            VARIABLE Tviol_CASNeg_CLK   : X01 := '0';            VARIABLE TD_CASNeg_CLK      : VitalTimingDataType;            VARIABLE Tviol_D0_DQS       : X01 := '0';            VARIABLE TD_D0_DQS          : VitalTimingDataType;            VARIABLE Tviol_DM_DQS      : X01 := '0';            VARIABLE TD_DM_DQS         : VitalTimingDataType;            VARIABLE Pviol_CLK     : X01 := '0';            VARIABLE PD_CLK        : VitalPeriodDataType := VitalPeriodDataInit;            VARIABLE Pviol_DQS     : X01 := '0';            VARIABLE PD_DQS        : VitalPeriodDataType := VitalPeriodDataInit;            -- Memory array declaration            TYPE MemStore IS ARRAY (0 to depth) OF INTEGER                             RANGE  -2 TO 255;            TYPE MemBlock IS ARRAY (0 to 3) OF MemStore;            TYPE mode_set_type IS (standard, extended);            TYPE Burst_type IS (sequential, interleave);            TYPE Write_Burst_type IS (programmed, single);            TYPE sequence IS ARRAY (0 to 7) OF NATURAL RANGE 0 to 7;            TYPE seqtab IS ARRAY (0 to 7) OF sequence;            TYPE MemLoc IS ARRAY (0 to 3) OF                 std_logic_vector(HiAddrBit+HiColBit+1 DOWNTO 0);            TYPE burst_counter IS ARRAY (0 to 3) OF NATURAL RANGE 0 to 257;            TYPE StartAddr_type IS ARRAY (0 to 3) OF NATURAL RANGE 0 TO 7;            TYPE Burst_Inc_type IS ARRAY (0 to 3) OF NATURAL RANGE 0 TO 8;            TYPE BaseLoc_type IS ARRAY (0 to 3) OF NATURAL RANGE 0 TO depth;            SUBTYPE OutWord IS std_logic_vector(7 DOWNTO 0);            CONSTANT seq0 : sequence := (0 & 1 & 2 & 3 & 4 & 5 & 6 & 7);            CONSTANT seq1 : sequence := (1 & 0 & 3 & 2 & 5 & 4 & 7 & 6);            CONSTANT seq2 : sequence := (2 & 3 & 0 & 1 & 6 & 7 & 4 & 5);            CONSTANT seq3 : sequence := (3 & 2 & 1 & 0 & 7 & 6 & 5 & 4);            CONSTANT seq4 : sequence := (4 & 5 & 6 & 7 & 0 & 1 & 2 & 3);            CONSTANT seq5 : sequence := (5 & 4 & 7 & 6 & 1 & 0 & 3 & 2);            CONSTANT seq6 : sequence := (6 & 7 & 4 & 5 & 2 & 3 & 0 & 1);            CONSTANT seq7 : sequence := (7 & 6 & 5 & 4 & 3 & 2 & 1 & 0);            CONSTANT intab : seqtab := (seq0, seq1, seq2, seq3, seq4, seq5,                                        seq6, seq7);            FILE mem_file       : text IS  mem_file_name;            VARIABLE MemData    : MemBlock;            VARIABLE file_bank  : NATURAL := 0;            VARIABLE ind        : NATURAL := 0;            VARIABLE buf        : line;            VARIABLE mode_set_ind : mode_set_type ;            VARIABLE MemAddr      : MemLoc;            VARIABLE Location     : NATURAL RANGE 0 TO depth := 0;            VARIABLE Location2    : NATURAL RANGE 0 TO depth := 0;            VARIABLE BaseLoc      : BaseLoc_type;            VARIABLE Burst_Inc    : Burst_Inc_type;            VARIABLE StartAddr    : StartAddr_type;            VARIABLE Burst_Length : NATURAL RANGE 2 TO 8 := 2;            VARIABLE Burst_Bits   : NATURAL RANGE 1 TO 3 := 1;            VARIABLE Burst        : Burst_Type;            VARIABLE Burst_Cnt    : burst_counter;            VARIABLE command    : command_type;            VARIABLE written    : boolean := false;            VARIABLE chip_en    : boolean := false;            VARIABLE write_to_write : boolean := false;            VARIABLE DQS_event_reg : boolean := false;            VARIABLE cur_bank   : natural range 0 to hi_bank;            VARIABLE ModeReg    : std_logic_vector(12 DOWNTO 0)                                   := (OTHERS => 'X');            VARIABLE ExtModeReg    : std_logic_vector(12 DOWNTO 0)                                   := (OTHERS => 'X');            VARIABLE Ref_Cnt      : NATURAL RANGE 0 TO 8192 := 0;            VARIABLE next_ref     : TIME;            VARIABLE BankString   : STRING(8 DOWNTO 1) := " Bank-X ";            -- Functionality Results Variables            VARIABLE Violation  : X01 := '0';            VARIABLE DataDriveOut :  std_logic_vector(7 DOWNTO 0)                                   := (OTHERS => 'Z');            VARIABLE DataDrive  : OutWord;            VARIABLE DataDrive1 : OutWord;            VARIABLE DataDrive2 : OutWord;            VARIABLE DataDrive3 : OutWord;            VARIABLE DataDrive4 : OutWord;            VARIABLE DataDrive5 : OutWord;            VARIABLE DataDrive6 : OutWord;            VARIABLE DM_reg0  : UX01;            VARIABLE DM_reg1  : UX01;            VARIABLE DM_reg2  : UX01;            VARIABLE DQSDriveOut : std_logic;            VARIABLE DQSDrive  : std_logic;            VARIABLE DQSDrive1 : std_logic;            VARIABLE DQSDrive2 : std_logic;            VARIABLE DQSDrive3 : std_logic;            VARIABLE DQSDrive4 : std_logic;            VARIABLE DQSDrive5 : std_logic;            VARIABLE DQSDrive6 : std_logic;            VARIABLE DQSDrive7 : std_logic;            VARIABLE DQS_zd    : std_logic;            VARIABLE DQS_GlitchData : VitalGlitchDataType;            VARIABLE InputReg  :INTEGER RANGE  -2 TO 255;        PROCEDURE FixColumnAddress( bank : IN NATURAL RANGE 0 TO 3) IS        BEGIN           MemAddr(bank)(HiColBit downto 0) := (others => '0');           MemAddr(bank)(HiColBit downto Burst_Bits) :=                      AddressIn(HiColBit downto Burst_Bits); --           Burst_Inc(bank) := to_nat(AddressIn(Burst_Bits-1 downto 0));           StartAddr(bank) := Burst_Inc(bank) mod 8;           BaseLoc(bank) := to_nat(MemAddr(bank));           Location := BaseLoc(bank) + Burst_Inc(bank);        END PROCEDURE ;        PROCEDURE ReadFromMem( bank : IN NATURAL RANGE 0 TO 3) IS        BEGIN            DQSDrive:='0';            IF MemData(Bank)(Location) = -2 THEN                DataDrive(HiDataBit downto 0) := (others => 'U');            ELSIF MemData(Bank)(Location) = -1 THEN                DataDrive(HiDataBit downto 0) := (others => 'X');            ELSE                DataDrive(HiDataBit downto 0):=                    to_slv(MemData(Bank)(Location),HiDataBit+1);            END IF;        END;        PROCEDURE WriteToMem( bank : IN NATURAL RANGE 0 TO 3) IS        BEGIN            IF DQS_event_reg THEN                IF Violation = '0' THEN                    MemData(Bank)(Location) := InputReg;                ELSE                    MemData(Bank)(Location) := -1;                END IF;            END IF;        END;        PROCEDURE BurstCtrl( bank : IN NATURAL RANGE 0 TO 3) IS        BEGIN            IF (Burst = sequential) THEN                Burst_Inc(bank) := (Burst_Inc(bank) + 1) MOD                                    Burst_Length;            ELSE                Burst_Inc(bank) := intab(StartAddr(bank))                                        (Burst_Cnt(bank));            END IF;        END;        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      => DMIn,                    TestSignalName  => "DM",                    RefSignal       => DQSIn,                    RefSignalName   => "DQS",                    SetupHigh       => tsetup_DM_DQS,                    SetupLow        => tsetup_DM_DQS,                    HoldHigh        => thold_DM_DQS,                    HoldLow         => thold_DM_DQS,                    CheckEnabled    => chip_en,                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_DM_DQS,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_DM_DQS );                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 AND                                        NOT(DataIn(0)='X' AND D_zd(0)='Z'),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_D0_CLK,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_D0_CLK );                VitalSetupHoldCheck (                    TestSignal      => DataIn,                    TestSignalName  => "Data",                    RefSignal       => DQSIn,                    RefSignalName   => "DQS",                    SetupHigh       => tsetup_DQ0_DQS,                    SetupLow        => tsetup_DQ0_DQS,                    HoldHigh        => thold_DQ0_DQS,                    HoldLow         => thold_DQ0_DQS,                    CheckEnabled    => chip_en,                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_D0_DQS,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_D0_DQS );                VitalSetupHoldCheck (                    TestSignal      => DQSIn,                    TestSignalName  => "DQS",                    RefSignal       => CLKIn,                    RefSignalName   => "CLK",                    SetupHigh       => tsetup_DQS_CLK,                    HoldHigh        => thold_DQS_CLK,                    CheckEnabled    => chip_en AND (NOT DQSIn=DQS_zd),                    RefTransition   => '/',                    HeaderMsg       => InstancePath & PartID,                    TimingData      => TD_DQS_CLK,                    XOn             => XOn,                    MsgOn           => MsgOn,                    Violation       => Tviol_DQS_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_A0_CLK,                    SetupLow        => tsetup_A0_CLK,                    HoldHigh        => thold_A0_CLK,                    HoldLow         => thold_A0_CLK,                    CheckEnabled    => chip_en,                    RefTransition   => '/',

⌨️ 快捷键说明

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