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

📄 mt48lc16m16a2.vhd

📁 用VHDL语言实现的ARM处理器的标准内核的源代码程序
💻 VHD
📖 第 1 页 / 共 5 页
字号:
--*****************************************************************************---- Micron Semiconductor Products, Inc.---- Copyright 1997, Micron Semiconductor Products, Inc.-- All rights reserved.----*****************************************************************************LIBRARY 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);    procedure HREAD(L:inout line; VALUE:out std_logic_vector);    procedure HREAD(L:inout line; VALUE: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;  procedure CHAR2QUADBITS(C: character; RESULT: out bit_vector(3 downto 0);            GOOD: out boolean; ISSUE_ERROR: in boolean) is  begin    case C is    when '0' => RESULT :=  x"0"; GOOD := true;    when '1' => RESULT :=  x"1"; GOOD := true;    when '2' => RESULT :=  X"2"; GOOD := true;    when '3' => RESULT :=  X"3"; GOOD := true;    when '4' => RESULT :=  X"4"; GOOD := true;    when '5' => RESULT :=  X"5"; GOOD := true;    when '6' => RESULT :=  X"6"; GOOD := true;    when '7' => RESULT :=  X"7"; GOOD := true;    when '8' => RESULT :=  X"8"; GOOD := true;    when '9' => RESULT :=  X"9"; GOOD := true;    when 'A' => RESULT :=  X"A"; GOOD := true;    when 'B' => RESULT :=  X"B"; GOOD := true;    when 'C' => RESULT :=  X"C"; GOOD := true;    when 'D' => RESULT :=  X"D"; GOOD := true;    when 'E' => RESULT :=  X"E"; GOOD := true;    when 'F' => RESULT :=  X"F"; GOOD := true;    when 'a' => RESULT :=  X"A"; GOOD := true;    when 'b' => RESULT :=  X"B"; GOOD := true;    when 'c' => RESULT :=  X"C"; GOOD := true;    when 'd' => RESULT :=  X"D"; GOOD := true;    when 'e' => RESULT :=  X"E"; GOOD := true;    when 'f' => RESULT :=  X"F"; GOOD := true;    when others =>      if ISSUE_ERROR then        assert false report 	  "HREAD Error: Read a '" & C & "', expected a Hex character (0-F).";      end if;      GOOD := false;    end case;  end;  procedure HREAD(L:inout line; VALUE:out bit_vector)  is                variable OK: boolean;                variable C:  character;                constant NE: integer := VALUE'length/4;	--'                variable BV: bit_vector(0 to VALUE'length-1);	--'                variable S:  string(1 to NE-1);  begin    if VALUE'length mod 4 /= 0 then	--'      assert false report        "HREAD Error: Trying to read vector " &        "with an odd (non multiple of 4) length";      return;    end if;     loop                                    -- skip white space      read(L,C);      exit when ((C /= ' ') and (C /= CR) and (C /= HT));    end loop;     CHAR2QUADBITS(C, BV(0 to 3), OK, false);    if not OK then      return;    end if;     read(L, S, OK);--    if not OK then--      assert false report "HREAD Error: Failed to read the STRING";--      return;--    end if;     for I in 1 to NE-1 loop      CHAR2QUADBITS(S(I), BV(4*I to 4*I+3), OK, false);      if not OK then        return;      end if;    end loop;    VALUE := BV;  end HREAD;  procedure HREAD(L:inout line; VALUE:out std_ulogic_vector) is    variable TMP: bit_vector(VALUE'length-1 downto 0);	--'  begin    HREAD(L, TMP);    VALUE := TO_X01(TMP);  end HREAD;  procedure HREAD(L:inout line; VALUE:out std_logic_vector) is    variable TMP: std_ulogic_vector(VALUE'length-1 downto 0);	--'  begin    HREAD(L, TMP);    VALUE := std_logic_vector(TMP);  end HREAD;  function ishex(c:character) return boolean is  variable tmp : bit_vector(3 downto 0);  variable OK : boolean;  begin    CHAR2QUADBITS(C, tmp, OK, false);    return OK;  end ishex;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;    USE IEEE.STD_LOGIC_ARITH.ALL;

⌨️ 快捷键说明

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