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

FPGA教學(xué)——FPGA中的競(jìng)爭(zhēng)冒險(xiǎn)消除

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

  競(jìng)爭(zhēng)冒險(xiǎn)消除

  在FPGA的設(shè)計(jì)中,毛刺現(xiàn)象是長(zhǎng)期困擾電子設(shè)計(jì)工程師的設(shè)計(jì)問(wèn)題之,是影響工程師設(shè)計(jì)效率和數(shù)字系統(tǒng)設(shè)計(jì)有效性和可靠性的主要因素。由于信號(hào)在FPGA的內(nèi)部走線和通過(guò)邏輯單元時(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)

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

  說(shuō)法2:在組合電路中,某個(gè)變量(或信號(hào))經(jīng)過(guò)兩條以上的路徑到達(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)的傳輸過(guò)程中,由于門的傳輸時(shí)間不同,造成在時(shí)間△t內(nèi),出現(xiàn)A和B同時(shí)高VIL(max),這樣在輸出端產(chǎn)生了很窄的脈沖,即Y=1,稱為電壓尖峰或電壓毛刺。

  微信圖片_20220824153143.png

  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)象,也就是避免下面所說(shuō)的代數(shù)法中的問(wèn)題。

  功能冒險(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)過(guò)兩個(gè)不同的傳輸途徑而來(lái),則當(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)。

  微信圖片_20220824153209.png

  具體方法:

  通過(guò)邏輯表達(dá)式畫出卡諾圖來(lái)判斷是否會(huì)出現(xiàn)冒險(xiǎn)現(xiàn)象,當(dāng)卡諾圖中的卡諾圈相切,則有競(jìng)爭(zhē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 消除競(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è)連接圓。

  微信圖片_20220824153311.png

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

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

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

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

  (d)加封鎖脈沖;

  即在輸入信號(hào)產(chǎn)生競(jìng)爭(zhēng)冒險(xiǎn)的時(shí)間內(nèi),引入一個(gè)脈沖將可能產(chǎn)生尖峰干擾脈沖的門封鎖住,封鎖脈沖應(yīng)該在輸入信號(hào)轉(zhuǎn)換前到來(lái),轉(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ì)的方法);卡諾圖法;增加選通電路;增加輸出濾波電容。由此看出,兩面性來(lái)了:一方面想最簡(jiǎn)化邏輯電路,可是卻有可能出現(xiàn)競(jìng)爭(zhēng)冒險(xiǎn),退而求其次,則恰當(dāng)解決問(wèn)題。

  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)生的原因

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

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

  微信圖片_20220824153335.png

 ?、诟?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)部通過(guò)連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、 工作電壓、溫度等條件的影響。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過(guò)渡時(shí)間。由于存在這兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯 的輸出有先后順序,并不是同時(shí)變化(及競(jìng)爭(zhēng)現(xiàn)象),往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱為"毛刺"。如果一個(gè)組合邏輯電路中有"毛刺"出現(xiàn),就說(shuō)明該電路存在"冒險(xiǎn)"。(與分立元件不同,由于PLD內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級(jí)傳遞,因此毛刺現(xiàn)象在PLD、FPGA設(shè)計(jì)中尤為突出)也就是說(shuō),在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)生的條件,就可以通過(guò)改變?cè)O(shè)計(jì),破壞其條件來(lái)減少毛刺的發(fā)生。例如,利用格雷碼計(jì)數(shù)器每次輸出只有一位跳變的特性,代替普通的二進(jìn)制計(jì)數(shù)器,避免了毛刺的產(chǎn)生。還可以對(duì)電路進(jìn)行改進(jìn),以消除毛刺對(duì)系統(tǒng)的影響。

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

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

 ?、诓蓸臃?/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í)序問(wèn)題。

 ?、畚辗?/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)可靠性變差。

  ⑤硬件描述語(yǔ)言法

  這種方法是從硬件描述語(yǔ)言入手,找出毛刺產(chǎn)生的根本原因,改變語(yǔ)言設(shè)計(jì),產(chǎn)生滿足要求的功能模塊,來(lái)代替原來(lái)的邏輯功能塊。

  在Verilog編程時(shí),需要注意以下幾方面,在絕大多數(shù)情況下可避免綜合后仿真出現(xiàn)冒險(xiǎn)問(wè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語(yǔ)句要完整,即每一個(gè)if要對(duì)應(yīng)一個(gè)else,時(shí)序電路if語(yǔ)句不完整不會(huì)出現(xiàn)鎖存器問(wèn)題。

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

  

 更多信息可以來(lái)這里獲取==>>電子技術(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)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。