基于FPGA的三层电梯_第1页
基于FPGA的三层电梯_第2页
基于FPGA的三层电梯_第3页
基于FPGA的三层电梯_第4页
基于FPGA的三层电梯_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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=15'd24999)beginclk_1khz_r<=clk_1khz_r;counter<=0;endelsecounter<=+counter+1'b1;endalways(posedge clk_1khz)beginif(cnt=

7、10'd999)beginclk0_5hz_r<=clk0_5hz_r;cnt<=0;endelsecnt<=cnt+1'b1;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<=1'b0;load_

8、flag<=1'b0;load_reg<=1'b1;endalways(posedge clk)begincount<=count+1'b1;if(count=count_end)begincount<=0;if(load_flag=1'b1)beep_r<=beep_r;elsebeep_r<=1'b0;endendalways(count10:9 or load or load_reg)beginload_reg<=load;if(load_reg!=1'b1)beginload_flag<=1

9、'b1;count_end<=20'd12655;/gaoyinendelsebeginload_flag<=1'b0;count_end<=20'hfffff;endendendmodule3. 寄存器模块的程序 module register(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

10、_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_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_d

11、own_rr;assign key1_r=key1_rr;assign key2_r=key2_rr;assign key3_r=key3_rr;always(posedge clk)beginif(!clr)beginout1_up_rr<=1'b1;out2_up_rr<=1'b1;out2_down_rr<=1'b1;out3_down_rr<=1'b1;key1_rr<=1'b1;key2_rr<=1'b1;key3_rr<=1'b1;endelsebeginout1_up_rr<=

12、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,key2_r,key3_r,deng,LED_OUT_1,LED_OUT_2,LED_OUT_3,LED_IN,MODE_IN

13、,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 mode;/电梯的工作模式,上升还是下降 reg x,y,led;reg2:0state;reg cnt,clk_05hz_r;r

14、eg 2:0counter4s;/4s计数器reg3:1up,down,ting;wire3:0temp;parameter idle=3'b000,ceng1=3'b001,ceng2=3'b010, ceng3=3'b011,kai=3'b100; assign temp=out1_up_r,out2_up_r,out2_down_r,out3_down_r; assign deng=led;/指示门的开关状态,亮表示开,否则关assign LED_IN=LED_r;/电梯内部指示层数assign LED_OUT_1=LED_r;/电梯外部一层指示层

15、数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<=3'b000;down<=3'b000;ting<=3'b000;endalways(posedge clk or neg

16、edge clr)beginif(!clr)beginstate<=idle;endelsebeginif(out1_up_r=1'b0)up1<=1'b1;if(out2_up_r=1'b0)up2<=1'b1;if(out3_down_r=1'b0)down3<=1'b1;if(out2_down_r=1'b0)down2<=1'b1;if(key1_r=1'b0)ting1<=1'b1;if(key2_r=1'b0)ting2<=1'b1;if(key

17、3_r=1'b0)ting3<=1'b1;case(state)idle:beginLED_r<=4'd1;mode<=4'd0;/空闲led<=1'b0;/处于guanif(temp!=4'b1111)beginmode<=4'd2;/上升state<=ceng1;/任何请求都会破坏初态endelsestate<=idle;endceng1:beginLED_r<=4'd1;mode<=4'd2;/上升if(up1=1'b1 | ting1=1'b1

18、)beginstate<=kai;ting1<=1'b0;up1<=1'b0;endelse if(up2=1'b1 | ting2=1'b1)state<=ceng2;else if(down3=1'b1 | ting3=1'b1)beginstate<=ceng2;x<=1'b1;endelse if(down2=1'b1 | ting2=1'b1 )beginstate<=ceng2;mode<=4'd2;endelsestate<=idle;endcen

19、g2: beginLED_r<=4'd2;if(mode=4'd2)/上升beginif(up2=1'b1 | ting2=1'b1)beginstate<=kai;up2<=1'b0;ting2<=1'b0;endelse if(down3=1'b1 | ting3 | x=1'b1)beginstate<=ceng3;x<=1'b0;endelse if(down2=1'b1 | up1=1'b1 | ting1=1'b1)mode<=4'd1;

20、/处于下降elsebeginmode<=4'd0;state<=ceng2;endendelse if(mode=4'd1)/下降beginif(up2=1'b1)|(ting2=1'b1)| (down2=1'b1)beginstate<=kai;ting2<=1'b0;down2<=1'b0;up2<=1'b0;endelse if(up1=1'b1) | (ting1=1'b1) | (y=1'b1)beginstate<=ceng1;y<=1'

21、b0;endelse if(up2=1'b1) | (down3=1'b1) |( ting3=1'b1)beginmode<=4'd2;/上升state<=ceng3;endelsebeginmode<=4'd0;state<=ceng2;endendendceng3:begin/mode<=4'd2;/shangshenLED_r<=4'd3;if(ting3=1'b1)| (down3=1'b1)beginmode<=4'd0;state<=kai;ting3&

22、lt;=1'b0;down3<=1'b0;endelse if(down2=1'b1) | (ting2=1'b1)beginmode<=4'd1;state<=ceng2;endelse if(up1=1'b1) | (ting1=1'b1)beginmode<=4'd1;y<=1'b1;state<=ceng2;endelse if(up2=1'b1)beginmode<=4'd1;/下降state<=ceng2;endelsebeginmode<=

23、4'd0;/下降state<=ceng3;endendkai:beginif(counter4s<3'd2)/开4sbeginled<=1'b1;counter4s<=counter4s+1'b1;endelsebeginled<=1'b0;counter4s<=0;if(LED_r=4'd1)state<=ceng1;else if(LED_r=4'd2)state<=ceng2;else if(LED_r=4'd3)state<=ceng3;endenddefault:st

24、ate<=idle;endcaseendendendmodule5. 显示模块的程序 module dispaly(clk_1khz,LED_OUT_1,LED_OUT_2,LED_OUT_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

25、:0data;reg2:0counter;assign dout=dout_r;assign sel=sel_r;always(posedge clk_1khz)beginif(counter=3'd7)counter<=0;elsecounter<=counter+1'b1;endalways(posedge clk_1khz)begincase(counter)3'd0:data<=MODE_IN;3'd1:data<=LED_IN;3'd2:data<=LED_OUT_3;3'd3:data<=LED_OUT_2;3'd4:data<=LED_OUT_1;3'd5:data<=MODE_OUT_3;3'd6:data<=MODE_OUT_2;3'd7:data<=MODE_OUT_1;default:data<=4'b1010;endcaseendalways(posedge clk_1khz)begincase(count

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论