競(jìng)爭(zhēng)冒險(xiǎn)消除
在FPGA的設(shè)計(jì)中,,毛刺現(xiàn)象是長(zhǎng)期困擾電子設(shè)計(jì)工程師的設(shè)計(jì)問題之,,是影響工程師設(shè)計(jì)效率和數(shù)字系統(tǒng)設(shè)計(jì)有效性和可靠性的主要因素,。由于信號(hào)在FPGA的內(nèi)部走線和通過邏輯單元時(shí)造成的延遲,在多路信號(hào)變化的瞬間,,組合邏輯的輸出常常產(chǎn)生一些小的尖峰,即毛刺信號(hào),也容易引起競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象,,從而使電路工作的穩(wěn)定性大受影響。
1,、競(jìng)爭(zhēng)與冒險(xiǎn)
1.1 競(jìng)爭(zhēng)
說法1:門電路中有兩個(gè)輸入信號(hào)同時(shí)向相反的電平跳變的現(xiàn)象叫做競(jìng)爭(zhēng),。
說法2:在組合電路中,某個(gè)變量(或信號(hào))經(jīng)過兩條以上的路徑到達(dá)輸出端時(shí),,由于不同路徑上的延遲時(shí)間不一樣,,達(dá)到輸出端的時(shí)間就會(huì)有先有后,這一現(xiàn)象稱作競(jìng)爭(zhēng),。
如圖所示電路及波形:對(duì)于與門,,若穩(wěn)態(tài)時(shí),A=1,B=0或A=0,B=1時(shí),,輸出皆為Y=0,。但在信號(hào)的傳輸過程中,由于門的傳輸時(shí)間不同,,造成在時(shí)間△t內(nèi),,出現(xiàn)A和B同時(shí)高VIL(max),這樣在輸出端產(chǎn)生了很窄的脈沖,,即Y=1,,稱為電壓尖峰或電壓毛刺。
1.2 冒險(xiǎn)
在具有競(jìng)爭(zhēng)可能的組合電路中,,由于輸入端的競(jìng)爭(zhēng)而導(dǎo)致的輸出端出現(xiàn)不該有的干擾脈沖(即所謂毛刺),,就稱為冒險(xiǎn)。表現(xiàn)為輸出端出現(xiàn)了原設(shè)計(jì)中沒有的窄脈沖,,常稱其為毛刺,。
冒險(xiǎn)分類:
1)靜態(tài)冒險(xiǎn)與動(dòng)態(tài)冒險(xiǎn)
冒險(xiǎn)按照其產(chǎn)生形式可以分為靜態(tài)冒險(xiǎn)與動(dòng)態(tài)冒險(xiǎn)。
靜態(tài)冒險(xiǎn)是指輸入產(chǎn)生變化時(shí)輸出產(chǎn)生單個(gè)窄脈沖的現(xiàn)象,。靜態(tài)冒險(xiǎn)按其穩(wěn)態(tài)與尖峰的不同可以分為靜態(tài)0型冒險(xiǎn)與靜態(tài)1型冒險(xiǎn),。靜態(tài)1型冒險(xiǎn)是指電路穩(wěn)態(tài)輸出均為1,在輸入信號(hào)變化時(shí)產(chǎn)生短暫的0脈沖的現(xiàn)象,。靜態(tài)0型冒險(xiǎn)正好相反,。
動(dòng)態(tài)冒險(xiǎn)是指由于輸入變化而導(dǎo)致的輸出產(chǎn)生變化的現(xiàn)象,換言之,,就是由于發(fā)生了多次靜態(tài)冒險(xiǎn)導(dǎo)致輸出多個(gè)窄脈沖的現(xiàn)象,。靜態(tài)冒險(xiǎn)是由于信號(hào)變化存在快慢而導(dǎo)致,而動(dòng)態(tài)冒險(xiǎn)是由于靜態(tài)冒險(xiǎn)而導(dǎo)致的,當(dāng)電路中存在快,、慢與更慢的電路時(shí),,就會(huì)產(chǎn)生動(dòng)態(tài)冒險(xiǎn),因?yàn)楫?dāng)不同速度的信號(hào)變化組合時(shí),,就會(huì)產(chǎn)生多個(gè)窄脈沖,。
2)邏輯冒險(xiǎn)和功能冒險(xiǎn)
冒險(xiǎn)按照其產(chǎn)生條件,可以分為邏輯冒險(xiǎn)和功能冒險(xiǎn)兩大類,。
邏輯冒險(xiǎn)是指電路中只有一個(gè)信號(hào)發(fā)生變化卻導(dǎo)致了輸出產(chǎn)生冒險(xiǎn)的現(xiàn)象,。顧名思義,這是由于電路的邏輯設(shè)計(jì)的不合理導(dǎo)致,,因此應(yīng)該避免此現(xiàn)象,,也就是避免下面所說的代數(shù)法中的問題,。
功能冒險(xiǎn)是指由于電路中兩個(gè)或者以上的信號(hào)發(fā)生變化時(shí),,由于電路和器件本身的特性導(dǎo)致的到達(dá)時(shí)間差而產(chǎn)生的冒險(xiǎn)。功能冒險(xiǎn)較之于邏輯冒險(xiǎn)更難處理,。
1.3 競(jìng)爭(zhēng)與冒險(xiǎn)的關(guān)系
有競(jìng)爭(zhēng)不一定會(huì)有冒險(xiǎn),,但有冒險(xiǎn)就一定有競(jìng)爭(zhēng)。
1.4 檢查競(jìng)爭(zhēng)冒險(xiǎn)的方法
1)邏輯表達(dá)式化簡(jiǎn)法
如果輸出端門電路的兩個(gè)輸入信號(hào)A和A’是輸入變量A經(jīng)過兩個(gè)不同的傳輸途徑而來,,則當(dāng)輸入變量發(fā)生變化時(shí),,輸出端就可能產(chǎn)生尖峰脈沖。
故對(duì)于輸出端的邏輯函數(shù)在一定條件下能化簡(jiǎn)成:
Y=A+A’ ,, 存在 “0” 型競(jìng)爭(zhēng),;
Y=A*A’ , 存在 “1” 型競(jìng)爭(zhēng),;
的情況下,,則判定一定有競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象。
2)卡洛圖法
即如果一個(gè)邏輯函數(shù)的表達(dá)式的卡洛圖中所畫圈沒有重疊并且相切,,則判定有競(jìng)爭(zhēng)冒險(xiǎn),。(本質(zhì)上還是利用上面的方法,只是比較直觀形象的判斷)
對(duì)于以下卡洛圖,,左圖存在競(jìng)爭(zhēng)冒險(xiǎn),,而由圖不存在競(jìng)爭(zhēng)冒險(xiǎn)。
具體方法:
通過邏輯表達(dá)式畫出卡諾圖來判斷是否會(huì)出現(xiàn)冒險(xiǎn)現(xiàn)象,,當(dāng)卡諾圖中的卡諾圈相切,,則有競(jìng)爭(zhēng)冒險(xiǎn)。
由上圖,,圖中的圈稱為卡諾圈,,卡諾圈中只能包含1,2,4,8....2^n(n為非負(fù)整數(shù))個(gè)元素,當(dāng)該函數(shù)在A=B=1時(shí),存在0型邏輯冒險(xiǎn),。
圖中紅圈與藍(lán)圈有相切的地方,,被稱為卡諾圈相切。
1,、變量取值在卡諾圈內(nèi)變化,,不存在邏輯冒險(xiǎn);
2,、變量取值在相切的卡諾圈跳變時(shí),,而這個(gè)相切部分又沒有被另外的卡諾圈包圍,則可能存在邏輯冒險(xiǎn),。
1.5 消除競(jìng)爭(zhēng)冒險(xiǎn)的措施
FPGA設(shè)計(jì)中最簡(jiǎn)單的避免方法是盡量使用時(shí)序同步邏輯同步輸入輸出,。
(a) 修改邏輯設(shè)計(jì),增加冗余項(xiàng),,消除邏輯冒險(xiǎn),;
1)存在競(jìng)爭(zhēng)的情況下,增加冗余項(xiàng),,實(shí)現(xiàn)輸出消除毛刺,。
例:邏輯表達(dá)式如下:Y = A’BC + AB
當(dāng)B = C = 1時(shí), 電路存在“0”型競(jìng)爭(zhēng),。增加項(xiàng):冗余項(xiàng) B&C
更變后:Y = A’BC + AB + B C (利用消去冗余項(xiàng)公式)
2)還有卡諾圖法,,在兩個(gè)相切的圓之間,相切接觸的地方增加一個(gè)連接圓,。
對(duì)于上面的卡洛圖,,在相切的位置增加 冗余項(xiàng) B’C,故函數(shù)表達(dá)式Y(jié)=A’B’+AC+B’C
(b)采用可靠性編碼,,如格雷碼,;
(c)引入旁路濾波電容,,輸出并聯(lián)濾波電容消除毛刺,;
在輸出端并聯(lián)接一個(gè)很小的濾波電容,削弱尖峰脈沖的幅度至門電路的閾值以下,。簡(jiǎn)單易行,,但是會(huì)增加輸出電壓波形上升時(shí)間和下降時(shí)間,使波形變壞,。
?。╠)加封鎖脈沖;
即在輸入信號(hào)產(chǎn)生競(jìng)爭(zhēng)冒險(xiǎn)的時(shí)間內(nèi),引入一個(gè)脈沖將可能產(chǎn)生尖峰干擾脈沖的門封鎖住,,封鎖脈沖應(yīng)該在輸入信號(hào)轉(zhuǎn)換前到來,,轉(zhuǎn)換后消失,。
(e)加選通脈沖;
即對(duì)輸出可能產(chǎn)生尖峰脈沖的門電路增加一個(gè)接選通信號(hào)的輸入端,,只有在輸入信號(hào)轉(zhuǎn)換完成并穩(wěn)定后,,才引入選通脈沖將它打開,此時(shí)才允許有輸出,。
For邏輯冒險(xiǎn):增加冗余項(xiàng)(得到非最簡(jiǎn)邏輯,,屬于修改邏輯設(shè)計(jì)的方法);卡諾圖法,;增加選通電路,;增加輸出濾波電容。由此看出,,兩面性來了:一方面想最簡(jiǎn)化邏輯電路,,可是卻有可能出現(xiàn)競(jìng)爭(zhēng)冒險(xiǎn),退而求其次,,則恰當(dāng)解決問題,。
For功能冒險(xiǎn):功能冒險(xiǎn)是由于在輸入n個(gè)變量同時(shí)變化時(shí),它們的實(shí)際變化在時(shí)間上有先有后引起的,,因此改變電路的邏輯設(shè)計(jì)并不能消除功能冒險(xiǎn),。對(duì)待功能冒險(xiǎn)常用的方法是增加選通信號(hào)或者增加輸出濾波電容方法,。
2,、毛刺
2.1 毛刺產(chǎn)生的原因
①建立時(shí)間和保持時(shí)間
建立時(shí)間(setup time)是指在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來以前,,數(shù)據(jù)穩(wěn)定不變的時(shí)間,,如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘上升沿被打入觸發(fā)器,;保持時(shí)間(hold time)是指在觸發(fā)器的時(shí)鐘信號(hào)上升沿到來以后,,數(shù)據(jù)穩(wěn)定不變的時(shí)間,如果保持時(shí)間不夠,,數(shù)據(jù)同樣不能被打入觸發(fā)器,,如圖所示,數(shù)據(jù)穩(wěn)定傳輸必須滿足建立和保持時(shí)間的要求,,當(dāng)然在一些情況下,,建立時(shí)間和保持時(shí)間的值可以為零。
?、诟?jìng)爭(zhēng)和冒險(xiǎn)
FPGA芯片是由可構(gòu)造的輸入輸出塊(Input/Output Block,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)部邏輯間的相互連接,并在他們之間傳遞信息,。信號(hào)在FPGA器件內(nèi)部通過連線和邏輯單元時(shí),,都有一定的延時(shí)。延時(shí)的大小與連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),,同時(shí)還受器件的制造工藝,、 工作電壓、溫度等條件的影響,。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過渡時(shí)間,。由于存在這兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),,在信號(hào)變化的瞬間,,組合邏輯 的輸出有先后順序,并不是同時(shí)變化(及競(jìng)爭(zhēng)現(xiàn)象),往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),,這些尖峰信號(hào)稱為"毛刺",。如果一個(gè)組合邏輯電路中有"毛刺"出現(xiàn),就說明該電路存在"冒險(xiǎn)",。(與分立元件不同,,由于PLD內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級(jí)傳遞,,因此毛刺現(xiàn)象在PLD,、FPGA設(shè)計(jì)中尤為突出)也就是說,在FPGA設(shè)計(jì)中,毛刺產(chǎn)生的根本原因是信號(hào)在芯片內(nèi)部走線時(shí)產(chǎn)生的延遲。
2.2 毛刺產(chǎn)生的條件
由于延遲的作用,多個(gè)信號(hào)到達(dá)終點(diǎn)的時(shí)間有先有后,形成了競(jìng)爭(zhēng),由競(jìng)爭(zhēng)產(chǎn)生的錯(cuò)誤輸出就是毛刺,。所以,毛刺發(fā)生的條件就是在同一時(shí)刻有多個(gè)信號(hào)輸入發(fā)生改變,。
2.3 毛刺的危害
當(dāng)毛刺信號(hào)成為系統(tǒng)的啟動(dòng)信號(hào),控制信號(hào),,握手信號(hào),,觸發(fā)器的清零信號(hào),預(yù)置信號(hào),,時(shí)鐘信號(hào),,或鎖存器的輸入信號(hào)時(shí)就會(huì)產(chǎn)生邏輯錯(cuò)誤。
2.4 消除毛刺的方法
知道了毛刺產(chǎn)生的條件,就可以通過改變?cè)O(shè)計(jì),破壞其條件來減少毛刺的發(fā)生,。例如,利用格雷碼計(jì)數(shù)器每次輸出只有一位跳變的特性,代替普通的二進(jìn)制計(jì)數(shù)器,避免了毛刺的產(chǎn)生,。還可以對(duì)電路進(jìn)行改進(jìn),以消除毛刺對(duì)系統(tǒng)的影響。
①利用冗余項(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)生的毛刺是無法消除的,。
?、诓蓸臃?/strong>
由于冒險(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種:一種使用一定寬度的高電平脈沖與輸出相與,從而避開了毛刺信號(hào),取得輸出信號(hào)的電平值,。這種方法必須保證采樣信號(hào)在合適的時(shí)間產(chǎn)生,并且只適用于對(duì)輸出信號(hào)時(shí)序和脈沖寬度要求不嚴(yá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í)序問題。
?、畚辗?/strong>
由于產(chǎn)生的毛刺實(shí)際上是高頻窄脈沖,故增加輸出濾波,在輸出端接上小電容C就可以濾除毛刺,。但輸出波形的前后沿將變壞,在對(duì)波形要求較嚴(yán)格時(shí),應(yīng)再加整形電路,該方法不宜在中間級(jí)使用。
?、苎舆t法
因?yàn)槊套罱K是由于延遲造成的,所以可以找出產(chǎn)生延遲的支路,。對(duì)于相對(duì)延遲小的支路,加上毛刺寬度的延遲可以消除毛刺。但有時(shí)隨著負(fù)載增加,毛刺會(huì)繼續(xù)出現(xiàn),而且,當(dāng)溫度變化,所加的電壓變化或要增加邏輯門時(shí),所加的延遲是不同的,必須重新設(shè)計(jì)延遲線,因而這種方法也是有局限性的,。而且采用延遲線的方法產(chǎn)生延遲會(huì)由于環(huán)境溫度的變化而使系統(tǒng)可靠性變差,。
⑤硬件描述語言法
這種方法是從硬件描述語言入手,找出毛刺產(chǎn)生的根本原因,改變語言設(shè)計(jì),產(chǎn)生滿足要求的功能模塊,來代替原來的邏輯功能塊。
在Verilog編程時(shí),,需要注意以下幾方面,,在絕大多數(shù)情況下可避免綜合后仿真出現(xiàn)冒險(xiǎn)問題。
1)時(shí)序電路建模時(shí),,用非阻塞賦值,。
2)鎖存器電路建模時(shí),用非阻塞賦值,。
3)用always和組合邏輯建模時(shí),,用阻塞賦值。
4)在同一個(gè)always塊中建立時(shí)序和組合邏輯模型時(shí),,用非阻塞賦值,。
5)在同一個(gè)always塊中不要既使用阻塞賦值又使用非阻塞賦值,。
6)不要在多個(gè)always塊中為同一個(gè)變量賦值,。
避免在綜合時(shí)引入鎖存器的注意點(diǎn)包括:
1)組合電路的每一個(gè)if-else語句要完整,即每一個(gè)if要對(duì)應(yīng)一個(gè)else,,時(shí)序電路if語句不完整不會(huì)出現(xiàn)鎖存器問題,。
2)case語句要完整,即每一個(gè)case語句對(duì)應(yīng)一個(gè)default,。
更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<