以文本方式查看主題 - 曙海教育集團論壇 (http://www.hufushizhe.com/bbs/index.asp) -- FPGA初中級 (http://www.hufushizhe.com/bbs/list.asp?boardid=25) ---- FPGA系統設計技術 (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=25&id=1515) |
-- 作者:wangxinxin -- 發布時間:2010-11-19 11:26:03 -- FPGA系統設計技術 一、概述 FPGA是當今數字電路應用領域最熱門的話題之一,是實現復雜邏輯功能,提高系 統性能、集成度和可靠性的有力武器。但是,對于初用者,特別是對于那些習慣于TTL 電路設計的初用者來說,FPGA的有效應用并不像某些廠家廣告中所說的那么輕松。誠 然,學會使用設計工具實現一個FPGA設計是一件很容易的事,但是要獲得比較理想的 結果就不那么容易了。經驗表明,對于同一個設計,那些會使用適合于FPGA體系結構 特點的設計技術的設計者與不能有效地使用適合于FPGA體系結構特點的設計技術的初 用者,在芯片資源利用率和設計實現速度兩方面的差距往往高達50%~100%,有時 甚至更大些。造成這種差別的原因主要有兩個方面:一是FPGA設計工具不夠完善,其 邏輯分割和布局布線與用戶描述設計的方法有很大關系;二是FPGA與傳統PLD和T TL標準邏輯電路在體系結構方面有很大差別,因此設計技巧往往不盡相同,那些用戶習 慣了的、適合于傳統PLD和TTL標準電路的設計優化技術對FPGA設計來說往往不 是最優的,有時甚至是最差的。因此,充分了解FPGA器件體系結構特點,并采用相適 應的設計優化技術對于有效地應用FPGA技術是非常重要的。 傳統PLD是一種基于陣列結構的器件,由AND陣列和OR陣列組成的,AND陣 列的輸出驅動OR陣列,而OR陣列的輸出驅動輸出單元,并可反饋回AND陣列。傳統 PLD的觸發器位于輸出單元,往往是每個輸出單元有一個觸發器,由OR門的輸出驅動 。PLD的AND門比較寬,通常可以實現多達幾十個輸入變量的邏輯與功能,每個與門 通常也稱為一個乘積項。與AND門相反,PLD的或門比較窄,往往只有幾個輸入變量 。OR門的輸入是AND門的輸出,它實現乘積項之和的操作。PLD的輸出單元和觸發 器數量有限,但每個輸出單元的組合邏輯能力很強,可以實現很復雜的與或操作,因此是 組合邏輯密集型器件,其組合邏輯資源與觸發器資源的比例往往高達5:1~10:1。 PLD設計的一個原則就是盡可能地充分利用其組合邏輯能力,盡可能地節約觸發器資源 。與PLD相反,FPGA是觸發密集型器件,構成芯片內部邏輯單元陣列的每個邏輯單 元往往設有1~2個觸發器,但其組合邏輯功能比較弱,組合邏輯資源與觸發器資源的比 例通常為2:1。事實上,FPGA主要是與門陣列而不是與PLD爭奪市場,其邏輯單 元是面向細粒度組合邏輯功能而優化設計的,復雜的組合邏輯功能必須由多個邏輯單元分 級實現。FPGA設計的一個原則是充分利用豐富的觸發器資源,盡可能降低每個組合邏 輯操作的復雜度。 中小規模標準集成電路系統設計的原則是在滿足性能要求的前提下盡可能地減少器件 的使用量,其特點是用戶從元件庫中調用的第一個符號都對應于PCB上的一塊組件,調 用的符號越多往往意味著使用的器件越多,同時各個器件之間的連線是做在PCB上的, 各種信號線之間沒有什么差別,且走線自由,延遲很小。FPGA則不同,用戶從元件庫 中調用的符號只是描述某一功能,往往不對應于特定的封裝。用戶多調用一些符號,特別 是反相器,往往并不意味著會多消耗一些芯片資源;相反,調用較少的符號有時反而會需 要更多的芯片資源。此外,在FPGA中,各種互連資源的數量是固定的,所能實現的互 連模式也是有一定限制的,且互連延遲往往也是很可觀的,有時要占總信號鏈路延遲的5 0%。 因此,FPGA與PLD和SSI/MSI標準電路在器件結構等方面存在著很大的 差異,為了獲得比較理想的性能,需要針對各種器件的特點采用相應的設計技術,若將P LD和SSI/MSI電路的設計技巧生搬硬套到FPGA設計中,往往會導致很差的性 能。本文的其余部分將討論各種常見邏輯功能的FPGA設計技術。 二、狀態機設計 狀態機是數字電路設計中經常用到的時序控制功能,FPGA設計在狀態編碼方案、 等待狀態生成和大型復雜狀態機設計等方面與傳統PLD設計和SSI/MSI標準邏輯 電路設計有著很大的差別。 首先,在FPGA設計中,One-Hot狀態編碼方案比二進制狀態編碼方案更有 效,而在PLD和SSI/MSI設計中,二進制狀態編碼方案則更合適。所謂One- Hot狀態編碼方案就是每個狀態由一位觸發器來表示,而二進制狀態編碼方案是用Lo g,[2][N]位觸發器表示N個狀態,在PLD設計中,由于其觸發器資源有限,故 通常采用二進制編碼方案來表示各個狀態,然后用組合邏輯對狀態編碼進行譯碼,生成狀 態輸出信號和狀態轉移控制信號。由于PLD是組合邏輯密集型器件,其AND-OR陣 列可以在相同的延遲時間內完成各種復雜的譯碼功能,因此這種方案是適合于其器件體系 結構的。FPGA是觸發器密要型器件,其邏輯單元的組合邏輯能力相對PLD的AND -OR陣列而言是很弱的,只有幾個輸入端,因此往往不宜采用二進制狀態編碼方案,因 為這樣做會導致復雜的組合運算,增加邏輯鏈路級數,降低工作速度。對FPGA而言, 更合適的是采用One-Hot狀態編碼方案,因為此時狀態生成邏輯的輸入直接來自狀 態觸發器的輸出端,不必對狀態進行譯碼,操作比較簡單,每個狀態的生成信號往往可以 在一個邏輯單元內實現,且狀態輸出信號直接取自狀態寄存器的輸出,也不必對狀態進行 譯碼,因此有利于獲得較高的速度。經驗表明,在FPGA設計中,One-Hot編碼 方案通常可使狀態機的工作速度比PLD常用的二進制編碼方案快50%~100%。同 時,SSI/MSI電路設計中常用的用可裝入計數器實現狀態機的方法雖可減少器件數 量,但不能有效利用FPGA的門電路,故也不適合于FPGA設計。 其次,PLD設計中常用計數器生成狀態機所需要的等待狀態。這種方法對于組合邏 輯資源豐富和觸發器資源較少的PLD器件而言是很合適的,但對觸發器資源豐富和邏輯 單元組合邏輯能力較弱的FPGA來說就不是很合適,此時比較有效的是使用移位寄存器 來生成等待狀態,以獲得更高的速度。 最后,在用FPGA實現大型復雜狀態機時,應將該大型復雜狀態機分割成幾個相互 通信的規模較小的狀態機,以便降低狀態轉移控制邏輯的復雜度,充分利用FPGA布線 資源的局部化特性,減少布線擁擠現象,縮短布線延遲,提高設計速度。 三、面向數據通路功能的FPGA設計技術 FPGA器件相對于傳統PLD和SSI/MSI器件的一大優勢是FPGA器件可 以有效地實現諸如計數器、加法器和比較器等各種數據通路功能,獲得非常高的工作速度 。FPGA器件的這個優勢來源于其器件體系結構的特點,即豐富的觸發器資源、靈活有 效的互連結構和有效地實現多路選擇器的能力,這些特點使得FPGA器件在實現數據通 路功能時可以采用操作流水化技術和減輕輸出負載的信號重復設置技術,從而大大提高設 計的工作速度。 操作流水化是實現復雜功能的有效手段,其原理是將一個復雜操作分成幾個比較簡單 的操作步,每個操作步的結果經寄存器寄存后再驅動下一個操作步的輸入。由于每個操作 步都比較簡單,故可以工作在較高的時鐘頻率,而操作流水化的等效結果是每個時鐘周期 出一個結果,故整個設計的整體性能也提高了。FPGA提供了操作流水化所需要的觸發 器資源,且每個操作步往往可以在一個邏輯單元列內實現,操作步之間的連接也可以通過 相鄰邏輯單元列之間的超小延遲直接互連資源直接相連,從而獲得很高的工作速度。所以 ,一般來說,如果數據通路功能的輸入輸出延遲允許的話,都應盡可能地采用流水化技術 ,以提高性能,而且對大多數FPGA而言,操作流水化所需要的觸發器資源往往不會增 加額外的資源成本,因為,這些觸發器資源通常已不能再用作其它用途,不這樣用也就浪 費了。 超前進位技術是提高計數器性能的有效方法,具有豐富觸發器資源的FPGA可以有 效地實現超前進位技術。例如,在16位減法計數器設計中常用的方法是檢測輸出的全0 狀態,生成計數器翻轉控制信號。而在FPGA中,更有效的方法是檢測輸出的1狀態, 并將生成的控制信號寄存,使計數器翻轉控制信號與計數器變為全0操作同步變化,從而 消除了檢測計數器輸出條件所需要的組合傳輸延遲,提高計數器的工作頻率。預分頻計數 器設計中也可采用相同的技術生成高位計數器的計數使能控制信號,以進一步提高計數的 性能。例如,通過采用上述的超前進位技術和預分頻技術,用XC3100-3系列FP GA實現的16位不可裝入單向計數器,其工作速度可達107MHz。 重復設置相同的電路單元以盡可能地減輕信號負載和縮短互連延遲,是FPGA設計 中獲取超高性能的另一常用方法,特別對那些不宜采用流水化技術的電路來說更是如此。 例如,在加法器設計中可將加法器分成若干段,每個段都設置兩套加法電路,分別生成有 進位的加法結果和無進位的加法結果,然后由進位信號選擇正確的結果,使加法運算與進 位生成完全并行進行。又例如在計數器設計中,高位計數器計數使能信號的生成和傳播是 影響計數器工作頻率的關鍵因素,可以采用重復設置相同電路單元的方法來縮短該延遲時 間。這種方法的缺點是增加了芯片的資源要求,但對于需要超高性能的用戶來說,畢竟提 供了一條可行的途徑。例如,通過采用預分頻技術、超前進位生成技術和信號重復設置技 術,用XC3100-3系列FPGA實現的16位不可裝入單向計數器,其工作頻率可 高達204MHz,這是其它方法所無法比擬的。上述談到的操作流水化技術、信號預譯 碼技術、預分頻技術和信號重復設置技術等概念不僅適合于數據通路設計,也適合隨機邏 輯設計,是實現高性能FPGA設計的有效手段。 四、時鐘信號分配技術 時鐘信號是FPGA芯片中比較特殊的信號,往往由少數幾個專用的驅動器驅動和專 用的時鐘分配網絡傳播,且往往只能驅動觸發器的時鐘端,其目的是為整個芯片提供延遲 偏差幾乎可以忽略的時鐘信號,使用戶不必擔心時鐘信號負載問題和信號保持時間問題, 以提高設計工作速度和可靠性。因此,FPGA特別適合于同步電路設計,用戶應盡可能 采用同步電路設計技術,盡可能減少使用的時鐘信號種類。例如,TTL電路設計中經常 采用的由組合邏輯生成多個時鐘,然后分別驅動多個觸發器以裝入和保持數據的設計方法 ,對FPGA設計是不適用的。因為這樣做會使得時鐘種類很多,不能利用專用的時鐘驅 動器和專用的時鐘走線資源,時鐘信號只能由通用的布線資源拼湊而成,各個負載點上的 時鐘延遲偏差很大,會引起數據保持時間問題,降低工作速度。 對FPGA設計而言,更有效的方法是使用同一個時鐘信號,而由組合邏輯生成多個 時鐘使能信號,分別驅動觸發器的時鐘使能端,所有觸發器的數據裝入都由同一個時鐘控 制,但只有時鐘使能信號有效的觸發器才會裝入數據,時鐘使能信號無效的觸發器則保持 數據。這種方法充分發揮了FPGA器件體系結構的優勢,是用戶應該盡可能使用的設計 技巧。 五、如何選擇合適的電路構造單元? 為了方便用戶,各個FPGA廠家的開發系統都提供了包含數以百計個元件符號(即 電路構造單元)的符號庫,其中有些元件符號的功能比較簡單,如簡單門電路、觸發器等 ,有些元件符號的功能則比較復雜,與TTL電路的組件相對應;有些元件符號雖然描述 的是相同或相似的功能,但由于輸入變量反相信號個數的不同而有多個版本。一些原來從 事TTL電路設計的用戶往往習慣于從FPGA設計元件庫中調用相同的元件符號,將已 有的TTL電路設計一一對應地轉換成FPGA設計。經驗表明,這種方法的實際效果通 常是很差的,因為它們往往不能充分發揮FPGA器件結構的優勢。為了獲得比較理想的 結果,用戶除了要對電路的實現方法作必要的修改外,還要使用合適的元件符號來描述設 計。下面是選擇元件符號的兩個原則,可供用戶參考: ·盡可能地使用功能與用戶要求最一致的元件符號。例如,如果需要一個沒有數據裝 入功能的4位計數器,用戶就應該直接調用元件庫中相應的符號,而不應調用功能與74 161等價的符號,因為FPGA開發系統往往不允許符號輸入端懸空,當使用與741 61等價的符號時,用戶必須將相應的輸入引腳接到VCC或GND信號,從而占用額外 的芯片布線資源,容易引起布線擁擠,影響其它信號的布線效果和整個設計的性能。 ·如果輸入信號需要反相,則應盡可能地調用輸入信號帶反相功能的符號,而不是用 分離的反相器對輸入信號進行反相。在FPGA中,輸入信號的反相往往可在同一個邏輯 單元內完成而不消耗額外的邏輯資源,因此廠家提供的各種門電路符號隨著輸入變量和輸 入變量反相個數的不同而有多個版本。例如,4個輸入與門就有AND4、AND3B1 、AND2B2、AND1B3和AND4B五個版本,其中ANDxBy表示X個輸入 不反相和Y個輸入反相。如果用戶需要實現Y=A*B*/C*/D功能,就應調用AN D2B2,而不是用兩個分離的非門對C和D反相,再連接到AND4的輸入。因為在前 一種做法中,C和D的反相操作是不占用資源的,而在后一種做法中,C和D的反相操作 與AND4操作可能會被分割到不同的邏輯單元中實現,從而消耗額外的資源,增加額外 的延遲。如果一個信號反相反驅動了多個負載,則應將該反相功能分散到各個負載中實現 ,因為集中反相往往會由于上述所說的原因而消耗更多的資源和增加額外的延遲。 六、內部三態總線設計技術 有的FPGA器件內部設置有三態驅動器和相應的長線布線資源,可以構成內部三態 總線;有的FPGA器件內部則沒有三態驅動器,不能直接構成內部三態總線,三態總線 只能通過多路器來實現。用戶在使用不同的FPGA器件時應使用相應的設計技術。一般 來說,不管用哪一種方式實現三態總線,都應手工定位三態驅動器或多路器在芯片中的確 切位置,否則布線的效果往往是很差的。 Metastability問題 Metastability問題是指觸發器的異步數據輸入端,在觸發器時鐘端發 生有效變化的數據建立時間窗口內發生變化,從而破壞觸發器的數據建立時間要求,導致 觸發器輸出發生振蕩的現象。一般來說,在FPGA設計中,利用I/O塊中的輸入觸發 器對異步輸入信號進行寄 存就基本上可以解決Metastability問題,且又 不會增加芯片資源要求。因為如果不這樣使用的話,該I/O塊中的輸入觸發器往往也就 浪費了。如果這樣做后用戶還不放心的話,用戶可使用邏輯塊中的觸發器對I/O塊觸發 器的輸出信號再次進行同步,該方法稱為雙觸發器同步技術。 八、FPGA板級設計技術 FPGA芯片的設計成功并不意味著大功已告成,它能否按設計者所設想的那樣在系 統中正常工作,還取決于各種外部因素,如供電、工作環境、傳輸線效應等。一般來說, FPGA的板級設計應注意如下一些問題: ·加電:所有FPGA在系統加電期間都要經歷一個過渡過程才能穩定下來,在這個 過渡過程中,FPGA內部觸發器的狀態是不確定的。過渡過程的持續時間與供電電源的 變化速率有關。為了保證FPGA可靠地工作,VCC上升速度不能太慢,且最好將系統 復位信號引入到FPGA芯片中,在系統復位未結束前將FPGA內部觸發器置于穩定的 狀態。此外,基于SRAM編程工藝的FPGA在供電穩定后還要從FPGA芯片外部裝 入構造數據,在此期間,FPGA的I/O引腳用來輸入信號,FPGA尚未正常工作, 設計者應利用FPGA芯片提供的專用引腳信號,作適當的處理,保證系統其它設備不會 訪問該FPGA或該FPGA所控制的設備。 ·工作環境:FPGA對工作環境有一定的要求,最好工作在廠家推薦的工作環境中 。此外,FPGA的定時特性隨電壓和溫度的變化而變化,如果用戶的FPGA設計處于 臨界狀態,則環境條件變化時就可能會工作不正常。為了使FPGA設計在整個環境變化 允許范圍內可靠地工作,設計者應保證在此變化范圍內不會破壞芯片間數據通信的時序關 系。 ·地反射(Ground Bounce)問題:地反射現象是指多個輸出信號同時 變化時引起的信號干擾,其幅度與同時變化的輸出引腳數和輸出引腳所驅動的電容負載有 關。大多數FPGA器件對同時變化的輸出引腳數量有一定的限制,用戶應盡可能地遵守 這些約束,如果不能滿足這些約束條件,則應將這些輸出引腳分散并靠近GND引腳,盡 量避免過于集中。此外,采用多層印制板和設置專門的VCC/GND布線層,采用CM OS輸入電平和配置足夠的去耦電容,也是減少地反射現象的有效手段。 ·傳輸線效應:所有的PCB走線都帶有分布式的電容和電感,當印制線的雙程傳輸 延遲大于輸出信號的上升或下降時間時,就必須將該印制線作傳輸線處理,必要時可采用 串行匹配或并行匹配技術,對該信號進行端接。同時有的FPGA提供了輸出信號變化速 率控制電路,允許用戶控制輸出引腳信號的變化速率,如果允許,用戶應盡可能地將輸出 引腳置于低變化速率方式,以延長信號的上升/下降時間,增加信號的有效傳輸距離。 ·去耦電容:每塊FPGA芯片都應配置足夠的去耦電容,視規模大小不同,每個F PGA封裝周邊應配置0.1μf~0.2μf的高頻去耦電容,且去耦電容應盡量靠近 VCC或GND引腳。 ·所有的VCC/GND引腳都應被連有相應的信號,且VCC/GND最好使用專 用的布線層;未使用的I/O引腳應被置于固定的電平上,不能懸空。 九、結束語 FPGA器件與PLD和SSI/MSI標準電路在器件結構等方面存在著較大的差 別,為了獲得比較理想的FPGA設計性能,用戶需要針對FPGA體系結構的特點,采 用相適應的設計優化技術,生搬硬套PLD和SSI/MSI標準電路的設計技術往往會 導致很差的效果。One-Hot狀態碼編程技術、操作流水化技術、預分頻技術、超前 操作技術、同步電路設計技術和信號重復設置技術等,是獲得高性能FPGA設計的有效 手段,用戶可在實踐中靈活運用。同時,這些技術的應用往往需要用戶對邏輯分割和芯片 內部布局布線進行手工干預,因此要求用戶詳細了解器件的內部結構和熟練使用各種設計 工具。總之,會使用設計工具完成一個FPGA設計是一件容易的事情,但要獲取比較理 想的結果就不那么輕松了,需要多付出一點努力。 |