1. 程式人生 > 其它 >FPGA內部構造

FPGA內部構造

FPGA由6部分組成,分別為可程式設計輸入/輸出單元(IOB)、基本可程式設計邏輯單元(SLENCE)、嵌入式塊RAM(block ram)、豐富的佈線資源、底層嵌入功能單元和內嵌專用硬核等。

整個FPGA的資源分佈圖如下:

上圖的分塊按照時鐘域分的塊,前面有文章介紹FPGA的時鐘中有詳細介紹分塊的規則。

------------------------------------------------------------------------------------------------------

1)IOB可程式設計輸入輸出單元:

大多數FPGA的I/O單元被設計為可程式設計模式,即通過軟體的靈活配置,可適應不同的電器標準與I/O物理特性;可以調整匹配阻抗特性,上下拉電阻;可以調整輸出驅動電流的大小等。

---------------------------------------------------------------------------------------------------------

如上圖所示,左邊SLICE為SLICEM右邊為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(印象中是SRAM),容量是64bit,6個輸入作為地址輸入,儲存的內容作為布林運算的結果。查詢表中的內容由開發環境生成並在FPGA配置時載入進去。(每個SLICE有4個在SLICE的做左邊)
Slice中的觸發器可以配置成多種工作方式,例如是FF或Latch,同步復位或非同步復位、復位高有效或低有效等。(每個SLICE有8個暫存器,在SLICE的最右端)
CLB內部包含多個選擇器。CLB的選擇器與一般的選擇器不同,它們沒有選擇端。通路的選擇在FPGA配置後固定下來。(上圖中每個SLICE有3個二選一選擇器)
CLB內部還包含了一個重要的資源——進位鏈,其作用是方便加法器的實現。(每個SLICE有一個四進位鏈CARRY4)
SLICEM的結構與SLICEL的結構類似,最大的區別是使用了一個新的單元代替SLICE中的查詢表。這個新的單元可以配置為LUT、RAM、ROM或移位暫存器(SRL16/SRL32),從而可以實現LUT的邏輯功能,也能做儲存單元(多個單元組合起來可以提供更大的容量)和移位暫存器(提供延遲等功能),其中SLICEM中LUT的輸入端都地址和寫地址為8位,高兩位可能是將4個LUT並聯一起作為一個大的RAM或ROM時用,同時SLICEL和SLICEM的LUT均可設為5位查詢表或6位查詢表。

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

-------------------------------------------------------------------------------------------------------------------

BLOCK RAM:

如上圖所示,block ram所處的那一列位置全是36BLOCK RAM ,其中每個block RAM中又分為上下兩塊,上半部分為18RAMB下半部分為FIFO18。在FIFO例化的時候可以將BLOCK RAM設定為FIFO時,不會使用額外的CLB資源,並且這部分RAM是真雙口RAM。

-------------------------------------------------------------------------------

上圖所示中的一列全是DSP48,為FPGA內部模組。


有4個輸入,分別是A、B、C、D。一個輸出P。從輸入得到輸出,我們用一個函式公式表達:P=(D±A)*B±C。請把這個公式背下來,之後的變形使用也靠它了。這裡面A是30bit,B是18bit,C是48bit,D是25bit。(D±A)出來是25bit,乘法就是25*18bit。P是48bit。

這個式子就是dsp48e1的功能簡介了。當然裡面有更多的東西需要去配置和實現,但主體框架就是這個。我們用它來實現乘法加法這些東西。

如果你直接使用dsp48的ip,通過簡單的公式選擇,動動滑鼠就可以配置好公式。也可以直接用原語呼叫。這裡就不介紹這個了。詳見:https://blog.csdn.net/kebu12345678/article/details/54973854

--------------------------------------------------------------------

--------------------------------------------------------------------

GTH固核:

GTH在該時鐘塊的一側,旁邊為GTH的4個PAD(輸入輸出的差分引腳),一列全是GTH固核。中間輸入多出的兩個PAD為該GTH塊的參考時鐘引腳。這就是4路GTH一個塊指的是在同一個時鐘塊中的四個GTH固核。關於GTH見前幾篇文章。

----------------------------

上圖所示兩個模組為該時鐘塊的時鐘管理模組(PLL和MMCM)。

------------------------------------------------------

剩下的一些模組暫時不多做介紹,基本都集中在時鐘塊中間一列。