📄 elevator_ctr.v
字号:
end
else if(req_all>4'b0011)
begin
en_opendoor<=0;
en_up<=1;
end
else if(req_all==4'b0000)
begin
en_opendoor<=0;
en_dn<=0;
en_up<=0;
end
else if(req_all==4'b0001)
begin
en_opendoor<=0;
en_dn<=1;
end
end
else if(updown==0) //???????????????????????????
begin
if((req_in22==1)||(req_dn22==1))
begin
en_opendoor<=1;
clear_in[2]<=1;
clear_dn[2]<=1;
end
else if(req_all==4'b0001)
begin
en_opendoor<=0;
en_dn<=0;
end
else if(req_all>4'b0011)
begin
en_opendoor<=0;
en_up<=0;
end
else if(req_all==4'b0000)
begin
en_opendoor<=0;
en_up<=0;
en_dn<=0;
end
end
end
else if(getto3==1)
begin
if(updown==1) //the elevator is going up
begin
if((req_in33==1)||(req_up33==1))
begin
en_opendoor<=1;
clear_in[3]<=1;
clear_up[3]<=1;
end
else if(req_all>4'b0111)
begin
en_opendoor<=0;
en_up<=1;
end
else if(req_all==4'b0000)
begin
en_opendoor<=0;
en_dn<=0;
en_up<=0;
end
else if(req_all<=4'b0011)
begin
en_opendoor<=0;
en_dn<=1;
end
end
else if(updown==0)
begin
if((req_in33==1)||(req_dn33==1))
begin
en_opendoor<=1;
clear_in[3]<=1;
clear_dn[3]<=1;
end
else if(req_all==4'b0000)
begin
en_opendoor<=0;
en_up<=0;
en_dn<=0;
end
else if(req_all<=4'b0011)
begin
en_opendoor<=0;
en_dn<=0;
end
else if(req_all>4'b0111)
begin
en_opendoor<=0;
en_up<=0;
end
end
end
else if(getto4==1)
begin
if((req_in44==1)||(req_dn44==1))
begin
en_opendoor<=1;
clear_in[4]<=1;
clear_dn[4]<=1;
end
else if(req_all==4'b0000)
begin
en_opendoor<=0;
en_up<=0;
en_dn<=0;
end
else if(req_all<4'b1000)
begin
en_opendoor<=0;
en_dn<=1;
end
end
else
begin
clear_in<=0;
clear_up<=0;
clear_dn<=0;
end
end
//This block is used to control the door
//?????????????
always@(posedge clk)
begin
if(~reset)
begin
counter1<=0;
door_ctr<=2'b00; //initial state is close
updown<=1'bx;
up<=0;
down<=0;
end
else if(overload==1) //interupt of the overloading
begin
alarm<=1; //give the alarm
counter1<=0;
counter2<=0;
up<=0;
down<=0;
end
else
begin
case(door_ctr)
2'b00: //closed state
begin
if(en_opendoor)
door_ctr<=2'b01;
else
door_ctr<=door_ctr;
end
2'b01: //prepare to open state
begin
if(counter2==2'b11)
begin
door_ctr<=2'b11;
counter2<=0; //??????????4?????
end
else
counter2<=counter2+1;
end
2'b11: //open state
begin
if((en_up==1)||(en_dn==1))
begin
if(close==1) //to close the door quickly
counter1<=7;
else if(open==1) //to wait more time to close the door
counter1<=0;
else if(counter1==7) //??????????8?????
begin
door_ctr<=2'b10;
counter1<=counter1+1;
end
else
counter1<=counter1+1;
end
end
2'b10: //prepare to close
if(en_up==1)
begin
if(counter1==15) //??????????8???
begin
door_ctr<=2'b00;
counter1<=0;
updown<=1;
up<=1;
end
else
counter1<=counter1+1;
end
else if(en_dn==1)
begin
if(counter1==15)
begin
door_ctr<=2'b00;
counter1<=0;
updown<=0;
down<=1;
end
else
counter1<=counter1+1;
end
endcase
end
end
//used to display the state of the elevator, up or down
//??????????????
always@(up or down)
begin
if(up==1)
led_up_dn=2'b01; //represent going up ??
else if(down==1)
led_up_dn=2'b10; //represent going down ??
else
led_up_dn=2'b00; //represent stop ??
end
//The following block is used to display the number of the storey
//??led????????
always@(getto1 or getto2 or getto3 or getto4 or updown)
begin
if(updown==1) //??????????????????
begin
if(getto1==1)
led_storey=7'h4f;
else if(getto2==1)
led_storey=7'h12;
else if(getto3==1)
led_storey=7'h06;
else if(getto4==1)
led_storey=7'h4c;
end
else if(updown==1) //????????????????????
begin
if(getto4==1)
led_storey=7'h4c;
else if(getto3==1)
led_storey=7'h06;
else if(getto2==1)
led_storey=7'h12;
else if(getto1==1)
led_storey=7'h4f;
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -