FPGA基礎之脈衝邊沿檢測原理verilog版本

2021-06-10 12:16:55 字數 2027 閱讀 2074

最近一直忙著找工作。哎,希望保佑我通過二面吧。

verilog的脈衝檢測方法一直在用,就那幾句話,但一直沒想他的原理,今天乙個同學說筆試的遇到這個了,我一想,要我寫還真寫不出來,不懂原理,怎麼寫啊。死記硬背是我不喜歡的。

網上搜了一下,總結一下幾種方法。首先介紹一下基本的原理。

脈衝邊沿的特性:兩側電平發生了變化

如上圖所示乙個脈衝,既有下降沿也有上公升沿(好像是廢話),系統的時鐘週期一定要比這個小,頻率越高越好。後面說為什麼

如果檢測的是下降沿(通常的按鍵檢測),脈衝邊沿的特性就是兩側電平發生了變化,下降沿是高電平變低電平。

根據系統時鐘頻率檢測,如果前後進來的訊號發生了變化,這裡用的是異或運算。即兩個電平不相同則是發生邊沿。

思路:設計兩個或多個一位的暫存器,用來接收被檢測的訊號,系統時鐘來一次記一次輸入訊號,如果用了兩個暫存器直接異或就可以了。

如果不為0,則發生了邊沿,再拼接,拼接順序假定是,則若先進reg=1,後進製0,則是下降沿,即=2』b10。

同理相反=2』b01,則為上公升沿。如果用了多個暫存器則可以更好地檢測,防止干擾脈衝。具體看例3:

例1:兩個暫存器:

reg dly0;

reg dly1;

wire dc_clk;

always @(posedge clk or negedge rst)

begin

if(!rst)begin

dly0 <= 1'b0;

dly1 <= 1'b0;

endelse begin

dly0 <= fpga_io;\\fpga_io為

待測脈衝

dly1 <= dly0;

endend

assigndc_clk= dly1 ^ dly0;//fpga_io邊沿檢測訊號

這裡值檢測了邊沿,沒判斷下降還是上公升。

也可以這樣:專門判斷是否是下降沿:

assign io_xor = dly1 & ~dly0;//因為下降沿特徵: 先進來的是高電平,後進來的是低電平,(注意dly0為始終為後進訊號)則後進取反再與先進。如果為1,表示訊號時下降沿。

判斷上公升沿類似可推。

例2:兩個暫存器,判斷了上公升還是下降

input data_clk//認為待測資料的時候

reg pre_state;

always @(posedge sys_clk)

begin

pre_state <= data_clk;//

利用reg下乙個時鐘才生效的特性.

if( == 0x01)//0x01上公升沿,0x10下降沿

begin

....

endend

例3  判斷下降沿。多個暫存器。

always @ (posedge clk or negedge rst_n) begin

if(!rst_n) begin

rs232_rx0 <= 1'b0;

rs232_rx1 <= 1'b0;

rs232_rx2 <= 1'b0;

rs232_rx3 <= 1'b0;

endelse begin

rs232_rx0 <= rs232_rx;

rs232_rx1 <= rs232_rx0;

rs232_rx2 <= rs232_rx1;

rs232_rx3 <= rs232_rx2;

endend

//這種方法可以濾除20-40ns的毛刺

assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0;//這種方法引自特權同學的**

易分析,後進訊號rs232_rx0,rs232_rx1,必須都為0,且先進訊號rs232_rx3 &,rs232_rx2都必須為1,neg_rs232_rx 才會為1.

則此時判斷為下降沿。

FPGA的邊沿檢測

以前我曾一度傻乎乎的使用 always posedge signal 這樣的 去檢測signal的上公升沿,鬧出了很多問題。當受實驗室的一同學指教後,再也不會傻乎乎的這樣幹了。當然,你看完下文也不會這樣幹了。檢測上公升沿的原理 使用高頻的時鐘對訊號進行取樣,因此要實現上公升沿檢測,時鐘頻率至少要在訊...

脈衝邊沿檢測的亞穩態處理

一 原理脈衝邊沿檢測是乙個非同步系統設計中常常會使用到的方法。假設有乙個系統,時鐘域a是 50mhz 的時鐘域,它有乙個待檢測的變化訊號 test 存在時鐘域 b,利用此時鐘來檢測時鐘域a中 test 訊號的上下沿。現在需要分兩種情況討論 1 假設時鐘域 a的變化訊號 test 變化得非常快,最大快...

FPGA亞穩態狀態檢測邊沿

如上圖所示,當時鐘上公升沿來的時候,資料恰好改變,這個時候輸出的結果就無法確定是0 1,暫存器會經過一段時間的抖動然後輸出乙個結果 無法確定是正確還是錯誤 通過三個暫存器,資料的抖動會消失,從而得到穩定的資料輸出 資料同樣不確定是否正確 當暫存器抖動之後輸出為0時,如下圖所示,通過兩個暫存器,就可以...