[TOC] 一直以來,以爲本身關於FPGA方面,摸不到「低」——對底層架構認識不清,夠不着「高」——沒真正獨立作過NB的應用,如高速、複雜協議或算法、神經網絡加速等高大上的應用,因此能力和認識水平都處於中間水平。這段時間作時序優化,感受愛莫能助了,可能要觸及手動佈局佈線了,打開Device佈局圖纔開始有興趣探究一些底層結構的東西。算法
<center>![](https://img2018.cnblogs.com/blog/966190/201811/966190-20181128141053679-982772209.png)</center>編程
<center>看吧,資源已經用了80%的A7 200芯片</center>網絡
可能翻開任何一本有關FPGA的書籍,上來就會介紹FPGA的歷史,原理,內部結構什麼的,大部分人看着都極其枯燥,經常要麼直接略過,要麼就看一遍,久了也就忘記了(部分靠翻譯文檔的書做者該好好反思)。我硬着頭皮去彌補以前缺失的一些基礎知識,結合Xilinx A7 芯片,總結一下本身的收穫。架構
1. 總覽
平臺:Vivado異步
芯片:XC7A200分佈式
FPGA主要有六部分組成:可編程輸入輸出單元、可編程邏輯單元、完整的時鐘管理、嵌入塊狀RAM、佈線資源、內嵌的底層功能單元和內嵌專用硬件模塊。其中最爲主要的是可編程輸出輸出單元、可編程邏輯單元和佈線資源。函數
<center>放大,這些就是內部資源,主要是邏輯單元和塊狀RAM及一些內嵌功能單元</center>佈局
<center>再放大,這些邏輯單元的內部結構也出來了,像大型「停車場」</center>性能
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個LUT六、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的觸發器時低電平復位。因此這也是須要考慮的一點嗎?
參考文獻:
- 《7 Series FPGAs Configurable Logic Block》(UG474)
- 《VIVADO今後開始》——高亞軍著(強烈推薦此書!!!!本博客論述部分大多來自高老師的書)