/* module clockgen(reset,clk,clkout); parameter i=50000000; input reset,clk; output reg clkout; reg [25:0]counter; initial counter=0; always@(posedge clk) if(reset) clkout=0; else if(counter==i-1) begin counter=0; clkout=~clkout; end else counter=counter+1; endmodule */ module elevator(en,reset,clk,out1,out2,out3,f1,f2,f3,l_m,l_o,l_c,sel); input en,reset,clk,out1,out2,out3,f1,f2,f3; output reg l_m,l_o,l_c; output reg [1:0]sel; parameter floor1=2'b01; parameter floor2=2'b10; parameter floor3=2'b11; parameter floor0=2'b00; // wire clkout; // clockgen m1(reset,clk,clkout); reg [1:0] present_state,next_state; initial begin present_state=0; next_state=0; l_m<=0; l_o<=0; l_c<=0; end always @ (posedge clk) if (reset == 1'b1) begin present_state = floor0; l_m<=0; l_o<=0; l_c<=0; end else begin next_state<=present_state; case(present_state) floor1: begin if(out1==1'b1 && en==1) begin if(f2==1) begin next_state=floor2; l_m<=((out1)&&(en)&&(f2)); //delay(200); l_o<=((out1)&&(en)&&(f2)); l_c<=((out1)&&(en)&&(f2)); sel=2'b10; end else if(f3==1) begin next_state=floor3; l_m<=((out1)&&(en)&&(f3)); //delay(300); l_o<=((out1)&&(en)&&(f3)); l_c<=((out1)&&(en)&&(f3)); sel<=2'b11; end else next_state=present_state; l_o<=((out1)&&(en)); l_c<=((out1)&&(en)); sel<=2'b01; end end floor2: begin if(out2==1'b1 && en==1) begin if(f3==1'b1) begin next_state=floor3; l_m<=((out2)&&(en)&&(f3)); //delay(200); l_o<=((out2)&&(en)&&(f3)); l_c<=((out2)&&(en)&&(f3)); sel<=2'b11; end else if(f1==1'b1) begin next_state=floor1; l_m<=((out2)&&(en)&&(f2)); //delay(200); l_o<=((out2)&&(en)&&(f2)); l_c<=((out2)&&(en)&&(f2)); sel<=2'b01; end else begin next_state=floor2; l_o<=((out2)&&(en)); l_c<=((out2)&&(en)); sel<=2'b10; end end end floor3: begin if(out3==1'b1 && en==1) begin if(f2==1'b1) begin next_state=floor2; l_m<=((out3)&&(en)&&(f2)); //delay(200); l_o<=((out3)&&(en)&&(f2)); l_c<=((out3)&&(en)&&(f2)); sel<=2'b10; end else if(f1==1'b1) begin next_state=floor1; l_m<=((out3)&&(en)&&(f1)); //delay(300); l_o<=((out3)&&(en)&&(f1)); l_c<=((out3)&&(en)&&(f1)); sel=2'b01; end else begin next_state=floor3; l_o<=((out3)&&(en)); l_c<=((out3)&&(en)); sel<=2'b11; end end end floor0: begin if(en==1'b1) begin next_state=floor1; sel<=2'b01; l_m<=(en); //delay(200); end else begin next_state=floor0; sel<=2'b00; end end default: begin next_state=floor0; sel<=2'b00; end endcase end /* function delay; input [9:0]value; //reg delay; integer i; begin for(i=0;i