本文介紹一個(gè)基于Spirit_V4開(kāi)發(fā)板、使用Quartus II軟件設(shè)計(jì)與開(kāi)發(fā)的高精度秒表倒計(jì)時(shí)器系統(tǒng)。該系統(tǒng)采用Verilog HDL硬件描述語(yǔ)言進(jìn)行模塊化設(shè)計(jì),實(shí)現(xiàn)了秒表(正計(jì)時(shí))、倒計(jì)時(shí)、暫停、復(fù)位等核心功能,精度可達(dá)0.01秒(10ms)。
一、 系統(tǒng)總體架構(gòu)
該系統(tǒng)采用自頂向下的設(shè)計(jì)方法,主要包含以下功能模塊:
- 頂層模塊 (top_timer):實(shí)例化并連接所有子模塊,定義與開(kāi)發(fā)板物理資源(時(shí)鐘、按鍵、數(shù)碼管、LED)的接口。
- 時(shí)鐘分頻與使能生成模塊 (clk_gen):將板載50MHz主時(shí)鐘進(jìn)行分頻,產(chǎn)生全局時(shí)序控制所需的10ms(100Hz)基準(zhǔn)時(shí)鐘使能信號(hào),確保計(jì)時(shí)精度。
- 核心計(jì)時(shí)與控制模塊 (timer_core):系統(tǒng)的核心狀態(tài)機(jī)。根據(jù)按鍵輸入,在“秒表模式”、“倒計(jì)時(shí)模式”、“暫停”、“復(fù)位”等狀態(tài)間切換,并執(zhí)行相應(yīng)的計(jì)數(shù)邏輯。
- 按鍵消抖模塊 (key_debounce):對(duì)機(jī)械按鍵產(chǎn)生的抖動(dòng)信號(hào)進(jìn)行濾波,確保每次按鍵只產(chǎn)生一個(gè)穩(wěn)定的有效脈沖。
- 數(shù)碼管動(dòng)態(tài)掃描驅(qū)動(dòng)模塊 (seg_driver):將計(jì)時(shí)器產(chǎn)生的BCD碼時(shí)間數(shù)據(jù)(時(shí)、分、秒、0.01秒)轉(zhuǎn)換為七段數(shù)碼管段選信號(hào),并通過(guò)時(shí)分復(fù)用方式驅(qū)動(dòng)多位數(shù)碼管顯示。
- LED指示模塊 (led_indicator):根據(jù)系統(tǒng)當(dāng)前工作模式(如運(yùn)行、暫停、倒計(jì)時(shí)結(jié)束),控制LED燈給出直觀的狀態(tài)指示。
二、 關(guān)鍵模塊Verilog代碼設(shè)計(jì)要點(diǎn)
1. 時(shí)鐘分頻模塊 (clk_gen)
module clk_gen(
input clk_50m, // 50MHz時(shí)鐘
input rst_n, // 異步低電平復(fù)位
output reg clken10ms // 10ms使能脈沖
);
reg [19:0] cnt; // 50M / 100 = 500,000, 需要19位計(jì)數(shù)器
always @(posedge clk50m or negedge rstn) begin
if (!rst_n) begin
cnt <= 20'd0;
clken10ms <= 1'b0;
end
else begin
if (cnt == 20'd499_999) begin // 計(jì)數(shù)到499999,產(chǎn)生一個(gè)周期的高脈沖
cnt <= 20'd0;
clken10ms <= 1'b1;
end
else begin
cnt <= cnt + 1'b1;
clken10ms <= 1'b0;
end
end
end
endmodule
2. 核心計(jì)時(shí)與控制模塊 (timer_core) 狀態(tài)機(jī)設(shè)計(jì)
該模塊定義了三個(gè)主要狀態(tài):IDLE(復(fù)位/初始)、RUN(計(jì)時(shí)運(yùn)行)、PAUSE(暫停)。在RUN狀態(tài)下,根據(jù)模式選擇信號(hào)mode(來(lái)自按鍵),決定是進(jìn)行正計(jì)時(shí)累加還是倒計(jì)時(shí)遞減。倒計(jì)時(shí)初值可通過(guò)預(yù)置寄存器設(shè)置,當(dāng)?shù)褂?jì)時(shí)減至零時(shí),產(chǎn)生結(jié)束信號(hào)并觸發(fā)LED警報(bào)。
3. 按鍵消抖模塊 (key_debounce)
采用經(jīng)典的計(jì)數(shù)器消抖法。當(dāng)檢測(cè)到按鍵電平變化后,啟動(dòng)一個(gè)約20ms的計(jì)時(shí)器,在此期間持續(xù)采樣,若電平保持穩(wěn)定,則輸出有效的按鍵脈沖。這能有效濾除機(jī)械觸點(diǎn)閉合/斷開(kāi)時(shí)產(chǎn)生的5-10ms抖動(dòng)。
4. 數(shù)碼管驅(qū)動(dòng)模塊 (seg_driver)
該模塊將內(nèi)部存儲(chǔ)的24位時(shí)間數(shù)據(jù)(格式為:HH-MM-SS-MS,每4位為一個(gè)BCD碼)按位分離,并通過(guò)一個(gè)高速掃描計(jì)數(shù)器(約1KHz)循環(huán)選中每一位數(shù)碼管,同時(shí)輸出對(duì)應(yīng)的段碼數(shù)據(jù),利用人眼視覺(jué)暫留實(shí)現(xiàn)穩(wěn)定顯示。
三、 Quartus II工程開(kāi)發(fā)流程
- 新建工程:指定工程目錄、器件型號(hào)(對(duì)應(yīng)Spirit_V4開(kāi)發(fā)板上的FPGA,如Cyclone IV EP4CE10F17C8)。
- 設(shè)計(jì)輸入:創(chuàng)建Verilog源文件,編寫(xiě)上述各模塊代碼。
- 分析與綜合:Quartus對(duì)代碼進(jìn)行邏輯綜合,生成門(mén)級(jí)網(wǎng)表。
- 引腳分配:根據(jù)Spirit_V4開(kāi)發(fā)板原理圖,將設(shè)計(jì)中的輸入輸出信號(hào)分配到具體的物理引腳(如時(shí)鐘引腳、按鍵引腳、數(shù)碼管段選/位選引腳、LED引腳)。這是硬件實(shí)現(xiàn)的關(guān)鍵一步。
- 全編譯:執(zhí)行完整的編譯流程,包括綜合、布局布線、時(shí)序分析和編程文件生成。
- 時(shí)序仿真(可選但推薦):使用ModelSim等工具進(jìn)行功能仿真,驗(yàn)證計(jì)時(shí)精度、按鍵響應(yīng)和狀態(tài)切換邏輯的正確性。
- 板級(jí)調(diào)試與下載:通過(guò)USB-Blaster將生成的
.sof或.jic文件下載到Spirit_V4開(kāi)發(fā)板中,進(jìn)行實(shí)際功能測(cè)試。
四、 功能測(cè)試與性能分析
在實(shí)際測(cè)試中,系統(tǒng)應(yīng)實(shí)現(xiàn)以下功能:
- 秒表模式:按下“開(kāi)始/暫停”鍵開(kāi)始正計(jì)時(shí),再次按下暫停,可隨時(shí)復(fù)位。
- 倒計(jì)時(shí)模式:通過(guò)模式鍵切換至倒計(jì)時(shí),可預(yù)置時(shí)間(例如通過(guò)撥碼開(kāi)關(guān)或組合按鍵設(shè)定),啟動(dòng)后開(kāi)始遞減,歸零時(shí)蜂鳴(或LED閃爍)報(bào)警。
- 高精度顯示:穩(wěn)定顯示
00:00:00.00至99:59:59.99的時(shí)間范圍。
系統(tǒng)精度主要由10ms使能信號(hào)的穩(wěn)定性決定,該信號(hào)源于50MHz晶振,誤差極小,完全滿(mǎn)足常規(guī)高精度計(jì)時(shí)需求。
五、
本項(xiàng)目完整展示了使用Verilog HDL在FPGA平臺(tái)上設(shè)計(jì)一個(gè)數(shù)字系統(tǒng)的流程。通過(guò)模塊化設(shè)計(jì)、狀態(tài)機(jī)控制、時(shí)鐘管理、人機(jī)接口(按鍵、顯示)驅(qū)動(dòng)等技術(shù)的綜合運(yùn)用,成功在Spirit_V4開(kāi)發(fā)板上實(shí)現(xiàn)了一個(gè)功能完善、性能穩(wěn)定的高精度秒表倒計(jì)時(shí)器。該設(shè)計(jì)方法可進(jìn)一步擴(kuò)展,如增加多組計(jì)時(shí)存儲(chǔ)、串口通信上位機(jī)控制等功能,具有良好的教學(xué)意義和實(shí)踐價(jià)值。