- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章第四部分顺序语句
第四章:顺序语句 VHDL的基本顺序语句 赋值语句; 转向控制语句; 等待语句; 子程序调用语句; 返回语句; 空操作语句。 2 转向控制语句 WAIT UNTIL 条件表达式 称为条件等待语句,该语句将把进程挂起,直到条件表达式中所含信号发生了改变,并且条件表达式为真时,进程才能脱离挂起状态,恢复执行WAIT语句之后的语句。 WAIT UNTIL ENABLE =‘1’; B := 1; FOR I IN 0 TO 3 LOOP B := A(3-I) AND B; OUT1(I)=B; END LOOP; END PROCESS; END ART; 图2.9 例12对应的硬件电路 【例13】 ENTITY WHILEEXP IS PORT (A:IN BIT_VECTOR(0 TO 3); OUT1:OUT BIT_VECTOR (0 TO 3); END WHILEEXP; ARCHITECTURE ART OF WHILEEXP IS BEGIN PROCESS(A) VARIABLE B:BIT; VARIABLE I: INTEGER; BEGIN I := 0; WHILE I 4 LOOP B:=A(3-I) AND B; OUT1(I)=B; END LOOP; END PROCESS; END ART; VHDL综合器支持WHILE语句的条件是:LOOP的结束条件值必须是在综合时就可以决定。综合器不支持无法确定循环次数的LOOP语句。 图2.10 例13对应的硬件电路 4.NEXT 语句 在LOOP语句执行有条件或无条件的转向控制。 NEXT [LOOP 标号] [WHEN 条件表达式]; 当LOOP 标号缺省时,执行NEXT 语句时,即刻无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下一次循环; 当LOOP 标号不缺省时,跳转到指定标号的LOOP语句处,重新开始执行循环操作。若WHEN子句出现并且条件表达式的值为TRUE,则执行NEXT语句,进入跳转操作,否则继续向下执行。 【例14】 L1: FOR CNT_VALUE IN 1 TO 8 LOOP S1:A(CNT_VALUE) := ‘0’; NEXT WHEN (B=C); S2 :A(CNT_VALUE+8):=‘0’; END LOOP L1; 例14解释,当程序执行到NEXT语句时,如果条件判断式(B=C)的结果为TRUE,将执行NEXT语句,并返回到L1,使CNT_VALUE加1后执行S1开始赋值语句,否则将执行S2开始的赋值语句。 【例15】 L_X: FOR CNT_VALUE IN 1 TO 8 LOOP S1:A(CNT_VALUE):=‘0’; K:=0; L_Y:LOOP S2:B(k):=‘0’; NEXT L_X WHEN (EF): S3:B(k+8):=‘0’; K:=K+1; NEXT LOOP L_Y; NEXT LOOP L_X; … 例15解释,当 EF为TRUE时执行语句NEXT L_X,跳转到L_X,使CNT_VALUE加1,从S1处开始执行语句;若为FALSE,则执行S3。 5.EXIT语句 EXIT语句是LOOP语句的内部循环跳出语句 EXIT [LOOP 标号] [WHEN 条件表达式]; 【例16】 SIGNAL A,B:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL A_LESS_THEN_B:BOOLEAN; … A_LESS_THEN_B=FLASE; --设初始值 FOR I IN 1 DOWNTO 0 LOOP IF (A(I)=‘1’ AND B(I)=‘0’) THEN A_LESS_THEN_B =FALSE;
文档评论(0)