EDA课程设计电梯控制器设计Word格式.docx
《EDA课程设计电梯控制器设计Word格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计电梯控制器设计Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
![EDA课程设计电梯控制器设计Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/24/938fbfe3-f216-4fc6-b800-cad9b2858265/938fbfe3-f216-4fc6-b800-cad9b28582651.gif)
将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
4、行为仿真和功能仿真。
利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。
5、适配。
利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。
适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。
6、功能仿真和时序仿真。
7、下载。
如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。
8、硬件仿真与测试。
1.4VHDL的介绍
VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本。
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。
3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
2电梯控制器的设计要求
2.1课程设计的目的
本次设计的目的就是通过实践深入理解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。
通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。
通过对实用电梯控制系统的设计,巩固和综合运用所学知识,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
2.2课程设计的基本要求
电梯控制器是控制电梯按顾客要求自动上下的装置。
本文采用VHDL语言来设计实用六层电梯控制器,其代码具有良好的可读性和易理解性,源程序经A1tera公司的MAX+plusII软件仿真。
通过对四层电梯控制器的设计,可以发现本设计有一定的扩展性,而且可以作为更多层电梯控制器实现的基础。
通过独立的设计,能够完整的完成老师分配的课程设计任务。
通过对电梯控制系统的设计,掌握所学EDA课程的基本知识和对VHDL语言的综合设计应用。
通过课程设计,提高设计能力,提高分析解决实际问题的能力,并在设计中了解硬件编程的流程和思路,为以后工作和发挥技术打下基础。
3电梯控制器的综合设计
3.1电梯控制器的功能
1、
每层电梯的入口处设有上下请求开关,电梯内设有乘客到达层次的停站请求开关。
2、
设有电梯所处位置指示装置及电梯运行模式(上升或下降)指示装置。
3、
电梯每秒升降一层。
4、
电梯到达有停站请求的楼层后,经过1s电梯打开,开门只是灯亮,开门4s后,电梯门关闭(关门指示灯灭),电梯继续运行,直至执行完请求信号后停在当前楼层。
5、
能记忆电梯内外的所以请求信号,并按照电梯运行规则依次响应,每个请求信号保留至执行后消除。
6、
电梯运行规则:
当电梯处于上升模式时,只响应比电梯所在位置高的上楼信号,由下至上依次执行,直到最后一个上楼请求执行完毕,如更高层有下楼请求时,则直接升到有下降请求的最高楼接客,然后进入下降模式,但电梯处于下降模式时,则与上升模式相反。
7、
电梯初始状态为一层门开。
3.2电梯控制器的设计方案
控制器的功能模块如图1所示,包括主控制器、分控制器、楼层选择器、状态显示器、译码器和楼层显示器。
乘客在电梯中选择所要到达的楼层,通过主控制器的处理,电梯开始运行,状态显示器显示电梯的运行状态,电梯所在楼层数通过译码器译码从而在楼层显示器中显示。
分控制器把有效的请求传给主控制器进行处理,同时显示电梯的运行状态和电梯所在楼层数。
由于分控制器相对简单很多,所以主控制器是核心部分。
电梯控制器采用状态机来实现,思路比较清晰。
可以将电梯等待的每秒钟以及开门、关门都看成一个独立的状态。
由于电梯又是每秒上升或下降一层,所以就可以通过一个统一的1秒为周期的时钟来触发状态机。
根据电梯的实际工作情况,可以把状态机设置10个状态,分别是“电梯停留在第1层”、“开门”、“关门”、“开门等待第1秒”、“开门等待第2秒”、“开门等待第3秒”、“开门等待第4秒”、“上升”、“下降”和“停止状态”。
各个状态之间的转换条件可由上面的设计要求所决定。
3.3电梯控制器的实体设计
首先考虑输入端口,一个异步复位端口reset,用于在系统不正常时回到初始状态;
在电梯外部,必须有升降请求端口,一层是最低层,不需要有下降请求,四层是最高层,不需要有上升请求,二层则上升、下降请求端口都有;
在电梯的内部,应该设有各层停留的请求端口:
一个电梯时钟输入端口,该输入时钟以1秒为周期,用于驱动电梯的升降及开门关门等动作;
另有一个按键时钟输入端口,时钟频率比电梯时钟高。
其次是输出端口,有升降请求信号以后,就得有一个输出端口来指示请求是否被响应,有请求信号以后,该输出端口输出逻辑‘l’。
被响应以后则恢复逻辑‘O’;
同样,在电梯内部也应该有这样的输出端口来显示各层停留是否被响应;
在电梯外部,需要一个端口来指示电梯现在所处的位置;
电梯开门关门的状态也能用一个输出端口来指示;
为了观察电梯的运行是否正确,可以设置一个输出端口来指示电梯的升降状态。
3.4电梯控制器的结构体设计
首先说明一下状态。
状态机设置了lO个状态,分别是电梯停留在l层(stoponl)、开门(dooropen)、关门(doorclose)、开门等待第1秒(doorwaitl)、开门等待第2秒(doorwait2)、开门等待第3秒(doorwait3)、开门等待第4秒(doorwait4)、上升(up)、下降(down)和停止(stop)。
在实体说明定义完端口之后,在结构体architecture和begin之间需要有如下的定义语句,来定义状态机。
TYPElift_stateIS
(stoponl,dooropen,doorclose,doorwaitl,doorwait2,doorwait3,doorwait4,up,down,stop):
SIGNALmylift:
lift_state:
在结构体中,设计了俩个进程互相配合,一个是状态机进程作为主要进程,另外一个是信号灯控制进程作为辅助进程。
状态机进程中的很多判断条件是以信号灯进程产生的信号灯信号为依据的,而信号灯进程中信号灯的熄灭又是由状态机进程中传出的clearup和cleardn信号来控制。
在状态机进程中,在电梯的上升状态中,通过对信号灯的判断,决定下一个状态是继续上升还是停止;
在电梯下降状态中,也是通过对信号灯的判断,决定下一个状态是继续下降还是停止;
在电梯停止状态中,判断是最复杂的,通过对信号的判断,决定电梯是上升、下降还是停止。
在信号灯控制进程中,由于使用了专门的频率较高的按键时钟,所以使得按键的灵敏度增大,但是时钟频率不能过高,否则容易使按键过于灵敏。
按键后产生的点亮的信号灯(逻辑值为‘1’)用于作为状态机进程中的判断条件,而clearup和cleardn信号为逻辑‘l’使得相应的信号灯熄灭。
3.5电梯控制器的VHDL
libraryieee;
--库声明
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
--实体代码
entityfourliftis
port(reset:
instd_logic;
sys_clk,key_clk:
--系统时钟按键时钟
f1_up_key:
--一楼上升按键
f2_up_key:
--二楼上升按键
f2_dn_key:
--二楼下降按键
f3_up_key:
--三楼上升按键
f3_dn_key:
--三楼下降按键
f4_dn_key:
--四楼下降按键
stop1_key:
--一层停站请求端口
stop2_key:
--二层停站请求端口
stop3_key:
--三层停站请求端口
stop4_key:
--四层停站请求端口
close_key:
--关门请求端口
f_up_status:
bufferstd_logic_vector(4downto1);
--上升的状态寄存信号
f_dn_status:
--下降的状态寄存信号
f_stop_status:
--停站的状态寄存信号
position:
bufferintegerrange1to4;
--楼层的位置状态
lift_mode:
bufferstd_logic;
--电梯运行模式1为上升0为下降
door_status:
outstd_logic);
--电梯门的状态1为开0为关
endentityfourlift;
--结构体代码
architectureoneoffourliftis
typestatesis(stop_on1,door_open,door_close,door_wait1,door_wait2,door_wait3,door_wait4,up,down,stop);
--定义各状态子类型
signallift_state:
states;
signalclear_up:
std_logic;
--上升和停站请求清除信号
signalclear_dn:
--下降和停站请求清除信号
begin
reg:
process(reset,sys_clk)--状态进程
variablepos1:
integerrange4downto1;
--定义一个楼层的局部变量
begin
ifreset='
1'
then--复位有效
lift_state<
=stop_on1;
clear_up<
='
0'
;
clear_dn<
else
if(sys_clk'
eventandsys_clk='
)then--上升沿
caselift_stateis
whenstop_on1=>
door_status<
--
position<
=1;
pos1:
=1;
=door_wait1;
whendoor_wait1=>
lift_state<
=door_wait2;
whendoor_wait2=>
=door_wait3;
clear_up<
clear_dn<
whendoor_wait3=>
=door_wait4;
whendoor_wait4=>
=door_close;
whendoor_close=>
door_status<
--关门判断电梯的下一个运行方式
iflift_mode='
then--下降模式
ifposition=4then--在4层
if(f_up_status="
0000"
andf_dn_status="
andf_stop_status="
)then--没有请求信号时电梯停在当前层
lift_mode<
='
elsif(f_dn_status(4)='
andf_stop_status(4)='
)then--本层有请求信号时开门
=door_open;
elselift_mode<
=down;
--否则下降
endif;
elsifposition=3then--
elsif(f_up_status(3)='
orf_stop_status(3)='
)then--本层有上升和停站请求时
elsif(f_up_status="
0100"
)then--只有3层有下降请求电梯开门
orf_stop_status(4)='
)then--当四层有下降和停请求信号时
=up;
elsifposition=2then--
elsif(f_up_status
(2)='
orf_stop_status
(2)='
0010"
)then--只有2层有下降请求电梯开门
orf_dn_status(3)='
orf_up_status(3)='
)then
elsifposition=1then--
elsif(f_up_status
(1)='
orf_stop_status
(1)='
whenup=>
=position+1;
pos1:
=pos1+1;
--电梯楼层数加一
ifpos1<
4and(f_up_status(pos1)='
orf_stop_status(pos1)='
=stop;
elsifpos1=4and(f_up_status(pos1)='
elselift_state<
whendown=>
=position-1;
=pos1-1;
--电梯楼层数减一
ifpos1>
1and(f_dn_status(pos1)='
)then
elsifpos1=1and(f_dn_status(pos1)='
whenstop=>
whendoor_open=>
iflift_mode='
then
ifposition<
4and(f_up_status(pos1)='
elsiflift_mode='
ifposition>
1and(f_dn_status(pos1)='
else
endcase;
endprocessreg;
com:
process(reset,key_clk)--控制进程
ifreset='
then--复位寄存器信号清零
f_up_status<
="
f_dn_status<
f_stop_status<
if(key_clk'
eventandkey_clk='
)then--key—clk上升沿触发
iff1_up_key='
then--记忆各层上升请求
f_up_status
(1)<
iff2_up_key='
f_up_status
(2)<
iff3_up_key='
f_up_status(3)<
ifclear_up='
f_up_status(position)<
f_stop_status(position)<
iff4_dn_key='
then--记忆各层下降请求
f_dn_status(4)<
iff3_dn_key='
f_dn_status(3)<
iff2_dn_key='
f_dn_status
(2)<
ifclear_dn='
f_dn_status(position)<
ifstop1_key='
f_stop_status
(1)<
ifstop2_key='
f_stop_status
(2)<
ifstop3_key='
f_stop_status(3)<
ifstop4_key='
f_stop_status(4)<
endprocesscom;
enda