名稱:30分鐘倒計時設(shè)計Verilog代碼Quartus仿真
軟件:Quartus
語言:Verilog
代碼功能:
時間可調(diào)的倒計時器設(shè)計
1、可以通過加減按鍵控制倒計時起始時間。
2、按下開始按鍵后開始倒計時。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. testbench
5. 仿真圖
整體仿真圖
按鍵設(shè)置加10,減10分鐘,按下開始按鍵后開始倒計時
倒計時,分鐘和秒鐘
倒計時結(jié)束
數(shù)碼管位選和段選(對應(yīng)程序中數(shù)碼管段選譯碼和位選)
部分代碼展示:
module?timing( input?clk_50Hz,//50Hz時鐘 input?start_key,//開始按鍵 input?add_10_key,//加10分鐘 input?sub_10_key,//減10分鐘 output?reg[3:0]bit_select,//數(shù)碼管位選低有效 output?reg[7:0]seg_select//數(shù)碼管段選低有效 ); wire?rst;//低電平復(fù)位 assign?rst=1; reg?[7:0]minute=8'd30; reg?[7:0]second=8'd0; ///////////////////////////////////////////////分頻計時1s//////////////////////////////////////// reg?[31:0]?time_count=32'd0; reg?clk_1Hz=1'd0; always@(posedge?clk_50Hz) if(time_count==32'd49)//分頻到1Hz begin time_count<=32'd0; clk_1Hz<=1; end else?begin time_count<=time_count+32'd1; clk_1Hz<=0; end /////////////////////////////////////////狀態(tài)機(jī)///////////////////////////////////// reg?[1:0]current_state; reg?[1:0]next_state; parameter?idle?=2'd0;//起始狀態(tài) parameter?timing?=2'd1;//定時狀態(tài) parameter?alarm?=2'd2;//定時結(jié)束 always@(posedge?clk_50Hz) begin if(rst==1'd0) begin current_state?<=idle; end else?begin current_state<=next_state; end end //狀態(tài)機(jī)設(shè)計 always@(*) begin? case?(current_state) idle: begin if(start_key==1)//按下開始鍵開始倒計時 next_state=timing; else next_state=idle; end timing: begin if(minute==8'd00?&&?second==8'd00)//倒計時結(jié)束后到alarm狀態(tài) begin? next_state=alarm; end else?begin next_state=timing; end end alarm: begin? next_state=idle;//回到起始狀態(tài) end default: begin current_state=idle; end endcase end always@(posedge?clk_50Hz) begin if(rst==1'd0) begin minute?<=8'd30;//復(fù)位后顯示30分鐘00秒 second?<=8'd0; end case?(current_state) timing://倒計時 begin if(clk_1Hz)//1秒鐘變一次 if(minute==8'd0?&&?second==8'd0)begin?? minute<=8'd0;?? second<=8'd0; end else?if(second==8'd0)begin?? minute<=minute-8'd1;?? second<=8'd59; end else?begin?? minute<=minute;?? second<=second-8'd1; end end idle://設(shè)置倒計時時間 begin if(add_10_key==1)//加10分鐘 if(minute>=8'd99) minute<=8'd99;//最大不超過99分鐘 else minute<=minute+8'd10;//加10分鐘 else?if(sub_10_key==1)//減10分鐘 if(minute<8'd10) minute<=8'd10;//最小不低于10分鐘,否則再減10變?yōu)樨?fù)數(shù) else minute<=minute-8'd10;//減10分鐘 end default:; endcase end
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=593
閱讀全文