咱們知道FPGA內部有不少可供用戶任意配置的資源,其中包括:可編程邏輯、可編程I/O、互連線、IP核等資源,不少學過數字電路的人都知道與或非門能夠構成幾乎全部的數字電路,可是FPGA內部最基本的主要單元並非這些與或非門,而是由無數個查找表(Look Up Tabe,簡稱爲LUT)和寄存器構成。編程
雖然FPGA的內部結構對於初學者來講是雲裏霧裏,一頭霧水,可是瞭解FPGA的內部結構能讓咱們更好的理解FPGA設計過程當中咱們所編寫的代碼和硬件是怎樣的一個映射關係,從而更深入理解FPGA和單片機、ARM的不一樣。當咱們對FPGA內部結構瞭解透徹後,就能夠把FPGA的設計瞭如指掌,纔能有助於進一步優化咱們的設計,優化好的設計能使咱們設計的整個系統跑的更快、更加節省資源、功耗更低,穩定性更好。網絡
咱們選用的是CycloneIV系列的EP4CE10F17C8,不少入門開發板通常都配置的這款芯片,其主要資源以下圖所示。分佈式
首先咱們來認識一下FPGA內部的一些資源。點擊下圖所示圖標打開Chip Planner來查看這款FPGA芯片的版圖模型。函數
打開後的版圖模型以下圖所示,第一張圖是未進行佈局不線的圖,由於資源未被使用因此都是淺色。第二張圖是已經佈局佈線後的圖,也就是已經將使用的資源映射到了版圖模型上(只有全編譯後才能看到映射效果),其中深色表示該資源已經被使用,而顏色越深的地方表示資源利用率越高。黑色區域爲一些固定功能的資源或沒有資源,用戶不可對其進行任意配置。oop
①邏輯陣列塊(Logic Array Block,也簡稱爲LAB):每一個LAB由16個LE(Logic Element)組成,下圖是兩個已經映射資源後的LAB,資源利用率不一樣的LAB其顏色深淺也有所差別(左邊使用的資源少,顏色就淺;右邊使用的資源多,顏色就深)。佈局
放大後的LE以下圖所示,每一個LE由左邊一個藍色LUT和右邊一個紅色寄存器組成。整個芯片中共有10320個LE。 優化
雙擊其中一個LE能夠觀察到其大體的內部結構(內部結構只有被使用纔可以雙擊打開查看),咱們能夠看到主要的兩個部分,一是左邊的4輸入LUT,另外一個是可編程寄存器,還包括一些選擇器、與門等輔助邏輯電路。(藍色高亮的部分是已經使用的資源,未高亮灰色的部分是未被使用的資源)。spa
②用戶可編程I/O(User I/Os,也被稱爲IOE):可編程I/O資源分佈在整個芯片的四周。該芯片共有256個管腳,除去一些固定功能的管腳,可供用戶任意配置的管腳資源只有180個,下圖是其中一個可編程I/O單元,裏面又包含三個最小單元(每一個可編程I/O單元中的最小單元個數不固定,有的包含兩個,也有的包含四個)。設計
下圖是可編程I/O最小單元內部結構圖,包括雙向I/O緩衝器、OE寄存器、對齊寄存器、同步寄存器、DDR輸出寄存器、三態門、延時模塊等組成。3d
③嵌入式存儲單元(Memory Bits,也被稱爲Block RAM或簡稱爲BRAM):該部分資源主要用於生成RAM、ROM、FIFO、移位寄存器,在存儲較多數據或做跨時鐘域處理時經常使用到。該芯片共有423936bit存儲單元,並以每9Kbit容量爲一個塊,共有46個,下圖所示爲一個M9K的RAM塊。相對於LUT構成的分佈式RAM(Distribute RAM,簡稱爲DRAM),這種專門的存儲單元容量更大,從而避免LUT資源的浪費。
下圖是一個M9K內部結構圖。由輸入輸出寄存器和一個RAM塊構成。
④嵌入式乘法單元(Embedded multiPlier 9-bit elements,也稱爲DSP塊):該單元主要用於各類複雜的數學運算,乘法、除法以及經常使用的功能函數如:有限衝激響應濾波器(FIR),無限衝擊響應濾波器(IIR),快速傅里葉變換(FFT),離散餘弦變換(DCT)等時會消耗不少邏輯資源,而FPGA中的LUT和寄存器資源有限,這時候使用嵌入式乘法單元這部分資源就不會形成邏輯資源的浪費。該芯片共有46個DSP塊,成列式分佈在芯片的中間位置,下圖爲一對DSP塊資源。
下圖是嵌入式乘法器單元DSP塊的內部結構圖。包含輸入輸出寄存器和一個乘數塊。
⑤鎖相環(Phase Lock Loop,也簡稱爲PLL):該芯片一共有兩個鎖相環,一個在右上角處附近,一個在左下角附近。PLL的參考時鐘輸入都是由專用時鐘管腳上的晶振進來的,用於時鐘的倍頻、分頻,以及相位、佔空比調製。PLL出來的時鐘都會鏈接到全局時鐘網絡上,以保證時鐘的質量,減少時鐘偏斜(Skew)和抖動(Jitter)。
下圖是鎖相環內部的結構圖,每一個鎖相環能夠分出五個同源時鐘信號。