FPGA重點知識13條,助你構(gòu)建完整“邏輯觀”之一
一.基于乘積項(Product-Term)的PLD結(jié)構(gòu)
采用這種結(jié)構(gòu)的PLD芯片有:Altera的MAX7000,MAX3000系列(EEPROM工藝),Xilinx的XC9500系列(Flash工藝)和Lattice,Cypress的大部分產(chǎn)品(EEPROM工藝)
我們先看一下這種PLD的總體結(jié)構(gòu)(以MAX7000為例,其他型號的結(jié)構(gòu)與此都非常相似):
圖1 基于乘積項的PLD內(nèi)部結(jié)構(gòu)
這種PLD可分為三塊結(jié)構(gòu):宏單元(Marocell),可編程連線 (PIA)和I/O控制塊。 宏單元是PLD的基本結(jié)構(gòu),由它來實現(xiàn)基本的邏輯功能。圖1中蘭色部分是多個宏單元的集合(因為宏單元較多,沒有一一畫出)??删幊踢B線負(fù)責(zé)信號傳遞,連 接所有的宏單元。I/O控制塊負(fù)責(zé)輸入輸出的電氣特性控制,比如可以設(shè)定集電極開路輸出,擺率控制,三態(tài)輸出等。 圖1 左上的INPUT/GCLK1,
INPUT/GCLRn,INPUT/OE1,INPUT/OE2 是全局時鐘,清零和輸出使能信號,這幾個信號有專用連線與PLD中每個宏單元相連,信號到每個宏單元的延時相同并且延時最短。
宏單元的具體結(jié)構(gòu)見下圖:
圖2 宏單元結(jié)構(gòu)
左側(cè)是乘積項陣列,實際就是一個與或陣列,每一個交叉點都是一個可編程 熔絲,如果導(dǎo)通就是實現(xiàn)“與”邏輯。后面的乘積項選擇矩陣是一個“或”陣列。兩者一起完成組合邏輯。圖右側(cè)是一個可編程D觸發(fā)器,它的時鐘,清零輸入都可 以編程選擇,可以使用專用的全局清零和全局時鐘,也可以使用內(nèi)部邏輯(乘積項陣列)產(chǎn)生的時鐘和清零。如果不需要觸發(fā)器,也可以將此觸發(fā)器旁路,信號直接 輸給PIA或輸出到I/O腳。
二.乘積項結(jié)構(gòu)PLD的邏輯實現(xiàn)原理
下面我們以一個簡單的電路為例,具體說明PLD是如何利用以上結(jié)構(gòu)實現(xiàn)邏輯的,電路如下圖:
圖3
假設(shè)組合邏輯的輸出(AND3的輸出)為f,則f=(A+B)*C*(!D)=A*C*!D + B*C*!D ( 我們以!D表示D的“非”)
PLD將以下面的方式來實現(xiàn)組合邏輯f:
圖4
A,B,C,D由PLD芯片的管腳輸入后進(jìn)入可編程連線陣列 (PIA),在內(nèi)部會產(chǎn)生A,A反,B,B反,C,C反,D,D反8個輸出。圖中每一個叉表示相連(可編程熔絲導(dǎo)通),所以得到:f= f1 + f2 = (A*C*!D) +
(B*C*!D) 。這樣組合邏輯就實現(xiàn)了。 圖3電路中D觸發(fā)器的實現(xiàn)比較簡單,直接利用宏單元中的可編程D觸發(fā)器來實現(xiàn)。時鐘信號CLK由I/O腳輸入后進(jìn)入芯片內(nèi)部的全局時鐘專用通道,直接連接 到可編程觸發(fā)器的時鐘端??删幊逃|發(fā)器的輸出與I/O腳相連,把結(jié)果輸出到芯片管腳。這樣PLD就完成了圖3所示電路的功能。(以上這些步驟都是由軟件自 動完成的,不需要人為干預(yù))
圖3的電路是一個很簡單的例子,只需要一個宏單元就可以完成。但對于一個復(fù)雜的電路,一個宏單元是不能實現(xiàn)的,這時就需要通過并聯(lián)擴展項和共享擴展項將多個宏單元相連,宏單元的輸出也可以連接到可編程連線陣列,再做為另一個宏單元的輸入。這樣PLD就可以實現(xiàn)更復(fù)雜邏輯。
這種基于乘積項的PLD基本都是由EEPROM和Flash工藝制造的,一上電就可以工作,無需其他芯片配合。
PGA的基本工作原理
FPGA是在PAL、GAL、EPLD、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為ASIC領(lǐng)域中的一種半定制電路而出現(xiàn)的,即解決了定制電路的不足,又克服了原有可編程器件門電路有限的缺點。
由于FPGA需要被反復(fù)燒寫,它實現(xiàn)組合邏輯的基本結(jié)構(gòu)不可能像ASIC那樣通過固定的與非門來完成,而只能采用一種易于反復(fù)配置的結(jié)構(gòu)。查找表可以很好地滿足這一要求,目前主流FPGA都采用了基于SRAM工藝的查找表結(jié)構(gòu),也有一些軍品和宇航級FPGA采用Flash或者熔絲與反熔絲工藝的查找表結(jié)構(gòu)。通過燒寫文件改變查找表內(nèi)容的方法來實現(xiàn)對FPGA的重復(fù)配置。
根據(jù)數(shù)字電路的基本知識可以知道,對于一個n輸入的邏輯運算,不管是與或非運算還是異或運算等等,最多只可能存在2n種結(jié)果。所以如果事先將相應(yīng)的結(jié)果存放于一個存貯單元,就相當(dāng)于實現(xiàn)了與非門電路的功能。FPGA的原理也是如此,它通過燒寫文件去配置查找表的內(nèi)容,從而在相同的電路情況下實現(xiàn)了不同的邏輯功能。
查找表的原理與結(jié)構(gòu)
查找表(Look-Up-Table)簡稱為LUT,LUT本質(zhì)上就是一個RAM。目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的的RAM。當(dāng)用戶通過原理圖或HDL語言描述了一個邏輯電路以后,
PLD/FPGA開發(fā)軟件會自動計算邏輯電路的所有可能結(jié)果,并把真值表(即結(jié)果)事先寫入RAM,這樣,每輸入一個信號進(jìn)行邏輯運算就等于輸入一個地址進(jìn)行查表,找出地址對應(yīng)的內(nèi)容,然后輸出即可。
下面給出一個四輸入與非門電路的例子來說明LUT實現(xiàn)邏輯功能的原理。
表給出一個使用LUT實現(xiàn)四輸入與門電路的真值表。
表 輸入與門的真值表
從中可以看到,LUT具有和邏輯電路相同的功能。實際上,LUT具有更快的執(zhí)行速度和更大的規(guī)模。
3.1.2查找表結(jié)構(gòu)的FPGA邏輯實現(xiàn)原理
我們還是以這個電路的為例:
圖 四輸入與門電路圖
A,B,C,D由FPGA芯片的管腳輸入后進(jìn)入可編程連線,然后作為地址線連到到LUT,LUT中已經(jīng)事先寫入了所有可能的邏輯結(jié)果,通過地址查找到相應(yīng)的數(shù)據(jù)然后輸出,這樣組合邏輯就實現(xiàn)了。該電路中D觸發(fā)器是直接利用LUT后面D觸發(fā)器來實現(xiàn)。時鐘信號CLK由I/O腳輸入后進(jìn)入芯片內(nèi)部的時鐘專用通道,直接連接到觸發(fā)器的時鐘端。觸發(fā)器的輸出與I/O腳相連,把結(jié)果輸出到芯片管腳。這樣PLD就完成了圖所示電路的功能。(以上這些步驟都是由軟件自動完成的,不需要人為干預(yù))
這個電路是一個很簡單的例子,只需要一個LUT加上一個觸發(fā)器就可以完成。對于一個LUT無法完成的的電路,就需要通過進(jìn)位邏輯將多個單元相連,這樣FPGA就可以實現(xiàn)復(fù)雜的邏輯。
因為基于LUT的FPGA具有很高的集成度,其器件密度從數(shù)萬門到數(shù)千萬門不等,可以完成極其復(fù)雜的時序與邏輯組合邏輯電路功能,所以適用于高速、高密度的高端數(shù)字邏輯電路設(shè)計領(lǐng)域。其組成部分主要有可編程輸入/輸出單元、基本可編程邏輯單元、內(nèi)嵌SRAM、豐富的布線資源、底層嵌入功能單元、內(nèi)嵌專用單元等,主要設(shè)計和生產(chǎn)廠家有Xilinx、Altera、Lattice、Actel、Atmel和QuickLogic等公司,其中最大的是Xilinx、Altera、Lattice三家。
4、比較Xilinx和Altera
要比較Xilinx和Altera的FPGA,就要清楚兩個大廠FPGA的結(jié)構(gòu),由于各自設(shè)計的不同,兩家的FPGA結(jié)構(gòu)各不相同,參數(shù)也各不相同,但可以統(tǒng)一到LUT(Look-Up-Table)查找表上。
下圖就是A家的Cyclone IV系列片子的參數(shù):
Altera Cyclone IV 系列資源比較
可以看到,A家的片子,用的是LE這個術(shù)語。
而下圖是X家的Spartan-6 片子資料:
Xilinx Spartan-6 系列資源比較
X家用的是CLB這個術(shù)語作為基本單元。
再看看兩家的基本單元有何不同:
A家的LE如下圖:
Cyclone LE 結(jié)構(gòu)
就是一個4輸入LUT+FF構(gòu)成
而X家的CLB如下:
xilinx CLB 結(jié)構(gòu)
一個CLB由2個SLICE構(gòu)成,一個SLICE含有4個6輸入LUT,所以LUT=8*CLB。
Xilinx CLB 包含的 Slices LUT FF
這樣的話,可以較比一下。EP4CE6基本就和XC6SLX9一個級別。。。。當(dāng)然A家的片子是4輸入LUT遠(yuǎn)比不上X家的6輸入LUT。而X家的S-6片子,一個Slice內(nèi)部有4個lut,8個FF。簡而言之,一個Slice=四個LE。要注意的是A家C5以下的片子是4輸入LUT而X家的是6輸入LUT,差別也較大。如果不考慮FF,那么一個X家的slice=4個A家的LE。例如XC6SLX16含有2278個slices=EP4CE10(9000LE)的樣子。當(dāng)然,S-6的FF多一倍,達(dá)到了18224個。
在Virtex-5中(我們的設(shè)計大部分是Virtex,V5V6V7),一個Slice包含了4個LUT和4個FF。所以單純從邏輯資源來看,S-6一個Slice比V-5的Slice強。當(dāng)然V5的GTPGTX等等還有IO數(shù)量是S-6趕不上的。當(dāng)然,A家的Cyclone V系列的片子,內(nèi)部和前幾代完全不同,采用了從高端的Stratix系列下放的技術(shù).
5、分布式RAM和Block ram
以下分析基于xilinx 7系列
CLB是xilinx基本邏輯單元,每個CLB包含兩個slices,每個slices由4個(A,B,C,D)6輸入LUT和8個寄存器組成。
同一CLB中的兩片slices沒有直接的線路連接,分屬于兩個不同的列。每列擁有獨立的快速進(jìn)位鏈資源。
slice分為兩種類型 SLICEL, SLICEM . SLICEL可用于產(chǎn)生邏輯,算術(shù),ROM。 SLICEM除以上作用外還可配置成分布式RAM或32位的移位寄存器。每個CLB可包含兩個SLICEL或者一個SLICEL與一個SLICEM.
7系列的LUT包含6個輸入 A1 -A6 , 兩個輸出 O5 , O6 .
可配置成6輸入查找表,O6此時作為輸出?;蛘邇蓚€5輸入的查找表,A1-A5作為輸入 A6拉高,O5,O6作為輸出。
一個LUT包含6個輸入,邏輯容量為2^6bit,為實現(xiàn)7輸入邏輯需要2^7容量,對于更多輸入也一樣。每個SLICES有4個LUT,256bit容量能夠?qū)崿F(xiàn)最多8bit輸入的邏輯。為了實現(xiàn)此功能,每個SLICES還包括3個MUX(多路選擇器)
F7AMUX 用于產(chǎn)生7輸入的邏輯功能,用于連接A,B兩個LUT
F7BMUX 用于產(chǎn)生7輸入的邏輯功能, 用于連接C,D兩個LUT
F8MUX 用于產(chǎn)生8輸入的邏輯功能, 用于連接4個LUT
對于大于8輸入的邏輯需要使用多個SLICES, 會增加邏輯實現(xiàn)的延時。
一個SLICES中的4個寄存器可以連接LUT或者M(jìn)UX的輸出,或者被直接旁路不連接任何邏輯資源。寄存器的置位/復(fù)位端為高電平有效。只有CLK端能被設(shè)置為兩個極性,其他輸入若要改變電平需要插入邏輯資源。例如低電平復(fù)位需要額外的邏輯資源將rst端輸入取反。但設(shè)為上升/下降沿觸發(fā)寄存器不會帶來額外消耗。
分布式RAM
SLICEM可以配置成分布式RAM,一個SLICEM可以配置成以下容量的RAM
多bit的情況需要增加相應(yīng)倍數(shù)的LUT進(jìn)行并聯(lián)。
分布式RAM和 BLOCK RAM的選擇遵循以下方法:
1. 小于或等于64bit容量的的都用分布式實現(xiàn)
2. 深度在64~128之間的,若無額外的block可用分布式RAM。要求異步讀取就使用分布式RAM。數(shù)據(jù)寬度大于16時用block ram。
3. 分布式RAM有比block ram更好的時序性能。 分布式RAM在邏輯資源CLB中。而BLOCK RAM則在專門的存儲器列中,會產(chǎn)生較大的布線延遲,布局也受制約。
移位寄存器(SLICEM)
SLICEM中的LUT能在不使用觸發(fā)器的情況下設(shè)置成32bit的移位寄存器,4個LUT可級聯(lián)成128bit的移位寄存器。并且能夠進(jìn)行SLICEM間的級聯(lián)形成更大規(guī)模的移位寄存器。
MUX
一個LUT可配置成4:1MUX.
兩個LUT可配置成最多8:1 MUX
四個LUT可配置成16個MUX
同樣可以通過連接多個SLICES達(dá)成更大規(guī)模設(shè)計,但是由于SLICE沒有直接連線,需要使用布線資源,會增加較大延遲。
進(jìn)位鏈
每個SLICE有4bit的進(jìn)位鏈。每bit都由一個進(jìn)位MUX(MUXCY)和一個異或門組成,可在實現(xiàn)加法/減法器時生成進(jìn)位邏輯。該MUXCY與XOR也可用于產(chǎn)生一般邏輯。
評論