第六章 VHDL语言的描述语句_第1页
第六章 VHDL语言的描述语句_第2页
第六章 VHDL语言的描述语句_第3页
第六章 VHDL语言的描述语句_第4页
第六章 VHDL语言的描述语句_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1,VHDL语言的描述语句,5.6VHDL语言的描述语句,VHDL语言的描述语句主要用来描述系统的硬件结构、行为功能及信号之间的逻辑关系。分为顺序语句和并行语句两大类。顺序语句是按照语句书写的前后顺序自上而下、一条接一条地按顺序执行,用来定义进程、过程和函数的行为。并行语句又称并发语句,出现在结构体中,各语句并行(同步)执行,与书写的顺序无关。有些语句既可作为并行语句又可作为顺序语句,如赋值语句、过程调用语句和断言语句。,2,VHDL有如下六类基本顺序语句:,信号赋值语句变量赋值语句,1、赋值语句,2、流程控制语句,3、等待语句,4、子程序调用语句,5、返回语句,6、空操作语句,IF语句CASE语句LOOP语句NEXT语句EXIT语句,RETURN语句,NULL语句,WAIT语句,过程调用函数调用,3,VHDL语言的描述语句,赋值语句的功能是将一个值或一个表达式的运算结果传递给某一数据对象,如信号、变量或由它们组成的数组。通过赋值语句,可以实现设计实体内部的数据传送,以及端口外部数据的读写。赋值语句由赋值源、赋值目标和赋值符构成。要求赋值源和赋值目标的数据类型必须相同。根据赋值对象(赋值目标)的不同,赋值语句可分为信号赋值和变量赋值两种。,1.赋值语句,4,VHDL语言的描述语句,信号赋值具有延时性、全局性,赋值符用“=”表示。,(1)信号赋值语句,格式:目标信号名=赋值源;,该语句是将赋值源的当前值赋给目标信号。要求赋值号两边信号量的类型和长度应该一致。,例如:Y=1;X=Y;A=BANDC;,-字符赋值,信号Y被赋值为1-信号赋值,将信号Y的当前值赋给目标信号X-表达式赋值,将B和C的与逻辑赋给目标信号A,5,VHDL语言的描述语句,对于数组赋值,可采用下列格式:,(1)信号赋值语句,SIGNALx,y:STD_LOGIC_VECTOR(0TO3);x=“1011”;y(0TO1)=“01”;y(2TO3)=x(1TO2);,-整体赋值,数组“1011”赋值x-部分赋值,“01”赋值y的部分位-位置关联赋值,x的部分位赋值y的部分位,6,VHDL语言的描述语句,变量赋值具有即时性、局部性,并且变量赋值只限定在进程和子程序中,赋值符用“:=”表示。,(2)变量赋值语句,格式:目标变量名:=赋值源;,该语句是将赋值源的当前值赋给目标变量。要求赋值号两边变量的类型和长度应该一致。,例如:A:=5.0;Y:=0;X:=Y;,-将数值5.0赋值给变量A-变量Y被赋值为0-将变量Y的当前值赋给目标变量X,7,VHDL语言的描述语句,对于数组赋值,可采用下列格式:,(2)变量赋值语句,VARIBLEx,y:STD_LOGIC_VECTOR(0TO3);x:=“1011”;y(0TO1):=“10”;y(2TO3):=x(1TO2);,-整体赋值,数组“1011”赋值x-部分赋值,“10”赋值y的部分位-位置关联赋值,x的部分位赋值y的部分位,8,A变量的说明和赋值限定在顺序区域内,即只能在进程或子程序中使用,它无法传递到进程之外。B信号赋值可以在顺序区域内作顺序语句,也可以在结构体中当作并行语句使用。,变量赋值语句与信号赋值语句区别,9,VHDL语言的描述语句,流程控制语句通过条件控制来决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。,2.流程控制语句,流程控制语句共有五种:IF语句CASE语句LOOP语句NEXT语句EXIT语句,10,VHDL语言的描述语句,IF语句是一种条件语句,在IF语句中至少应有一个条件句,该条件句必须由BOOLEAN表达式构成。IF语句依据条件产生的判断结果TRUE或FALSE,有选择地去执行指定的语句。利用IF语句可以实现两个或两个以上的条件分支判断。其格式有三种:,(1)IF语句,单选择控制二选择控制多选择控制,11,VHDL语言的描述语句,IF语句的单选择控制,格式:IF条件句THEN顺序语句;ENDIF;,若条件句的逻辑值为真,则执行THEN后面的顺序语句,否则结束该条件的执行。,例如:IF(x=1)THENA=B;ENDIF;,当条件x=1成立时,信号B的值赋给信号A;否则,不执行A=B语句。,12,VHDL语言的描述语句,IF语句的二选择控制,格式:IF条件句THEN顺序语句;ELSE顺序语句;ENDIF;,若条件句的逻辑值为真,则执行THEN后面的顺序语句,否则执行ELSE后面的顺序语句。,13,VHDL语言的描述语句,【例6.1】用IF语句描述二选一数据选择器。,设数据输入信号为d1和d0,选择控制信号为s,数据输出信号为y。,ARCHITECTUREexample1OFmux2ISBEGINPROCESS(d1,d0,s)BEGINIF(s=0)THENy=d0;ELSEy=d1;ENDIF;ENDPROCESS;ENDexample1;,14,VHDL语言的描述语句,IF语句的多选择控制,格式:IF条件句THEN顺序语句;ELSIF条件句THEN顺序语句;ENDIF;,当满足多个条件之一时,执行该条件THEN后面的顺序语句;如果所设条件都不满足,则执行ELSE后面的顺序语句。,15,VHDL语言的描述语句,【例6.2】用IF语句描述四选一数据选择器。,设数据输入信号为d3、d2、d1、d0,选择控制信号为s=s1,s0,数据输出信号为y。,ARCHITECTUREexample2OFmux4ISBEGINPROCESS(d3,d2,d1,d0,s)BEGINIF(s=“00”)THENy=d0;ELSIF(s=“01”)THENy=d1;ELSIF(s=“10”)THENy顺序语句;WHENOTHERS=顺序语句;ENDCASE;,说明:先计算表达式的值,然后根据条件句中的选择值执行相对应的顺序语句。,注意:条件句中的“=”不是操作符,它相当于THEN作用。,17,VHDL语言的描述语句,表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。,(2)CASE语句,选择值可以有四种不同的表达方式:,单个普通数值,如:5;数值选择范围,如:(1TO3);并列值,如:4|6,表示取值为4或6;混合方式,即以上三种方式的混合。,18,VHDL语言的描述语句,使用CASE语句时,应注意以下几点:,(2)CASE语句,选择值必须在表达式的取值范围内;CASE语句中至少要包含一个WHEN语句;每个选择值只能出现一次,不能在其他WHEN语句中重复出现;除非所有选择值能完全覆盖CASE语句中的表达式的取值,否则最后一个条件句的选择值必须用“OTHERS”表示。选择值可以颠倒次序,但OTHERS必须放在最后;“=”不是操作符,相当于THEN语句的作用。,19,VHDL语言的描述语句,【例6.3】用CASE语句描述四选一数据选择器。,ARCHITECTUREexample3OFmux4ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0)BEGINsyyyyy=X;ENDCASE;ENDPROCESS;ENDexample3;,20,VHDL语言的描述语句,LOOP语句是一种循环语句,它可以使所包含的一组顺序语句被循环执行,其执行的次数由设定的循环参数决定。,(3)LOOP语句,LOOP语句有三种格式:FOR_LOOP语句WHILE_LOOP语句单个LOOP语句,21,VHDL语言的描述语句,FOR_LOOP语句主要用于循环次数已知的循环程序设计。可分为递增方式和递减方式。,FOR_LOOP语句,循环标号:FOR循环变量IN初值TO终值LOOP顺序语句;ENDLOOP循环标号;,递增格式:,递减格式:,循环标号:FOR循环变量IN初值DOWNTO终值LOOP顺序语句;ENDLOOP循环标号;,22,VHDL语言的描述语句,说明:循环从循环变量的“初值”开始,到“终值”结束,每执行一次循环体中的顺序语句后,循环变量的值递增或递减1。,FOR_LOOP语句,循环标号为任选项,用来给循环语句定位。,循环变量的初值和终值决定了循环次数(取整数)。循环次数:循环次数=|终值-初值|+1,23,VHDL语言的描述语句,【例6.4】用FOR_LOOP语句描述八位奇偶校验器。,输入信号X是一个长度为8位的标准逻辑矢量。当X中1的个数为奇数时,输出Y=1,否则,Y=0。算法:用FOR_LOOP语句对X的值逐位进行异或运算。循环次数:由循环变量n控制,记录异或运算的次数。循环变量的初值为0,终值为7。,24,VHDL语言的描述语句,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYloop1ISPORT(X:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC);ENDloop1;ARCHITECTUREexample4OFloop1ISBEGINPROCESS(X)VARIABLEtemp:STD_LOGIC;BEGINtemp:=0;FORnIN7DOWNTO0LOOPtemp:=tempXORX(n);ENDLOOP;Y=temp;ENDPROCESS;ENDexample4;,25,VHDL语言的描述语句,WHILE_LOOP语句是一种条件循环语句,用于循环次数未知的循环程序设计。,WHILE_LOOP语句,循环标号:WHILE循环控制条件LOOP顺序语句;ENDLOOP循环标号;,格式:,说明:若循环控制条件为“真”,则进行循环执行顺序语句;若循环控制条件为“假”,则结束循环。,26,VHDL语言的描述语句,【例6.5】用WHILE_LOOP语句描述八位奇偶校验器。,ARCHITECTUREexample5OFloop2ISBEGINPROCESS(X)VARIABLEtemp:STD_LOGIC;VARIABLEn:INTEGER;BEGINtemp:=0;n:=0;WHILEn8LOOPtemp:=tempXORX(n);n:=n+1;ENDLOOP;Y10;ENDLOOPL2;,-控制语句,当A大于10时,跳出循环,28,VHDL语言的描述语句,NEXT语句是一种循环控制语句,通常嵌套在LOOP语句中使用,用于进行有条件或无条件的控制执行程序的转向。,(4)NEXT语句,NEXT循环标号WHEN条件表达式;,格式:,29,VHDL语言的描述语句,根据可选项,NEXT语句有三种格式:,(4)NEXT语句,格式1:NEXT,功能:无条件结束本次循环,跳回到循环体的开始位置,执行下一次循环。,格式2:NEXT循环标号,功能:无条件结束本次循环,从循环标号规定的位置,执行下一次循环。,格式3:NEXTWHEN条件表达式,功能:有条件结束本次循环,当条件表达式满足时,结束本次循环,否则继续循环。,30,VHDL语言的描述语句,【例6.6】用NEXT_WHEN语句实现单循环。,ARCHITECTUREexample6OFNEXT_WHEN1ISBEGINPROCESS(s)VARIABLEi:INTEGER;BEGINL1:FORiIN7DOWNTO0LOOPy(i)=0;NEXTWHENs(i)=1;y(i)=1;ENDLOOPL1;ENDPROCESS;ENDexample6;,-若s(i)=1成立,终止本次循环,返回到L1否则,继续本次循环。,-返回到L1,31,VHDL语言的描述语句,【例6.7】试用多重循环实现四组八位数据的奇校验。,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYNEXT_WHEN2ISPORT(d:INSTD_LOGIC_VECTOR(0TO31);y:OUTSTD_LOGIC_VECTOR(0TO3);ENDNEXT_WHEN2;ARCHITECTUREexample7OFNEXT_WHEN2ISBEGINPROCESS(d)VARIABLEi,k,j:INTEGER;VARIABLEtmp:STD_LOGIC;,四组八位数据由d0.31输入,内循环完成各组数据的奇校验,外循环确定校验的组数,校验结果存放在输出y0.3中。当某八位数据中1的个数为奇数时,所对应的输出位yi=1,否则,yi=0。,32,VHDL语言的描述语句,BEGINk:=0;L1:FORiIN0TO3LOOPy(i)=0;tmp:=0;j:=0;k:=i*8;L2:LOOPtmp:=tmpXORd(k);y(i)=tmp;NEXTL1WHENj=7;j:=j+1;k:=k+1;NEXTL2;ENDLOOPL2;NEXTL1;ENDLOOPL1;ENDPROCESS;ENDexample7;,内循环,外循环,在内循环中,当j7时,继续执行内循环;当j=7时,终止内循环,跳转到L1处,执行一次外循环。,33,VHDL语言的描述语句,EXIT语句和NEXT语句一样,都是循环控制语句,主要在LOOP语句中使用,用于进行有条件或无条件的跳转控制。,(5)EXIT语句,EXIT循环标号WHEN条件表达式;,格式:,34,VHDL语言的描述语句,根据可选项,EXIT语句有三种格式:,(5)EXIT语句,格式1:EXIT,功能:无条件跳出循环,从ENDLOOP下面的语句开始执行。,格式2:EXIT循环标号,功能:无条件跳出循环,从循环标号规定的位置开始执行循环体外的语句。,格式3:EXITWHEN条件表达式,功能:有条件跳出循环,当条件表达式不成立时,继续执行循环,否则跳出循环。,35,VHDL语言的描述语句,【例6.8】用EXIT语句实现两个数组的比较。,PROCESS(X,Y)BEGINZ=“00”;FORnIN7DOWNTO0LOOPIF(X(n)=Y(n)THENNEXT;ELSIF(X(n)Y(n)THENZ=“01”;EXIT;ELSEZY时,Z=10;当XY时,Z=01。,36,VHDL语言的描述语句,【例6.9】用EXIT_WHEN语句实现两个数组的比较。,PROCESS(X,Y)BEGINZ=“00”;FORnIN7DOWNTO0LOOPNEXTWHEN(X(n)=Y(n);Z=“01”;EXITWHEN(X(n)Y(n);Z=“10”;EXIT;ENDLOOP;ENDPROCESS;,37,VHDL语言的描述语句,等待(WAIT)语句在进程或过程中使用,用于程序的暂停和等待。,3.等待语句,格式:,WAITON敏感信号表UNTIL条件表达式FOR时间表达式;,当执行到WAIT语句时,程序执行被暂停,直到满足此语句设置的等待结束条件后,重新执行程序。,38,VHDL语言的描述语句,根据可选项,WAIT语句有四种格式:,格式1:WAIT,功能:永远处于等待状态,格式2:WAITON敏感信号表;,功能:程序进入等待状态,直至敏感信号表中的任一信号发生变化时,结束等待重新执行程序。,例如:SIGNALa,b:STDLOGIC;PROCESSWAITONa,b;ENDPROCESS;,-暂停程序的执行,直到a或b发生变化才重新启动。,3.等待语句,39,VHDL语言的描述语句,格式3:WAITUNTIL条件表达式;,功能:程序进入等待状态,直至表达式中的敏感信号发生变化,而且满足表达式设置的条件时,结束等待重新执行程序。,例如:WAITUNTILclk=1ANDclkEVENT;z=xORy;,3.等待语句,执行到WAIT语句后,暂停程序的执行,直到clk的上升沿到来时,才恢复程序的运行,执行其后的赋值语句。,40,VHDL语言的描述语句,格式4:WAITFOR时间表达式;,功能:从执行到当前的WAIT语句开始,在此时间段内,程序处于等待状态,当超过时间表达式给定的时间后,程序自动恢复执行。,例如:WAITFOR25ns;zyyyNULL;ENDCASE;,-排除一些其他不用的条件,42,课堂练习(Thesecond),6.1简述顺序语句与并行语句的区别?6.2简述VHDL的六类基本顺序语句?6.3写出IF的三种格式及每种格式的功能?6.4写出LOOP的三种格式及每种格式的功能?6.5写出NEXT语句的三种格式及每种格式的功能?6.6写出EXIT语句的三种格式及每种格式的功能?6.7写出WATE语句的四种格式及每种格式的功能?,43,VHDL语言的描述语句,6.2VHDL语言的并行描述语句,并行语句又称并发语句,是最具有VHDL特色的语句结构。并行语句具有多种语言格式,各并行语句在结构体中的执行是同步进行的,或者说是并发运行的,其执行方式与书写的顺序无关。同一结构中的各并行语句之间可以是相互独立的、不相关的,也可以进行信息传递。在并行语句内部可以嵌套其他语句,嵌套的语句可以并行执行,也可以顺序执行。,44,VHDL语言的描述语句,6.2VHDL语言的并行描述语句,在VHDL语言中,并行语句主要有六种:进程语句并行信号赋值语句块语句元件例化语句生成语句断言语句,45,VHDL语言的描述语句,进程(PROCESS)语句是在结构体中用来描述特定电路功能的程序模块,它提供了一种用顺序语句描述电路逻辑功能的方法。,1.进程语句,一个结构体中可以有多个并行运行的进程结构,而每个进程结构的内部由一组顺序语句组成。,进程语句结构具有并行执行和顺序处理的双重特性。,46,47,VHDL语言的描述语句,(1)进程语句的结构,进程标号:PROCESS(敏感信号参数表)IS进程说明部分BEGIN顺序描述语句ENDPROCESS进程标号;,格式:,当敏感信号表中的某个信号发生变化时,立即启动进程语句,将进程中的顺序语句按顺序循环执行,直到敏感信号稳定不变为止。,48,VHDL语言的描述语句,(2)进程语句的组成,进程说明部分,进程语句的结构由三部分组成,即进程说明部分、顺序描述语句部分和敏感信号参数表。,用于定义该进程所需要的局部数据环境。如:数据类型、常数、属性、子程序等。注意:不能在进程内部定义信号和共享变量,信号只能在结构体说明中定义。,49,VHDL语言的描述语句,(2)进程语句的组成,顺序描述语句部分,是一段顺序执行语句,用于描述该进程的行为。,信号赋值语句:在进程中将计算或处理的结果赋值给信号。,变量赋值语句:在进程中以变量的形式存储计算的中间值。,子程序调用语句:对已定义的过程和函数进行调用,并参与计算。,50,VHDL语言的描述语句,(2)进程语句的组成,顺序描述语句部分,进程启动语句:当PROCESS语句未列出任何敏感信号时,进程的启动可通过WAIT语句来实现。,顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句。,进程跳出语句:包括NEXT语句和EXIT语句。,敏感信号参数表,用于启动本进程可读入的信号名。,51,PROCESS组成,PROCESS语句结构,进程说明,顺序描述语句,敏感信号参数表,信号赋值语句,变量赋值语句,进程启动语句,子程序调用语句,顺序描述语句,进程跳出语句,52,VHDL语言的描述语句,【例6.10】用进程语句描述异步清零计数器。,异步清零方式与时钟信号clk无关,当清零端clr=0时,计数状态Q=0;当clr=1时,计数器为计数状态。,PROCESS(clk,clr)BEGINIFclr=0THENQ=0;ELSIF(clk=1ANDclkEVENT)THENQ=Q+1;ENDIF;ENDPROCESS;,53,VHDL语言的描述语句,【例6.10】用进程语句描述异步清零计数器。,若计数器采用同步清零,则敏感表中可无clr信号,此时进程如下:,PROCESS(clk)BEGINIF(clk=1ANDclkEVENT)THENIFclr=0THENQ=X“00”;ELSEQ=Q+1;ENDIF;ENDIF;ENDPROCESS;,54,(1)进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。,(2)顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。,(3)为启动进程,在进程中必须包含有一个显式的敏感信号量表或者包含一个WAIT语句;敏感信号表应当紧跟在PROCESS之后,含有敏感信号表的进程语句中不允许再显式出现WAIT语句。,说明,55,1.PROCESS为一无限循环语句,2.PROCESS语句具有顺序/并行运行双重性,3.进程必须由敏感信号的变化来启动,4.信号是多个进程间的通信线,PROCESS语句特点,5.一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,56,VHDL语言的描述语句,并行信号赋值语句是将一个数据或一个表达式的运算结果送给一个数据对象,其赋值目标必须是信号而不能是变量。信号赋值语句可以位于进程语句中,也可以在进程语句之外。若出现在进程语句结构内,则属于顺序语句,否则为并行信号赋值语句。,2.并行信号赋值语句,并行信号赋值语句有三种形式:简单信号赋值语句条件信号赋值语句选择信号赋值语句,57,VHDL语言的描述语句,(1)简单信号赋值语句,是VHDL并行语句结构中最基本的单元。,格式:赋值目标=表达式;,规则:赋值目标必须是信号;赋值目标的数据类型必须与表达式数据类型一致。,例如:OUT_1=BANDC;,58,VHDL语言的描述语句,(2)条件信号赋值语句,该语句与IF语句相类似,根据不同的赋值条件,选择表达式中的值赋给赋值目标。,赋值目标=表达式1WHEN赋值条件1ELSE表达式2WHEN赋值条件2ELSE表达式n;,格式:,根据指定条件对信号赋值,条件可以为任意表达式根据条件的出现的先后次序隐含优先权最后一个ELSE子句隐含了所有未列出的条件每一子句的结尾没有标点,只有最后一句有分号,59,VHDL语言的描述语句,【例6.11】用条件赋值语句实现四选一数据选择器。,ARCHITECTUREexample5OFmux41ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINs=s1”结束。,61,VHDL语言的描述语句,用选择信号赋值语句实现四选一数据选择器。,ARCHITECTUREexample6OFmux41ISSIGNALs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINs=s1,格式:,保护表达式是可选项,它是一个布尔表达式。保护表达式的作用是:只有当其为真时,该块中的语句才被启动执行;否则,该块中的语句不被执行。BLOCK语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。,64,VHDL语言的描述语句,(2)块语句的应用,利用块语句可以将结构体中的并行语句划分成多个并行方式的子块,每一个子块都是一个独立的设计实体,具有自己的类属参数和界面端口,以及与外部环境的衔接描述。块语句还可以实现嵌套,内层的块语句可以使用外层块语句所定义的信号,但外层块语句不能使用内层块语句定义的信号。,65,VHDL语言的描述语句,运算电路的输入为A和B,输出为SUM(八位和)、SUB(八位差),以及进位CO和借位BO。,【例6.12】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。,LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadd_subISPORT(A,B:INSTDLOGIC_VECTOR(7DOWNTO0);SUM,SUB:OUTSTDLOGIC_VECTOR(7DOWNTO0);CO,BO:OUTSTDLOGIC);ENDadd_sub;,66,VHDL语言的描述语句,【例6.12】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。,ARCHITECTUREexample12OFadd_subISSIGNALAA,BB,SM,SB:STD_LOGIC_VECTOR(1DOWNTO0);BEGINAA=0&A;BB=0&B;WITHsSELECTADDER:BLOCKBEGINSM=AA+BB;SUM=SM(7DOWNTO0);CO=SM(8);ENDBLOCKADDER;,-ADDER块行为描述语句-运算结果送入SUM-进位送入CO,67,VHDL语言的描述语句,【例6.12】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。,SUBTRACTER:BLOCKBEGINSB=AA-BB;SUB=SB(7DOWNTO0);BO=SB(8);ENDBLOCKSUBTRACTER;ENDexample12;,-SUBTRACTER块行为描述语句-运算结果送入SUB-进位送入BO,68,VHDL语言的描述语句,生成(GENERATE)语句具有复制功能,可以对有规律设计结构的逻辑描述进行简化。当设计一个由多个相同单元模块组成的电路时,只要根据某些条件,设计好某一个元件,就可以用生成语句复制一组完全相同的并行元件或设计单元来组成电路。,4.生成语句,69,VHDL语言的描述语句,生成语句有两种格式:,4.生成语句,格式1:,标号:FOR循环变量IN取值范围GENERATE说明部分BEGIN并行语句;ENDGENERATE标号;,70,VHDL语言的描述语句,生成语句有两种格式:,4.生成语句,格式2:,标号:IF条件GENERATE说明部分BEGIN并行语句;ENDGENERATE标号;,71,VHDL语言的描述语句,生成语句的格式由四部分组成:使用FOR语句或IF语句结构,来规定重复生成并行语句的方式;通过说明部分,对元件数据类型、子程序、数据对象进行局部的说明;并行语句主要用生成语句来复制一组相同的并行元件,其语句包括所有的并行语句,甚至生成语句本身,可实现嵌套式生成结构;标号是可选择项,在嵌套式生成结构中起着十分重要的作用。,4.生成语句,72,VHDL语言的描述语句,【例6.14】试用格式1的生成语句,描述用D触发器组成的八位移位寄存器。,描述D触发器的源程序,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYff_dISPORT(d,cp:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDff_d;ARCHITECTUREexample14OFff_dISBEGINPROCESS(cp)BEGINIFcp=1ANDcpEVENTTHENq=d;ENDIF;ENDPROCESS;ENDexample14;,73,VHDL语言的描述语句,【例6.14】试用格式1的生成语句,描述用D触发器组成的八位移位寄存器。,描述移位寄存器的源程序,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshift_reg_8ISPORT(Din,CLK:INSTD_LOGIC;Dout:OUTSTD_LOGIC);Q:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);ENDshift_reg_8;ARCHITECTUREexample14OFshift_reg_8ISCOMPONENTff_d;PORT(d,cp:INSTD_LOGIC;q:INSTD_LOGIC);ENDCOMPONENT;SIGNALd:STD_LOGIC_VECTOR(0TO8);,-元件定义,74,VHDL语言的描述语句,【例6.14】试用格式1的生成语句,描述用D触发器组成的八位移位寄存器。,描述移位寄存器的源程序,BEGINd(0)=Din;gen2:FORnIN0TO7GENERATEfx:ff_dPORTMAP(d(n),CLK,d(n+1);ENDGENERATE;Q(0)=d(1);Q(1)=d(2);Q(2)=d(3);Q(3)=d(4);Q(4)=d(5);Q(5)=d(6);Q(6)=d(7);Q(7)D3,s=S0,y=B);U3:mux2PORTMAP(A,B,S1,y=Y);ENDexmple13;,-元件例化-元件定义,-位置关联方式-名称关联方式-混合关联方式,【例6.13】试用元件例化语句,将四选一数据选择器用二选一来实现。,79,第4章VHDL硬件描述语言,底层文件:,LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux2ISPORT(a,b,s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux2;ARCHITECTUREexample13OFmux2ISBEGINy”号将元件定义中的信号名与PORTMAP()中所列的信号名连接起来。,如:U2:mux2PORTMAP(a=D2,b=D3,s=S0,y=B);,是在PORTMAP()的信号连接关系中含有上述的两种方式。,如:U3:mux2PORTMAP(A,B,S1,y=Y);,81,VHDL语言的描述语句,断言(ASSERT)语句只能在VHDL仿真器中使用,用于仿真、调试程序时的人机对话。断言语句既可以作为顺序语句,也可以作为并行语句。它等价一个进程语句,但不做任何操作,仅用于判断某一条件是否成立。,6.断言语句,格式:,ASSERT条件表达式REPORT字符串SEVERITY错误等级;,功能:如果条件表达式的条件为“真”,则向下执行另一个语句,如果条件为“假”,则输出“字符串”信息,并指出“错误等级”。,82,VHDL语言的描述语句,错误等级:NOTE(注意)、WARNING(警告)、ERROR(出错)和FAILURE(失败)。,6.断言语句,例如,在RS触发器的描述中,当R和S均为1时,可用断言语句发出错误信息。,ASSERT(S=1ANDR=1)REPORT“S=1andR=1”SEVERITYERROR;,83,课堂练习(Thethird),1、编写带置位和复位控制的D触发器的VHDL源程序。设电路的置位端为PRD,复位端为CLR,低电平有效,互补输出端为Q和QN。2、编写8位二进制数据求补电路的VHDL源程序。设电路的输入为A7.0,输出为B7.0,A7,B7是符号位。3、编写8位二进制收发器电路的VHDL源程序。设电路的输入输出(双向)为A7.0和B7.0。OEN是使能控制端,当OEN=0时电路工作,当OEN=1时电路被禁止,A7.0和B7.0为高阻态。DRT为发端控制,当DRT=1时,数据由A7.0发送到B7.0,当DRT=0时,数据由B7.0发送到A7.0。,84,VHDL语言的描述语句,6.3VHDL语言的子程序,子程序是一个VHDL程序模块,它是利用顺序语句来定义和完成算法的。子程序的应用包括“子程序定义”和“子程序调用”两个内容。子程序的定义可以在程序包、结构体和进程中进行,并且定义后才能被主程序调用。主程序和子程序之间通过端口参数列表,以位置关联的方式进行数据传送,子程序可以被多次调用完成重复性的工作。,子程序类型:过程(PROCEDURE)函数(FUNCTION),85,VHDL语言的描述语句,过程的作用是传递信息,即通过参数进行信息的传递。这些参数可以是常量、变量和信号,传递方向可以是输入、输出和双向。过程语句包括:过程的定义过程的调用,过程的定义由过程首和过程体两部分组成。,1.过程语句,(1)过程的定义,过程首:是过程的索引,用于快速检索相应过程体的内容。过程体:由说明部分和顺序语句组成。,86,VHDL语言的描述语句,过程首的定义格式:,(1)过程的定义,参数表:用于对常数、变量和信号等数据对象做出说明,并用关键字IN、OUT和INOUT定义这些参数的工作模式。,PROCEDURE过程名称(参数表);,过程体的定义格式:,PROCEDURE过程名称(参数表)IS说明部分BEGIN顺序语句;ENDPROCEDURE过程名称;,87,VHDL语言的描述语句,(2)过程的调用,过程的调用就是执行给定名称和参数的过程。,过程调用的格式:,过

温馨提示

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

评论

0/150

提交评论