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

📄 mt47h256m4.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        PROCEDURE insert_list(            key_address  :  IN integer;            val_data     :  IN integer;            root         :  INOUT mem_data_pointer_t) IS            VARIABLE new_element  :  mem_data_pointer_t;            VARIABLE found        :  mem_data_pointer_t;            VARIABLE prev         :  mem_data_pointer_t;        BEGIN            position_list(key_address, root, found, prev);            -- Insert at list tail            IF (found = NULL) THEN                prev.successor := NEW mem_data_t;                prev.successor.key_address := key_address;                prev.successor.val_data := val_data;                prev.successor.successor := NULL;            ELSE                -- Element exists, update memory data value                IF (found.key_address = key_address) THEN                    found.val_data := val_data;                ELSE                    -- No element found, allocate and link                    new_element := NEW mem_data_t;                    new_element.key_address := key_address;                    new_element.val_data := val_data;                    new_element.successor := found;                    -- Possible root position                    IF (prev /= NULL) THEN                        prev.successor := new_element;                    ELSE                        root := new_element;                    END IF;                END IF;            END IF;        END PROCEDURE insert_list;        -----------------------------------------------------------------------        -- Memory READ operation performed above dynamically allocated space        -----------------------------------------------------------------------        PROCEDURE read_mem(            linked_list  :  INOUT mem_data_pointer_t;            data         :  INOUT integer;            address      :  IN integer) IS            VARIABLE found     :  mem_data_pointer_t;            VARIABLE prev      :  mem_data_pointer_t;            VARIABLE m_data    :  integer RANGE -2 TO MaxData;        BEGIN            IF (linked_list = NULL) THEN                -- Not allocated, not written, initial value                m_data := -2;            ELSE                position_list(address, linked_list, found, prev);                IF (found /= NULL) THEN                    IF found.key_address = address THEN                        -- Allocated, val_data stored                        m_data := found.val_data;                    ELSE                        -- Not allocated, not written, initial value                        m_data := -2;                    END IF;                ELSE                    -- Not allocated, not written, initial value                    m_data := -2;                END IF;            END IF;            data := m_data;        END PROCEDURE read_mem;        ---------------------------------------------------------------------        -- Memory WRITE operation performed above dynamically allocated space        ---------------------------------------------------------------------        PROCEDURE write_mem(            linked_list  :  INOUT mem_data_pointer_t;            address      :  IN integer;            data         :  IN integer) IS        BEGIN            -- Handle possible root value update            IF (linked_list /= NULL) THEN                    insert_list(address, data, linked_list);            ELSE                create_list(address, data, linked_list);            END IF;        END PROCEDURE write_mem;        ------------------------------------------------------------------------        -- Handle dynamic memory allocation        ------------------------------------------------------------------------        -- Partition dynamically allocated space for performance        CONSTANT list_num  : integer := BankNum;        -- Access dynamically allocated space        SHARED VARIABLE linked_list : mem_data_pointer_array_t(0 TO list_num);        -- Asure proper initialization        PROCEDURE initialize_list IS        BEGIN            FOR I IN 0 TO list_num LOOP                linked_list(I) := NULL;            END LOOP;        END PROCEDURE initialize_list;    BEGIN    CK_DLL: PROCESS(CKDiff)        VARIABLE Previous : time := 0 ns;        VARIABLE TmpPer : time := 0 ns;    BEGIN        IF rising_edge(CKDiff) THEN            TmpPer := NOW - Previous;            IF TmpPer > 0 ns THEN                CKPeriod <= TmpPer;            END IF;            Previous := NOW;            CKHalfPer <= CKPeriod / 2;            CKDLLDelay <= CKPeriod - tpd_CK_DQ1;        END IF;    END PROCESS CK_DLL;    CK_temp: PROCESS(CKDiff) -- generating internal clock from DLL    BEGIN        CKtemp <= NOT CKtemp AFTER CKHalfPer;    END PROCESS CK_temp;    CKInt <= TRANSPORT CKtemp AFTER CKDLLDelay;    Power_up: PROCESS(CK_stable)    BEGIN        IF CK_stable THEN            PoweredUp <= TRUE AFTER 200 us;        END IF;    END PROCESS Power_up;    Init_d: PROCESS(In_d)    BEGIN        IF In_d THEN            Init_delay <= TRUE AFTER 400 ns;        ELSE            Init_delay <= FALSE;        END IF;    END PROCESS Init_d;    DLLdelay: PROCESS(DLL_delay, CKDiff)        VARIABLE cnt : natural;    BEGIN        IF rising_edge(DLL_delay) THEN            cnt := 0;            DLL_delay_elapsed <= FALSE;        ELSIF rising_edge(CKDiff) AND NOT DLL_delay_elapsed THEN            cnt := cnt + 1;            IF cnt = 199 THEN                DLL_delay_elapsed <= TRUE;            END IF;        END IF;    END PROCESS DLLdelay;    ----------------------------------------------------------------------------    -- Main Behavior Process    ----------------------------------------------------------------------------    VITALBehaviour: PROCESS(CKDiff, DQSDiff, DQSIn, DQIn,                            DM, ODT, CKE, CSNeg, RASNeg, CASNeg,                            WENeg, BAIn, AIn)        -- Timing Check Variables        VARIABLE Tviol_DQ0_DQS     : X01 := '0';        VARIABLE TD_DQ0_DQS        : VitalTimingDataType;        VARIABLE Tviol_DQ0_DQS1    : X01 := '0';        VARIABLE TD_DQ0_DQS1       : VitalTimingDataType;        VARIABLE Tviol_DQ1_DQS     : X01 := '0';        VARIABLE TD_DQ1_DQS        : VitalTimingDataType;        VARIABLE Tviol_DQ1_DQS1    : X01 := '0';        VARIABLE TD_DQ1_DQS1       : VitalTimingDataType;        VARIABLE Tviol_DM0_DQS     : X01 := '0';        VARIABLE TD_DM0_DQS        : VitalTimingDataType;        VARIABLE Tviol_DM0_DQS1    : X01 := '0';        VARIABLE TD_DM0_DQS1       : VitalTimingDataType;        VARIABLE Tviol_DM1_DQS     : X01 := '0';        VARIABLE TD_DM1_DQS        : VitalTimingDataType;        VARIABLE Tviol_DM1_DQS1    : X01 := '0';        VARIABLE TD_DM1_DQS1       : VitalTimingDataType;        VARIABLE Tviol_ODT_CK      : X01 := '0';        VARIABLE TD_ODT_CK         : VitalTimingDataType;        VARIABLE Tviol_CKE_CK      : X01 := '0';        VARIABLE TD_CKE_CK         : VitalTimingDataType;        VARIABLE Tviol_CSNeg_CK    : X01 := '0';        VARIABLE TD_CSNeg_CK       : VitalTimingDataType;        VARIABLE Tviol_RASNeg_CK   : X01 := '0';        VARIABLE TD_RASNeg_CK      : VitalTimingDataType;        VARIABLE Tviol_CASNeg_CK   : X01 := '0';        VARIABLE TD_CASNeg_CK      : VitalTimingDataType;        VARIABLE Tviol_WENeg_CK    : X01 := '0';        VARIABLE TD_WENeg_CK       : VitalTimingDataType;        VARIABLE Tviol_BA0_CK      : X01 := '0';        VARIABLE TD_BA0_CK         : VitalTimingDataType;        VARIABLE Tviol_A0_CK       : X01 := '0';        VARIABLE TD_A0_CK          : VitalTimingDataType;        VARIABLE Tviol_DQS_CK3     : X01 := '0';        VARIABLE TD_DQS_CK3        : VitalTimingDataType;        VARIABLE Tviol_DQS_CK4     : X01 := '0';        VARIABLE TD_DQS_CK4        : VitalTimingDataType;        VARIABLE Tviol_DQS_CK5     : X01 := '0';        VARIABLE TD_DQS_CK5        : VitalTimingDataType;        VARIABLE Tviol_DQS_CK6     : X01 := '0';        VARIABLE TD_DQS_CK6        : VitalTimingDataType;        VARIABLE Tviol_DQS1_CK3    : X01 := '0';        VARIABLE TD_DQS1_CK3       : VitalTimingDataType;        VARIABLE Tviol_DQS1_CK4    : X01 := '0';        VARIABLE TD_DQS1_CK4       : VitalTimingDataType;        VARIABLE Tviol_DQS1_CK5    : X01 := '0';        VARIABLE TD_DQS1_CK5       : VitalTimingDataType;        VARIABLE Tviol_DQS1_CK6    : X01 := '0';        VARIABLE TD_DQS1_CK6       : VitalTimingDataType;        VARIABLE Pviol_A03         : X01 := '0';        VARIABLE PD_A03            : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_A04         : X01 := '0';        VARIABLE PD_A04            : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_A05         : X01 := '0';        VARIABLE PD_A05            : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_A06         : X01 := '0';        VARIABLE PD_A06            : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_ODT3        : X01 := '0';        VARIABLE PD_ODT3           : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_ODT4        : X01 := '0';        VARIABLE PD_ODT4           : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_ODT5        : X01 := '0';        VARIABLE PD_ODT5           : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_ODT6        : X01 := '0';        VARIABLE PD_ODT6           : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_CSNeg3      : X01 := '0';        VARIABLE PD_CSNeg3         : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_CSNeg4      : X01 := '0';        VARIABLE PD_CSNeg4         : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_CSNeg5      : X01 := '0';        VARIABLE PD_CSNeg5         : VitalPeriodDataType := VitalPeriodDataInit;        VARIABLE Pviol_CSNeg6      : X01 := '0';

⌨️ 快捷键说明

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