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