📄 lift_comtrol_main.v
字号:
module lift(clk0,In_num1,In_num2,In_num3,In_num4,Out_up1,Out_up2,Out_up3,Out_down2,Out_down3,Out_down4,led1,led2,led3,led4,upled,downled,openled,Start,Time2,Time8,Floor_Time,Reset,Lock,Alarm,overweight,overweighted,num1,num2,num3,num4,up1,up2,up3,down2,down3,down4,open);
input clk0,In_num1,In_num2,In_num3,In_num4,Out_up1,Out_up2,Out_up3,Out_down2,Out_down3,Out_down4,Time2,Time8,Reset,Floor_Time,Lock,Alarm,overweight,open;
//input [2:0] Now_Floor;
output led1,led2,led3,led4,openled,Start,upled,downled,overweighted;
output num1,num2,num3,num4,up1,up2,up3,down2,down3,down4;
reg led1,led2,led3,led4,up,down,openled,upled,downled;
reg [2:0] Now_Floor;
reg Start,overweighted;
reg num1,num2,num3,num4,up1,up2,up3,down2,down3,down4;
//请求信号的输入
always @(posedge clk0)
begin
if(Reset==1'b1)
num1<=1'b0;
else
begin
if(In_num1==1'b1)
num1<=1'b1;
else if((num1==1'b1)&&(Now_Floor==3'b001)&&(openled==1'b1))
num1<=1'b0;
else if(num1==1'b1)
num1<=1'b1;
else
num1<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
num2<=1'b0;
else
begin
if(In_num2==1'b1)
num2<=1'b1;
else if((num2==1'b1)&&(Now_Floor==3'b010)&&(openled==1'b1))
num2<=1'b0;
else if(num2==1'b1)
num2<=1'b1;
else
num2<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
num3<=1'b0;
else
begin
if(In_num3==1'b1)
num3<=1'b1;
else if((num3==1'b1)&&(Now_Floor==3'b011)&&(openled==1'b1))
num3<=1'b0;
else if(num3==1'b1)
num3<=1'b1;
else
num3<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
num4<=1'b0;
else
begin
if(In_num4==1'b1)
num4<=1'b1;
else if((num4==1'b1)&&(Now_Floor==3'b100)&&(openled==1'b1))
num4<=1'b0;
else if(num4==1'b1)
num4<=1'b1;
else
num4<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
up1<=1'b0;
else
begin
if((Out_up1==1'b1)&&(Now_Floor!=3'b001))
up1<=1'b1;
else if((Out_up1==1'b1)&&(upled==1'b0)&&(downled==1'b0)&&(Now_Floor==3'b001)&&(openled==1'b0))
up1<=1'b1;
else if((up1==1'b1)&&(Now_Floor==3'b001)&&(openled==1'b1)||((up1==1'b1)&&(Now_Floor==3'b001)&&(up==1'b0)&&(down==1'b0)))
up1<=1'b0;
else if(up1==1'b1)
up1<=1'b1;
else
up1<=up1;
end
end
always @(posedge clk0)
begin
if((Reset==1'b1)&&(upled==1'b0)&&(downled==1'b0)&&(Now_Floor!=3'b010))
up2<=1'b0;
else
begin
if((Out_up2==1'b1)&&(Now_Floor!=3'b010))
up2<=1'b1;
else if((Out_up2==1'b1)&&(upled==1'b0)&&(downled==1'b0)&&(Now_Floor==3'b010)&&(openled==1'b0))
up2<=1'b1;
else if((up2==1'b1)&&(Now_Floor==3'b010)&&(up==1'b1)&&(openled==1'b1)||((up2==1'b1)&&(Now_Floor==3'b010)&&(up==1'b0)&&(down==1'b0)))
up2<=1'b0;
else if(up2==1'b1)
up2<=1'b1;
else
up2<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
up3<=1'b0;
else
begin
if((Out_up3==1'b1)&&(Now_Floor!=3'b011))
up3<=1'b1;
else if((Out_up3==1'b1)&&(upled==1'b0)&&(downled==1'b0)&&(Now_Floor==3'b011)&&(openled==1'b0))
up3<=1'b1;
else if((up3==1'b1)&&(Now_Floor==3'b011)&&(up==1'b1)&&(openled==1'b1)||((up3==1'b1)&&(Now_Floor==3'b011)&&(up==1'b0)&&(down==1'b0)))
up3<=1'b0;
else if(up3==1'b1)
up3<=1'b1;
else
up3<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
down2<=1'b0;
else
begin
if((Out_down2==1'b1)&&(Now_Floor!=3'b010))
down2<=1'b1;
else if((Out_down2==1'b1)&&(upled==1'b0)&&(downled==1'b0)&&(Now_Floor==3'b010)&&(openled==1'b0))
down2<=1'b1;
else if((down2==1'b1)&&(Now_Floor==3'b010)&&(down==1'b1)&&(openled==1'b1)||((down2==1'b1)&&(Now_Floor==3'b010)&&(up==1'b0)&&(down==1'b0)))
down2<=1'b0;
else if(down2==1'b1)
down2<=1'b1;
else
down2<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
down3<=1'b0;
else
begin
if((Out_down3==1'b1)&&(Now_Floor!=3'b011))
down3<=1'b1;
else if((Out_down3==1'b1)&&(Now_Floor==3'b011)&&(upled==1'b0)&&(downled==1'b0)&&(openled==1'b0))
down3<=1'b1;
else if(((down3==1'b1)&&(Now_Floor==3'b011)&&(down==1'b1)&&(openled==1'b1))||((down3==1'b1)&&(Now_Floor==3'b011)&&(up==1'b0)&&(down==1'b0)))
down3<=1'b0;
else if(down3==1'b1)
down3<=1'b1;
else
down3<=1'b0;
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
down4<=1'b0;
else
begin
if((Out_down4==1'b1)&&(Now_Floor!=3'b100))
down4<=1'b1;
else if((Out_down4==1'b1)&&(upled==1'b0)&&(downled==1'b0)&&(Now_Floor==3'b100)&&(openled==1'b0))
down4<=1'b1;
else if(((down4==1'b1)&&(Now_Floor==3'b100)&&(openled==1'b1))||((down4==1'b1)&&(Now_Floor==3'b100)&&(up==1'b0)&&(down==1'b0)))
down4<=1'b0;
else if(down4==1'b1)
down4<=1'b1;
else
down4<=1'b0;
end
end
//请求输入结束
always @(posedge clk0)
begin
if(Reset==1'b1)
begin
up<=1'b0;
down<=1'b0;
end
else if((Lock==1'b1)||(Alarm==1'b1)||(overweight==1'b1)||(open==1'b1))
begin
up<=up;
down<=down;
end
else
begin
case(Now_Floor)
3'b001:begin
if((num2==1'b1)||(num3==1'b1)||(num4==1'b1)||(up2==1'b1)||(up3==1'b1)||(down2==1'b1)||(down3==1'b1)||(down4==1'b1))
begin
up<=1'b1;
down<=1'b0;
end
else
begin
up<=1'b0;
down<=1'b0;
end
end
3'b010:begin
if(((down==1'b1)&&((num1==1'b1)||(up1==1'b1)))||((down2==1'b1)&&(num1==1'b1)))//
begin
up<=1'b0;
down<=1'b1;
end
else if(((up==1'b1)&&((num3==1'b1)||(num4==1'b1)||(up3==1'b1)||(down3==1'b1)||(down4==1'b1)))||((up2==1'b1)&&((num3==1'b1)||(num4==1'b1))))//
begin
up<=1'b1;
down<=1'b0;
end
else if((up==1'b1)&&((num1==1'b1)||(up1==1'b1))&&((num3==1'b0)&&(num4==1'b0)&&(up3==1'b0)&&(down3==1'b0)&&(down4==1'b0)))
begin
up<=1'b0;
down<=1'b1;
end
else if((down==1'b1)&&((num3==1'b1)||(num4==1'b1)||(up3==1'b1)||(down3==1'b1)||(down4==1'b1))&&((num1==1'b0)&&(up1==1'b0)))
begin
up<=1'b1;
down<=1'b0;
end
else if((up==1'b0)&&(down==1'b0)&&((num1==1'b1)||(up1==1'b1)))
begin
up<=1'b0;
down<=1'b1;
end
else if((up==1'b0)&&(down==1'b0)&&((num3==1'b1)||(num4==1'b1)||(up3==1'b1)||(down3==1'b1)||(down4==1'b1)))
begin
up<=1'b1;
down<=1'b0;
end
else
begin
up<=1'b0;
down<=1'b0;
end
end
3'b011:begin
if((up==1'b1)&&((down4==1'b1)||(num4==1'b1))||((up3==1'b1)&&(num4==1'b1)))//
begin
up<=1'b1;
down<=1'b0;
end
else if(((down==1'b1)&&((up1==1'b1)||(up2==1'b1)||(down2==1'b1)||(num1==1'b1)||(num2==1'b1)))||((down3==1'b1)&&((num1==1'b1)||(num2==1'b1))))
begin
up<=1'b0;
down<=1'b1;
end
else if((up==1'b1)&&((down4==1'b0)&&(num4==1'b0))&&((up1==1'b1)||(up2==1'b1)||(down2==1'b1)||(num1==1'b1)||(num2==1'b1)))
begin
up<=1'b0;
down<=1'b1;
end
else if((down==1'b1)&&((num1==1'b0)&&(num2==1'b0)&&(up1==1'b0)&&(up2==1'b0)&&(down2==1'b0))&&((num4==1'b1)||(down4==1'b1)))
begin
up<=1'b1;
down<=1'b0;
end
else if(((up==1'b0)&&(down==1'b0))&&((up1==1'b1)||(up2==1'b1)||(down2==1'b1)||(num1==1'b1)||(num2==1'b1)))
begin
up<=1'b0;
down<=1'b1;
end
else if(((up==1'b0)&&(down==1'b0))&&((down4==1'b1)||(num4==1'b1)))
begin
up<=1'b1;
down<=1'b0;
end
else
begin
up<=1'b0;
down<=1'b0;
end
end
3'b100:begin
if((num2==1'b1)||(num3==1'b1)||(num1==1'b1)||(up2==1'b1)||(up3==1'b1)||(down2==1'b1)||(down3==1'b1)||(up1==1'b1))
begin
up<=1'b0;
down<=1'b1;
end
else
begin
up<=1'b0;
down<=1'b0;
end
end
endcase
end
end
always @ (posedge clk0)
begin
if(Reset==1'b1)
Start<=1'b0;
else if((Lock==1'b1)||(Alarm==1'b1)||(overweight==1'b1)||(open==1'b1))
Start<=Start;
else
begin
case(Now_Floor)
3'b001:begin
if(((num1==1'b1)||(up1==1'b1))&&(Time8==1'b0))
Start<=1'b1;
else if(Time8==1'b1)
Start<=1'b0;
else if(Start==1'b1)
Start<=1'b1;
else
Start<=1'b0;
end
3'b010:begin
if((num2==1'b1)||((up==1'b1)&&(up2==1'b1))||((down==1'b1)&&(down2==1'b1))||(((up==1'b0)&&(down==1'b0))&&(Time8==1'b0)&&((up2==1'b1)||(down2==1'b1))))
Start<=1'b1;
else if(Time8==1'b1)
Start<=1'b0;
else if(Start==1'b1)
Start<=1'b1;
else
Start<=1'b0;
end
3'b011:begin
if((num3==1'b1)||((up==1'b1)&&(up3==1'b1))||((down==1'b1)&&(down3==1'b1))||(((up==1'b0)&&(down==1'b0))&&(Time8==1'b0)&&((up3==1'b1)||(down3==1'b1))))
Start<=1'b1;
else if(Time8==1'b1)
Start<=1'b0;
else if(Start==1'b1)
Start<=1'b1;
else
Start<=1'b0;
end
3'b100:begin
if(((num4==1'b1)||(down4==1'b1))&&(Time8==1'b0))
Start<=1'b1;
else if(Time8==1'b1)
Start<=1'b0;
else if(Start==1'b1)
Start<=1'b1;
else
Start<=1'b0;
end
endcase
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
begin
openled<=1'b0;
end
else if((Lock==1'b1)||(Alarm==1'b1)||(overweight==1'b1)||(open==1'b1))
begin
openled<=openled;
end
else
begin
if((Time2==1'b1)&&(Time8==1'b0))
openled<=1'b1;
else if((Time2==1'b1)&&(Time8==1'b1))
openled<=1'b0;
else
openled<=1'b0;
end
end
always @(posedge clk0)
begin
if((Reset==1'b1)||(Lock==1'b1)||(Alarm==1'b1)||(overweight==1'b1)||(open==1'b1))
begin
upled<=1'b0;
downled<=1'b0;
end
else
begin
if((up==1'b1)&&(Start==1'b0))
upled<=1'b1;
else if((down==1'b1)&&(Start==1'b0))
downled<=1'b1;
else
begin
upled<=1'b0;
downled<=1'b0;
end
end
end
always @(posedge clk0)
begin
if(Reset==1'b1)
Now_Floor<=3'b001;
else if((Lock==1'b1)||(Alarm==1'b1)||(overweight==1'b1)||(open==1'b1))
Now_Floor<=Now_Floor;
else
begin
if((upled==1'b1)&&(Floor_Time==1'b1))
Now_Floor<=Now_Floor+3'b001;
else if((downled==1'b1)&&(Floor_Time==1'b1))
Now_Floor<=Now_Floor-3'b001;
else
Now_Floor<=Now_Floor;
end
end
always @( posedge clk0)
begin
if(overweight==1'b1)
overweighted<=1'b1;
else
overweighted<=1'b0;
end
always @( posedge clk0)
begin
if(Reset==1'b1)
begin
led1<=1'b1;
led2<=1'b0;
led3<=1'b0;
led4<=1'b0;
end
else
begin
case(Now_Floor)
3'b001:begin
led1<=1'b1;
led2<=1'b0;
led3<=1'b0;
led4<=1'b0;
end
3'b010:begin
led1<=1'b0;
led2<=1'b1;
led3<=1'b0;
led4<=1'b0;
end
3'b011:begin
led1<=1'b0;
led2<=1'b0;
led3<=1'b1;
led4<=1'b0;
end
3'b100:begin
led1<=1'b0;
led2<=1'b0;
led3<=1'b0;
led4<=1'b1;
end
endcase
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -