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