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

📄 liftcontrol.v

📁 一个简单的电梯控制系统,主要实现一个八层楼的电梯控制.
💻 V
📖 第 1 页 / 共 2 页
字号:
module Lift(clk,rst,p1,p2,p3,p4,p5,p6,p7,d2,d3,d4,d5,d6,d7,d8,in_request,            curfloorlight,inrequestlight,uplight,dnlight);///////inputinput clk,rst;input p1,p2,p3,p4,p5,p6,p7,d2,d3,d4,d5,d6,d7,d8; //out request,p:up; d:downinput [7:0]in_request;//choose floor///////outputoutput [7:0] inrequestlight;//display all choosed flooroutput uplight;//display the up stateoutput dnlight;//display the down stateoutput [3:0]curfloorlight;//display the current floor//output door;    //door==1,open door;door==0,close doorreg [7:0] inrequestlight;reg uplight,dnlight;reg [3:0] curfloorlight;///////reg in modulereg [7:0] curfloor;//store the current floorparameter WAIT=2'b00,UP=2'b01,DOWN=2'b10,STOP=2'b11;//define the lift statereg [1:0] state;//store the lift state:UP or DOWN or WAIT or STOP reg [1:0] pre_state;reg [7:0] uprequest;//store all of the up request reg [7:0] dnrequest;//store all of the down requestreg [7:0] inrequest;//store all of the floor where user will go reg [2:0] count;//counter,when counter=0,the door opened,until count=5,then close the doorreg door;///accept and store the inputalways@(p1 or p2 or p3 or p4 or p5 or p6 or p7 or         d2 or d3 or d4 or d5 or d6 or d7 or d8 or in_request)begin    uprequest[0]=p1;    uprequest[1]=p2;    uprequest[2]=p3;    uprequest[3]=p4;    uprequest[4]=p5;    uprequest[5]=p6;    uprequest[6]=p7;    uprequest[7]=0;    dnrequest[0]=0;    dnrequest[1]=d2;    dnrequest[2]=d3;    dnrequest[3]=d4;    dnrequest[4]=d5;    dnrequest[5]=d6;    dnrequest[6]=d7;    dnrequest[7]=d8;    inrequest=in_request;end///////output the curflooralways @ (curfloor)begin   case(curfloor)       8'b00000001:curfloorlight=4'b0001;       8'b00000010:curfloorlight=4'b0010;       8'b00000100:curfloorlight=4'b0011;       8'b00001000:curfloorlight=4'b0100;       8'b00010000:curfloorlight=4'b0101;       8'b00100000:curfloorlight=4'b0110;       8'b01000000:curfloorlight=4'b0111;       8'b10000000:curfloorlight=4'b1000;       default:curfloorlight=4'b0000;   endcaseend   //output the current statealways @ (state)begin	if(state==UP)		begin			uplight=1;			dnlight=0;		end	else if(state==DOWN)		begin			uplight=1;			dnlight=0;		end	else		begin			uplight=0;			dnlight=0;		endendalways@(posedge clk)begin    if(!rst)    begin        state<=STOP;        uprequest<=8'b00000000;        dnrequest<=8'b00000000;        inrequest<=8'b00000000;        curfloor<=8'b00000001;    end    else    begin        case (state)	     STOP:	     begin	     if((uprequest==8'b0)&&(dnrequest==8'b0)) state<=STOP;	     else	     begin		     case(curfloor)		     8'b00000001:	     			if(uprequest[0]) begin	     					uprequest[0]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end	     			else state<=UP;	     				     	 8'b00000010:	     	 		if(uprequest[1]||dnrequest[1]) begin	     	 				uprequest[1]<=0;	     	 				dnrequest[1]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else if((uprequest>curfloor)||(dnrequest>curfloor))		     				state<=UP;		     		else state<=DOWN;	     				     		8'b00000100:	     	 		if(uprequest[2]||dnrequest[2]) begin	     	 				uprequest[2]<=0;	     	 				dnrequest[2]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else if((uprequest>curfloor)||(dnrequest>curfloor))		     				state<=UP;		     		else state<=DOWN;		     				     	8'b00001000:	     	 		if(uprequest[3]||dnrequest[3]) begin	     	 				uprequest[3]<=0;	     	 				dnrequest[3]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else if((uprequest>curfloor)||(dnrequest>curfloor))		     				state<=UP;		     		else state<=DOWN;		     				     	8'b00010000:	     	 		if(uprequest[4]||dnrequest[4]) begin	     	 				uprequest[4]<=0;	     	 				dnrequest[4]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else if((uprequest>curfloor)||(dnrequest>curfloor))		     				state<=UP;		     		else state<=DOWN;		     				      8'b00100000:	     	 		if(uprequest[5]||dnrequest[5]) begin	     	 				uprequest[5]<=0;	     	 				dnrequest[5]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else if((uprequest>curfloor)||(dnrequest>curfloor))		     				state<=UP;		     		else state<=DOWN;		     			     	8'b01000000:	     	 		if(uprequest[6]||dnrequest[6]) begin	     	 				uprequest[6]<=0;	     	 				dnrequest[6]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else if((uprequest>curfloor)||(dnrequest>curfloor))		     				state<=UP;		     		else state<=DOWN;		     			     	8'b10000000:	     	 		if(dnrequest[7]) begin	     	 				dnrequest[7]<=0;	     					state<=WAIT;	     					count<=0;	     					door<=1;		     			end		     		else state<=DOWN;		     						     endcase	     end	     end				      WAIT:	      begin	      if (count==3'b101) door<=0;			  else count<=count+1;			  if(inrequest==0 && uprequest==0 && dnrequest==0) state<=STOP;			  else if(inrequest>curfloor) state<=UP;	      else if((inrequest<curfloor)&&(inrequest!=0)) state<=DOWN;	      else state<=WAIT;	      end	      	      UP:	      begin	      case(curfloor)	      		'b00000001: begin	      				if(inrequest[1] && uprequest[1])                        begin                        inrequest[1]<=0;                        uprequest[1]<=0;                        pre_state<=state;                        state<=WAIT;                        count<=0;                        door<=1;                        end                   else  if(uprequest[1])                        begin                             uprequest[1]<=0;                             pre_state<=state;                             state<=WAIT;                             count<=3'b000;                             door<=1;                     		end                      else   if(inrequest[1])                        begin                            inrequest[1]<=0;                            pre_state<=state;                            state<=WAIT;                            count<=3'b000;                            door<=1;                        end                    else                       state<=UP;                           				         end				         				    'b00000010: begin	      				if(inrequest[2] && uprequest[2])                        begin                        inrequest[2]<=0;                        uprequest[2]<=0;                        pre_state<=state;                        state<=WAIT;                        count<=3'b000;                        door<=1;                        end                   else  if(uprequest[2])                        begin                             uprequest[2]<=0;                             pre_state<=state;                             state<=WAIT;                             count<=3'b000;                             door<=1;                     		end                      else   if(inrequest[2])                        begin                            inrequest[2]<=0;                            pre_state<=state;                            state<=WAIT;                            count<=3'b000;                            door<=1;                        end                    else                       state<=UP;                           				         end				         				    'b00000100: begin	      				if(inrequest[3] && uprequest[3])                        begin                        inrequest[3]<=0;                        uprequest[3]<=0;                        pre_state<=state;                        state<=WAIT;                        count<=3'b000;                        door<=1;                        end                   else  if(uprequest[3])                        begin                             uprequest[3]<=0;                             pre_state<=state;                             state<=WAIT;                             count<=3'b000;                             door<=1;                     		end                      else   if(inrequest[3])                        begin                            inrequest[3]<=0;                            pre_state<=state;                            state<=WAIT;                            count<=3'b000;                            door<=1;                        end                    else                       state<=UP;                           				         end				         				    'b00001000: begin	      				if(inrequest[4] && uprequest[4])                        begin                        inrequest[4]<=0;                        uprequest[4]<=0;                        pre_state<=state;                        state<=WAIT;                        count<=3'b000;                        door<=1;                        end                   else  if(uprequest[4])                        begin                             uprequest[4]<=0;                             pre_state<=state;                             state<=WAIT;                             count<=3'b000;                             door<=1;                     		end   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -