VHDL库
用于提高设计效率,使设计遵循某些同意的语言标准或数据格式,将一些有用的信息汇集在一个或几个标准库中,以供调用
库中主要包含,程序包,数据集合,元件
使用库必须在设计是提前调用库语句和USE语句
library 库名
库的分类
1)设计库:STD库和WORK库
STD库包含standard和textio两个程序包
STD库定义了多种常用数据类型,如BIT_VECTOR , BIT。 STD库为所有的设计单元所共享、隐含定义、默认和“可见”。在VHDL程序设计中,以下的库语句是不必要的:
LIBRARY STD;
USE STD.STANDARD.ALL;
WORK库:用户的VHDL设计的现行工作库,存放用户设计和定义的一些设计单元和程序包
2)资源库:常规元件和标准模块存放的库
最常用的资源库为 IEEE库和VITAL库
IEEE库符合(支持)工业标准的程序包的集合
IEEE库主要包括的程序包:
STD_LOGIC_1164 、NUMERIC_BIT、NUMERIC_STD、STD_LOGIC_ARITH、STD_LOGIC_SIGNED 、STD_LOGIC_UNSIGNED
大部分基于数字系统设计的程序包都是以此程序包中设定的标准为基础
库的用法
在VHDL语言中,库的说明语句总是放在实体单元前面。
USE语句的使用有两种常用格式:
USE 库名.程序包名.项目名 ;
USE 库名.程序包名.ALL ;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
程序包(PACKAGE)
用于收集共享的数据类型、子程序或数据对象
1.程序包的组成内容
(1) 常数说明
(2) VHDL数据类型说明
(3) 元件定义
(4) 子程序
2.程序包的语句结构
程序包首
PACKAGE pac1 IS --程序包首开始
TYPE byte IS RANGE 0 TO 255; --定义数据类型byte
SUBTYPE nibble IS byte RANGE 0 TO 15; --定义子类型nibble
CONSTANT byte_ff : byte:= 255; --定义常数byte_ff
SIGNAL addend : nibble; --定义信号addend
COMPONENT byte_adder --定义元件
PORT (a, b: IN byte;
c: OUT byte;
overflow: OUT BOOLEAN);
END COMPONENT;
FUNCTION my_function (a: IN byte) Return byte; --定义函数
END pacl; --程序包首结束
如果要使用上面程序包中的所有定义,可利用USE语句按如下方式去调用这个程序包。
LIBRARY WORK;
USE WORK.pacl.ALL;
ENTITY …
ARCHITHCYURE …
…
由于WORK库是默认打开的,所以可省去LIBRARY WORK语句,只要加入相应的USE语句即可。
在现行WORK库中定义程序包并立即使用的示例
1)程序包首
PACKAGE seven IS
SUBTYPE segments is BIT_VECTOR(0 TO 6) ;
TYPE bcd IS RANGE 0 TO 9 ;
END seven ;
USE WORK.seven.ALL ; -- WORK库默认是打开的,
ENTITY decoder IS
PORT (input:in bcd; drive : out segments) ;
END decoder ;
ARCHITECTURE simple OF decoder IS
BEGIN
WITH input SELECT
drive <= B"1111110" WHEN 0 ,
B"0110000" WHEN 1 ,
B"1101101" WHEN 2 ,
B"1111001" WHEN 3 ,
B"0110011" WHEN 4 ,
B"1011011" WHEN 5 ,
B"1011111" WHEN 6 ,
B"1110000" WHEN 7 ,
B"1111111" WHEN 8 ,
B"1111011" WHEN 9 ,
B"0000000" WHEN OTHERS ;
END simple ;
2)程序包体
程序包体是在程序包首中已定义的子程序的子程序体。程序包体说明部分的组成内容可以是USE语句(允许对其它程序包的调用)、子程序定义、子程序体、数据类型说明、子类型说明和常数说明等。对于没有子程序说明的程序包体可以省去。
如果仅仅是定义数据类型或定义数据对象等内容,程序包体是不必要的,程序包首可以独立地被使用;但在程序包中若有子程序说明时,则必须有对应的程序包体。这时,子程序体必须放在程序包体中。
3.常用的预定义程序包
STD_LOGIC_1164程序包
STD_LOGIC_ARITH程序包
STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包
STANDARD和TEXTIO程序包
配置(CONFIGURATION)
每个实体可以拥有多个不同的结构体,配置主要是为设计实体指定一个结构体。
配置语句的一般格式如下:
CONFIGURATION配置名 OF 实体名IS
配置说明语句;
END配置名;
配置说明语句有多种形式,选配不包含BLOCK语句和COMPONENT语句的结构体时,可采用如下简单形式:
FOR选配结构体名
END FOR;