首页 百科知识 流程控制语句

流程控制语句

时间:2024-10-26 百科知识 版权反馈
【摘要】:在这种多选择控制的IF语句中,设置了多个条件。这个变量只能作为赋值源,而不能被赋值,它由LOOP语句自动声明。在程序中,FOR_LOOP语句输入a的值,逐位进行模2加法运算,用循环变量控制模2加法的次数,使循环体执行8次。单个LOOP语句是最简单的LOOP语句循环方式,这种循环语句需要引入其他控制语句才能确定,否则为无限循环。当LOOP内的顺序语句执行到NEXT语句时,无条件结束本次循环,跳回到循环体的开始位置,执行下一次循环。

5.2 流程控制语句

流程控制语句有IF语句、CASE语句、LOOP语句、NEXT语句和EXIT语句等5种。

5.2.1 IF语句

IF语句有下列3种格式。

『格式1』:门闩控制语句。

IF条件语句THEN

…顺序语句;…

END IF;

当程序执行到该IF语句时,就要判断IF语句所指定的条件是否成立。如果条件成立,则IF语句所包含的顺序处理语句将被执行;如果条件不成立,程序将跳过IF语句所包含的顺序处理语句,而向下执行IF语句的后继语句。这里的条件起到门闩控制作用。

『格式2』:2选1控制语句。

IF条件语句THEN

…顺序语句;…

ELSE

…顺序语句;…

END IF;

当IF条件成立时,程序执行THEN和ELSE之间的顺序语句部分;当IF语句的条件得不到满足时,程序执行ELSE和END IF之间的顺序处理语句。也就是说,依据IF所指定的条件是否满足,程序可以有两条不同的执行路径。

『格式3』:IF语句的多选择控制语句。

IF条件语句THEN

…顺序语句;…

ELSIF条件语句THEN

…顺序语句;…

ELSE

…顺序语句;…

END IF;

在这种多选择控制的IF语句中,设置了多个条件。当满足所设置的多个条件之一时,就执行该条件后的顺序处理语句。如果所有设置的条件都不满足,则执行ELSE和END IF之间的顺序处理语句。

IF语句中至少应有一个条件语句,条件语句必须由BOOLEAN表达式构成。IF语句根据条件语句产生的判断结果——TRUE或FALSE,有条件地选择执行其后面的顺序语句。

【例5.2.1】 4位带确认的全加器。

4位带确认的全加器由a[3...0]、b[3...0]作为两个加数输入信号,当按下确认按钮“OK”时,进行加法运算,sum[4...0]为和输出信号,其逻辑图如图5.2.1所示。

img194

图5.2.1 4位带确认的全加器的逻辑图

4位带确认的全加器的VHDL描述如下。

img195

4位带确认的全加器的仿真波形如图5.2.2所示。

img196

图5.2.2 4位带确认的全加器的仿真波形

【例5.2.2】 2选1数据选择器。

2选1数据选择器的逻辑图如图5.2.3所示,其中a、b是数据输入信号,s是选择控制信号,y是输出信号。2选1数据选择器的功能如表5.2.1所示。当选择信号s=0时,y=a;当选择信号s=1时,y=b。

img197

图5.2.3 2选1数据选择器的逻辑图

表5.2.1 2选1数据选择器的功能表

img198

2选1数据选择器的VHDL描述如下。

img199

【例5.2.3】 8-3线优先编码器。

8-3线优先编码器的功能如表5.2.2所示。

表5.2.2 8-3线优先编码器的功能表

img200

8-3线优先编码器的VHDL语言描述如下。

img201

【例5.2.4】 十进制循环加法计数器。

十进制循环加法计数器是指当时钟信号clk的上升沿来到时,计数器的状态加1,如果计数器的原态是9,则计数器返回到0的计数器。

十进制循环加法计数器的VHDL描述如下。

img202

十进制循环加法计数器的仿真波形如图5.2.4所示。

img203

图5.2.4 十进制循环加法计数器的仿真波形

5.2.2 CASE语句

CASE语句是根据表达式的值,从多项顺序语句中选择满足条件的一项来执行的语句。CASE语句的格式如下。

img204

img205

WHEN选择可以有以下4种表达方式。

(1)单个普通数值,即形如WHEN选择值img206顺序语句。

(2)并列数值,即形如WHEN值/值/值img207顺序处理语句。

(3)数值选择范围,即形如WHEN值TO值img208顺序语句。

(4)WHEN OTHERSimg209顺序处理语句。

执行CASE语句时,首先计算表达式的值,然后执行在条件语句中找到的选择值与其值相同的语句,并执行该顺序语句。当表达式的值与所有的条件句的选择值都不相同时,则执行OTHERS后面的顺序语句。注意:条件句中的“img210”不是操作符,而是相当于“then”的作用。

在使用CASE语句时有以下三点需要注意。

(1)CASE语句中的所有选择条件必须被枚举,不允许在WHEN语句中有相同的选择,否则编译将会给出语法出错的信息。

(2)所有WHEN后面的选择值在CASE语句中必须是表达式的所有取值,不能有所遗漏。如果CASE语句中的表达式包含多个值,一一列举十分烦琐,可以使用OTHERS来表示所有具有相同操作的选择。

(3)CASE语句中的WHEN语句可以颠倒次序而不会发生错误,但保留字OTHERS必须放在最后面。

【例5.2.5】 用CASE语句描述二输入与非门。

图5.2.5所示的为二输入与非门的逻辑图,其中a、b是输入信号,y是输出信号,输出与输入的逻辑关系表达式为

img211

表5.2.3所示为二输入与非门的真值表

img212

图5.2.5 二输入与非门的逻辑图

表5.2.3 二输入与非门的真值表

img213

二输入与非门用CASE语句的VHDL描述如下。

img214

img215

【例5.2.6】 用CASE语句描述4选1数据选择器。

4选1数据选择器的逻辑图如图5.2.6所示,其真值表如表5.2.4所列。数据选择器在控制信号s1和s2的控制下,从输入数据信号a、b、c、d中选择一个并传送到输出。

img216

图5.2.6 4选1数据选择器的逻辑图

表5.2.4 4选1数据选择器的真值表

img217

4选1数据选择器用CASE语句的VHDL描述如下。

img218

img219

【例5.2.7】 用CASE语句描述3-8线译码器。

3-8线译码器通过3个输入信号a(2downto 0)的不同组合,从8个输出端口y(7 downto 0)中选择一个作为有效输出端口,其功能如表5.2.5所示。

表5.2.5 3-8线译码器的功能表

img220

3-8线译码器的VHDL描述如下。

img221

img222

【例5.2.8】 用CASE语句描述一个七段码的共阴。

七段码的共阴的VHDL描述如下。

img224

5.2.3 LOOP语句

LOOP语句是循环语句,它使一组顺序语句重复执行,执行的次数由设定的循环参数确定。LOOP语句有三种使用方式,LOOP语句可以用“标号”给语句定位,也可以不使用“标号”来定位。

1.FOR_LOOP语句

FOR_LOOP语句的语法格式如下。

img225

FOR_LOOP循环语句适用于循环次数已定的程序,语句中的循环变量是一个临时变量,属于LOOP语句的局部变量,不必事先声明。这个变量只能作为赋值源,而不能被赋值,它由LOOP语句自动声明。

在FOR_LOOP循环语句中,关键字IN用来指定循环范围。循环范围有两种表示方式:“初值TO终值”和“初值DOWNTO终值”。

FOR_LOOP循环从循环变量的初值开始,到终值结束,每执行一次循环,循环变量自动递增或递减1。因此,循环次数=|终值-初值|+1。

【例5.2.9】 8位奇偶校验器的描述。

该8位奇偶校验器用a表示输入信号,它的长度为8b。在程序中,FOR_LOOP语句输入a的值,逐位进行模2加法运算(异或运算),用循环变量控制模2加法的次数,使循环体执行8次。

该程序实现8位奇偶校验器的奇校验功能,当电路检测到输入1的个数为奇数个时,输出y=1;若为偶数,则输出y=0。其VHDL描述如下。

img226

img227

8位奇偶校验器的仿真波形如图5.2.7所示。

img228

图5.2.7 8位奇偶校验器的仿真波形

【例5.2.10】 一个二进制数转换为十进制数的描述。

一个二进制数转换为十进制数的VHDL描述如下。

img229

2.WHILE_LOOP语句

WHILE_LOOP语句的语法格式如下。

img230

WHILE_LOOP循环语句并没有给出循环次数,没有自动递增循环变量的功能,它的循环次数由循环控制条件控制。循环控制条件可以是任何布尔表达式,如a=b、a>0等。当条件为TRUE时,执行循环体;当条件为FALSE时,跳出循环,执行循环体后面的语句。

【例5.2.11】 用WHILE_LOOP语句实现【例5.2.9】的奇偶校验器的VHDL描述。

img231

3.LOOP语句

LOOP语句的语法格式如下。

img232

单个LOOP语句是最简单的LOOP语句循环方式,这种循环语句需要引入其他控制语句(如EXIT、NEXT等)才能确定,否则为无限循环。

例如:

img233

5.2.4 NEXT语句

NEXT语句主要用在LOOP语句内部控制循环,其语法如下。

NEXT[标号][WHEN条件表达式];

NEXT语句的格式有以下3种。

『格式1』:

NEXT

当LOOP内的顺序语句执行到NEXT语句时,无条件结束本次循环,跳回到循环体的开始位置,执行下一次循环。

『格式2』:

NEXT LOOP标号

该语句的功能是,结束本次循环,跳转到“标号”指定的位置循环。

『格式3』:

NEXT[标号]WHEN条件表达式

这种语句的功能是,当“条件表达式”的值为TRUE时,结束本次循环,否则继续循环。

【例5.2.12】 下面为使用NEXT语句的VHDL描述。

img234

5.2.5 EXIT语句

EXIT语句也是用来控制LOOP的内部循环,进行有条件或无条件的跳转控制,其语法如下。

EXIT[标号][WHEN条件];

EXIT语句的格式有以下3种。

『格式1』:

EXIT

无条件跳出循环,执行END LOOP下面的顺序语句。

『格式2』:

EXIT标号

无条件跳出循环,转到“标号”规定的位置执行顺序语句。

『格式3』:

EXIT[LOOP标号]WHEN条件表达式

当“条件表达式”的值为“TRUE”时,才跳出循环,否则继续执行循环。

EXIT语句与NEXT语句的区别是:EXIT是从整个循环中跳出而结束循环;而NEXT语句是用来结束循环执行过程的某一次循环,并重新执行下一次循环。

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

我要反馈