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

📄 k7r321882m.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 4 页
字号:
        w_62 : VitalWireDelay (WNeg_ipd, WNeg, tipd_WNeg);        w_63 : VitalWireDelay (BW0Neg_ipd, BW0Neg, tipd_BW0Neg);        w_64 : VitalWireDelay (BW1Neg_ipd, BW1Neg, tipd_BW1Neg);        w_67 : VitalWireDelay (K_ipd, K, tipd_K);        w_68 : VitalWireDelay (KNeg_ipd, KNeg, tipd_KNeg);        w_69 : VitalWireDelay (C_ipd, C, tipd_C);        w_70 : VitalWireDelay (CNeg_ipd, CNeg, tipd_CNeg);        w_71 : VitalWireDelay (TMS_ipd, TMS, tipd_TMS);        w_72 : VitalWireDelay (TDI_ipd, TDI, tipd_TDI);        w_73 : VitalWireDelay (TCK_ipd, TCK, tipd_TCK);    END BLOCK;    ----------------------------------------------------------------------------    -- Main Behavior Block    ----------------------------------------------------------------------------    Behavior: BLOCK        PORT (            DLLNegIn        : IN    std_logic  := 'U';            BW0NIn          : IN    std_ulogic := 'U';            BW1NIn          : IN    std_ulogic := 'U';            Dat0In          : IN    std_logic_vector(HiDbit downto 0);            Dat1In          : IN    std_logic_vector(HiDbit downto 0);            DataOut         : OUT   std_logic_vector(17 downto 0)                                                     := (others => 'Z');            CIn             : IN    std_ulogic := 'U';            CNegIn          : IN    std_ulogic := 'U';            KIn             : IN    std_ulogic := 'U';            KNegIn          : IN    std_ulogic := 'U';            AddressIn       : IN    std_logic_vector(HiAbit downto 0);            RInt            : IN    std_ulogic := 'U';            WInt            : IN    std_ulogic := 'U';            CQOut           : OUT   std_ulogic := 'U';            CQNegOut        : OUT   std_ulogic := 'U'        );        PORT MAP (            Dat0In(0) => D0_ipd,            Dat0In(1) => D1_ipd,            Dat0In(2) => D2_ipd,            Dat0In(3) => D3_ipd,            Dat0In(4) => D4_ipd,            Dat0In(5) => D5_ipd,            Dat0In(6) => D6_ipd,            Dat0In(7) => D7_ipd,            Dat0In(8) => D8_ipd,            Dat1In(0) => D9_ipd,            Dat1In(1) => D10_ipd,            Dat1In(2) => D11_ipd,            Dat1In(3) => D12_ipd,            Dat1In(4) => D13_ipd,            Dat1In(5) => D14_ipd,            Dat1In(6) => D15_ipd,            Dat1In(7) => D16_ipd,            Dat1In(8) => D17_ipd,            DataOut(0) =>  Q0,            DataOut(1) =>  Q1,            DataOut(2) =>  Q2,            DataOut(3) =>  Q3,            DataOut(4) =>  Q4,            DataOut(5) =>  Q5,            DataOut(6) =>  Q6,            DataOut(7) =>  Q7,            DataOut(8) =>  Q8,            DataOut(9) =>  Q9,            DataOut(10) =>  Q10,            DataOut(11) =>  Q11,            DataOut(12) =>  Q12,            DataOut(13) =>  Q13,            DataOut(14) =>  Q14,            DataOut(15) =>  Q15,            DataOut(16) =>  Q16,            DataOut(17) =>  Q17,            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,            AddressIn(19) => A19_ipd,            BW0NIn => BW0Neg_ipd,            BW1NIn => BW1Neg_ipd,            CIn => C_ipd,            CNegIn => CNeg_ipd,            KIn => K_ipd,            KNegIn => KNeg_ipd,            RInt => RNeg_ipd,            WInt => WNeg_ipd,            CQOut => CQ,            CQNegOut => CQNeg,            DLLNegIn => DLLNeg_ipd        );        SIGNAL Q_zd     : std_logic_vector(17 DOWNTO 0);        SIGNAL KTRIG    : std_ulogic;        SIGNAL CTRIG    : std_ulogic;        SIGNAL KCTRIG   : std_ulogic;        SIGNAL KCTRIGN  : std_ulogic;        SIGNAL CPERIOD  : time := 4 ns;       -- C period        SIGNAL KPERIOD  : time := 4 ns;        SIGNAL CInt     : std_ulogic := '0';        SIGNAL CNegInt  : std_ulogic := '0';        SIGNAL Ktemp    : std_ulogic := '0';        SIGNAL Ctemp    : std_ulogic := '0';        SIGNAL KInt     : std_ulogic := '0';        SIGNAL KNegInt  : std_ulogic := '0';        SIGNAL CHalfPer : time := 4 ps;        SIGNAL Cdlldelay: time := 0 ns;        SIGNAL KHalfPer : time := 4 ps;        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 := 0 ns;        VARIABLE Ctemp_period  : Time := 0 ns;        VARIABLE Ctemp_period1 : Time := 0 ns;        VARIABLE Ctemp_period2 : Time := 0 ns;        VARIABLE prev_Ctemp    : Time := 0 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 + 4 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 := 0 ns;        VARIABLE Ktemp_period : Time := 0 ns;        VARIABLE Ktemp_period1 : Time := 0 ns;        VARIABLE Ktemp_period2 : Time := 0 ns;        VARIABLE prev_Ktemp   : Time := 0 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 + 4 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, CInt, CNegInt, KIn,                            KNegIn, RInt, WInt, AddressIn, Dat0In, Dat1In,                            KTRIG, CTRIG, KCTRIG, KCTRIGN)            -- Timing Check Variables            VARIABLE Tviol_A0_K         : X01 := '0';            VARIABLE TD_A0_K            : VitalTimingDataType;            VARIABLE Tviol_A0_KNeg      : X01 := '0';

⌨️ 快捷键说明

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