基于FPGA的三层电梯(共15页).doc

上传人:飞****2 文档编号:14300643 上传时间:2022-05-03 格式:DOC 页数:14 大小:63.50KB
返回 下载 相关 举报
基于FPGA的三层电梯(共15页).doc_第1页
第1页 / 共14页
基于FPGA的三层电梯(共15页).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《基于FPGA的三层电梯(共15页).doc》由会员分享,可在线阅读,更多相关《基于FPGA的三层电梯(共15页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 基于FPGA(verilog)编写的三层电梯一、需求分析;1、问题描述与要求:用Verilog语言设计一个电梯控制器,通过实验板对设计进行演示;要求楼层的高度大于等于,并且所设计的电梯调度算法满足提高服务质量、降低运行成本的原则,电梯每2s上升或下降一层,关门需要2s,电梯开门维持4s,电梯超载后蜂鸣器会响,报警。二、系统描述;1、考虑到板上的资源利用情况,设定电梯控制器适用的楼层为3层.2、在电梯的内部有一个控制面板,它负责按下请求到的楼层,并且显示当前尚未完成的目的地请求,当到达该楼层以后自动撤销本楼层的请求,即将面板灯熄灭.3、除1层和3层分别只有上/下按钮外

2、,每个楼层(电梯门口旁)的召唤面板都有两个按钮,分别指示上楼和下楼请求。4、电梯的外部面板会显示电梯当前所在的楼层,及上行还是下行(暂停显示刚才运行时的状态).当电梯在运行时,对应的楼层灯间固定显示一段时间进入下一楼层。 5、电梯调度方案:电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前方无请求时,才对反方向的请求进行应答。当前内部控制面板上有的请求,只要经过所在楼层均会立即响应.在所有内部外部请求都已完成后,电梯转入等待。电梯模型:(如下附图)第层每楼层的召唤按钮面板,显示信息有:当前电梯所在位置(楼层)和电梯的运行方向(上下)控制信息:使用电梯的请求(向上或向下)第层第层电

3、梯电梯内部的控制面板,显示信息有:电梯当前的位置和电梯当前的运行方向(上下),以及请求到达的楼层控制信息有:请求要到达的目的楼层三,功能模块划分1, 分频模块:50Mhz的系统时钟输入,经过分频后产生1KHZ的时钟和0.5hz的时钟,1KHZ的时钟用于采集按键信号,按键的消抖和显示模块中数码管的动态扫描。 0.5hz的时钟用于主控制模块的的工作时钟,电梯每2s上升或下降一层,电梯开门维持4s,关门需要2s。2, 按键消抖模块:由于按键在按下的过程中有抖动的现象,会影响信号的采集结果,所以有必要对按键进行消抖,消抖模块为: 3, 报警模块:电梯开门后,如果电梯超载则蜂鸣器响,报警 报警模块为:4

4、, 寄存器模块:用于对采集的按键信号进行保存,供后面的主控制模块分析,采样频率为1khz,寄存器模块为: 5, 主控制模块:该模块为整个设计的核心,控制电梯的运行情况;主控制模块为:6, 显示模块:该模块用于将主控制的模块的输出数据进行译码显示,显示模块为:7, 主控制模块的功能分析:将主控制模块分为5个状态,idle(等待),ceng1(第一层),ceng2(第二层),ceng3(第三层),kai(开门),主要通过这几个状态之间的转变来实现电梯的工作情况8, 板上硬件介绍:按键:sw1为一层的上升请求,sw2为二层的上升请求,sw3为二层的下降请求,sw4为三层的下降请求,sw5为超载信号输

5、入,sw6为选择第一层,sw7为选择第二层,sw8为选择第三层.数码管:左边三个数码管分别显示各层电梯所处的状态,为0时表示空闲等待状态,为1时表示下降,为2时表示上升,第4,5,6个数码管为各层显示电梯处于的层数,第7个数码管为电梯内部显示电梯所在层数,第8个数码管为内部显示电梯的工作方式,为0时表示空闲等待状态,为1时表示下降,为2时表示上升。Led灯:最左边的led指示电梯门的开关情况,亮时表示处于开,灭时表示处于关;最右边的led指示超载时的报警灯显示四,整个设计的程序1. 分频模块的程序:module fenpin(clk,clk_1khz,clk0_5hz);input clk;o

6、utput clk_1khz,clk0_5hz;reg clk_1khz_r,clk0_5hz_r;reg14:0counter;reg9:0cnt;assign clk_1khz=clk_1khz_r;assign clk0_5hz=clk0_5hz_r; always(posedge clk)beginif(counter=15d24999)beginclk_1khz_r=clk_1khz_r;counter=0;endelsecounter=+counter+1b1;endalways(posedge clk_1khz)beginif(cnt=10d999)beginclk0_5hz_r

7、=clk0_5hz_r;cnt=0;endelsecnt=cnt+1b1;endendmodule2. 报警模块的程序: module beep(clk,load, beep,led); input clk,load; output beep,led; reg beep_r,load_flag,load_reg;reg22:0count,count_end;assign beep=beep_r;assign led=load_reg;initialbeginbeep_r=1b0;load_flag=1b0;load_reg=1b1;endalways(posedge clk)begincoun

8、t=count+1b1;if(count=count_end)begincount=0;if(load_flag=1b1)beep_r=beep_r;elsebeep_r=1b0;endendalways(count10:9 or load or load_reg)beginload_reg=load;if(load_reg!=1b1)beginload_flag=1b1;count_end=20d12655;/gaoyinendelsebeginload_flag=1b0;count_end=20hfffff;endendendmodule3. 寄存器模块的程序 module registe

9、r(clk,clr,out1_up,out2_up,out2_down,out3_down,key1,key2,key3,out1_up_r,out2_up_r,out2_down_r,out3_down_r,key1_r,key2_r,key3_r);input clk,clr,out1_up,out2_up,out2_down,out3_down,key1,key2,key3;output out1_up_r,out2_up_r,out2_down_r,out3_down_r,key1_r,key2_r,key3_r;reg out1_up_rr,out2_up_rr,out2_down_

10、rr,out3_down_rr,key1_rr,key2_rr,key3_rr;assign out1_up_r=out1_up_rr;assign out2_up_r=out2_up_rr;assign out2_down_r=out2_down_rr;assign out3_down_r=out3_down_rr;assign key1_r=key1_rr;assign key2_r=key2_rr;assign key3_r=key3_rr;always(posedge clk)beginif(!clr)beginout1_up_rr=1b1;out2_up_rr=1b1;out2_do

11、wn_rr=1b1;out3_down_rr=1b1;key1_rr=1b1;key2_rr=1b1;key3_rr=1b1;endelsebeginout1_up_rr=out1_up;out2_up_rr=out2_up;out2_down_rr=out2_down;out3_down_rr=out3_down;key1_rr=key1;key2_rr=key2;key3_rr=key3;endendendmodule4. 主控制模块的程序 module control(clk,clr,out1_up_r,out2_up_r,out2_down_r,out3_down_r,key1_r,k

12、ey2_r,key3_r,deng,LED_OUT_1,LED_OUT_2,LED_OUT_3,LED_IN,MODE_IN,MODE_OUT_1,MODE_OUT_2,MODE_OUT_3);input clk,clr,out1_up_r,out2_up_r,out2_down_r,out3_down_r,key1_r,key2_r,key3_r;output deng;output 3:0LED_OUT_1,LED_OUT_2,LED_OUT_3,LED_IN,MODE_IN,MODE_OUT_1,MODE_OUT_2,MODE_OUT_3; reg3:0LED_r; reg3:0 mod

13、e;/电梯的工作模式,上升还是下降 reg x,y,led;reg2:0state;reg cnt,clk_05hz_r;reg 2:0counter4s;/4s计数器reg3:1up,down,ting;wire3:0temp;parameter idle=3b000,ceng1=3b001,ceng2=3b010, ceng3=3b011,kai=3b100; assign temp=out1_up_r,out2_up_r,out2_down_r,out3_down_r; assign deng=led;/指示门的开关状态,亮表示开,否则关assign LED_IN=LED_r;/电梯内部

14、指示层数assign LED_OUT_1=LED_r;/电梯外部一层指示层数assign LED_OUT_2=LED_r;/电梯外部二层指示层数assign LED_OUT_3=LED_r;/电梯外部三层指示层数assign MODE_IN=mode;/电梯内部电梯状态指示assign MODE_OUT_1=mode;/电梯外部一层状态指示assign MODE_OUT_2=mode;/电梯外部二层状态指示assign MODE_OUT_3=mode;/电梯外部三层状态指示initialbeginup=3b000;down=3b000;ting=3b000;endalways(posedge

15、clk or negedge clr)beginif(!clr)beginstate=idle;endelsebeginif(out1_up_r=1b0)up1=1b1;if(out2_up_r=1b0)up2=1b1;if(out3_down_r=1b0)down3=1b1;if(out2_down_r=1b0)down2=1b1;if(key1_r=1b0)ting1=1b1;if(key2_r=1b0)ting2=1b1;if(key3_r=1b0)ting3=1b1;case(state)idle:beginLED_r=4d1;mode=4d0;/空闲led=1b0;/处于guanif

16、(temp!=4b1111)beginmode=4d2;/上升state=ceng1;/任何请求都会破坏初态endelsestate=idle;endceng1:beginLED_r=4d1;mode=4d2;/上升if(up1=1b1 | ting1=1b1 )beginstate=kai;ting1=1b0;up1=1b0;endelse if(up2=1b1 | ting2=1b1)state=ceng2;else if(down3=1b1 | ting3=1b1)beginstate=ceng2;x=1b1;endelse if(down2=1b1 | ting2=1b1 )begin

17、state=ceng2;mode=4d2;endelsestate=idle;endceng2: beginLED_r=4d2;if(mode=4d2)/上升beginif(up2=1b1 | ting2=1b1)beginstate=kai;up2=1b0;ting2=1b0;endelse if(down3=1b1 | ting3 | x=1b1)beginstate=ceng3;x=1b0;endelse if(down2=1b1 | up1=1b1 | ting1=1b1)mode=4d1;/处于下降elsebeginmode=4d0;state=ceng2;endendelse if

18、(mode=4d1)/下降beginif(up2=1b1)|(ting2=1b1)| (down2=1b1)beginstate=kai;ting2=1b0;down2=1b0;up2=1b0;endelse if(up1=1b1) | (ting1=1b1) | (y=1b1)beginstate=ceng1;y=1b0;endelse if(up2=1b1) | (down3=1b1) |( ting3=1b1)beginmode=4d2;/上升state=ceng3;endelsebeginmode=4d0;state=ceng2;endendendceng3:begin/mode=4d

19、2;/shangshenLED_r=4d3;if(ting3=1b1)| (down3=1b1)beginmode=4d0;state=kai;ting3=1b0;down3=1b0;endelse if(down2=1b1) | (ting2=1b1)beginmode=4d1;state=ceng2;endelse if(up1=1b1) | (ting1=1b1)beginmode=4d1;y=1b1;state=ceng2;endelse if(up2=1b1)beginmode=4d1;/下降state=ceng2;endelsebeginmode=4d0;/下降state=ceng

20、3;endendkai:beginif(counter4s3d2)/开4sbeginled=1b1;counter4s=counter4s+1b1;endelsebeginled=1b0;counter4s=0;if(LED_r=4d1)state=ceng1;else if(LED_r=4d2)state=ceng2;else if(LED_r=4d3)state=ceng3;endenddefault:state=idle;endcaseendendendmodule5. 显示模块的程序 module dispaly(clk_1khz,LED_OUT_1,LED_OUT_2,LED_OUT

21、_3,LED_IN,MODE_OUT_1,MODE_OUT_2,MODE_OUT_3,MODE_IN,dout,sel);input clk_1khz;input3:0LED_OUT_1,LED_OUT_2,LED_OUT_3,LED_IN,MODE_OUT_1,MODE_OUT_2,MODE_OUT_3,MODE_IN;output7:0dout,sel;reg7:0dout_r,sel_r;reg3:0data;reg2:0counter;assign dout=dout_r;assign sel=sel_r;always(posedge clk_1khz)beginif(counter=

22、3d7)counter=0;elsecounter=counter+1b1;endalways(posedge clk_1khz)begincase(counter)3d0:data=MODE_IN;3d1:data=LED_IN;3d2:data=LED_OUT_3;3d3:data=LED_OUT_2;3d4:data=LED_OUT_1;3d5:data=MODE_OUT_3;3d6:data=MODE_OUT_2;3d7:data=MODE_OUT_1;default:data=4b1010;endcaseendalways(posedge clk_1khz)begincase(cou

23、nter)3d0:sel_r=8b;3d1:sel_r=8b;3d2:sel_r=8b;3d3:sel_r=8b;3d4:sel_r=8b;3d5:sel_r=8b;3d6:sel_r=8b;3d7:sel_r=8b;default:sel_r=8b;endcaseendalways(data)begincase(data)4d0:dout_r=8hc0;4d1:dout_r=8hf9;4d2:dout_r=8ha4;4d3:dout_r=8hb0;4d4:dout_r=8h99;4d5:dout_r=8h92;4d6:dout_r=8h82;4d7:dout_r=8hf8;4d8:dout_

24、r=8h80;4d9:dout_r=8h90;default:dout_r=8hff;endcaseendendmodule五整个设计的顶层文件 六总结 通过这次比赛,我了解到数字系统设计的基本步骤和其在实现过程当中必须注意的各个方面。以前的课程较多的停留在理论的高度上,而数字系统设计这门课程使我真正认识到如何才能成为真正的硬件设计师。使我们获益匪浅的,也是使我们深有感触的是。最大的收获是当在设计一个抽象的东西时,首先是对其功能进行分析,确定所要的功能,规划设计的基本模块,按照Top-Down思想去设计,然后一个一个模块去设计,每当设计完一个模块都要进行时序和功能的分析与验证,确保结果与所要设计的结果完全一致才可以设计后面的模块。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁