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

📄 k7r323682m.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        SIGNAL Ktemp    : std_ulogic := '0';        SIGNAL Ctemp    : std_ulogic := '0';        SIGNAL KInt     : std_ulogic := '0';        SIGNAL KNegInt  : std_ulogic := '0';        SIGNAL CHalfPer : time := 5 ns;        SIGNAL Cdlldelay: time := 0 ns;        SIGNAL KHalfPer : time := 5 ns;        SIGNAL Kdlldelay: time := 0 ns;        TYPE cmode IS (c, k);        SIGNAL mode     : cmode := c;    BEGIN        ----------------------------------------------        -- DLL model functional section            ---        ----------------------------------------------        C_DLL: PROCESS(CIn, Ctemp)        VARIABLE CIn_period    : Time := 1 ms;        VARIABLE prev_CIn      : Time := 1 ns;        VARIABLE Ctemp_period  : Time := 1 ns;        VARIABLE Ctemp_period1 : Time := 1 ns;        VARIABLE Ctemp_period2 : Time := 1 ns;        VARIABLE prev_Ctemp    : Time := 1 ns;        VARIABLE dll_lock      : BOOLEAN := false;        VARIABLE toggle1       : boolean;        VARIABLE toggle2       : boolean;        VARIABLE DllDisable    : BOOLEAN := false;  -- Disable dll mode        BEGIN            DllDisable := (DLLNeg_ipd = '0');        IF mode = c THEN            IF rising_edge(CIn) THEN                CIn_period := NOW - prev_CIn;                prev_CIn := NOW;                IF CIn_period > 30 ns THEN                    dll_lock := false;                    ASSERT false                        REPORT "C mode DLL reseting"                        SEVERITY note;                END IF;            END IF;            IF rising_edge(Ctemp) THEN                Ctemp_period := NOW - prev_Ctemp;                prev_Ctemp := NOW;                IF toggle1 AND toggle2 AND not(dll_lock)AND not                DllDisable THEN                    IF Ctemp_period > CIn_period THEN                        Chalfper <= Chalfper - 51 ps;                        dll_lock := false;                    ELSIF Ctemp_period < CIn_period THEN                        Chalfper <= Chalfper + 7 ps;                        dll_lock := false;                    ELSIF Ctemp_period = Ctemp_period2 THEN -- stable?                        dll_lock := true;                        ASSERT false                            REPORT "C mode DLL lock achieved"                            SEVERITY note;                    ELSE                        Ctemp_period2 := Ctemp_period1;                        Ctemp_period1 := Ctemp_period;                    END IF;                END IF;                toggle1 := not toggle1;                IF toggle1 THEN                    toggle2 := not toggle2;                ELSE                    Cdlldelay <= 0 ps;                END IF;            END IF;            IF rising_edge(Ctemp) AND dll_lock AND toggle1 AND toggle2 THEN                IF (prev_CIn + tpd_C_Q1) < NOW THEN                    IF Cdlldelay < CIn_period THEN                        Cdlldelay <= Cdlldelay - 60 ps;                    END IF;                END IF;            END IF;        END IF;        END PROCESS C_DLL;        C_temp : PROCESS(Ctemp,DLLNeg_ipd) -- generating internal clock from DLL        BEGIN            IF NOT DLLNeg_ipd = '0' THEN                Ctemp <= not(Ctemp) AFTER CHalfPer + Cdlldelay;            END IF;        END PROCESS C_temp;        K_DLL: PROCESS(KIn, Ktemp)        VARIABLE KIn_period   : Time := 1 ms;        VARIABLE prev_KIn     : Time := 1 ns;        VARIABLE Ktemp_period : Time := 1 ns;        VARIABLE Ktemp_period1 : Time := 1 ns;        VARIABLE Ktemp_period2 : Time := 1 ns;        VARIABLE prev_Ktemp   : Time := 1 ns;        VARIABLE dll_lock     : BOOLEAN := false;        VARIABLE toggle1      : boolean;        VARIABLE toggle2      : boolean;        VARIABLE DllDisable   : BOOLEAN := false;  -- Disable dll mode        BEGIN            DllDisable := (DLLNeg_ipd = '0');        IF mode = k THEN            IF rising_edge(KIn) THEN                KIn_period := NOW - prev_KIn;                prev_KIn := NOW;                IF KIn_period > 30 ns THEN                    dll_lock := false;                    ASSERT false                        REPORT "K mode DLL reseting"                        SEVERITY note;                END IF;            END IF;            IF rising_edge(Ktemp) THEN                Ktemp_period := NOW - prev_Ktemp;                prev_Ktemp := NOW;                IF toggle1 AND toggle2 AND not(dll_lock) AND not                DllDisable THEN                    IF Ktemp_period > KIn_period THEN                        Khalfper <= Khalfper - 51 ps;                        dll_lock := false;                    ELSIF Ktemp_period < KIn_period THEN                        Khalfper <= Khalfper + 7 ps;                        dll_lock := false;                    ELSIF Ktemp_period = Ktemp_period2 THEN -- stable?                        dll_lock := true;                        ASSERT false                            REPORT "K mode DLL lock achieved"                            SEVERITY note;                    ELSE                        Ktemp_period2 := Ktemp_period1;                        Ktemp_period1 := Ktemp_period;                    END IF;                END IF;                toggle1 := not toggle1;                IF toggle1 THEN                    toggle2 := not toggle2;                ELSE                    Kdlldelay <= 0 ps;                END IF;            END IF;            IF rising_edge(Ktemp) AND dll_lock AND toggle1 AND toggle2 THEN                IF (prev_KIn + tpd_C_Q1) < NOW THEN                    IF Kdlldelay < KIn_period THEN                        Kdlldelay <= Kdlldelay - 60 ps;                    END IF;                END IF;            END IF;        END IF;        END PROCESS K_DLL;        K_temp : PROCESS(Ktemp, DLLNeg_ipd) -- generating internal clock                                            -- from DLL        BEGIN            IF NOT DLLNeg_ipd = '0' THEN                Ktemp <= not(Ktemp)  AFTER KHalfPer + Kdlldelay;            END IF;        END PROCESS K_temp;        C_int : PROCESS (CIn, Ctemp, KIn, Ktemp)-- Passing clock based on DLL_EN        BEGIN            IF (not DLLNegIn= '0') THEN                IF mode = c THEN                    CInt <= TRANSPORT Ctemp;                    CNegInt <= TRANSPORT not Ctemp;                ELSIF mode = k THEN                    CInt <= TRANSPORT Ktemp;                    CNegInt <= TRANSPORT not Ktemp;                END IF;            ELSE                IF mode = c THEN                    CInt <= CIn ;                    CNegInt <= CNegIn ;                ELSIF mode = k THEN                    CInt <= KIn ;                    CNegInt <= KNegIn ;                END IF;            END IF;        END PROCESS C_int;        ------------------------------------------------------------------------        -- Behavior Process        ------------------------------------------------------------------------        Behavior : PROCESS (BW0NIn, BW1NIn, BW2NIn, BW3NIn, CInt, CNegInt, KIn,                            KNegIn, RInt, WInt, AddressIn, Dat0In, Dat1In,                            Dat2In, Dat3In, KTRIG, CTRIG, KCTRIG, KCTRIGN)            -- Timing Check Variables            VARIABLE Tviol_A0_K         : X01 := '0';            VARIABLE TD_A0_K            : VitalTimingDataType;            VARIABLE Tviol_A0_KNeg      : X01 := '0';            VARIABLE TD_A0_KNeg         : VitalTimingDataType;            VARIABLE Tviol_D0_K         : X01 := '0';            VARIABLE TD_D0_K            : VitalTimingDataType;            VARIABLE Tviol_D1_K         : X01 := '0';            VARIABLE TD_D1_K            : VitalTimingDataType;            VARIABLE Tviol_D2_K         : X01 := '0';            VARIABLE TD_D2_K            : VitalTimingDataType;            VARIABLE Tviol_D3_K         : X01 := '0';            VARIABLE TD_D3_K            : VitalTimingDataType;            VARIABLE Tviol_D0_KNeg      : X01 := '0';            VARIABLE TD_D0_KNeg         : VitalTimingDataType;            VARIABLE Tviol_D1_KNeg      : X01 := '0';            VARIABLE TD_D1_KNeg         : VitalTimingDataType;            VARIABLE Tviol_D2_KNeg      : X01 := '0';            VARIABLE TD_D2_KNeg         : VitalTimingDataType;            VARIABLE Tviol_D3_KNeg      : X01 := '0';            VARIABLE TD_D3_KNeg         : VitalTimingDataType;            VARIABLE Tviol_RNeg_K       : X01 := '0';            VARIABLE TD_RNeg_K          : VitalTimingDataType;            VARIABLE Tviol_WNeg_K       : X01 := '0';            VARIABLE TD_WNeg_K          : VitalTimingDataType;            VARIABLE Tviol_BW0Neg_K     : X01 := '0';            VARIABLE TD_BW0Neg_K        : VitalTimingDataType;            VARIABLE Tviol_BW1Neg_K     : X01 := '0';            VARIABLE TD_BW1Neg_K        : VitalTimingDataType;            VARIABLE Tviol_BW2Neg_K     : X01 := '0';            VARIABLE TD_BW2Neg_K        : VitalTimingDataType;            VARIABLE Tviol_BW3Neg_K     : X01 := '0';            VARIABLE TD_BW3Neg_K        : VitalTimingDataType;            VARIABLE Tviol_BW0Neg_KNeg  : X01 := '0';            VARIABLE TD_BW0Neg_KNeg     : VitalTimingDataType;            VARIABLE Tviol_BW1Neg_KNeg  : X01 := '0';            VARIABLE TD_BW1Neg_KNeg     : VitalTimingDataType;            VARIABLE Tviol_BW2Neg_KNeg  : X01 := '0';            VARIABLE TD_BW2Neg_KNeg     : VitalTimingDataType;            VARIABLE Tviol_BW3Neg_KNeg  : X01 := '0';            VARIABLE TD_BW3Neg_KNeg     : VitalTimingDataType;            VARIABLE Pviol_C            :  X01 := '0';            VARIABLE TD_C          : VitalPeriodDataType := VitalPeriodDataInit;            VARIABLE Pviol_CNeg         :  X01 := '0';            VARIABLE TD_CNeg       : VitalPeriodDataType := VitalPeriodDataInit;            VARIABLE Pviol_K            :  X01 := '0';            VARIABLE TD_K          : VitalPeriodDataType := VitalPeriodDataInit;            VARIABLE Pviol_KNeg         :  X01 := '0';            VARIABLE TD_KNeg       : VitalPeriodDataType := VitalPeriodDataInit;            VARIABLE Sviol_KNeg_CNeg    :  X01 := '0';            VARIABLE SD_KNeg_CNeg  : VitalSkewDataType := VitalSkewDataInit;            VARIABLE Sviol_K_C          :  X01 := '0';            VARIABLE SD_K_C        : VitalSkewDataType := VitalSkewDataInit;            VARIABLE Sviol_K_KNeg       :  X01 := '0';            VARIABLE SD_K_KNeg     : VitalSkewDataType := VitalSkewDataInit;            VARIABLE Sviol_C_CNeg       :  X01 := '0';            VARIABLE SD_C_CNeg     : VitalSkewDataType := VitalSkewDataInit;            -- Functionality Results Variables            VARIABLE Violation  : X01 := '0';            VARIABLE CQ_zd      : std_ulogic := 'U';            VARIABLE CQNeg_zd   : std_ulogic := 'U';            VARIABLE CQ_GlitchData    : VitalGlitchDataType;            VARIABLE CQNeg_GlitchData : VitalGlitchDataType;            -- Memory array declaration            TYPE MemStore IS ARRAY (0 to TotalLOC) OF INTEGER                             RANGE  -2 TO MaxData;

⌨️ 快捷键说明

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