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