、查找表
LUT就是查找表,對於4輸入的LUT而言,實際上就是4位地址位,一位數據位的存儲器,能夠存儲16位數據,所以我們在FPGA設計中可以用LUT組建分布式的RAM。
這樣也可以解釋我們在設計中為什么要采用流水線的實現方法
因為當輸入數據的位數遠大於一個LUT的輸入時,就需要用多個LUT級聯來實現邏輯,那么級聯產生的延時也就不可避免了,這樣就會制約系統的運行頻率。那么為了避免級聯數過於多,就采用插入寄存器的方法來實現。
舉一個簡單的例子,如果要實現一個6*1的mux可以用一個6輸入的LUT或者是2個4輸入的LUT來實現,6輸入的LUT相當於是6位地址線一位數據位,能夠存儲64bit的數據,而采用兩個4輸入的LUT的話,它的總容量大小為32位數據。
如果用6輸入的LUT實現4輸入LUT的功能,那么就浪費了1-16/64=75%的資源,所以采用少輸入的LUT可以更好的節省面積和資源,但是呢如果LUT采用的是2輸入的呢,那樣豈不是更好嗎,不是的,因為對於多輸入的信號處理的時候,就需要有多個LUT的級聯來實現,而級聯有不可避免的會導致延時過分,導致時序不滿足。因此在實際的FPGA產品中多采用的是4輸入或者6輸入的LUT。
圖 4輸入的LUT
CLB是xilinx基本邏輯單元,每個CLB包含兩個slices,每個slices由4個(A,B,C,D)6輸入LUT和8個寄存器組成(中間應該還有一些選擇器、與非門、或非門之類的東西)。放一個slices的內部圖
同一CLB中的兩片slices沒有直接的線路連接,分屬於兩個不同的列。每列擁有獨立的快速進位鏈資源。
slice分為兩種類型 SLICEL, SLICEM
(1)SLICEL可用於產生邏輯,算術,ROM。
(2)SLICEM除以上作用外還可配置成分布式RAM或32位的移位寄存器。每個CLB可包含兩個SLICEL或者一個SLICEL與一個SLICEM.
分布式RAM
SLICEM可以配置成分布式RAM,一個SLICEM可以配置成以下容量的RAM
多bit的情況需要增加相應倍數的LUT進行並聯。
分布式RAM和 BLOCK RAM的選擇遵循以下方法:
1. 小於或等於64bit容量的的都用分布式實現
2. 深度在64~128之間的,若無額外的block可用分布式RAM。 要求異步讀取就使用分布式RAM。數據寬度大於16時用block ram.
3. 分布式RAM有比block ram更好的時序性能。 分布式RAM在邏輯資源CLB中。而BLOCK RAM則在專門的存儲器列中,會產生較大的布線延遲,布局也受制約。
移位寄存器(SLICEM)
SLICEM中的LUT能在不使用觸發器的情況下設置成32bit的移位寄存器, 4個LUT可級聯成128bit的移位寄存器。並且能夠進行SLICEM間的級聯形成更大規模的移位寄存器。
MUX
一個LUT可配置成4:1MUX.
兩個LUT可配置成最多8:1 MUX
四個LUT可配置成16個MUX
同樣可以通過連接多個SLICES達成更大規模設計,但是由於SLICE沒有直接連線,需要使用布線資源,會增加較大延遲。
進位鏈
每個SLICE有4bit的進位鏈。每bit都由一個進位MUX(MUXCY)和一個異或門組成,可在實現加法/減法器時生成進位邏輯。該MUXCY與XOR也可用於產生一般邏輯。
設計中我們可以用vivado查看設計底層的LUT實現圖,具體的差看方法https://blog.csdn.net/qijitao/article/details/51371434
二、各種核