在FPGA設計中,經常要對外部輸入的信號捕捉上升沿。
在某些設計中,外部輸入信號為方波信號,由比較器輸出。
如上圖,比較器輸出方波后,電路設計欠佳,產生抖動,下降沿產生毛刺,如果FPGA邏輯設計不好,容易在方波下降沿時再次捕捉到上升沿。
在電路無法更改的情況下,只能更改FPGA邏輯設計,過濾毛刺。
在捕捉邊沿中通常使用以下邏輯:
時序邏輯:
always@(posedge sys_clk)
begin
reg1 <= rising_in;
reg2 <= reg1;
end
組合邏輯:
assign rising_cap = reg1 & (~reg2);
方案一:
通過降頻采集外部輸入信號:
always@(posedge sys_clk)
begin
if(div_clk)
begin
reg1 <= rising_in;
reg2 <= reg1;
end
end
將sys_clk分頻到div_clk,注意分頻時要滿足采樣定理。通過降頻,過濾毛刺。
方案二:
在某些設計中,由於使用方波上升沿進行完全同步,而且整個系統使用sys_clk,所以不能進行分頻設計。
對信號進行多次采樣,過濾毛刺。
always@(posedge sys_clk)
begin
reg1 <= rising_in;
reg2 <= reg1;
reg3 <= reg2;
reg4 <= reg3;
reg5 <= reg4;
reg6 <= reg5;
reg7 <= reg6;
reg8 <= reg7;
end
組合邏輯:
assign rising_cap = reg1 & reg2 & reg3 & reg4 & (~& reg5)
& (~& reg6) & (~& reg7) & (~& reg8);
在方波上升沿很陡的情況下,可使用上述方式,方波上升沿的上升時間可由電路電阻改變。
版權所有權歸卿萃科技 杭州FPGA事業部,轉載請注明出處
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA極客空間 微信公眾號
掃描二維碼關注杭州卿萃科技FPGA極客空間