首页 理论教育 VHDL设计常见的IEEE库和程序包

VHDL设计常见的IEEE库和程序包

时间:2023-06-29 理论教育 版权反馈
【摘要】:IEEE库IEEE库是VHDL设计中最常见的库,它包含IEEE标准和其他一些支持工业标准的程序包。其中,STD_LOGIC_1164是最重要最常用的程序包。VITAL程序包已经成为IEEE标准,在当前的VHDL仿真器库中,VITAL库中的程序包都已经并到IEEE库中。例4.13.程序包为了使已定义的常数、数据类型、元件调用说明以及子程序能被更多的VHDL设计实体方便地访问和共享,可将它们收集在一个VHDL程序包中。程序包的内容主要由以下4种基本结构组成。

VHDL设计常见的IEEE库和程序包

在利用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_REAL程序包:数学实数包。

⑧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语句。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈