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

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

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

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

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

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

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

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

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

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

一個CLB由2個SLICE構成,一個SLICE含有4個6輸入LUT,所以LUT=8*CLB。
Xilinx CLB 包含的 Slices LUT FF

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

slice分為兩種類型 SLICEL, SLICEM . SLICEL可用于產生邏輯,算術,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,為實現7輸入邏輯需要2^7容量,對于更多輸入也一樣。每個SLICES有4個LUT,256bit容量能夠實現最多8bit輸入的邏輯。為了實現此功能,每個SLICES還包括3個MUX(多路選擇器)
F7AMUX 用于產生7輸入的邏輯功能,用于連接A,B兩個LUT
F7BMUX 用于產生7輸入的邏輯功能, 用于連接C,D兩個LUT
F8MUX 用于產生8輸入的邏輯功能, 用于連接4個LUT
對于大于8輸入的邏輯需要使用多個SLICES, 會增加邏輯實現的延時。
一個SLICES中的4個寄存器可以連接LUT或者MUX的輸出,或者被直接旁路不連接任何邏輯資源。寄存器的置位/復位端為高電平有效。只有CLK端能被設置為兩個極性,其他輸入若要改變電平需要插入邏輯資源。例如低電平復位需要額外的邏輯資源將rst端輸入取反。但設為上升/下降沿觸發寄存器不會帶來額外消耗。
分布式RAM
SLICEM可以配置成分布式RAM,一個SLICEM可以配置成以下容量的RAM

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

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

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