在文章《LUT是如何實現千萬種邏輯結構的》里面我們講過了LUT的原理,實現邏輯函數時,相當於一個ROM將結果預存,然后把通過輸入信號當作地址對預存的結果進行尋址。因此同樣借助LUT加幾個端口,就可以實現RAM。SLICEM里面的LUT就可以用來實現RAM資源。我們接下來講幾個概念。
(1)CLB
CLB:可配置邏輯單元(Configurable Logic Block,CLB)在FPGA中最為豐富,由兩個SLICE組成。由於SLICE有SLICEL(L:Logic)和SLICEM(M:Memory)之分,因此CLB可分為CLBLL和CLBLM兩類,SLICEM的數量占總SLICE數量的1/3,一個SLICEM里面有4個6輸入查找表,也就是4*64bit存儲空間(6輸入:可配置64x1的RAM)。
SLICEL和SLICEM內部都包含一下四個東西,下圖為SLICEM內部框圖:
- 4個6輸入查找表(Look-Up-Table,LUT6)
- 8個觸發器(Flip-Flop)
- 3個數據選擇器(MUX)
- 1個進位鏈(Carry Chain)
(2)多路復用器
上面講到一個SLICE里面有3個數據選擇器(MUX),分別為F7AMUX、F7BMUX、F8MUX,F7AMUX可以把LUT A和LUT B兩個6輸入的64位LUT(RAM)組合為一個7輸入的128位LUT(RAM),我們可以命名為LUT X,F7BMUX可以把LUT C和LUT D兩個6輸入的64位LUT(RAM)組合為一個7輸入的128位LUT(RAM),我們可以命名為LUT Y,F8MUX可以把LUT X和LUT Y兩個7輸入的128位LUT(RAM)組合為一個8輸入的256位LUT(RAM),從而可以看出F7AMUX、F7BMUX、F8MUX具有一個功能就是擴展LUT數據位寬的作用。看下面的四輸出RAM都是由MUX擴展出來的。
(3)LUT RAM實現原理
由上圖我們可以看出SLICEM有四個LUT單元,SLICEM里面的LUT跟SLICEL里面的LUT相比多了DI2,WA[6:1],CLK,WE這幾個端口。做RAM用的時候,其中DI1,DI2是寫數據輸入端口,O5,O6同樣是數據輸出端口,支持一次性兩bit或者單bit讀寫。A[6:1]為讀地址,WA[6:1]為寫地址,WE為寫使用,CLK為時鍾端口。
從這可以看出,一個LUT具有2^6=64bit的存儲空間。
1. 64x1bits單端口RAM原理
一個LUT可以作為64x1bits的RAM(內存大小為64bit,1bit讀寫),地址為6位。當讀寫地址共用一個端口時為單端口RAM,不共用時則為雙端口RAM(由圖中可以看出SLICEM里面第一個LUT的WA與A是連在一起的,故第一個LUT做不了雙端口RAM)。輸出數據可以經過SLICEM里面的Register資源打一拍以提高時序特性。64bit單端口RAM LUT實現及原語如下圖:
2. 64x1bits雙端口RAM原理
對於雙端口RAM,使用了2個LUT,第一個LUT的讀寫地址是連接到一起的,而第二個LUT的寫地址和第一個LUT的寫地址連接到一起的,但是讀地址是獨立的,所以雙扣RAM可以同時進行讀寫操作,也就是達到了寫操作和讀操作互不干擾,寫操作有些地址,讀操作有讀地址。下面是簡單雙口RAM只有一個寫端口,一個讀端口,真雙口RAM才會分別有兩個寫端口和兩個讀端口,不要混淆了。
3. 32x2bits單端口RAM原理
或者作為32x2bits的RAM(2bit讀寫),地址為5位,A[6]拉高。輸出為O5,O6。
4. 32x2bits四端口RAM原理
一個SLICEM里面有4個LUT,他們可以組合得到多種大小的RAM。首先就是四端口的32x2bits的RAM,支持一次性讀寫2bits,原理如下圖。四個LUT的寫數據端口DI1,DI2,寫使能WE,寫地址WA共用,稱為寫控制信號共用。讀地址A分別控制。LUT原理及verilog原語如下圖:
5. 128x1bits單端口RAM原理
下圖可以看出,通過F7BMUX把2個64bit的LUT的組合可以串聯實現更大深度的分布式,RAM也就是7輸入的RAM。F7BMUX可以實現選擇LUT C 64bit還是選擇 LUT D 64bit,用第七個輸入信號控制F7BMUX是否選通。LUT原理及verilog原語如下圖:
6. 128x1bits雙端口RAM原理
128x1bit的雙口RAM需要四個LUT實現,也正好是一個SLICEM,並且分別使用了F7AMUX、F7BMUX。用兩份128bitRAM,讀寫地址分開的方式實現讀寫互不干擾。LUT原理及verilog原語如下圖:
7. 256x1bits單端口RAM原理
256x1bit的單口RAM需要四個LUT實現,也就是8輸入的RAM,也正好是一個SLICEM,並且分別使用了F7AMUX、F7BMUX、F8MUX。F7AMUX可以實現是選擇LUT A 64bit還是選擇LUT B 64bit,用第七個輸入信號控制F7AMUX是否選通。F7BMUX可以實現是選擇LUT C 64bit還是選擇LUT D 64bit,用第七個輸入信號控制F7BMUX是否選通。F8MUX實現是選擇F7AMUX輸出還是F7BMUX輸出,用第八個輸入信號控制F8MUX是否選通。LUT原理及verilog原語如下圖:
(4)分布式ROM
SLICEL和SLICEM的每一個LUT都可以實現64X1bit的ROM。和RAM實現的方式原理是一樣,就是取消了寫地址和寫使能,只需要對地址信號的查找即可。
1.本文部分素材來源網絡,版權歸原作者所有,如涉及作品版權問題,請與我聯系刪除。
2.未經原作者允許不得轉載本文內容,否則將視為侵權;
3.轉載或者引用本文內容請注明來源及原作者;
4.對於不遵守此聲明或者其他違法使用本文內容者,本人依法保留追究權等。
下面是我的個人微信公眾號,關注【一個早起的程序員】精彩系列文章每天不斷。