1. 程式人生 > >Xilinx-7系列FPGA架構—— CLB

Xilinx-7系列FPGA架構—— CLB

        xilinx7系列FPGA主要包括:Spartan®-7/Artix®-7/Kintex®-7/Virtex®-7。其效能/密度/價格也隨著系列的不同而提升。其中以Virtex-7有著極高的系統性能和資源。本篇主要介紹其組成的基本單元configurable logic blocks(CLBs)。通常來說,我們不需要關心或參與邏輯綜合過程CLBs資源的分配。但是如果遇到了效能/時序挑戰的時候,就需要重新審視設計,掌握每一個可利用的資源。比如distributed RAMs和Block RAMs互換(在可替換的前提下)、DSPs與LUT設計等。同時也有助於掌握更深層次的設計,設計出更加合理的HDL程式碼,和XDC約束檔案。

        本文主要參考:xilinx官方文件UG474《7 Series FPGAs Configurable Logic Block》和White Paper《Xilinx 7 Series FPGAs:The Logical Advantage》。


        CLBs是實現時序邏輯組合邏輯電路的主要邏輯單元。一個CLB由兩個slice組成,而每個slice由4個6輸入LUT、8個FF、複用器和算術進位單元組成。同時SLICE有區分為二:SLICEL和SLICEM(沒有看到縮寫L/M全程,個人認為是Logic和Multiple縮寫,從下面定義可以看出)。大約2/3的是SLICEL(只能用於logic),剩下的是SLICEM(還可以用於distributed RAMs/SRLs32/SRLs16)。每個CLBs是通過Switch Matrix routing,並不是直接互聯。注意到一句話:Four flip-flops per slice (one per LUT) can optionally be configured as 

latches. In that case, the remaining four flip-flops in that slice must remain unused.每個slice中的4個FF可以做鎖存器,但是剩下的4個FF不能夠再使用,也就是說有50%的資源浪費。這也就是為什麼教科書上說,儘量避免latchs使用,除了時序問題之外,還有資源浪費。從晶片資源手冊也可以看出,以kintex-7為例:


Slices = SliceL + SliceM;SliceL / SliceM = 2;Slices / LUTs = 4;FF / Slices = 8。

兩個slice分別位於CLB的左列底部和右列頂部。這兩個slice不是直接互聯,而是以列為單位,通過一個獨立的進位鏈(Cout&&Cin)

接。如下圖所示:

通過以上的分析,每個CLBs具體的資源配置如下:


注意:如前面所述,只有SLICEM可以配置成distributed RAMs和SRLs。

通過xilinx vivado提供給implementment,可以看到實際情況(vivado 2017.4 kintex 7為例):


每個CLB包括兩個slice(兩個SLICEL或者一個SLICEM一個SLICEM·)---8個6輸入LUTs(邏輯產生單元),16個FF,以及3個Multiplexer(F7AMUX/F7BMUX/F8MUX)和carry chain組成。

LUT:由6個獨立的輸入A1-A6和兩個獨立的輸出組成O5、O6。

能夠實現:

      1. 任意的6輸入布林邏輯:A1-A6作為輸入,O6作為輸出。

      2. 兩個5輸入或者更少的:A1-A5作為輸入,A6高,O5和O6作為輸出。

經過LUTs的訊號可以:不做操作(直接出來slice)/從O6出來進入XOR專用門/從O5出來進入進位鏈/接入D觸發器輸入/從O6進入F7AMUX/F7BMUX。F7AMUX和F7BMUX作用是組合4個LUTs,在一個slice中產生任意的7或者8輸入。對於大於8輸入的邏輯,則需要多個slice。值得注意的是對於大於8輸入的多個slice,沒有直接連線在一起。

下面深入理解一下上面文件的含義:

  1. [email protected](posedge sys_clk)
  2.    begin
  3.       case(key_in)
  4.       6'b000_001: key_edge <= 1'b1;
  5.       6'b000_010: key_edge <= 1'b0;
  6.       6'b000_100: key_edge <= 1'b1;
  7.       6'b001_000: key_edge <= 1'b0;
  8.       6'b010_000: key_edge <= 1'b1;
  9.       6'b100_000: key_edge <= 1'b0;
  10.       default:key_edge <= 1'b1;
  11.       endcase
  12.    end

在資源報告中,只佔用了一個LUT和1一個FF。可以看出,7series的fpga的確是6輸入的LUT(A1-A6),輸出O6,直接接在FF上。

         7系列FPGA是Xilinx新推出的基於28nm工藝的FPGA,其中包含三個系列:Artix、Kintex和Virtex。因專案要使用kintex7為平臺做設計,需要對其內部結構做了研究,首先從CLB(Configurable Logic Block)開始:

         CLB構成了Kintex7主要邏輯單元,其中包含2個Slice,並且Slice分為2種:SLICEL和SLICEM,SLICEL為普通的Slice邏輯單元,而SLICEM在基本邏輯功能的基礎上可以擴充套件為分散式RAM或者移位暫存器。在所有Slice資源中,有2/3是SLICEL,因此一個CLB可以有2個SLICEL或者1個SLICEL、1個SLICEM組成。

         如圖1所示為SLICEM的內部結構,其中包含4個6輸入LUT(紅色圈)、進位鏈(黃色圈)、多路複用器(藍色圈)和8個暫存器(綠色圈)。

snap1.jpg

圖1

         6-input LUT:此處LUT沿用了Xilinx 6系列FPGA的6輸入LUT結構,6-input LUT內部是由2個5-input LUT組成,有兩個輸出分別對應O­6和O5。在設計中,如果綜合後有2個5-input LUT需要是使用,如果在ISE將綜合選項-lc(LUT Combining)設定成Area,綜合器XST會將這2個5-input LUT合併在一個6-input LUT中實現,但是此選項相當於以速度換面積,隨之邏輯延時將增大。

暫存器:此處Xilinx區別於Altera器件,其1個LUT對應了2個register,而Altera器件中是一一對應的。從圖中可以發現,第2列的register比第1列多了FF/LAT這個選項,這表示第1列的register只能作為Flip-Flop使用,而第2列的register既能作為Flip-Flop也能作為Latch使用。另外還有INIT0、INIT1、SRLO和SRHI 四個選項,其中INIT0和INIT1配對,表示通過GSR全域性復位/置位,此復位/置位網路為非同步的;而SRLO和SRHI配對,表示高電平有效訊號SR驅動的復位/置位,此訊號可以配置成非同步或者同步,但這8個register共用一個SR訊號,因此其方式必須相同,根據此特性,建議寫程式碼時,復位/置位方式選擇同步高電平有效。

         下面對SLICEM做一下重點說明,其可擴充套件成移位暫存器,如圖2所示,Slice中的每個LUT可配置成32-bit的Shift Register,因此1個Slice最多可擴充套件成128-bit的Shift Register。其操作模式為1個時鐘週期移1為,通過D輸入端輸入,並且最後1位通過MC31輸出,並且可以以A[6:2]作為5位地址選擇O6輸出32位中的某一位進行輸出。

snap2.jpg

圖2

         在寫程式碼時,可以按規範寫出移位暫存器的形式,如以下程式碼所示:

[email protected](posedge clk)

         if(clk_en)

                   srl<={srl[31:0],din};

assign dout0=srl[20];

以上程式碼綜合出的結構如圖3所示,綜合器只用了1個LUT和1個FF就實現了21-bit的移位暫存器,只需1個Slice。

snap3.jpg

圖3

         如按一下程式碼進行綜合後得到結構如圖4所示,綜合器使用了21個FF實現了這個21-bit移位暫存器,則需要21個Slice。

[email protected](posedge clk)

         if(rst)

                   srl<=32’d0;

         else

                  if(clk_en)

                            srl<={srl[31:0],din};

assign dout0=srl[20];

snap4.jpg

圖4

         為什麼綜合器會產生不同的結構?分析一下程式碼的區別,第二段程式碼相比於第二段程式碼多了一個同步復位功能,而根據SLICEM的結構,其中的LUT是沒有同步復位控制輸入端的,因此綜合器無法將程式碼綜合成想要的結構,因此寫程式碼時需要根據相應的結構來編寫。

         觀察圖3可以發現,在SRLC32E輸出端Q後又接入了一個FF作為同步輸出,查手冊後發現,此移位暫存器可以配置成兩種輸出模式:靜態地址方式和動態地址方式,這兩種模式的不同之處在於靜態地址方式是同步輸出,圖3中結構是靜態地址方式;而動態地址方式是非同步輸出,即沒有後接FF直接從SRLC32E的Q端輸出,以下程式碼表示動態地址方式,其中addr是一個變數。

[email protected](posedge clk)

         if(rst)

                   srl<=32’d0;

         else

                  if(clk_en)

                            srl<={srl[31:0],din};

assign dout0=srl[addr];

         對上面的程式碼進行綜合可以得到如圖5所示結構,確定輸出為非同步輸出,因此在設計中要注意此處的變化。

snap5.jpg

圖5

轉自:https://blog.csdn.net/nearcsy/article/details/80418962

          https://blog.csdn.net/xuexiaokkk/article/details/48340719

相關推薦

Xilinx-7系列FPGA架構—— CLB

        xilinx7系列FPGA主要包括:Spartan®-7/Artix®-7/Kintex®-7/Virtex®-7。其效能/密度/價格也隨著系列的不同而提升。其中以Virtex-7有著極高的系統性能和資源。本篇主要介紹其組成的基本單元configurable

Xilinx-7系列FPGA架構學習 --- CLB/LUT/...

Achievement provides the only real pleasure in life.有所成就是人生唯一的真正的樂趣。通過xilinx vivado提供給implementment,可以看到實際情況(vivado 2017.4 kintex 7為例):每個C

Xilinx-7系列FPGA架構學習 --- CLB

Achievement provides the only real pleasure in life.有所成就是人生唯一的真正的樂趣。xilinx7系列FPGA主要包括:Spartan®-7/Arti

Xilinx-7系列FPGA架構學習 --- 深入理解LUT

Achievement provides the only real pleasure in life.有所成就是人生唯一的真正的樂趣。LUT的一個重要功能是邏輯函式發生器。本質上,邏輯函式發生器儲存的是真值表(Truth Table)的內容,而真值表則是通過布林表示式獲得。

xilinx 7系列FPGA之電源簡介

前幾篇咱們說了FPGA內部邏輯,本篇咱們再聊一聊7系列FPGA的供電部分。   首先咱們說spartan7系列,通常咱們需要使用以下電源軌:   1,    VCCINT FPGA內部核心電壓。其不損壞FPGA器件的

xilinx 7系列FPGA之SelectIO(3)_高階IO邏輯資源簡介

上一篇咱們介紹了IO邏輯資源,本篇咱們來聊一聊高階的IO邏輯資源,即ISERDESE2模組和OSERDESE2模組。   所謂ISERDESE2模組,即Input serial-to-parallel converters。該模組的作用就是實現高速源同步輸入資料的串並轉換。

xilinx 7系列FPGA之SelectIO 篇(1)_IO介面簡介

從本篇開始的接下來共三篇,咱們聊一聊xilinx 7系列FPGA的SelectIO。所謂SelectIO,就是I/O介面以及I/O邏輯的總稱。SelectIO 篇可以分成3部分:第1部分介紹I/O的電氣特性,第2部分介紹I/O邏輯資源,第3部分介紹高階的I/O邏輯資源(serializer/de

xilinx 7系列FPGA配置篇簡介

今天咱們聊聊xilinx7系列FPGA配置的相關內容。總所周知FPGA上電後,其工作的邏輯程式碼需要從外部寫入FPGA,FPGA掉電後其邏輯程式碼就丟失,因此FPGA可以被無限次的配置不同的邏輯程式碼,但FPGA需要配備外部的非易失儲存器來儲存其邏輯程式碼或者通過微控制器、DSP或者其它控制器來

xilinx 7系列FPGA之XADC簡介

今天咱們來聊一聊FPGA裡面的XADC功能。XADC即Xilinx公司的FPGA裡整合的一個ADC模組、溫度感測器、電壓感測器的集合。在7系列FPGA裡,除了少數spartan系列的低端FPGA沒有XADC外,其它所有的7系列FPGA裡都有XADC模組。 XADC包含2個通道的模擬差分輸入、

xilinx 7系列FPGA之儲存器篇簡介

上一篇咱們說了slice,提到了其與全域性時鐘在一起就可以實現任意的組合邏輯和時序邏輯功能,但很多時候咱們還需要將FPGA內部的資料暫時儲存,用作它用。Slice作為FPGA最基本的單元,也是能夠完成資料儲存的功能,但顯然有些大材小用,因此xilinx公司在其FPGA內部專門集成了很多儲存器模組

xilinx 7系列FPGA之slice篇簡介

xilinx 7系列FPGA之slice篇簡介 Xilinx的官方文件在介紹FPGA的邏輯資源時通常是按照CLB(Configurable Logic Block)來介紹,把CLB作為FPGA裡的最小邏輯單元。但是CLB是由2個slice構成,因此平時大家都把slice掛嘴邊,稱為最

xilinx 7系列FPGA時鐘篇(4)_CMT簡介

xilinx 7系列FPGA時鐘篇(4)_CMT簡介 上篇咱們僅僅簡要的介紹了時鐘的用法,並未詳細的說明,主要是因為很多時鐘用法是針對特定的應用需求,無法一一介紹。本篇咱們將重提上篇的CMT時鐘模組,聊一聊它的用法。可以這麼說,每個靠譜的FPGA應用裡都應該用到CMT模組。 在7

xilinx 7系列FPGA時鐘篇(3)_時鐘操作法則

xilinx 7系列FPGA時鐘篇(3)_時鐘操作法則 上一篇咱們介紹了7系列FPGA的時鐘區域內部結構,本篇咱們接著介紹如何實際操作時鐘。不說其它的,直接先上兩張圖,大家如果能看懂這兩張圖,那麼就不用浪費時間看我接下來的廢話了。。。。。 C:被外部差分/單端時鐘驅動;可

xilinx 7系列FPGA時鐘篇(2)_時鐘區域簡介

xilinx 7系列FPGA時鐘篇(2)_時鐘區域簡介 上一篇咱們介紹了7系列FPGA的整體時鐘架構,知道了FPGA是由很多個時鐘區域組成,時鐘區域之間可以通過Clock Backbone 和CMT Backbone來統一工作。本篇咱們就說一下時鐘區域的內部結構,如圖1所示的虛線框內

xilinx 7系列FPGA時鐘篇 (1)_時鐘結構簡介

xilinx 7系列FPGA時鐘篇 (1)_時鐘結構簡介 說起xilinx的FPGA時鐘結構,7系列FPGA的時鐘結構和前面幾個系列的時鐘結構有了很大的區別,7系列的時鐘結構如圖1所示,理解了這張圖,咱們就對七系列的FPGA時鐘結構瞭如指掌,下面咱們就聊聊這張圖: 1,Cloc

xilinx 7系列FPGA分類簡介

xilinx 7系列FPGA分類簡介 賽靈思公司的7系列FPGA根據不同客戶的應用需求,分為4個子系列,即Spartan7系列、Artix7系列、Kintex7系列以及Virtex7系列。和前幾代FPGA產品不同的是,7系列FPGA採用的是統一的28nm設計架構,客戶在不同子系列的使

xilinx 7系列FPGA分類簡介(轉)

xilinx 7系列FPGA分類簡介 賽靈思公司的7系列FPGA根據不同客戶的應用需求,分為4個子系列,即Spartan7系列、Artix7系列、Kintex7系列以及Virtex7系列。和前幾代FPGA產品不同的是,7系列FPGA採用的是統一的28nm設計架構

FPGA block RAM和distributed RAM區別(以及xilinx 7系列CLB資源)

區別之1block ram 的輸出需要時鐘,distributed ram在給出地址後既可輸出資料。區別之2distributed ram使用更靈活方便些區別之3block ram有較大的儲存空間,distributed ram浪費LUT 資源補充:1,物理上看,block

FPGA開發筆記(xilinx 7系列

    本人才疏學淺,孤陋寡聞,下文若有不當之處,還請賜教 一、verilog注意點 延時語句 begin areg = breg; #10 creg = areg; //在兩條賦值語句間延遲10個時間單位。 end      2.觸發事件 para

FPGA基礎知識24(xilinx 高速收發器系列Xilinx 7 系列的時鐘資源(1))

談到數字邏輯,談到FPGA設計,每位工程師都離不開時鐘。這裡我們簡單介紹一下xilinx 7 系列中的時鐘資源。時鐘設計的好壞,直接影響到佈局佈線時間、timing的收斂情況,FPGA的時鐘設計非常重要,認識FPGA的時鐘資源很有必要。 FPGA設計是分模組的,