LUT是如何實現千萬種邏輯結構的

(1)FPGA和LUT簡介 

FPGA是可編程器件,與傳統邏輯電路和門陣列(如PAL,GAL及CPLD器件)相比,具有不同的結構,FPGA利用小型查找表(16×1RAM)來實現組合邏輯,每個查找表連接到一個D觸發器的輸入端,觸發器再來驅動其他邏輯電路或驅動I/O,由此構成了既可實現組合邏輯功能又可實現時序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過向內部靜態存儲單元加載編程數據來實現的,存儲在存儲器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯接方式,並最終決定了FPGA所能實現的功能,FPGA允許無限次的編程。

LUT指顯示查找表(Look-Up-Table),本質上就是一個RAM。它把數據事先(很重要,由分析綜合工具完成)寫入RAM後,每當輸入一個信號就等於輸入一個地址進行查表,找出地址對應的內容,然後輸出。

非常重要的概念:輸入的信號 <====> 輸入的地址  ===> 輸出結果

(2)LUT框圖結構

下圖爲四輸入查找表結構。xilinx FPGA內部是通過六輸入查找表實現的。
       

(3)LUT內部結構

從圖中可以看出,LUT是通過RAM實現的,4輸入LUT通過16X1 RAM實現了,6輸入查找表通過64X1 RAM實現。

下圖爲4輸入查找表內部結構:

下圖爲6輸入查找表內部結構:

(4)LUT實現C = A + B(A:1bit B:1bit) 

綜合完畢之後,可以查看電路如下,查找表1被初始化爲4'h6(3'b110),查找表2被初始化爲4'h8(3'b1000)。

可以推斷A+B以下的種情況:

當A爲0,B爲0時,2個查找表輸入的地址都爲0,因此第1個查找表輸出4'h6(3'b110)第0位0,第2個查找表輸出'h8(3'b1000)第0位0,因此Q的值爲2'b00 = 0; ==> 0 + 0 = 0

當A爲1,B爲0時,第1個查找表輸入的地址爲1,第2個查找表輸入的地址爲2,因此第1個查找表輸出4'h6(3'b110)第1位1,第二個查找表輸出'h8(3'b1000)第2位0,因此Q的值爲2'b01 = 1; ==> 1 + 0 = 1

當A爲0,B爲1時,第1個查找表輸入的地址爲2,第2個查找表輸入的地址爲1,因此第1個查找表輸出4'h6(3'b110)第2位1,第二個查找表輸出'h8(3'b1000)第1位0,因此Q的值爲2'b01 = 1; ==> 0 + 1 = 1

當A爲1,B爲1時,兩個查找表輸入的地址都爲3,兩個因此第一個查找表輸出4'h6(3'b0110)第3位0,第二個查找表輸出'h8(3'b1000)第3位1,因此Q的值爲2'b10 = 2。 ==> 1 + 1 = 2

哈哈,是不感覺很費勁呢?如果你看下C = A+B(A、B都是5位的時候)會更加複雜,此時會用到Slice內部複雜的進位鏈邏輯快。因此我們只要知道原理就行,上面的操作綜合分析工具和LUT已經幫我們做了,大家細細品味。下面列了一個表:

(5)總結LUT實現邏輯原理

本質上來說,就是把我們輸入的數據作爲LUT的地址信號,然後查找出預先定義好的邏輯結果,這個就是邏輯代碼實現原理。編譯器在編譯verilog代碼的時候會遍歷所有邏輯輸入並且計算出輸出存入RAM裏面,在硬件運行的時候根據線上的當前狀態確定LUT輸出從而實現了數字電路的一切設計邏輯。

 

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