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

📄 elevator_ctr.v

📁 這是一個Verilog的電梯控制程序碼,控制樓層為1~4樓,關開門...等
💻 V
📖 第 1 页 / 共 2 页
字号:
            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 + -