摘 要: 毛刺現象在FPGA 設計中非常普遍, 而毛刺的出現往往導致系統結果的錯誤。本文從FPGA 的原理結構的角度深入探討了毛刺產生的原因及產生的條件, 總結了多種不同的解決方法, 并結合具體的應用對解決方案進行深入地分析。
FPGA (F ield P rogrammable Gate A rray) 以其容量大、功能強以及可靠性高等特點, 在現代數字通信系統中得到廣泛的應用。采用FPGA 設計數字電路已經成為數字電路系統領域的主要設計方式之一[ 1 ]。在FPGA 的設計中, 毛刺現象是長期困擾電子設計工程師的設計問題之一, 是影響工程師設計效率和數字系統設計有效性和可靠性的主要因素。由于信號在FPGA 的內部走線和通過邏輯單元時造成的延遲, 在多路信號變化的瞬間, 組合邏輯的輸出常常產生一些小的尖峰, 即毛刺信號, 這是由FPGA內部結構特性決定的。毛刺現象在FPGA 的設計中是不可避免的, 有時任何一點毛刺就可以導致系統出錯, 尤其是對尖峰脈沖或脈沖邊沿敏感的電路更是如此。因此, 克服和解決毛刺問題對現代數字系統設計尤為重要。本文從FPGA 的原理結構的角度探討了產生毛刺的原因及產生的條件, 在此基礎上, 總結了多種不同的消除方法, 在最后結合具體的應用對解決方案進行深入的分析。
1 毛刺產生的原因
以圖1 的例子分析毛刺產生的起因: 圖1 是一個3 位同步加法計數器, 當使能端為高電平時, 在每個時鐘上升沿時刻, QA , QB, QC 從000 逐步變到111, 進入到全1狀態后, 進位輸出端輸出半個時鐘脈沖寬度的高電平, 但從圖2 仿真結果中可以看到在011 變化到100 時刻ROC出現了尖脈沖, 即毛刺。
?
?
以Xilinx 的FPGA 為例分析其內部結構, 如圖3 所示。
FPGA 芯片是由可構造的輸入輸出塊( Input/ OutputBlock, IOB)、可構造邏輯塊(Cinfigurable Logic Block, CLB ) 和可編程連線資源( Programmable Interconnect Array, PIA ) 3 種可構造單元構成的。IOB 位于芯片內部四周, 在內部邏輯陣列與外部芯片封裝引腳之間提供一個可編程接口, 他主要由邏輯門、觸發器和控制單元組成。CLB 組成了FPGA 的核心陣列, 能完成用戶指定的邏輯功能; 每個CLB 主要有一個組合邏輯、幾個觸發器、若干個多選一電路和控制單元組成; PIA 位于芯片內部的邏輯塊之間, 經編程后形成連線網絡, 用于芯片內部邏輯間的相互連接, 并在他們之間傳遞信息。從圖3 中可以看出,對于不同的輸入1、2, 到邏輯塊(M ) 的走線可能是不同的,這就造成了輸入信號的延遲, 假設1、2 同時變化, 由于延遲的存在, 到達M 時就有先有后(這種現象稱為競爭) , 在邏輯輸出端就可能會有險象(也稱冒險) , 即產生了毛刺。在上述例子中的011 狀態, 假設QA 與QB 同時從1 變化到0, 而QC 提前了2 ns 從0 變到1 , 產生一個2 ns 的高電平,這就是毛刺。也就是說, 在FPGA 設計中, 毛刺產生的根本原因是信號在芯片內部走線時產生的延遲。
2 毛刺產生的條件
借助同樣的例子來分析毛刺產生的條件。QA , QB,QC 在每一個時鐘上升沿同時發生翻轉, 但實際中由于延遲的存在, 并不能保證QA , QB, QC 到D 觸發器的布線長短一致。如果QC 比QA , QB 提前了2 ns, 這就形成了2 ns 的全1 狀態, 稱為“假象全1”, 進而導致進位輸出產生一個尖脈沖。值得注意的是, 在3 變到4 即011 到100時, 3 位中有2 位同時發生翻轉, 即在同一時刻有大于一個的信號發生改變。由于延遲的作用, 多個信號到達終點的時間有先有后, 形成了競爭, 由競爭產生的錯誤輸出就是毛刺。所以, 毛刺發生的條件就是在同一時刻有多個信號輸入發生改變。
3 消除毛刺的方法
知道了毛刺產生的條件, 就可以通過改變設計, 破壞其條件來減少毛刺的發生。例如, 利用格雷碼計數器每次輸出只有一位跳變的特性, 代替普通的二進制計數器, 避免了毛刺的產生[ 3 ]。還可以對電路進行改進, 以消除毛刺對系統的影響。下面對各種方法做分別介紹:
3、1 利用冗余項法
利用冗余項消除毛刺有2 種方法: 代數法和卡諾圖法, 兩者都是通過增加冗余項來消除險象, 只是前者針對于函數表達式而后者針對于真值表。以卡諾圖為例, 若兩個卡諾圓相切, 其對應的電路就可能產生險象。因此, 修改卡諾圖, 在卡諾圖的兩圓相切處增加一個圓, 以增加多余項來消除邏輯冒險。但該法對于計數器型產生的毛刺是無法消除的。
評論
查看更多