FPGA LUT查找表原理和編程方式

一、查找表

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沒有直接的線路連接,分屬於兩個不同的列。每列擁有獨立的快速進位鏈資源。

QQ截圖20150519192946.png

slice分爲兩種類型 SLICEL,  SLICEM

(1)SLICEL可用於產生邏輯,算術,ROM。

(2)SLICEM除以上作用外還可配置成分佈式RAM或32位的移位寄存器。每個CLB可包含兩個SLICEL或者一個SLICEL與一個SLICEM.

 分佈式RAM

            SLICEM可以配置成分佈式RAM,一個SLICEM可以配置成以下容量的RAM

 

QQ截圖20150519200214.png

        多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間的級聯形成更大規模的移位寄存器。

 

 

QQ截圖20150519202621.png

 

    MUX

       一個LUT可配置成4:1MUX.

       兩個LUT可配置成最多8:1 MUX

       四個LUT可配置成16個MUX

QQ截圖20150519203241.png

 

   同樣可以通過連接多個SLICES達成更大規模設計,但是由於SLICE沒有直接連線,需要使用佈線資源,會增加較大延遲。

 

 進位鏈

      每個SLICE有4bit的進位鏈。每bit都由一個進位MUX(MUXCY)和一個異或門組成,可在實現加法/減法器時生成進位邏輯。該MUXCY與XOR也可用於產生一般邏輯。

設計中我們可以用vivado查看設計底層的LUT實現圖,具體的差看方法https://blog.csdn.net/qijitao/article/details/51371434

 

二、LUT實現原理

LUT中文名字叫查找表。以7系列的FPGA爲例,每一個Slice裏面有四個LUT。FPGA就是通過LUT實現大量的組合邏輯,以及SLICEM裏面的LUT還可以構成RAM,Shift Register,以及Multiplexers。這篇文章我們一起來學習LUT如何構成組合邏輯。

LUT,中文名字叫做查找表,其原理其實也就是一個一個查找表,根據輸入去找到相應位置的信號,然後做輸出。說白了就好像一個小容量的ROM,把輸入當作地址信號,對LUT裏面預存的內容進行尋址。

7系列的FPGA的LUT有6個輸入端口(A1-6),然後有兩個輸出端口(O5,O6)。下圖是SLICEL裏面的LUT。


在這裏插入圖片描述

其可以實現6輸入的布爾組合邏輯函數,輸入信號爲A1,A2,A3,A4,A5,A6,輸出端口爲O6。如下

O6=f(A1,A2,A3,A4,A5,A6)

其實現方式就是將輸入(A1,A2…A6)對應的輸出在LUT裏面預存好(這一步在我們用bit文件配置FPGA時實現),然後把輸入信號當作地址信號去把對應的輸出信號調出來。

同樣其還可以構成兩個5輸入的布爾組合邏輯函數,其中這兩個函數共用5個輸入信號(A1,A2,A3,A4,A5),A6被拉高,O5,O6分別是兩個布爾邏輯的輸出。

O5=f(A1,A2,A3,A4,A5)

O6=f(A1,A2,A3,A4,A5)

故這也相當於實現的是一個5輸入2輸出的邏輯函數。

[O5,O6]=f(A1,A2,A3,A4,A5)

二、LUT提升

總結一下,就好比單個LUT裏面可以預存 2^6=64個結果。那麼單個LUT可以實現

(1)輸入信號最多爲6bit,輸出信號爲1bit的的布爾邏輯函數;

(2)輸入信號最多爲5bit,輸出信號爲2bit的邏輯。

一個SLICE裏面有四個LUT故最多可以預存的輸出信號個數爲 26*4=28。

因此在一個SLICE裏面,藉助選擇器將多個LUT進行互連,可以實現輸入數,輸出數最多爲如下所示的邏輯。

(1)2個LUT通過互連可以構成7bit輸入,單bit輸出的邏輯。實現方式爲兩個LUT的輸入信號A1,A2,A3,A4,A5,A6接到一起,輸出信號經過選擇器選擇輸出,選擇器的選擇信號也是邏輯函數的一個輸入信號。

將邏輯函數的輸出送到Storage Element便可以形成同步時序邏輯。


在這裏插入圖片描述
(2)4個LUT通過互連可以構成8bit輸入,單bit輸出的邏輯。實現方式大家可以根據上面的實現方式自行推理。

(3)2個LUT通過互連可以構成6bit輸入,2bit輸出的邏輯。實現方式自行推理。

(4)4個LUT通過互連可以構成7bit輸入,2bit輸出的邏輯。實現方式自行推理。

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