首页 百科知识 LOOP循环语句

LOOP循环语句

时间:2022-10-15 百科知识 版权反馈
【摘要】:LOOP循环有迭代循环FOR LOOP、条件循环WHILE LOOP和无限循环INFINITE LOOP。注意,循环变量的默认取值是整数类型,一般不需要申明,可直接使用,另外,FOR LOOP中循环变量在循环体内可读,不可写。此例中WHILE LOOP实现的是对data逐位进行异或的操作,该程序常用于数据的奇偶校验。从LOOP至 END LOOP 组成一个循环体。与FOR LOOP、WHILE LOOP相同,LOOP前的“循环标号”是可选项,用于标识该循环。NEXT语句也有两种形式,其语法格式为:该语句用在LOOP语句内部。

5.4.3 LOOP循环语句

循环语句,常用于描述有规则的迭代运算或产生有规律的激励。LOOP循环有迭代循环FOR LOOP、条件循环WHILE LOOP和无限循环INFINITE LOOP。下面逐一进行介绍。

FOR LOOP

FOR LOOP是一个有限迭代循环。其语法格式为:

img163

“循环标号”是可选项,用于标识该循环。该循环由“循环变量”控制循环次数,“范围”给出的是循环变量依次可取的离散值,执行此循环时,“循环变量”每从“范围”中取一值,循环就执行一次,当“循环变量”取尽“范围”限定的所有值,则循环终止。注意,循环变量的默认取值是整数类型,一般不需要申明,可直接使用,另外,FOR LOOP中循环变量在循环体内可读,不可写。如例5-18所示。

【例5-18】FOR LOOP示例

img164

上例完成的是将d_in(3)~d_in(0)赋值给q_out(0)~q_out(3)的有序循环。程序中循环变量“i”确实未作变量申明,也可直接使用,依次取值3,2,1,0,实现循环控制。

WHILE LOOP

WHILE 循环是一有限条件循环。其基本格式为:

img165

“循环标号”是可选项,用于标识该循环。执行此循环时先判断循环变量是否满足〈条件〉,条件为真则执行一轮循环,条件为假则循环结束。如例5-19所示。

【例5-19】WHILE LOOP示例

img166

img167

此例中WHILE LOOP实现的是对data逐位进行异或的操作,该程序常用于数据的奇偶校验。需要注意的是,WHILE LOOP中的循环变量需要申明,而且其变化规律需要在循环体内部指定,在本例中i每循环一次就自加1,设计者可以根据自己的需要将循环变量的变化规律定为“i:=i+2”,“i:=i*3”等。

INFINITE LOOP

INFINITE LOOP是没有循环变量的无限循环体,其基本语法格式为:

img168

从LOOP至 END LOOP 组成一个循环体。与FOR LOOP、WHILE LOOP相同,LOOP前的“循环标号”是可选项,用于标识该循环。循环体内包含若干顺序语句,一旦开始执行此循环,这些顺序语句将周而复始地执行。如例5-20所示。

【例5-20】INFINITE LOOP

img169

此例使用了一个无条件循环gen,其目的是生成一个周期为100ns的时钟,该程序已通过了编译,但在仿真过程中,仿真时刻始终处在0时刻,没有仿真波形,这是为什么呢?

前面已经介绍过,进程的执行分为执行阶段和信号更新阶段,只有在进程执行结束时,才会更新信号的值,仿真时刻也才会前进。在例5-20中,gen循环是无条件无限循环,使得进程始终处于执行阶段,故仿真时刻一直停留在0时刻,无法得到正确的仿真波形。

为了解决这个问题,可以在无条件无限循环中,加入一条循环控制语句,如例5-21所示,就可得到如图5.6所示的仿真波形。

【例5-21】EXIT语句的应用示例

img170

img171


图5.6 例5-21的仿真波形

EXIT语句有两种形式:

img172

img173

第一种形式为无条件退出;第二种形式是有条件退出,仅当<条件>为真时才退出。若未指定“循环标号”,则退出当前循环,若指定了循环标号,则退出循环标号所指定的循环,所以可以在多层循环的内层直接跳到任一指定的循环。如例5-22所示。

【例5-22】条件EXIT的应用示例

img174

在该例中,当loop1第一次循环后k的值为11,大于10即跳出外层循环loop2,执行“q<=k”,所以进程执行完毕后,q的值为11。若将语句“EXIT loop2 WHEN k>10;”换为“EXIT loop1 WHEN k>10;”或“EXIT WHEN k>10;”,则得到的“q”值为110。由此可以看出,EXIT语句的应用是非常灵活的,在使用时要谨慎,避免出错。

当程序需要处理保护、出错和警告状态时,也可使用EXIT语句为其提供快捷、简便的调试方法。

能在循环体内控制循环的语句,除了EXIT语句外还有NEXT语句。和EXIT语句一样,NEXT语句也位于循环体内的“顺序语句”中,对循环体的执行进行调控。NEXT语句也有两种形式,其语法格式为:

NEXT [循环标号];

NEXT [循环标号] WHEN〈条件〉;

该语句用在LOOP语句内部。它无条件地或有条件地中止当前循环迭代并开始下一次循环。若标号缺省,则NEXT 语句作用于当前循环,进入外层循环;若指定标号,则转至指定的循环继续运行。在有条件跳转中,仅当<条件>为真时,才跳转。如例5-23所示。

【例5-23】NEXT 语句的应用示例

ENTITY next_loop IS

img175

上例中,当loop1循环执行一次后,k=11,所以在loop1的第二次执行中,遇到“NEXT loop2 WHEN k>10”时,就结束了loop1循环,没有执行“k:=k+1”的操作,而是直接转至“loop2:LOOP”继续运行。该程序执行的结果q为101。

实际上,EXIT不但可以在INFINITE LOOP内使用,还可在FOR LOOP和WHILE LOOP中使用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈