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

📄 hyb18t1g160af_120.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        -- EMRS(2) : future use        -- EMRS(3) : future use        SHARED VARIABLE RL :INTEGER RANGE 0 TO 10 := 0;-- number of CKIn        SHARED VARIABLE WL :INTEGER RANGE 0 TO 9  := 0;-- number of CKIn        SHARED VARIABLE DataOut_temp : std_logic_vector(HiDataBit downto 0)                                                     := (others => 'Z');        -- Functionality result (zero delay) variables        SIGNAL DataOut_zd : std_logic_vector(HiDataBit downto 0)                                                     := (others => 'Z');        SIGNAL UDQSOut_zd     : std_logic := 'Z';        SIGNAL UDQSNegOut_zd  : std_logic := 'Z';        SIGNAL LDQSOut_zd     : std_logic := 'Z';        SIGNAL LDQSNegOut_zd  : std_logic := 'Z';        SIGNAL command_update : std_logic := '0';        SIGNAL mrs_finished   : bool_array_type;        SIGNAL aref_finished  : bool_array_type;        SIGNAL write_finished : bool_array_type;        SIGNAL read_finished  : bool_array_type;        SIGNAL wap_finished   : bool_array_type;        SIGNAL rap_finished   : bool_array_type;        SIGNAL prech_finished : bool_array_type;        SIGNAL read_dqs_enabled_0   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_0  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_1   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_1  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_2   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_2  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_3   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_3  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_4   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_4  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_5   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_5  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_6   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_6  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_dqs_enabled_7   : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL read_data_enabled_7  : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_0 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_1 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_2 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_3 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_4 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_5 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_6 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL write_data_enabled_7 : std_logic_vector(MaxBank-1 downto 0)                                                               := "00000000";        SIGNAL w_burst_n_interrupted_0: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL w_burst_n_interrupted_1: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL w_burst_n_interrupted_2: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL w_burst_n_interrupted_3: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL w_burst_n_interrupted_4: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL w_burst_n_interrupted_5: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL r_burst_n_interrupted_0: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL r_burst_n_interrupted_1: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL r_burst_n_interrupted_2: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL r_burst_n_interrupted_3: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL r_burst_n_interrupted_4: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL r_burst_n_interrupted_5: std_logic_vector(MaxBank-1 downto 0)                                                               := "11111111";        SIGNAL w_burst_n_interrupted_g : std_logic := '1';        SIGNAL r_burst_n_interrupted_g : std_logic := '1';        SIGNAL read_dqs_enabled_g   : std_logic := '0';        SIGNAL read_data_enabled_g  : std_logic := '0';        SIGNAL write_data_enabled_g : std_logic := '0';        SHARED VARIABLE read_finished_interrupted : std_logic := '0';        -- ---------------------------------------------------------------------        -- DYNAMIC MEMORY ALLOCATION VARIABLES & PROCEDURES        -- ---------------------------------------------------------------------        -- ---------------------------------------------------------------------        -- Data types required to implement link list structure        -- ---------------------------------------------------------------------        TYPE mem_data_t;        TYPE mem_data_pointer_t IS ACCESS mem_data_t;        TYPE mem_data_t IS RECORD            key_address  :  INTEGER;            val_data     :  INTEGER;            successor    :  mem_data_pointer_t;        END RECORD;        -- ---------------------------------------------------------------------        -- Array of linked lists.        -- Support memory region partitioning for faster access.        -- ---------------------------------------------------------------------        TYPE mem_data_pointer_array_t IS            ARRAY(NATURAL RANGE <>) OF mem_data_pointer_t;        -- ---------------------------------------------------------------------        -- Create linked listed        -- ---------------------------------------------------------------------        PROCEDURE create_list(            key_address  :  IN INTEGER;            val_data     :  IN INTEGER;            root         :  INOUT mem_data_pointer_t) IS        BEGIN            root := NEW mem_data_t;            root.successor := NULL;            root.key_address := key_address;            root.val_data := val_data;        END PROCEDURE create_list;        -- --------------------------------------------------------------------        -- Iterate through linked listed comapring key values        -- Stop when key value greater or equal        -- --------------------------------------------------------------------        PROCEDURE position_list(            key_address  :  IN INTEGER;            root         :  INOUT mem_data_pointer_t;            found        :  INOUT mem_data_pointer_t;            prev         :  INOUT mem_data_pointer_t) IS        BEGIN            found := root;            prev := NULL;            WHILE ((found /= NULL) AND (found.key_address < key_address)) LOOP                prev := found;                found := found.successor;            END LOOP;        END PROCEDURE position_list;        -- -------------------------------------------------------------------        -- Add new element to a linked list        -- -------------------------------------------------------------------        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 := MaxBank-1; -- 8 list, 1 for each bank

⌨️ 快捷键说明

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