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

📄 l_cu.v

📁 电梯控制器 用于八层楼双电梯的协调调度 可进行扩展
💻 V
字号:
`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// Company: // Engineer://// Create Date:    08:51:20 01/09/07// Design Name:    // Module Name:    l_cu// Project Name:   // Target Device:  // Tool versions:  // Description://// Dependencies:// // Revision:// Revision 0.01 - File Created// Additional Comments:// ////////////////////////////////////////////////////////////////////////////////module l_cu(clk_i,rst_i,re_in,open,close,floor,stop,oopen,cclose,clear,move,FLE,request,call,pv_in,pv_out,le);  input         clk_i;  input         rst_i;  input         re_in;    // 重新输入数据  //input         set;	//set 为1时可以直接置数。  input         open;       //手动open信号  input         close;		//手动close信号	  input   [2:0] floor;       //电梯在哪一层。  input  stop;             //要不要停。。。   input pv_in;  output oopen;              //给电梯的open信号  output cclose;            //给电梯的close信号  output clear;              //电梯目的寄存器清零信号  output move;                //电梯继续动使能信号//引出灯开显示电梯在运行(上,下楼中)  output FLE;               //楼层变化使能信号  output request;					//请求调度信号  output call;  output pv_out,le;    reg oopen;  reg cclose;  reg clear;  reg move;  reg FLE;  reg request;  reg call;  reg pv_out,le;    reg [3:0] state;	  reg [3:0] temp; // wire sstop_out; // regis #(1) sstop(.register_in(stop),.register_out(sstop_out), .reset(rst_i), .clk(stop), .clr(FLE));  always @ (posedge clk_i or negedge rst_i)     begin	     if(!rst_i)		      begin				   state <= 4'b0000;						  //state = 111 时,idle					temp  <= 4'b0000;				end        else		    begin			 										case (state)				     4'b0000:  					     begin  						     if(re_in)								     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else							    if(pv_in)								   begin								    temp <= state+ 1;									 state <= 'b1111;									end								  else								  begin							       state <= 4'b0001; 									 								  end					     end					  4'b0001:					     begin						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else						         state <= 4'b0010; end					  4'b0010:					     begin  						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else									state <= 4'b0011;						  end					  4'b0011:					     begin 						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else					          if(!stop)     						       begin					    			   state <= 4'b0000;                            end					   		 else								    if(close)							    	    state <= 4'b0101;																											   						   	    else								       state <= 4'b0100; 						  end					  4'b0100:					     begin 						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else						   						      if(close)								    state <= 4'b0101;								else					     					             state <= 4'b0101; 						  end					  4'b0101:					     begin 						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else							   begin 						   						      if(open)								    state <= 4'b0011;								else									 state <= 4'b0110; 								end						  end 					  4'b0110:					     begin						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else						   						         state <= 4'b0111; end					  4'b1110:					     begin						     if(re_in)							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else						   						         state <= 4'b0000; end					  4'b1111:					     begin 						     if(re_in)							      state <= 4'b1111; 							  else						     if(!pv_in)							  begin							      state <= temp;								end							  else 					 		      state <= 'b1111;		 					 	  end					  default:					    begin					 	     if(re_in )							     begin								    temp <= state + 1;							       state <= 'b1111;								  end							  else					   						         state <= state + 1; 					     						 end				   endcase 		  			 end	  end		  always @ (state or pv_in or rst_i)    begin	    FLE = 'b0;		 oopen = 'b0;		 cclose = 'b0;		 clear = 'b0;		 move = 'b0;		 request = 'b0;		 call = 'b0;		 pv_out = 0;		 le = 0;		 state = state;		 case (state)		    4'b0000:			     begin 				     if(!rst_i)					     FLE = 'b0;	 ///???????					  else   					  begin					     FLE = 'b1;					     					     					     if(pv_in) 					     pv_out = 0;					     else					     begin					     pv_out = 1;					     le = 1;					     end					  end				  end			 4'b0001:				        request = 'b1;				     			 4'b0010://			     if(sstop_out)	  //在该层停留才开门    				  call = 'b1;			     			 4'b0011:			 begin               if(stop)			         begin oopen = 'b1;  end               else					   begin oopen = 'b0;  end                  pv_out = 0;		        			le = 1;				end			  //   begin   end			 4'b0100:	  		       begin   		     	    if(open)	    			    begin oopen = 'b1;	end					 else 					    begin oopen = 'b0;	  end	   			 if (close)	   			    begin cclose = 'b1;	  end					 else					    begin cclose = 'b0;   end				 end			 4'b0101:			     begin  				      if(!open)						    cclose = 'b1;                  else 						    cclose = 'b0;					   if(open)						    oopen = 'b1;					   else 						    oopen = 'b0;		 		  			     end				 4'b0110:			     begin  move = 'b1; end  //请求调度信号			 			 4'b1111:			 begin			     if(temp == 4'b0001 && !pv_in)			        begin			            pv_out = 1;			            le = 1;			            end			     else			     pv_out = 0;			     end			 default:			     begin    				     FLE = 'b0;					  request = 'b0;					  call = 'b0;					  oopen = 'b0;					  cclose = 'b0;				  end        endcase			   endendmodule

⌨️ 快捷键说明

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