程序包中只能包括声明部分,不能包括实体、结构体、配置声明单元、进程、块(block)等。实体、结构体、配置声明单元直接放在设计库中,与程序包和包体并列;而进程和块只是结构体(有时也在实体声明中)的一个组成部分,不能独立。程序包和包体均为独立的编译单元。VHDL共有5种编译单元:实体、结构体、配置单元、程序包、包体。编译单元均可单独作为一个文件,也可放在一起。其中,实体声明、程序包声明、配置单元为初级单元,结构体和包体分别是实体、程序包声明的次级单元。编译的时候,要求次级单元在其相应的初级单元编译之后才可以编译。如果初级单元和相应的次级单元放在一个文件中,则要求初级单元要放在次级单元的前面。 值得引起注意的是;程序包中不能声明变量,但可以声明信号,特别是可以声明全局信号。使用全局信号来声明诸如Clock、Reset等信号会带来极大方便,但如果不加节制地过多使用全局信号,也容易带来混乱。 引用程序包时,在编译单元之前添加下面的语句: 将程序包的声明部分和包体部分分开,可以体现内部实现保密的目的。比如,一个集成电路设计公司提供了一些标准子程序放在程序包中,可提供其他单位的设计者使用,他们只要提供程序包声明部分和目标代码,而不提供包体部分。即提供这些子程序的使用方法,而不提供实现子程序的源程序。
|