名称:电子万年历Verilog代码远程云端平台Quartus
软件:Quartus
语言:Verilog
代码功能:
任务及要求
1设计内容和要求(包括设计内容、主要指标与技术参数)
设计内容:基于FPGA的电子万年历的设计。
设计要求
(1)设计语言为 Verilog.
(2)设计基于FPGA的电子万年历的设计:要求可以显示年、月、日;同时可以整年、月
日:注意闰年。
(3)采用层次化的设计。
本代码已在远程云端平台验证,远程云端平台如下,其他远程云端平台可以修改管脚适配:
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
源代码
扫描文章末尾的公众号二维码