EDA技术与VHDL设计第7章VHDL基本语句与基本设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章VHDL基本语句与基本设计EDA技术与VHDL设计7.1顺序语句并行语句VHDL组合逻辑电路设计VHDL时序逻辑电路设计7.27.37.4VHDL基本语句与基本设计顺序语句的执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺序语句只能用于进程和子程序中,被用来描述组合逻辑和时序逻辑。常用的顺序描述语句有:赋值语句、IF语句、CASE语句、LOOP语句、NEXT语句、EXIT语句、子程序、RETURN语句、WAIT语句和NULL语句。7.1顺序语句信号赋值语句:7.1.1赋值语句赋值目标=赋值源;变量赋值语句:赋值目标:=赋值源;根据语句所设条件,if语句有选择地执行指定的语句,其语法格式由简单到复杂可以分为三种:(1)具有开关控制的IF语句(2)具有二选择控制的IF语句(3)具有多选择控制的IF语句7.1.2IF语句一般格式:if条件then顺序语句;endif;当条件成立,执行顺序语句,否则跳过语句。具有开关控制的IF语句if(EN=’1’)thenA=B;--当条件EN=1时,A随B变化;否则,该语句不执行endif;具有开关控制的IF语句举例一般格式:if条件then顺序语句;else顺序语句;endif;条件成立执行then后顺序语句;否则执行else后的顺序语句。具有二选择控制的IF语句ifOE=‘0’thenY=notx;elseY=‘Z’;--高阻符号“Z”要大写endif;用IF语句描述三态非门一般格式:if条件then顺序语句;elsif条件then顺序语句;[elsif条件then顺序语句;][else顺序语句;]endif;具有多选择控制的IF语句case语句根据表达式的取值直接从多组顺序语句中选择一组执行,其语句格式为:case表达式iswhen选择值=顺序语句;when选择值=顺序语句;......whenothers=顺序语句;endcase;7.1.3CASE语句一般格式:(1)关键词others只能出现一次,且只能作为最后一种条件取值。使用others的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。使用CASE语句注意事项一般格式:(2)条件句中的选择值必须在表达式的取值范围内。(3)case语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。(4)case语句执行必须选中,且仅能选中所列语句中的一条。使用CASE语句注意事项(1)WHEN取值=顺序语句:(2)WHEN取值|取值|…|取值=顺序语句:(3)WHEN取值TO取值=顺序语句;(4)WHEN取值DOWNTO取值=顺序语句;(5)WHENOTHERS=顺序语句;CASE语句中WHEN字句书写格式d0=‘0’;d1=‘0’;d2=‘0’;d3=‘0’;CASEselISWHEH“00”=d0=d;WHEN“01”=d1=d;WHEN“10”=d2=d;WHENOTHERS=d3=d;ENDCASE;CASE语句应用举例LOOP语句与其它高级语言中的循环语句相似,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定。LOOP语句有三种格式:(1)无限LOOP语句(2)FOR_LOOP语句(3)WHILE_LOOP语句7.1.4LOOP语句[标号:]LOOP顺序语句EXIT标号;ENDLOOP;举例:L2:LOOPa:=a+1;EXITL2WHENa10;ENDLOOPL2;无限LOOP语句[标号]:FOR循环变量IN离散范围LOOP顺序处理语句;ENDLOOP[标号];注意:(1)循环变量是LOOP内部自动声明的局部量,仅在LOOP内可见。(2)离散范围必须是可计算的整数范围。循环次数范围规定LOOP语句中的顺序语句被执行的次数。FOR_LOOP语句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYparity_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDENTITYparity_check;ARCHITECTUREoneOFparity_checkISBEGINPROCESS(a)VARIABLEtmp:STD_LOGIC;BEGINtmp:=’1’;FORiIN0TO7LOOPtmp:tmpxora(i);ENDLOOP;y=tmp;ENDPROCESS;END;用FORLOOP语句描述8位奇偶校验电路[标号]:WHILE循环条件LOOP顺序处理语句;ENDLOOP[标号];例:sum:=0;i:=0;abcd:WHILE(i10)LOOPsum:=sum+i;i:=i+1;ENDLOOPabcd;WHILE_LOOP语句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYparity_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDENTITYparity_check;ARCHITECTUREoneOFparity_checkISBEGINPROCESS(a)VARIABLEtmp:STD_LOGIC;VARIABLEi:INTEGER;BEGINtmp:=’0’;i:=0;WHILE(i8)LOOPtmp:tmpxora(i);i:=i+1;ENDLOOP;y=tmp;ENDPROCESS;END;用WHILE_LOOP语句描述8位奇偶校验电路在LOOP语句中,NEXT语句用来跳出本次循环。其格式分三种:(1)NEXT:无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下次循环。(2)NEXT:[标号];无条件终止当前的循环,跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。(3)NEXT[标号][WHEN条件表达式];7.1.5NEXT语句L1:WHILEi10LOOPL2:WHILEj20LOOPNEXTL1WHENi=j;ENDLOOPL2;ENDLOOPL1;NEXT语句举例EXIT语句是LOOP语句的内部循环控制语句,作用是结束循环状态。而区别在于NEXT语句是跳向LOOP语句的起始点,EXIT语句则是跳向LOOP语句的终点。EXIT的语句格式也有3种:(1)EXIT;(2)EXITLOOP标号;(3)EXITLOOP标号WHEN条件表达式;7.1.6EXIT语句PROCESS(a)VARIABLEint_a:INTEGER;BEGINint_a:=a;FORiIN0TOmax_limitLOOPIF(int_a=0)THENEXIT;ELSEint_a:=int_a-1;ENDIF;ENDLOOP;ENDPROCESS;EXIT语句举例在进程中(包括过程中),当执行到WAIT(等待语句时),运行程序将被挂起,直到满足此语句设置的结束挂起条件后,才重新开始执行进程或过程中的程序。WAIT语句有以下四种不同的语句格式:(1)WAIT--无限等待(2)WAITON--敏感信号量变换(3)WAITUNTIL--条件满足(可综合)(4)WAITFOR--时间到7.1.7WAIT语句进程中其一般格式为:WAITON信号[,信号];例如,以下两种描述是完全等价的:PROCESS(a,b)PROCESSBEGINBEGINy=aANDb;y=aANDb;ENDPROCESS;WAITONa,b;ENDPROCESS;敏感信号量列表和WAIT语句选其一,不能同时使用。1.WAITON语句进程中其一般格式为:WAITUNTIL表达式;例如,WAITUNTIL语句有三种表达方式:(1)WAITUNTIL信号=某个数值;(2)WAITUNTIL信号’EVENTAND信号=某个数值;(3)WAITUNTILNOT(信号’STABLE)AND信号=某个数值;2.WAITUNTIL语句在进程中允许对子程序进行调用。对子程序的调用语句是顺序语句的一部分。子程序包括过程和函数,可以在VHFL的结构体或程序包中的任何位置对子程序进行调用。子程序调用可以在任何地方根据其名称调用子程序。7.1.8子程序调用语句调用过程的语句格式如下:过程名([参数名=]表达式{,[参数名=]表达式});其中表达式也称为实参,它可以是一个具体的数值,也可以是一个标识符,是当前调用程序中过程形参的接受体。过程调用函数调用与过程调用十分类似,不同之处是调用函数将返回一个指定类型的值,函数的参量只能是输入值。函数调用的一般格式为:函数名([参数名=]表达式{,[参数名=]表达式});函数调用7.2并行语句并行信号赋值语句进程语句并行过程调用语句元器件例化语句生成语句33/387.2.1并行信号赋值语句三种并行信号赋值:简单信号赋值条件信号赋值选择信号赋值34/381.并行简单信号赋值语句35/382.条件信号赋值语句36/38用when-else语句描述2选一的MUXentitymux2to1isport(a,b:inbit;sel:inbit;y:outbit);endmux2to1;architectureoneofmux2to1isbeginy=bwhensel='1'elsea;endone;信号定义成比特类型,可取0和1。如果把=‘1’去掉,结果如何?37/38用when-else语句描述4选1的MUXentitymux4to1isport(a,b,c,d:inbit;sel1,sel0:inbit;y:outbit);endmux4to1;architectureoneofmux4to1isbeginy=awhen(sel1='0')and(sel0='0')elsebwhen(sel1='0')and(sel0='1')elsecwhen(sel1='1')and(sel0='0')elsed;endone;问题:如果00时选a,01时选b,10和11时都选c,怎么办?y=awhen(sel1='0')and(sel0='0')elsebwhen(sel1='0')and(sel0='1')elsecwhen(sel1=‘1’)and(sel0=‘0’)elsed;38/383.选择信号赋值语句39/38问题:如果00时选a,01时选b,10和11时都选c,怎么办?architectureoneofmux4to1issignalsel:bit_vector(1downto0);beginsel(1)=sel1;sel(0)=sel0;withselselecty=awhen00,bwhen01,cwhenothers;endone;entitymux4to1isport(a,b,c:inbit;sel1,sel0:inbit;y:outbit);endmux4to1;注意:whenothers包含那些未被列出的可能。40/38如果信号类型换成STD_LOGIClibraryieee;useieee.std_logic_1164.all;entitymux4to1isport(a,b,c:instd_logic;sel1,sel0:instd_logic;y:outstd_logic);endmux4to1;architectureoneofmux4to1issignalsel:std_logic_vector(1downto0);beginsel(1)=sel1;sel(0)=sel0;withselselecty=awhen00,bwhen01,cwhenothers;endone;41/38VHDL模型-并行信号赋值libraryieee;useieee.std_logic_1164.all;entitycmpl_sigisport(a,b,sel:in

1 / 56
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功