电梯实验报告
1、 实验目的:
通过硬件描述 vhdl 语言的编程,深入了解并掌握可编程芯片 PLD
的设计技术,加强对《数字逻辑》课程所学知识综合运用的能力,熟
练地掌握 vhdl 语言的基本编程方法与基本的句式,培养自己的逻辑
思维能力与创作能力。
2、 实验内容:
设计一个四层的电梯系统,设计的具体内容如下图所示,
电梯每经过一层的运行时间为 5s,停止时间为 8s。电梯的初态为
一层。并且符合以下原则:楼层设置优先;就近原则;先上后下原则。
上下灯
4
3
2
1
楼层 时间
1
2
3
4
置入
reset 启动
3、 实验环境:
硬件环境 VHDL: VHDL 翻译成中文就是超高速集成电路硬件描述语言,
主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在
FPGA/CPLD/EPLD 的设计中。VHDL 主要用于描述数字系统的结构,行
为,功能和接口。VHDL 的程序结构特点是将一项工程设计,或称设
计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或
称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部
功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其
内部开发完成后,其他的设计就可以直接调用这个实体。具有“功能
强大设计灵活,易于共享和复用”等特点。
软件编程环境(isp):ispLEVER 是 lattice 公司推出的 EDA 软件,
适用于所有的 lattice 公司的 CPLD、SPLD、FPGA 可编程器件的设计。
能够对所涉及的系统进行功能仿真和时序仿真。编译器将设计输入生
成熔丝文件图文件,然后将熔丝文件下载到 ispLSI1032 芯片中,在
设计输入的过程中,常采用层次化设计方法,分模块、分层次的进行。
4、 实验设计方案:
输入说明:按键扫描时钟(buttonclk)、电梯时钟信号(clk)、异步
复位(reset)、一层上升请求端口(f1upbutton)、二层上升请求端口
(f2upbutton)、二层下降请求端口(f2dnbutton)、三层下降请求端口
(f3dnbutton)、三层上升请求端口(f3upbutton)、四层下降请求端口
(f4dnbutton)、一层停站请求端口(stop1button)、二层停站请求
端口(stop2button)、三层停站请求端口(stop3button)、 四层停站
请求端口(stop4button)、电梯位置信号(position(4downto1))、电
梯模式(上升或下降)信号(udsig)。
主要的程序代码说明:
定义状态变量
Type liftstate is :
(stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,d
oorwait4,doorwait5,doorwait6,doorwait7,doorwait8,
up,down,stop,swup1,swup2,swup3,swup4,swup5,swdn1,swdn2,
swdn3,swdn4,swdn5);
主要使用了 case 语句和 if 语句。
模块图:
定义元件库
输入端口
输出端口
状态机进程(主要进程)
定义 fourlift 实体
结构体 one
信号灯控制进程
按键信号灯进程
流程图:
电梯总流程图
初始化
有无运行信号
N
等待请求
Y
显示并判断上下行
有无符合要
求的同层信
号
Y
停止开门
消掉该层的信号
有无同向选层
信号
N
扫描电梯位置
N
上\下行
Y
停下取消选层信号
判断目的层是否
N
达到
Y
停止
上下行分模块流程图 :
5、 实验步骤与观察记录:
实验步骤部分:
1)
首先应考虑输入端口,一个异步复位端口 reset,用于系统
不正常是回到初始态,以及人在外面时的六个状态,在电梯内
部应该有各层停留的请求端口,一个电梯的时钟输入端口,还
有一个按键的端口;
2)
其次用该考虑输出,有升降请求就需要有个灯来显示一下,
同时电梯内部也需要有写等来显示,同时还需要有数码管显示
楼梯的层数以及经过的时间
3)
四层电梯的结构体设计状态机设计了状态分别是(初始化
状态)stopon1,(开门状态)dooropen,(关门状态)doorclose,
(开门时间的几个状态)doorwait1-8,(楼层上行时间的几个
状态)swup1-5,(下行时间的几个状态)swdn1-5,(上下行指
示)up down,(停滞状态)stop;
4)
状态机进程中电梯的状态多数由信号灯控制,通过对信号
灯的判断决定下一状态,而信号灯的控制又是由 clearup,
cleardn 来控制的
观察记录部分:
在调试程序的过程中出现了许多的逻辑错误,语法错误,开始的
时候仪器没有反应就只能凭借自己的经验来一步一步寻找其中的一
些 bug
后来一起有些反应就可以一步一步测试寻找看看哪些环节有所不足
然后去寻找对应的程序代码找出逻辑错误,等程序完善的差不多是就
可以考虑添加点附加功能。
6、 实验过程的分析处理以及讨论:
在完成编程以后要进行程序的编译与仿真,开始时总是忘记把
根目录建立在 d 盘以至于出现了各种各样的错误,改了根目录以后,
开始正式修改,前期程序有许多语法错误,总是少加了分号,或者忘
记写 end if 或者是把分号写成了汉语字符修改过来以后才开始编译。
编译通过以后,又出现了很多的逻辑错误,比如说在两个进程里
同时给灯赋值以至于程序的逻辑混乱不能正确的运行,在我们快把程
序功能实现时发现少了一个模块,就是程序不能够遵守先上后下的原
则然后我们就开始在程序里加上这个模块,可是在立刻开关门时程序
又出现了错误,我们没有找到逻辑的问题就只能把这段代码删掉重新
换一种思路。参照了别人的意见。最终终于解决这个问题。
7、 实验方案的改进意见:
在这个电梯试验中,我们可以看见很明显的漏洞,比如说没有
超重的提示,没有电梯内的照明灯,而一般的四层楼是不会安
装电梯的这样过于浪费资源,应该多设计一下电梯的层数,电
梯内没有信号如果电梯坏了应该需要自动向外界报警,还应该
注意一下防抖动的措施,当突然没电的时候电梯不能够掉下去,
应添加安全的措施。我们虽然只是一个实验报告,可是还是应
该尽量向现实中的电梯接近。
8 实验感想:
这次的课设实验时间是比较紧的,只有 7 天的时间而且之前我
们对于 VHDL 语言知之不多,所以只能一边学一遍编译程序,
同时我们还借鉴的了老师给的源程序,感觉只是开始时定义输
入输出信号时遇上了很大的问题,原因是我们没有弄清逻辑就
开始定义各种端口,导致了端口的错误,然后我们只能从头开
始分析课设,建立正确的流程图,然后开始编译程序,从中遇
上的各种问题也教育我们编程不能够疏忽,一个符号的疏忽可
能会导致检查错误半个小时。在编程之前要想好之间的逻辑关
系这样才不容易出差错。