- 2022-08-11 发布 |
- 37.5 KB |
- 25页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
VHDL语言学习
..VHDL学习〔本学习以MAXPLUS10为工具软件〕第一章、VHDL程序的组成一个完整的VHDL程序是以下五局部组成的:库〔LIBRARY〕:储存预先已经写好的程序和数据的集合程序包〔PACKAGE〕:声明在设计中将用到的常数、数据类型、元件及子程序实体〔ENTITY〕:声明到其他实体或其他设计的接口,即定义本定义的输入输出端口构造体〔ARCHITECTUR〕:定义实体的实现,电路的具体描述配置〔CONFIGURATION〕:一个实体可以有多个构造体,可以通过配置来为实体选择其中一个构造体1.1库库用于存放预先编译好的程序包〔PACKAGE〕和数据集合体,可以用USE语句调用库中不同的程序包,以便不同的VHDL设计使用。库调用的格式:LIRARY库名USE库名.所要调用的程序包名.ALL可以这样理解,库在硬盘上的存在形式是一个文件夹,比方库IEEE,就是一个IEEE的文件夹,可以翻开MAX..word.zl.\n..VHDL学习〔本学习以MAXPLUS10为工具软件〕第一章、VHDL程序的组成一个完整的VHDL程序是以下五局部组成的:库〔LIBRARY〕:储存预先已经写好的程序和数据的集合程序包〔PACKAGE〕:声明在设计中将用到的常数、数据类型、元件及子程序实体〔ENTITY〕:声明到其他实体或其他设计的接口,即定义本定义的输入输出端口构造体〔ARCHITECTUR〕:定义实体的实现,电路的具体描述配置〔CONFIGURATION〕:一个实体可以有多个构造体,可以通过配置来为实体选择其中一个构造体1.1库库用于存放预先编译好的程序包〔PACKAGE〕和数据集合体,可以用USE语句调用库中不同的程序包,以便不同的VHDL设计使用。库调用的格式:LIRARY库名USE库名.所要调用的程序包名.ALL可以这样理解,库在硬盘上的存在形式是一个文件夹,比方库IEEE,就是一个IEEE的文件夹,可以翻开MAX..word.zl.\n..PLUSR安装源文件夹,进入VHDL93的文件夹,就可以看到一个IEEE的文件夹,这就是IEEE库,而里面的文件就是一个个对程序包或是数据的描述文件,可以用文本翻开来查看文件的容。例如在VHDL程序里面经常可以看到“USEIEEE.STD_LOGIC_1164〞,可以这样解释这句话,本序里要用到IEEE文件夹下程序包STD_LOGIC_1164,而STD_LOGIC_1164是可以在IEEE文件夹的STD1164.vhd文件里面看到的,用文本翻开STD1164.vhd,可以看到有一名为“IEEE.STD_LOGIC_1164〞PAKAGE定义。简单的来说,库相当于文件夹,而程序包和数据就相当于文件夹里面的文件的容〔注意:不是相当于文件,因为程序包和数据都是在文件里面定义的,而文件名是和实体名一样的,可以说实体相当于文件〕。到了这里就可以考虑一个问题,“在安装MAX..word.zl.\n..PLUS时有多少个库已经存在的呢〞,要得到这个问题的答案,可以翻开安装目录下的“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这样的定义是多余的〕。1.2程序包在VHDL中,常量、数据类型与子程序可以在实体说明局部和构造体局部加以说明,且实体说明局部所定义的常量、数据类型与子程序在相应的构造体中是可见的〔可以被使用的〕,但在一个实体的说明局部与构造体的局部对于其他实体的说明局部与构造局部是不可见的〔注:实体相当于一个文件〕,程序包〔PACKAGE〕就是为了使一组常量说明、数据说明、子程序说明和元件说明等容对于多个设计实体都成为可见的而提供的一种构造,可以这样理解一个实体〔文件〕里的PACKAGE对常量等的定义在其于的实体〔文件〕里是可以被使用的。程序包由和包体构成,格式:PACKAGE程序包名IS ..word.zl.\n..说明语句;END程序包名;说明语句局部可为:USE语句、类型定义、子程序声明〔定义在包体〕、常量定义、信号声明、元件声明等。包体格式:PACKAGEBODY程序包名IS说明语句;END..word.zl.\n..程序包名说明局部用于子程序的定义,注:在包中对子程序的说明分为两局部,子程序声明放在,子程序的定义在包体。实体对于程序包不是自动可见〔即不是自动就设为使用〕的,为了使用程序包说明的容就必须在实体的开场加上USE语句〔即是要用USE来调用程序包里面所说明的东西〕,即使实体和程序包是在同一个文件里也要这样调用。1.3实体实体〔ENTITY〕是VHDL设计中最其本的组成局部之一〔另一个是构造体〕,VHDL表达的所有设计均与实体有关。实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只是定义所需的全部输入/输出信号。实体格式如下:ENTITY实体名IS[GENERIC〔常数名:数据类型[:设定值]〕] 类属说明 PORT 端口说明 〔端口信号名1:模式类型;端口信号名2:模式类型;端口信号名3:模式类型;端口信号名4:模式类型〕;TYPE语句或常量定义 实体申明并行语句 实体语句END..word.zl.\n..实体名;实体名:MAXPLUSII要体名必须与VHDL文件名一样,否那么编译会出错。类属参量:用于为设计实体和其外部环境通信的静态信息提供通道,可以定义端口的大小、实体中元件数目及实体的定时特性等等;带有GENERIC的实体所定义的元件叫做参数化元件,即元件的规模或特性由GENERIC的常数决定,在GENERIC所定义的常数是可以在引用过程中修改的,因此利用GENERIC可以设计更加通用的元件,弹性地适应不同的应用。端口信号名:端口信号名在实体之中必须是唯一的,信号名应是合法的标识符端口模式:分别有IN、OUT、INOUT、BUFFER和LINKAGE,这五种类型在后面的章节将介绍到。端口类型:常用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR,有待后面章节介绍。实体申明:实体申明局部应放在端口说明的下面,实体申明局部用于定义实体接口中的公共信息,例如可以用来定义新的数据类型和常量定义等。实体语句:是每一设计实体接口的公共局部,实体语句只能由并行断言语句、并行过程调用语句和被动进程语句,注意,这些实体语句局部应该是被动语句,即在语句中不含有信号赋值语句。1.4构造体所有能被仿真的实体都由构造体〔ARCHITECTURE〕描述,即构造体描述实体的构造或行为,一个实体可以有多个构造体,每个构造体分别代表该实体功能的不同实现方案。构造体格式:ARCHITECTURE构造体名OF实体名IS[定义语句〔元件例化〕;]BEGIN并行处理语句;END..word.zl.\n..构造体名;构造体名是对本构造体的命名,它是该构造体的惟一名称,虽然可以由设计人员自由命名,但一般都将命名和对实体的描述结合起来,构造体对实体描述有三种方式〔括号中为命名〕:1〕行为描述〔BEHAVE〕:反映一个设计的功能和算法,一般使用进程PROCESS,用顺序语句表达;2〕构造描述〔STRUCT〕:反映一个设计硬件方面的特征,表达了部元件间连接关系,使用元件例化来描述;3〕数据流描述〔DATAFLOW〕:反映一个设计中数据从输入到输出的流向,使用并行语句描述。1.5配置一个实体可以用多个构造体描述,具体综合时,选择哪一个构造体来综合,由配置来确定,仿真时用配置语句进展配置能节省大量时间。配置格式:CONFIGURATION配置名OF实体名ISFOR选配构造体名;ENDFOR; ENDCONFIGURATION;第二章、数据类型、算符、数据对象、属性2.1标识符VHDL标识符由大小写字母、数字和下划线构成,不区分大小写2.2..word.zl.\n..数据对象在逻辑综合中,VHDL常用的数据对象有信号、变量及常量。1〕信号SIGNAL,为全局变量,在程序包说明、实体说明、构造体描述中使用,用于声明部信号,而非外部信号〔外部信号为IN、OUT、INOUT、BUFFER〕,其在元件之间起互联作用,可以赋值给外部信号。定义格式:SIGNAL信号名:数据类型[:=初始值];赋值格式:目标信号名<=表达式常在构造体中用赋值语句完成对信号赋初值的任务,因为综合器往往忽略信号声名时所赋的值。2〕变量〔VARIABLE〕,只在给定的进程中用于声明局部值或用于子程序中,变量的赋值符号为“:=〞,和信号不同,信号是实际的,是部的一个存储元件〔SIGNAL〕或者是外部输入〔IN、OUT、INOUT、BUFFER〕,而变量是虚的,仅是为了书写方便而引入的一个名称,常用在实现某种算法的赋值语句当中。定义格式:VARIABLE变量名:数据类型[:=初始值]3〕..word.zl.\n..常量,全局变量,在构造体描述、程序包说明、实体说明、过程说明、函数调用说明和进程说明中使用,在设计中描述某一规定类型的特定值不变,如利用它可设计不同模值的计数器,模值存于一常量中,对不同的设计,改变模值仅需改变此常量即可,就如上一章所说的参数化元件。定义格式:CONSTANT常数名:数据类型:=表达式;4〕信号和变量最大的不同在于,如果在一个进程中屡次为一个信号赋值,只有最后一个值会起作用,而当为变量赋值时,变量的值改变是立即发生的。2.3数据类型VHDL是一种强类型语言,对于每一个常数、变量、信号、函数及设定的各种参量的数据类型〔DATATYPES〕都有严格要求,一样数据类型的变量才能互相传递和作用,标准定义的数据类型都在VHDL标准程序表STD中定义,实际使用中,不需要用USE语句以显式调用。 VHDL常用的数据类型有三种:标准定义的数据类型、IEEE预定义标准逻辑位与矢量及用户自定义的数据类型。1〕标准定义的数据类型Boolean布尔量:取值为FALSE和TRUECHARACTER字符:字符在编程时用单引号括起来,如‘A’STRING字符串:双引号括起来,如“ADFBD〞INTEGER整数:整数围从-〔231-1〕到〔231-1〕;REAL实数:实数类型仅能在VHDL仿真器中使用,综合器不支持BIT位:取值为0或1;TIME时间:围从-〔231-1〕到〔231-1〕,表达方法包含数字、〔空格〕单位两局部,如〔10..word.zl.\n..PS〕;BIT_VECTOR位矢量:其于BIT数据的数组,使用矢量必须注明宽度,即数组中的元素个数和排列,如SIGNALA:BIT_VECTOR〔7DOWNTO0〕NATUREAL自然数:整数的一个POSITIVE正整数:SEVRITYLEVEL错误等级:在VHDL仿真器中,错误等级用来设计系统的工作状态,共有四种可能的状态值:NOTE,WARNING,ERROR和FAILURE2〕IEEE预定义的标准逻辑位与矢量STD_LOGIC::工业标准的逻辑类型,取值为‘0’、‘1’、‘Z’、‘X’〔强未知〕、‘W’〔弱未知〕、‘L’〔弱0〕、‘H’〔弱1〕、‘—’〔忽略〕、‘U’〔未初始化〕,只有前四种具有实际物理意义,其他的是为了与模拟环境相容才保存的。STD_LOGIC_VECTOR:工业标准的逻辑类型集,STD_LOGIC的组合。3〕用户自定义的数据类型有四种,分别是枚举类型、整数类型和实数类型、数组类型、记录类型枚举类型:TYPE数据类型名IS〔枚举文字,枚举文字,....〕整数类型与实数类型是标准包中预定义的整数类型的子集,由于综合器无法综合未限定围的整数类型的信号或变量,故一定要用RANGE子句为所定义整数围限定围以使综合器能决定信号或变量的二进制的位数。格式: TYPE数据类型名ISRANGE约束围; 〔如-10到+10〕数组类型:TYPE数据类型名ISARRAY〔下限TO上限〕OF..word.zl.\n..类型名称记录类型:TYPE记录类型名ISRECODE元素名:数据类型名;元素名:数据类型名;。。。。。。。。。。。。。ENDRECODE2.4运算符VHDL为构造计算数值的表达式提供了许多预定义运算符,可分为四种类型:算术运算符,关系运算符,逻辑运算符与连接运算符。算术运算符:+、-、*、/、**、MOD、REM、ABS关系运算符:=、/=、<、<=、>、>=逻辑运算符:AND、OR、NOT、NAND、NOR、XOR、NOR连接运算符:&,将多个对象或矢量连接成维数更大的矢量2.5VHDL属性属性是关于实体、构造体、类型及信号的一些特征,有些属性对于综合非常有用,其一般形式均为:对象’属性。1〕数值类属性..word.zl.\n..用于返回数组、块或一般数据的有关值一般数据的数值属性:LEFT,RIGHT,LOW,HIGH数组的数值属性:LENGH块的数值属性:BEHAVIOR,不含有元件PONENT例化信息时返回TRUE;STRUCTURE含有元件实例化或有被动进程时,那么返回TURE。〔注:被动进程定义是在进程定义中没有代入语句〕2〕函数类属性以函数的形式,使设计人员得到有关数据类型、数组、信号的某些信息。数据类型属性函数:POS〔X〕得到输入X值的位置序号、VAL〔x〕得到输入位置序号的X值,SUSS〔x〕,PRED〔x〕,LEFTOF〔x〕,RIGHTOF〔x〕数组属性函数:LEFT〔n〕,RIGHT〔n〕,HIGH〔n〕,LOW〔n〕3〕数据类型属性,这类属性类函数仅一个,即BASE4〕数据区间类的属性,RANGE[〔N〕]和REVERS_RANGE[〔N〕]用户自定义的属性,格式 ATTRIBUTE属性名OF目标名:目标集合IS 表达式以函数的形式,使设计人员得到有关数据类型、第三章、..word.zl.\n..顺序语句与并行语句顺序语句和并行语句是VHDL程序设计中两大根本描述语句系列。3.1顺序语句顺序语句的特点从仿真的角度来看是每一条语句的执行按书写顺序进展,顺序语句只能出现在块语句、进程和子程序部,顺序控制方式有两种,一是条件控制〔IF和CASE语句〕,一是迭代控制〔LOOP语句和ASSERT语句〕,有10种根本类型1〕赋值语句赋值语句分为变量赋值和信号赋值,它们的赋值是有区别的。首先在格式上,变量赋值格式为“变量名:=表达式〞,而信号的赋值格式为“信号名<=表达式〞;其次表达在所用的地方,变量说明和使用都只能在顺序语句中〔进程、函数、过程和块模块〕,而信号的说明只能在同步语句中,但可以在顺序语句和同步语句中使用;再次表达在赋值过程,变量的赋值是立即的,而信号的赋值的执行和信号值的更新至少要延时DELTA延时,只有延时后信号才能得到新值,否那么将保持原值,在进程中,信号赋值在完毕时起作用。2〕WAIT语句WAIT语句属于敏感信号鼓励信号,一个进程语句含有敏感信号时,进程中不能出现WAIT等待语句;当进程语句不含有敏感信号时,进程语句必须含有其他形态的敏感信号鼓励。WAIT语句有五种形式:WAIT ——无限等待;WAITON〔敏感信号1,敏感信号2,敏感信号N〕——敏感信号变化,表中的信号产生变化时才往下运行;WAITUNTIL布尔表达式——为TRUE时,进程启动,为FARLSE是等待WAITFOR时间表达式——到时进程才会启动WAITUNTIL布尔表达式ON〔敏感信号1,敏感信号2,敏感信号N〕FOR时间表达式..word.zl.\n..——多条件等待语句,注意在多条件等待语句的表达式中,至少应有一个信号量,因为处于等待进程中的变量是不可改变的。3〕IF语句这种语句在其他编程语言也有,不用多讲,其完整的书写格式[IF标号:]IF<条件>THEN<顺序处理语句>;[ELSIF<条件>THEN<顺序处理语句>;]…….[ELSE<顺序处理语句>;]ENDIF[IF标号]4〕CASE语句CASE语句是另一种形式的流程控制语句,可读性比IF的强,格式如下CASE〈条件表达式〉ISWHEN〈条件取值〉=>顺序处理语句;WHEN〈条件取值〉=>顺序处理语句;WHEN〈条件取值〉=>顺序处理语句;WHEN OTHERS=>顺序处理语句;END..word.zl.\n..CASE;上面的〈条件取值〉有三种格式可选条件表达式取值条件表达式取值|条件表达式取值|条件表达式取值|条件表达式取值TO条件表达式取值5〕LOOP循环语句LOOP语句与其他高级编程语言中的循环语句一样,可以使程序进展有规律的循环,循环的次数受迭代算法的控制,一个LOOP语句可包含要重复执行的一组顺序语句,它可以执行屡次或是零次。LOOP格式[LOOP标号:][重复模式]LOOP〈顺序处理语句〉;ENDLOOP[LOOP标号];重复模式有两种,FOR模式和WHILE模式。FOR模式的LOOP语句格式:[LOOP标号:]FOR循环变量IN离散围LOOP〈顺序处理语句〉;ENDLOOP[LOOP标号];WHILE模式的LOOP语句格式:[LOOP标号:]WHILE〈条件〉LOOP〈顺序处理语句〉;END..word.zl.\n..LOOP[LOOP标号];6〕NEXT和EXIT语句这两种语句都是用于跳出LOOP循环的,NEXT语句是用来跳出本次循环的,而EXIT语句是用于跳出全部循环的。格式NEXT或EXIT[LOOP标号][WHEN条件]7〕NULL空操作语句,书写格式为“NULL;〞,唯一的作用是使程序流程运行到下一个语句,常用于CASE语句当中8〕RETURN语句用在一段子程序完毕后,用来返回到主程序的控制语句,一般情况之下,有两种书写格式,分别是RETURN; —只能用于进程返回RETURN表达式;——只能用于函数返回在实际的应用中,一般的VHDL综合工具要求函数中只能包含一个RETURN,并规定这条RETURN语句只能写在函数末尾,但一些VHDL综合工具允许函数中出现多个RETURN语句。9〕..word.zl.\n..ASSERT断言语句主要用于程序仿真、调试中的人机对话,它可以给出一个文字串作为警告和错误信息,根本书写格式如下:ASSERT〈条件〉REPORT〈输出信号〉 ——字符串SEVERITY〈错误级别〉;——有四种NOTE、WARNING、ERROR和FAILURE如果程序在仿真或调试过程中出现问题,断方语句就会给出一个文字串作为提示信息,当程序执行到断言语句时,就会对ASSERT条件表达式进展判断,如果返回值为TRUE那么断言语句不做任何操作,程序向下执行,如果返回值为FALSE,那么输出指定的提示信息和出错级别。断言语句可以分为顺序断言语句和并行断言语句。10〕REPORT语句报告语句是93版VHDL标准提供的一种新的顺序语句,该语句没有增加任何功能,只是提供了某些形式的顺序断言语句的短格式,也算是ASSERT语句的一个精简,格式如下:REPORT〈输出信息〉[SEVERITY〈出错级别〉]3.2并行语句并行语句在构造体中的执行都是同时进展的,即它们的执行顺序与语句的书写无关,这种并行性是由硬件本身并行性决定的,即一旦电路接通电路,它的各局部就会按照事先设计好的方案同时工作,VHDL有六种并行语句1〕..word.zl.\n..并行信号赋值语句信号赋值语句相当于一个进程〔用于单个信号赋值〕的简化形式,用在构造体中并行执行,信号赋值语句提供了三种赋值方式,用来代替进程可令程序代码大大简化。[注:这里要注意,信号赋值语句在顺序语句里面也有,顺序语句里可以给信号赋值也可以给变量赋值,而顺序语句里只能对变量说明,不能对信号说明;并行语句刚好相反。][思考:什么变量不能在并行语句里面说明呢?为什么信号不能在顺序语句里面说明呢?因为信号是全局的,变量是局部的,用来保存中间变量的]赋值方式一并发信号赋值语句,格式“信号名<=表达式〞,等效于进程语句,表达式中的信号就是进程语句中的敏感谢励信号〔注:进程必须含有敏感谢励信号,请看下面章节介绍〕赋值方式二条件信号赋值语句,格式如下目标信号<=表达式1 WHEN条件1ELSE表达式2 WHEN条件2ELSE表达式3 WHEN条件3ELSE表达式4 注:条件赋值语句与IF语句不同之处1、以上条件赋值语句不能进展嵌套,而IF是可以的2、由于条件信号赋值语句是并行语句,必须用在构造体中的进程之外〔进程是用顺序语句来编写的〕,而IF是顺序语句3、..word.zl.\n..条件信号赋值语句ELSE是必须有的,而IF可没有4、条件信号赋值语句与实际的硬件电路十分接近,因此使用该语句要求设计人员具有硬件电路知识,而IF一般用来进展硬件电路的高级描述,它不要求太多的硬件电路知识。5、一般情况下很少用条件赋值语句,只有当用进程语句、IF语句和CASE语句难以对路进展描述时才用赋值方式三选择信号赋值语句,格式如下WITH选择条件表达式SELECT目标信号<=信号表达式1 WITH选择条件1信号表达式2 WITH选择条件2信号表达式3WITH选择条件3信号表达式4 WITHOTHERS注:选择信号赋值语句是一种并行语句,不能在构造体中的进程部使用2〕块语句在VHDL语言设计中,块语句常常用来比照拟复杂的构造体作构造化描述,格式如下[块标号:]BLOCK..word.zl.\n..[卫式表达式][类属子句;][端口子句;][块说明局部;]BEGIN<块语句说明局部;>ENDBLOCK[块标号];卫式表达式:是一个布尔条件表达式,只有当这个表达式为TURE时,BLOCK语句才被执行;类属子句:块的属性说明块说明局部:用于定义USE、子程序、数据类型、子类型、常量、信号和元件块语句说明局部:用于描述块的具体功能,可以包含构造块中的任何并行语句构造。注:块语句的作用就是将一个大的构造划成一块一块小的构造。3〕进程语句进程语句是一种应用广泛的并行语句,一个构造体中可以包括一个或者多个进程语句,构造体中的进程语句是并发关系,即各个进程是同时处理的、并行执行的;但在第一个进程语句构造中,组成进程的各个语句都是顺序执行,在进程语句中是不能用并行语句的。格式[进程标号:]PROCESS[敏感信号表]..word.zl.\n..[IS][进程语句说明局部;]BEGIN<顺序语句局部>ENDPROCESS[进程标号];注:1、敏感信号表列出了进程语句敏感的所有信号,每当其中的一个信号发生变化时,就会引起其他语句的执行,如果敏感信号表不写,那么在PROCESS里面必须有WAIT语句,由WAIT语句来产生对信号的敏感;而当敏感信号表存在时,就不能在PROCESS里再有WAIT语句;2、IS可有可无,是由93版规定的3、进程语句说明局部是进程语句的一个说明区,它主要用来定义进程语句所需要的局部数据环境,包括数据类型说明、子程序说明和变量说明。4、进程语句有两种存在状态,一是等待,当敏感信号没有发生变化时;一是执行,当敏感信号变化时。4〕子程序调用语句子程序分为函数和过程,它们的定义属于说明语句,均可在顺序语句和并行语句里面使用,它们的调用方法不一样。函数只有一个返回值,用于赋值,可以说在信号赋值的时候就是对函数的调用;过程有很多个返回值,用于进展处理,准确的来说子程序调用语句就是过程调用语句。5〕..word.zl.\n..参数传递语句参数传递语句即在实体中定义的GENERIC,可以描述不由材料和不同工艺构成的一样元件或模块的性能参数〔如延时〕,在定义了GENERIC的实体叫参数化实体,由参数化实体形成的元件在例化时具有很大的适应性,在不同的环境下,只须用GENERICMAP来修改参数就可以了,使用时,在对元件例化时加在里面就可,比方已经定义了一个AND2的实体,要在EXAMPLE里面使用AND2,要先对AND2进展元件声明,再将AND2例化,如下:u0:AND2GENERICMAP〔参数值1,参数值2〕 PORTMAP〔参数表〕6〕元件例化语句一个实体就相当于元件,元件名就相当于实体名,元件要实现的功能在实体里面就已经描述好,比方,同一个文件夹下已经有一个名为A.VHD的文件,如果要在另一个文件B.VHD里面用到A.VHD里面定义的功能,那么可以在B.VHD文件里面通过元件声明和元件例化来调用A这个元件,总的来说调用元件过程就是“建立元件----元件声明------元件例化〞,元件调用时不用USE语句的,这和调用程序或类据不同。[注:元件声明语句属说明语句,不是同步语句,以下对元声的说明是为了更好地了解元件的调用,元件的实例化之前必须要有元件声明]元件声明语句格式PONENT<元件名> ——元件名就是文件名,即是实体名[GENERIC<参数说明>;] ——这就是所产的元件参数PORT<端口说明>;END..word.zl.\n..PONENT;元件例化格式:元件符:元件名GENERICMAP〔参数表〕 PORTMAP〔端口表〕7〕生成语句生成语句通常又称为GENERATE语句,它是一种可以建立重复构造或者是在多个模块的表示形式之间进展选择的语句,格式如下:[生成语句标号:]<模式选择>GENERATE<并行处理语句>;ENDGENERATE[生成语句标号];模式选择有两种,一是FOR模式,一是IF模式。FOR模式生成语句[生成语句标号:]FOR循环变量IN离散围GENERATE<并行处理语句>;ENDGENERATE[生成语句标号];IF模式生成语句[生成语句标号:]IF<条件>GENERATE<并行处理语句>;ENDGENERATE[生成语句标号];8〕..word.zl.\n..并行断言语句前面已经说过顺序断言语句,这里的断言语句是并行的,可以放在实体说明、构造体和块语句中使用,可以放在任何要观察和调试的点上,而顺序断言语句只能在进程、函数和过程中使用。其实断言语句的顺序使用格式和并行使用格式是一样的,因此断言语句是可以应用在任何场所的,格式请看顺序的说明。思考:1、是不是所有的VHDL语句都可以归结为顺序语句和并行语句呢?那么子程序定义是顺序的还是并行的呢?由上面的学习可以知道,子程序可以在三个地方〔程序包、构造体、进程〕中进展定义,而子程序在没有调用之前是不参与执行的,由此可知子程序的定义是属于说明语句,还有元件的说明也属于说明语句,这个不用多说。因此,可以这样对VHDL语句进展归类,三大类顺序语句、并行语句和说明语句,这三类语句的关系是顺语句可以用在并行语句和说明语句当中,说明语句可以用在并行语句当中,而并行语句是不能用在其他语句当中,可以说并行语句属于一种高级形态,是语句的最终形态。2、子程序分为函数和过程,子程序的调用即可以用在顺序语句中,也可以用并行语句中,用在顺序语句〔进程或者子程序〕中就叫顺序调用语句;在并行语句〔位于进程或子程序的外部〕中就叫做并行调用语句,并行调用语句在构造体中是并行执行的。3、区分信号与变量,信号是全局的,要在并行语句里面说明;变量是局部的;要在顺序语句里面说明;赋值格式不一样;赋值方式不一样,变量是即时赋值的,信号的赋值要到最后才生效的;使用地方不一样,信号可以在并行语句里使用也可在顺序语句里使用,而变量只能在顺序语句里使用4、区分过程和函数,过程可以具有多个返回值〔准确来说不是返回值,而是这些信号在过程之中被改变〕,函数只有一个返回值;过程通常用来定义一个算法,而函数用来产生一个具有特定意义的值;过程中的形式参数可以有三种通信模式〔输入、输出、双向〕,而函数中的形参只能是输入通信模式〔因为函数是用来产生一个值的〕;过程中可以使用赋值语句或WAIT语句,而函数不可〔因为过程是用来处理的〕5、为什么信号不可以在顺序语句里面进展说明呢?是因为信号是全局变量。为什么变量不可以在并行语句里面进展说明呢?是因为变量只是对暂时数据进展局部的存储,只是一个局部的变量。6、信号分为两种:一是外部信号〔输出输入信号〕,即在实体中定义的IN、OUT、INOUT、BUFFER和LINKAGE;一是部信号〔连线信号〕,即在程序包、实体、构造体中说明的SIGNAL,用于元件与元件连接起来。7、CASE语句、条件信号赋值语句和选择赋值语句的构造有点相似,要注意它们的书写格式。..word.zl.查看更多