在利用VHDL进行工程设计时,为了提高设计效率以及遵循某些统一的语言标准或数据格式,将一些有用的信息可以是预先定义好的数据类型、子程序等收集在一起,形成程序包,供设计实体共享和调用。若干个程序包形成库。库是一种用来存储预先完成的程序包和数据集合体的仓库。如果要在一项VHDL设计中使用某一个程序包,就必须在这项设计中预先调用包含这个程序包中库,为此必须在设计实体前使用库语句。
库(LIBRARY)的语句格式如下:
这一语句相当于为其后的设计实体打开了以此“库名”命名的库,以便设计实体利用其中的程序包,如语句“LIBRARYIEEE;”表示打开IEEE库。
1.库的种类
VHDL程序设计中常用的库有4种。
(1)IEEE库
IEEE库是VHDL设计中最常见的库,它包含IEEE标准和其他一些支持工业标准的程序包。其中,STD_LOGIC_1164是最重要最常用的程序包。IEEE库中含有的程序包及内容说明如下:
①STD_LOGIC_1164程序包:定义了STD_LOGIC、STD_LOGIC_VECTOR等常用的数据类型和函数。
②STD_LOGIC_ARITH程序包:定义了有符号和无符号数据类型及基于这些类型的算术运算。
③STD_LOGIC_UNSIGNED程序包:定义了基于STD_LOGIC和STD_LOGIC_VECTOR类型的无符号算术运算。
④STD_LOGIC_SIGNED程序包:定义了基于STD_LOGIC和STD_LOGIC_VECTOR类型的有符号算术运算。
⑤NUMERIC_STD程序包:定义了一组基于STD_LOGIC_1164中定义的类型的算术运算。
⑥NUMERIC_BIT程序包:含有用于综合的数值类型和算术函数。
⑧MATH_COMPLEX程序包:数学复数包。
⑨VITAL_TIMING程序包:时序程序包,用于提高VHDL门级模拟的精度。
⑩VITAL_PRIMITIVES程序包:基本元件程序包,用于提高VHDL门级模拟的精度。
(2)STD库
STD库定义了VHDL的多种常用数据类型,如BIT、BIT_VECTOR。STD库为所有的设计单元所共享、隐含定义、默认和“可视”。STD库中有STANDARD和TEXTIO两个程序包,它们是文件输入/输出包,在VHDL的编译和综合过程中,系统都能自动调用这两个程序包的任何内容。用户在进行电路设计时,可以不必如IEEE库那样打开该库及它的程序包。在VHDL程序设计中,以下的库语句是不必要的:
(3)WORK库
WORK库是用户设计的现行工作库,用于存放用户自己设计的工程项目。用户的成品、半成品、半成品模块、元件都放在WORK库中,也就是说,用户在项目设计中已设计成功、或正在验证、或未仿真的中间部件等都堆放在WORK工作库中。(www.xing528.com)
(4)VITAL库
使用VITAL库,可以提高VHDL门级时序模拟的精度,只在VHDL仿真器中使用。库中包含时序程序包VITAL_TIMING和VITAL_PRIMITIVES。VITAL程序包已经成为IEEE标准,在当前的VHDL仿真器库中,VITAL库中的程序包都已经并到IEEE库中。实际上,由于各FPGA/CPLD生产厂商的适配工具都能为各自的芯片生成带时序信息的VHDL门级网表,用VHDL仿真器仿真该网表可以得到精确的时序仿真结果,因此,FPGA/CPLD设计开发中,一般不需要VITAL库中的程序包。
此外,用户还可以自己定义一些库,将自己的设计内容或交流获得的程序包设计实体并入这些库中。
2.库的用法
在VHDL中,库的说明语句总是放在实体单元前面,库语言一般必须与USE语言同时使用。库语言关键词LIBRARY指明所使用的库名,USE语句指明库中的程序包。一旦说明了库和程序包,整个设计实体都可以进入访问或调用,但其作用范围仅限于所说明的设计实体。VHDL要求每项含有多个设计实体的大系统,每一个设计实体都必须有自己完整的库的说明语句和USE语句。
USE语句的使用将使所说明的程序包对本设计实体全部开放,即是“可视”的。USE语句的使用有两种常用格式:
第一语句格式的作用是,向本设计实体开放指定库中的特定程序包内所选定的项目。第二语句格式的作用是,向本设计实体开放指定库中的特定程序包内所有的内容。
例4.1
3.程序包
为了使已定义的常数、数据类型、元件调用说明以及子程序能被更多的VHDL设计实体方便地访问和共享,可将它们收集在一个VHDL程序包中。多个程序包并入一个VHDL库中,使之适用于更一般的访问和调用范围。
程序包的内容主要由以下4种基本结构组成。一个程序包中至少应包含以下结构中的一种:
①常数声明:主要用于预定义系统的宽度,如数据总线通道的宽度。
②数据类型声明:主要用于说明在整个设计中通用的数据类型,如通用的地址总线数据类型定义等。
③元件声明:主要规定在VHDL设计中参与元件例化的文件对外的接口界面。
④子程序声明:用于说明在设计中任一处可调用的子程序。
定义程序包的一般语句结构如下:
例4.2
这显然是一个程序包首,其程序包名是pacl,在其中定义了一个新的数据类型byte和一个子类型nibble,接着定义了一个数据类型为byte的常数byte_ff和一个数据类型为nibble的信号addend,还定义了一个元件和函数。由于元件和函数必须有具体的内容,所以将这些内容安排在程序包体中。如果要使用这个程序包中的所有定义,可利用USE语句按如下方式去调用这个程序包:
由于WORK库是默认打开的,所以可省去LIBRARY WORK语句,只要加入相应的USE语句。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。