現(xiàn)場(chǎng)可編程門陣列(FPGA)在結(jié)構(gòu)上由邏輯功能塊排列為陣列,并由可編程的內(nèi)部連線連接這些功能塊,來實(shí)現(xiàn)一定的邏輯功能。 FPGA可以替代其他PLD或者各種中小規(guī)模數(shù)字邏輯芯片在數(shù)字系統(tǒng)中廣泛應(yīng)用,也是實(shí)現(xiàn)具有不同邏輯功能ASIC的有效辦法。FPGA是進(jìn)行原型設(shè)計(jì)最理想的載體,原型機(jī)的最初框架和實(shí)現(xiàn)通過PFGA來驗(yàn)證,可以降低成本、縮短開發(fā)周期。
利用FPGA的可重配置功能,可以在使用過程中,在不改變所設(shè)計(jì)的設(shè)備的硬件電路情況下,改變?cè)O(shè)備的功能。但和所有的數(shù)字電路一樣,F(xiàn)PGA電路中也存在毛刺問題。它的出現(xiàn)會(huì)影響電路工作的可靠性、穩(wěn)定性,嚴(yán)重時(shí)會(huì)導(dǎo)致整個(gè)數(shù)字系統(tǒng)的誤動(dòng)作和邏輯紊亂。在此詳細(xì)論述了解決此問題的多種方法。
2 FPGA的功能和結(jié)構(gòu)特點(diǎn)
2.1 FPGA的功能
FPGA的功能由邏輯結(jié)構(gòu)的配置數(shù)據(jù)決定,在工作時(shí),這些配置數(shù)據(jù)存放在片內(nèi)的SRAM或者熔絲圖上。使用SRAM的FPGA器件,在工作前需要從芯片外部加載配置數(shù)據(jù),這些配置數(shù)據(jù)可以存放在片外的EPROM或其他存儲(chǔ)體上,人們可以控制加載過程,在現(xiàn)場(chǎng)修改器件的邏輯功能。
圖1 實(shí)際邏輯電路
圖2 LUT的實(shí)現(xiàn)方式
2.2 FPGA的結(jié)構(gòu)特點(diǎn)
FPGA使用了可編程的查找表(Look Up Table ,LUT)結(jié)構(gòu),LUT是可編程的最小邏輯構(gòu)成單元。大部分FPGA采用基于SRAM的查找表邏輯形成結(jié)構(gòu),就是用SRAM(靜態(tài)隨機(jī)存儲(chǔ)器)來構(gòu)成邏輯函數(shù)發(fā)生器。圖1、2分別是4輸入LUT的實(shí)際邏輯電路和LUT的實(shí)現(xiàn)方式。FLEX10KE系列器件的結(jié)構(gòu)和工作原理在Altera的FPGA器件中具有典型性,下面以此類器件為例,介紹PFGA的結(jié)構(gòu)。其內(nèi)部結(jié)構(gòu)如圖3所示:
圖3 FLEX10KE內(nèi)部結(jié)構(gòu)
FLEX10KE內(nèi)部結(jié)構(gòu)包含嵌入式陣列塊(EAB,Embedded Array Block)、邏輯陣列塊(LAB,Logic Array Block)、快速通道(Fast Track)互連和輸入/輸出單元(I/O Element,IOE)四部分。
(1) 嵌入式陣列用來實(shí)現(xiàn)各種存儲(chǔ)器及復(fù)雜的邏輯功能,如數(shù)字信號(hào)處理、微控制器等。嵌入式陣列由一系列嵌入式陣列塊(EAB)構(gòu)成。EAB是在輸入輸出口上具有寄存器的能變形的RAM塊。
(2) 邏輯陣列用來實(shí)現(xiàn)普通邏輯功能,如計(jì)數(shù)器、加法器、狀態(tài)機(jī)等。邏輯陣列由一系列邏輯陣列塊(LAB)構(gòu)成。每個(gè)LAB包含八個(gè)LE和一些局部互連。LAB 構(gòu)成了FLEX10KE的“粗粒度”結(jié)構(gòu),有利于EDA軟件進(jìn)行布局布線,優(yōu)化器件的利用,提高性能。LE是FLEX10KE結(jié)構(gòu)中的最小單元,每個(gè)LE 含有一個(gè)4輸入查找表(LUT)、一個(gè)帶有同步使能的可編程觸發(fā)器(Programmable Register)、一個(gè)進(jìn)位鏈(Carry Chain)和一個(gè)級(jí)連鏈(Cascade)。每個(gè)LE都能驅(qū)動(dòng)LAB局部互連(LAB Local Interconnect)和快速通道互連(Fast Track Interconnect)。LE的內(nèi)部結(jié)構(gòu)如圖4所示。
圖4 邏輯單元(LE)內(nèi)部結(jié)構(gòu)
(3) 器件內(nèi)部信號(hào)的互連和器件引出端之間的信號(hào)互連由快速通道(FastTrack)連線提供,F(xiàn)astTrack遍布于整個(gè)FLEX10KE器件,是一系列水平和垂直走向的連續(xù)式布線通道。FastTrack互連是一系列貫通器件行、列的快速連接通道。
(4) I/O引出端由一些I/O單元(IOE)驅(qū)動(dòng)。IOE位于快速通道的行和列的末端,每個(gè)IOE有一個(gè)雙向I/O緩沖器和一個(gè)既可做輸入寄存器也可做輸出寄存器的觸發(fā)器。
3 競(jìng)爭(zhēng)冒險(xiǎn)
在組合電路中,當(dāng)邏輯門有兩個(gè)互補(bǔ)輸入信號(hào)同時(shí)向相反狀態(tài)變化時(shí),輸出端可能產(chǎn)生過渡干擾脈沖的現(xiàn)象,稱為競(jìng)爭(zhēng)冒險(xiǎn)。
3.1 FPGA中產(chǎn)生競(jìng)爭(zhēng)冒險(xiǎn)的原因
信號(hào)在FPGA器件內(nèi)部通過連線和邏輯單元時(shí),都有一定的延時(shí)。延時(shí)的大小與連線的長(zhǎng)短和邏輯單元的數(shù)目有關(guān),同時(shí)還受器件的制造工藝、工作電壓、溫度等條件的影響。信號(hào)的高低電平轉(zhuǎn)換也需要一定的過渡時(shí)間。由于存在這兩方面因素,多路信號(hào)的電平值發(fā)生變化時(shí),在信號(hào)變化的瞬間,組合邏輯的輸出有先后順序,并不是同時(shí)變化,往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱為“毛刺”。如果一個(gè)組合邏輯電路中有“毛刺”出現(xiàn),就說明該電路存在“冒險(xiǎn)”。(與分立元件不同,由于PLD內(nèi)部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級(jí)傳遞,因此毛刺現(xiàn)象在PLD、FPGA 設(shè)計(jì)中尤為突出)
3.2 FPGA中競(jìng)爭(zhēng)冒險(xiǎn)的危害
圖5給出了一個(gè)邏輯冒險(xiǎn)的例子,從圖6的仿真波形可以看出,“A、B、C、D”四個(gè)輸入信號(hào)經(jīng)過布線延時(shí)以后,高低電平變換不是同時(shí)發(fā)生的,這導(dǎo)致輸出信號(hào)“OUT”出現(xiàn)了毛刺。而當(dāng)數(shù)據(jù)完全穩(wěn)定的時(shí)候,毛刺信號(hào)也就自然消失了。可以概括的講,只要輸入信號(hào)不同時(shí)變化,(經(jīng)過內(nèi)部走線)組合邏輯必將產(chǎn)生毛刺。將它們的輸出直接連接到時(shí)鐘輸入端、清零或置位端口的設(shè)計(jì)方法是錯(cuò)誤的,這可能會(huì)導(dǎo)致嚴(yán)重的后果。而現(xiàn)在FPGA設(shè)計(jì)中的信號(hào)往往是由時(shí)鐘控制的,多數(shù)據(jù)輸入的復(fù)雜運(yùn)算系統(tǒng),甚至每個(gè)數(shù)據(jù)都由相當(dāng)多的位數(shù)組成。這時(shí),每一級(jí)的毛刺都會(huì)對(duì)結(jié)果有嚴(yán)重的影響,如果是多級(jí)的設(shè)計(jì),那么毛刺累加后甚至?xí)绊懻麄€(gè)設(shè)計(jì)的可靠性和精確性。時(shí)鐘端口、清零和置位端口對(duì)毛刺信號(hào)十分敏感,任何一點(diǎn)毛刺都可能會(huì)使系統(tǒng)出錯(cuò),因此判斷邏輯電路中是否存在冒險(xiǎn)以及如何避免冒險(xiǎn)是設(shè)計(jì)人員必須要考慮的問題。
圖5 一個(gè)邏輯冒險(xiǎn)的例子
圖6 仿真波形
任何組合電路、反饋電路和計(jì)數(shù)器都可能是潛在的毛刺信號(hào)發(fā)生器。毛刺并不是對(duì)所有輸入都有危害,如觸發(fā)器的D輸入端,只要毛刺不出現(xiàn)在時(shí)鐘的上升沿并滿足數(shù)據(jù)的建立保持時(shí)間,就不會(huì)對(duì)系統(tǒng)造成危害。而當(dāng)毛刺信號(hào)成為系統(tǒng)的啟動(dòng)信號(hào)、控制信號(hào)、握手信號(hào),觸發(fā)器的清零信號(hào)(CLEAR)、預(yù)置信號(hào)(PRESET)、時(shí)鐘輸入信號(hào)(CLK)或鎖存器的輸入信號(hào)就會(huì)產(chǎn)生邏輯錯(cuò)誤。任何一點(diǎn)毛刺都可能使系統(tǒng)出錯(cuò)。
3 毛刺的消除
3.1 利用冗余項(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)。但該法對(duì)于計(jì)數(shù)器型產(chǎn)生的毛刺是無法消除的。
3.2 采用格雷碼
我們可以通過改變?cè)O(shè)計(jì),破壞毛刺產(chǎn)生的條件,來減少毛刺的發(fā)生。例如,在數(shù)字電路設(shè)計(jì)中,常常采用格雷碼計(jì)數(shù)器取代普通的二進(jìn)制計(jì)數(shù)器,這是因?yàn)楦窭状a計(jì)數(shù)器的輸出每次只有一位跳變,消除了競(jìng)爭(zhēng)冒險(xiǎn)的發(fā)生條件,避免了毛刺的產(chǎn)生。
3.3 采樣法
由于冒險(xiǎn)出現(xiàn)在變量發(fā)生變化的時(shí)刻,如果待信號(hào)穩(wěn)定之后加入取樣脈沖,那么就只有在取樣脈沖作用期間輸出的信號(hào)才能有效。這樣可以避免產(chǎn)生的毛刺影響輸出波形。
一般說來,冒險(xiǎn)出現(xiàn)在信號(hào)發(fā)生電平轉(zhuǎn)換的時(shí)刻,也就是說在輸出信號(hào)的建立時(shí)間內(nèi)會(huì)發(fā)生冒險(xiǎn),而在輸出信號(hào)的保持時(shí)間內(nèi)是不會(huì)有毛刺信號(hào)出現(xiàn)的。如果在輸出信號(hào)的保持時(shí)間內(nèi)對(duì)其進(jìn)行“采樣”,就可以消除毛刺信號(hào)的影響。
有兩種基本的采樣方法:一種方法是在輸出信號(hào)的保持時(shí)間內(nèi),用一定寬度的高電平脈沖與輸出信號(hào)做邏輯“與”運(yùn)算,由此獲取輸出信號(hào)的電平值。圖7說明了這種方法,采樣脈沖信號(hào)從輸入引腳“SAMPLE”引入。油?的仿真波形上可以看出,毛刺信號(hào)出現(xiàn)在“TEST”引腳上,而“OUT”引腳上的毛刺已被消除了。
圖7 采樣法一
圖8 采樣法一仿真波形
上述方法的一個(gè)缺點(diǎn)是必須人為的保證sample信號(hào)必須在合適的時(shí)間中產(chǎn)生,另一種更常見的方法是利用D觸發(fā)器的D輸入端對(duì)毛刺信號(hào)不敏感的特點(diǎn),在輸出信號(hào)的保持時(shí)間內(nèi),用觸發(fā)器讀取組合邏輯的輸出信號(hào),這種方法類似于將異步電路轉(zhuǎn)化為同步電路。圖9給出了這種方法的示范電路,圖 10是仿真波形。在仿真時(shí),我們也可能會(huì)發(fā)現(xiàn)在FPGA器件對(duì)外輸出引腳上有輸出毛刺,但由于毛刺很短,加上PCB本身的寄生參數(shù),大多數(shù)情況下,毛刺通過PCB走線,基本可以自然被慮除,不用再外加阻容濾波。
圖9 采樣法二
圖10 采樣法二仿真波形
3.4 吸收法
增加輸出濾波,在輸出端接上小電容C可以濾除毛刺,圖11所示。但輸出波形的前后沿將變壞,在對(duì)波形要求較嚴(yán)格時(shí),應(yīng)再加整形電路,該方法不宜在中間級(jí)使用。
圖11 吸收法消除毛刺圖
3.5 延遲辦法
因?yàn)槊套罱K是由于延遲造成的,所以可以找出產(chǎn)生延遲的支路。對(duì)于相對(duì)延遲小的支路,加上毛刺寬度的延遲可以消除毛刺。當(dāng)需要對(duì)某一信號(hào)作一段延時(shí)時(shí),初學(xué)者往往在此信號(hào)后串接一些非門或其它門電路,此方法在分離電路中是可行的。但在FPGA中,開發(fā)軟件在綜合設(shè)計(jì)時(shí)會(huì)將這些門當(dāng)作冗余邏輯去掉,達(dá)不到延時(shí)的效果。用Altera公司的 MaxplusII開發(fā)FPGA時(shí),可以通過插入一些LCELL原語(yǔ)或調(diào)用延時(shí)線模塊來產(chǎn)生一定的延時(shí),但這樣形成的延時(shí)在FPGA芯片中并不穩(wěn)定,會(huì)隨溫度等外部環(huán)境的改變而改變,因此并不提倡這樣。
在此,可以用高頻時(shí)鐘來驅(qū)動(dòng)一移位寄存器,待延時(shí)信號(hào)作數(shù)據(jù)輸入,按所需延時(shí)正確設(shè)置移位寄存器的級(jí)數(shù),移位寄存器的輸出即為延時(shí)后的信號(hào)。在此以實(shí)現(xiàn)雙口RAM的讀寫時(shí)序中IDT7132的讀時(shí)序?yàn)槔?,時(shí)序圖如圖12所示。無論用CE還是OE來控制讀取,都需要CE或OE保持一段低電平。令OE保持低電平,CE平時(shí)為高電平,讀雙口RAM時(shí)觸發(fā)CE變?yōu)榈碗娖?,延遲一小段時(shí)間再恢復(fù)高電平。本設(shè)計(jì)產(chǎn)生這段延時(shí)的方法是用高頻計(jì)數(shù)器產(chǎn)生,具體方法為:在FPGA中設(shè)計(jì)一個(gè)計(jì)數(shù)器,取系統(tǒng)可用的高頻時(shí)鐘(周期小于所需延時(shí))驅(qū)動(dòng)它計(jì)數(shù),計(jì)到設(shè)定好的終值時(shí)產(chǎn)生觸發(fā)脈沖。不同的計(jì)數(shù)終值可以產(chǎn)生不同的延時(shí)。此方法所產(chǎn)生的延時(shí)為高頻時(shí)鐘周期的整數(shù)倍,若高頻時(shí)鐘周期與所需延時(shí)相比很小,則延時(shí)較精確,否則只能做一粗略的延時(shí)。
圖12 雙口RAM IDT7132讀操作時(shí)序圖
4 FPGA設(shè)計(jì)中避免毛刺的其他注意事項(xiàng)
4.1 電路選用
要用寄存器和觸發(fā)器設(shè)計(jì)電路,盡量不要用鎖存器,因它對(duì)輸入信號(hào)的毛刺太敏感。如果堅(jiān)持用鎖存器設(shè)計(jì)必須保證輸入信號(hào)絕對(duì)沒有毛刺,且滿足保持時(shí)間。
4.2 譯碼器
設(shè)計(jì)設(shè)計(jì)譯碼邏輯電路時(shí)必須十分小心,因?yàn)樽g碼器和比較器本身會(huì)產(chǎn)生尖峰,容易產(chǎn)生毛刺,把譯碼器或比較器的輸出直接連到時(shí)鐘輸入端或異步清除端,會(huì)造成嚴(yán)重的后果。
4.3 避免隱含RS觸發(fā)器
應(yīng)該盡量避免隱含RS觸發(fā)器的出現(xiàn)。一般要控制輸出被直接反饋到輸入端,采用反饋環(huán)路會(huì)出現(xiàn)隱含RS觸發(fā)器,其對(duì)輸入尖峰和假信號(hào)很敏感,輸入端有任何變化都有可能使輸出值立刻改變,此時(shí)易造成毛刺的產(chǎn)生,導(dǎo)致時(shí)序的嚴(yán)重混亂。一旦具有隱含的RS觸發(fā)器,加鎖存器消除毛刺是不能解決問題的。此時(shí)只有通過全面修改電路來從根本上解決。
4.4 避免使用多時(shí)鐘設(shè)計(jì)
每一個(gè)模塊中只用一個(gè)時(shí)鐘,避免使用多時(shí)鐘設(shè)計(jì),同時(shí)避免使用主時(shí)鐘分頻后的二次時(shí)鐘作為時(shí)序器件的時(shí)鐘輸入,因?yàn)槎螘r(shí)鐘相對(duì)于一次時(shí)鐘可能存在過大的時(shí)鐘歪斜。對(duì)所有模塊的輸入時(shí)鐘、輸入信號(hào)、輸出信號(hào)都用D觸發(fā)器或寄存器進(jìn)行同步處理,即輸出信號(hào)直接來自觸發(fā)器或寄存器的輸出端。這樣可以消除尖峰和毛刺信號(hào)。不論是控制信號(hào)還是地址總線信號(hào)、數(shù)據(jù)總線信號(hào),都要采用另外的寄存器,以使內(nèi)部歪斜的數(shù)據(jù)變成同步數(shù)據(jù)。這些表面上看似乎無用的操作可以大大提高電路系統(tǒng)的性能。
4.5 避免使用延遲線
應(yīng)該盡量避免使用延遲線,因它對(duì)工藝過程的變化極為敏感,會(huì)大大降低電路的穩(wěn)定性和可靠性,并將為測(cè)試帶來麻煩。
4.6 充分利用資源
大部分FPGA器件都為時(shí)鐘、復(fù)位、預(yù)置等信號(hào)提供特殊的全局布線資源,要充分利用這些資源。這樣可以減少電路中的毛刺并且大大提高設(shè)計(jì)電路的性能。
4.7 不要期望仿真器替你找到毛刺錯(cuò)誤
注意仿真結(jié)果和實(shí)際綜合的電路的不一致性。無論是時(shí)序電路還是異步邏輯電路,其行為與其仿真器結(jié)果都是不完全一樣的。特別是異步邏輯電路,仿真結(jié)果將會(huì)隱藏競(jìng)爭(zhēng)冒險(xiǎn)和毛刺現(xiàn)象,與實(shí)際行為相差較遠(yuǎn)。故在FPGA設(shè)計(jì)中,對(duì)每一個(gè)邏輯門、每一行VHDL (Verilof)語(yǔ)言,必須完全理解,不要期望仿真器替你找到錯(cuò)誤。
使用FPGA開發(fā)數(shù)字電路,可以大大縮短設(shè)計(jì)時(shí)間、減少PCB 面積、提高系統(tǒng)的可靠性。它的這些優(yōu)點(diǎn)使得FPGA技術(shù)得到飛速的發(fā)展,已經(jīng)在通信、電子、信號(hào)處理、工業(yè)控制等領(lǐng)域被廣泛應(yīng)用。隨著FPGA容量的增加,SOPC (可編程芯片上系統(tǒng))SOPC(對(duì)信號(hào)的處理和整個(gè)系統(tǒng)的控制)的應(yīng)用時(shí)代即將到來。SOPC既有嵌入處理器、I/O電路和大規(guī)模嵌入存儲(chǔ)器,也有 CPLD/FPGA,用戶可以選擇。同時(shí)也可以選擇PLD公司提供的FPGA IP Intellectual Property內(nèi)核。使用IP核能保證系統(tǒng)級(jí)芯片的開發(fā)效率、質(zhì)量,并能大大縮短產(chǎn)品開發(fā)時(shí)間。
5 結(jié)束語(yǔ)
FPGA已成為解決系統(tǒng)級(jí)設(shè)計(jì)的重要選擇方案之一。因而毛刺是設(shè)計(jì)系統(tǒng)中不可忽視的問題,實(shí)際電路中它常惹出很多的麻煩。本文結(jié)合FPGA的特點(diǎn),論述了如何解決FPGA設(shè)計(jì)中的毛刺問題。增強(qiáng)電路的穩(wěn)定性和可靠性,并為實(shí)際電路的測(cè)試帶來方便。
評(píng)論
查看更多