FPGA設(shè)計(jì)中毛刺信號(hào)解析
在FPGA的設(shè)計(jì)中,毛刺現(xiàn)象是長(zhǎng)期困擾電子設(shè)計(jì)工程師的設(shè)計(jì)問(wèn)題之一, 是影響工程師設(shè)計(jì)效率和數(shù)字系統(tǒng)設(shè)計(jì)有效性和可靠性的主要因素。由于信號(hào)在FPGA的內(nèi)部走線和通過(guò)邏輯單元時(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ì)尖峰脈沖或脈沖邊沿敏感的電路更是如此。
本文引用地址:http://www.ex-cimer.com/article/150396.htm任何組合電路、反饋電路和計(jì)數(shù)器都可能是潛在的毛刺信號(hào)發(fā)生器,但毛刺并不是對(duì)所有輸入都有危害,如觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并滿足數(shù)據(jù)的建立保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害。而當(dāng)毛刺信號(hào)成為系統(tǒng)的啟動(dòng)信號(hào)、控制信號(hào)、握手信號(hào),觸發(fā)器的清零信號(hào)(CLEAR)、預(yù)置信號(hào)(PRESET)、時(shí)鐘輸入信號(hào)(CLK)或鎖存器的輸入信號(hào)時(shí)就會(huì)產(chǎn)生邏輯錯(cuò)誤。在實(shí)際設(shè)計(jì)過(guò)程中,應(yīng)盡量避免將帶有毛刺的信號(hào)直接接入對(duì)毛刺敏感的輸入端上,對(duì)于產(chǎn)生的毛刺,應(yīng)仔細(xì)分析毛刺的來(lái)源和性質(zhì),針對(duì)不同的信號(hào),采取不同的解決方法加以消除。
因此,克服和解決毛刺問(wèn)題對(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所示[2]。
FPGA芯片是由可構(gòu)造的輸入輸出塊(Input/OutputBlock,IOB)、可構(gòu)造邏輯塊(Cinfigur able Logic Block,CLB)和可編程連線資源(Programmable Interconnect Array,PIA)3種可構(gòu)造單元構(gòu)成的。IOB位于芯片內(nèi)部四周,在內(nèi)部邏輯陣列與外部芯片封裝引腳之間提供一個(gè)可編程接口,他主要由邏輯門(mén)、觸發(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的高電平,這就是毛刺。也就是說(shuō),在FPGA設(shè)計(jì)中,毛刺產(chǎn)生的根本原因是信號(hào)在芯片內(nèi)部走線時(shí)產(chǎn)生的延遲。
2毛刺產(chǎn)生的條件
借助同樣的例子來(lái)分析毛刺產(chǎn)生的條件。QA,QB,QC在每一個(gè)時(shí)鐘上升沿同時(shí)發(fā)生翻轉(zhuǎn),但實(shí)際中由于延遲的存在,并不能保證QA,QB,QC到D觸發(fā)器的布線長(zhǎng)短一致。如果QC比Q A,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)生的條件,就可以通過(guò)改變?cè)O(shè)計(jì),破壞其條件來(lái)減少毛刺的發(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ù)法和卡諾圖法,兩者都是通過(guò)增加冗余項(xiàng)來(lái)消除險(xiǎn)象,只是前者針對(duì)于函數(shù)表達(dá)式而后者針對(duì)于真值表。以卡諾圖為例,若兩個(gè)卡諾圓相切,其對(duì)應(yīng)的電路就可能產(chǎn)生險(xiǎn)象。因此,修改卡諾圖,在卡諾圖的兩圓相切處增加一個(gè)圓,以增加多余項(xiàng)來(lái)消除邏輯冒險(xiǎn)。但該法對(duì)于計(jì)數(shù)器型產(chǎn)生的毛刺是無(wú)法消除的。
3.2采樣法
由于冒險(xiǎn)多出現(xiàn)在信號(hào)發(fā)生電平跳變的時(shí)刻,即在輸出信號(hào)的建立時(shí)間內(nèi)會(huì)產(chǎn)生毛刺,而在保持時(shí)間內(nèi)不會(huì)出現(xiàn),因此,在輸出信號(hào)的保持時(shí)間內(nèi)對(duì)其進(jìn)行采樣,就可以消除毛刺信號(hào)的影響,常用的采樣方法有2種:一種使用一定寬度的高電平脈沖與輸出相與,從而避開(kāi)了毛刺信號(hào),取得輸出信號(hào)的電平值。這種方法必須保證采樣信號(hào)在合適的時(shí)間產(chǎn)生,并且只適用于對(duì)輸出信號(hào)時(shí)序和脈沖寬度要求不嚴(yán)的情況。另一種更常見(jiàn)的方法叫鎖存法,是利用D觸發(fā)器的輸入端D對(duì)毛刺信號(hào)不敏感的特點(diǎn),在輸出信號(hào)的保持時(shí)間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號(hào)。由于在時(shí)鐘的上升沿時(shí)刻,輸出端Q=D,當(dāng)輸入的信號(hào)有毛刺時(shí),只要不發(fā)生在時(shí)鐘的上升沿時(shí)刻,輸出就不會(huì)有毛刺。這種方法類似于將異步電路轉(zhuǎn)化為同步電路,實(shí)現(xiàn)簡(jiǎn)單,但同樣會(huì)涉及到時(shí)序問(wèn)題。
3.3吸收法
由于產(chǎn)生的毛刺實(shí)際上是高頻窄脈沖,故增加輸出濾波,在輸出端接上小電容C就可以濾除毛刺。但輸出波形的前后沿將變壞,在對(duì)波形要求較嚴(yán)格時(shí),應(yīng)再加整形電路,該方法不宜在中間級(jí)使用。
3.4延遲法
因?yàn)槊套罱K是由于延遲造成的,所以可以找出產(chǎn)生延遲的支路。對(duì)于相對(duì)延遲小的支路,加上毛刺寬度的延遲可以消除毛刺。但有時(shí)隨著負(fù)載增加,毛刺會(huì)繼續(xù)出現(xiàn),而且,當(dāng)溫度變化,所加的電壓變化或要增加邏輯門(mén)時(shí),所加的延遲是不同的,必須重新設(shè)計(jì)延遲線,因而這種方法也是有局限性的。而且采用延遲線的方法產(chǎn)生延遲會(huì)由于環(huán)境溫度的變化而使系統(tǒng)可靠性變差。
3.5硬件描述語(yǔ)言法
這種方法是從硬件描述語(yǔ)言入手,找出毛刺產(chǎn)生的根本原因,改變語(yǔ)言設(shè)計(jì),產(chǎn)生滿足要求的功能模塊,來(lái)代替原來(lái)的邏輯功能塊。在圖1電路中,一個(gè)3位計(jì)數(shù)器可能會(huì)在011到100和101到110發(fā)生跳變時(shí)產(chǎn)生毛刺,究其原因是因?yàn)橐淮斡?位發(fā)生跳變,可以采用VHDL語(yǔ)言對(duì)計(jì)數(shù)器編寫(xiě)如下,產(chǎn)生的計(jì)數(shù)模塊代替原來(lái)普通的計(jì)數(shù)器。
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評(píng)論