基于FPGA设计的智能电梯控制器设计WORD文档+quartus13.0工程Verilog源码文件,可以做为你的课程设计参考。
1.1 设计要求
① 楼层的高度大于等于6,根据降低运行成本的原则,设计并实现一个以方向优先电梯调度算法。
②要求能够使用按键模拟对电梯的控制,为了便于观察,将电梯所在的楼层(1~6)用数码管显示出来,将电梯的上下楼状态(上,下,开门,关门,静止)用发光管或数码管显示出来,并且能够实现对电梯实现锁定禁止运行。
③ 画出电梯控制器的状态机,写出状态编码方案。
④ 用Verilog语言对设计进行描述,并下载到实验板上调试成功,适当增加比较符合现实的控制限制。
⑤ 写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。 并谈谈此次实验的收获、感想及建议
1.2 设计思路
我把电梯的状态分为三种:上升、下降、停留(其中包括开门、关门、禁止),状态分别编码为00、01、10来识别。楼层设计为六层,一般的电梯在每层外面都有上下请求的按钮,还有电梯内部的一楼到六楼的请求,以及持续开门、关门的请求。我们可以通过按键的输入对各种变量进行赋值,代表不同的请求,然后用case语句分各个楼层进行条件判断,每层分为两大块的响应,即本层有无需求,若有需求,则进行开门动作,若无需求,则分上升的状态和下降和停留的状态,分别又有不同的请求(除第一层和第六层特殊,只有上升的或下降的请求),上升下降分别作不同的响应(主要对i值进行变化)即可
输入主要用按键实现(六个楼层加向上向下两个,共八个),电梯的状态分为4种,上升,下降,停留,禁止分别用4个LED灯来表示,用数码管显示电梯所在楼层。对电梯的锁定操作,是同时按上下两个按键,电梯锁定的操作是电梯自动回到一楼,并对请求无任何响应。
之后对该系统进行了改进,对于开门与关门的区别,我采用LCD显示,主要是对停留状态进行进一步分解,停留时对LCD显示进行控制,从而显示开门关门状态。
module dianti(ledup,leddown,ledforbid,ledstay,A,B,c1,c2,c3,c4,c5,c6,clock,out,LCD_DATA,LCD_EN, LCD_RS, LCD_RW, LCD_ON, LCD_BLON,test);
output ledup,leddown,ledstay,ledforbid;
output [6:0]out;
output LCD_EN, LCD_RS, LCD_RW, LCD_ON, LCD_BLON;
output [1:0]test;//用于测试开门关门状态
input A,B,clock,c1,c2,c3,c4,c5,c6;
inout [7:0]LCD_DATA; //.输入输出变量的声明
reg [4:0] floor1;
reg [5:1] floor2;
reg [5:0] floor3;
reg [3:0] i;
reg [1:0] s;
reg [6:0]out;
reg [3:0]t;
reg [1:0]control; //寄存器变量
wire clk_out;//分频后的输出时钟
wire [1:0]test;
reg ledup,leddown,ledforbid,ledstay;
assign test=control;
Clock c(clock,clk_out); //分频
LCD d(clock,control,LCD_DATA,LCD_EN, LCD_RS, LCD_RW, LCD_ON, LCD_BLON);//LCD显示
always @(posedge clk_out)
begin
t<=t+4'b0001;
ledup<=(s==2'b01 &&!(A==1 && B==1) ); //电梯上升中
leddown<=(s==2'b10 &&!(A==1 && B==1));//电梯下降中
ledforbid<=(A==1 && B==1);// 电梯处于锁定
ledstay<=(s==2'b00&&!(A==1 && B==1));//电梯停留
if( A==1 && B==0)
begin // request up
if(c5==1)
floor1[4]<=1;
if(c4==1)
floor1[3]<=1;
if(c3==1)
floor1[2]<=1;