电子设计自动化VHDL基本结构课件_第1页
电子设计自动化VHDL基本结构课件_第2页
电子设计自动化VHDL基本结构课件_第3页
电子设计自动化VHDL基本结构课件_第4页
电子设计自动化VHDL基本结构课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第章 VHDL基本结构5.1 实体说明5.2 结构体 5.3 结构体基本组成部分 5.4 包集合、库及配置 5.5 实训:建立用户自定义工作库 习题 第章 VHDL基本结构VHDL语言主要由实体、结构体、库、程序包及配置构成,如图5-1所示。图5-1 VHDL语言设计电路的基本结构第章 VHDL基本结构5.1 实实 体体 说说 明明图5-2所示为集成电路芯片74LS138,其管脚A、B、C为地址输入端,G1、G2AN、G2BN为控制信号端,Y0N、Y1N、Y2N、Y3N、Y4N、Y5N、Y6N、Y7N为译码电路输出端。第章 VHDL基本结构图5-2 74LS138的芯片管脚第章 VHDL基本结

2、构在VHDL中,实体就是电路模块或电路系统与外部电路的接口。实体规定了设计单元的输入/输出接口信号或引脚。就一个设计实体而言,外界所看到的仅仅是它与外部电路的各种接口。这个电路具体的功能原理是由结构体描述的,对于外界来说,这部分是不可见的。实体是VHDL的基本设计单元,它可以对一个门电路、一个芯片、一块电路板及至整个系统进行接口描述。实体说明格式如下:ENTITY实体名IS GENERIC(类属参数说明); PORT(端口说明);END实体名;第章 VHDL基本结构在实体说明语句中应给出实体名,实体名可以理解为这个电路所对应的名称。实体说明语句中类属参数说明必须放在端口说明之前,用于指定参数。

3、第章 VHDL基本结构【例5-1】ENTITY mux IS GENERIC(m:time:=1 ns); PORT(d0,d1,sel:IN BIT; Q:OUT BIT);其中GENERIC(m:time:=1 ns);就是类属参数说明语句,用于定义一个1 ns的时间信号m。如果实体内部电路大量使用了m这个时间值,则当设计者需要修改时间值时只需要一次性修改类属参数语句“GENERIC(m:time:=某时间常数);”中的常数即可,从而使设计电路变得方便快捷。第章 VHDL基本结构端口说明是对设计实体中输入和输出端口的描述,格式如下:PORT(端口名(,端口名):方向 数据类型名; 端口名(

4、,端口名):方向 数据类型名);端口名是赋予每个系统引脚的名称,通常用几个英文字母组成,一般采用代表管脚信号实际意义的英文表示。各个端口名必须是唯一的,不能重复,不能与VHDL的保留字相同。端口方向是引脚信号的方向,指明其是输入、输出或其它,详细的方向类型见表5-1。第章 VHDL基本结构第章 VHDL基本结构IN表示该引脚是输入方向的,比如3-8译码器的A、B、C、G1、G2AN、G2BN这些管脚。OUT表示该引脚是输出方向的,比如3-8译码器的Y0N、Y1N、Y2N 、Y3N 、Y4N、Y5N、Y6N、Y7N。INOUT表示该引脚既可以是输入方向的也可以是输出方向的,这有点像单片机中的I/

5、O口,既可以输入数据又可以输出数据。BUFFER方向其实是一个输出类型,但这个输出信号可以作为一个反馈信号输入到电路中。LINKAGE表示这个端口不指定方向,无论哪个方向都可以连接,一般不常用。下面再重点看一下OUT与BUFFER的区别,例如一个D触发器,其电路如图5-3(a)所示,如果我们想把该D触发器构成一个T触发器,则电路如图5-3(b)所示。第章 VHDL基本结构对于D触发器,Q为输出端口,但对于T触发器,虽然Q这时也是输出性质的,但Q端要反馈到异或门的输入端,也即电路内部又要用到该信号,则其方向为BUFFER类型。如果用VHDL编程,结构体中使用输出端口信号,则信号的方向就应该为BU

6、FFER类型。比如在计数器的设计中,对于计数器的输出信号方向,计算机在用语句描述时要进行递增或递减运算,如果直接由输出信号做自加或自减运算,则其方向为BUFFER类型。当然也可以在结构体中设计一个中间信号来完成设计,然后再把该中间信号赋值给输出信号,这样输出信号的方向就可以用“OUT”类型了。第章 VHDL基本结构图5-3 D触发器和T触发器(a) D触发器;(b) T触发器第章 VHDL基本结构端口数据类型是指端口信号的取值类型,常用的有BIT、BIT_VECTOR、STD_LOGIC、STD_LOGIC_VECTOR、INTEGER、BOOLEAN等。BIT类型表示二进制输入只能以二进制位

7、来表示,其取值只有两种:“0”和“1”。当一次要表示多位二进制位输入或输出时,则可以用BIT_VECTOR,称为位矢量。第章 VHDL基本结构【例【例5-2】 PORT(n0, n1, select: IN BIT; q: OUT BIT; bus: OUT BIT_VECTOR(3 DOWNTO 0);本例中,n0、n1、select 是输入引脚,属于BIT型;q是输出引脚,也属于BIT型;bus是一组8位二进制总线,其取值是按70的顺序进行的,也可采用升序的写法,即“0TO7”,这两种写法其对应的值的位置是不相同的。第章 VHDL基本结构【例例5-3】bus:OUT BIT_VECTOR(

8、3 DOWNTO 0);abus:OUT BIT_VECTOR(0 TO 3);bus=“1101”;abus=“1101”;第章 VHDL基本结构程序在给bus赋值时,最左边的值赋最高位,则bus(3)=1,bus(2)= 1,bus(1)= 0,bus(0)= 1。在给abus进行赋值时,最右边赋给最高位,则abus(0)= 1,abus(1)= 1,abus(2)= 0,abus(3)= 1。我们在书写二进制数值时,习惯把最高位写在左边,所以在VHDL编程中,位矢量的书写一般采用降序。第章 VHDL基本结构STD_LOGIC是工业标准的逻辑类型,其取值可以是0、1、X、Z等9种取值。ST

9、D_LOGIC_VECTOR是标准逻辑矢量类型,可以取一组标准逻辑类型的数据,其对应的赋值顺序可以按降序进行定义,也可以按升序进行定义。INTEGER是整数类型,在用作端口数据类型时一定要指定它的长度。BOOLEAN是布尔类型,其取值为FALSE和TRUE。第章 VHDL基本结构5.2 结结 构构 体体对于一个电路系统而言,实体说明部分主要是对系统外部接口的描述,这一部分如同一个“黑盒子”,描述时并不需要考虑实体内部电路工作的具体细节。结构体定义了该设计实体的功能,规定了该设计实体的数据流程,指派了实体中内部元件的连接关系,描述电路的具体工作情况。结构体的描述格式如下:ARCHITECTURE

10、 结构体名 OF 实体名 IS说明语句 BEGIN 功能描述语句END 结构体名;第章 VHDL基本结构结构体名由设计者自己命名,是结构体的唯一名称。“OF”后面的实体名表明该结构体属于哪个设计实体,每个实体可以对应一个结构体也可对应多个结构体。一个实体若对应多个结构体,则结构体名不能重复,每个结构体只能对应于一个实体。说明语句用于对结构内部使用的信号、常量、数据类型、函数等进行定义。结构体的信号定义和实体的端口说明一样,应有信号名称和数据类型定义,但不需要说明信号方向。结构体中定义的参量只能被该结构体所使用,如果希望该参量也能够被其它实体或结构体使用,则应该把这些参量在包集合中定义。第章 V

11、HDL基本结构VHDL的功能描述语句包含五种不同类型的语句,分别为块语句(BLOCK)、进程语句(PROCESS)、信号赋值语句、子程序调用语句和元件例化语句,其结构图如图5-4所示。其中块语句(BLOCK)、进程语句(PROCESS)、子程序调用语句在下节讲述,并行信号赋值语句在6.2节中讲述,元件例化语句在6.3节讲述。例5-4是一个描述1对2 数据分配器电路的完整的VHDL程序。第章 VHDL基本结构图5-4 结构体构造图第章 VHDL基本结构【例例5-4】 ENTITY nax IS -实体定义 PORT(d,s: IN BIT; y0, y1: OUT BIT); END nax;

12、ARCHITECTURE dataflow OF nax IS -结构体定义 BEGIN y0=(not s) and d; y1= s and d; END dataflow;第章 VHDL基本结构5.3 结构体基本组成部分结构体基本组成部分5.3.1 块语句块语句块(BLOCK)的应用类似于利用Protel画一个复杂的电路原理图,可以将这个复杂的原理图分成多个模块,则每个模块就对应一部分块语句。块语句的使用格式如下:块标号:BLOCK端口说明语句类属参数说明语句 BEGIN 并行语句; END BLOCK 块标号;第章 VHDL基本结构端口说明语句对BLOCK的端口设置以及与外界的连接情况

13、进行说明,块中的说明语句只适用于当前的BLOCK,对于块的外部来说是不透明的,不适用于外部环境。块语句中的语句是并发执行的,用于描述语句的具体逻辑功能,它可以包含结构中的任何并发描述语句。块语句其实是把一个系统分成若干个模块分别进行描述的,所以在综合时,综合器只会保留块语句中的并行语句,而去除其余的语句。第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构在例5-5中包含两个块语句,分别完成全加器与全减器的功能。把“adder:BLOCK”及其后的“BEGIN”、“END BLOCK adder”和“subtractor:BLOCK”及其后的“BEGIN”、“END BLOCK

14、subtractor”语句去掉,不影响整个程序的执行。块语句不参与综合器的综合,在综合过程中,VHDL综合器将略去所有的块语句。块语句是并发执行的,当程序开始执行时,块语句会被无条件执行,但是在某些特殊情况下,设计人员希望块语句在某一个条件满足时才执行,为此VHDL提供了带卫式表达式的块语句来实现此功能。其描述格式为第章 VHDL基本结构块标号:BLOCK 卫式表达式 BEGIN 并行语句; END BLOCK 块标号;当卫式表达式成立时,该块语句被执行,否则该块语句不执行。但是,卫式块语句只能用于仿真,不能用于综合。第章 VHDL基本结构5.3.2 进程进程在VHDL中,进程语句是使用最频繁

15、、最广泛的一种语句。在一个结构体中可以包含多个进程,每个进程都是同步执行的,但是进程内部的语句顺序执行。进程语句的描述格式为进程标号: PROCESS (敏感信号列表)进程说明语句;BEGIN顺序描述语句;END PROCESS 进程标号;第章 VHDL基本结构其中,进程标号是进程语句的标识符,它是一个可选项;敏感信号列表是用来激励进程启动的量,当敏感信号列表中有一个信号或多个信号发生变化时,该进程启动,否则该进程处于挂起状态,所以进程敏感列表中必须要有一个信号,否则该进程将永远不会启动,除非在进程语句中包含“WAIT”语句;进程说明语句定义该进程所需要的局部量,可包括数据类型、常量、变量、属

16、性、子程序等,但要注意,在进程中不允许定义信号。第章 VHDL基本结构进程启动后,进程中的语句按从上至下的顺序执行,最后一个语句执行完成后,程序返回进程语句的开始,等待下一次敏感信号列表中的敏感信号变化或WAIT语句表达式的满足。但应该注意,虽然进程中的语句是顺序执行的,但执行完进程中的顺序语句并不需要时间,只是信号在传输时会有延时,这一点与单片机中的顺序执行语句不同。第章 VHDL基本结构【例例5-6】ARCHITECTURE ART OF STAT IS BEGIN P1:PROCESS -该进程未列出敏感信号,进程需靠WAIT语句来启动 BEGIN WAIT UNTIL CLOCK; -

17、等待CLOCK激活进程 IF(DRIVER=1)THEN -当DRIVER为高电平时进入CASE语句第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构该进程设计了一个2选1电路。在VHDL中,“-”表示后面的语句是注释语句,不参与检查编译。进程之间可以进行通信,进程之间的通信是通过信号进行的。【例例5-8】设计一个产生“01101101”脉冲序列的信号发生电路,其中包含两个进程,分别用来完成计数电路和数据选择电路,两个进程之间通过信号“y”进行通信。第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构设计进程需要注意以下

18、几方面:(1) 在进程中只能设置顺序语句,虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句却是顺序运行的,因此,进程的顺序语句具有明显的顺序/并行运行双重性。第章 VHDL基本结构(2) 进程的激活必须由敏感信号表中定义的任一敏感信号的变化来启动,否则必须有一个显式的WAIT语句来激活。这就是说,进程既可以由敏感信号的变化来启动,也可以由满足条件的WAIT语句来激活;反之,在遇到不满足条件的WAIT语句后,进程将被挂起。因此,进程中必须定义显式或隐式的敏感信号。如果一个进程对一个信号集合总是敏感的,那么,我们可以使用敏感表来指定进程的敏感信号。但是,在一个使用了敏感表的进程(

19、或者由该进程所调用的子程序)中不能含有任何等待语句。第章 VHDL基本结构(3) 信号是多个进程间的通信线。结构体中多个进程之所以能并行同步运行,一个很重要的原因就是进程之间的通信是通过传递信号和共享变量值来实现的。因此,相对于结构体来说,信号具有全局特性,它是进程间进行并行联系的重要途径,故在任一进程的进程说明部分不允许定义信号(共享变量是VHDL 93版中增加的内容)。第章 VHDL基本结构(4) 进程是重要的建模工具。进程结构不但为综合器所支持,而且进程的建模方式将直接影响仿真和综合结果。需要注意的是,综合后对应于进程的硬件结构对进程中的所有可读入信号都是敏感的,而在VHDL行为仿真中并

20、非如此,除非将所有的读入信号列为敏感信号。第章 VHDL基本结构进程语句是VHDL程序中使用最频繁和最能体现VHDL特点的一种语句,其原因是它具有并行和顺序行为的双重性,其行为描述风格具有一定的特殊性。为了使VHDL的软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输入信号都列入敏感表中。不难发现,在对应的硬件系统中,一个进程和一个并行赋值语句确实有十分相似的对应关系,并行赋值语句就相当于一个将所有输入信号隐性地列入结构体检测范围的(即敏感表的)进程语句。综合后的进程语句所对应的硬件逻辑模块,其工作方式可以是组合逻辑方式的,也可以是时序逻辑方式的。例如在一个进程中,一般的IF语句综合出的

21、多为组合逻辑电路(一定条件下);若出现WAIT语句,在一定条件下,综合器将引入时序元件,如触发器等。第章 VHDL基本结构5.3.3 子程序子程序(函数与过程函数与过程)子程序是一个VHDL程序模块,其含义与其他高级计算机语言中的子程序相同。子程序可以在程序包、结构体和进程中定义;子程序必须在定义后才能被调用;主程序和子程序之间通过端口参数列表位置关联方式进行数据传送;子程序可以被多次调用完成重复性的任务。在子程序中,语句是按顺序执行的。在VHDL中,子程序有两种类型:过程(PROCEDURE)和函数(FUNCTION)。第章 VHDL基本结构1函数函数函数定义中包括函数首与函数体。在进程与结

22、构体中不必定义函数首,仅在程序包中才定义函数首。函数首在程序包中被定义时是放在包头中进行的,用不定义在这个程序包中的函数的名字与参数类型。函数体中含有说明语句,用来对数据类型、常数、变量等进行说明,在该部分说明的量是一个局部量,仅在该函数中有效。函数首的定义格式如下:FUNCTION 函数名(参数1,参数2,) RETURN 数据类型名;函数首仅表示定义了一个函数,并不描述函数的具体功能。第章 VHDL基本结构函数体的定义格式如下:FUNCTION 函数名(参数1,参数2,) RETURN 数据类型名 IS 说明语句BEGIN顺序处理语句RETURN 返回值;END 函数名;第章 VHDL基本

23、结构【例例5-9】定义一个函数体:FUNCTION min(x,y:INTEGER ) RETURN INTEGER IS -定义函数BEGIN IF x”等均可以被重载,以赋予新的数据类型操作功能,也就是说,通过重新定义运算符的方式,允许被重载的运算符能够对新的数据类型进行操作,或者允许不同的数据类型之间用此运算符进行运算。第章 VHDL基本结构例5-12和例5-13给出了一个Synopsys 公司的程序包STD_ LOGIC_UNSIGNED中的部分函数结构。示例没有把全部内容列出。在程序包STD_LOGIC_UNSIGNED的说明部分只列出了四个函数的函数首。在程序包体部分只列出了对应的

24、部分内容,程序包体部分的UNSIGED()函数是从IEEE.STD_LOGIC_ARITH库中调用的。在程序包体中的最大整型数检出函数MAXIUM只有函数体,没有函数首,这是因为它只在程序包体内调用。第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构通过以上两例,不但可以从中看到在程序包中完整的函数置位形式,而且还应注意到在函数首的三个函数名都是同名的,即都以加法运算符“+”作为函数名。以这种方式定义函数即所谓运算符重载。对运算符重载(即对运算符重新定义)的函数称为重载函数。实用中,如果已用“USE”语句打开了程序包 STD_LOGI

25、C _UNSIGNED,这时,如果设计实体中有一个STD_ LOGIC _VECTOR位矢和一个整数相加,程序就会自动调用第一个函数,并返回位矢类型的值。若是一个位矢量与STD_LOGIC数据类型的数相加,则调用第三个函数,并以位矢类型的值返回。第章 VHDL基本结构与重载函数一样,两个或两个以上有相同的过程名而参数数量及数据类型却不完全相同的过程称为重载过程。重载过程也是依靠参量类型来辨别究竟调用哪一个过程的。第章 VHDL基本结构此例中定义了两个重载过程,它们的过程名、参量数目及各参量的模式是相同的,但参量的数据类型不同。第一个过程中定义的两个输入参量v1和v2为实数型常数,out1为in

26、out模式的整数信号。而第二个过程中的v1、v2则为整数常数,out1为实数信号,所以在调用过程时将调用第二个过程。第章 VHDL基本结构5.4 包集合、库及配置包集合、库及配置5.4.1 库库在利用VHDL进行工程设计时,为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,有必要将一些经常使用的信息汇集在一个或几个库中以调用。这些信息可以是预先定义好的数据类型、子程序等设计单元的集合体(程序包),也可以是预先定义的各种设计实体以及构造定义和配置定义等。第章 VHDL基本结构在设计单元内的语句可以使用库中的结果,因此,设计者可以共享已经编译的设计结果。在VHDL中有多个库,它们相互独立

27、。通常库是以一个子目录的形式存在的,这些子目录中存放了不同数量的程序包(以VHDL格式保存的程序),这些程序包里定义了一些常用的信息。VHDL程序设计中常用的库有IEEE库、SID库和WORK库等。第章 VHDL基本结构1IEEE库库IEEE库包含了IEEE标准的程序包和其它一些支持工业标准的程序包。其中STD_LOGIC_1164、STD_LOGIC _UNSIGNED、STD_LOGIC_SIGNED、STD_LOGIC_ARITH等程序包是目前经常使用的程序包。在使用这个库时必须先用LIBRARY IEEE声明使用。第章 VHDL基本结构2STD库库STD库是VHDL的标准库,在该库中包

28、含STANDARD的程序包及TEXTIO程序包。STANDARD的程序包是VHDL标准的程序包,里面定义了VHDL标准数据、逻辑关系及函数等,在EDA工具软件启动后自动调用到工作库中,所以使用STANDARD包中定义的量可以不加声明。但是若使用TEXTIO包,则需要按照格式进行声明。第章 VHDL基本结构3WORK库库WORK库是VHDL语言的工作库,用户在项目设计中设计成功、正在验证、未仿真的中间部件等都堆放在工作库WORK中。WORK库是用户的临时仓库,用户的成品、半成品模块、元件及设计中的参数都存放在其中。在MAX+plus软件、Quartus软件中要求所设计的程序要存在一个子目录中,这

29、个子目录其实就是这个项目设计的工作库,用于保存当前正在进行的设计及设计所产生的一些参数及部件。当需要使用这些部件时,EDA工具软件会自动把这些部件及参数加到当前工作的库中,所以不需要再进行说明调用。在对大型系统进行层次化设计时,对一些共用的元件和模块建立一个资源库,每个工程师在自己的WORK库中引用这些元件,实现层次化设计。在调用这些资料时,应该按照格式进行调用。第章 VHDL基本结构另外还有VITAL库、用户自定义工作库等。调用VITAL库中的程序包可以提高VHDL时序模拟的精度,因而只在VHDL仿真器中使用。目前由于FPGA/CPLD生产厂家的EDA工具软件都能为各自的芯片生成VHDL门级

30、网表,所以在设计时一般不需要调用VITAL库中的程序包。用户自定义工作库是指用户将自己设计的内容或通过交流获得的程序包、设计实体等并入这些库中。第章 VHDL基本结构在使用库之前,要进行库说明和程序包说明,库和程序包的说明总是放在设计单元的前面。库语言一般必须与USE语句同用。库语言关键词LIBRARY指明所使用的库名,USE语句指明库中的程序包。一旦说明了库和程序包,整个设计实体就都可以进入访问或被调用,但其作用范围仅限于所说明的设计实体。 VHDL要求每项含有多个设计实体的大系统, 每一个设计实体都必须有自己完整的库的说明语句和USE语句。库的调用格式为LIBRARY 库名;USE ;第章

31、 VHDL基本结构USE语句的使用将使所说明的程序包对本设计实体全部开放,即是可视的。USE语句的使用有两种常用格式:USE库名.程序包名.项目名;USE库名.程序包名.ALL;第一条语句的作用是向本设计实体开放指定库中的特定程序包内所选定的项目,第二条语句格式的作用是向本设计实体开放指定库中的特定程序包内所有的内容。第章 VHDL基本结构【例5-15】LIBRARY IEEE; -打开IEEE库USE IEEE.STD_LOGIC_1164.ALL; -打开IEEE库中STD_LOGIC_1164程序包的所有内容USE IEEE.STD_LOGIC_UNSIGNED.ALL; -打开IEEE

32、库中STD_LOGIC_UNSIGNED程序包的所有内容第章 VHDL基本结构【例例5-16】LIBRARY IEEE;USE IEEE. STD_LOGIC_1164. STD_ULOGIC;USE IEEE. STD_LOGIC_1164.RISING_EDGE;例5-16中向当前设计实体开放了STD_LOGIC_1164程序包中的RISING_EDGE函数。但由于此函数须用到数据类型STD_ ULOGIC,所以在上一条USE语句中开放了同一程序包中的这一数据类型。库的作用范围从一个实体说明开始到它所属的结构体、配置为止。当有两个实体时,第二个实体前要另加库和包的说明。第章 VHDL基本结

33、构5.4.2 程序包程序包通常在一个实体中对数据类型、常量等进行的说明只可以在一个实体中使用,为使这些说明可以在其它实体中使用,VHDL提供了程序包结构,包中罗列VHDL中用到的信号定义、常数定义、数据类型定义、元件定义、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构中的一个层次。通常程序包中的内容应具很大的适用性和良好的独立性,以供各种不同的设计调用,如STD_LOGIC_1164程序包定义的数据类型STD_LOGIC和STD_LOGIC_VECTOR。一旦定义了一个程序包,各种独立的设计就能方便地调用该程序包。第章 VHDL基本结构程序包的定义分为两个部分:包首和包体。(1)

34、包首的定义格式:PACKAGE 包名 IS 说明语句;END 包名;程序包首的说明部分可收集多个不同的VHDL设计所需的信息,其中包括数据类型说明、信号说明、子程序说明及元件说明等。第章 VHDL基本结构(2) 包体格式:PACKAGE BODY 包名 IS 说明语句END 包名;程序包体包括程序包首中已经定义的子程序的子程序体。在程序包集合中,包体并不是必需的,如果仅仅是定义数据类型或定义数据对象等内容,程序包体可以不用,程序包首独立被使用;但若在程序包中有子程序说明,则必须有对应的子程序包体,这时,子程序体必须放在程序包体中。第章 VHDL基本结构【例例5-17】定义包头:PACKAGE

35、logic IS TYPE three_level_logic IS (0, 1, Z); -数据类型项目 CONSTANT unknown_value : three_level_logic := 0;-常数项目 FUNCTION invert (input: three_level_logic)-函数项目 RETURN three_level_logic;END logic;第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构该程序调用了用户自定义工作库中的LOGIC程序包中的“three_level_logic”数值类型及“invert”函数,并在程序中使用了这两个项目。第

36、章 VHDL基本结构在VHDL程序设计中经常要用到以下一些程序包,这些程序包定义的功能介绍如下。(1) STD_LOGIC_1164程序包。它是IEEE库中最常用的程序包,是IEEE的标准程序包。其中包含一些数据类型、子类型和函数的定义,这些定义将VHDL扩展为一个能描述多值逻辑(即除“0”和“1”以外其它的逻辑量,如高阻态“Z”、不定态“X”等)的硬件描述语言,满足了实际数字系统设计的需求。该程序包中用得最多、最广的是STD_LOGIC和STD_LOGIC_VECTOR类型,它们非常适用于FPGA/CPLD器件中的多值逻辑设计结构。第章 VHDL基本结构(2) STD_LOGIC_ARITH

37、程序包。它预先编译在IEEE库中,在STD_LOGIC_1164程序包的基础上扩展了三个数据类型:UNSIGNED、SIGNED和SMALL_INT,并为其定义了相关的算术运算符和转换函数。第章 VHDL基本结构(3) STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED程序包。它们都预先编译在IEEE库中,重载了可用于INTEGER型、STD_LOGIC和STD_LOGIC_VECTOR型混合运算的运算符,并定义了一个由STD_LOGIC_VECTOR型到INTEGER型的转换函数。这两个程序包的区别是,STD_LOGIC_SIGNED中定义的运算符考虑符号,是有符号数的运

38、算,而STD_LOGIC_UNSIGNED中的运算符不考虑符号。程序包STD_LOGIC_UNSIGNED、STD_LOGIC_SIGNED和STD_LOGIC_ARITH虽未成为IEEE标准,但已经成为事实上的工业标准,绝大多数VHDL综合器和VHDL仿真器都支持它们。第章 VHDL基本结构(4) STANDARD和TEXTIO程序包。它们是STD库中的预编译程序包。其中STANDARD程序包中定义了许多基本的数据类型、子类型和函数,是VHDL标准程序包,实际应用中已隐性打开,不必用USE语句另作声明。TEXTIO程序包定义了支持文本文件操作的许多类型和子程序,在使用它之前,需加USE ST

39、D.TEXTIO.ALL语句。TEXTIO程序包主要供仿真器使用。可以用文本编辑器建立一个数据文件,文件中包含仿真时需要的数据,仿真时用其中的子程序存取这些数据。综合器中,此程序包被忽略。第章 VHDL基本结构5.4.3 配置配置一个实体可以对应多个构造体,比如在设计RS触发器时使用了两个构造体,目的是比较不同描述方式情况下输出的性能有何不同。第一个结构体采用调用元件的形式来描述RS触发器的工作情况,第二个结构体采用一些门电路来构成RS触发器。在仿真时通过配置来选择结构体,通过比较不同的仿真结果可以得出不同描述方式下结构体仿真结果有哪些不同。配置语句格式如下:CONFIGURATION 配置名

40、 OF 实体名 IS说明语句END配置名;第章 VHDL基本结构最简单的配置可以写成如下形式:CONFIGURATION 配置名 OF 实体名 ISFOR 被选构造体名 END FOR; END配置名;第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构第章 VHDL基本结构5.5 实训:建立用户自定义工作库实训:建立用户自定义工作库一、实训目的一、实训目的(1) 学会运用Quartus软件的VHDL语言输入功能设计数字电路。(2) 掌握用户自定义工作库的建立过程。(3) 掌握函数体、函数首的用法,掌握枚举类型的设置。(4) 掌握包首、包体的用法。第章 VHDL基本结构二、实训原理二、实训原理试编写一个程序包,该程序包内部定义一个枚举类型与一个函数。其中,函数名为max,函数的功能是对输入的两个数进行大小比较;枚举类型名为week,其取值可以为sun、mon、tue、wed、thu、fri、sat。设置一个程序,调用该程序包,对输入的两个数进行大小比较,并通过数码管显示当前的星期数,比如为“mon”则显示“1”,每隔一秒钟自动加1,也即运用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论