FPGA中的競爭與冒險
2018-06-25 16:46:52
作者:電氣事業(yè)部 鄔若愚 指導(dǎo):電氣事業(yè)部 杜萬金
FPGA(Field-Programmable Gate Array)即現(xiàn)場可編程門陣列,在結(jié)構(gòu)上由邏輯功能塊排列為陣列,并且由可編程的內(nèi)部連線來連接這些功能塊來實現(xiàn)一定的邏輯功能。
信號在傳輸和處理過程中,通過FPGA內(nèi)部的連線和邏輯單元時,都有一定的延時。延時的大小和連線的長短,邏輯單元的數(shù)目有關(guān),同時也受到器件的制造工藝、工作電壓、溫度等條件的影響,信號的電平轉(zhuǎn)換也需要一定的過渡時間。造成信號的原變量和反變量狀態(tài)改變的時刻不一致,這種現(xiàn)象稱為競爭。
由于競爭而引起電路輸出信號中出現(xiàn)了非預(yù)期信號,產(chǎn)生瞬間錯誤的現(xiàn)象稱為冒險。表現(xiàn)為輸出端出現(xiàn)了原設(shè)計中沒有的窄脈沖,常稱為毛刺。
圖1 邏輯冒險
即使是在最簡單的邏輯運算中,如果出現(xiàn)多路信號同時跳變的情況,在通過內(nèi)部走線以后,也一定會產(chǎn)生毛刺。如上圖所示,A、B、C、D四個輸入信號經(jīng)過布線延時后,高低電平變換不是同時發(fā)生的,這導(dǎo)致輸出信號出現(xiàn)了毛刺。
和分立元件不同,FPGA內(nèi)部不存在寄生電容和電感,所以無法過濾電路中的毛刺,從而使得毛刺將被完整保留下來,并且逐級傳遞,對電路的影響更加突出。冒險往往會影響到邏輯電路的穩(wěn)定性,而時鐘端口、清零和置位端口對毛刺信號十分敏感,任何一點毛刺都有可能導(dǎo)致系統(tǒng)出錯,因此判斷邏輯電路中是否存在冒險以及如何避免冒險是設(shè)計人員必須要考慮的問題。
可以利用冗余項來消除毛刺,函數(shù)式和真值表所描述的是靜態(tài)邏輯,而競爭則是從一種穩(wěn)態(tài)到另一種穩(wěn)態(tài)的過程。因此競爭是動態(tài)過程,它發(fā)生在輸入變量變化時。此時,修改卡諾圖,增加多余項,在卡諾圖的兩圓相切處增加一個圓,可以消除邏輯冒險。
也可以通過改變設(shè)計,破壞毛刺產(chǎn)生的條件來完成。由于格雷碼計數(shù)器的輸出每次都只有一位的跳變,消除了競爭冒險的條件,所以在數(shù)字電路的設(shè)計過程中往往采用格雷碼計數(shù)器來代替普通的二進(jìn)制計數(shù)器來避免毛刺的產(chǎn)生。
毛刺并不是對所有輸入都有危害,例如D觸發(fā)器的輸入端,只要毛刺不出現(xiàn)在時鐘的上升沿并且滿足一定時間,就不會對系統(tǒng)造成危害,也就是說D觸發(fā)器的D輸入端對毛刺不敏感。根據(jù)這個特性我們應(yīng)該在系統(tǒng)中盡可能的采用同步時鐘,由于毛刺持續(xù)時間很短,一般不會滿足數(shù)據(jù)的建立和保存時間,從而降低毛刺對系統(tǒng)的危害。
但是以上方法并不能完全消除毛刺,所以我們需要采取“采樣”的方法。一般冒險都出現(xiàn)在信號發(fā)生電平轉(zhuǎn)換的時刻,也就是說毛刺是在輸出信號產(chǎn)生的時候出現(xiàn)的,而在輸出信號保持的期間不會有毛刺產(chǎn)生,所以我們可以通過在輸出信號保持期間對其進(jìn)行采樣,從而消除毛刺的影響。
有兩種基本采樣方法,一種是在輸出信號保持期間,用一定寬度的高電平脈沖與輸出信號做邏輯“與”運算,由此采樣得到輸出信號的電平值。如圖二所示,加入“SAMPLE”采樣信號,從而消除毛刺影響。這種方法的缺點是必須人為的保證SAMPLE信號必須在合適的時間中產(chǎn)生。
圖2 采樣方法一
另一種更常見的方法是利用之前提到的D觸發(fā)器的D輸入端對毛刺信號不敏感的特點,在輸出信號的保持時間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號,這種方法類似于將異步電路轉(zhuǎn)化為同步電路。如圖三所示,在電路中增加了采樣時鐘和D觸發(fā)器,在時鐘上升沿時進(jìn)行采樣從而減少毛刺的影響。
圖3 采樣方法二
除此以外消除毛刺還有吸收法和延遲法等。其中吸收法是通過增加輸出濾波完成,但是會破壞輸出波形,因此該方法不宜在中間級使用。延遲法是通過找到產(chǎn)生延遲的支路,加上毛刺寬度的延遲來消除毛刺。
在FPGA設(shè)計的時候就應(yīng)該考慮到毛刺的影響,因此需要注意以下幾點:采用寄存器和觸發(fā)器來設(shè)計電路,盡量不選用鎖存器,因為鎖存器對毛刺十分敏感;盡量避免隱含RS觸發(fā)器的出現(xiàn),一般要控制輸出被直接反饋到輸入端,采用反饋環(huán)路會出現(xiàn)隱含RS觸發(fā)器,其對輸入尖峰和假信號很敏感,輸入端有任何變化都有可能使輸出值立刻改變,此時易造成毛刺的產(chǎn)生,導(dǎo)致時序的嚴(yán)重混亂;注意譯碼邏輯電路,因為譯碼器和比較器本身會產(chǎn)生尖峰,容易產(chǎn)生毛刺,如果把譯碼器或比較器的輸出直接連到時鐘輸入端或異步清除端,會造成嚴(yán)重的后果;每一個模塊中只用一個時鐘,避免使用多時鐘設(shè)計,對所有模塊的輸入時鐘、輸入信號、輸出信號都用D觸發(fā)器或寄存器進(jìn)行同步處理,即輸出信號直接來自觸發(fā)器或寄存器的輸出端。
毛刺是FPGA設(shè)計中不可忽視的問題,只有在設(shè)計時就注意避免產(chǎn)生毛刺,后期做好消除毛刺的工作,才能夠解決FPGA競爭冒險的問題,從而增強電路的穩(wěn)定性和可靠性,并為實際電路的測試帶來方便。