FPGA基礎入門篇(四) 邊沿檢測電路


FPGA基礎入門篇(四)——邊沿檢測電路

一、邊沿檢測

邊沿檢測,就是檢測輸入信號,或者FPGA內部邏輯信號的跳變,即上升沿或者下降沿的檢測。在檢測到所需要的邊沿后產生一個高電平的脈沖。這在FPGA電路設計中相當的廣泛。
沒有復位的情況下,正常的工作流程如下:

(1)D觸發器經過時鍾clk的觸發,輸出trigger信號,保存了t0時刻的信號。
(2)同時由trigger通過非門輸出信號,保留了當前時刻t1的觸發信號
(3)經過與門輸出信號pos_edge,neg_edge

a) 只有t0時刻為高,且t1時候為低的時候,與門輸出高,此時為下降沿。
b) 只有to時候為低,且t1時候為高的時候,與門輸出高,此時為上升沿。
當然,在復位的時刻,DFF被復位,無法檢測觸發信號。

二、采用一個觸發器的邊沿檢測電路設計:
  1. verilog代碼實現:
//one trigger
module edge_detect(
input clk_i, rst_n_i, data_i, //輸入端口
output posedge_o,negedge_o		//輸出端口
);

//one regester
reg tri_1;

always@(posedge clk_i or negedge rst_n_i)
begin
    if (! rst_n_i)			//置位
    begin
        tri_1 <= 1'b0;
    end
    else
    begin
        tri_1 <= data_i;	//觸發器
    end
end

assign negedge_o = tri_1 & (~data_i); 		//下降沿檢測
assign posedge_o = (~tri_1) & data_i;     	//上升沿檢測
endmodule
  1. RTL電路
    用vivado RTL分析電路
  2. 仿真代碼及結果
module tb_test(
    );

reg clk_i,rst_n_i,data_i;
wire posedge_o, negedge_o;

//模塊調用
edge_detect u1(
.clk_i(clk_i),
.rst_n_i(rst_n_i),
.data_i(data_i),
.posedge_o(posedge_o),
.negedge_o(negedge_o)
);

//initial
initial begin
clk_i = 0;
rst_n_i = 0;
#10
rst_n_i = 1;
data_i = 0;
#13
data_i = 1; 	//上升沿
#20
data_i = 0;		//下降沿
#15
data_i = 1;		//上升沿
#10
data_i = 0;		//下降沿
end

//clk 信號
always #5 clk_i = ~clk_i;

endmodule

仿真結果:

分析:在第一次上升沿時,由於上升沿離下個時鍾上升沿間隔短,結果會產生“毛刺”

下面利用多個觸發器可以延遲n-1個觸發器的周期時間保證至少有一個時鍾周期。
三、采用多個觸發器的邊沿檢測電路設計:
  1. verilog 語言實現(兩個觸發器及雙邊沿檢測)
//two trigger
module edge_detect(
input clk_i, rst_n_i, data_i,
output posedge_o,negedge_o,double_edge_o
);

//two regester
reg tri_1;
reg tri_2;

always@(posedge clk_i or negedge rst_n_i)
begin
    if (! rst_n_i)			//置位
    begin
        tri_1 <= 1'b0;
        tri_2 <= 1'b0;
    end
    else
    begin
        tri_1 <= data_i; 
        tri_2 <= tri_1;  	二級觸發器
    end
end

assign negedge_o = tri_2 & (~tri_1);		//下降沿檢測
assign posedge_o = (~tri_2) & tri_1;		//上升沿檢測
assign double_edge_o = tri_1 ^ tri_2;		//雙邊沿檢測

endmodule
  1. RTL電路
    用vivado RTL分析電路
  2. 仿真結果:

    tri_1將輸入與時鍾同步,tri_2延遲一個時鍾周期。級數越多,延遲越高。
可以看到邊沿檢測結果都出現在下一個時鍾周期
四、邊沿檢測應用

邊沿檢測技術在項目應用中,非常低廣泛。如要有效捕獲信號跳變沿,邊沿檢測技術的應用是必不可少的。
有如下幾個方面

(1)將時鍾邊沿使能轉換為邊沿檢測使能,使時鍾同步化。

(2)捕獲信號的突變(UART,SPI等信號使能突變)

(3)邏輯分析儀中信號的邊沿檢測。

五、實現指標及存在缺陷

沒有十全十美的東西,也沒有十全十美的電路、代碼;邊沿檢測技術亦如此。有如下缺陷:

(1)增大CLK信號可以增強邊沿檢測的效率,但不能濾去跳變的雜波。

(2)減少CLK可以有效濾去跳變的雜波,但不能及時檢測到邊沿跳變。

(3)增加DFF能更好的濾除雜波,寄存信號,但同時檢測延時大。

參考博文: https://blog.csdn.net/u011412586/article/details/9971455
https://www.cnblogs.com/crazybingo/archive/2011/07/26/2117149.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM