电子万年历Verilog代码远程云端平台Quartus

名称:电子万年历Verilog代码远程云端平台Quartus

软件:Quartus

语言:Verilog

代码功能:

任务及要求

1设计内容和要求(包括设计内容、主要指标与技术参数)

设计内容:基于FPGA的电子万年历的设计。

设计要求

(1)设计语言为 Verilog.

(2)设计基于FPGA的电子万年历的设计:要求可以显示年、月、日;同时可以整年、月

日:注意闰年。

(3)采用层次化的设计。

本代码已在远程云端平台验证,远程云端平台如下,其他远程云端平台可以修改管脚适配:

远程平台照片.png

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 管脚分配

6. 仿真文件(VWF)

7. 仿真图

部分代码展示:

//万年历
`timescale  1ns/100ps
module calendar
(
input  CLK,
input  RST,
input day_add,//天加
input day_sub,//天减
input month_add,//月加
input month_sub,//月减
input year_add,//年加
input year_sub,//年减
output reg [7:0]   year_h,//年高位
output reg [7:0]   year_l,//年低位
output reg [3:0]   month,//月
output reg [4:0]   day//天
);
reg month_add_cin=0;
reg month_sub_cin=0;
reg year_add_cin=0;
reg year_sub_cin=0;
reg [4:0]   day_max  =  5'd30;//定义月最大天数
always@(posedge CLK or posedge RST)
begin
  if (RST)
day_max <= 5'd30;
  else
if(!(year_l[1:0] == 0 & year_l !=0 | year_h[1:0] ==0 & year_l ==0)&(month == 2))
day_max <= 5'd28;//非闰年2月
else if((year_l[1:0] == 0 & year_l !=0 | year_h[1:0] ==0 & year_l ==0)&(month == 2))
day_max <= 5'd29;//闰年2月
else if((month == 4)|(month == 6)|(month == 9)|(month == 11))
day_max <= 5'd30;//小月
else if((month == 1)|(month == 3)|(month == 5)|(month == 7)|(month == 8)|(month == 10)|(month == 12))
day_max <= 5'd31;//大月
else
day_max <= 5'd30;
end
//调整天------------------------------------------------------------------------------
always@(posedge CLK or posedge RST)
    if (RST)
day <= 5'd1;
    else
if(day_add)//加
if(day>=day_max)
begin
day <= 5'd1;
month_add_cin<=1;//月进1
end
else
begin
day <=day + 5'd1;
   month_add_cin<=0;
end
else if(day_sub)//减
if(day==5'd1)
begin
day <= day_max;
   month_sub_cin<=1;//月减1
end
else 
begin
day <=day - 5'd1;
   month_sub_cin<=0;//
end
else if(day>=day_max)begin
day <=day_max;
month_add_cin<=0;
month_sub_cin<=0;//
end
else
   begin
day <=day;
month_add_cin<=0;
month_sub_cin<=0;//
end
//调整月------------------------------------------------------------------------------
always@(posedge CLK or posedge RST)
    if (RST)
month <= 4'd1;
    else
if(month_add | month_add_cin)//加
if(month>=4'd12)//12月
begin
month <= 4'd1;
   year_add_cin<=1;//年加1
end
else
begin
month <=month + 4'd1;
   year_add_cin<=0;//
end
else if(month_sub | month_sub_cin)//减
if(month==4'd1)
begin
month <= 4'd12;
   year_sub_cin<=1;//年减1
end
else
begin
month <=month - 4'd1;
year_sub_cin<=0;
end
else
begin
month <=month;
year_add_cin<=0;//
year_sub_cin<=0;
end
//调整年------------------------------------------------------------------------------
always@(posedge CLK or posedge RST)
    if (RST)
begin//复位到2019年
year_l <= 8'd19;//年低位
year_h <= 8'd20;//年高位
end
    else
if(year_add | year_add_cin)//年加
if(year_l==8'd99 && year_h==8'd99)//9999年
begin
year_l <= 8'd0;
year_h <= 8'd0;
end
else if(year_l==8'd99)//99年
begin
year_l <= 8'd0;
year_h <=year_h + 8'd1;
end
else//低位加1
begin
year_l <=year_l + 8'd1;
year_h <=year_h;
end
else if(year_sub | year_sub_cin)//年减
if(year_l==8'd00 && year_h==8'd00)//0000年
begin
year_l <= 8'd0;
year_h <= 8'd0;
end
else if(year_l==8'd00)//00年
begin
year_l <= 8'd99;
year_h <=year_h - 8'd1;
end
else//低位减1
begin
year_l <=year_l - 8'd1;
year_h <=year_h;
end
else
begin
year_l <=year_l;
year_h <=year_h;
end
endmodule
源代码

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

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
基于FPGA设计的万年历数字时钟课程设计Quartus工程源码+设计报告文档资料,可以做为你的学习设计参考。 系统总体设计 2.1.1 系统功能介绍 本次万年历实现的功能有: (1)年月日、时分秒的走时、设置及其显示。 (2)闹钟功能、闹钟设置及其闹钟设置显示。 2.1.2 系统硬件介绍 本次万年历设计使用的硬件资源有:6个数码管、三个微动开关、两个拨码开关和两个LED灯。 其中,6个数码管选择显示年月日、时分秒及其闹钟设置的时分秒。三个按键分别为翻页按键(选择数码管显示内容)、选择按键(选择需调整的内容)、加一按键(调整的内容加一),用于翻页和时间及其闹钟的设置。两个拨码开关分别为闹钟使能开关和复位开关,用于闹钟的打开及其关闭和将整个系统复位。两个LED灯分别为闹钟开关状态和闹钟标志(代替蜂鸣器)。 2.1.3 系统总体框图介绍 整个系统采用自顶向下的设计方法,从系统的总体功能出发,将整个系统划分为多个模块,然后再将各个模块划分为多个功能部分,编程完成后将各个部分联系起来组成整个系统。 module calendar(system_clk,reset,key_turn,key_switch,key_add,switch_alarm,led,beep,hex0,hex1,hex2,hex3,hex4,hex5); input system_clk,reset,key_turn,key_switch,key_add,switch_alarm;//系统时钟、复位、三个按键和一个拨码开关 output led,beep; //LED灯和蜂鸣器 output [6:0] hex0; //输出:数码管0 output [6:0] hex1; //输出:数码管1 output [6:0] hex2; //输出:数码管2 output [6:0] hex3; //输出:数码管3 output [6:0] hex4; //输出:数码管4 output [6:0] hex5; //输出:数码管5 wire second_add,minute_add,hour_add,day_add,month_add,year_add,alarm_second_add,alarm_minute_add,alarm_hour_add; //专属增一信号 wire [1:0] flag_turn; //翻页状态信号 wire [1:0] flag_switch; //闪烁数码管选择信号 wire select_sign; //选择状态 wire [5:0] second; //秒 wire [5:0] minute; //分 wire [4:0] hour; //小时 wire [4:0] day; //日 wire [3:0] month; //月 wire [6:0] year; //年 wire [5:0] alarm_second; //闹钟秒 wire [5:0] alarm_minute; //闹钟分 wire [4:0] alarm_hour; //闹钟小时 //例化按键模块 key_drive_module use_key_drive_module( .system_clk (system_clk), .reset (reset), .key_turn (key_turn), .key_switch (key_switch), .key_add (key_add), .flag_switch (flag_switch), .flag_turn (flag_turn), .second_add (second_add), .minute_add (minute_add), .hour_add (hour_add), .day_add (day_add), .month_add (month_add), .year_add (year_add), .alarm_second_add (alarm_second_add), .alarm_minute_add (alarm_minute_add), .alarm_hour_add (alarm_hour_add), .select_sign (select_sign) ); //例化时钟模块 clock
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值