• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

06/03 09:23
539
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-23121G010505C.doc

共1个文件

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

软件:Quartus

语言:Verilog

代码功能:

任务及要求:

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

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

设计要求:

(1)设计语言为 Verilog。

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

日:注意闰年。

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

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在远程云端平台验证,远程云端平台如下,其他远程云端平台可以修改管脚适配:远程平台照片.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

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=344

  • 2-23121G010505C.doc
    下载

相关推荐