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