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