FPGA 內部詳細架構你明白了嗎?
FPGA 晶片整體架構如下所示,大體按照時鐘域劃分的,即根據不同的工藝、器件速度和對應的時鐘進行劃分:
FPGA 內部詳細架構又細分為如下六大模組:
1、可程式設計輸入輸出單元(IOB)(Input Output Block)
為了便於管理和適應多種電器標準,FPGA 的 IOB 被劃分為若干個組(Bank),每個 Bank 的介面標準由其介面電壓 VCCO 決定,一個 Bank 只能有一種 VCCO,但不同 Bank 的 VCCO 可以不同。只有相同電氣標準和物理特性的端口才能連線在一起,VCCO 電壓相同是介面標準的基本條件。
2、可配置邏輯塊(CLB)(Configurable Logic Block)
FPGA 的基本可程式設計邏輯單元是 CLB,而一個 CLB 是由查詢表、資料選擇器、進位鏈、暫存器組成的。查詢表和多路選擇器完成組合邏輯功能,暫存器(可配置成觸發器或鎖存器),完成時序邏輯功能。在賽靈思公司公司的 FPGA 器件中,一個 CLB 由多個(一般為 4 個或 2 個)相同的 Slice 和附加邏輯構成。
Slice 又分為 SLICEL(Logic)和 SLICEM(Memory)。SLICEL 和 SLICEM 內部都各自包含了 4 個 6 輸入查詢表(LUT6)、3 個數據選擇器(Mux)、1 個進位鏈(Carry Chain)和 8 個觸發器(Flip-Flop):
查詢表:6 輸入查詢表類似於一個容量為 64 bits 的 ROM(26 = 64)(工藝上是珍貴的 SRAM 資源),6 表示地址輸入位寬為 6 bits,儲存的內容作為輸入對應的輸出結果的邏輯運算,並在 FPGA 配置時載入。
對於查詢表:目前主流 FPGA 都採用了基於 SRAM 工藝的查詢表(LUT)(Look Up Table)結構。LUT 本質上就是一個 RAM。當用戶通過原理圖或 HDL 語言描述了一個邏輯電路以後,FPGA 開發軟體會自動計算邏輯電路的所有可能結果,列成一個真值表的形式,並把真值表(即輸入對應的輸出邏輯)事先寫入 RAM,這樣,每輸入一個訊號進行邏輯運算就等於輸入一個地址進行查表,找出地址對應的內容,然後輸出即可。目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的RAM。
資料選擇器:資料選擇器一般在 FPGA 配置後固定下來。
進位鏈:超前進位加法器,方便加法器的實現,加快複雜加法的運算。
暫存器:可以配置成多種工作方式,比如 FF 或 Latch,同步復位或非同步復位、復位高有效或低有效等等。
SLICEM 的結構與 SLICEL 的結構類似,最大的區別是使用了一個新的單元代替 SLICE 中的查詢表。這個新的單元可以配置為 LUT、RAM、ROM 或移位暫存器(SRL16 或 SRL32),從而可以實現 LUT 的邏輯功能,也能做儲存單元(多個單元組合起來可以提供更大的容量)和移位暫存器(提供延遲等功能)。
其中 SLICEM 中 LUT 的輸入端都地址和寫地址為 8 位,高兩位可能是將 4 個 LUT 並聯一起作為一個大的 RAM 或 ROM 時用,同時 SLICEL 和 SLICEM 的 LUT 均可設為 5 位或 6 位查詢表。
3、嵌入式塊 RAM(BRAM)(Block RAM)
塊 RAM 可被配置為 ROM、RAM 以及 FIFO 等常用的儲存模組。區別於分散式 RAM(Distributed RAM)(主要由 LUT 組成的,不佔用 BRAM 的資源)。分散式 RAM 也可以被配置為 ROM、RAM 以及 FIFO 等常用的儲存模組,但是效能不如 BRAM,畢竟 BRAM 才是專用的,一般是 BRAM 資源不夠用的情況下才使用分散式 RAM。反之,BRAM 由一定數量固定大小的儲存塊構成的,使用 BRAM 資源不佔用額外的邏輯資源,並且速度快,不過使用的時候消耗的 BRAM 資源只能是其塊大小的整數倍,就算你只存了 1 bit 也要佔用一個 BRAM。
一個 BRAM 的大小為 36K Bits,並且分成兩個小的 BRAM 各自為 18K Bits,排列成又分為上下兩塊,上半部分為 RAMB18 下半部分為 RAMBFIFO36。在 FIFO 例化的時候可以將 BRAM 設定為 FIFO 時,不會使用額外的 CLB 資源,並且這部分 RAM 是真雙口 RAM。
FPGA 所採用的邏輯單元陣列 LCA(Logic Cell Array)內部所包括的可配置邏輯模組 CLB(Configurable Logic Block)、 輸出輸入模組 IOB(Input Output Block)和內部互連線(Interconnect)三個部分。前面兩種已經介紹完畢,接下來介紹第三種:
4、互連線資源(Interconnect)
佈線資源連通 FPGA 內部的所有單元,而連線的長度和工藝決定著訊號在連線上的驅動能力和傳輸速度。FPGA 晶片內部有著豐富的佈線資源,根據工藝、長度、寬度和分佈位置的不同而劃分為 4 類不同的類別:第一類是全域性佈線資源,用於晶片內部全域性時鐘和全域性復位/置位的佈線;第二類是長線資源,用於完成晶片 Bank 間的高速訊號和第二全域性時鐘訊號的佈線;第三類是短線資源,用於完成基本邏輯單元之間的邏輯互連和佈線;第四類是分散式的佈線資源,用於專有時鐘、復位等控制訊號線。
5、底層內嵌功能單元
內嵌功能模組主要指 DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP(Digital System Processing)(數字訊號處理)、DCM(Digital Clock Manager)(提供數字時鐘管理和相位環路鎖定)、和 CPU(Central Processing Unit)等等軟處理核(比如 MicroBlaze 的軟核)。現在越來越豐富的內嵌功能單元,使得單片 FPGA 成為了系統級的設計工具,使其具備了軟硬體聯合設計的能力,逐步向 SoC 平臺過渡。
關於 DCM:DCM 是 FPGA 內部處理時鐘的重要器件,他的作用主要有三個:消除時鐘偏斜(Clock De-Skew)、頻率合成(Frequency Synthesis)和相位調整(Phase Shifting)。
DCM 的核心器件是數字鎖相環(DLL,Delay Locked Loop)。它是由一串固定時延的延時器組成,每一個延時器的時延為 30 皮秒,也就是說,DCM 所進行的倍頻、分頻、調相的精度為 30 皮秒。
對於時鐘,我們最好不要將兩個時鐘通過一個與門或者或門(邏輯操作),這樣的話就很可能會產生毛刺,影響系統穩定性,如果要對時鐘進行操作,例如切換時鐘等,請使用 FPGA 內部的專用器件“BUFGMUX”。
6、內嵌專用硬核
內嵌專用硬核是相對底層嵌入的軟核而言的,指 FPGA 處理能力強大的硬核(比如 ARM Cortex-A9 的硬核),等效於 ASIC 電路。為了提高 FPGA 效能,晶片生產商在晶片內部集成了一些專用的硬核。例如為了提高 FPGA 的乘法速度,主流的 FPGA 中都集成了專用乘法器,而為了適用通訊匯流排與介面標準,很多高階的 FPGA 內部都集成了串並收發器(Serdes),可以達到數十 Gbps 的收發速度(比如 FMC