📄 mt48lc16m16a2.vhd
字号:
--*****************************************************************************---- 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 + -