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