FPGA是如何搭建的
FPGA是如何搭建的
前文介紹了FPGA的可編程技術,知道了現在大部分的FPGA是采用的SRAM工藝構成可編程開關,內部集成了百萬甚至千萬個可編程的CMOS門電路,正如FPGA的名字——現場可編程門陣列。但是,FPGA并非單純的由“門”形成的結構,下文將詳細介紹構成FPGA的多種結構以及這些結構如何相互合作實現特定功能。
傳送門:FPGA可編程技術
一. FPGA的結構劃分
FPGA大致由三大部分構成:
下圖展示了一種基本的島型(island style)FPGA結構,可以看到FPGA的三種基本要素是如何排布的。
這三種要素可組合實現任意邏輯電路,但實際FPGA中為了更方便更可靠的實現某些特定功能還會加入一些必要的電路,例如時鐘樹、配置/掃描鏈(configuration chain)、測試電路等。現在的FPGA還會在內部集成處理器(如ARM核/DSP)、塊存儲器(BRAM)、乘法器、生成時鐘用的PLL或DLL等專用硬邏輯電路來提高性能。
下圖展示了一種帶有存儲器塊和乘法器塊的島型FPGA結構。其中,相鄰的邏輯塊、連接塊、開關塊組成一個可重復邏輯塊,如圖中左上角紅色框所示。這些可重復邏輯呈陣列排列,中間再嵌入一些專用硬核電路,最終形成島型FPGA。
注意這里對FPGA內嵌的存儲器塊和乘法器塊的稱呼——專用硬邏輯電路。它不同于經常說的硬核,FPGA里的硬核專指硬核處理器,如ZYNQ芯片內部集成的兩個Cortex-A9 ARM處理器核心。
相鄰的邏輯塊、開關塊和連接塊組成一個可重復邏輯模塊,然后模塊呈陣列形排列最終形成島形FPGA。下圖展示了帶有乘法器塊和存儲器塊的島形FPGA結構。
二. 邏輯塊
邏輯塊LB是實現任意邏輯的核心。FPGA供應商對各自FPGA芯片中的邏輯塊結構有不同的稱呼,Xilinx公司稱之為CLB(Configurable Logic Block,可配置邏輯塊),而Altera公司稱之為LAB(Logic Array Block,邏輯陣列塊)。雖然稱呼不同,但不同公司LB的內部構成和功能是類似的。
在今天的復雜CAD工具出現之前,工程師門還在手動處理電路,那時基于MUX的FPGA結構能達到最好的結果,但隨著FPGA集成度的快速增加,人工手工布局布線已不可能,且MUX結構并沒有提供高速進位邏輯鏈,這導致MUX用作算術運算時性能不佳。基于以上的兩個原因,現在的FPGA基本都放棄了MUX結構而使用基于LUT(Look-Up Table,查找表)的結構。
2.1 基本邏輯單元
BLE(Basic Logic Element,基本邏輯單元)是構成邏輯塊的基本要素。BLE由實現組合電路的LUT,實現時序電路的觸發器 以及 MUX構成。BLE的內部組成如下圖所示。MUX的控制端M0決定直接輸出LUT的值還是輸出FF中存儲的值。
從上圖可見,4-LUT(4輸入查找表)是組成BLE的主要部分,它可以實現4個輸入的任意組合邏輯,但當要實現更多輸入的邏輯時,有兩個辦法是能輕松想到的,一種是多個4-LUT組合;另一種是使用一個k-LUT。這里就涉及到一個問題,到底幾輸入的LUT才是合適的呢?
2.2 幾輸入查找表是最優解
FPGA的設計所關注的兩個最重要的問題是面積和速度。
先說面積,FPGA的總面積 = 邏輯塊數 × 單個可重復邏輯塊面積。k-LUT直接影響每個邏輯塊的大小,k越大,每個邏輯塊功能越強,實現電路使用的邏輯塊數越少,但是邏輯塊自身的面積會增大,因此每個可重復邏輯模塊的面積會增大。所以,從FPGA面積的角度看,k的選擇需要權衡。
再說速度,FPGA的延遲 = 邏輯塊互聯延遲 + 邏輯塊內部延遲。k越大,實現電路使用的邏輯塊數量越小,那么互聯次數越小,互聯延遲越小,但邏輯塊內部的延遲越大。
因此,LUT的輸入數量與FPGA的面積、延遲均有著密切關系。
FPGA的發展過程中,使用過3-LUT,4-LUT,5-LUT,6-LUT,之前業內的主流意見認為4-LUT最為高效。但后來關于LUT輸入數與面積和延遲的研究表明,6-LUT才是最優解,相關結果如下圖。因此,現在的FPGA都傾向于采用6-LUT。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Qe12UVmX-1602468990606)(D:\OneDrive\圖片\我的博客圖片\FPGA\FPGA原理與結構\FPGA原理與結構-查找表輸入數與面積和延遲的關系-202010121008.png#pic_center)]
2.3 自適應查找表
需要注意的是,6-LUT的結構在實現5輸入邏輯時,有一半的配置內存是閑置的。邏輯輸入數越少,資源浪費的問題越嚴重,比如6-LUT實現2輸入邏輯時就有93%的配置內存閑置。這是造成FPGA資源使用率低的主要原因之一。如果6-LUT結構是可拆分的,當實現2輸入邏輯時拆分為 2-LUT + 4-LUT;當實現3輸入邏輯時拆分為兩個3-LUT,這種可拆分結構的LUT顯然可以改善資源浪費的問題。這種可拆分的LUT被稱為自適應查找表(adaptive LUT)。Altera公司的Stratix II 和 Xilinx公司的 Virtex 5 都采用了自適應LUT。
三. 布線要素
布線要素指的是FPGA各個邏輯塊之間,以及邏輯塊與IO塊之間的連接線路。它包含布線通道、開關塊和連接塊。按照布線要素的拓撲結構可分為以下四類:
隨著FPGA的發展,因為效率、制程、工藝、性能等方面的原因,前三種連接線路結構已經不再使用了,目前,主流的FPGA的內部線路的連接方式是是島型,或者說目前的FPGA都是島型FPGA。
3.1 島型FPGA詳細布線架構
布線通道中連線的數量定義為通道寬度W。
連接邏輯塊和布線通道的連接塊(CB)有輸入和輸出兩種,對應的參數是輸入自由度Fc.in 和 輸出自由度 Fc.out。
輸入自由度 = 輸入連接點數量 / W,下圖的 Fc.in = 2 / 4
輸出自由度 = 輸出連接點數量 / W,下圖的 Fc.out = 1 / 4
縱向和橫向布線通道的交叉處是開關塊(SB),開關塊的自由度Fs,下圖所示的開關塊每個輸出都可以從來自三個方向的輸入中選擇,所以開關自由度是3。
布線的自由度由連接自由度和開關自由度共同決定,自由度越高意味著布線越靈活。但是,布線自由度和性能間存在著復雜的權衡,如果為提高自由度而增加開關數量,面積和延遲會惡化;如果減小開關數量,布線資源會減少,更可能因資源不足導致布線失敗。
3.2 布線線段的長度
FPGA的布線通道中,同時存在短距離、中距離、長距離等不同長度的布線線段。這里的布線線段長度指的是連線所跨越的邏輯塊的數量,如下圖,只跨越一個邏輯塊的長度為1(單倍線),同理,還有長度為2的雙倍線,長度為4的四倍線。此外,一些FPGA上還有橫跨整個器件的長距離連線,稱為長線。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ALwrUe8i-1602468990611)(C:\Users\xu\AppData\Roaming\Typora\typora-user-images\image-20200930153714204.png#pic_center)]
3.3 單向連線與雙向連線
傳輸信號的連接線分兩種:雙向連線和單向連線。
下圖(a)所示為雙向連線,基于雙向連線的結構可以減少布線通道中連線的數量,但總有一個方向的開關會閑置,并且會增加連線電容影響延遲。
下圖(b)所示為單向連線,基于單向連線的結構布線數量是雙向連線的兩倍,但開關不會閑置,且連線電容小。
現在的FPGA制程發展很快。芯片內部金屬層數增長,可以實現更多的連線,再從設計難度上考慮,FPGA正從使用雙向連線向單向連線轉變。
3.4 開關塊
開關塊由可編程開關構成,它的功能是控制布線路徑。按拓撲類型分,開關塊可分為三種:
下圖展示了通道寬度W=4時的三種開關塊的拓撲結構。交叉點處的白色圓點代表此處有可編程開關。所有的開關塊都有3條連接路徑可以選擇,如下圖左中不相交型 L0 可以與 T0、B0 或 R0 連接。所以開關塊的自由度是3。
3.4.1 不相交型開關塊
Xilinx公司的XC4000系列使用的是不相交型開關塊,故這類開關塊又被稱為Xilinx型開關塊。不相交型連接結構較為簡單,只有相同序號的線道可以互聯,即標號為i的線道自能連到其它標號也為i的線道上。也就是說,如果線網中的一條線道用線道i來實現,線網中的其他線道也必須用線道i來實現。如果線道i被其他線網占用,那么這個連接不能完成。因此,不相交型開關塊將整個布線通道分為W(通道寬度)個子集,各子集之間不互通,降低了可布線性。
下圖展示了通道寬度W=5時,不相交開關塊的連接圖,開關塊由6個開關共同決定,因此開關總數為6W。
3.4.2 通用型開關塊
通用開關塊兩個成對的線道可以互聯,如上圖線道0和3,線道1和2分別成對。顯然,只有通道寬度W為偶數時才能兩兩成對,當W為奇數時,最后的線道W-1無法成對,就采取和不相干型開關塊一樣的連接方法。從上圖中可以看到,線道0可以連到相鄰通道的線道0或者線道3,如果線道0被其它節點占用了,可以利用線道3完成必要的連接。顯然,對比,對比不相交型開關塊,通用開關塊的可布線性有所提高。
另外,通用開關塊自能對應單倍線,無法應用到其它長度的布線上。
3.4.3 威爾頓型開關塊
威爾頓型開關塊比前兩個拓撲的可布線性更高。評價不同類型開關塊性能的重要指標是實現相同功能時,使用的布線面積和布線延遲,布線面積越小越好,布線延遲越低越好。有研究指出,威爾頓型開關塊具有最小的布線面積,而三種拓撲的布線延遲相當。因此,威爾頓型開關塊的性能最優。另外,開關塊類型對FPGA的延時特性影響很小。
3.5 連接塊
連接塊也由可編程開關構成,其功能是連接布線通道和邏輯塊(或是專用硬核電路)。當通道寬度很大時,如果使用全交叉開關矩陣來實現,可編程開關的數量會很多,連接塊的面積會非常大。實際中的連接塊使用的是節省掉一些開關的稀疏開關矩陣。
下圖展示了一個6輸入邏輯塊,通道寬度W=28的連接塊的開關分布示例。示例中布線通道全部由單向連線組成,其中正向連線14根(F0 ~ F13),反向連線14根(B0 ~ B13)。這28根連線和邏輯塊的6個輸入(In0 ~ In5)通過連接塊相連。邏輯塊的每個輸入都有14根連線與之相連,因此輸入自由度 = 14 / 28 = 0.5。
四. IO塊
IO塊負責器件的IO引腳與邏輯塊之間的接口部分,其功能包括:輸入/輸出緩沖、輸出驅動、信號方向控制、高阻抗控制等,可以使輸入/輸出信號按指定的方式在邏輯塊和IO引腳間傳輸。IO塊里還有觸發器,可以鎖存輸入/輸出信號。
下圖展示的是Xilinx公司XC4000系列IO塊的內部結構,一般FPGA的IO塊結構也與之基本相同,其主要特征如下:
- 輸出部分有上拉和下拉電阻,可以讓輸出鎖定為0或者1。
- 輸出使能信號OE控制輸出緩沖器。
- 輸入/輸出各自都有觸發器,可用來調整信號延遲。
- 輸出緩沖器的轉換速率(slew rate)可調。
- 輸人緩沖器閾值符合TTL或CMOS標準。
- MUX6帶有延時電路,用來保證輸入的保持時間。
IO塊負責FPGA與外部的電氣適配,要使FPGA能對應各種輸出標準和輸出電壓。下圖所示的是Inter公司的Stratix V 的IO規格。可見IO口支持包括高速差分信號(LVDS)在內的多種IO規格和輸出電壓。
隨著IO規格的種類不斷增多,很難讓每個獨立IO都能應對所有標準,所以,現在的FPGA通常將多個IO劃為一組,稱為IO分組,然后以IO分組為單位進行功能劃分和管理。每個分組內共享電源電壓和參考信號,這樣,多個分組就能應對更多的IO規格,用戶可以根據需要使用哪個IO組的哪個IO引腳。
五. 專用硬邏輯電路
現在的FPGA內部基本都嵌入有多個不同功能的專用硬核電路。像DSP塊,ARM塊,存儲器塊,時鐘塊等。這里只簡單介紹FPGA的組成,所以這部分先略過不談,后續會更新一篇或多篇博客來詳細說明這些專用硬核電路。
六. 總結
FPGA由邏輯塊、IO塊和布線要素這三大部分搭建出基本結構,為追求更高性能,可能會嵌入幾種專用硬核電路。現在的FPGA基本都是島型架構,IO塊在FPGA四周外圍,邏輯塊在內部,布線通道水平豎直交叉排布,圍繞這各個像島嶼一樣的邏輯塊。
七. 參考
總結
以上是生活随笔為你收集整理的FPGA是如何搭建的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vivado关联第三方编辑器-Vscod
- 下一篇: Quartus下载 安装 与 和谐教程