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

2021-09-24 03:22:39 字數 3615 閱讀 1750

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;

endelse

begin

tri_1 <= data_i;

//觸發器

endendassign 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;

#10rst_n_i =1;

data_i =0;

#13data_i =1;

//上公升沿

#20data_i =0;

//下降沿

#15data_i =1;

//上公升沿

#10data_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;

endelse

begin

tri_1 <= data_i;

tri_2 <= tri_1; 二級觸發器

endend/*

reg [1:0] tri_r;

always @(posedge clk or negedge rst_n)begin

if(rst_n == 1'b0)begin

tri_r <= 2'b00;

endelse begin

tri_r <= ;

endend*/

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能更好的濾除雜波,寄存訊號,但同時檢測延時大。

參考博文:

Android入門篇(四)Activity生命週期

安卓中基於sdk的開發最基礎的就是四大元件,這都是老生常談的知識,這裡我也講解一下最基礎的知識 public class mainactivity extends activity override protected void onstart override protected void onr...

Linux基礎入門篇知識回顧

1.2計算機系統組成 1.3計算機組成原理 1.4作業系統發展史 1.5linux系統發展史 1.6linux基礎入門 三 進製轉換 1 計算機網路 2 作業系統原理 3 資料庫原理 4 資料結構 1.1計算機的特點及發展趨勢 特點 發展趨勢 智慧型化 多 化 網路化 巨型化 微型化 1.2計算機系...

es6基礎入門篇

1 let 允許重複賦值,但不允許重複宣告變數 2 const 宣告常量,不允許重複宣告,也不允許重複賦值 3 字串 1 string.fromcharcode 編碼 能讓編碼轉成字元 示例,統計瀏覽器能支援多少個中文字元 let name for let i 0x4e00 i 0x9fa5 i c...