首页 百科知识 程序包记录组类型

程序包记录组类型

时间:2022-10-10 百科知识 版权反馈
【摘要】:库和程序包是VHDL的设计共享资源,一些共用的、经过验证的模块放在程序包中,实现代码重用。IEEE库中包含IEEE标准的程序包,包括STD_LOGIC_1164、NUMERIC_STD_LOGIC、NUMERIC_STD以及其他一些程序包。其中STD_LOGIC_1164是最主要的程序包,大部分可用于可编程逻辑器件的程序包都以这个程序包为基础。此程序包定义的数据类型STD_LOGIC、STD_LOGIC_VECTOR以及一些逻辑运算符都是最常用的,许多EDA厂商的程序包都以它为基础。

2.4.5 库和程序包

库和程序包是VHDL的设计共享资源,一些共用的、经过验证的模块放在程序包中,实现代码重用。一个或多个程序包可以预编译到一个库中,使用起来更为方便。

1.库(Library)

库是经编译后的数据的集合,用来存放程序包定义、实体定义、结构体定义和配置定义,使设计者可以共享已经编译过的设计结果。在VHDL语言中,库的说明总是放在设计单元的最前面:

LIBRARY库名;

这样在设计单元内的语句就可以使用库中的数据。VHDL语言允许存在多个不同的库,但各个库之间是彼此独立的,不能互相嵌套。常用的库如下:

(1)STD库

逻辑名为STD的库为所有设计单元隐含定义,即“LIBRARY STD;”子句隐含存在于任意设计单元之前,而无须显式写出。

STD库包含预定义程序包STANDARD与TEXTIO。

(2)WORK库

逻辑名为WORK的库为所有设计单元隐含定义,用户不必显式写出“LIBRARY WORK;”。同时设计者所描述的VHDL语句不须作任何说明,都将存放在WORK库中。

(3)IEEE库

最常用的库是IEEE。IEEE库中包含IEEE标准的程序包,包括STD_LOGIC_1164、NUMERIC_STD_LOGIC、NUMERIC_STD以及其他一些程序包。其中STD_LOGIC_1164是最主要的程序包,大部分可用于可编程逻辑器件的程序包都以这个程序包为基础。

(4)用户定义库

用户为自身设计需要所开发的共用程序包和实体等,也可汇集在一起定义成一个库,这就是用户库,在使用时同样需要说明库名。

2.程序包(Package)

程序包说明像C语言中的include语句一样,用来罗列VHDL语言中所要用到的常数定义、数据类型、函数定义等,是一个可编译的设计单元,也是库结构中的一个层次。要使用程序包时可用USE语句说明,例如:

程序包由标题和包体两部分组成,其结构如下:

img25

标题是主设计单元,它可以独立编译并插入设计库中。包体是次级设计单元,它可以在其对应的标题编译并插入设计库之后,再独立进行编译并也插入设计库中。

包体并不总是需要的。但在程序包中若包含有子程序说明时则必须用对应的包体。这种情况下,子程序体不能出现在标题中,而必须放在包体中。若程序包只包含类型说明,则包体是不需要的。

常用的程序包如下:

(1)STANDARD程序包

STANDARD程序包预先在STD库中编译,此程序包中定义了若干类型、子类型和函数。IEEE1076标准规定,在所有VHDL程序的开头隐含有下面的语句:

LIBRARY WORK.STD;

USE STD.STANDARD.ALL;

因此不需要在程序中使用上面的语句。

(2)STD_LOGIC_1164程序包

STD_LOGIC_1164预先编译在IEEE库中,是IEEE的标准程序包,其中定义了一些常用的数据和子程序。

此程序包定义的数据类型STD_LOGIC、STD_LOGIC_VECTOR以及一些逻辑运算符都是最常用的,许多EDA厂商的程序包都以它为基础。

(3)STD_LOGIC_UNSIGNED程序包

STD_LOGIC_UNSIGNED程序包预先编译在IEEE库中,是Synopsys公司的程序包。此程序包重载了可用于INTEGER、STD_LOGIC和STD_LOGIC_VECTOR三种数据类型混合运算的运算符,并定义了一个由STD_LOGIC_VECTOR型到INTEGER型的转换函数。

(4)STD_LOGIC_SIGNED程序包

STD_LOGIC_SIGNED程序包与STD_LOGIC_UNSIGNED程序包类似,只是STD_LOGIC_SIGNED中定义的运算符考虑到了符号,是有符号的运算。

下面是一自定义程序包的例子:

一个程序包所定义的项对另一个单元并不是自动可见的,如果在某个VHDL单元之前加上USE语句,则可以使得程序包说明中的定义项在该单元中可见。如下例:

--假定上述程序包Logic的说明部分已经存在

--下面的USE语句使得Three_level_logic和Invert

--对实体说明成为可见

USE work.Logic.Three_Level_Logic;

img27

--结构体部分继承了实体说明部分的可见性,所以不必再使用USE语句

img28

USE语句后跟保留字ALL,表示使用库/程序包中的所有定义。

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

我要反馈