可以毫不夸張的講,F(xiàn)PGA/CPLD能完成任何數(shù)字器件的功能,上至高性能CPU,下至簡(jiǎn)單的74電路,都可以用FPGA/CPLD來(lái)實(shí)現(xiàn)。
FPGA/CPLD如同一張白紙或是一堆積木,工程師可以通過(guò)傳統(tǒng)的原理圖輸入法,或是硬件描述語(yǔ)言自由的設(shè)計(jì)一個(gè)數(shù)字系統(tǒng)。通過(guò)軟件仿真,我們可以事先驗(yàn)證設(shè)計(jì)的正確性。在PCB完成以后,還可以利用FPGA/CPLD的在線修改能力,隨時(shí)修改設(shè)計(jì)而不必改動(dòng)硬件電路。
使用FPGA/CPLD來(lái)開(kāi)發(fā)數(shù)字電路,可以大大縮短設(shè)計(jì)時(shí)間,減少PCB面積,提高系統(tǒng)的可靠性。
FPGA/CPLD還可以做數(shù)字IC設(shè)計(jì)的前端驗(yàn)證,用這種方式可以很大程度上降低IC設(shè)計(jì)的成本。
FPGA/CPLD的這些優(yōu)點(diǎn)使得FPGA/CPLD技術(shù)在90年代以后得到飛速的發(fā)展,同時(shí)也大大推動(dòng)了EDA軟件和硬件描述語(yǔ)言(HDL)的進(jìn)步。
FPGA/CPLD有什么區(qū)別呢?
1)各個(gè)廠家叫法不盡相同:
PLD(Programmable Logic Device)是可編程邏輯器件的總稱,早期多EEPROM工藝,基于乘積項(xiàng)(Product Term)結(jié)構(gòu)。
FPGA (Field Programmable Gate Arry)是指現(xiàn)場(chǎng)可編程門(mén)陣列,最早由Xilinx公司發(fā)明。多為SRAM 工藝,基于查找表(Look Up Table)結(jié)構(gòu),要外掛配置用的EPROM。
Xilinx把SRAM工藝,要外掛配置用的EPROM的PLD叫FPGA,把Flash工藝(類似EEPROM工藝),乘積項(xiàng)結(jié)構(gòu)的PLD叫CPLD;
Altera把自己的PLD產(chǎn)品:MAX系列(EEPROM工藝),FLEX/ACEX/APEX系列(SRAM工藝)都叫作CPLD,即復(fù)雜PLD(Complex PLD)。
由于FLEX/ACEX/APEX系列也是SRAM工藝,要外掛配置用的EPROM,用法和Xilinx的FPGA一樣,所以很多人把Altera的FELX/ACEX/APEX系列產(chǎn)品也叫做FPGA.
2)結(jié)構(gòu)上的主要區(qū)別
邏輯塊的粒度不同
邏輯塊指PLD 芯片中按結(jié)構(gòu)劃分的功能模塊,它有相對(duì)獨(dú)立的組合邏輯陣列,塊間靠互連系統(tǒng)聯(lián)系.FPGA 中的CLB 是邏輯塊,其特點(diǎn)是粒度小,輸入變量為4~8 ,輸出為1~2 ,因而只是一個(gè)邏輯單元,每塊芯片中有幾十到近千個(gè)這樣的單元. CPLD中邏輯塊粒度較大,通常有數(shù)十個(gè)輸入端和一、二十個(gè)輸出端,每塊芯片只分成幾塊. 有些集成度較低的(如ATV2500) 則干脆不分塊. 顯然,如此粗大的分塊結(jié)構(gòu)使用時(shí)不如FPGA 靈活.
邏輯之間的互連結(jié)構(gòu)不同
CPLD 的邏輯塊互連是集總式的,其特點(diǎn)是等延時(shí),任意兩塊之間的延時(shí)是相等的,這種結(jié)構(gòu)給設(shè)計(jì)者帶來(lái)很大方便; FPGA 的互連則是分布式的,其延時(shí)與系統(tǒng)的布局有關(guān),
3)應(yīng)用范圍也有所不同
邏輯系統(tǒng)通??煞謨纱箢愋?
1、邏輯密集型: 如高速緩存控制、DRAM 控制和DMA 控制等,它們僅需要很少的數(shù)據(jù)處理能力,但邏輯關(guān)系一般都復(fù)雜
2、數(shù)據(jù)密集型: 數(shù)據(jù)密集型需要大量數(shù)據(jù)處理能力,其應(yīng)用多見(jiàn)于通訊領(lǐng)域.
為了選擇合適的PLD 芯片,應(yīng)從速度與性能、邏輯利用率、使用方便性、編程技術(shù)等方面進(jìn)行考查。
速度與性能:
數(shù)據(jù)密集型系統(tǒng),比如,通訊中對(duì)信號(hào)進(jìn)行處理的二維卷積器. 在實(shí)現(xiàn)這一算法的邏輯系統(tǒng)中,每個(gè)單元所需要的輸入端較少,但需要很多這樣的邏輯單元. 這些要求與FPGA 的結(jié)構(gòu)相吻合. 因?yàn)镕PGA 的粒度小,其輸入到輸出的傳輸延遲時(shí)間很短,因而能獲得高的單元速度.而控制密集型系統(tǒng)通常是輸入密集型的,邏輯復(fù)雜,CLB 的輸入端往往不夠用,需把多個(gè)CLB 串行級(jí)聯(lián)使用,同時(shí)CLB 之間的連接有可能通過(guò)多級(jí)通用PI 或長(zhǎng)線,導(dǎo)致速度急劇下降. 因而實(shí)際的傳輸延遲時(shí)間要大CPLD. 比如,實(shí)現(xiàn)一個(gè)DRAM 控制器,它由四個(gè)功能塊組成:刷新?tīng)顟B(tài)機(jī)、刷新地址計(jì)數(shù)器、刷新定時(shí)器和地址選擇開(kāi)關(guān),需要的輸入端有幾十個(gè),顯然用CPLD 更合適.
邏輯利用率:
邏輯利用率是指器件中資源被利用的程度. CPLD 邏輯寄存器少,FPGA 邏輯弱而寄存器多,這正好與控制密集型系統(tǒng)與數(shù)據(jù)密集型系統(tǒng)相對(duì)應(yīng). 比如, 規(guī)模同為6000PLD 門(mén)的is2pLSI1032 有192 個(gè)寄存器;而XC4005E 有616 個(gè)寄存器. 因此從邏輯利用率角度,對(duì)于組合電路較復(fù)雜的設(shè)計(jì),宜采用顆粒較粗的CPLD ,觸發(fā)器較多的設(shè)計(jì),宜采用用細(xì)顆粒的FPGA.
(3) 使用方便性: 使用方便首先要考慮性能的可預(yù)測(cè)性,在這點(diǎn)上CPLD 優(yōu)于FPGA. 對(duì)于CPLD ,通常只要輸入、輸出端口數(shù),內(nèi)部門(mén)和觸發(fā)器數(shù)目不超過(guò)芯片的資源并有一定裕量,總是可以實(shí)現(xiàn)的. 而FPGA ,則很難預(yù)測(cè),因?yàn)橥瓿稍O(shè)計(jì)所需的CLB 邏輯級(jí)數(shù)是無(wú)法事實(shí)確定的,只有靠多次試驗(yàn)才能得到滿意的結(jié)果.
(4) 編程技術(shù): FPGA 編程信息存放在外部存儲(chǔ)器,要附加存儲(chǔ)器芯片,其保密性差,斷電后數(shù)據(jù)易丟失. CPLD 采用最佳的E2CMOS 技術(shù)。
盡管FPGA和CPLD都是可編程ASIC器件,有很多共同特點(diǎn),但由于CPLD和FPGA結(jié)構(gòu)上的差異,具有各自的特點(diǎn):
①CPLD更適合完成各種算法和組合邏輯,FP GA更適合于完成時(shí)序邏輯。換句話說(shuō),FPGA更適合于觸發(fā)器豐富的結(jié)構(gòu),而CPLD更適合于觸發(fā)器有限而乘積項(xiàng)豐富的結(jié)構(gòu)。
②CPLD的連續(xù)式布線結(jié)構(gòu)決定了它的時(shí)序延遲是均勻的和可預(yù)測(cè)的,而FPGA的分段式布線結(jié)構(gòu)決定了其延遲的不可預(yù)測(cè)性。
③在編程上FPGA比CPLD具有更大的靈活性。CPLD通過(guò)修改具有固定內(nèi)連電路的邏輯功能來(lái)編程,FPGA主要通過(guò)改變內(nèi)部連線的布線來(lái)編程;FP GA可在邏輯門(mén)下編程,而CPLD是在邏輯塊下編程。
④FPGA的集成度比CPLD高,具有更復(fù)雜的布線結(jié)構(gòu)和邏輯實(shí)現(xiàn)。
⑤CPLD比FPGA使用起來(lái)更方便。CPLD的編程采用E2PROM或FASTFLASH技術(shù),無(wú)需外部存儲(chǔ)器芯片,使用簡(jiǎn)單。而FPGA的編程信息需存放在外部存儲(chǔ)器上,使用方法復(fù)雜。
⑥CPLD的速度比FPGA快,并且具有較大的時(shí)間可預(yù)測(cè)性。這是由于FPGA是門(mén)級(jí)編程,并且CLB之間采用分布式互聯(lián),而CPLD是邏輯塊級(jí)編程,并且其邏輯塊之間的互聯(lián)是集總式的。
⑦在編程方式上,CPLD主要是基于E2PROM或FLASH存儲(chǔ)器編程,編程次數(shù)可達(dá)1萬(wàn)次,優(yōu)點(diǎn)是系統(tǒng)斷電時(shí)編程信息也不丟失。CPLD又可分為在編程器上編程和在系統(tǒng)編程兩類。FPGA大部分是基于SRAM編程,編程信息在系統(tǒng)斷電時(shí)丟失,每次上電時(shí),需從器件外部將編程數(shù)據(jù)重新寫(xiě)入SRAM中。其優(yōu)點(diǎn)是可以編程任意次,可在工作中快速編程,從而實(shí)現(xiàn)板級(jí)和系統(tǒng)級(jí)的動(dòng)態(tài)配置。
⑧CPLD保密性好,FPGA保密性差。
⑨一般情況下,CPLD的功耗要比FPGA大,且集成度越高越明顯。
1.CPLD
CPLD主要是由可編程邏輯宏單元(LMC,Logic Macro Cell)圍繞中心的可編程互連矩陣單元組成,其中LMC邏輯結(jié)構(gòu)較復(fù)雜,并具有復(fù)雜的I/O單元互連結(jié)構(gòu),可由用戶根據(jù)需要生成特定的電路結(jié)構(gòu),完成一定的功能。由于 CPLD內(nèi)部采用固定長(zhǎng)度的金屬線進(jìn)行各邏輯塊的互連,所以設(shè)計(jì)的邏輯電路具有時(shí)間可預(yù)測(cè)性,避免了分段式互連結(jié)構(gòu)時(shí)序不完全預(yù)測(cè)的缺點(diǎn)。到90年代, CPLD發(fā)展更為迅速,不僅具有電擦除特性,而且出現(xiàn)了邊緣掃描及在線可編程等高級(jí)特性。較常用的有Xilinx公司的EPLD和Altera公司的 CPLD。
2. FPGA
FPGA通常包含三類可編程資源:可編程邏輯功能塊、可編程I/O塊和可編程互連。可編程邏輯功能塊是實(shí)現(xiàn)用戶功能的基本單元,它們通常排列成一個(gè)陣列,散布于整個(gè)芯片;可編程I/O塊完成芯片上邏輯與外部封裝腳的接口,常圍繞著陣列排列于芯片四周;可編程內(nèi)部互連包括各種長(zhǎng)度的連線線段和一些可編程連接開(kāi)關(guān),它們將各個(gè)可編程邏輯塊或I/O塊連接起矗?鉤商囟üδ艿牡緶貳2煌?Ъ疑??腇PGA在可編程邏輯塊的規(guī)模,內(nèi)部互連線的結(jié)構(gòu)和采用的可編程元件上存在較大的差異。較常用的有Altera、Xinlinx和Actel公司的FPGA。FPGA一般用于邏輯仿真。電路設(shè)計(jì)工程師設(shè)計(jì)一個(gè)電路首先要確定線路,然后進(jìn)行軟件模擬及優(yōu)化,以確認(rèn)所設(shè)計(jì)電路的功能及性能。然而隨著電路規(guī)模的不斷增大,工作頻率的不斷提高,將會(huì)給電路引入許多分布參數(shù)的影響,而這些影響用軟件模擬的方法較難反映出來(lái),所以有必要做硬件仿真。FPGA就可以實(shí)現(xiàn)硬件仿真以做成模型機(jī)。將軟件模擬后的線路經(jīng)一定處理后下載到FPGA,就可容易地得到一個(gè)模型機(jī),從該模型機(jī),設(shè)計(jì)者就很直觀地測(cè)試其邏輯功能及性能指標(biāo)。