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

📄 autodate.v

📁 基于FPGA的多功能数字钟的设计与实现 内附有详尽的Verilog HDL源码
💻 V
字号:
module autodate(EN1,EN2,month1,month0,day1,day0,EO1);

output [3:0] month1,month0,day1,day0;
output EO1; //自动模式时为高,其他为低
input  EN1,EN2;

reg EO1;
reg [3:0] month1,month0,day1,day0;

always @(posedge EN1)
begin
  
  if(EN2 == 1'b0)   //手动设置没有使能,则自动按照正常时间递增日期
	
	begin
	  EO1 <= 1'b1;
	  //1,3,5,7,8,10,12等大月的天数是31
	  if(((month0 <= 4'b0001)&&(month1 < 4'b0001))||   //1
	     ((month0 == 4'b0011)&&(month1 < 4'b0001))||   //3
	     ((month0 == 4'b0101)&&(month1 < 4'b0001))||   //5
	     ((month0 == 4'b0111)&&(month1 < 4'b0001))||   //7
	     ((month0 == 4'b1000)&&(month1 < 4'b0001))||   //8
	     ((month0 == 4'b0000)&&(month1 == 4'b0001))||  //10
	     ((month0 == 4'b0010)&&(month1 == 4'b0001))    //12
	     )
	  begin
		if((day0 < 4'b1001)&&(day1 < 4'b0011))
		  day0 <= day0 + 4'b1;
		else if((day0 < 4'b0001)&&(day1 == 4'b0011))
		  day0 <= day0 + 4'b1;
		else
		begin
		  day0 <= 4'b0;
		  if(day1 < 4'b0011)
			day1 <= day1 + 4'b1;
		  else
		  begin
		    day1 <= 4'b0;
		    if((month0 < 4'b1001)&&(month1 < 4'b0001))
		      month0 <= month0 + 4'b1;
		    else if((month0 < 4'b0010)&&(month1 == 4'b0001))
		      month0 <= month0 + 4'b1;
		    else
		    begin
		      month0 <= 4'b0;
		      if(month1 < 4'b0001)
		        month1 <= month1 + 4'b1;
		      else
		        month1 <= 4'b0;
		    end
		  end
		end
      end
	  //4,6,9,11等大月的天数是30  
	  else if(
	         ((month0 == 4'b0100)&&(month1 < 4'b0001))||    //4月
	         ((month0 == 4'b0110)&&(month1 < 4'b0001))||    //6月
	         ((month0 == 4'b1001)&&(month1 < 4'b0001))||    //9月
	         ((month0 == 4'b0001)&&(month1 == 4'b0001))     //11月 
	          )
      begin
	    if((day0 < 4'b1001)&&(day1 < 4'b0011))
		  day0 <= day0 + 4'b1;
		else
		begin
		  day0 <= 4'b0;
		  if(day1 < 4'b0011)
			day1 <= day1 + 4'b1;
		  else
		  begin
		    day1 <= 4'b0;
		    if((month0 < 4'b1001)&&(month1 < 4'b0001))
		      month0 <= month0 + 4'b1;
		    else if((month0 < 4'b0010)&&(month1 == 4'b0001))
		      month0 <= month0 + 4'b1;
		    else
		    begin
		      month0 <= 4'b0;
		      if(month1 < 4'b0001)
		        month1 <= month1 + 4'b1;
		      else
		        month1 <= 4'b0;
		    end
		  end
		end
	  end
	  //2月
      else if(((month0 == 4'b0010)&&(month1 < 4'b0001)))    //2月
	    begin
	      if(((day0 < 4'b1001)&&(day1 < 4'b0010))||((day0 < 4'b1000)&&(day1 < 4'b0011)))
		    day0 <= day0 + 4'b1;
		  else
		  begin
		    day0 <= 4'b0;
		    if(day1 < 4'b0010)
			  day1 <= day1 + 4'b1;
		    else
		    begin
		      day1 <= 4'b0;
		      month0 <= month0 + 4'b1;
		    end
		  end
	    end
  end	
  else
    EO1 <= 1'b0;
end

endmodule

⌨️ 快捷键说明

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