📄 search.v
字号:
module search(request_floor,lift_1,lift_2,best_lift,enable);
input [23:0] lift_1,lift_2;
input [4:0] request_floor;
output [1:0] best_lift;
output enable;
reg [1:0] best_lift;
reg enable;
reg [3:0]dis; //diatance
reg [3:0]abs1; //???????1???????
reg [3:0]abs2; //???????2???????
always @(request_floor or lift_1 or lift_2 or abs1 or abs2 )
begin
dis=4'b1111; //???????
enable=0; //???????
best_lift='b00;
if(request_floor[4:1]<lift_1[19:16])
abs1=lift_1[19:16]-request_floor[4:1];
else
abs1=request_floor[4:1]-lift_1[19:16];
if(request_floor[4:1]<lift_2[19:16])
abs2=lift_2[19:16]-request_floor[4:1];
else
abs2=request_floor[4:1]-lift_2[19:16];
if(request_floor[0]) //up
begin
case(lift_1[23:20]) //the first lift (up)
4'b1000, //free
4'b1001,
4'b1010,
4'b1011,
4'b1100,
4'b1101,
4'b1110,
4'b1111:
begin
if(abs1<=dis)
begin
dis=abs1;
best_lift=2'b01;
enable=1;
end
end
4'b0100, //up
4'b0101: //up&&wait
begin
if(request_floor[4:1]>=lift_1[19:16] && (abs1 + 5)<=dis)
begin
dis=abs1+5;
best_lift=2'b01;
enable=1;
end
end
endcase
case(lift_2[23:20]) //the second lift (up)
4'b1000, //free
4'b1001,
4'b1010,
4'b1011,
4'b1100,
4'b1101,
4'b1110,
4'b1111:
begin
if(abs2<=dis)
begin
dis=abs2;
best_lift=2'b10;
enable=1;
end
end
4'b0100, //up
4'b0101: //up&&wait
begin
if(request_floor[4:1]>=lift_2[19:16] && (abs2 + 5)<=dis)
begin
dis=abs2+5;
best_lift=2'b10;
enable=1;
end
end
endcase
end
else //down
begin
case(lift_1[23:20]) //the first lift (down)
4'b1000, //free
4'b1001,
4'b1010,
4'b1011,
4'b1100,
4'b1101,
4'b1110,
4'b1111:
begin
if(abs1<=dis)
begin
dis=abs1;
best_lift=2'b01;
enable=1;
end
end
4'b0010, //down
4'b0011: //down&&wait
begin
if(request_floor[4:1]<=lift_1[19:16] && (abs1 + 5)<=dis)
begin
dis=abs1+5;
best_lift=2'b01;
enable=1;
end
end
endcase
case(lift_2[23:20]) //the second lift (down)
4'b1000, //free
4'b1001,
4'b1010,
4'b1011,
4'b1100,
4'b1101,
4'b1110,
4'b1111:
begin
if(abs2<=dis)
begin
dis=abs2;
best_lift=2'b10;
enable=1;
end
end
4'b0010, //down
4'b0011: //down&&wait
begin
if(request_floor[4:1]<=lift_2[19:16] && (abs2 + 5)<=dis)
begin
dis=abs2+5;
best_lift=2'b10;
enable=1;
end
end
endcase
end
if(enable==0)
begin
best_lift=2'b00;
enable=0;
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -