|
(1) 无条件loop语句
无条件loop语句是简单循环语句,其中包含一个无限循环执行的语句集,其形式为;
标号:loop
语句;
end loop 标号;
循环标号是可选项。从语法上讲,循环体中的语句中还可以有循环语句,因而在一个循环语句里可以嵌套另外的循环语句。
如果语句中没有exit语句,则这样的循环语句无限循环,不会停止。但exit语句可以使它结束循环,参看下面的exit语句的介绍。
(2) for… loop语句
for…loop语句类似于程序设计语言的for 语句。循环次数由一个离散范围的循环变量来控制。其形式为:
标号:for 循环变量 in 离散范围 loop
语句;
end loop [标号];
循环变量由离散范围确定其类型,无需声明。循环变量可用在循环体中,但一旦循环结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。标号可以省略。离散范围的表示与数组类型下标范围定义相同。可以用to,downto,和表示离散范围的属性T'Range等。
(3) while … loop语句
while循环的条件是布尔类型。并且在条件为假时结束循环。while循环语句的一般形式是:
标号:while 条件表达式 loop
语句;
end loop 标号;
每次执行完循环体之后,都要检测条件表达式的值是真还是假。只要其值为真,就要在执行一次循环体内的语句。
(4) next语句
该语句控制循环提前进入下一次循环,即跳过该语句后面的语句执行指定标号的下一个循环
next [标号] [when 条件];
循环标号与条件都是可选项。执行了next语句之后.控制就转到由循环标号标识的循环体的尾部(如果未给出循环标号,就转到当前循环的尾部),并且开始新的一次循环。for循环通过循环变量的递增来控制循环,而while循环则通过不断地测试所给的条件,从而达到控制循环的目的。如果next语句有判断条件,则对条件进行测试,并且测试结果为真时,就退出当前一轮循环,同时进入下一轮迭代;若测试结果为假,则不执行next语句,直接执行该语句后面的语句。
若不指定标号,指当前的循环。若指定了条件,则在不满足条件的情况下该语句无效。
(5) exit语句
exit语句使得从循环标号所标明的循环中退出。
exit [标号] [when 条件] ;
如果指定条件,必须要在所绐条件为真的前提下,才从循环标号所标明的循环中退出。两种情况下的循环标号都是可选项。如果语句中末给出循环标号,则从当前循环中退出。
例:
signal S: Integer;
process (S)
variable B: Integer := 1;
begin
B := 100;
loop1:
for A in 10 downto 1 loop
loop2:
while B >= (A*A) loop
B := B-A;
end loop loop2;
…;
end loop loop1;
S <= …;
end process;
上例中loop2部分等价于:
loop2:
loop
B := B-A;
next loop1 when B<(A*A);
end loop loop2;
|