名稱:數(shù)字秒表定時器Verilog代碼vivado? ego1開發(fā)板
軟件:vivado
語言:Verilog
代碼功能:
數(shù)字秒表定時器:
1、具有定時功能、秒表功能,兩個功能通過開關(guān)切換;
2、秒表功能時,具體有啟動、暫停、復(fù)位功能;
3、秒表功能 :計時精度10ms (0.01秒);
4、秒表功能 :數(shù)碼管顯示分、秒、毫秒(10ms);
5、定時功能:可以通過按鍵設(shè)置時、分、秒;
6、定時功能:設(shè)置完時間后,按下開始按鍵,開始倒計時,直到倒計時為0,輸出led提示結(jié)束。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在ego1開發(fā)板驗證,ego1開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 管腳分配
5. RTL圖
6. modelsim仿真
整體仿真圖
分頻模塊
按鍵消抖模塊
秒表控制模塊
顯示譯碼模塊
部分代碼展示:
//跑表模塊 module?stopwatch( input?clk_in, input?clk_100Hz,//100Hz--對應(yīng)10ms input?start_key,//啟動//暫停 input?reset_key,//復(fù)位 output?[7:0]?stopwatch_Millisecond,//10毫秒 output?[7:0]?stopwatch_second,//秒 output?[7:0]?stopwatch_minute//分 ); parameter?idle_state=3'd0; parameter?cnt_time_state=3'd1; parameter?hold_time_state=3'd2; parameter?reset_time_state=3'd3; reg?[2:0]?state=3'd0; //計時狀態(tài)機(jī) always@(posedge?clk_in) if(reset_key) state<=reset_time_state;//復(fù)位狀態(tài) else case(state) reset_time_state://復(fù)位狀態(tài) state<=idle_state; idle_state://空閑狀態(tài) if(start_key) state<=cnt_time_state; else state<=idle_state; cnt_time_state://計時狀態(tài) if(start_key) state<=hold_time_state; else state<=cnt_time_state; hold_time_state://暫停狀態(tài) if(start_key) state<=cnt_time_state; else state<=hold_time_state; default:; endcase reg?[7:0]?Millisecond_cnt=8'd0;//10毫秒 reg?[7:0]?second_cnt=8'd0;//秒 reg?[7:0]?minute_cnt=8'd0;//分 always@(posedge?clk_in) if(state==reset_time_state)//復(fù)位狀態(tài) minute_cnt<=8'd0; else if(state==cnt_time_state?&&?clk_100Hz==1)//計時狀態(tài) if(Millisecond_cnt==8'd99?&&?second_cnt==8'd59)//59秒99'時向前記1分 if(minute_cnt<8'd59) minute_cnt<=minute_cnt+8'd1;//計時到990ms,下一次就到1秒了 else minute_cnt<=8'd0; else minute_cnt<=minute_cnt; else; always@(posedge?clk_in) if(state==reset_time_state)//復(fù)位狀態(tài) second_cnt<=8'd0; else if(state==cnt_time_state?&&?clk_100Hz==1)//計時狀態(tài) if(Millisecond_cnt==8'd99)//990ms時向前記1秒 if(second_cnt<8'd59) second_cnt<=second_cnt+8'd1;//計時到990ms,下一次就到1秒了 else second_cnt<=8'd0; else second_cnt<=second_cnt; else; always@(posedge?clk_in) if(state==reset_time_state)//復(fù)位狀態(tài) Millisecond_cnt<=8'd0; else if(state==cnt_time_state?&&?clk_100Hz==1)//計時狀態(tài) if(Millisecond_cnt<8'd99)//計時到990ms,下一次就到1秒了 Millisecond_cnt<=Millisecond_cnt+8'd1; else Millisecond_cnt<=8'd0;//計時到990ms,下一次就到1秒了 else; assign?stopwatch_Millisecond=Millisecond_cnt; assign?stopwatch_second=second_cnt; assign?stopwatch_minute=minute_cnt; endmodule
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=452