50层电梯的VHDL程序的设计方案.docx
- 文档编号:6932788
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:72
- 大小:94.19KB
50层电梯的VHDL程序的设计方案.docx
《50层电梯的VHDL程序的设计方案.docx》由会员分享,可在线阅读,更多相关《50层电梯的VHDL程序的设计方案.docx(72页珍藏版)》请在冰豆网上搜索。
50层电梯的VHDL程序的设计方案
50层电梯的VHDL程序设计方案
第一部分设计任务
电梯程序设计
设计一个50层的电梯程序,实现以下功能:
功能:
(1)用LED显示电梯的行进过程,即用数码管显示电梯当前所在楼层的位置。
(2)在每层电梯的入口处有两个按钮上升请求(up)和下降请求(down),按钮按下时则对应的LED亮。
(3)电梯到达了有请求的楼层之后,把门打开。
停留15秒之后,把门关闭。
(4)电梯的运行遵循方向优先原则:
当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下面上逐个执行,直到最后一个上楼请求执行完毕,如更高层有下楼请求则直接上升到有下楼请求的最高层,然后进入下降模式;当电梯处于下降模式时,运行规则与上升模式刚好相反。
第二部分设计方案
本次设计采用FPGA来实现对电梯程序的控制的,并采用VHDL语言输入的方式实现。
整个系统分为两大组成模块:
电梯控制器主体模块,完成各项控制进程,输出电路运行状态;显示模块,实现电梯控制器显示输出。
一、电梯控制器主体模块
图1
如图所示,clk是分频后1Hz的时钟信号,作为FPGA的时钟输入信号,电梯的模块输入的信号有:
电梯外请求信号(包括上升请求和下降请求信号)、电梯请求信号(即选定电梯停止的楼层的位置)。
电梯模块的输出包括:
楼层显示(posidisplay1为十位显示,posidisplay0)、上升请求信号显示(uplight)、下降请求信号显示(downlight)、电梯请求信号显示(stoplight)以及电梯门打开信号(doorlight)。
其中,请求信号高电平有效,doorlight=’1’时表示电梯门打开,反之则表示门关闭。
本次设计设置了电梯运行的几种状态,它们分别是:
stopon1(电梯停在一楼),dooropen(电梯门打开)、doorclose(电梯门关闭)、up(电梯上升)、down(电梯下降)、stop(停止)。
能过在不同的情况下对电梯状态的转换来实现电梯的升降、停止以及开门的动作。
程序运行时,先对电梯进行初始化,让电梯停在第一层,门打开,电梯运行方向的标志udsig=’0’(上升),即令
doorlight<=’1’,position<=1,pos:
=1,udsig<=’0’,cdisplay<=”0001”。
15秒钟后电梯门关闭,对电梯外的请求信号进行判断。
无请求信号时,电梯一直处于初始状态(即电梯门关闭,停在第一层);若有上升或下降请求信号时,电梯上升到请求信号所在的楼层,然后电梯门打开同时清除所在楼层相应的请求信号,在停留15秒钟之后,电梯门关闭,电梯根据电梯信号的请求上升或下降,最后停留在请求停止的楼层。
在电梯上升的进程中,电梯首先对所在楼层以上的上升请求信号发生响应,而忽略下降请求信号,只有在上升过程停止后,电梯才开始对下降请求信号做出相应的处理。
电梯在处于下降时也一样,首先对下降请求信号作出响应,在下降过程停止后,才开始对上升请求信号作出相应的响应,电梯在对请求信号作出响应后都会清除相应的请求信号。
若无请求信号时,电梯会停在最后停止时所在的楼层并且保持门关闭的状态,直至有请求信号产生时为止。
对电梯进行复位时,电梯回到stopon1状态。
电梯运行的流程图如图2所示。
二、显示模块
引脚介绍:
Ledin[3..0]:
数据输入
Ledout[3..0]:
数码管译码输出
三、顶层模块设计
图3
引脚介绍:
clk:
时钟输入
reset:
复位键输入
up_button[49..1]:
楼层上升请求信号输入
down_button[50..2]:
楼层下降请求信号输入
stop_button[50..1]:
停止楼层选择信号输入
uplight[50..1]:
跟up_button对应的指示灯信号输出
downlight[50..0]:
跟down_button对应的指示灯信号输出
stoplight[50..1]:
跟stop_button对应的指示灯信号输出
posdis1[6..0]:
楼层位置显示(十位)输出
posdis0[6..0]:
楼层位置显示(个位)输出
tdis[6..0]:
倒计时显示输出
doorlight:
开门信号输出
第三部分仿真分析
一、电梯控制器主体模块仿真
令up_button[5]=’1’,up_button[9]=’1’,stop_button[12]=’1’,stop_button[17]=’1’,stop_button[41]=’1’,stop_button[50]=’1’;down_button[44]=’1’,则出现上图所示的仿真波形
从中我们可以看出电梯运行正常。
二、显示模块仿真
第四部分源程序
顶层模块程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitytopis
port(clk,reset:
instd_logic;
up_button:
instd_logic_vector(49downto1);---电梯外各楼层上升请求信号
down_button:
instd_logic_vector(50downto2);--电梯外各楼层下降请求信号
stop_button:
instd_logic_vector(50downto1);--电梯楼层停止请求信号
uplight:
bufferstd_logic_vector(50downto1);--跟up_button对应的指示灯信号
downlight:
bufferstd_logic_vector(50downto1);--跟down_button对应的指示灯信号
stoplight:
bufferstd_logic_vector(50downto1);--跟stop_button对应的指示灯信号
posdis1:
outstd_logic_vector(6downto0);--楼层显示(十位)
posdis0:
outstd_logic_vector(6downto0);--楼层显示(个位)
tdis:
outstd_logic_vector(6downto0);--5秒倒计时
doorlight:
outstd_logic);--开门信号输出
endtop;
architecturebehavoftopis
componentfliftis
port(clk:
instd_logic;
reset:
instd_logic;
up_button:
instd_logic_vector(49downto1);---电梯外各楼层上升请求信号
down_button:
instd_logic_vector(50downto2);--电梯外各楼层下降请求信号
stop_button:
instd_logic_vector(50downto1);--电梯楼层停止请求信号
uplight:
bufferstd_logic_vector(50downto1);--跟up_button对应的指示灯信号
downlight:
bufferstd_logic_vector(50downto1);--跟down_button对应的指示灯信号
stoplight:
bufferstd_logic_vector(50downto1);--跟stop_button对应的指示灯信号
posdisplay1:
outstd_logic_vector(3downto0);----楼层显示(十位)
posdisplay0:
outstd_logic_vector(3downto0);--楼层显示(个位)
tdisplay:
outstd_logic_vector(3downto0);--5秒倒计时
doorlight:
outstd_logic);--开门信号输出
endcomponent;
componentledis
port(
ledin:
instd_logic_vector(3downto0);
ledout:
outstd_logic_vector(6downto0)
);
endcomponent;
signals0,s1,s2:
std_logic_vector(3downto0);
begin
U1:
fliftportmap(clk,reset,up_button,down_button,stop_button,uplight,downlight,stoplight,s0,s1,s2,doorlight);
U2:
ledportmap(s0,posdis1);
U3:
ledportmap(s1,posdis0);
U4:
ledportmap(s2,tdis);
endbehav;
电梯控制器主体模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfliftis
port(clk:
instd_logic;
reset:
instd_logic;
up_button:
instd_logic_vector(49downto1);---电梯外各楼层上升请求信号
down_button:
instd_logic_vector(50downto2);--电梯外各楼层下降请求信号
stop_button:
instd_logic_vector(50downto1);--电梯楼层停止请求信号
uplight:
bufferstd_logic_vector(50downto1);--跟up_button对应的指示灯信号
downlight:
bufferstd_logic_vector(50downto1);--跟down_button对应的指示灯信号
stoplight:
bufferstd_logic_vector(50downto1);--跟stop_button对应的指示灯信?
posdisplay1:
outstd_logic_vector(3downto0);----楼层显示(十位)
posdisplay0:
outstd_logic_vector(3downto0);--楼层显示(个位)
tdisplay:
outstd_logic_vector(3downto0);--5秒倒计时
doorlight:
outstd_logic);--开门信号输出
end;
architecturebehavoffliftis
typestate_typeis(stopon1,dooropen,doorclose,wait1,wait2,wait3,wait4,wait5,wait6,wait7,wait8,wait9,wait10,wait11,wait12,wait13,wait14,wait15,up,down,stop,
swup2,swup3,swup4,swup5,swdn2,swdn3,swdn4,swdn5);
signalstate:
state_type:
=stopon1;
signalclearup,cleardn:
std_logic;
signaludsig:
std_logic;--部上升下降的判断标识,udsig='1'时表示下降,反之表示上升
signalposition:
integerrange1to50;
begin
zhuang_tai:
process(clk,reset)--clk1HZ脉冲
variablepos:
integerrange50downto1;
begin
ifreset='1'then
state<=stopon1;
clearup<='0';
cleardn<='0';
elsifrising_edge(clk)then
casestateis
whenstopon1=>doorlight<='1';position<=1;pos:
=1;state<=wait1;udsig<='0';--posdisplay1<="0000";posdisplay0<="0001";--初始状态
whenwait1=>state<=wait2;--停15秒
whenwait2=>clearup<='0';cleardn<='0';state<=wait3;
whenwait3=>state<=wait4;
whenwait4=>state<=wait5;
whenwait5=>state<=wait6;
whenwait6=>state<=wait7;
whenwait7=>state<=wait8;
whenwait8=>state<=wait9;
whenwait9=>state<=wait10;
whenwait10=>state<=wait11;
whenwait11=>state<=wait12;
whenwait12=>state<=wait13;
whenwait13=>state<=wait14;
whenwait14=>state<=wait15;
whenwait15=>state<=doorclose;
whendoorclose=>doorlight<='0';
ifudsig='0'then--上升情况
ifposition=50then----电梯在50楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='1';state<=doorclose;
else
udsig<='1';state<=down;
endif;
elsifposition=49then--电梯在49楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight(50)='1'ordownlight(50)='1'then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=48then--电梯在48楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"0FFFFFFFFFFFF"ordownlight>X"0FFFFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=47then--电梯在47楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"07FFFFFFFFFFF"ordownlight>X"07FFFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=46then--电梯在46楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"03FFFFFFFFFFF"ordownlight>X"03FFFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=45then--电梯在45楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"01FFFFFFFFFFF"ordownlight>X"01FFFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=44then--电梯在44楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"00FFFFFFFFFFF"ordownlight>X"00FFFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=43then--电梯在43楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"007FFFFFFFFFF"ordownlight>X"007FFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=42then--电梯在42楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"003FFFFFFFFFF"ordownlight>X"003FFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=41then--电梯在41楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"001FFFFFFFFFF"ordownlight>X"001FFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=40then--电梯在40楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"000FFFFFFFFFF"ordownlight>X"000FFFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=39then--电梯在39楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"0007FFFFFFFFF"ordownlight>X"0007FFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=38then--电梯在38楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"0003FFFFFFFFF"ordownlight>X"0003FFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=37then--电梯在37楼
ifstoplight="0"anduplight="0"anddownlight="0"then
udsig<='0';state<=doorclose;
elsifstoplight>X"0001FFFFFFFFF"ordownlight>X"0001FFFFFFFFF"then
udsig<='0';state<=up;
else
udsig<='1';state<=down;
endif;
elsifposition=36then--电梯在36楼
ifstoplight="0"anduplight="0"anddownlight="0"then
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 50 电梯 VHDL 程序 设计方案