如前所述,fpga是在pal、gal、epld、cpld等可編程器件的基礎(chǔ)上進一步發(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é)果存放于一個存貯單元,就相當于實現(xiàn)了與非門電路的功能。fpga的原理也是如此,它通過燒寫文件去配置查找表的內(nèi)容,從而在相同的電路情況下實現(xiàn)了不同的邏輯功能。
查找表(look-up-table)簡稱為lut,lut本質(zhì)上就是一個ram。目前fpga中多使用4輸入的lut,所以每一個lut可以看成一個有4位地址線的 的ram。 當用戶通過原理圖或hdl語言描述了一個邏輯電路以后,pld/fpga開發(fā)軟件會自動計算邏輯電路的所有可能結(jié)果,并把真值表(即結(jié)果)事先寫入ram,這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,找出地址對應(yīng)的內(nèi)容,然后輸出即可。
下面給出一個4與門電路的例子來說明lut實現(xiàn)邏輯功能的原理。
例1:給出一個使用lut實現(xiàn)4輸入與門電路的真值表。
表1 4輸入與門的真值表
從中可以看到,lut具有和邏輯電路相同的功能。實際上,lut具有更快的執(zhí)行速度和更大的規(guī)模。
由于基于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三家。
如前所述,fpga是由存放在片內(nèi)的ram來設(shè)置其工作狀態(tài)的,因此工作時需要對片內(nèi)ram進行編程。用戶可根據(jù)不同的配置模式,采用不同的編程方式。fpga有如下幾種配置模式:
并行模式:并行prom、flash配置fpga;
主從模式:一片prom配置多片fpga;
串行模式:串行prom配置fpga;
外設(shè)模式:將fpga作為微處理器的外設(shè),由微處理器對其編程。
目前,fpga市場占有率最高的兩大公司xilinx和altera生產(chǎn)的fpga都是基于sram工藝的,需要在使用時外接一個片外存儲器以保存程序。上電時,fpga將外部存儲器中的數(shù)據(jù)讀入片內(nèi)ram,完成配置后,進入工作狀態(tài);掉電后fpga恢復(fù)為白片,內(nèi)部邏輯消失。這樣fpga不僅能反復(fù)使用,還無需專門的fpga編程器,只需通用的eprom、prom編程器即可。actel、quicklogic等公司還提供反熔絲技術(shù)的fpga,只能下載一次,具有抗輻射、耐高低溫、低功耗和速度快等優(yōu)點,在軍品和航空航天領(lǐng)域中應(yīng)用較多,但這種fpga不能重復(fù)擦寫,開發(fā)初期比較麻煩,費用也比較昂貴。lattice是isp技術(shù)的發(fā)明者,在小規(guī)模pld應(yīng)用上有一定的特色。早期的xilinx產(chǎn)品一般不涉及軍品和宇航級市場,但目前已經(jīng)有q pro-r等多款產(chǎn)品進入該類領(lǐng)域。