名稱:電子萬年歷Verilog代碼遠(yuǎn)程云端平臺(tái)Quartus
軟件:Quartus
語言:Verilog
代碼功能:
任務(wù)及要求:
1.設(shè)計(jì)內(nèi)容和要求(包括設(shè)計(jì)內(nèi)容、主要指標(biāo)與技術(shù)參數(shù))
設(shè)計(jì)內(nèi)容:基于FPGA的電子萬年歷的設(shè)計(jì)。
設(shè)計(jì)要求:
(1)設(shè)計(jì)語言為 Verilog。
(2)設(shè)計(jì)基于FPGA的電子萬年歷的設(shè)計(jì):要求可以顯示年、月、日;同時(shí)可以整年、月。
日:注意閏年。
(3)采用層次化的設(shè)計(jì)。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在遠(yuǎn)程云端平臺(tái)驗(yàn)證,遠(yuǎn)程云端平臺(tái)如下,其他遠(yuǎn)程云端平臺(tái)可以修改管腳適配:
演示視頻:
設(shè)計(jì)文檔:
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;//定義月最大天數(shù) 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 //調(diào)整天------------------------------------------------------------------------------ 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;//月進(jìn)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 //調(diào)整月------------------------------------------------------------------------------ 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 //調(diào)整年------------------------------------------------------------------------------ always@(posedge?CLK?or?posedge?RST) ????if?(RST) begin//復(fù)位到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
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=344