FPGA基礎入門篇(四)——邊沿檢測電路
一、邊沿檢測
邊沿檢測,就是檢測輸入信號,或者FPGA內部邏輯信號的跳變,即上升沿或者下降沿的檢測。在檢測到所需要的邊沿后產生一個高電平的脈沖。這在FPGA電路設計中相當的廣泛。
沒有復位的情況下,正常的工作流程如下:
(1)D觸發器經過時鍾clk的觸發,輸出trigger信號,保存了t0時刻的信號。
(2)同時由trigger通過非門輸出信號,保留了當前時刻t1的觸發信號
(3)經過與門輸出信號pos_edge,neg_edge
a) 只有t0時刻為高,且t1時候為低的時候,與門輸出高,此時為下降沿。
b) 只有to時候為低,且t1時候為高的時候,與門輸出高,此時為上升沿。
當然,在復位的時刻,DFF被復位,無法檢測觸發信號。
二、采用一個觸發器的邊沿檢測電路設計:
- 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
- RTL電路
用vivado RTL分析電路
- 仿真代碼及結果
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個觸發器的周期時間保證至少有一個時鍾周期。
三、采用多個觸發器的邊沿檢測電路設計:
- 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
- RTL電路
用vivado RTL分析電路
- 仿真結果:
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