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

📄 mt48lc16m16a2.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 5 页
字号:
--*****************************************************************************---- Micron Semiconductor Products, Inc.---- Copyright 1997, Micron Semiconductor Products, Inc.-- All rights reserved.----*****************************************************************************-- pragma translate_offlibrary ieee;use ieee.std_logic_1164.ALL;use std.textio.all;PACKAGE mti_pkg IS    FUNCTION  To_StdLogic (s : BIT) RETURN STD_LOGIC;    FUNCTION  TO_INTEGER (input : STD_LOGIC) RETURN INTEGER;    FUNCTION  TO_INTEGER (input : BIT_VECTOR) RETURN INTEGER;    FUNCTION  TO_INTEGER (input : STD_LOGIC_VECTOR) RETURN INTEGER;    PROCEDURE TO_BITVECTOR  (VARIABLE input : IN INTEGER; VARIABLE output : OUT BIT_VECTOR);END mti_pkg;PACKAGE BODY mti_pkg IS    -- Convert BIT to STD_LOGIC    FUNCTION To_StdLogic (s : BIT) RETURN STD_LOGIC IS    BEGIN            CASE s IS                WHEN '0' => RETURN ('0');                WHEN '1' => RETURN ('1');                WHEN OTHERS => RETURN ('0');            END CASE;    END;    -- Convert STD_LOGIC to INTEGER    FUNCTION  TO_INTEGER (input : STD_LOGIC) RETURN INTEGER IS    VARIABLE result : INTEGER := 0;    VARIABLE weight : INTEGER := 1;    BEGIN        IF input = '1' THEN            result := weight;        ELSE            result := 0;                                            -- if unknowns, default to logic 0        END IF;        RETURN result;    END TO_INTEGER;    -- Convert BIT_VECTOR to INTEGER    FUNCTION  TO_INTEGER (input : BIT_VECTOR) RETURN INTEGER IS    VARIABLE result : INTEGER := 0;    VARIABLE weight : INTEGER := 1;    BEGIN        FOR i IN input'LOW TO input'HIGH LOOP            IF input(i) = '1' THEN                result := result + weight;            ELSE                result := result + 0;                               -- if unknowns, default to logic 0            END IF;            weight := weight * 2;        END LOOP;        RETURN result;    END TO_INTEGER;    -- Convert STD_LOGIC_VECTOR to INTEGER    FUNCTION  TO_INTEGER (input : STD_LOGIC_VECTOR) RETURN INTEGER IS    VARIABLE result : INTEGER := 0;    VARIABLE weight : INTEGER := 1;    BEGIN        FOR i IN input'LOW TO input'HIGH LOOP            IF input(i) = '1' THEN                result := result + weight;            ELSE                result := result + 0;                               -- if unknowns, default to logic 0            END IF;            weight := weight * 2;        END LOOP;        RETURN result;    END TO_INTEGER;    -- Conver INTEGER to BIT_VECTOR    PROCEDURE  TO_BITVECTOR (VARIABLE input : IN INTEGER; VARIABLE output : OUT BIT_VECTOR) IS    VARIABLE work,offset,outputlen,j : INTEGER := 0;    BEGIN        --length of vector        IF output'LENGTH > 32 THEN		--'            outputlen := 32;            offset := output'LENGTH - 32;		--'            IF input >= 0 THEN                FOR i IN offset-1 DOWNTO 0 LOOP                    output(output'HIGH - i) := '0';		--'                END LOOP;            ELSE                FOR i IN offset-1 DOWNTO 0 LOOP                    output(output'HIGH - i) := '1';		--'		                END LOOP;            END IF;        ELSE            outputlen := output'LENGTH; 		--'        END IF;        --positive value        IF (input >= 0) THEN            work := input;            j := outputlen - 1;            FOR i IN 1 to 32 LOOP                IF j >= 0 then                    IF (work MOD 2) = 0 THEN                         output(output'HIGH-j-offset) := '0'; 		--'                    ELSE                        output(output'HIGH-j-offset) := '1'; 		--'                    END IF;                END IF;                work := work / 2;                j := j - 1;            END LOOP;            IF outputlen = 32 THEN                output(output'HIGH) := '0'; 		--'            END IF;        --negative value        ELSE            work := (-input) - 1;            j := outputlen - 1;            FOR i IN 1 TO 32 LOOP                IF j>= 0 THEN                    IF (work MOD 2) = 0 THEN                         output(output'HIGH-j-offset) := '1'; 		--'                    ELSE                        output(output'HIGH-j-offset) := '0'; 		--'                    END IF;                END IF;                    work := work / 2;                j := j - 1;            END LOOP;            IF outputlen = 32 THEN                output(output'HIGH) := '1'; 		--'            END IF;        END IF;    END TO_BITVECTOR;END mti_pkg;   ---------------------------------------------------------------------------------------------     File Name: MT48LC16M16A2.VHD--       Version: 0.0g--          Date: June 29th, 2000--         Model: Behavioral--     Simulator: Model Technology (PC version 5.3 PE)----  Dependencies: None----        Author: Son P. Huynh--         Email: sphuynh@micron.com--         Phone: (208) 368-3825--       Company: Micron Technology, Inc.--   Part Number: MT48LC16M16A2 (4Mb x 16 x 4 Banks)----   Description: Micron 256Mb SDRAM----    Limitation: - Doesn't check for 4096-cycle refresh 		--'----          Note: - Set simulator resolution to "ps" accuracy----    Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY --                WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY --                IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR--                A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.----                Copyright (c) 1998 Micron Semiconductor Products, Inc.--                All rights researved----  Rev   Author          Phone         Date        Changes--  ----  ----------------------------  ----------  ---------------------------------------  0.0g  Son Huynh       208-368-3825  06/29/2000  Add Load/Dump memory array--        Micron Technology Inc.                    Modify tWR + tRAS timing check----  0.0f  Son Huynh       208-368-3825  07/08/1999  Fix tWR = 1 Clk + 7.5 ns (Auto)--        Micron Technology Inc.                    Fix tWR = 15 ns (Manual)--                                                  Fix tRP (Autoprecharge to AutoRefresh)----  0.0c  Son P. Huynh    208-368-3825  04/08/1999  Fix tWR + tRP in Write with AP--        Micron Technology Inc.                    Fix tRC check in Load Mode Register----  0.0b  Son P. Huynh    208-368-3825  01/06/1998  Derive from 64Mb SDRAM model--        Micron Technology Inc.-------------------------------------------------------------------------------------------LIBRARY STD;    USE STD.TEXTIO.ALL;LIBRARY IEEE;    USE IEEE.STD_LOGIC_1164.ALL;LIBRARY WORK;    USE WORK.MTI_PKG.ALL;    use std.textio.all;library grlib;use grlib.stdlib.all;library gaisler;use gaisler.sim.all;ENTITY mt48lc16m16a2 IS    GENERIC (        -- Timing Parameters for -75 (PC133) and CAS Latency = 2        tAC       : TIME    :=  6.0 ns;        tHZ       : TIME    :=  7.0 ns;        tOH       : TIME    :=  2.7 ns;        tMRD      : INTEGER :=  2;          -- 2 Clk Cycles        tRAS      : TIME    := 44.0 ns;        tRC       : TIME    := 66.0 ns;        tRCD      : TIME    := 20.0 ns;        tRP       : TIME    := 20.0 ns;        tRRD      : TIME    := 15.0 ns;        tWRa      : TIME    :=  7.5 ns;     -- A2 Version - Auto precharge mode only (1 Clk + 7.5 ns)        tWRp      : TIME    := 15.0 ns;     -- A2 Version - Precharge mode only (15 ns)        tAH       : TIME    :=  0.8 ns;        tAS       : TIME    :=  1.5 ns;        tCH       : TIME    :=  2.5 ns;        tCL       : TIME    :=  2.5 ns;        tCK       : TIME    := 10.0 ns;        tDH       : TIME    :=  0.8 ns;        tDS       : TIME    :=  1.5 ns;        tCKH      : TIME    :=  0.8 ns;        tCKS      : TIME    :=  1.5 ns;        tCMH      : TIME    :=  0.8 ns;        tCMS      : TIME    :=  1.5 ns;        addr_bits : INTEGER := 13;        data_bits : INTEGER := 16;        col_bits  : INTEGER :=  9;        index     : INTEGER :=  0;	fname     : string := "sdram.srec"	-- File to read from    );    PORT (        Dq    : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');        Addr  : IN    STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');        Ba    : IN    STD_LOGIC_VECTOR := "00";        Clk   : IN    STD_LOGIC := '0';        Cke   : IN    STD_LOGIC := '1';        Cs_n  : IN    STD_LOGIC := '1';        Ras_n : IN    STD_LOGIC := '1';        Cas_n : IN    STD_LOGIC := '1';        We_n  : IN    STD_LOGIC := '1';        Dqm   : IN    STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"    );END mt48lc16m16a2;ARCHITECTURE behave OF mt48lc16m16a2 IS    TYPE   State       IS (ACT, A_REF, BST, LMR, NOP, PRECH, READ, READ_A, WRITE, WRITE_A, LOAD_FILE, DUMP_FILE);    TYPE   Array4xI    IS ARRAY (3 DOWNTO 0) OF INTEGER;    TYPE   Array4xT    IS ARRAY (3 DOWNTO 0) OF TIME;    TYPE   Array4xB    IS ARRAY (3 DOWNTO 0) OF BIT;    TYPE   Array4x2BV  IS ARRAY (3 DOWNTO 0) OF BIT_VECTOR (1 DOWNTO 0);    TYPE   Array4xCBV  IS ARRAY (4 DOWNTO 0) OF BIT_VECTOR (Col_bits - 1 DOWNTO 0);    TYPE   Array_state IS ARRAY (4 DOWNTO 0) OF State;    SIGNAL Operation : State := NOP;    SIGNAL Mode_reg : BIT_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');    SIGNAL Active_enable, Aref_enable, Burst_term : BIT := '0';    SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : BIT := '0';    SIGNAL Burst_length_1, Burst_length_2, Burst_length_4, Burst_length_8 : BIT := '0';    SIGNAL Cas_latency_2, Cas_latency_3 : BIT := '0';    SIGNAL Ras_in, Cas_in, We_in : BIT := '0';    SIGNAL Write_burst_mode : BIT := '0';    SIGNAL RAS_clk, Sys_clk, CkeZ : BIT := '0';    -- Checking internal wires    SIGNAL Pre_chk : BIT_VECTOR (3 DOWNTO 0) := "0000";    SIGNAL Act_chk : BIT_VECTOR (3 DOWNTO 0) := "0000";    SIGNAL Dq_in_chk, Dq_out_chk : BIT := '0';    SIGNAL Bank_chk : BIT_VECTOR (1 DOWNTO 0) := "00";    SIGNAL Row_chk : BIT_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');    SIGNAL Col_chk : BIT_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');BEGIN    -- CS# Decode    WITH Cs_n SELECT        Cas_in <= TO_BIT (Cas_n, '1') WHEN '0',                  '1' WHEN '1',                  '1' WHEN OTHERS;    WITH Cs_n SELECT        Ras_in <= TO_BIT (Ras_n, '1') WHEN '0',                  '1' WHEN '1',                  '1' WHEN OTHERS;    WITH Cs_n SELECT        We_in  <= TO_BIT (We_n,  '1') WHEN '0',                  '1' WHEN '1',                  '1' WHEN OTHERS;        -- Commands Decode

⌨️ 快捷键说明

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