⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 search.v

📁 控制两组,每组三个电梯的verilog实现
💻 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 + -