1. 程式人生 > 其它 >FPGA內部資源

FPGA內部資源

FPGA由6部分組成,分別為可程式設計輸入/輸出單元、基本可程式設計邏輯單元、嵌入式塊RAM、豐富的佈線資源、底層嵌入功能單元和內嵌專用硬核等。  
    每個單元簡介如下:  
    1.可程式設計輸入/輸出單元(I/O單元)  
    目前大多數FPGA的I/O單元被設計為可程式設計模式,即通過軟體的靈活配置,可適應不同的電器標準與I/O物理特性;可以調整匹配阻抗特性,上下拉電阻;可以調整輸出驅動電流的大小等。  
    2.基本可程式設計邏輯單元  
    FPGA的基本可程式設計邏輯單元是由查詢表(LUT)和暫存器(Register)組成的,查詢表完成純組合邏輯功能。FPGA內部暫存器可配置為帶同步/非同步復位和置位、時鐘使能的觸發器,也可以配置成為鎖存器。FPGA一般依賴暫存器完成同步時序邏輯設計。一般來說,比較經典的基本可程式設計單元的配置是一個暫存器加一個查詢表,但不同廠商的暫存器和查詢表的內部結構有一定的差異,而且暫存器和查詢表的組合模式也不同。  
    學習底層配置單元的LUT和Register比率的一個重要意義在於器件選型和規模估算。由於FPGA內部除了基本可程式設計邏輯單元外,還有嵌入式的RAM、PLL或者是DLL,專用的Hard IP Core等,這些模組也能等效出一定規模的系統門,所以簡單科學的方法是用器件的Register或LUT的數量衡量。  
    3.嵌入式塊RAM  
    目前大多數FPGA都有內嵌的塊RAM。嵌入式塊RAM可以配置為單埠RAM、雙埠RAM、偽雙埠RAM、CAM、FIFO等儲存結構。  
    CAM,即為內容地址儲存器。寫入CAM的資料會和其內部儲存的每一個數據進行比較,並返回與埠資料相同的所有內部資料的地址。簡單的說,RAM是一種寫地址,讀資料的儲存單元;CAM與RAM恰恰相反。  
    除了塊RAM,Xilinx和Lattice的FPGA還可以靈活地將LUT配置成RAM、ROM、FIFO等儲存結構。  
    4.豐富的佈線資源  
    佈線資源連通FPGA內部所有單元,連線的長度和工藝決定著訊號在連線上的驅動能力和傳輸速度。佈線資源的劃分:  
    1)全域性性的專用佈線資源:以完成器件內部的全域性時鐘和全域性復位/置位的佈線;  
    2)長線資源:用以完成器件Bank間的一些高速訊號和一些第二全域性時鐘訊號的佈線(這裡不懂什麼是“第二全域性時鐘訊號”);  
    3)短線資源:用來完成基本邏輯單元間的邏輯互連與佈線;  
    4)其他:在邏輯單元內部還有著各種佈線資源和專用時鐘、復位等控制訊號線。  
    由於在設計過程中,往往由佈局佈線器自動根據輸入的邏輯網表的拓撲結構和約束條件選擇可用的佈線資源連通所用的底層單元模組,所以常常忽略佈線資源。其實佈線資源的優化與使用和實現結果有直接關係。  
    5.底層嵌入功能單元(書上舉了很多例子,不過這些東東要看具體哪個廠商的哪種型號的晶片上嵌有什麼資源決定)  
    6.內嵌專用硬核  

    與“底層嵌入單元”是有區別的,這裡指的硬核主要是那些通用性相對較弱,不是所有FPGA器件都包含硬核。

 

 

Xilinx:

1、總體結構

FPGA內部最主要的、最需要關注的部件是CLB(Configurable Logic Block,可配置邏輯塊)、Input/Output Block(輸入/輸出塊)和BlockRAM(塊RAM)。

CLB是FPGA具有可程式設計能力的主要承擔者。通過配置這些CLB可以讓FPGA實現各種不同的邏輯功能。Input/Output Block分佈在FPGA的周邊,也具有可程式設計特性,可以配置支援各種不同的介面標準,如LVTTL、LVCMOS、PCI和LVDS等。BlockRAM是成塊的RAM,可以在設計中用於儲存資料,是設計的重要資源。在大規模設計選擇FPGA時,RAM資源是否夠用是重要的考慮因素。

除了CLB、Input/Output Block和BlockRAM以外,FPGA還有很多其他的功能單元,例如佈線資源、DCM(Digital Clock Manager,數字時鐘管理器)和Multiplier(乘法器)等。佈線資源在FPGA內部佔用矽片面積很大,為FPGA部件提供靈活可配的連線;DCM模組提供各種時鐘資源,包括多種分頻、移相後的時鐘;Multiplier為18bit×18bit硬體乘法器,可以在一個時鐘週期內完成乘法運算。

在高階的FPGA中,還包含了嵌入式處理器、DSP模組、乙太網MAC、高速序列IO收發器等。

1.1 可配置邏輯塊CLB

Xilinx Virtex-5 FPGA的一個CLB包含兩個Slice。Slice內部包含4個LUT(查詢表)、4個觸發器、多路開關及進位鏈等資源。部分Slice還包括分散式RAM和32bit移位暫存器,這種Slice稱為SLICEM,其他Slice稱為SLICEL。

CLB內部的兩個Slice是相互獨立的,各自分別連線開關陣列(Switch Matrix),以便與通用佈線陣列(General routing Matrix)相連。

在Xilinx FPGA設計工具中,Slice的位置用“XmYn”表示,其中m為Slice所在橫座標,一個CLB的兩個Slice的橫座標分別是m和m+1;n為CLB的縱座標,一個CLB的兩個Slice有相同的n。Virtex-5左下角的Slice編號為X0Y0。

實際上,查詢表類似於一個ROM,容量是64bit,6個輸入作為地址輸入,儲存的內容作為布林運算的結果。查詢表中的內容由ISE生成並在FPGA配置時載入進去。

Slice中的觸發器可以配置成多種工作方式,例如是FF或Latch,同步復位或非同步復位、復位高有效或低有效等。

CLB內部包含多個選擇器。CLB的選擇器與一般的選擇器不同,它們沒有選擇端。通路的選擇在FPGA配置後固定下來。

CLB內部還包含了一個重要的資源——進位鏈,其作用是方便加法器的實現。

SLICEM的結構與SLICEL的結構類似,最大的區別是使用了一個新的單元代替SLICE中的查詢表。這個新的單元可以配置為LUT、RAM、ROM或移位暫存器(SRL16/SRL32),從而可以實現LUT的邏輯功能,也能做儲存單元(多個單元組合起來可以提供更大的容量)和移位暫存器(提供延遲等功能)

CLB內部查詢表、觸發器、多路器等基本單元的配置是由ISE自動完成,一般情況下不需要設計者干預。但是,如果認為有必要,設計者可以通過ISE中整合的FPGA底層編輯器——FPGA Editor直接編輯CLB內部觸發器和多路器的配置。

1.2 輸入輸出模組(Input/Output Block)

Input/Output Block 作用是為FPGA提供內部資源與外圍電路之間的介面,提供輸入緩衝、輸出驅動、介面電平轉換、阻抗匹配、延遲控制等功能。高階FPGA的輸入/輸出模組還提供了DDR輸入/輸出介面、高速序列介面(SERDES)(見注1)等功能。

Xilinx FPGA 的輸入/輸出模組採用SelectIO技術(SelectIO是Xilinx公司的註冊商標),提供多達960個使用者IO,支援20多個單端和差分電平I/O標準;還支援DDR、DDR-2、SDRAM、QDR-II和RLDRAM-II等Memory介面標準。SelectIO經驗DCI(Digitally Controlled Imepedence,數字控制阻抗),提供有源I/O終端以實現阻抗匹配。

Virtex-5的Input/Output Block以Tile為單位,IO Tile的概念與CLB有相似之處,同樣是一個較大的組成單元,內部包含多個相同單元。一個Tile包含兩個IOB、兩個ILOGIC/ISERDES單元和兩個OLOGIC/OSERDES單元。

IOB內部的主要組成部分是輸入/輸出Buffer和PAD(焊盤,在積體電路版圖上由金屬焊點和靜電防護二極體組成),提供輸入訊號緩衝、輸出訊號驅動等功能。

在Input/Output Block 中,每個ILOGIC/ISERDES 單元都可以配置為ILOGIC或ISERDES。配置為ILOGIC時,可以作為常見的輸入邏輯單元,或作為DDR介面的輸入端;配置為ISERDES時,可以完成1到6的串並轉換,兩個ISERDES單元相連可以完成1到10的串並轉換。

類似地,每個OLOGIC/OSERDES 單元可以配置為OLOGIC,實現常見的輸入邏輯單元,或作為DDR介面的輸出端。也可以配置為OSERDES,完成6到1的並串轉換,經過IOB和PAD驅動高速序列匯流排。兩個OSERDES單元相連可以完成10到1的並串轉換。

Input/Output Block中有IDELAY單元,可以提供精確的延遲,這個延遲不受工藝和溫度的影響。延遲共有64個抽頭,每個抽頭提供75ps的延遲,因此延遲的數值可以在0~4800ps之間進行選擇。

部分IO介面標準需要特定的Vcco和Vref電壓,這些電壓由FPGA外部電路提供,並連線到FPGA管腳,供多個I/O Tile共享。連線到同一組Vcco和Vref電壓的I/O Tile組成一個Bank(中文意思是“組”,但是通常直接用Bank表示更方便)。

1.3 塊RAM(BlockRAM)

Xilinx FPGA 內部成塊的RAM資源稱為BlockRAM;根據器件系列不同,BlockRAM大小有4096bit(Virtex、VirtexE和Spartan系列)、18Kbit(Virtex-II、Spartan-3和Virtex-4系列)和38Kbit等3種(Virtex-5)。BlockRAM是真正的雙口RAM結構,有兩套讀寫資料、地址和控制匯流排。兩套匯流排的操作是完全獨立的,共享同一組儲存單元。BlockRAM的雙口RAM結構對於邏輯設計至關重要,它有兩套獨立的介面,可以方便地連線兩個其他設計單元,允許一個埠寫入資料的同時,另一個埠讀出資料,提高了資料吞吐率(Throughput)。

BlockRAM的內容除了在電路執行中重寫以外,也可以通過配置檔案在FPGA上電配置時清零或初始化為特定值。寫BlockRAM時,資料輸出端可以輸出新寫入的資料、被覆蓋的資料或保持不變。FIFO是邏輯設計中常用的功能單元,Virtex-5的BlockRAM具有FIFO專用邏輯,因此實現FIFO時將不需要額外的CLB資源,也不需要設計者自行設計FIFO邏輯控制電路,對BlockRAM進行配置即可。

BlockRAM的呼叫,一般通過CORE Generator進行,在CORE Generator的圖形介面中指定所需要RAM的資料寬度和深度、設定控制訊號和初值,就可以生成設計者所需要的RAM(這些RAM通過呼叫BlockRAM實現),然後在專案RTL程式碼中優化,即可進行模擬、綜合、佈局佈線。