您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > Verilog 电梯控制器设计
设计一个八层楼房自动电梯控制器,用八个LED显示电梯行进过程,并有数码管显示电梯当前所在楼层位置,在每层电梯入口处设有请求按钮开关,请求按钮按下则相应楼层的LED亮。用CLK脉冲控制电梯运动,每来一个CLK脉冲电梯升(降)一层。电梯到达有请求的楼层后,该层次的指示灯灭,电梯门打开(开门指示灯亮),开门5秒后,电梯门自动关闭,电梯继续运行。控制电路应能记忆所有楼层请求信号,并按如下运行规则依次相应:运行过程中先响应最早的请求,再响应后续的请求。如果无请求则停留当前层。如果有两个同时请求信号,则判断请求信号离当偍层的距离,距离近请求的先响应,再响应较远的请求。每个请求信号保留至执行后清除。设计提示此设计问题可分为请求信号输入模块、主控模块、移位寄存显示模块和楼层显示几部分。图电梯控制器系统框图在请求信号输入模块中,设置八个开关电平信号d1,d2,d3,d4,d5,d6,d7,d8表示8个楼层的请求信号,每次最多允许两个信号同时请求。在主控模块中设置开门指示信号door,door=1为开门状态;door=0为关门状态。在移位寄存显示模块中设置八个LED显示信号o1,o2,o3,o4,o5,o6,o7,o8,表示当前所在楼层及发出请求信号的楼层用移位寄存模块的up表示电梯上行(右移),down表示电梯下行(左移),电梯初始状态是处在一层,当前楼层经主控模块送数码管显示。当前楼层信号A和请求信号B在主控模块中进行实时比较,当AB时,主控模块的输出使移位寄存模块的UP信号有效,电梯上行,直到A=B,电梯开门(door=1)5秒,若AB,则移位寄存模块的down信号有效,电梯下行,直到A=B,电梯开门5秒,如此反复。若没有请求信号输入,则电梯停在当前楼层不动。若同时有两个请求信号输入,主控模块应能将两个请求信号分别与当前楼层信号比较,使电梯先去距离较近的楼层。图电梯控制器硬件系统示意图电梯控制器主控电路VerilogHDL代码://电梯控制器/*信号定义:clk:时钟信号d1,d2,d3,d4,d5,d6,d7,d8:楼层请求信号o1,o2,o3,o4,o5,o6,o7,o8:楼层与请求信号状态显示door:开门指示信号fl:送数码管显示的当前楼层数*/modulelift(clk,d1,d2,d3,d4,d5,d6,d7,d8,o1,o2,o3,o4,o5,o6,o7,o8,door,fl);inputclk,d1,d2,d3,d4,d5,d6,d7,d8;outputo1,o2,o3,o4,o5,o6,o7,o8,door,fl;rego1,o2,o3,o4,o5,o6,o7,o8,door,up,down;reg[8:1]des;reg[2:0]count;reg[3:0]low,high,fl;always@(posedgeclk)begin//if(d1)begindes[1]=1;if(low1||low==4’b0000)low=1;endif(d2)begindes[2]=1;if(high2&&{d3,d4,d5,d6,d7,d8}==6’b000000)high=2;if((low2||low==4’b0000)&&!d1)low=1;endif(d3)begindes[3]=1;if(high3&&{d4,d5,d6,d7,d8}==5’b00000)high=3;if((low3||low==4’b0000)&&{d1,d2}==2’b00)low=3;endif(d4)begindes[4]=1;if(high4&&{d5,d6,d7,d8}==4’b0000)high=4;if((low4||low==4’b0000)&&{d1,d2,d3}==3’b000)low=4;endif(d5)begindes[5]=1;if(high5&&{d6,d7,d8}==3’b000)high=5;if((low5||low==4’b0000)&&{d1,d2,d3,d4}==4’b0000)low=5;endif(d6)begindes[6]=1;if(high6&&{d7,d8}==2’b00)high=6;if((low6||low==4’b0000)&&{d1,d2,d3,d4,d5}==5’b00000)low=6;endif(d7)begindes[7]=1;if(high7&&!d8)high=7;if((low7||low==4’b0000)&&{d1,d2,d3,d4,d5,d6}==6’b000000)low=7;endif(d8)begindes[8]=1;if(high8)high=8;end//if({o1,o2,o3,o4,o5,o6,o7,o8}==8’b00000000)begin{o1,o2,o3,o4,o5,o6,o7,o8}=8’b10000000;fl=1;endelseif(count==3’b101)begincount=0;door=0;if(low==fl)low=4’b0000;if(high==fl)high=4’b0000;endelseif(count!=0)begincount=count+1;door=1;endelseif(o1&&des[1])begincount=1;des[1]=0;endelseif(o2&&des[2])begincount=1;des[2]=0;endelseif(o3&&des[3])begincount=1;des[3]=0;endelseif(o4&&des[4])begincount=1;des[4]=0;endelseif(o5&&des[5])begincount=1;des[5]=0;endelseif(o6&&des[6])begincount=1;des[6]=0;endelseif(o7&&des[7])begincount=1;des[7]=0;endelseif(o8&&des[8])begincount=1;des[8]=0;end//elseif(up)beginif(flhigh)begin{o1,o2,o3,o4,o5,o6,o7,o8}={o1,o2,o3,o4,o5,o6,o7,o8}1;fl=fl+1;endelsebeginif(low!=4’b0000&&lowfl)beginif(highfl&&high-flfl-low)up=1;elsedown=1;endelseif(highfl)up=1;end//**************endendmoduleup=0;end//elseif(down)beginif(fllow&&low!=4’b0000)begin{o1,o2,o3,o4,o5,o6,o7,o8}={o1,o2,o3,o4,o5,o6,o7,o8}1;fl=fl-1;endelsedown=0;endelse//**************
本文标题:Verilog 电梯控制器设计
链接地址:https://www.777doc.com/doc-5019798 .html