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