XILINX FPGA 7系之 CLB/LUT/FF/Multiplexers

目錄

1、CLB

2、Slice

2.1、SLICEM

2.2、SLICEL

2.3、SLICEL Vs SLICEM

3、LUT

4、FF

5、Multiplexers

5.1、MUX(4:1 )

5.2、MUX(8:1 )

5.3、MUX(16:1 )

6、Summary


 

Xilinx FPGA 的內部結構中最基本的構成便是 CLB 了,在更好的利用 Xilinx FPGA 之前,還是有必要更多的瞭解它的具體組成;

這裏以 Xilinx 7 系列 FPGA 爲 Base 來介紹它的基本組成單元 CLB, Xilinx 官方文檔關於 CLB 的介紹位於:

ug474_7Series_CLB.pdf

1、CLB

CLB 的全稱是 Configurable Logic Block,即可編程邏輯塊,邏輯電路就是靠對 CLB 進行配置來實現各種各樣的電路。一個 CLB 由如下部分組成:

在這裏插入圖片描述

1 個 CLB 包含了稱之爲 2 個 Slice 的單元,每個 Slice 之間並沒有直接聯繫,而是都連接到一個交換矩陣,以訪問通用路由矩陣;既然 CLB 由 2 個 Slice組成,那麼接下來看看 Slice 的組成;

 

2、Slice

Xilinx 7 系列的 Slice 分爲兩類:SLICEL SLICEMFPGA中三分之二的 slice 是 SLICEL 而剩餘的是 SLICEM

SLICEL SLICEM 的區別主要是組成的資源不一樣,所以他們最終能夠構成的東西也有所區別;

2.1、SLICEM

一個 SLICEM 類型的 slice 的結構

在這裏插入圖片描述

SLICEM 的組成,從最左邊開始看,最左邊:

第一列:代表的是 LUT(Look Up Table),它是 CLB 的基本組成單元,可以看到,一個 SLICEM 擁有 4 個 6 輸入的 LUT(A6:A1),O5、O6 是輸出;

第二列:從下往上看,由 CIN 一直到 COUT,這部分是進位邏輯;

第三列:輸入的 D,輸出是 Q,是 D 觸發器;

第四列:MUX;

第五列:也是 D 觸發器(上面寫了 FF/LAT,說明也可以配置爲鎖存器);

 

2.2、SLICEL

一個 SLICEL 類型的 slice 的結構

在這裏插入圖片描述

可以看到 SLICEL 類型的組成和 SLICEM 的組成基本差不多,仔細的看第一列呢?SLICEL 的 LUT 上明顯比 SLICEM 的少很多東西,SLICEL 類型只有 A6:A1 和 O5、O6 輸出,而 SLICEM 上內容更多;它代表 SLICEM 的 LUT 還可以作爲 Distribute RAM(分佈式內存)和移位寄存器邏輯;

 

2.3、SLICEL Vs SLICEM

每個 SLICEL 和 SLICEM 都擁有 4 個 6 輸入 LUT,進位邏輯,以及 MUX 多路複用,和 8 個 FF,slice 均使用上面的元素來提供邏輯、算術;

SLICEM 的 LUT 能夠配置爲 Distribute RAM(分佈式內存)和 Shift Register (移位寄存器邏輯) ;

Notes:在組成 CLB 的時候,有兩種可能,一種是由兩個 SLICEL 構成,另外一種是有一個 SLICEM 和 SLICEL;

所以整體來說,CLB 的構成如下所示:

 

3、LUT

LUT 查找表(Look Up Table)是 Slice 的基本組成部分,Xilinx 7 系列的 FPGA 內部每個 CLB 包含兩個 Slice,每個 Slice 都包含 4 個 LUT,這些 LUT 都是 6 輸入的(A1:A6),LUT 的本質是 RAM,6 輸入意味着最大尋址是 2^6 也就是 64bit ,您可以將 LUT 想象爲有 A1~A6 一共 6 個地址,可尋址 64bit 內容,燒寫的時候,就是把這 64bit 內容準備好,當 A1:A6 輸入不一樣,那麼尋址的 bit 內容也不一樣,那麼輸出的 O6 也就不一樣;

7系列FPGA中的函數發生器實現爲六輸入查找表(LUT)。slice的4個函數發生器(A,B,C和D)中的每一個都有六個獨立輸入(A輸入A1至A6)和兩個獨立輸出(O5和O6)。

1)函數發生器可以實現以下函數功能:

  • 任意定義的六輸入布爾函數
  • 兩個任意定義的五輸入布爾函數,只要這兩個函數共享公共輸入
  • 兩個任意定義的布爾函數(3個和2個或更少輸入)

2)6 輸入功能使用:

  • A1-A6 輸入
  • O6 輸出

3)兩個 5 輸入或更少的函數使用:

  • A1–A5 輸入
  • A6 驅動高
  • O5 和 O6 輸出

這裏需要解釋一下,配置爲 1 個 6 輸入的 LUT 和配置成 2 個 5 輸入的 LUT 的具體情況:

一個 LUT 如下:

輸入端爲 A1~A6,可以尋址 2^6 = 64bits 的位,也就是 6 輸入的 LUT 最終尋址是一個 bit,最終輸出到 O6 上:

當配置成爲 2 個 5輸入的 LUT 的時候呢:

可以看到輸入爲 A1~A5,可以尋址就是 2^5=32bits,通過在 64bits 的 LUT 中燒錄不同的 bit,可以做到同樣的 A1~A5 的尋址,對應兩個 32bits 空間存放的內容不一樣,導致輸出的 O6 和 O5 分別代表了兩個 5 輸入的 LUT 的輸出;

 

4、FF

每個 slice 有 8 個 FF( flip-flop 即,觸發器)。

從 SLICEM 和 SLICEL 的圖解可以看到,中間那一列(4個)FF 和最後一列的 FF 對比起來,最後一列 FF 多了 “FF/LAT”,有  “FF/LAT” 的 FF 代表可以配置爲邊沿觸發D型觸發器或電平敏感鎖存器,也就是說,一個 Slice 中的 8 個 FF,其中有 4 個只能作爲 D 觸發器,另外 4 個可以配置成爲 D 觸發器,或者鎖存器

D輸入可以通過 AFFMUX,BFFMUX,CFFMUX 或 DFFMUX 的 LUT 輸出直接驅動,也可以通過AX,BX,CX或DX輸入繞過函數發生器的BYPASS slice輸入直接驅動。 當配置爲鎖存器時,當CLK爲低電平時,鎖存器是透明的。對應如下右圖

還有四個額外的存儲單元,它們只能配置爲邊沿觸發的D型觸發器。 D輸入可以由LUT的O5輸出驅動,也可以由AX,BX,CX或DX輸入的BYPASS slice輸入驅動。 當原始的四個存儲單元配置爲閂鎖時,這四個附加的存儲單元將無法使用。對應如下左圖

slice 中的兩種配置版本: 4個寄存器和4個寄存器/鎖存器

在這裏插入圖片描述

 

5、Multiplexers

7系列FPGA中的函數發生器和相關的多路複用器可以實現以下功能:

  • 使用一個LUT的 4:1 多路複用器,每個 Slice 四個 4:1 MUX
  • 使用兩個LUT的 8:1 多路複用器,每個 Slice 兩個 8:1 MUX
  • 使用四個LUT的  16:1 多路複用器,每個 Slice 一個 16:1 MUX

5.1、MUX(4:1 )

每個LUT可以配置爲4:1 MUX。 4:1 MUX可以通過觸發器在同一片中實現。 一個slice中最多可以實現四個4:1 MUX,如下所示:

在這裏插入圖片描述

注意,這裏其實是每一個 LUT 實現成爲 MUX,LUT 的輸入還是 A1-A6 一共 6 個,使用其中的 4 個 bit 表示輸入的 4 MUX 的 Input 數據,使用另外 2 個 bit 作爲選通信號!所以一個 LUT 可以做成 4:1 MUX,那麼一個 SLICE 就可以做成 4 個 4:1 MUX 複用器;

5.2、MUX(8:1 )

每個 Slice 具有一個 F7AMUX 和一個 F7BMUX。 這兩個MUX組合了兩個LUT的輸出,一個slice中最多可以實現 2 個8:1 MUX,如圖所示:

在這裏插入圖片描述

5.3、MUX(16:1 )

當然也可以級聯 4 個 LUT + F7AMUX + F7BMUX 在 F7AMUX + F7BMUX之後在接連 F8MUX 形成 MUX 16:1 這裏不在多說;

 

6、Summary

由上所述,可以知道,Xilinx 7 系列(A,K,V,以及 ZYNQ)的 CLB 是衡量 FPGA 的資源的一種標杆,並且:

1 個 CLB 含 2 個 Slice

Slice 分爲 SLICEL 和 SLICEM(三分之二的slice是SLICEL而剩餘的是SLICEM)

1 個 Slice 包含 4 個 6 輸入的 LUT、8個 FF(4個D觸發器,4個可配D觸發器和鎖存器)

只有 SLICEM 是配置爲 Distribute 64bit-RAM 或者 32bit 的 Shift Register 或者 2 個 16bit Shift Register。

1 個 CLB 可能是由 2 個 SLICEL 組成,或者有 1 個 SLICEL + 1 個 SLICEM

LUT  可以級聯成爲 4 個 1:4的 MUX,或者 2 個 1:8 的 MUX,或者1個1:16的 MUX

官方文檔對一個 CLB 的資源描述爲:

在這裏插入圖片描述

關於 Carry Chains、distributed RAM 和 Shift Registers 的詳細內容,在以後的章節在接着分析,這裏需要記住一點,這個表格中的 2 個 Slices,包含 8 個 LUT,每個 LUT 是 6 輸入的,也就是 64bit,那麼 8 個 LUT 不就是 8 x 64bit = 512 bit 啊,爲啥只能夠代表 256 的 distributed RAM?因爲只有 SLICEM 才能夠被配置成爲 distributed RAM,一個 CLB 最多一個 SLICEM,所以need,也就是 256 bits了;

在這裏插入圖片描述

相關參考:

https://blog.csdn.net/huxiaokai2005/article/details/89460269

https://blog.csdn.net/huxiaokai2005/article/details/89460324

https://blog.csdn.net/vivid117/article/details/102841135

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章