系列文章目錄:FPGA原理與結(jié)構(gòu)(0)——目錄與傳送門
一、什么是CLB
1、CLB簡介? ? ??
????????可配置邏輯塊CLB(Configurable Logic Block)是xilinx系類FPGA的基本邏輯單元(在各系列中CLB可能有所不同,以下我們主要討論Xilinx 7系類),是實現(xiàn)時序邏輯電路和組合邏輯電路的主要邏輯資源。
2、CLB的組成
? ? ? ? 一般來說,EDA完成綜合時會自動分配CLB資源,而不需要系統(tǒng)設(shè)計者的干預(yù)。對于設(shè)計者來說,理解某些CLB細(xì)節(jié)是有利的,包括查找表(LUTs)的不同功能、進(jìn)位的物理方向、可用觸發(fā)器的數(shù)量和分布,以及移位寄存器的可使用情況等。
? ? ? ? 每個CLB可以被劃分成兩個Slice,并引出邏輯連線至開關(guān)矩陣(Switch Matrix,作為布線資源),同時還包含著算術(shù)進(jìn)位邏輯的功能(CIN,COUT,進(jìn)位輸入和輸出)。如下圖所示:
????????由于Slice有SliceL(Logic)和SliceM(Memory)之分,因此CLB可分為CLBLL和CLBLM兩類。
????????SliceL和SliceM內(nèi)部都包含4個6輸入查找表(LUT6)、3個數(shù)據(jù)選擇器(MUX)、1個進(jìn)位鏈(Carry Chain)和8個觸發(fā)器(Flip-Flop)。
? ? ? ? 接下來我們打開vivado,選擇一個7系類的device來直觀的感受一下CLB的構(gòu)成,以下為zynq7000系類的device視圖:
? ? ? ? 我們逐漸放大途中光標(biāo)坐在位置:
可以看到這就是我們的一個CLB,在xilinx 7系類中有若干個這樣的CLB單元。進(jìn)一步放大可以看到CLB的具體組成結(jié)構(gòu):
在這里我們可以清楚地看到,一個CLB由左右兩個slice構(gòu)成,每個slice中包含有4個6-input的LUT?,3個數(shù)據(jù)選擇器(MUX),一個進(jìn)位鏈(Carry Chain)和8個觸發(fā)器(Flip-Flop)。
3、SLICEM與SLICEL的區(qū)別
? ? ? ? 首先我們繼續(xù)從device的角度直觀觀察兩者的區(qū)別,下圖為SLICEM的視圖展示:? ? ? ?
? ? ? ? ?下圖為SLICEL的視圖展示:
? ? ? ? 可以看到從視圖上明顯的區(qū)別就在于兩者的LUT有所不同,我們對兩者的LUT進(jìn)一步放大進(jìn)行觀察:
? ? ? ? ?左側(cè)是SliceM對應(yīng)的LUT視圖,右側(cè)為SliceL對應(yīng)的LUT視圖。
?????????SLICEM(M:Memory):其內(nèi)部的LUT可以讀也可以寫,可以實現(xiàn)移位寄存器和64bit的DRAM等存儲功能,還可以實現(xiàn)基本的查找表邏輯。
? ? ? ? ?SLICEL(L:Logic): 其內(nèi)部的LUT只可以讀,只能實現(xiàn)基本的查找表邏輯。
? ? ? ? 在上圖中,CLB由一個SLICEM和一個SLICEL組成,在實際情況中,一個CLB也有可能是由2個SLICEL組成。但是不會由2個SLICEM組成。
? ? ? ? 大部分情況下,F(xiàn)PGA中SLICEL和SLICEM的數(shù)量比例為SLICEL:SLICEM = 2:1。
4、官方推薦的設(shè)計流程
? ? ? ? 我們學(xué)習(xí)硬件底層有時候最終還是為了優(yōu)化我們的代碼設(shè)計,基于此官方在手冊中也給出了幾條推薦的HDL設(shè)計:
(1)CLB中的觸發(fā)器有一個置位(set)和一個復(fù)位(reset),設(shè)計者禁止同時使用這兩者。
(2)硬件中有著大量的觸發(fā)器,所以推薦使用流水線的方式來提高效率。
(3)控制類輸入信號在一個slice或者CLB中是被共享的,所以設(shè)計中的唯一控制類輸入信號的數(shù)量應(yīng)該減少??刂祁愝斎胄盘柊〞r鐘信號,時鐘使能信號,使能信號,置位/復(fù)位信號。
(4)6輸入LUT可以被設(shè)計成32位移位寄存器來提高布線效率。
(5)6輸入LUT 可以被設(shè)計成64*1的DRAM來完成小規(guī)模存儲需求。
(6)專用進(jìn)位邏輯有效地實現(xiàn)了算術(shù)函數(shù)。
二、CLB在FPGA中的分布
? ? ? ? CLB在xilinx 7系類FPGA中按列分布,7系列是基于ASMBL體系結(jié)構(gòu)提供的獨特柱狀方法的第四代。
ASMBL 架構(gòu):
????????Xilinx創(chuàng)建了高級硅模塊(Advanced Silicon Modular Block,ASMBL)體系結(jié)構(gòu),使FPGA平臺具有針對不同應(yīng)用領(lǐng)域優(yōu)化的不同功能組合。下圖提供了基于列的不同類型的資源描述。
? ? ? ? ?ASMBL通過使用獨特的基于列的結(jié)構(gòu),實現(xiàn)了支持多專門領(lǐng)域應(yīng)用平臺的概念。每列代表一個專門功能的硅子系統(tǒng),如邏輯資源,存儲器,I/O,DSP處理,硬核IP和混合信號等。xilinx公司通過組合不同的功能列,組裝成面向特定應(yīng)用類別的專門FPGA(與專用不同,專門是指一項單一的應(yīng)用)。典型的有邏輯密集型、存儲密集型和處理器密集型等。例如,用與圖像處理的處理器密集型芯片可能就包含有比較多的DSP功能列。
? ? ? ? ASMBL架構(gòu)具體優(yōu)勢不是本文的重點內(nèi)容,這里不做詳細(xì)的展開,簡單說就是(1)解決基于應(yīng)用領(lǐng)域的設(shè)計問題(2)解決在傳統(tǒng)ASIC和FPGA設(shè)計中都存在的一些技術(shù)約束問題。
? ? ? ? 說了這么多,其實對于本文來說,只需要了解CLB在xilinx 7系類FPGA中根據(jù)ASMBL架構(gòu)按列排布即可。
三、CLB Slices概述
1、Slice的分布排列? ? ? ??
????????前文我們已經(jīng)提到過一個CLB由兩個Slice構(gòu)成,一個Slice中有4個6輸入的查找表LUT,8個觸發(fā)器FF。在之前我們在vivado中通過device直接觀察時感覺似乎Slice之間是一左一右對稱的形式存在的,但是在實際的硬件中卻有所不同(device里只是示意圖):
? ? ? ? Slice(0):CLB的左下角
? ? ? ? Slice(1):CLB的右上角
? ? ?這兩個slice相互之間沒有直接的連接,每個slice都在一個單獨的列里(從ASMBL架構(gòu)圖中體現(xiàn)地很明顯)?,并且每個slice具有獨立的進(jìn)位鏈。具體地排列可以參見下圖:
????????
2、Slice的內(nèi)部結(jié)構(gòu)
? ? ? ? ? ? ?我們都知道了Slice根據(jù)其LUT的不同可以分為SliceM(memory)和SliceL(logic)。
(1)SliceM的結(jié)構(gòu)組成:
(2)SliceL的結(jié)構(gòu)組成:
? ? ? ? ?具體的內(nèi)部連接看不同沒關(guān)系,但是在這個階段我們應(yīng)該能夠分辨上圖中的各個模塊,包括哪些是LUT,MUX,carry chain和FF。至于關(guān)于這些模塊的具體細(xì)節(jié),我們接著往下看。
四、查找表Look-Up Table (LUT)
? ? ? ? LUT是CLB的重要組成部分,其本質(zhì)就是一個RAM,用來實現(xiàn)數(shù)字電路中邏輯門的功能,把輸入映射成存儲地址,再輸出對應(yīng)地址(輸入)內(nèi)存儲的值作為輸出來實現(xiàn)所需的邏輯功能。7系類的FPGA中使用6-LUT,它通過2個5-LUT組成,也可以通過其他邏輯器件實現(xiàn)7/8輸入。?
? ? ? ? 關(guān)于LUT的詳細(xì)內(nèi)容,請閱讀:FPGA原理與結(jié)構(gòu)——查找表LUT(Look_Up_Table)
? ? ? ? 我們知道slice有SLICEM和SLICEL兩種,其區(qū)別就在于他們的LUT不同,SLICEM的LUT既可以讀,又可以寫;SLICEL的LUT只能讀。由于SLICEM的LUT具有可以讀寫的特性,他還可以被配置成DRAM或者移位寄存器來使用。
? ? ? ? 關(guān)于DRAM的內(nèi)容,請閱讀:FPGA原理與結(jié)構(gòu)——分布式RAM(Distributed RAM,DRAM)
? ? ? ? 關(guān)于移位寄存器的詳細(xì)內(nèi)容,請閱讀:FPGA原理與結(jié)構(gòu)——移位寄存器(Shift Registers)
五、存儲單元Storage Elements
? ? ? ? 在CLB中主要有2種類型的存儲單元,一種只能被配置成觸發(fā)器(FF),另一種既可以被配置成觸發(fā)器(FF),也可以被配置成鎖存器(Latch),然后他們根據(jù)復(fù)位方式的不同,復(fù)位后輸出結(jié)果的不同可以被配置成不同類型的觸發(fā)器/鎖存器。
? ? ? ? 關(guān)于存儲單元的詳細(xì)內(nèi)容,請閱讀:FPGA原理與結(jié)構(gòu)——存儲單元(Storage Elements)
六、數(shù)據(jù)選擇器MUX(Multiplexers)
? ? ? ? 數(shù)據(jù)選擇器是一個多輸入,單輸出的組合邏輯器件,在每個slice中有一個F7BMUX和一個F7AMUX,這兩個MUX將兩個lut的輸出組合起來,形成一個多達(dá)13個輸入(或一個8:1的MUX)的組合函數(shù)。在一個slice中最多最多可以部署兩個MUX8。每個slice還就有一個F8MUX,它可以把F7AMUX和F7BMUX的輸出作為自己的輸入,形成一個多達(dá)27個輸入(或一個16:1的MUX)的組合函數(shù)。一個slice中最多只能部署一個MUX16。
? ? ? ? 關(guān)于MUX的詳細(xì)內(nèi)容,請閱讀:FPGA原理與結(jié)構(gòu)——數(shù)據(jù)選擇器MUX(Multiplexers)
七、進(jìn)位鏈(CARRY4)
? ? ? ? 進(jìn)位邏輯在FPGA中有著非常廣泛的應(yīng)用,其功能主要是實現(xiàn)二進(jìn)制的加減法運算。在7系列的FPGA中,一個CLB中有兩個Slice,一個Slice中包含4個LUT6、3個數(shù)據(jù)選擇器MUX、1個獨立進(jìn)位鏈(Carry4,Ultrascale是Carry8)和8個觸發(fā)器。這里我們談?wù)揅arry4。在CLB中,除了函數(shù)發(fā)生器之外,還提供了專用的快速超前進(jìn)位邏輯,以slice中執(zhí)行快速算術(shù)加法和減法,?進(jìn)位鏈還可級聯(lián)以形成更寬的加/減邏輯。文章來源:http://www.zghlxwxcb.cn/news/detail-720051.html
? ? ? ? 關(guān)于進(jìn)位鏈的詳細(xì)內(nèi)容,請閱讀:FPGA原理與結(jié)構(gòu)——進(jìn)位鏈CARRY文章來源地址http://www.zghlxwxcb.cn/news/detail-720051.html
到了這里,關(guān)于FPGA原理與結(jié)構(gòu)(1)——可配置邏輯塊CLB(Configurable Logic Block)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!