• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

30分鐘倒計(jì)時設(shè)計(jì)Verilog代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-24011Q00026155.doc

共1個文件

名稱:30分鐘倒計(jì)時設(shè)計(jì)Verilog代碼Quartus仿真

軟件:Quartus

語言:Verilog

代碼功能:

時間可調(diào)的倒計(jì)時器設(shè)計(jì)

1、可以通過加減按鍵控制倒計(jì)時起始時間。

2、按下開始按鍵后開始倒計(jì)時。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. testbench

5. 仿真圖

整體仿真圖

按鍵設(shè)置加10,減10分鐘,按下開始按鍵后開始倒計(jì)時

倒計(jì)時,分鐘和秒鐘

倒計(jì)時結(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;
///////////////////////////////////////////////分頻計(jì)時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è)計(jì)
always@(*)
begin?
case?(current_state)
idle:
begin
if(start_key==1)//按下開始鍵開始倒計(jì)時
next_state=timing;
else
next_state=idle;
end
timing:
begin
if(minute==8'd00?&&?second==8'd00)//倒計(jì)時結(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://倒計(jì)時
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è)置倒計(jì)時時間
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

  • 2-24011Q00026155.doc
    下載

相關(guān)推薦