Xilinx A7 芯片內部結構分析(1)-- CLB

目錄

一直以來,覺得自己關於FPGA方面,摸不到“低”——對底層架構認識不清,夠不着“高”——沒真正獨立做過NB的應用,如高速、複雜協議或算法、神經網絡加速等高大上的應用,所以能力和認識水平都處於中間水平。這段時間做時序優化,感覺心有餘而力不足了,可能要觸及手動佈局佈線了,打開Device佈局圖纔開始有興趣探究一些底層結構的東西。

看吧,資源已經用了80%的A7 200芯片

可能翻開任何一本有關FPGA的書籍,上來就會介紹FPGA的歷史,原理,內部結構什麼的,大部分人看着都極其枯燥,常常要麼直接略過,要麼就看一遍,久了也就忘記了(部分靠翻譯文檔的書作者該好好反思)。我硬着頭皮去彌補之前缺失的一些基礎知識,結合Xilinx A7 芯片,總結一下自己的收穫。

1. 總覽

平臺:Vivado

芯片:XC7A200

FPGA主要有六部分組成:可編程輸入輸出單元、可編程邏輯單元、完整的時鐘管理、嵌入塊狀RAM、佈線資源、內嵌的底層功能單元和內嵌專用硬件模塊。其中最爲主要的是可編程輸出輸出單元、可編程邏輯單元和佈線資源

放大,這些就是內部資源,主要是邏輯單元和塊狀RAM及一些內嵌功能單元

再放大,這些邏輯單元的內部結構也出來了,像大型“停車場”

2. 可配置邏輯單元

可配置邏輯單元(Configurable Logic Block,CLB)在FPGA中最爲豐富,由兩個SLICE組成。由於SLICE有SLICEL(L:Logic)和SLICEM(M:Memory)之分,因此CLB可分爲CLBLL和CLBLM兩類。

點擊內部的邏輯單元,通過陰影區別包含的範圍,你可以清晰的看到結構劃分的層級。在旁邊窗口可以清晰的看到選中部分的屬性(Properties)。

來,再放大,放大到一個SLICEL,如下圖所示。

SLICEL和SLICEM內部都包含4個6輸入查找表(Look-Up-Table,LUT6)、3個數據選擇器(MUX)、1個進位鏈(Carry Chain)和8個觸發器(Flip-Flop),下面分部分介紹的時候,時不時可以再回頭看這張結構圖。

2.1 6輸入查找表(LUT6)

雖然SLICEL和SLICEM的結構組成一樣,但兩者更細化的結構上略有不同,區別在於LUT6上(如下圖所示),從而導致LUT6的功能有所不同(如下表格所示)。

LUT功能 SLICEL SLICEM
邏輯函數發生器 v v
ROM v v
分佈式RAM v
移位寄存器 v

上邊的功能可以看到,不論是SLICEL還是SLICEM,他們的LUT6都可以作爲ROM使用,配置爲64x1(佔用1個LUT6,64代表深度,1代表寬度)、128x1(佔用2個LUT6)和256(佔用4個LUT6)的ROM。

另外既然SLICEM中的M代表memory的意思,所以增加了更多存儲功能。可以配置爲RAM,尤其指分佈式RAM。其中RAM的寫操作爲同步,而讀操作是異步的,即與時鐘信號無關。如果要實現同步讀操作,則要額外佔用一個觸發器,從而增加了意識時鐘的延遲(Latency),但提升了系統的性能。這就解釋了爲什麼我們實現RAM同步讀寫的時候,讀出輸出要延遲一個clk。一個LUT6可配置64x1的RAM,當RAM的深度大於64時,會佔用額外的MUX(F7AMUX,F7BMUX,F8MUX,即一個SLICE中的那3個MUX)。

SLICEM中的LUT還可以配置爲移位寄存器,每個LUT6可實現深度爲32的移位寄存器,且同一個SLICEM中的LUT6(4個)可級聯實現128深度的移位寄存器。

2.2 選擇器(MUX)

SLICE中的三個MUX(Multiplexer:F7AMUX,F7BMUX和F8MUX)可以和LUT6聯合共同實現更大的MUX。事實上,一個LUT6可實現4選1的MUX。

SLICE中的F7MUX(F7AMUX和F7BMUX)的輸入數據來自於相鄰的兩個LUT6的O6端口。

一個F7MUX和相鄰的兩個LUT6可實現一個8選1的MUX。因此,一個SLICE可實現2個8選1的MUX。

4個LUT6、F7AMUX、F7BMUX和F8MUX可實現一個16選1的MUX。因此,一個SLICE可實現一個16選1的MUX。

2.3 進位鏈(Carry Chain)

進位鏈用於實現加法和減法運行。就是結構圖中,中間那個大的部分,可以看到它內部實際還包含4個MUX和4個2輸入異或門(XOR)。

異或運算是加法運算中必不可少的運算。

2.4 觸發器(Flip-Flop)

每個SLICE中有8個觸發器。這個8個觸發器可分爲兩大類:4個只能配置爲邊沿敏感的D觸發器(Flip-Flop)和4個即可配置爲邊沿敏感的D觸發器又可配置爲電平敏感的鎖存器(Flop&Latch)。當後者被用作鎖存器的時候,前者將無法使用。

當這8個觸發器都用作D觸發器時,他們的控制端口包括使能端CE、置位/復位端口S/R和時鐘端口CLK是對應共享的,也就是就是說共用的。{CE,S/R,CLK}稱爲觸發器的控制集。顯然,在具體的設計中,控制集種類越少越好,這樣可以提高觸發器的利用率。那麼怎樣減少控制集種類呢?我的理解是:

  • 減少時鐘種類,即頻率越少越好;
  • 統一規範的設計邏輯,如復位。

S/R端口可配置爲同步/異步置位或同步/異步復位,且高有效,因此可形成4種D觸發器,如下表所示。

原語(Primitive) 功能描述 原語(Primitive) 功能描述
FDCE 同步使能,異步復位 FDRE 同步使能,同步復位
FDPE 同步使能,異步置位 FDSE 同步使能,同步置位

在我們的常規設計中,FDCE和FDPE佔了絕大多數。

說到高有效,讓我想起了一個大家習以爲常,但很少深究的問題:爲什麼一開始接觸FPGA的時候,都告訴我們低電平復位?後來查了一些資料,有說從功耗、噪聲可靠性方面考慮等等,但是偶然看到Xilinx和Altera兩家芯片的觸發器不一樣!如下圖所示,Xilinx的觸發器是高電平復位,而Altera的觸發器時低電平復位。所以這也是需要考慮的一點嗎?

參考文獻:

  1. 《7 Series FPGAs Configurable Logic Block》(UG474)
  2. 《VIVADO從此開始》——高亞軍著(強烈推薦此書!!!!本博客論述部分大多來自高老師的書)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章