VHDL的顺序行为
IF语句 CASE 语句 FOR语句 WHILE..LOOP语句 EXIT语句 断言语句
IF语句
IF语句的一般形式为: IF < 条件> THEN |
IF语句的一般形式是以关键字IF开头和关键字END IF结尾,END IF应分开写并且分开读。 |
例21:用VHDL设计一家用告警系统的控制逻辑,它有来自传感器的三个输入信号smoke、door、water和准备传输到告警设备的三个输出触发信号fire_alarm、burg_alarm、water_alarm以及使能信号en和alarm_en。VHDL程序描述如下:
LIBRARY ieee;
|
CASE 语句
CASE语句的一般形式:
CASE < 表达式> IS
WHEN < 值> => < 语句> ;
WHEN < 值> | < 值> => < 语句> ;
WHEN < 离散范围> => < 语句> ;
WHEN OTHERS => < 语句> ;
END CASE;
CASE语句是VHDL提供的另一种形式的控制语句,每当单个表达式的值在多个起作用的项中选择时,用此语句是较合适的,它根据所给表达式的值或域,选择“=>”后面的执行语句。
用CASE语句应该注意三个问题: 一是关键字WHEN的数量不作限制,但不容许两个语句用一个值; 二是CASE语句中WHEN后面的所有值合起来是表达式的值域; 三是WHEN的次序可以任意排定,但OTHERS必须在最后面,而且一个CASE 语句仅有一个OTHERS行。 |
FOR语句
FOR循环语句的一般形式为:
< 循环标号> :FOR < 循环变量> IN < 范围> LOOP
< 语句> ;
END LOOP < 循环标号> ;
下面举一两位二进制数乘方电路来说明循环FOR语句的用法:
例22:
FOR I IN 1 TO 3 LOOP 此例中循环语句变量为I,循环范围为“1 TO 3”,语句部分是乘方。
WHILE..LOOP循环语句的一般形式为: < 循环标号> :WHILE < 条件> LOOP 循环的条件是布尔表达式,在每次执行循环前检查条件为真时执行循环,为假时结束循环。 |
例23:
WHILE ( X< 10) LOOP 例题中语句部分执行的操作是加1,而表达式是X< 10。当X< 10为真时,执行语句部分X:= X+1,直到X等于10,表达式为假结束循环。 |
EXIT语句
上述两例是在不满足条件表达式或完成了循环的范围时退出循环,另一种退出循环是有严重错误发生时,EXIT语句允许提前退出正在执行的循环语句,去执行紧跟在循环语句后面的语句,下例解释这种情况。
例24:
在进程语句内部,假定int的值总是大于零。如果int的值是负或为0,则会得到一个错误的条件并且不能完成计算。此时,IF语句中的条件表达式为真,执行EXIT语句终止循环,去执行循环语句外面的另一条赋值语句Y <= q。循环语句还可以嵌套在另一个循环语句内部,使用EXIT语句,可以跳到较外的一个循环语句,也可以跳到循环最外部的程序,跳到哪里,视EXIT后面的标号而定,如: EXIT < 标号> ; |
断言语句
用断言语句对描述中的模型添加限制条件,报告一条文本的字符串。断言语句检查一个布尔表达式为真或为假,当条件为真,该语句任何事都不做;如果为假,断言语句将设计者规定的字符串输出到标准的输出终端,另外,还可以规定输出的严重级别,级别共分四种:注意(note)、告警(warning)、出错(error)和失败(failure)。按严重级别分类断言语句是设计者分析自己设计的电路的好办法,而且按断言语句的报告找到描述语言出错的位置。断言语句不构造硬件,主要用于模块的预期处理,所以和综合设计的硬件系统无关。
断言语句的一般形式如下:
ASSERT < 条件>
REPORT < 输出信息>
SEVERITY < 严重级别> ;
当条件为假时,系统的输出设备上将输出REPORT后面设计者规定的字符串信息和SEVERITY后面的严重级别。断言语句是非常有用的,它类似于C和Pascal语言中的陷井,当一些重要的限制未得到满足,或者发现不能处理的错误时,就会终止模拟分析过程,提供错误条件的性质和有用信息。下面讨论用VHDL语言设计RS触发器和断言语句在程序中的作用。