|
VHDL 程序包
在编写 VHDL 程序的过程中 , 实体说明和结构体中的信号定义、常量定义、数据类型、 子程序说明、属性说明以及元件说明等部分只能够在本设计实体中使用 , 而对于其他设计实体来说则是不可用的。因此 , 为了使 一 组信号定义、数据类型说明或子程序说明等对多个设计实体以及对应的结构体都成为可见的 , VHDL 提供了程序包的概念。
在 VHDL 中 , 程序包主要用来存放各个设计都能共享的信号说明、常量定义、数据类型、子程序说明、属性说明和元件说明等部分。如果需要使用程序包中的某些说明和定义 , 设计人员只需要使用 USE 子句来进行一下说明就可以了。
一个完整的程序包一般是由两个部分组成的 , 它们分别是程序包说明部分和程序包包体部分。其中 , 程序包说明部分主要对数据类型、子程序、常量、元件、属性和属性指定等进行说明 ; 程序包包体部分由程序包说明部分指定的函数和过程的程序体组成 , 即用来规定程序包的实际功能 , 程序包包体部分的描述方法与结构体的描述方式相同。
程序包说明部分的语法结构如下所示 :
PACKAGE < 程序包名 > IS
[ 说明语句 ] ;
END [PACKAGE] [< 程序包名 > ] ;
在程序包说明部分的语法结构中 , 说明语句可以是数据类型说明、子程序说明、常量或者延迟常量说明、信号说明、元件说明、文件说明、别名说明、属性说明以及属性指定等 , 其中 [PACKAGE] 是 VHDL-93 标准中的语法要求。
另外 , 程序包说明部分中的所有说明语句是对外可见的 , 这一点与后面要介绍的实体说明部分十分相似 , 它们都是用来指定对外可见的项。实际上 , 程序包说明部分和实体说明部分是不同的 : 程序包说明部分用来指定哪些数据类型、子程序、常量和信号等对外可见 ; 而实体说明则用来指定哪些信号对外可见。
程序包包体部分的语法结构如下所示 :
PACKAGE BODY < 程序包名 > IS
[ 外部子程序体 ] ;
[ 内部子程序说明 ] ;
[ 内部子程序体 ] ;
[ 内部常量说明 ] ;
[ 内部数据类型说明 l .J ,
END [ PACKAGE BODY] [ < 程序包名 > ];
可见 , 程序包包体部分主要由程序包说明部分指定的函数和过程的程序体组成 , 同时还允许建立内部的子程序和内部变量、数据类型的说明 , 但要注意它们对外是不可见的。
程序包说明部分是主设计单元 , 可以独立进行编译并插入到库中 ; 程序包包体部分是次 级设计单元 , 同样也可以在其对应的主设计单元编译并插入到库中之后 , 然后独立进行编译 并也插入到设计库中 O 在实际应用中 , 程序包中的程序包包体部分是一个可选项 , 当程序包说明部分不含有子程序说明部分时 , 则程序包包体部分是不需要的 ; 当程序包说明部分含有 子程序 说明时 , 则必须有相应的程序包包体部分对其子程序的程序体进行描述。
V HDL 标准中提供了一些预先定义的标准程序包 , 它们主要包括 standard 、 textio 、 std_logic_ 1164 、 numeric_std 和 numeric_bit 这 5 个程序包。一般来说 , 这些程序包广泛应用于 VHDL 程序的编写中 , 因此这里有必要对它们进行一下介绍。
1 程序包 standard
程序包 standard 存在于标准设计库 STD 中。通常 , 程序包 standard 中定义 ,布尔量类型、位类型、字符类型、出错级别、实数类型、整数类型 等。
2 程序包 textio
与程序包 standard 一样 , 程序包 textio 也存在于标准设计库 STD 中。通常 , 程序包 textio 中定义了 line 类型、 text 类型、 side 类型、操作宽度 width 子类型、文件 input 、文件 output ,readline 过程、对应于不同数据类型的 read 过程、 writeline 过程和对应于不同数据类型 的 write 过程。
在 VHDL 中 , 由于程序包 textio 对所有设计实体都是不可见的 , 因此使用它时需要在 VHDL 程序的开始部分添加程序包说明语句。
3. 程序包 std_logic_1164
程 序包 std_logic_1164 是设计人员最常使用和最重要的程序包 , 它存在于资源库 IEEE中, 在 VHDL 中 , 程序包 std_logic_ 1164 对所有设计实体都是不可见的 , 因此使用它时需要 在 VHDL 程序的开始部分添加说明语句 .
|