基于FPGA三层电梯控制器程序—VHDL 下载本文

内容发布更新时间 : 2024/5/19 23:24:58星期一 下面是文章的全部内容请认真阅读。

library ieee;--库的说明

use ieee.std_logic_1164.all;--程序包的说明 use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

entity threelift is --实体

port(buttonclk:in std_logic;--按键时钟信号 liftclk:in std_logic;--电梯时钟信号 reset:in std_logic;--异步复位端口 f1upbutton:in std_logic;--一层上升请求端口 f2upbutton:in std_logic;--二层上升请求端口 f2dnbutton:in std_logic;--二层下降请求端口 f3dnbutton:in std_logic;--三层下降请求端口

fuplight:buffer std_logic_vector(3 downto 1);--上升请求寄存信号 fdnlight:buffer std_logic_vector(3 downto 1);--下降请求寄存信号 stop1button,stop2button,stop3button:in std_logic;--停站请求端口 stoplight:buffer std_logic_vector(3 downto 1);--停站请求寄存信号 position:buffer integer range 1 to 3;--电梯位置信号 doorlight:out std_logic;--开关门信号

udsig:buffer std_logic);--电梯模式(上升或下降)信号 end threelift;

architecture art of threelift is--结构体 type lift_state is--定义十个状态

(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,doorwait4,up,down,stop); signal mylift:lift_state;

signal clearup:std_logic;--上升和停站请求清除信号 signal cleardn:std_logic;--下降和停站请求清除信号 begin

controlift:process(reset,liftclk)--状态机进程 variable pos:integer range 3 downto 1; begin

if reset='1' then

mylift <= stopon1;--异步复位,电梯的初始状态为一层开门状态 clearup <= '0'; cleardn <= '0'; pos:=1;

position<=1; else

if liftclk'event and liftclk='1' then case mylift is

when stopon1 => doorlight <= '0';

position <= 1; pos:=1;

mylift <= doorwait1;--电梯等待4s when doorwait1 => mylift <=doorwait2; when doorwait2 => clearup<='0'; cleardn<='0'; mylift <=doorwait3;

when doorwait3 => mylift <=doorwait4; when doorwait4 => mylift <= doorclose;

when doorclose => doorlight <= '1';--关门,判定电梯下一个运行方式 if udsig='0' then--电梯处在上升模式 if position=3 then

if stoplight=\没有请求信号时,电梯停在当前层

udsig <= '1'; mylift <= doorclose;

elsif fdnlight(3)='0' or stoplight(3)='0' then--本层有请求信号是,电梯开门

udsig<='1'; mylift<=dooropen;

else --否则下降