FPGA重點(diǎn)知識13條,助你構建完整“邏輯觀(guān)”之一
一.基于乘積項(Product-Term)的PLD結構
采用這種結構的PLD芯片有:Altera的MAX7000,MAX3000系列(EEPROM工藝),Xilinx的XC9500系列(Flash工藝)和Lattice,Cypress的大部分產(chǎn)品(EEPROM工藝)
我們先看一下這種PLD的總體結構(以MAX7000為例,其他型號的結構與此都非常相似):

圖1 基于乘積項的PLD內部結構
這種PLD可分為三塊結構:宏單元(Marocell),可編程連線(xiàn) (PIA)和I/O控制塊。 宏單元是PLD的基本結構,由它來(lái)實(shí)現基本的邏輯功能。圖1中蘭色部分是多個(gè)宏單元的集合(因為宏單元較多,沒(méi)有一一畫(huà)出)??删幊踢B線(xiàn)負責信號傳遞,連 接所有的宏單元。I/O控制塊負責輸入輸出的電氣特性控制,比如可以設定集電極開(kāi)路輸出,擺率控制,三態(tài)輸出等。 圖1 左上的INPUT/GCLK1,
INPUT/GCLRn,INPUT/OE1,INPUT/OE2 是全局時(shí)鐘,清零和輸出使能信號,這幾個(gè)信號有專(zhuān)用連線(xiàn)與PLD中每個(gè)宏單元相連,信號到每個(gè)宏單元的延時(shí)相同并且延時(shí)最短。
宏單元的具體結構見(jiàn)下圖:

圖2 宏單元結構
左側是乘積項陣列,實(shí)際就是一個(gè)與或陣列,每一個(gè)交叉點(diǎn)都是一個(gè)可編程 熔絲,如果導通就是實(shí)現“與”邏輯。后面的乘積項選擇矩陣是一個(gè)“或”陣列。兩者一起完成組合邏輯。圖右側是一個(gè)可編程D觸發(fā)器,它的時(shí)鐘,清零輸入都可 以編程選擇,可以使用專(zhuān)用的全局清零和全局時(shí)鐘,也可以使用內部邏輯(乘積項陣列)產(chǎn)生的時(shí)鐘和清零。如果不需要觸發(fā)器,也可以將此觸發(fā)器旁路,信號直接 輸給PIA或輸出到I/O腳。
二.乘積項結構PLD的邏輯實(shí)現原理
下面我們以一個(gè)簡(jiǎn)單的電路為例,具體說(shuō)明PLD是如何利用以上結構實(shí)現邏輯的,電路如下圖:

圖3
假設組合邏輯的輸出(AND3的輸出)為f,則f=(A+B)*C*(!D)=A*C*!D + B*C*!D ( 我們以!D表示D的“非”)
PLD將以下面的方式來(lái)實(shí)現組合邏輯f:

圖4
A,B,C,D由PLD芯片的管腳輸入后進(jìn)入可編程連線(xiàn)陣列 (PIA),在內部會(huì )產(chǎn)生A,A反,B,B反,C,C反,D,D反8個(gè)輸出。圖中每一個(gè)叉表示相連(可編程熔絲導通),所以得到:f= f1 + f2 = (A*C*!D) +
(B*C*!D) 。這樣組合邏輯就實(shí)現了。 圖3電路中D觸發(fā)器的實(shí)現比較簡(jiǎn)單,直接利用宏單元中的可編程D觸發(fā)器來(lái)實(shí)現。時(shí)鐘信號CLK由I/O腳輸入后進(jìn)入芯片內部的全局時(shí)鐘專(zhuān)用通道,直接連接 到可編程觸發(fā)器的時(shí)鐘端??删幊逃|發(fā)器的輸出與I/O腳相連,把結果輸出到芯片管腳。這樣PLD就完成了圖3所示電路的功能。(以上這些步驟都是由軟件自 動(dòng)完成的,不需要人為干預)
圖3的電路是一個(gè)很簡(jiǎn)單的例子,只需要一個(gè)宏單元就可以完成。但對于一個(gè)復雜的電路,一個(gè)宏單元是不能實(shí)現的,這時(shí)就需要通過(guò)并聯(lián)擴展項和共享擴展項將多個(gè)宏單元相連,宏單元的輸出也可以連接到可編程連線(xiàn)陣列,再做為另一個(gè)宏單元的輸入。這樣PLD就可以實(shí)現更復雜邏輯。
這種基于乘積項的PLD基本都是由EEPROM和Flash工藝制造的,一上電就可以工作,無(wú)需其他芯片配合。
PGA的基本工作原理
FPGA是在PAL、GAL、EPLD、CPLD等可編程器件的基礎上進(jìn)一步發(fā)展的產(chǎn)物。它是作為ASIC領(lǐng)域中的一種半定制電路而出現的,即解決了定制電路的不足,又克服了原有可編程器件門(mén)電路有限的缺點(diǎn)。
由于FPGA需要被反復燒寫(xiě),它實(shí)現組合邏輯的基本結構不可能像ASIC那樣通過(guò)固定的與非門(mén)來(lái)完成,而只能采用一種易于反復配置的結構。查找表可以很好地滿(mǎn)足這一要求,目前主流FPGA都采用了基于SRAM工藝的查找表結構,也有一些軍品和宇航級FPGA采用Flash或者熔絲與反熔絲工藝的查找表結構。通過(guò)燒寫(xiě)文件改變查找表內容的方法來(lái)實(shí)現對FPGA的重復配置。
根據數字電路的基本知識可以知道,對于一個(gè)n輸入的邏輯運算,不管是與或非運算還是異或運算等等,最多只可能存在2n種結果。所以如果事先將相應的結果存放于一個(gè)存貯單元,就相當于實(shí)現了與非門(mén)電路的功能。FPGA的原理也是如此,它通過(guò)燒寫(xiě)文件去配置查找表的內容,從而在相同的電路情況下實(shí)現了不同的邏輯功能。
查找表的原理與結構
查找表(Look-Up-Table)簡(jiǎn)稱(chēng)為L(cháng)UT,LUT本質(zhì)上就是一個(gè)RAM。目前FPGA中多使用4輸入的LUT,所以每一個(gè)LUT可以看成一個(gè)有4位地址線(xiàn)的的RAM。當用戶(hù)通過(guò)原理圖或HDL語(yǔ)言描述了一個(gè)邏輯電路以后,
PLD/FPGA開(kāi)發(fā)軟件會(huì )自動(dòng)計算邏輯電路的所有可能結果,并把真值表(即結果)事先寫(xiě)入RAM,這樣,每輸入一個(gè)信號進(jìn)行邏輯運算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對應的內容,然后輸出即可。
下面給出一個(gè)四輸入與非門(mén)電路的例子來(lái)說(shuō)明LUT實(shí)現邏輯功能的原理。
表給出一個(gè)使用LUT實(shí)現四輸入與門(mén)電路的真值表。

表 輸入與門(mén)的真值表
從中可以看到,LUT具有和邏輯電路相同的功能。實(shí)際上,LUT具有更快的執行速度和更大的規模。
3.1.2查找表結構的FPGA邏輯實(shí)現原理
我們還是以這個(gè)電路的為例:

圖 四輸入與門(mén)電路圖
A,B,C,D由FPGA芯片的管腳輸入后進(jìn)入可編程連線(xiàn),然后作為地址線(xiàn)連到到LUT,LUT中已經(jīng)事先寫(xiě)入了所有可能的邏輯結果,通過(guò)地址查找到相應的數據然后輸出,這樣組合邏輯就實(shí)現了。該電路中D觸發(fā)器是直接利用LUT后面D觸發(fā)器來(lái)實(shí)現。時(shí)鐘信號CLK由I/O腳輸入后進(jìn)入芯片內部的時(shí)鐘專(zhuān)用通道,直接連接到觸發(fā)器的時(shí)鐘端。觸發(fā)器的輸出與I/O腳相連,把結果輸出到芯片管腳。這樣PLD就完成了圖所示電路的功能。(以上這些步驟都是由軟件自動(dòng)完成的,不需要人為干預)
這個(gè)電路是一個(gè)很簡(jiǎn)單的例子,只需要一個(gè)LUT加上一個(gè)觸發(fā)器就可以完成。對于一個(gè)LUT無(wú)法完成的的電路,就需要通過(guò)進(jìn)位邏輯將多個(gè)單元相連,這樣FPGA就可以實(shí)現復雜的邏輯。
因為基于LUT的FPGA具有很高的集成度,其器件密度從數萬(wàn)門(mén)到數千萬(wàn)門(mén)不等,可以完成極其復雜的時(shí)序與邏輯組合邏輯電路功能,所以適用于高速、高密度的高端數字邏輯電路設計領(lǐng)域。其組成部分主要有可編程輸入/輸出單元、基本可編程邏輯單元、內嵌SRAM、豐富的布線(xiàn)資源、底層嵌入功能單元、內嵌專(zhuān)用單元等,主要設計和生產(chǎn)廠(chǎng)家有Xilinx、Altera、Lattice、Actel、Atmel和QuickLogic等公司,其中最大的是Xilinx、Altera、Lattice三家。
4、比較Xilinx和Altera
要比較Xilinx和Altera的FPGA,就要清楚兩個(gè)大廠(chǎng)FPGA的結構,由于各自設計的不同,兩家的FPGA結構各不相同,參數也各不相同,但可以統一到LUT(Look-Up-Table)查找表上。
下圖就是A家的Cyclone IV系列片子的參數:

Altera Cyclone IV 系列資源比較
可以看到,A家的片子,用的是LE這個(gè)術(shù)語(yǔ)。
而下圖是X家的Spartan-6 片子資料:

Xilinx Spartan-6 系列資源比較
X家用的是CLB這個(gè)術(shù)語(yǔ)作為基本單元。
再看看兩家的基本單元有何不同:
A家的LE如下圖:

Cyclone LE 結構
就是一個(gè)4輸入LUT+FF構成
而X家的CLB如下:
xilinx CLB 結構

一個(gè)CLB由2個(gè)SLICE構成,一個(gè)SLICE含有4個(gè)6輸入LUT,所以L(fǎng)UT=8*CLB。
Xilinx CLB 包含的 Slices LUT FF

這樣的話(huà),可以較比一下。EP4CE6基本就和XC6SLX9一個(gè)級別。。。。當然A家的片子是4輸入LUT遠比不上X家的6輸入LUT。而X家的S-6片子,一個(gè)Slice內部有4個(gè)lut,8個(gè)FF。簡(jiǎn)而言之,一個(gè)Slice=四個(gè)LE。要注意的是A家C5以下的片子是4輸入LUT而X家的是6輸入LUT,差別也較大。如果不考慮FF,那么一個(gè)X家的slice=4個(gè)A家的LE。例如XC6SLX16含有2278個(gè)slices=EP4CE10(9000LE)的樣子。當然,S-6的FF多一倍,達到了18224個(gè)。
在Virtex-5中(我們的設計大部分是Virtex,V5V6V7),一個(gè)Slice包含了4個(gè)LUT和4個(gè)FF。所以單純從邏輯資源來(lái)看,S-6一個(gè)Slice比V-5的Slice強。當然V5的GTPGTX等等還有IO數量是S-6趕不上的。當然,A家的Cyclone V系列的片子,內部和前幾代完全不同,采用了從高端的Stratix系列下放的技術(shù).
5、分布式RAM和Block ram
以下分析基于xilinx 7系列
CLB是xilinx基本邏輯單元,每個(gè)CLB包含兩個(gè)slices,每個(gè)slices由4個(gè)(A,B,C,D)6輸入LUT和8個(gè)寄存器組成。
同一CLB中的兩片slices沒(méi)有直接的線(xiàn)路連接,分屬于兩個(gè)不同的列。每列擁有獨立的快速進(jìn)位鏈資源。

slice分為兩種類(lèi)型 SLICEL, SLICEM . SLICEL可用于產(chǎn)生邏輯,算術(shù),ROM。 SLICEM除以上作用外還可配置成分布式RAM或32位的移位寄存器。每個(gè)CLB可包含兩個(gè)SLICEL或者一個(gè)SLICEL與一個(gè)SLICEM.
7系列的LUT包含6個(gè)輸入 A1 -A6 , 兩個(gè)輸出 O5 , O6 .
可配置成6輸入查找表,O6此時(shí)作為輸出?;蛘邇蓚€(gè)5輸入的查找表,A1-A5作為輸入 A6拉高,O5,O6作為輸出。
一個(gè)LUT包含6個(gè)輸入,邏輯容量為2^6bit,為實(shí)現7輸入邏輯需要2^7容量,對于更多輸入也一樣。每個(gè)SLICES有4個(gè)LUT,256bit容量能夠實(shí)現最多8bit輸入的邏輯。為了實(shí)現此功能,每個(gè)SLICES還包括3個(gè)MUX(多路選擇器)
F7AMUX 用于產(chǎn)生7輸入的邏輯功能,用于連接A,B兩個(gè)LUT
F7BMUX 用于產(chǎn)生7輸入的邏輯功能, 用于連接C,D兩個(gè)LUT
F8MUX 用于產(chǎn)生8輸入的邏輯功能, 用于連接4個(gè)LUT
對于大于8輸入的邏輯需要使用多個(gè)SLICES, 會(huì )增加邏輯實(shí)現的延時(shí)。
一個(gè)SLICES中的4個(gè)寄存器可以連接LUT或者M(jìn)UX的輸出,或者被直接旁路不連接任何邏輯資源。寄存器的置位/復位端為高電平有效。只有CLK端能被設置為兩個(gè)極性,其他輸入若要改變電平需要插入邏輯資源。例如低電平復位需要額外的邏輯資源將rst端輸入取反。但設為上升/下降沿觸發(fā)寄存器不會(huì )帶來(lái)額外消耗。
分布式RAM
SLICEM可以配置成分布式RAM,一個(gè)SLICEM可以配置成以下容量的RAM

多bit的情況需要增加相應倍數的LUT進(jìn)行并聯(lián)。
分布式RAM和 BLOCK RAM的選擇遵循以下方法:
1. 小于或等于64bit容量的的都用分布式實(shí)現
2. 深度在64~128之間的,若無(wú)額外的block可用分布式RAM。要求異步讀取就使用分布式RAM。數據寬度大于16時(shí)用block ram。
3. 分布式RAM有比block ram更好的時(shí)序性能。 分布式RAM在邏輯資源CLB中。而B(niǎo)LOCK RAM則在專(zhuān)門(mén)的存儲器列中,會(huì )產(chǎn)生較大的布線(xiàn)延遲,布局也受制約。
移位寄存器(SLICEM)
SLICEM中的LUT能在不使用觸發(fā)器的情況下設置成32bit的移位寄存器,4個(gè)LUT可級聯(lián)成128bit的移位寄存器。并且能夠進(jìn)行SLICEM間的級聯(lián)形成更大規模的移位寄存器。

MUX
一個(gè)LUT可配置成4:1MUX.
兩個(gè)LUT可配置成最多8:1 MUX
四個(gè)LUT可配置成16個(gè)MUX

同樣可以通過(guò)連接多個(gè)SLICES達成更大規模設計,但是由于SLICE沒(méi)有直接連線(xiàn),需要使用布線(xiàn)資源,會(huì )增加較大延遲。
進(jìn)位鏈
每個(gè)SLICE有4bit的進(jìn)位鏈。每bit都由一個(gè)進(jìn)位MUX(MUXCY)和一個(gè)異或門(mén)組成,可在實(shí)現加法/減法器時(shí)生成進(jìn)位邏輯。該MUXCY與XOR也可用于產(chǎn)生一般邏輯。
評論