VHDL语言学习_第1页
VHDL语言学习_第2页
VHDL语言学习_第3页
VHDL语言学习_第4页
VHDL语言学习_第5页
已阅读5页,还剩14页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

VHDL学习(本学习以MAXPLUS10为工具软件)第一章、VHDL程序的组成一个完整的VHDL程序是以下五部分组成的库(LIBRARY)储存预先已经写好的程序和数据的集合程序包(PACKAGE)声明在设计中将用到的常数、数据类型、元件及子程序实体(ENTITY)声明到其他实体或其他设计的接口,即定义本定义的输入输出端口构造体(ARCHITECTUR)定义实体的实现,电路的具体描述配置(CONFIGURATION)一个实体可以有多个构造体,可以通过配置来为实体选择其中一个构造体11库库用于存放预先编译好的程序包(PACKAGE)和数据集合体,可以用USE语句调用库中不同的程序包,以便不同的VHDL设计使用。库调用的格式LIRARY库名USE库名所要调用的程序包名ALL可以这样理解,库在硬盘上的存在形式是一个文件夹,比如库IEEE,就是一个IEEE的文件夹,可以打开MAXPLUSR安装源文件夹,进入VHDL93的文件夹,就可以看到一个IEEE的文件夹,这就是IEEE库,而里面的文件就是一个个对程序包或是数据的描述文件,可以用文本打开来查看文件的内容。例如在VHDL程序里面经常可以看到“USEIEEESTD_LOGIC_1164”,可以这样解释这句话,本序里要用到IEEE文件夹下程序包STD_LOGIC_1164,而STD_LOGIC_1164是可以在IEEE文件夹的STD1164VHD文件里面看到的,用文本打开STD1164VHD,可以看到有一名为“IEEESTD_LOGIC_1164”PAKAGE定义。简单的来说,库相当于文件夹,而程序包和数据就相当于文件夹里面的文件的内容(注意不是相当于文件,因为程序包和数据都是在文件里面定义的,而文件名是和实体名相同的,可以说实体相当于文件)。到了这里就可以考虑一个问题,“在安装MAXPLUS时有多少个库已经存在的呢”,要得到这个问题的答案,可以打开安装目录下的“VHDL93”文件夹,就可以看到里面有五个文件夹,分别是ATERA、IEEE、LPM、STD、VITAL,也就是说你看到了五个库,分别是ATERA功能库增强型功能部件,即IP核,包括数字信号处理、通信、PCI和其他总线接口、处理器和外设及外设的功能。IEEE库由IEEE(美国电子电机工程师学会)制定的标准库LPM库参数可调模块库STD库符合VHDL标准的库VITAL库VHDL上对ASIC提供高精确度及高效率的仿真模型库调用库的表达有两种,一是显式表式,就是用LIBRARY和USE来调用库里面的程序包或数据,适用于那些不符合VHDL标准的库调用,比如IEEE库;另一种是隐式表式,就是不用说明就自动调用的,适合于符合VHDL标准的库调用,比如STD库,不用写明调用就已经自动调用出来了。除了上面所介绍的库外,还有用户自定义库及WORK库,WORK库是用户的VHDL现行工作库,从上面的理解可知,WORK库就是用户当前编辑文件所在的文件夹,文件夹里面的其他文件里面所描述包或数据的集合就是WORK库里面的包和数据的集合。由于WORK库自动满足VHDL标准,因此在就应用中不必以显式预先说明(比如LIBRARYWORK这样的定义是多余的)。12程序包在VHDL中,常量、数据类型与子程序可以在实体说明部分和结构体部分加以说明,且实体说明部分所定义的常量、数据类型与子程序在相应的结构体中是可见的(可以被使用的),但在一个实体的说明部分与结构体的部分对于其他实体的说明部分与结构部分是不可见的(注实体相当于一个文件),程序包(PACKAGE)就是为了使一组常量说明、数据说明、子程序说明和元件说明等内容对于多个设计实体都成为可见的而提供的一种结构,可以这样理解一个实体(文件)里的PACKAGE对常量等的定义在其于的实体(文件)里是可以被使用的。程序包由包头和包体构成,包头格式PACKAGE程序包名IS说明语句;END程序包名;说明语句部分可为USE语句、类型定义、子程序声明(定义在包体)、常量定义、信号声明、元件声明等。包体格式PACKAGEBODY程序包名IS说明语句;END程序包名说明部分用于子程序的定义,注在包中对子程序的说明分为两部分,子程序声明放在包头,子程序的定义在包体。实体对于程序包不是自动可见(即不是自动就设为使用)的,为了使用程序包说明的内容就必须在实体的开始加上USE语句(即是要用USE来调用程序包里面所说明的东西),即使实体和程序包是在同一个文件里也要这样调用。13实体实体(ENTITY)是VHDL设计中最其本的组成部分之一(另一个是结构体),VHDL表达的所有设计均与实体有关。实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只是定义所需的全部输入/输出信号。实体格式如下ENTITY实体名ISGENERIC(常数名数据类型设定值)类属说明PORT端口说明(端口信号名1模式类型;端口信号名2模式类型;端口信号名3模式类型;端口信号名4模式类型);TYPE语句或常量定义实体申明并行语句实体语句END实体名;实体名MAXPLUSII要求实体名必须与VHDL文件名相同,否则编译会出错。类属参量用于为设计实体和其外部环境通信的静态信息提供通道,可以定义端口的大小、实体中元件数目及实体的定时特性等等;带有GENERIC的实体所定义的元件叫做参数化元件,即元件的规模或特性由GENERIC的常数决定,在GENERIC所定义的常数是可以在引用过程中修改的,因此利用GENERIC可以设计更加通用的元件,弹性地适应不同的应用。端口信号名端口信号名在实体之中必须是唯一的,信号名应是合法的标识符端口模式分别有IN、OUT、INOUT、BUFFER和LINKAGE,这五种类型在后面的章节将介绍到。端口类型常用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR,有待后面章节介绍。实体申明实体申明部分应放在端口说明的下面,实体申明部分用于定义实体接口中的公共信息,例如可以用来定义新的数据类型和常量定义等。实体语句是每一设计实体接口的公共部分,实体语句只能由并行断言语句、并行过程调用语句和被动进程语句,注意,这些实体语句部分应该是被动语句,即在语句中不含有信号赋值语句。14结构体所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即结构体描述实体的结构或行为,一个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。结构体格式ARCHITECTURE结构体名OF实体名IS定义语句(元件例化);BEGIN并行处理语句;END结构体名;结构体名是对本结构体的命名,它是该结构体的惟一名称,虽然可以由设计人员自由命名,但一般都将命名和对实体的描述结合起来,结构体对实体描述有三种方式(括号中为命名)1)行为描述(BEHAVE)反映一个设计的功能和算法,一般使用进程PROCESS,用顺序语句表达;2)结构描述(STRUCT)反映一个设计硬件方面的特征,表达了内部元件间连接关系,使用元件例化来描述;3)数据流描述(DATAFLOW)反映一个设计中数据从输入到输出的流向,使用并行语句描述。15配置一个实体可以用多个结构体描述,具体综合时,选择哪一个结构体来综合,由配置来确定,仿真时用配置语句进行配置能节省大量时间。配置格式CONFIGURATION配置名OF实体名ISFOR选配结构体名;ENDFOR;ENDCONFIGURATION;第二章、数据类型、算符、数据对象、属性21标识符VHDL标识符由大小写字母、数字和下划线构成,不区分大小写22数据对象在逻辑综合中,VHDL常用的数据对象有信号、变量及常量。1)信号SIGNAL,为全局变量,在程序包说明、实体说明、结构体描述中使用,用于声明内部信号,而非外部信号(外部信号为IN、OUT、INOUT、BUFFER),其在元件之间起互联作用,可以赋值给外部信号。定义格式SIGNAL信号名数据类型初始值;赋值格式目标信号名、逻辑运算符AND、OR、NOT、NAND、NOR、XOR、NOR连接运算符ELSIFTHENELSEENDIFIF标号)CASE语句CASE语句是另一种形式的流程控制语句,可读性比IF的强,格式如下CASE条件表达式ISWHEN条件取值顺序处理语句WHEN条件取值顺序处理语句WHEN条件取值顺序处理语句WHENOTHERS顺序处理语句ENDCASE;上面的条件取值有三种格式可选条件表达式取值条件表达式取值|条件表达式取值|条件表达式取值|条件表达式取值TO条件表达式取值)LOOP循环语句LOOP语句与其他高级编程语言中的循环语句一样,可以使程序进行有规律的循环,循环的次数受迭代算法的控制,一个LOOP语句可包含要重复执行的一组顺序语句,它可以执行多次或是零次。LOOP格式LOOP标号重复模式LOOP顺序处理语句;ENDLOOPLOOP标号;重复模式有两种,FOR模式和WHILE模式。FOR模式的LOOP语句格式LOOP标号FOR循环变量IN离散范围LOOP顺序处理语句;ENDLOOPLOOP标号;WHILE模式的LOOP语句格式LOOP标号WHILE条件LOOP顺序处理语句;ENDLOOPLOOP标号;)NEXT和EXIT语句这两种语句都是用于跳出LOOP循环的,NEXT语句是用来跳出本次循环的,而EXIT语句是用于跳出全部循环的。格式NEXT或EXITLOOP标号WHEN条件)NULL空操作语句,书写格式为“NULL;”,唯一的作用是使程序流程运行到下一个语句,常用于CASE语句当中)RETURN语句用在一段子程序结束后,用来返回到主程序的控制语句,一般情况之下,有两种书写格式,分别是RETURN;只能用于进程返回RETURN表达式;只能用于函数返回在实际的应用中,一般的VHDL综合工具要求函数中只能包含一个RETURN,并规定这条RETURN语句只能写在函数末尾,但一些VHDL综合工具允许函数中出现多个RETURN语句。)ASSERT断言语句主要用于程序仿真、调试中的人机对话,它可以给出一个文字串作为警告和错误信息,基本书写格式如下ASSERT条件REPORT输出信号字符串SEVERITY错误级别;有四种NOTE、WARNING、ERROR和FAILURE如果程序在仿真或调试过程中出现问题,断方语句就会给出一个文字串作为提示信息,当程序执行到断言语句时,就会对ASSERT条件表达式进行判断,如果返回值为TRUE则断言语句不做任何操作,程序向下执行,如果返回值为FALSE,则输出指定的提示信息和出错级别。断言语句可以分为顺序断言语句和并行断言语句。)REPORT语句报告语句是93版VHDL标准提供的一种新的顺序语句,该语句没有增加任何功能,只是提供了某些形式的顺序断言语句的短格式,也算是ASSERT语句的一个精简,格式如下REPORT输出信息SEVERITY出错级别2并行语句并行语句在结构体中的执行都是同时进行的,即它们的执行顺序与语句的书写无关,这种并行性是由硬件本身并行性决定的,即一旦电路接通电路,它的各部分就会按照事先设计好的方案同时工作,VHDL有六种并行语句)并行信号赋值语句信号赋值语句相当于一个进程(用于单个信号赋值)的简化形式,用在结构体中并行执行,信号赋值语句提供了三种赋值方式,用来代替进程可令程序代码大大简化。注这里要注意,信号赋值语句在顺序语句里面也有,顺序语句里可以给信号赋值也可以给变量赋值,而顺序语句里只能对变量说明,不能对信号说明;并行语句刚好相反。思考什么变量不能在并行语句里面说明呢为什么信号不能在顺序语句里面说明呢因为信号是全局的,变量是局部的,用来保存中间变量的赋值方式一并发信号赋值语句,格式“信号名ENDBLOCK块标号;卫式表达式是一个布尔条件表达式,只有当这个表达式为TURE时,BLOCK语句才被执行;类属子句块的属性说明块说明部分用于定义USE、子程序、数据类型、子类型、常量、信号和元件块语句说明部分用于描述块的具体功能,可以包含结构块中的任何并行语句结构。注块语句的作用就是将一个大的结构划成一块一块小的结构。)进程语句进程语句是一种应用广泛的并行语句,一个结构体中可以包括一个或者多个进程语句,结构体中的进程语句是并发关系,即各个进程是同时处理的、并行执行的;但在第一个进程语句结构中,组成进程的各个语句都是顺序执行,在进程语句中是不能用并行语句的。格式进程标号PROCESS敏感信号表IS进程语句说明部分;BEGINENDPROCESS进程标号;注1、敏感信号表列出了进程语句敏感的所有信号,每当其中的一个信号发生变化时,就会引起其他语句的执行,如果敏感信号表不写,那么在PROCESS里面必须有WAIT语句,由WAIT语句来产生对信号的敏感;而当敏感信号表存在时,就不能在PROCESS里再有WAIT语句;2、IS可有可无,是由93版规定的3、进程语句说明部分是进程语句的一个说明区,它主要用来定义进程语句所需要的局部数据环境,包括数据类型说明、子程序说明和变量说明。4、进程语句有两种存在状态,一是等待,当敏感信号没有发生变化时;一是执行,当敏感信号变化时。)子程序调用语句子程序分为函数和过程,它们的定义属于说明语句,均可在顺序语句和并行语句里面使用,它们的调用方法不一样。函数只有一个返回值,用于赋值,可以说在信号赋值的时候就是对函数的调用;过程有很多个返回值,用于进行处理,准确的来说子程序调用语句就是过程调用语句。)参数传递语句参数传递语句即在实体中定义的GENERIC,可以描述不由材料和不同工艺构成的相同元件或模块的性能参数(如延时),在定义了GENERIC的实体叫参数化实体,由参数化实体形成的元件在例化时具有很大的适应性,在不同的环境下,只须用GENERICMAP来修改参数就可以了,使用时,在对元件例化时加在里面就可,比如已经定义了一个AND2的实体,要在EXAMPLE里面使用AND2,要先对AND2进行元件声明,再将AND2例化,如下U0AND2GENERICMAP(参数值1,参数值2)PORTMAP(参数表)元件例化语句一个实体就相当于元件,元件名就相当于实体名,元件要实现的功能在实体里面就已经描述好,比如,同一个文件夹下已经有一个名为AVHD的文件,如果要在另一个文件BVHD里面用到AVHD里面定义的功能,那么可以在BVHD文件里面通过元件声明和元件例化来调用A这个元件,总的来说调用元件过程就是“建立元件元件声明元件例化”,元件调用时不用USE语句的,这和调用程序或类据不同。注元件声明语句属说明语句,不是同步语句,以下对元声的说明是为了更好地了解元件的调用,元件的实例化之前必须要有元件声明元件声明语句格式COMPONENT元件名就是文件名,即是实体名GENERIC;这就是所产的元件参数PORT;ENDCOMPONENT;元件例化格式元件符元件名GENERICMAP(参数表)PORTMAP(端口表)生成语句生成语句通常又称为GENERATE语句,它是一种可以建立重复结构或者是在多个模块的表示形式之间进行选择的语句,格式如下生成语句标号GENERATE;ENDGENERATE生成语句标号;模式选择有两种,一是FOR模式,一是IF模式。FOR模式生成语句生成语句标号FOR循环变量IN离散范围GENERATE;ENDGENERATE生成语句标号;IF模式生成语句生成语句标号IFGENERATE;ENDGENERATE生成语句标号;)并行断言语句前面已经说过顺序断言语句,这里的断言语句是并行的,可以放在实体说明、结构体和块语句中使用,可以放在任何要观察和调试的点上,而顺序断言语句只能在进程、函数和过程中使用。其实断言语句的顺序使用格式和并行使用格式是一样的,因此断言语句是可以应用在任何场所的,格式请看顺序的说明。思考1、是不是所有的VHDL语句都可以归结为顺序语句和并行语句呢那么子程序定义是顺序的还是并行的呢由上面的学习可以知道,子程序可以在三个地方(程序包、结构体、进程)中进行定义,而子程序在没有调用之前是不参与执行的,由此可知子程序的定义是属于说明语句,还有元件的说明也属于说明语句,这个不用多说。因此,可以这样对VHDL语句进行归类,三大类顺序语句、并行语句和说明语句

温馨提示

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

评论

0/150

提交评论