FPGA設計中毛刺現象的消除方法?

在FPGA的設計中,毛刺現象是長期困擾電子設計工程師的設計問題之一, 是影響工程師設計效率和數字系統設計有效性和可靠性的主要因素。由於訊號在FPGA的內部走線和通過邏輯單元時造成的延遲,在多路訊號變化的瞬間,組合邏輯的輸出常常產生一些小的尖峰,即毛刺訊號,這是由FPGA 內部結構特性決定的。毛刺現象在FPGA的設計中是不可避免的,有時任何一點毛刺就可以導致系統出錯,尤其是對尖峰脈衝或脈衝邊沿敏感的電路更是如此。

  因此,克服和解決毛刺問題對現代數字系統設計尤為重要。本文從FPGA的原理結構的角度探討了產生毛刺的原因及產生的條件,在此基礎上,總結了多種不同的消除方法,在最後結合具體的應用對解決方案進行深入的分析。

工具/原料

D觸發器

系統的啟動訊號、控制訊號、握手訊號

觸發器的清零訊號(CLEAR)、預置訊號(PRESET)、時鐘輸入訊號(CLK)或鎖存器的輸入訊號

方法/步驟

1利用冗餘項法

  利用冗餘項消除毛刺有2種方法:代數法和卡諾圖法,兩者都是通過增加冗餘項來消除險象,只是前者針對於函式表示式而後者針對於真值表。以卡諾圖為例,若兩個卡諾圓相切,其對應的電路就可能產生險象。因此,修改卡諾圖,在卡諾圖的兩圓相切處增加一個圓,以增加多餘項來消除邏輯冒險。但該法對於計數器型產生的毛刺是無法消除的。

2取樣法

  由於冒險多出現在訊號發生電平跳變的時刻,即在輸出訊號的建立時間內會產生毛刺,而在保持時間內不會出現,因此,在輸出訊號的保持時間內對其進行取樣,就可以消除毛刺訊號的影響,常用的取樣方法有2種:一種使用一定寬度的高電平脈衝與輸出相與,從而避開了毛刺訊號,取得輸出訊號的電平值。這種方法必須保證取樣訊號在合適的時間產生,並且只適用於對輸出訊號時序和脈衝寬度要求不嚴的情況。另一種更常見的方法叫鎖存法,是利用D觸發器的輸入端D對毛刺訊號不敏感的特點,在輸出訊號的保持時間內,用觸發器讀取組合邏輯的輸出訊號。由於在時鐘的上升沿時刻,輸出端Q=D,當輸入的訊號有毛刺時,只要不發生在時鐘的上升沿時刻,輸出就不會有毛刺。這種方法類似於將非同步電路轉化為同步電路,實現簡單,但同樣會涉及到時序問題。

3吸收法

  由於產生的毛刺實際上是高頻窄脈衝,故增加輸出濾波,在輸出端接上小電容C就可以濾除毛刺。但輸出波形的前後沿將變壞,在對波形要求較嚴格時,應再加整形電路,該方法不宜在中間級使用。

4延遲法

  因為毛刺最終是由於延遲造成的,所以可以找出產生延遲的支路。對於相對延遲小的支路,加上毛刺寬度的延遲可以消除毛刺。但有時隨著負載增加,毛刺會繼續出現,而且,當溫度變化,所加的電壓變化或要增加邏輯閘時,所加的延遲是不同的,必須重新設計延遲線,因而這種方法也是有侷限性的。而且採用延遲線的方法產生延遲會由於環境溫度的變化而使系統可靠性變差。

5硬體描述語言法

這種方法是從硬體描述語言入手,找出毛刺產生的根本原因,改變語言設計,產生滿足要求的功能模組,來代替原來的邏輯功能塊。一個3位計數器可能會在011到100和101到110發生跳變時產生毛刺,究其原因是因為一次有2位發生跳變,可以採用VHDL語言對計數器編寫如下,產生的計數模組代替原來普通的計數器。

相關問題答案