FPGA中的細(xì)粒度和粗粒度
通常將FPGA產(chǎn)品劃分為細(xì)粒度或粗粒度。這兩個(gè)詞是什么意思呢?首先,我們需要提醒自己,F(xiàn)PGA與其他器件的主要區(qū)別是,它們的底層結(jié)構(gòu)主要由大量相對(duì)簡(jiǎn)單的“可編程邏輯塊”組成,這些塊鑲嵌在可編程互連的結(jié)構(gòu)中。
在細(xì)粒度的架構(gòu)下,每個(gè)邏輯塊只能實(shí)現(xiàn)一個(gè)非常簡(jiǎn)單的功能。例如實(shí)現(xiàn)一個(gè)三輸入函數(shù)邏輯塊。
而在粗粒度的架構(gòu)下,相比于細(xì)粒度架構(gòu),每個(gè)邏輯塊都包含大量的邏輯。例如,一個(gè)邏輯塊可能包含四個(gè)4輸入的LUTs、四個(gè)多路復(fù)用器、四個(gè)d型觸發(fā)器和一些快速進(jìn)位邏輯。
關(guān)于架構(gòu)粒度的一個(gè)重要考慮事項(xiàng)是,與這些塊支持的功能數(shù)量相比,細(xì)粒度實(shí)現(xiàn)需要進(jìn)入和退出每個(gè)塊的連接數(shù)量相對(duì)較大。當(dāng)塊的粒度增加到中粒度或更高時(shí),與它們能夠支持的功能相比,進(jìn)入塊的連接數(shù)量會(huì)減少。這是很重要的一個(gè)權(quán)衡點(diǎn),因?yàn)楫?dāng)信號(hào)通過FPGA傳播時(shí),可編程的塊間互連處理了絕大多數(shù)與信號(hào)相關(guān)的延遲任務(wù)。
這兩個(gè)架構(gòu)各有優(yōu)缺點(diǎn)。細(xì)粒度FPGA的邏輯功能塊一般較小,僅由很小的幾個(gè)晶體管組成,非常類似于半定制門陣列的基本單元,其優(yōu)點(diǎn)是功能塊的資源可以被完全利用,缺點(diǎn)是完成復(fù)雜的邏輯功能需要大量的連線和開關(guān),因而速度慢;粗粒度FPGA的邏輯塊規(guī)模大,功能強(qiáng),完成復(fù)雜邏輯只需較少的功能塊和內(nèi)部連線,因而能獲得較好的性能,缺點(diǎn)是功能塊的資源有時(shí)不能被充分利用。
邏輯塊(Logic Blocks)
可編程邏輯塊有兩種基本形式:基于MUX(多路復(fù)用器)和基于LUT(查找表)。
基于MUX。作為基于mux的方法的一個(gè)例子,考慮一種方法3輸入函數(shù)y (a & b) |c可以用一個(gè)只包含多路復(fù)用器的塊來(lái)實(shí)現(xiàn)。
可以對(duì)設(shè)備進(jìn)行編程,使對(duì)該塊的每個(gè)輸入都用邏輯0、邏輯1或來(lái)自另一個(gè)塊或設(shè)備主輸入的信號(hào)(a、b或c)的1或0表示。這允許以無(wú)數(shù)種方式配置每個(gè)塊,以實(shí)現(xiàn)大量可能的功能。
基于LUT。LUT背后的基本概念相對(duì)簡(jiǎn)單。一組輸入信號(hào)用作查找表的索引(指針)。該表的內(nèi)容被安排為每個(gè)輸入組合指向的單元格包含所需的值。例如,我們假設(shè)我們希望實(shí)現(xiàn)這個(gè)函數(shù):
y=(a&b)|c
這可以通過加載一個(gè)具有適當(dāng)值的3輸入LUT來(lái)實(shí)現(xiàn)。為了下面的例子的目的,我們假設(shè)LUT是由SRAM單元形成的(也可以使用反熔絲、E2PROM或Flash單元形成)。一種常用的技術(shù)是使用如圖所示的級(jí)聯(lián)傳輸門來(lái)選擇所需的SRAM單元。以配置的目的將它們連接在一起——也就是說,用所需的值加載它們。
如果傳輸門被激活,它將在輸入端看到的信號(hào)傳遞到輸出端。如果柵極被禁用,它的輸出與它驅(qū)動(dòng)的電線是電斷開的。傳輸門的符號(hào)顯示一個(gè)小圓圈,表明這些門將被一個(gè)邏輯0在他們的控制輸入激活。相比之下,沒有圓圈的符號(hào)表示這些門將被邏輯1激活。基于這種理解,很容易看到如何使用不同的輸入組合來(lái)選擇不同SRAM單元的內(nèi)容。
這兩種架構(gòu)的產(chǎn)品,都各有各有優(yōu)勢(shì)。MUX架構(gòu)在實(shí)現(xiàn)大量獨(dú)立小微邏輯功能時(shí),大大的增加了硅利用率,以及編程效率。LUT則在實(shí)現(xiàn)小功能時(shí)會(huì)占用整個(gè)LUT單元,導(dǎo)致浪費(fèi)。而LUT架構(gòu)在很多器件中,也能通常被用作小塊RAM,提高了靈活性。
后面將會(huì)著重繼續(xù)深入邏輯塊方面的介紹。