【轉載自公眾號“達爾聞說”】以Intel(Altera)的EP4CE10F17C8芯片為例:
(1)邏輯陣列塊(Logic Array Block,LAB):
每個LAB由16個LE(Logic Element)組成,每個LE主要由左邊的4輸入查找表和右邊的可編程寄存器組成,還包括:多路數據選擇器、進位鏈等。查找表和多路選擇器完成組合邏輯功能,寄存器完成時序邏輯功能。這里的輸入查找表類似於一個容量為16 bits 的 ROM(2^4 = 16)(工藝上是珍貴的 SRAM 資源),4表示地址輸入位寬為4 bits,存儲的內容作為輸入對應的輸出結果的邏輯運算,並在 FPGA 配置時載入。
上圖紅色①標注處為查找表:目前主流 FPGA 都采用了基於 SRAM 工藝的查找表結構。查找表本質上就是一個 RAM。當用戶通過原理圖或 HDL 語言描述了一個邏輯電路以后,FPGA 開發軟件會自動計算邏輯電路的所有可能結果,列成一個真值表的形式,並把真值表(即輸入對應的輸出邏輯)事先寫入RAM,這樣每輸入一個信號進行邏輯運算就等於輸入一個地址進行查表,找出地址對應的內容,然后輸出即可。目前FPGA中多使用4輸入的查找表,所以每一個查找表可以看成一個有4位地址線的RAM。
上圖紅色②標注處為寄存器:可以配置成多種工作方式,比如觸發器或鎖存器,同步復位或異步復位、復位高有效或低有效。
上圖紅色③標注處為進位鏈:超前進位加法器,方便加法器的實現,加快復雜加法的運算。
上圖紅色④標注處為數據選擇器:數據選擇器一般在 FPGA 配置后固定下來。
(2)用戶可編程I/O(User I/Os,也被簡稱為IOE):
可編程I/O資源分布在整個芯片的四周,一個可編程I/O單元里面又包含三個最小單元(每個可編程I/O單元中的最小單元個數不固定,有的包含兩個,也有的包含四個),而最小單元內部結構又包括雙向I/O緩沖器、OE寄存器、對齊寄存器、同步寄存器、DDR輸出寄存器、三態門、延時模塊等。
為了便於管理和適應多種電器標准,FPGA 的 IOE 被划分為若干個組(Bank),每個 Bank 的接口標准由其接口電壓 VCCO 決定,一個 Bank 只能有一種 VCCO,但不同 Bank 的 VCCO 可以不同。只有相同電氣標准和物理特性的端口才能連接在一起,VCCO 電壓相同是接口標准的基本條件。
(3)FPGA互連線資源(Interconnect):
布線資源連通 FPGA 內部的所有單元,而連線的長度和工藝決定着信號在連線上的驅動能力和傳輸速度。FPGA 芯片內部有着豐富的布線資源,根據工藝、長度、寬度和分布位置的不同而划分為 4 類不同的類別:
第一類是全局布線資源,用於芯片內部全局時鍾和全局復位/置位的布線;
第二類是長線資源,用於完成芯片 Bank 間的高速信號和第二全局時鍾信號的布線;
第三類是短線資源,用於完成基本邏輯單元之間的邏輯互連和布線;
第四類是分布式的布線資源,用於專有時鍾、復位等控制信號線。
(4)嵌入式存儲單元(Memory Bits,也被稱為Block RAM或簡稱為BRAM):
該部分資源主要用於生成RAM、ROM、FIFO以及移位寄存器等常用的存儲模塊,在存儲較多數據或作跨時鍾域處理時常用,BRAM 由一定數量固定大小的存儲塊構成的,使用 BRAM 資源不占用額外的邏輯資源,不過使用的時候消耗的 BRAM 資源只能是其塊大小的整數倍,就算你只存了 1 bit 也要占用一個 BRAM。
相對於LUT構成的分布式RAM(Distribute RAM,簡稱為DRAM),這種專門的存儲單元速度更快,容量更大,從而避免LUT資源的浪費,一般是 BRAM 資源不夠用的情況下才使用分布式 RAM。
(5)嵌入式乘法單元(Embedded multiPlier 9-bit elements,也簡稱為DSP塊):
該單元主要用於各種復雜的數學運算,乘法、除法以及常用的功能函數如:有限沖激響應濾波器(FIR),無限沖擊響應濾波器(IIR),快速傅里葉變換(FFT),離散余弦變換(DCT)等,這些功能函數在運算時會消耗很多邏輯資源,而FPGA中的LUT和寄存器資源有限,這時候使用嵌入式乘法單元這部分資源就不會造成邏輯資源的浪費。
(6)鎖相環(Phase Lock Loop,PLL):
鎖相環路是一種反饋控制電路,簡稱鎖相環。鎖相環的特點是利用外部輸入的參考信號控制環路內部振盪信號的頻率和相位。因鎖相環可以實現輸出信號頻率對輸入信號頻率的自動跟蹤,所以鎖相環通常用於閉環跟蹤電路。鎖相環在工作的過程中,當輸出信號的頻率與輸入信號的頻率相等時,輸出電壓與輸入電壓保持固定的相位差值,即輸出電壓與輸入電壓的相位被鎖住,這就是鎖相環名稱的由來。
PLL的參考時鍾輸入都是由專用時鍾管腳上的晶振進來的,用於時鍾的倍頻、分頻,以及相位、占空比調制。PLL出來的時鍾都會連接到全局時鍾網絡上,如下圖所示就是通過全局時鍾網絡扇出到每個寄存器上的時鍾線,全局時鍾網絡保證時鍾的質量,減小時鍾偏斜(Skew)和抖動(Jitter)。
不同廠家不同系列的FPGA芯片其內部資源會稍有差異,但都會包含以上這些主要的內部資源。