您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 基于FPGA的三层电梯
基于FPGA(verilog)编写的三层电梯一、需求分析;1、问题描述与要求:用Verilog语言设计一个电梯控制器,通过实验板对设计进行演示;要求楼层的高度大于等于6,并且所设计的电梯调度算法满足提高服务质量、降低运行成本的原则,电梯每2s上升或下降一层,关门需要2s,电梯开门维持4s,电梯超载后蜂鸣器会响,报警。二、系统描述;1、考虑到板上的资源利用情况,设定电梯控制器适用的楼层为3层.2、在电梯的内部有一个控制面板,它负责按下请求到的楼层,并且显示当前尚未完成的目的地请求,当到达该楼层以后自动撤销本楼层的请求,即将面板灯熄灭.3、除1层和3层分别只有上/下按钮外,每个楼层(电梯门口旁)的召唤面板都有两个按钮,分别指示上楼和下楼请求。4、电梯的外部面板会显示电梯当前所在的楼层,及上行还是下行(暂停显示刚才运行时的状态).当电梯在运行时,对应的楼层灯间固定显示一段时间进入下一楼层。5、电梯调度方案:电梯向一个方向运行时,只对本方向前方的请求进行应答,直到本方向前方无请求时,才对反方向的请求进行应答。当前内部控制面板上有的请求,只要经过所在楼层均会立即响应.在所有内部外部请求都已完成后,电梯转入等待。电梯模型:(如下附图)三,功能模块划分1,分频模块:50Mhz的系统时钟输入,经过分频后产生1KHZ的时钟和0.5hz的时钟,1KHZ的时钟用于采集按键信号,按键的消抖和显示模块中数码管的动态扫描。0.5hz的时钟用于主控制模块的的工作时钟,电梯每2s上升或下降一层,电梯开门维持4s,关门需要2s。clkclk_1khzclk0_5hzfenpininst2,按键消抖模块:由于按键在按下的过程中有抖动的现象,会影响信号的采集结果,所以有必要对按键进行消抖,消抖模块为:keyclkkey_outxiaodouinst4第1层每楼层的召唤按钮面板,显示信息有:当前电梯所在位置(楼层)和电梯的运行方向(上\下)控制信息:使用电梯的请求(向上或向下)第3层第2层电梯电梯内部的控制面板,显示信息有:电梯当前的位置和电梯当前的运行方向(上\下),以及请求到达的楼层控制信息有:请求要到达的目的楼层3,报警模块:电梯开门后,如果电梯超载则蜂鸣器响,报警报警模块为:clkloadbeepledbeepinst34,寄存器模块:用于对采集的按键信号进行保存,供后面的主控制模块分析,采样频率为1khz,寄存器模块为:clkclrout1_upout2_upout2_downout3_downkey1key2key3out1_up_rout2_up_rout2_down_rout3_down_rkey1_rkey2_rkey3_rregisterinst145,主控制模块:该模块为整个设计的核心,控制电梯的运行情况;主控制模块为:idle000UnsignedBinaryceng1001UnsignedBinaryceng2010UnsignedBinaryceng3011UnsignedBinarykai100UnsignedBinaryParameterValueTypeclkclrout1_up_rout2_up_rout2_down_rout3_down_rkey1_rkey2_rkey3_rdengLED_OUT_1[3..0]LED_OUT_2[3..0]LED_OUT_3[3..0]LED_IN[3..0]MODE_IN[3..0]MODE_OUT_1[3..0]MODE_OUT_2[3..0]MODE_OUT_3[3..0]controlinst136,显示模块:该模块用于将主控制的模块的输出数据进行译码显示,显示模块为:clk_1khzLED_OUT_1[3..0]LED_OUT_2[3..0]LED_OUT_3[3..0]LED_IN[3..0]MODE_OUT_1[3..0]MODE_OUT_2[3..0]MODE_OUT_3[3..0]MODE_IN[3..0]dout[7..0]sel[7..0]dispalyinst27,主控制模块的功能分析:将主控制模块分为5个状态,idle(等待),ceng1(第一层),ceng2(第二层),ceng3(第三层),kai(开门),主要通过这几个状态之间的转变来实现电梯的工作情况8,板上硬件介绍:按键:sw1为一层的上升请求,sw2为二层的上升请求,sw3为二层的下降请求,sw4为三层的下降请求,sw5为超载信号输入,sw6为选择第一层,sw7为选择第二层,sw8为选择第三层.数码管:左边三个数码管分别显示各层电梯所处的状态,为0时表示空闲等待状态,为1时表示下降,为2时表示上升,第4,5,6个数码管为各层显示电梯处于的层数,第7个数码管为电梯内部显示电梯所在层数,第8个数码管为内部显示电梯的工作方式,为0时表示空闲等待状态,为1时表示下降,为2时表示上升。Led灯:最左边的led指示电梯门的开关情况,亮时表示处于开,灭时表示处于关;最右边的led指示超载时的报警灯显示四,整个设计的程序1.分频模块的程序:modulefenpin(clk,clk_1khz,clk0_5hz);inputclk;outputclk_1khz,clk0_5hz;regclk_1khz_r,clk0_5hz_r;reg[14:0]counter;reg[9:0]cnt;assignclk_1khz=clk_1khz_r;assignclk0_5hz=clk0_5hz_r;always@(posedgeclk)beginif(counter==15'd24999)beginclk_1khz_r=~clk_1khz_r;counter=0;endelsecounter=+counter+1'b1;endalways@(posedgeclk_1khz)beginif(cnt==10'd999)beginclk0_5hz_r=~clk0_5hz_r;cnt=0;endelsecnt=cnt+1'b1;endendmodule2.报警模块的程序:modulebeep(clk,load,beep,led);inputclk,load;outputbeep,led;regbeep_r,load_flag,load_reg;reg[22:0]count,count_end;assignbeep=beep_r;assignled=~load_reg;initialbeginbeep_r=1'b0;load_flag=1'b0;load_reg=1'b1;endalways@(posedgeclk)begincount=count+1'b1;if(count==count_end)begincount=0;if(load_flag==1'b1)beep_r=~beep_r;elsebeep_r=1'b0;endendalways@(count[10:9]orloadorload_reg)beginload_reg=load;if(load_reg!=1'b1)beginload_flag=1'b1;count_end=20'd12655;//gaoyinendelsebeginload_flag=1'b0;count_end=20'hfffff;endendendmodule3.寄存器模块的程序moduleregister(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);inputclk,clr,out1_up,out2_up,out2_down,out3_down,key1,key2,key3;outputout1_up_r,out2_up_r,out2_down_r,out3_down_r,key1_r,key2_r,key3_r;regout1_up_rr,out2_up_rr,out2_down_rr,out3_down_rr,key1_rr,key2_rr,key3_rr;assignout1_up_r=out1_up_rr;assignout2_up_r=out2_up_rr;assignout2_down_r=out2_down_rr;assignout3_down_r=out3_down_rr;assignkey1_r=key1_rr;assignkey2_r=key2_rr;assignkey3_r=key3_rr;always@(posedgeclk)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=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.主控制模块的程序modulecontrol(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,MODE_OUT_1,MODE_OUT_2,MODE_OUT_3);inputclk,clr,out1_up_r,out2_up_r,out2_down_r,out3_down_r,key1_r,key2_r,key3_r;outputdeng;output[3:0]LED_OUT_1,LED_OUT_2,LED_OUT_3,LED_IN,MODE_IN,MODE_OUT_1,MODE_OUT_2,MODE_OUT_3;reg[3:0]LED_r;reg[3:0]mode;//电梯的工作模式,上升还是下降regx,y,led;reg[2:0]state;regcnt,clk_05hz_r;reg[2:0]counter4s;//4s计数器reg[3:1]up,down,ting;wire[3:0]temp;parameteridle=3'b000,ceng1=3'b001,ceng2=3'b010,ceng3=3'b011,kai=3'b100;assigntemp={out1_up_r,out2_up_r,out2_down_r,out3_down_r};assigndeng=led;//指示门的开关状态,亮表示开,否则关assignLED_IN=LED_r;//电梯内部指示层数assignLED_OUT_1=LED_r;//电梯外部一层指示层数assignLED_OUT_2=LED_r;//电梯外部二层指示层数assignLED_OUT_3=LED_r;//电梯外部三层指示层数assignMODE_IN=mode;//电梯内部电梯状态指示assignMODE_OUT_1=mode;//电梯外部一层状态指示assignMODE_OUT_2=mode;//电梯外部二层状态指示assignMODE_OUT_3=mode;//电梯外部三层状态指示initialbeginup=3'b000;down=3'b000;ting=3'b000;endalways@(posedgeclkornegedgeclr)beginif(!clr)beginstate=idle;endelsebeginif(out1_up_r==1'b0)up[1]=1'b1;if(out
本文标题:基于FPGA的三层电梯
链接地址:https://www.777doc.com/doc-4758271 .html