?? 220model.vhd
字號:
---------------------------------------------------------------------------
-- This VHDL file was developed by Altera Corporation. It may be
-- freely copied and/or distributed at no cost. Any persons using this
-- file for any purpose do so at their own risk, and are responsible for
-- the results of such use. Altera Corporation does not guarantee that
-- this file is complete, correct, or fit for any particular purpose.
-- NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. This notice must
-- accompany any copy of this file.
--------------------------------------------------------------------------
--
-- Quartus II 4.0 Build 190 1/28/2004
--
--------------------------------------------------------------------------
-- LPM Synthesizable Models (Support string type generic)
-- These models are based on LPM version 220 (EIA-IS103 October 1998).
--------------------------------------------------------------------------
--
-------------------------------------------------------------------------------
-- Assumptions:
--
-- 1. All ports and signal types are std_logic or std_logic_vector
-- from IEEE 1164 package.
-- 2. Synopsys std_logic_arith, std_logic_unsigned, and std_logic_signed
-- package are assumed to be accessible from IEEE library.
-- 3. lpm_component_package must be accessible from library work.
-- 4. The default value of LPM_SVALUE, LPM_AVALUE, LPM_MODULUS, LPM_HINT,
-- LPM_NUMWORDS, LPM_STRENGTH, LPM_DIRECTION, and LPM_PVALUE is
-- string "UNUSED".
-------------------------------------------------------------------------------
---START_PACKAGE_HEADER--------------------------------------------------------
--
-- Package Name : LPM_DEVICE_FAMILIES
--
-- Description : Common Altera device families comparison
--
---END_PACKAGE_HEADER----------------------------------------------------------
-- BEGINING OF PACKAGE
Library ieee;
use ieee.std_logic_1164.all;
-- PACKAGE DECLARATION
package LPM_DEVICE_FAMILIES is
-- FUNCTION DECLARATION
function IS_VALID_FAMILY (device: in string) return boolean;
function IS_FAMILY_APEX20K (device : in string) return boolean;
function IS_FAMILY_APEX20KE (device : in string) return boolean;
function IS_FAMILY_APEXII (device : in string) return boolean;
function IS_FAMILY_ACEX2K (device : in string) return boolean;
function IS_FAMILY_STRATIXGX (device : in string) return boolean;
function IS_FAMILY_STRATIX (device : in string) return boolean;
function IS_FAMILY_MERCURY (device : in string) return boolean;
function IS_FAMILY_MAX (device : in string) return boolean;
function IS_FAMILY_FLEX6000 (device : in string) return boolean;
function IS_FAMILY_FLEX8000 (device : in string) return boolean;
function IS_FAMILY_FLEX10K (device : in string) return boolean;
function IS_FAMILY_FLEX10KE (device : in string) return boolean;
function IS_FAMILY_STRATIXII (device : in string) return boolean;
function IS_FAMILY_MAXII (device : in string) return boolean;
end LPM_DEVICE_FAMILIES;
package body LPM_DEVICE_FAMILIES is
function IS_VALID_FAMILY (device : in string) return boolean is
variable is_valid : boolean := false;
begin
if (IS_FAMILY_APEX20K(device) or IS_FAMILY_APEX20KE(device) or
IS_FAMILY_APEXII(device) or IS_FAMILY_ACEX2K(device) or
IS_FAMILY_STRATIXGX(device) or IS_FAMILY_STRATIX(device) or
IS_FAMILY_MERCURY(device) or IS_FAMILY_MAX(device) or
IS_FAMILY_FLEX6000(device) or IS_FAMILY_FLEX8000(device) or
IS_FAMILY_FLEX10K(device) or IS_FAMILY_FLEX10KE(device) or
IS_FAMILY_STRATIXII(device) or IS_FAMILY_MAXII(device))
then
is_valid := true;
end if;
return is_valid;
end IS_VALID_FAMILY;
function IS_FAMILY_APEX20K (device : in string) return boolean is
variable is_20k : boolean := false;
begin
if (device = "APEX20K")
then
is_20k := true;
end if;
return is_20k;
end IS_FAMILY_APEX20K;
function IS_FAMILY_APEX20KE (device : in string) return boolean is
variable is_20ke : boolean := false;
begin
if ((device = "APEX20KE") or (device = "APEX20KC") or (device = "EXCALIBUR_ARM") or
(device = "EXCALIBUR_MIPS"))
then
is_20ke := true;
end if;
return is_20ke;
end IS_FAMILY_APEX20KE;
function IS_FAMILY_APEXII (device : in string) return boolean is
variable is_apexii : boolean := false;
begin
if ((device = "APEX II") or (device = "APEXII"))
then
is_apexii := true;
end if;
return is_apexii;
end IS_FAMILY_APEXII;
function IS_FAMILY_ACEX2K (device : in string) return boolean is
variable is_acex2k : boolean := false;
begin
if ((device = "CYCLONE") or (device = "Cyclone"))
then
is_acex2k := true;
end if;
return is_acex2k;
end IS_FAMILY_ACEX2K;
function IS_FAMILY_STRATIXGX (device : in string) return boolean is
variable is_stratixgx : boolean := false;
begin
if ((device = "STRATIX-GX") or (device = "STRATIX GX") or (device = "Stratix GX"))
then
is_stratixgx := true;
end if;
return is_stratixgx;
end IS_FAMILY_STRATIXGX;
function IS_FAMILY_STRATIX (device : in string) return boolean is
variable is_stratix : boolean := false;
begin
if ((device = "STRATIX") or (device = "Stratix"))
then
is_stratix := true;
end if;
return is_stratix;
end IS_FAMILY_STRATIX;
function IS_FAMILY_MERCURY (device : in string) return boolean is
variable is_mercury : boolean := false;
begin
if ((device = "MERCURY") or (device = "Mercury"))
then
is_mercury := true;
end if;
return is_mercury;
end IS_FAMILY_MERCURY;
function IS_FAMILY_MAX (device : in string) return boolean is
variable is_max : boolean := false;
begin
if ((device = "MAX5000") or (device = "MAX3000A") or (device = "MAX7000") or
(device = "MAX7000A") or (device = "MAX7000AE") or (device = "MAX7000E") or
(device = "MAX7000S") or (device = "MAX7000B") or (device = "MAX9000"))
then
is_max := true;
end if;
return is_max;
end IS_FAMILY_MAX;
function IS_FAMILY_FLEX6000 (device : in string) return boolean is
variable is_flex6k : boolean := false;
begin
if (device = "FLEX6000")
then
is_flex6k := true;
end if;
return is_flex6k;
end IS_FAMILY_FLEX6000;
function IS_FAMILY_FLEX8000 (device : in string) return boolean is
variable is_flex8k : boolean := false;
begin
if (device = "FLEX8000")
then
is_flex8k := true;
end if;
return is_flex8k;
end IS_FAMILY_FLEX8000;
function IS_FAMILY_FLEX10K (device : in string) return boolean is
variable is_flex10k : boolean := false;
begin
if ((device = "FLEX10K") or (device = "FLEX10KA"))
then
is_flex10k := true;
end if;
return is_flex10k;
end IS_FAMILY_FLEX10K;
function IS_FAMILY_FLEX10KE (device : in string) return boolean is
variable is_flex10ke : boolean := false;
begin
if ((device = "FLEX10KE") or (device = "FLEX 10KE") or
(device = "ACEX1K") or (device = "ACEX 1K"))
then
is_flex10ke := true;
end if;
return is_flex10ke;
end IS_FAMILY_FLEX10KE;
function IS_FAMILY_STRATIXII (device : in string) return boolean is
variable is_stratixii : boolean := false;
begin
if (device = "Stratix II")
then
is_stratixii := true;
end if;
return is_stratixii;
end IS_FAMILY_STRATIXII;
function IS_FAMILY_MAXII (device : in string) return boolean is
variable is_maxii : boolean := false;
begin
if ((device = "MAX II") or (device = "max ii") or
(device = "MAXII") or (device = "maxii"))
then
is_maxii := true;
end if;
return is_maxii;
end IS_FAMILY_MAXII;
end LPM_DEVICE_FAMILIES;
-- END OF PACKAGE
---START_PACKAGE_HEADER-----------------------------------------------------
--
-- Package Name : LPM_COMMON_CONVERSION
--
-- Description : Common conversion functions
--
---END_PACKAGE_HEADER--------------------------------------------------------
-- BEGINING OF PACKAGE
Library ieee;
use ieee.std_logic_1164.all;
use std.textio.all;
-- PACKAGE DECLARATION
package LPM_COMMON_CONVERSION is
-- FUNCTION DECLARATION
function STR_TO_INT (str : string) return integer;
function INT_TO_STR (value : in integer) return string;
function HEX_STR_TO_INT (str : in string) return integer;
procedure SHRINK_LINE (str_line : inout line; pos : in integer);
end LPM_COMMON_CONVERSION;
package body LPM_COMMON_CONVERSION is
function STR_TO_INT ( str : string ) return integer is
variable len : integer := str'length;
variable ivalue : integer := 0;
variable digit : integer;
begin
for i in 1 to len loop
case str(i) is
when '0' =>
digit := 0;
when '1' =>
digit := 1;
when '2' =>
digit := 2;
when '3' =>
digit := 3;
when '4' =>
digit := 4;
when '5' =>
digit := 5;
when '6' =>
digit := 6;
when '7' =>
digit := 7;
when '8' =>
digit := 8;
when '9' =>
digit := 9;
when others =>
ASSERT FALSE
REPORT "Illegal Character "& str(i) & "in string parameter! "
SEVERITY ERROR;
end case;
ivalue := ivalue * 10 + digit;
end loop;
return ivalue;
end STR_TO_INT;
-- This function converts an integer to a string
function INT_TO_STR (value : in integer) return string is
variable ivalue : integer := 0;
variable index : integer := 0;
variable digit : integer := 0;
variable line_no: string(8 downto 1) := " ";
begin
ivalue := value;
index := 1;
while (ivalue > 0) loop
digit := ivalue MOD 10;
ivalue := ivalue/10;
case digit is
when 0 => line_no(index) := '0';
when 1 => line_no(index) := '1';
when 2 => line_no(index) := '2';
when 3 => line_no(index) := '3';
when 4 => line_no(index) := '4';
when 5 => line_no(index) := '5';
when 6 => line_no(index) := '6';
when 7 => line_no(index) := '7';
when 8 => line_no(index) := '8';
when 9 => line_no(index) := '9';
when others =>
ASSERT FALSE
REPORT "Illegal number!"
SEVERITY ERROR;
end case;
index := index + 1;
end loop;
return line_no;
end INT_TO_STR;
-- This function converts a hexadecimal number to an integer
function HEX_STR_TO_INT (str : in string) return integer is
variable len : integer := str'length;
variable ivalue : integer := 0;
variable digit : integer := 0;
begin
for i in len downto 1 loop
case str(i) is
when '0' => digit := 0;
when '1' => digit := 1;
when '2' => digit := 2;
when '3' => digit := 3;
when '4' => digit := 4;
when '5' => digit := 5;
when '6' => digit := 6;
when '7' => digit := 7;
when '8' => digit := 8;
when '9' => digit := 9;
when 'A' => digit := 10;
when 'a' => digit := 10;
when 'B' => digit := 11;
when 'b' => digit := 11;
when 'C' => digit := 12;
when 'c' => digit := 12;
when 'D' => digit := 13;
when 'd' => digit := 13;
when 'E' => digit := 14;
when 'e' => digit := 14;
when 'F' => digit := 15;
when 'f' => digit := 15;
when others =>
ASSERT FALSE
REPORT "Illegal character "& str(i) & "in Intel Hex File! "
SEVERITY ERROR;
end case;
ivalue := ivalue * 16 + digit;
end loop;
return ivalue;
end HEX_STR_TO_INT;
-- This procedure "cuts" the str_line into desired length
procedure SHRINK_LINE (str_line : inout line; pos : in integer) is
subtype nstring is string(1 to pos);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -