3.6 库和程序包
3.6.1 库
1.库的定义
库是经编译后的数据的集合,它存放集合定义、实体定义、结构体定义和配置定义等。
2.库的使用
在VHDL语言中,库的说明语句总是放在实体单元前面,而且库语言一般必须与USE语言同用。
库(LIBRARY)的语句格式如下。
LIBRARY库名;
这一语句相当于为其后的设计实体打开了以此库名所命名的库,以便设计实体可以利用其中的程序包。
例:LIBRARY IEEE; --打开IEEE库
USE语句指明库中的程序包,USE语句的使用有两种常用格式:
USE库名.程序包名.项目名;
USE库名.程序包名.ALL;
第一语句格式的作用是,向本设计实体开放指定库中的特定程序包内所选定的项目;第二语句格式的作用是,向本设计实体开放指定库中的特定程序包内所有的内容。
库语言一般必须与USE语言同用,一旦说明了库和程序包,整个设计实体都可进入访问或调用。例如:
3.库的分类
VHDL程序设计中常用的库有四种。
(1)IEEE库。IEEE库是VHDL设计中最为常见的库,它包含有IEEE标准的程序包和其他一些支持工业标准的程序包。
(2)STD库。VHDL语言标准定义了两个标准程序包,即STANDARD和TEXTIO程序包,它们都被收入STD库中。
(3)WORK库。WORK库是用户的VHDL设计的现行工作库,用于存放用户设计和定义的一些设计单元和程序包。因此,它自动满足VHDL语言标准,在实际调用中,不必以显式预先说明。
(4)VITAL库。VITAL库是各FPGA/CPLD生产厂商提供的面向ASIC的逻辑门库。使用VITAL库,可以提高VHDL门级时序模拟的精度,因而只在VHDL仿真器中使用。
(5)用户自定义的库。
3.6.2 程序包
为了使已定义的常数、数据类型、元件调用说明及子程序能被更多的VHDL设计实体方便地访问和共享,可以将它们收集在一个VHDL程序包(package)中。多个程序包可以并入一个VHDL库中,使之适用于更一般的访问和调用范围。这一点对于大系统开发、多个或多组开发人员并行工作显得尤为重要。
1.预定义程序包
常用的预定义程序包有以下四种。
(1)STD_LOGIC_1164程序包。它是IEEE库中最常用的程序包,是IEEE的标准程序包。其中包含了一些数据类型、子类型和函数的定义,这些定义将VHDL扩展为一个能描述多值逻辑(即除具有“0”和“1”以外还有其他的逻辑量,如高阻态“Z”、不定态“X”等)的硬件描述语言,很好地满足了实际数字系统的设计需求。
(2)STD_LOGIC_ARITH程序包。它预先编译在IEEE库中,是Synopsys公司的程序包。此程序包在STD_LOGIC_1164程序包的基础上扩展了三个数据类型,即UNSIGNED、SIGNED和SMALL_INT,并为其定义了相关的算术运算符和转换函数。
(3)STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包。这两个程序包都是Synopsys公司的程序包,都预先编译在IEEE库中。这些程序包重载了可用于INTEGER型及STD_LOGIC和STD_LOGIC_VECTOR型混合运算的运算符,并定义了一个由STD_LOGIC_VECTOR型到INTEGER型的转换函数。
(4)STANDARD和TEXTIO程序包。这两个程序包是STD库中的预编译程序包。STANDARD程序包中定义了许多基本的数据类型、子类型和函数等。
程序包的具体内容如下。
常数说明:主要用于预定义系统的宽度,如数据总线通道的宽度。
数据类型说明:主要用于说明在整个设计中通用的数据类型,例如通用的地址总线、数据类型的定义等。
元件定义:主要规定在VHDL设计中参与元件例化的文件(已完成的设计实体)对外的接口界面。
子程序说明:用于说明在设计中任一处可调用的子程序。
2.自定义程序包
自定义程序包的一般语句结构如下。
3.程序包首
程序包首的说明部分可收集多个不同的VHDL设计所需的公共信息,其中包括数据类型说明、信号说明、子程序说明及元件说明等。
在程序包结构中,程序包体并非是必须要有的,程序包首可以独立定义和使用。
程序包首的主要定义程序如下。
4.程序包体
程序包体用于定义在程序包首已定义的子程序的子程序体。程序包体说明部分的组成可以是USE语句(允许对其他程序包的调用)、子程序定义、子程序体、数据类型说明、子类型说明和常数说明等。没有子程序说明的程序包体可以省去。
程序包常用来封装属于多个设计单元分享的信息,程序包定义的信号、变量不能在设计实体之间共享。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。