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

📄 minusself23to0.v

📁 verilog描述 23:59:59-00:00:00自减计时器 按set键
💻 V
字号:
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date:    15:17:31 04/12/2008 // Design Name: // Module Name:    minusself23to0 // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: ////////////////////////////////////////////////////////////////////////////////////module minusself23to0    (clk  , set ,  adj  ,  cf ,  timmer , mode ,sback, mback, hback);    input clk;	 input set;	 input adj;	 input cf;	 input timmer;	 input mode ;    output [7:0] sback;    output [7:0] mback;    output [7:0] hback;reg[7:0]  hcb=8'h23 ,  scb=8'h59  , mcb=8'h59 ;   //cb is clock backreg[7:0]  hback=8'h23 ,  sback=8'h59  , mback=8'h59 ; reg[3:0] setcb = 4'h0;reg   timmergo = 1   ;reg[1:0] modestate = 2'b10  ;//reg[7:0] dclk1 = 8'b0000000  , dclk2 = 8'b0000000 , dclk3 = 8'b0000000 ,dclk4 = 8'b0000000 ,dclk5 = 8'b0000000;reg[7:0] count1 = 0;reg reset = 0 ;reg[1:0]  transfer = 00;reg clh =0 ,cls =0 ;//-------------------------control singal timmer ,    describe-------------------------------always @(posedge clk)beginif(timmer == 1)  begin    	 	 timmergo = timmergo + 1;                       //timmergo = 0 is stop  end  else if(mode == 1 & setcb == 0)   modestate = modestate + 1;end  //----------------------------------no singal 60 seconds  or  get mode singal ----------------------------------------------always @(posedge clk)beginreset = 0;begin if(adj==0 & cf ==0 & set ==0 )   begin       if (count1 == 59)  	     	begin							reset = 1;			end        else		  count1 = count1 + 1 ;		  	end	 else if ( adj==1 )      count1=0;	  else if ( cf==1 )      count1=0;	  else if ( set==1 )      count1=0; end end/*//-----------------------set initial  hour ,minute , second------------------------always @(posedge clk )    	      	  //begin to start ,and going ,if going to 00:00:00,alarm and out of this state	  //in this state , if we give set ,begin to set1,2,3 hour , minute , second ,out ; if @timmer ,go back beginif(reset==1)  setcb = 0;else  begin    if ( set==1 )       begin       setcb = setcb + 1 ;             if(setcb==1)            begin            hcb = hback;		      mcb = mback;		      scb = sback;            end            				       end           else          if(modestate==2'b10 & setcb>0)  	   transfer = 2'b00		;	  	begin      	  	  	 	  case(setcb)    		4'h1:                                        //hour set		  begin		   if(timmer == 1)   		 setcb = 0;	     else			 begin			     if(adj==1 & cf ==0)                                       			       begin			           	                       if(hcb[7:4]==4'h2)                            	                         begin	                           if(hcb[3:0]>= 4'h3)							          begin										 hcb = 0;		                         end							         else							         hcb[3:0]=hcb[3:0]+1;					                            			                   end    			        		                   else                             begin		                     if(hcb[3:0] == 4'h9)							         begin							      hcb[3:0] =0;							      hcb[7:4] = hcb[7:4]+1;					               end                           else												            hcb[3:0]=hcb[3:0]+1;                           end 		             				         transfer = 2'b01;		 				      end             else if(adj == 0 & cf == 1)                                              begin					      if(hcb[7:4]==4'h0)                            	                         begin	                           if(hcb[3:0]== 4'h0)							          begin										 hcb[7:4] = 2;		                        hcb[3:0] = 3;										 end							         else							         hcb[3:0]=hcb[3:0] - 1;					                            			                   end    			        		                   else                             begin		                     if(hcb[3:0] == 0)							         begin							      hcb[3:0] =9;							      hcb[7:4] = hcb[7:4] - 1;					               end                           else												            hcb[3:0]=hcb[3:0] - 1;                           end 	                   transfer = 2'b01;																 end					end		   end   						  		4'h2:                                         //minute set 		   begin			if(timmer == 1)   		 setcb = 0;	     else			 begin			   if(adj == 1 & cf == 0) 			                                              			       begin			           	                       if(mcb[7:4]==4'h5)                            	                         begin	                           if(mcb[3:0]== 4'h9)							          begin										 mcb = 0;		                         end							         else							         mcb[3:0]=mcb[3:0]+1;					                            			                   end    			        		                   else                             begin		                     if(mcb[3:0] == 4'h9)							         begin							      mcb[3:0] =0;							      mcb[7:4] = mcb[7:4]+1;					               end                           else												            mcb[3:0]=mcb[3:0]+1;                           end 		             transfer = 2'b10;					          				      end            else if(adj == 0 & cf == 1)                                          begin					      if(mcb[7:4]==4'h0)                            	                         begin	                           if(mcb[3:0]== 4'h0)							          begin										 mcb[7:4] = 5;		                        mcb[3:0] = 9;										 end							         else							         mcb[3:0]=mcb[3:0] - 1;					                            			                   end    			        		                   else                             begin		                     if(mcb[3:0] == 0)							         begin							      mcb[3:0] =9;							      mcb[7:4] = mcb[7:4] - 1;					               end                           else												            mcb[3:0]=mcb[3:0] - 1;                           end 	                    transfer = 2'b10;	 														 end					end			   end   								4'h3:                                       //second  set				    begin			 if(timmer == 1)   		 setcb = 0;	     else			 begin			    if(adj == 1 & cf == 0) 			                                           			       begin			           	                       if(scb[7:4]==4'h5)                            	                         begin	                           if(scb[3:0]== 4'h9)							          begin										 scb = 0;		                         end							         else							         scb[3:0]=scb[3:0]+1;					                            			                   end    			        		                   else                             begin		                     if(scb[3:0] == 4'h9)							         begin							      scb[3:0] =0;							      scb[7:4] = scb[7:4]+1;					               end                           else												            scb[3:0]=scb[3:0]+1;                           end 		             				          transfer = 2'b11		;				      end            else if(adj ==0 & cf==1)                                          begin					      if(scb[7:4]==4'h0)                            	                         begin	                           if(scb[3:0]== 4'h0)							          begin										 scb[7:4] = 4'h5;		                         scb[3:0] = 4'h9;										 end							         else							         scb[3:0]=scb[3:0] - 1;					                            			                   end    			        		                 else                             begin		                     if(scb[3:0] == 0)							         begin							      scb[3:0] =9;							      scb[7:4] = scb[7:4] - 1;					               end                           else												            scb[3:0]=scb[3:0] - 1;                           end 	                     transfer = 2'b11		;														 end					end		   end   								default:                             //out of set , back time  going 		          		  begin   		  transfer = 2'b00	 ;          setcb = 000;		  end		    endcase			  	   end	         	 	  	     endend*///---------------------set=000,timmer=1-----time stop  -----------------------------------//--------------------- if this time ,we give ADJ=1 , give hour , minute ,second =0-----------------//---------------------------set=000 and timmer=1,time  begin-------------going back clockalways @(posedge clk)beginif(transfer == 2'b11) 		   sback =  scb  ;elsebegin  cls = 0;  begin if(setcb ==000 & modestate == 2'b10 )    if(timmergo == 0)	     begin		  if (adj == 1)					sback = 0;	    				 end    else if(setcb ==0 & modestate == 2'b10  )       if(timmergo == 1)	     begin			if(transfer == 2'b11)  		    sback = scb;			 else			 			 				    begin                           // second go					 if(sback[7:4]==0)                            	                begin						 	                if(sback[3:0]== 0)						 begin						   						     begin							  if(mback>0 | hback>0)                        begin								sback[7:4] = 5 ;                        sback[3:0] = 9 ;                        cls = 1 ;								                       end                        														      end															end							  else						  						  sback[3:0]=sback[3:0] - 1;					                            			           end                     							  		          else                      begin		              if(sback[3:0] == 0)							begin							sback[3:0] =9;							sback[7:4] = sback[7:4] - 1;												      end                     else												      sback[3:0]=sback[3:0] - 1;                    end 			 							 							 					 end	 end	end  endendalways @(posedge clk  )                              //minute gobeginif(transfer == 2'b10) 		  mback   =  mcb ;		   elsebegin clh=0;begin  if(setcb ==000 & modestate == 2'b10 )     if(timmergo == 0)	     begin		  if (adj == 1)					 mback = 0;	    				  end  else if(setcb ==0 & modestate == 2'b10  )    if(cls ==1)     if(timmergo == 1)      begin       if(transfer == 2'b10)  		    mback = mcb;	 					      if(mback[7:4]==4'h0)                            	                         begin	                           if(mback[3:0]== 4'h0)							          begin										   										   if(hback>0)										    begin										    mback[7:4] = 5;		                            mback[3:0] = 9;											 clh = 1;										    end										 								 										 end							         else							         mback[3:0]=mback[3:0] - 1;					                            			                   end    			        		                   else                             begin		                     if(mback[3:0] == 0)							         begin							      mback[3:0] =9;							      mback[7:4] = mback[7:4] - 1;					               end                           else												            mback[3:0]=mback[3:0] - 1;                           end 				end     end end end	always @(posedge clk )beginif(transfer == 2'b01) hback =  hcb  ;elsebegin  if(setcb ==000 & modestate == 2'b10 )          //hour  go  if(timmergo == 0)	   begin		if (adj == 1)					hback = 0;	    				end   else if(setcb ==0 & modestate == 2'b10  )    if(timmergo == 1)	  if(clh == 1)      begin      if(transfer == 2'b01)  		    hback = hcb;		 else					      if(hback[7:4]==4'b0000)                            	                         begin	                           if(hback[3:0]== 4'b0000)							          begin										 hback =0 ;										 end							         else							         hback[3:0]=hback[3:0] - 1;					                            			                   end    			        		                   else                             begin		                     if(hback[3:0] == 0)							         begin							      hback[3:0] =9;							      hback[7:4] = hback[7:4] - 1;					               end                           else												            hback[3:0]=hback[3:0] - 1;                           end 	  									end   end		     	end			endmodule

⌨️ 快捷键说明

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