FPGA設計基礎——邊沿檢測

我們知道,在邏輯設計中,所有信號無非都是由“0”和“1”組成的,即“0”和“1”不斷的跳變組成了大規模的邏輯設計。其中每次“0”和“1”之間的跳變稱為一個邊沿。由0——>1的跳變稱為上升沿、又1——>0的跳變成為下降沿,如下圖所示:

FPGA設計基礎——邊沿檢測


從上圖可以看出,信號邊沿是非常簡單的一個概念,在FPGA設計中也有著廣泛的應用,是初學者必須掌握的內容,那麼這個功能在實際的邏輯設計中有什麼用呢?

用途1:指示邏輯中一個動作的開始,比如通過一個信號從0變為1,代表一個任務的開始,通知後級模塊進行工作,比如下圖所示的A和B兩個模塊,當A把數據準備好以後,通過紅色的控制信號拉高來通知B模塊開始工作,直到B模塊工作完成。

FPGA設計基礎——邊沿檢測

用途2:統計,比如在通信領域,經常要對輸入輸出的報文個數計數統計,指示一個報文的有效信號可能需要佔據很多個cycle,這個時候我們就不能對報文有效信號的高電平進行統計,而應該對報文有效信號的上升沿或者下降沿進行統計。不僅僅是通信領域,任何需要對某一個信號進行統計的場景下都適用。

用途3:時鐘域穿越,比如一個50M時鐘域的單bit信號,進入200M時鐘域。在200M時鐘域,這個信號的寬度是多少已經不重要了,只關注這個信號有沒有出現過,這個時候就可以用邊沿檢測電路來處理。當然,異步時鐘域處理是另外一個大的話題,這裡不做贅述。

那如何做邊沿檢測了?很簡單,先看下波形圖。我們對wen信號進行上升沿和下降沿檢測。rising_edge就代表wen的上升沿信號,falling_edge就代表wen的下降沿信號。

FPGA設計基礎——邊沿檢測

代碼也比較簡單,取上升沿和下降沿代碼如下圖所示

FPGA設計基礎——邊沿檢測

FPGA設計基礎——邊沿檢測

需要注意的是,在取上升沿或者下降沿的時候,wen和wen_1dly信號的取值是不一樣的。


分享到:


相關文章: