工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

VHDL的顺序行为

作者:dolphin时间:2011-05-03

VHDL的顺序行为


  顺序语句在进程语句内部,顺序行为语句可分为两大类:一是条件控制类,二是循环控制类。   

IF语句 CASE 语句 FOR语句 WHILE..LOOP语句 EXIT语句 断言语句

IF语句

IF语句的一般形式为:

IF 条件 THEN
   语句 ;
ELSIF 条件 THEN
   语句 ;
ELSIF 条件 THEN
   语句 ;
ELSE
   语句 ;
END IF;
  IF语句的一般形式是以关键字IF开头和关键字END IF结尾,END IF应分开写并且分开读。
  关键字ELEIF和ELSE是可选句,ELSIF可以多次使用,而ELSE仅可使用一次。
   条件部分是一个布尔表达式,即是一种算出是真或是假的表达式,当条件为真时去执行接下来的语句部分;如果条件为假就去执行接下来可选的顺序语句ELSIF或ELSE。

例21:用VHDL设计一家用告警系统的控制逻辑,它有来自传感器的三个输入信号smoke、door、water和准备传输到告警设备的三个输出触发信号fire_alarm、burg_alarm、water_alarm以及使能信号en和alarm_en。VHDL程序描述如下:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY alarm IS
PORT(smoke,door,water:IN std_logic;
en,alarm_en :IN std_logic;
fire_alarm,burg_alarm,water_alarm:OUT std_logic);
END alarm;
ARCHITECTURE alarm_arc OF alarm IS
BEGIN
PROCESS(smoke,door,water,en,alarm_en)
BEGIN
IF ((smoke= ‘1’) AND (en= ‘0’)) THEN
fire_alarm = ‘1’;
ELSE
fire_alarm = ‘0’;
END IF;
IF ((door= ‘1’) AND ((en= ‘0’) AND (alarm_en= ‘0’))) THEN
burg_alarm = ‘1’;
ELSE
burg_alarm = ‘0’;
END IF;
IF ((water= ‘1’) AND (en= ‘0’)) THEN
water_alarm = ‘1’;
ELSE
water_alarm = ‘0’;
END IF;
END PROCESS;
END alarm_arc;

程序中用了三个分开的IF语句描述其功能,它们都没有ELSIF关键字,可以看出每个IF语句描述了一个输出端口。第一个IF语句是检测有没有烟雾报警情况,有烟雾火警灾情发生立即产生报警信号,触发fire_alarm。第二和第三IF语句检测不同的报警信号,和第一句相仿。

此模块的输入端口有两个使能信号,en使所有的输入都能到达输出,而用alarm_en端口,只对防盗告警系统使能。需要指出的是这种功能很容易用逻辑方程描述,如前面的并行行为程序的例子。但是有时IF语句的形式是更可读、更容易理解。图8-11给出了报警控制逻辑电路图。




--------------------------------------------------------------------------------

CASE 语句

CASE语句的一般形式:


关键词: 顺序 行为

评论

技术专区