第六章 VHDL设计共享
第六章 VHDL设计共享
主要内容 ·VHDL设计库 ·VHDL程序包 ·VHDL子程序与并行过程调用
主要内容 • VHDL设计库 • VHDL程序包 • VHDL子程序与并行过程调用
6.1HDL设计库 6,1.1库的种类 。IEEE库 IEEE标准的程序包主要有STD LOGIC1164、NUMERIC _STD和 NUMERIC_BIT3个准程序包,无其是STD LOG1C1164是最重要 的数字系统标谁程序包 部分基宇数字系统设计的程序包都 程序包中设是的棕准为基础 ·STD库 包含了两个标准程序包STANDARD和TEXTIO程序包。 ·WORK库 S的养不9度 设计单元和程序包。 ·VITAL库 VITAL程序包已经成为IEEE标准,并且已经并到IEEE库中,库中包含 有VITAL_TIMING:和VITAL PRIMITIVES两个时序程序包
6.1 VHDL设计库 6.1.1 库的种类 • IEEE库 IEEE标准的程序包主要有STD_LOGIC_1164、NUMERIC_STD和 NUMERIC_BIT 3个标准程序包,尤其是STD_LOGIC_1164是最重要 的数字系统标准程序包,大部分基于数字系统设计的程序包都是以此 程序包中设定的标准为基础的。 • STD库 包含了两个标准程序包STANDARD和TEXTIO程序包。 • WORK库 WORK库只是一个逻辑名,不存在WORK库的实名。 WORK库 是用户的VHDL设计的现行工作库,用于存放用户设计和定义的一些 设计单元和程序包。 • VITAL库 VITAL程序包已经成为IEEE标准,并且已经并到IEEE库中,库中包含 有VITAL_TIMING和VITAL_PRIMITIVES两个时序程序包
6.1 VHDL设计库(续) 61.2库的使用方法 库使用声明语句由关键词LIBRARY引导,指明所使用的库名;程 序包使前语句由关键词USE引导,指明使用库中的哪一个程序包。 程序包使用语句USE的使用将其所说明的程序包对本设计实体可 以部分开放或者全部开放,相应的也有两种使用格式: USE库名.程序包名,项目名: USE库名,程序包名.ALL: 库和程序包正确使用的示例: LIBRARY IEEE; USE IEEE.STD LOGIC 1164.ALL; USE IEEE.STD LOGIC UNSIGNED.ALL;
6.1 VHDL设计库(续) 6.1.2 库的使用方法 库使用声明语句由关键词LIBRARY引导,指明所使用的库名;程 序包使用语句由关键词USE引导,指明使用库中的哪一个程序包。 程序包使用语句USE的使用将其所说明的程序包对本设计实体可 以部分开放或者全部开放,相应的也有两种使用格式: USE 库名.程序包名.项目名; USE 库名.程序包名.ALL; 库和程序包正确使用的示例: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
6.2VHDL程序包 程序包的结构由程序包的说明部分,即程序包首,和程序包的具 体内容,即程序包体,两部分组成。一个完整的程序包中,程序包首 和程序包体是同一个名字。 PACKAGE程序包名 PACKAGE BODY程序包名IS -Type Declaration (optional) --Type Declaration (optional) Subtype Declaration (optional) --Subtype Declaration (optional) --Constant Declaration (optional) Constant Declaration (optional) --Function Declaration (optional) Signal Declaration(optional) --Procedure Declaration (optional) --Component Declaration (optional) --Function Body (optional) =-Subprogram Declaration (optional) --Procedure Body (optional) END程序包名; END程序包名: 程序包的结构中少要包含数据类型声明、子类型声明、常数声明、信号 声明、元件声明、子程序声明其中的一种。 程序包结构中,程序包体并非总是必须的,程序包首可以独立定义和使 用。但是,当程序包首中作了子程序(函数和过程)或部件等声明后,程序 包体是必须的
6.2 VHDL程序包 PACKAGE 程序包名 -- Type Declaration (optional) -- Subtype Declaration (optional) -- Constant Declaration (optional) -- Signal Declaration (optional) -- Component Declaration (optional) -- Subprogram Declaration (optional) END 程序包名; PACKAGE BODY 程序包名 IS -- Type Declaration (optional) -- Subtype Declaration (optional) -- Constant Declaration (optional) -- Function Declaration (optional) -- Procedure Declaration (optional) -- Function Body (optional) -- Procedure Body (optional) END 程序包名; 程序包的结构中少要包含数据类型声明、子类型声明、常数声明、信号 声明、元件声明、子程序声明其中的一种。 程序包结构中,程序包体并非总是必须的,程序包首可以独立定义和使 用。但是,当程序包首中作了子程序(函数和过程)或部件等声明后,程序 包体是必须的。 程序包的结构由程序包的说明部分,即程序包首,和程序包的具 体内容,即程序包体,两部分组成。一个完整的程序包中,程序包首 和程序包体是同一个名字
6.2 HDL程序包(续1) 例6.1程序包定义示例。 LIBRARY IEEE; USE IEEE.STD LOGIC 1164.ALL; USE IEEE.NUMERIC STD.ALL; PACKAGE my_pkg IS-程序包首声明 TYPE byte IS INTEGER RANGE 0 TO 255; SUBTYPE helf_byte IS byte RANGE 0 TO 15; CONSTANT byte_max:byte:=255; FUNCTION min(left,right:INTEGER)RETURN INTEGER; COMPONENT signed_adder-假定实体和结构体在WORK库中 GENERIC(data width:NATURAL:=8); PORT( IN SIGNED((data_width-1)DOWNTO0); b IN SIGNED((data_width-1)DOWNTO0); result OUT SIGNED((data_width-1)DOWNTO 0)); END COMPONENT; END my_pkg; PACKAGE BODY my pkg IS-程序包体声明 FUNCTION min(left,right:INTEGER)RETURN INTEGER IS BEGIN IF left right THEN RETURN left; ELSE RETURN right; END IF; END min; END my_pkg;
6.2 VHDL程序包(续1) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; PACKAGE my_pkg IS --程序包首声明 TYPE byte IS INTEGER RANGE 0 TO 255; SUBTYPE helf_byte IS byte RANGE 0 TO 15; CONSTANT byte_max: byte:= 255; FUNCTION min (left, right: INTEGER) RETURN INTEGER; COMPONENT signed_adder --假定实体和结构体在WORK库中 GENERIC(data_width : NATURAL := 8); PORT( a : IN SIGNED((data_width-1) DOWNTO 0); b : IN SIGNED((data_width-1) DOWNTO 0); result : OUT SIGNED ((data_width-1) DOWNTO 0)); END COMPONENT; END my_pkg; PACKAGE BODY my_pkg IS --程序包体声明 FUNCTION min (left, right: INTEGER) RETURN INTEGER IS BEGIN IF left < right THEN RETURN left; ELSE RETURN right; END IF; END min; END my_pkg; 例6.1 程序包定义示例
6.2 VHDL程序包(续2) 例6:2在设计实体前定义并立即使用的程序包示例。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE seg7 IS TYPE bcd IS INTEGER RANGE 0 TO 9; SUBTYPE segments IS STD_LOGIC_VECTOR(O TO 6); END seg7; USE WORK.seg7.ALL; ENTITY bcd_to_segments IS PORT( input:IN bcd; drive:OUT segments ) END bcd to_segments;
6.2 VHDL程序包(续2) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE seg7 IS TYPE bcd IS INTEGER RANGE 0 TO 9; SUBTYPE segments IS STD_LOGIC_VECTOR(0 TO 6); END seg7; USE WORK.seg7.ALL; ENTITY bcd_to_segments IS PORT( input: IN bcd; drive: OUT segments ); END bcd_to_segments; 例6.2 在设计实体前定义并立即使用的程序包示例
6.2 VHDL程序包(续3) 例6.2在设计实体前定义并立即使用的程序包示例。 ARCHITECTURE bev OF bcd_to_segments IS BEGIN WITH input SELECT drive <b0000001"WHEN 0 b"1001111"WHEN1, b"0010010"WHEN2, b"0000110"WHEN3 b"1001100"WHEN4 b"0010010"WHEN5, b"O010000"WHEN6 b"0001111"WHEN7, b"O000000"WHEN8, b"0001100"WHEN9 b1111111"WHEN OTHERS; END bev;
6.2 VHDL程序包(续3) ARCHITECTURE bev OF bcd_to_segments IS BEGIN WITH input SELECT drive <= b"0000001" WHEN 0, b"1001111" WHEN 1, b"0010010" WHEN 2, b"0000110" WHEN 3, b"1001100" WHEN 4, b"0010010" WHEN 5, b"0010000" WHEN 6, b"0001111" WHEN 7, b"0000000" WHEN 8, b"0001100" WHEN 9, b"1111111" WHEN OTHERS; END bev; 例6.2 在设计实体前定义并立即使用的程序包示例
6.3VDL子程序与并行过程调用 6.3.1 VHDL函数 1.函数首 函数首由函数名、参数表和返回值的数据类型三部分组成。 FUNCTION函数名(参数表)RETURN数据类型: 2,函数体 函数体是函数具有实质性内容的部分,包含一个对数据类型、常 数、变量等的局部说明,以及用以完成规定算法或转换的顺序语句部 分。 FUNCTION函数名(参数表)RETURN数据类型IS-函数体开始 说明部分 BEGIN 顺序语句: END FUNCTION函数名; 一函数体结束 3.函数调用 函数名(实参数表)
6.3 VHDL子程序与并行过程调用 6.3.1 VHDL函数 1.函数首 函数首由函数名、参数表和返回值的数据类型三部分组成。 FUNCTION 函数名(参数表) RETURN 数据类型; 2.函数体 函数体是函数具有实质性内容的部分,包含一个对数据类型、常 数、变量等的局部说明,以及用以完成规定算法或转换的顺序语句部 分。 FUNCTION 函数名(参数表) RETURN 数据类型 IS --函数体开始 说明部分 BEGIN 顺序语句; END FUNCTION 函数名; --函数体结束 3.函数调用 函数名(实参数表)
6.3.1 VHDL函数(续1) 例6.3程序包中定义函数的示例。 LIBRARY IEEE; USE IEEE.STD LOGIC 1164.ALL; -函数首声明 PACKAGE pack exam IS FUNCTION max(a,b:IN STD_LOGIC_VECTOR RETURN STD_LOGIC_VECTOR; END pack exam; -函数体声明 PACKAGE BODY pack_exam IS FUNCTION max(a,b:IN STD_LOGIC_VECTOR RETURN STD_LOGIC_VECTOR IS BEGIN IF a b THEN RETURN a;-使用了返回语句 ELSE RETURN b; END IF; END FUNCTION C; END pack_exam;
6.3.1 VHDL函数(续1) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; --函数首声明 PACKAGE pack_exam IS FUNCTION max(a, b: IN STD_LOGIC_VECTOR ) RETURN STD_LOGIC_VECTOR; END pack_exam; --函数体声明 PACKAGE BODY pack_exam IS FUNCTION max(a, b: IN STD_LOGIC_VECTOR ) RETURN STD_LOGIC_VECTOR IS BEGIN IF a > b THEN RETURN a; --使用了返回语句 ELSE RETURN b; END IF; END FUNCTION C; END pack_exam; 例6.3 程序包中定义函数的示例