基于FPGA的电子万年历显示年月日设计Verilog代码VIVADO仿真

名称:基于FPGA的电子万年历显示年月日设计Verilog代码VIVADO仿真(文末获取)

软件:VIVADO

语言:Verilog

代码功能:电子万年历显示年月日

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

部分代码展示:

/*
--万年历
*/
`timescale  1ns/100ps
module wannianli
(
input sysclk,//1s时钟
input reset_n,//低电平复位
//输出年月日,时分秒
output [7:0]   year_high_dis,//
output [7:0]   year_low_dis,//
output [7:0]   month_dis,//
output [7:0]   day_dis,//
output [7:0]   hour_dis,//
output [7:0]   minute_dis,//
output [7:0]   second_dis//
);
//定义计数常数
parameter   second_cnt   = 60;//60秒
parameter   minute_cnt   = 60;//60分
parameter   hour_cnt   = 24;//24时
//定义计数器
reg [7:0]   year_high  =  8'd0;
reg [7:0]   year_low   =  8'd0;
reg [3:0]   month     =  4'd0;
reg [4:0]   day       =  5'd0;
reg [4:0]   hour      =  5'd0;
reg [5:0]   minute    =  6'd0;
reg [5:0]   second    =  6'd0;
//闰年控制2月时间及大月小月控制------------------------------------------------------------------------------
wire  month_flag = (day == 28)&!(year_low[1:0] == 0 & year_low !=0 | year_high[1:0] ==0 & year_low ==0)&(month == 2)|
                   (day == 29)& (year_low[1:0] == 0 & year_low !=0 | year_high[1:0] ==0 & year_low ==0)&(month == 2)|
                   (day == 30)& ((month == 4)|(month == 6)|(month == 9)|(month == 11))|
                   (day == 31)& ((month == 1)|(month == 3)|(month == 5)|(month == 7)|(month == 8)|(month == 10)|(month == 12));
//------------------------------------------------------------------------------
always@(posedge sysclk or negedge reset_n)
begin
  if (!reset_n)//复位,修改该处可以修改起始时间,目前设置为2019.12.31日22:10:00
  begin
    second  <= 6'd0;
    minute  <= 6'd10;
    hour    <= 5'd22;
    day     <= 5'd30;
    month   <= 4'd12;
    year_low  <= 8'd19;
    year_high  <= 8'd20;
  end
  else begin
          if ((second == second_cnt - 1'b1)) //秒计时到59
          begin
            second <= 6'd0;//秒回0
            if (minute == minute_cnt - 1'b1)  //分计时到59
            begin
              minute <= 6'd0;//分回0
              if (hour == hour_cnt - 1'b1)  //时计时到23
              begin
                hour <= 5'd0;//时回0
                if (month_flag) //month_flag指示当月最后一天,根据闰年及大小月判断,闰年2月为29,否则28;大月31,小月30
                begin
                  day <= 5'd1;//回到1号
                  if (month == 12) //12月
                  begin
                    month <= 5'd1;//回到1月
                    if (year_low == 100 -1'b1)//年低位最大到99
                    begin
                      year_low <= 8'd0;//回0
                      if (year_high == 100 -1'b1)//年高位最大到99
                      begin
                        year_high <= 8'd0;//回0
                      end
                      else if (year_low == 100 -1'b1)//计数到99年,年高位加1
                      begin
                        year_high <= year_high + 1'b1;
                      end
源代码

 扫描文章末尾的公众号二维码

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值