首页 理论教育 VHDL的组成及应用简介

VHDL的组成及应用简介

时间:2023-06-24 理论教育 版权反馈
【摘要】:从例1中可以看出,一般一个VHDL语言程序应包含以下几个部分。1)库:一个完整、正确的VHDL程序结构一般会包含一个库及程序包的使用申明。另一类是VHDL规定的资源库,资源库里是常规元件和标准块。在VHDL语言中常用的库有:IEEE库、STD库、VITAL库及WORK库。LIBRARY STD;USE STD.ALL;IEEE库IEEE库是VHDL语言使用中最常使用的库,包含IEEE标准的程序包和其他一些支持工业标准的程序包。

VHDL的组成及应用简介

VHDL语言通常包含实体(Entity),结构体(构造体)(Architecture),库(Library),配置(Configuration)和包集合(Package)五部分。但并不是每个程序都必须包含这五部分,但至少要包含实体和结构体这两部分。各部分的作用如下:实体用于描述所设计系统的外部接口信号;结构体用于描述系统内部的结构和行为;建立输入和输出之间的关系;库是专门存放预编译程序包的地方;配置语句安装具体元件到实体——结构体对,可以被看作是设计的零件清单;包集合存放各个设计模块共享的数据类型、常数和子程序等。

例如:利用VHDL语言设计一个二输入与门,VHDL源程序如下:

【例8.1】 LIBRARY ieee;

其仿真波形如图8.20所示:

图8.20 例8.1仿真图

从图8.23例1仿真图中,可以看出,输出信号C实现了A、B逻辑相与的功能。在图中也会发现输入信号的变化而产生的输出信号的变化滞后了一个Δt的时间,那是由于设计软件特意设置的,用来模拟实际硬件电路中门的延迟时间。

从例1中可以看出,一般一个VHDL语言程序应包含以下几个部分。

1)库(LIBRARY):

一个完整、正确的VHDL程序结构一般会包含一个库及程序包的使用申明。库是预先设计完成的或预先定义的数据类型、子程序或其他设计实体的集合体。其他设计者可以通过打开库及程序包的方式进行调用。在设计中,所调用的库必须以VHDL源程序的方式存在,以便应用软件随时读入使用。所以在使用库文件的时候,必须在设计实体前用打开库语句和USE语句。有些标准库已经被IEEE(国际电工电子工程师协会组织)认可,成为IEEE标准库,IEEE库存放了IEEE标准1076中标准设计单元。每个库下又存放了数量不一的程序包,而程序包下又存放了数量不一的子程序。VHDL语言的库分为二类:一类是设计库,如在设计中设计者规定的文件目录所对应的工作库——WORK库。另一类是VHDL规定的资源库,资源库里是常规元件和标准块。在VHDL语言中常用的库有:IEEE库、STD库、VITAL库及WORK库。需要说明的是,STD库和WORK库在实际使用中,是自动打开的,每一个VHDL语言的实际设计,都会自动包含进入相关设计,所以无需使用库语句。

(1)STD库

VHDL语言定义了2个标准的程序包,分别是STANDARD程序包和TEXTIO程序包,均放置在STD库中,只要在VHDL的应用环境中,即可随时调入这两个程序包中的所有内容。例如,在实际使用中,下列语句是无必要的。

LIBRARY STD;

USE STD.ALL;

(2)IEEE库

IEEE库是VHDL语言使用中最常使用的库,包含IEEE标准的程序包和其他一些支持工业标准的程序包。IEEE库中标准程序包主要包括STD_LOGIC_1164、NUMERIC_BIT、NUMERIC_STD等程序包。STD_LOGIC_1164是最常使用的程序包。在IEEE库中,还包含常用的STD_LOGIC_ARITH、STD_LOGIC_SIGNED、STD_LOGIC_UNSIGNED。表8.9为IEEE库下的程序包名及包中预定义内容。

表8.9 IEEE库中所包含的程序包

(续表8.9)

(3)WORK库

WORK库是指设计者在设计中自行设计、定义的设计单元及程序包。用户在设计时,首先应定义一个设计文件夹,用来存放设计者的设计文件,这时,VHDL会默认该文件夹即为WORK库。就是说,在使用VHDL设计时,不允许设计者将设计文件直接放置于根目录下。

(4)VITAL库

VITAL库主要用于提高VHDL门级时序模拟的精度,所以VITAL库只在VHDL仿真器中使用。

另外在MAX+PLUSII软件系统中,在ALTERA库中提供如下两个程序包:

(1)maxplus2。maxplus2定义了数字电路集成芯片74系列各模块。

(2)megacore。megacore定义了如FFT、8255、8251等模块。

图8.21 【例1】实体

2)实体(ENTITY)

实体用于定义一个设计所需的输入/输出信号,信号的输入/输出类型被称为端口模式,同时,实体中还定义它们的数据类型(相当于定义端口的取值范围)。实际上,实体相当于设计了逻辑电路的端口,规定了设计文件所具有的输入输出端口。【例1】中所设计的实体产生的图形符号如图8.21所示。

从【例8.1】可以看出,实体的格式如下:

其中:e_name是指本设计中所取的实体名,p_name是指实体中输入/输出端口的信号名,port_m是指端口的信号类型,在VHDL语言中称为端口模式,data_type是指端口的信号数据类型,可理解为信号可能的取值范围。

在使用VHDL语言设计时,每个端口必须定义的内容包括:

信号名(p_name):端口的信号名在实体中必须是唯一的。信号名应是合法的标识符。

端口模式(MODE):端口的模式有以下几种类型。

IN(输入信号):信号进入实体但并不输出;在程序中它只能给其他信号赋值

OUT(输出信号):信号离开实体但并不输入;并且不会在内部反馈使用;在程序中它只能接受其他信号的赋值。

INOUT(双向信号):信号是双向的(既可以进入实体,也可以离开实体);在程序中它既可给其他信号赋值,也能接受其他信号的赋值。

BUFFER:信号输出到实体外部,但同时也在实体内部反馈。(www.xing528.com)

端口模式的含义可用图8.22所示说明:(黑框代表一个实体)

图8.22 端口模式含义

端口类型(TYPE)定义端口的数据类型,包括以下几种:

(1)Integer(整数),可用作循环的指针或常数,经VHDL语言综合后,也可作为输入/输出信号。

例如:

Q:BUFFER INTEGER RANGE O TO 15;

SIGNAL s1:integer range 0 to 99;

(2)bit(逻辑位):可取值范围为逻辑‘0’和逻辑‘1’。

(3)std_logic(标准逻辑位),取值范围有‘U’、‘X’、‘0’、‘1’、‘Z’、‘W’、‘L’、‘H’、‘-’等9种。其中‘U’表示为初始化;‘X’表示强未知;‘0’表示强逻辑0;‘1’表示强逻辑1;‘Z’表示高阻;‘W’表示弱未知;‘L’表示弱逻辑0;‘H’表示弱逻辑1;‘-’表示忽略。

(4)Bit_vector(逻辑位矢量),用于表示一组(若干位)逻辑位,组中各位的取值范围都是逻辑‘0’和逻辑‘1’。

例如:S:IN BIT_VECTOR(0 TO 3);表示S信号端口模式为IN,具有4个位信号,每个信号类型都是逻辑位,也即每个信号的取值范围为逻辑‘0’和逻辑‘1’。4个信号的排列次序从左往右依次为S(0)~S(3)。

(5)std_logic_vector(标准逻辑位矢量)。用于表示一组(若干位)标准逻辑位,组中各位的取值范围都是标准逻辑位。

例如:Q:OUT std_logic_vector(7 downto 0);表示Q信号端口模式为OUT,具有8个标准逻辑位信号,8个信号的排列次序从左往右依次为Q(7)~Q(0)。

VHDL是与类型高度相关的语言,不允许将一种信号类型赋予另一种信号类型。在本书范围内,以后主要采用std_logic和std_logic_vector。若对不同类型的信号进行赋值需使用类型转换函数。

在VHDL中,除上述常用于端口类型的数据类型外,还有其他多种数据类型用于定义内部信号、变量等:如可枚举类型Enumeration(常用于定义状态机的状态);存取型(Access Types),文件型(File Types)常用于建立模拟模型;物理类型(Physical Types)定义测量单位,如时间单位ns,用于模拟。

其中可枚举类型Enumeration常用于定义状态机的状态,可枚举类型语法结构如下:

type<type_name类型名>is(<value list值列表>);

使用时和其他类型一样:

signal sig_name:type_name;

例:

定义:type traffic_light_state is(red,yellow,green);

signal present_state,next_state:traffic_light_state;

此外,还可定义二维数组

3)结构体:

所有能被仿真的实体都由一个结构体描述,结构体描述实体的行为功能。即设计的功能。一个实体可以有多个结构体,一种结构体可能为行为描述,而另一种结构体可能为设计的结构描述或数据通道的描述。结构体是VHDL设计中最主要部分,一般结构体的格式如下:

ARCHITECTURE arch_name OF e_name IS

(说明语句)

BEGIN

(功能描述语句)

END ARCHITECTURE arch_name;

或:

ARCHITECTURE arch_name OF e_name IS

(说明语句)

BEGIN

(功能描述语句)

END arch_name;

其中,ARCHITECTURE、OF、IS、BEGIN、END是关键词,每个设计中必须包含这些关键词。e_name是指本设计中的实体名,arch_name是指本设计中的结构体名。

说明语句包括在结构体中需要说明和定义的数据对象、数据类型、元件调用申明等。应注意的是说明语句并不是必须的,功能描述语句在设计中是必须的,在设计中应给出必要的相应的功能描述。

4)程序包

在VHDL语言中,数据类型、常量与子程序可以在实体说明部分和结构体部分加以说明。在实体说明部分所定义的类型,常量及子程序在相应的结构体中是可见的(可以被使用)。在一个设计实体中定义的数据类型、子程序或数据对象对于其他设计实体是不可见的(不可被使用)。为了使已经定义的常数、数据类型、元件调用说明以及子程序能够被更多的设计实体所访问使用,可以将所设计数据类型、子程序等放置于同一个程序包中,多个程序包又可以放置于同一个库中,使得这些数据类型、子程序等能够被更大范围的调用,这对于一个大型设计显得尤为重要。

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

我要反馈