數字電路毛刺濾波器設計與實現
數字電路毛刺濾波器設計與實現
前言
在數位電路設計中,信號毛刺(Glitch)是一個常見的問題,常見於按鍵去彈跳、外部信號輸入處理、需要穩定信號的控制系統、數位電路中的雜訊處理等。本文將介紹一個使用Verilog實現的毛刺濾波器設計,該濾波器可以有效過濾掉輸入信號中的短暫毛刺,提高系統的穩定性。
專案架構
RTL代碼實現
以下是完整的Verilog RTL代碼:
module glitch_filter (
input clk, // 系統時脈輸入
input nRst, // 低電位有效的重置信號
input iSignal, // 需要進行濾波的輸入信號
output oSignal // 經過濾波處理後的輸出信號
);
// 內部信號定義
reg [31:0] rvShiftSignal_d, rvShiftSignal_q; // 32位移位暫存器,用於儲存信號歷史
reg rSignal_d, rSignal_q; // 輸出信號的組合邏輯和時序邏輯暫存器
// 第一個時序邏輯區塊:移位暫存器的時序控制
always @(posedge clk or negedge nRst) begin
if(!nRst)
rvShiftSignal_q <= 32'hFFFFFFFF; // 重置時設定為全1狀態
else
rvShiftSignal_q <= rvShiftSignal_d; // 正常工作時更新移位暫存器
end
// 第一個組合邏輯區塊:移位操作
always @(*) begin
rvShiftSignal_d = {rvShiftSignal_q[30:0], iSignal}; // 每個時脈週期將輸入信號移入最低位
end
// 第二個時序邏輯區塊:輸出信號的時序控制
always @(posedge clk or negedge nRst) begin
if(!nRst)
rSignal_q <= 1'b1; // 重置時輸出信號設定為1
else
rSignal_q <= rSignal_d; // 正常工作時更新輸出信號
end
// 第二個組合邏輯區塊:輸出信號的邏輯判斷
always @(*) begin
if(rvShiftSignal_q == 32'hFFFFFFFF) // 如果移位暫存器中全是1
rSignal_d = 1'b1; // 輸出設定為1
else if(rvShiftSignal_q == 32'h0) // 如果移位暫存器中全是0
rSignal_d = 1'b0; // 輸出設定為0
else
rSignal_d = rSignal_q; // 其他情況保持原狀態
end
assign oSignal = rSignal_q; // 將內部信號連接到輸出端
endmodule
技術要點說明
1. 移位暫存器機制
- 使用32位移位暫存器記錄輸入信號的歷史狀態
- 每個時脈週期,新的輸入信號被移入暫存器的最低位
- 這樣可以觀察信號在32個時脈週期內的變化
2. 濾波邏輯設計
- 只有當移位暫存器中的所有位元都為1時,輸出才會變為1
- 只有當移位暫存器中的所有位元都為0時,輸出才會變為0
- 其他情況下保持原有輸出狀態不變
3. 重置機制實現
- 當重置信號(nRst)為低電位時:
- 移位暫存器被設定為全1(32'hFFFFFFFF)
- 輸出信號被設定為1
應用場景
該毛刺濾波器適用於以下場景:
- 按鍵去彈跳
- 外部信號輸入處理
- 需要穩定信號的控制系統
- 數位電路中的雜訊處理
改進建議
1. 可配置的濾波寬度
module glitch_filter #(
parameter WIDTH = 32 // 可配置的移位暫存器寬度
)(
input clk,
input nRst,
input iSignal,
output oSignal
);
reg [WIDTH-1:0] rvShiftSignal_d, rvShiftSignal_q;
// ... 其餘代碼相同
endmodule
注意事項
- 濾波器的延遲時間與移位暫存器的位元數相關,本設計中為32個時脈週期
- 需要根據實際應用場景調整移位暫存器的位元數
- 時脈頻率的選擇需要考慮實際信號的特性
模擬結果
波形模擬
上圖為使用ModelSim進行的波形模擬結果,從上到下依序為:
- clk:系統時脈信號
- nRst:重置信號
- iSignal:輸入信號(包含毛刺)
- oSignal:濾波後的輸出信號
模擬情境說明
-
毛刺濾除測試
- 輸入信號(iSignal)包含多個短暫的毛刺(小於32個時脈週期)
- 輸出信號(oSignal)保持穩定,成功濾除這些毛刺
- 實測結果顯示,寬度小於32個時脈週期的毛刺都被有效濾除
-
正常信號響應
- 當輸入信號保持穩定超過32個時脈週期
- 輸出信號才會跟隨變化
- 驗證了設計的穩定性要求
-
重置功能驗證
- 重置信號(nRst)觸發時
- 輸出立即回到預設狀態(高電位)
- 移位暫存器正確清除為全1
關鍵性能指標
-
延遲特性
- 信號變化延遲:32個時脈週期
- 重置響應時間:1個時脈週期
-
資源使用
- 使用32位元移位暫存器
- 簡單的組合邏輯電路
- 整體資源使用率低
結語
這個毛刺濾波器設計簡單但效果顯著,通過移位暫存器和狀態機制實現了對輸入信號的有效濾波。在實際應用中,可以根據具體需求調整參數,使其更好地適應不同的應用場景。完整的程式碼實現和詳細的註解,有助於理解數字電路設計中的濾波器實現方法。