一个完整的VHDL程序包括实体(Entity),结构体(Architecture),配置(Configuration),包集合(Package),库(Library)5个部分。在VHDL程序中,实体和结构体这两个基本结构是必须的,他们可以构成最简单的VHDL程序。实体用于描述电路器件的外部特性;结构体用于描述电路器件的内部逻辑功能或电路结构;包集合存放各设计模块都能共享的数据类型、常数和子程序等;配置用于从库中选取所需单元来组成系统设计的不同版本;库用于存放已经编译的实体、结构体、包集合和配置。
一,实体
实体是VHDL程序设计的基础单元。实体声明对设计实体与外部电路的端口描述,以及定义所有输入和输出端口的基本性质,是实体对外的一个通信界面。实体声明以entity开始,由end entity 或 end 结束,关键词不区分大小写。实体声明语句结构如下:
entity 实体名 is
[generic (类属参量) ;]
[port (端口说明);]
end entity 实体名;
1,实体名:一般由用户定义,最好能体现功能;
2,类属参量:是一个可选项;它是一种端口界面常数,常用来规定端口的大小、实体中元件的数目及实体的定时特性等。类属参量的值可由实体的外部提供,用户可以从外面通过重新设定类属参量来改变一个实体或一个元件内部电路结构和规模。
3,端口说明:端口为实体和其外部环境提供动态通信的通道,利用port语句可以描述设计电路的端口和端口模式。格式如下
port(端口名:端口模式 数据类型;…)
(1)端口名:是用户为实体的每个对外通道所取得名字,通常为英文字母加数字得形式。
(2)端口模式:可综合得端口模式有四种,分别是:IN,OUT,INOUT,BUFFER.用于定义端口上数据得流动方向和方式。
二,结构体
结构体描述了实体的结构、行为、元件及内部连接关系,即定义了设计实体的功能,规定了实体的数据流程,指定了实体内部的数据连接关系。结构体是对实体功能的具体描述,一定跟在实体的后面。
结构体一般分为两个部分,第一部分是对数据类型,常量,信号,子程序和元件等因素进行说明;第二部分是描述实体的逻辑行为、以及各种不同的描述风格的功能描述语句,包括各种顺序语句和并行语句。结构体声明语句结构如下:
architecture 结构体名 of 实体名 is
[定义语句]
begin
[功能描述语句]
end 结构体名;
1,结构体名:用户自行定义,通常用dataflow(数据流),behavior(行为),structural(结构)
命名。体现了三种不同结构体的描述方式。
2,结构体信号定义语句
结构体信号定义语句必须放在关键词architecture和 begin之间,用于对结构体内部将要使用的信号、常数、数据类型、元件函数和过程进行说明。结构体定义的信号为该结构体的内部信号,只能用于这个结构体中。结构体中的信号定义和端口说明一样,应有信号名称和数据类型定义。用于结构体中的信号是内部连接用的信号,因此不需要方向说明。
3,结构体功能描述语句
结构体功能描述语句位于begin和end之间,具体的描述了结构体的行为及其连接关系。结构体功能描述语句可以含有5中不同类型的并行语句。语句结构内部可以使用并行语句,也可以使用顺序语句。
三,库
库用来存储已经完成的程序包等VHDL设计和数据,包含各类包定义、实体、机构体等。在VHDL库中,库的说明总是放在设计单元的最前面。这样,设计单元内的语句就可以使用库中的数据,便于用户共享已经编译的设计结果。
1,库的说明
库的说明使用use语句,通常有以下两种格式:
use 库名. 程序包名. 工程名;
use 库名. 程序包名.all;
第一种格式的作用是向本设计实体开放指定库中的特定程序包内的选定工程。第二种格式的作用是向本设计实体开放指定库中特定程序包内的所有内容。
2,常见库
(1)IEEE库
IEEE库中包含以下四个包集合
- STD_LOGIC_1164:标准逻辑类型和相应函数;
- STD_LOGIC_ARITH:数学函数;
- STD_LOGIC_SIGNED:符号数学函数;
- STD_LOGIC_UNSIGNED:无符号数学函数;
(2)STD库
STD库是符合VHDL标准的库,使用时不需要显示声明;
(3)ASIC矢量库
各个公司提供的ASIC逻辑门库;
(4)WORK库
WORK库为现行行业库,用于存放用户的VHDL程序,使用户自己的库。
VHDL语法比较规范,对任何一种数据对象(信号,变量,常数),必须严格限定其取值范围,即明确界定对其传输或存储的数据类型。在VHDL中,有多种预先定义好的数据类型,如,整数数据类型INTEGER,布尔数据类型BOOLEAN,标准逻辑位数据类型STD_LOGIC和为数据类型BIT等。
VHDL要求赋值运算符“<=”两边的信号数据类型必须一致。VHDL共7中基本逻辑运算符,AND(与),OR(或),NAND(与非),NOR(或非),XOR(异或),XNOR(同或),NOT(取反)。逻辑运算符所要求的操作对象的数据类型有三种,即BIT,BOOLEAN,STD_LOGIC。