background image

3.1 三层电梯控制器的实体设计
    首先考虑输入端口,一个异步复位端口 reset,用于在系统不正常时回到初始状态;
在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,三层是最高层,
不需要有上升请求,二层则上升、下降请求端口都有;在电梯的内部,应该设有各层停留
的请求端口:一个电梯时钟输入端口,该输入时钟以 1 秒为周期,用于驱动电梯的升降
及开门关门等动作;另有一个按键时钟输入端口,时钟频率比电梯时钟高。
    其次是输出端口,有升降请求信号以后,就得有一个输出端口来指示请求是否被响应,

有请求信号以后,该输出端口输出逻辑 l’

。被响应以后则恢复逻辑 O’;同样,在电梯内

部也应该有这样的输出端口来显示各层停留是否被响应;在电梯外部,需要一个端口来
指示电梯现在所处的位置;电梯开门关门的状态也能用一个输出端口来指示;为了观察
电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。

3.2 三层电梯控制器的结构体设计

    首先说明一下状态。状态机设置了 lO 个状态,分别是电梯停留在 l 层(stoponl)、开门
(dooropen)、关门(doorclose)、开门等待第 1 秒(doorwaitl)、开门等待第 2 秒
(doorwait2)、开门等待第 3 秒(doorwait3)、开门等待第 4 秒(doorwait4)、上升(up)、下
降(down)和停止(stop)。在实体说明定义完端口之后,在结构体 architecture 和 begin
之间需要有如下的定义语句,来定义状态机。
    TYPE lift_state IS
    (stoponl,dooropen,doorclose,doorwaitl,doorwait2,doorwai 
t3,door 。wai t4,up,down,s top):
    SIGNAL mylift:lift_state:
    在结构体中,设计了俩个进程互相配合,一个是状态机进程作为主要进程,另外一个
是信号灯控制进程作为辅助进程。状态机进程中的很多判断条件是以信号灯进程产生的信
号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的 clearup
和 cleardn 信号来控制。
    在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继
续上升还是停止;在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继
续下降还是停止;在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯
是上升、下降还是停止。
    在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏
度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。按键后产生的点亮的信号灯
(

逻辑值为 1’)用于作为状态机进程中的判断条件,而 clearup 和 cleardn

信号为逻辑 l’

使得相应的信号灯熄灭。
3.3 三层电梯控制器 VHDL 设计
    三层电梯控制器的 VHDL 描述模块流程如图 2 所示。三层电梯控制器的源代码(见附录)

 

可知: