《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 其他 > FPGA教學(xué)——FPGA中的競爭冒險(xiǎn)消除

FPGA教學(xué)——FPGA中的競爭冒險(xiǎn)消除

2022-08-24
作者:旅FPGA之旅
來源:電子技術(shù)應(yīng)用專欄作家 FPGA之旅
關(guān)鍵詞: FPGA

  競爭冒險(xiǎn)消除

  在FPGA的設(shè)計(jì)中,毛刺現(xiàn)象是長期困擾電子設(shè)計(jì)工程師的設(shè)計(jì)問題之,是影響工程師設(shè)計(jì)效率和數(shù)字系統(tǒng)設(shè)計(jì)有效性和可靠性的主要因素。由于信號在FPGA的內(nèi)部走線和通過邏輯單元時(shí)造成的延遲,在多路信號變化的瞬間,組合邏輯的輸出常常產(chǎn)生一些小的尖峰,即毛刺信號,也容易引起競爭冒險(xiǎn)現(xiàn)象,從而使電路工作的穩(wěn)定性大受影響。

  1、競爭與冒險(xiǎn)

  1.1 競爭

  說法1:門電路中有兩個(gè)輸入信號同時(shí)向相反的電平跳變的現(xiàn)象叫做競爭。

  說法2:在組合電路中,某個(gè)變量(或信號)經(jīng)過兩條以上的路徑到達(dá)輸出端時(shí),由于不同路徑上的延遲時(shí)間不一樣,達(dá)到輸出端的時(shí)間就會有先有后,這一現(xiàn)象稱作競爭。

  如圖所示電路及波形:對于與門,若穩(wěn)態(tài)時(shí),A=1,B=0或A=0,B=1時(shí),輸出皆為Y=0。但在信號的傳輸過程中,由于門的傳輸時(shí)間不同,造成在時(shí)間△t內(nèi),出現(xiàn)A和B同時(shí)高VIL(max),這樣在輸出端產(chǎn)生了很窄的脈沖,即Y=1,稱為電壓尖峰或電壓毛刺。

  微信圖片_20220824153143.png

  1.2 冒險(xiǎn)

  在具有競爭可能的組合電路中,由于輸入端的競爭而導(dǎo)致的輸出端出現(xiàn)不該有的干擾脈沖(即所謂毛刺),就稱為冒險(xiǎn)。表現(xiàn)為輸出端出現(xiàn)了原設(shè)計(jì)中沒有的窄脈沖,常稱其為毛刺。

  冒險(xiǎn)分類:

  1)靜態(tài)冒險(xiǎn)與動態(tài)冒險(xiǎn)

  冒險(xiǎn)按照其產(chǎn)生形式可以分為靜態(tài)冒險(xiǎn)與動態(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,在輸入信號變化時(shí)產(chǎn)生短暫的0脈沖的現(xiàn)象。靜態(tài)0型冒險(xiǎn)正好相反。

  動態(tài)冒險(xiǎn)是指由于輸入變化而導(dǎo)致的輸出產(chǎn)生變化的現(xiàn)象,換言之,就是由于發(fā)生了多次靜態(tài)冒險(xiǎn)導(dǎo)致輸出多個(gè)窄脈沖的現(xiàn)象。靜態(tài)冒險(xiǎn)是由于信號變化存在快慢而導(dǎo)致,而動態(tài)冒險(xiǎn)是由于靜態(tài)冒險(xiǎn)而導(dǎo)致的,當(dāng)電路中存在快、慢與更慢的電路時(shí),就會產(chǎn)生動態(tài)冒險(xiǎn),因?yàn)楫?dāng)不同速度的信號變化組合時(shí),就會產(chǎn)生多個(gè)窄脈沖。

  2)邏輯冒險(xiǎn)和功能冒險(xiǎn)

  冒險(xiǎn)按照其產(chǎn)生條件,可以分為邏輯冒險(xiǎn)和功能冒險(xiǎn)兩大類。

  邏輯冒險(xiǎn)是指電路中只有一個(gè)信號發(fā)生變化卻導(dǎo)致了輸出產(chǎn)生冒險(xiǎn)的現(xiàn)象。顧名思義,這是由于電路的邏輯設(shè)計(jì)的不合理導(dǎo)致,因此應(yīng)該避免此現(xiàn)象,也就是避免下面所說的代數(shù)法中的問題。

  功能冒險(xiǎn)是指由于電路中兩個(gè)或者以上的信號發(fā)生變化時(shí),由于電路和器件本身的特性導(dǎo)致的到達(dá)時(shí)間差而產(chǎn)生的冒險(xiǎn)。功能冒險(xiǎn)較之于邏輯冒險(xiǎn)更難處理。

  1.3 競爭與冒險(xiǎn)的關(guān)系

  有競爭不一定會有冒險(xiǎn),但有冒險(xiǎn)就一定有競爭。

  1.4 檢查競爭冒險(xiǎn)的方法

  1)邏輯表達(dá)式化簡法

  如果輸出端門電路的兩個(gè)輸入信號A和A’是輸入變量A經(jīng)過兩個(gè)不同的傳輸途徑而來,則當(dāng)輸入變量發(fā)生變化時(shí),輸出端就可能產(chǎn)生尖峰脈沖。

  故對于輸出端的邏輯函數(shù)在一定條件下能化簡成:

  Y=A+A’ , 存在 “0” 型競爭;

  Y=A*A’ , 存在 “1” 型競爭;

  的情況下,則判定一定有競爭冒險(xiǎn)現(xiàn)象。

  2)卡洛圖法

  即如果一個(gè)邏輯函數(shù)的表達(dá)式的卡洛圖中所畫圈沒有重疊并且相切,則判定有競爭冒險(xiǎn)。(本質(zhì)上還是利用上面的方法,只是比較直觀形象的判斷)

  對于以下卡洛圖,左圖存在競爭冒險(xiǎn),而由圖不存在競爭冒險(xiǎn)。

  微信圖片_20220824153209.png

  具體方法:

  通過邏輯表達(dá)式畫出卡諾圖來判斷是否會出現(xiàn)冒險(xiǎn)現(xiàn)象,當(dāng)卡諾圖中的卡諾圈相切,則有競爭冒險(xiǎn)。

  微信圖片_20220824153223.png

  由上圖,圖中的圈稱為卡諾圈,卡諾圈中只能包含1,2,4,8....2^n(n為非負(fù)整數(shù))個(gè)元素,當(dāng)該函數(shù)在A=B=1時(shí),存在0型邏輯冒險(xiǎn)。

  微信截圖_20220824153246.png

  圖中紅圈與藍(lán)圈有相切的地方,被稱為卡諾圈相切。

  1、變量取值在卡諾圈內(nèi)變化,不存在邏輯冒險(xiǎn);

  2、變量取值在相切的卡諾圈跳變時(shí),而這個(gè)相切部分又沒有被另外的卡諾圈包圍,則可能存在邏輯冒險(xiǎn)。

  1.5 消除競爭冒險(xiǎn)的措施

  FPGA設(shè)計(jì)中最簡單的避免方法是盡量使用時(shí)序同步邏輯同步輸入輸出。

  (a) 修改邏輯設(shè)計(jì),增加冗余項(xiàng),消除邏輯冒險(xiǎn);

  1)存在競爭的情況下,增加冗余項(xiàng),實(shí)現(xiàn)輸出消除毛刺。

  例:邏輯表達(dá)式如下:Y = A’BC + AB

  當(dāng)B = C = 1時(shí), 電路存在“0”型競爭。增加項(xiàng):冗余項(xiàng) B&C

  更變后:Y = A’BC + AB + B C (利用消去冗余項(xiàng)公式)

  2)還有卡諾圖法,在兩個(gè)相切的圓之間,相切接觸的地方增加一個(gè)連接圓。

  微信圖片_20220824153311.png

  對于上面的卡洛圖,在相切的位置增加 冗余項(xiàng) B’C,故函數(shù)表達(dá)式Y(jié)=A’B’+AC+B’C

  (b)采用可靠性編碼,如格雷碼;

 ?。╟)引入旁路濾波電容,輸出并聯(lián)濾波電容消除毛刺;

  在輸出端并聯(lián)接一個(gè)很小的濾波電容,削弱尖峰脈沖的幅度至門電路的閾值以下。簡單易行,但是會增加輸出電壓波形上升時(shí)間和下降時(shí)間,使波形變壞。

 ?。╠)加封鎖脈沖;

  即在輸入信號產(chǎn)生競爭冒險(xiǎn)的時(shí)間內(nèi),引入一個(gè)脈沖將可能產(chǎn)生尖峰干擾脈沖的門封鎖住,封鎖脈沖應(yīng)該在輸入信號轉(zhuǎn)換前到來,轉(zhuǎn)換后消失。

  (e)加選通脈沖;

  即對輸出可能產(chǎn)生尖峰脈沖的門電路增加一個(gè)接選通信號的輸入端,只有在輸入信號轉(zhuǎn)換完成并穩(wěn)定后,才引入選通脈沖將它打開,此時(shí)才允許有輸出。

  For邏輯冒險(xiǎn):增加冗余項(xiàng)(得到非最簡邏輯,屬于修改邏輯設(shè)計(jì)的方法);卡諾圖法;增加選通電路;增加輸出濾波電容。由此看出,兩面性來了:一方面想最簡化邏輯電路,可是卻有可能出現(xiàn)競爭冒險(xiǎn),退而求其次,則恰當(dāng)解決問題。

  For功能冒險(xiǎn):功能冒險(xiǎn)是由于在輸入n個(gè)變量同時(shí)變化時(shí),它們的實(shí)際變化在時(shí)間上有先有后引起的,因此改變電路的邏輯設(shè)計(jì)并不能消除功能冒險(xiǎn)。對待功能冒險(xiǎn)常用的方法是增加選通信號或者增加輸出濾波電容方法。

  2、毛刺

  2.1 毛刺產(chǎn)生的原因

 ?、俳r(shí)間和保持時(shí)間

  建立時(shí)間(setup time)是指在觸發(fā)器的時(shí)鐘信號上升沿到來以前,數(shù)據(jù)穩(wěn)定不變的時(shí)間,如果建立時(shí)間不夠,數(shù)據(jù)將不能在這個(gè)時(shí)鐘上升沿被打入觸發(fā)器;保持時(shí)間(hold time)是指在觸發(fā)器的時(shí)鐘信號上升沿到來以后,數(shù)據(jù)穩(wěn)定不變的時(shí)間,如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器,如圖所示,數(shù)據(jù)穩(wěn)定傳輸必須滿足建立和保持時(shí)間的要求,當(dāng)然在一些情況下,建立時(shí)間和保持時(shí)間的值可以為零。

  微信圖片_20220824153335.png

  ②競爭和冒險(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)部邏輯間的相互連接,并在他們之間傳遞信息。信號在FPGA器件內(nèi)部通過連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、 工作電壓、溫度等條件的影響。信號的高低電平轉(zhuǎn)換也需要一定的過渡時(shí)間。由于存在這兩方面因素,多路信號的電平值發(fā)生變化時(shí),在信號變化的瞬間,組合邏輯 的輸出有先后順序,并不是同時(shí)變化(及競爭現(xiàn)象),往往會出現(xiàn)一些不正確的尖峰信號,這些尖峰信號稱為"毛刺"。如果一個(gè)組合邏輯電路中有"毛刺"出現(xiàn),就說明該電路存在"冒險(xiǎn)"。(與分立元件不同,由于PLD內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級傳遞,因此毛刺現(xiàn)象在PLD、FPGA設(shè)計(jì)中尤為突出)也就是說,在FPGA設(shè)計(jì)中,毛刺產(chǎn)生的根本原因是信號在芯片內(nèi)部走線時(shí)產(chǎn)生的延遲。

  2.2 毛刺產(chǎn)生的條件

  由于延遲的作用,多個(gè)信號到達(dá)終點(diǎn)的時(shí)間有先有后,形成了競爭,由競爭產(chǎn)生的錯(cuò)誤輸出就是毛刺。所以,毛刺發(fā)生的條件就是在同一時(shí)刻有多個(gè)信號輸入發(fā)生改變。

  2.3 毛刺的危害

  當(dāng)毛刺信號成為系統(tǒng)的啟動信號,控制信號,握手信號,觸發(fā)器的清零信號,預(yù)置信號,時(shí)鐘信號,或鎖存器的輸入信號時(shí)就會產(chǎn)生邏輯錯(cuò)誤。

  2.4 消除毛刺的方法

  知道了毛刺產(chǎn)生的條件,就可以通過改變設(shè)計(jì),破壞其條件來減少毛刺的發(fā)生。例如,利用格雷碼計(jì)數(shù)器每次輸出只有一位跳變的特性,代替普通的二進(jìn)制計(jì)數(shù)器,避免了毛刺的產(chǎn)生。還可以對電路進(jìn)行改進(jìn),以消除毛刺對系統(tǒng)的影響。

  ①利用冗余項(xiàng)法

  利用冗余項(xiàng)消除毛刺有2種方法:代數(shù)法和卡諾圖法,兩者都是通過增加冗余項(xiàng)來消除險(xiǎn)象,只是前者針對于函數(shù)表達(dá)式而后者針對于真值表。以卡諾圖為例,若兩個(gè)卡諾圓相切,其對應(yīng)的電路就可能產(chǎn)生險(xiǎn)象。因此,修改卡諾圖,在卡諾圖的兩圓相切處增加一個(gè)圓,以增加多余項(xiàng)來消除邏輯冒險(xiǎn)。但該法對于計(jì)數(shù)器型產(chǎn)生的毛刺是無法消除的。

 ?、诓蓸臃?/strong>

  由于冒險(xiǎn)多出現(xiàn)在信號發(fā)生電平跳變的時(shí)刻,即在輸出信號的建立時(shí)間內(nèi)會產(chǎn)生毛刺,而在保持時(shí)間內(nèi)不會出現(xiàn),因此,在輸出信號的保持時(shí)間內(nèi)對其進(jìn)行采樣,就可以消除毛刺信號的影響,常用的采樣方法有2種:一種使用一定寬度的高電平脈沖與輸出相與,從而避開了毛刺信號,取得輸出信號的電平值。這種方法必須保證采樣信號在合適的時(shí)間產(chǎn)生,并且只適用于對輸出信號時(shí)序和脈沖寬度要求不嚴(yán)的情況。另一種更常見的方法叫鎖存法,是利用D觸發(fā)器的輸入端D對毛刺信號不敏感的特點(diǎn),在輸出信號的保持時(shí)間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號。由于在時(shí)鐘的上升沿時(shí)刻,輸出端Q=D,當(dāng)輸入的信號有毛刺時(shí),只要不發(fā)生在時(shí)鐘的上升沿時(shí)刻,輸出就不會有毛刺。這種方法類似于將異步電路轉(zhuǎn)化為同步電路,實(shí)現(xiàn)簡單,但同樣會涉及到時(shí)序問題。

 ?、畚辗?/strong>

  由于產(chǎn)生的毛刺實(shí)際上是高頻窄脈沖,故增加輸出濾波,在輸出端接上小電容C就可以濾除毛刺。但輸出波形的前后沿將變壞,在對波形要求較嚴(yán)格時(shí),應(yīng)再加整形電路,該方法不宜在中間級使用。

  ④延遲法

  因?yàn)槊套罱K是由于延遲造成的,所以可以找出產(chǎn)生延遲的支路。對于相對延遲小的支路,加上毛刺寬度的延遲可以消除毛刺。但有時(shí)隨著負(fù)載增加,毛刺會繼續(xù)出現(xiàn),而且,當(dāng)溫度變化,所加的電壓變化或要增加邏輯門時(shí),所加的延遲是不同的,必須重新設(shè)計(jì)延遲線,因而這種方法也是有局限性的。而且采用延遲線的方法產(chǎn)生延遲會由于環(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要對應(yīng)一個(gè)else,時(shí)序電路if語句不完整不會出現(xiàn)鎖存器問題。

  2)case語句要完整,即每一個(gè)case語句對應(yīng)一個(gè)default。

  

 更多信息可以來這里獲取==>>電子技術(shù)應(yīng)用-AET<<

微信圖片_20210517164139.jpg

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。