實際邏輯電路 | LUT的實現方式 | ||
![]() | ![]() | ||
a,b,c,d 輸入 | 邏輯輸出 | 地址 | RAM中存儲的內容 |
0000 | 0 | 0000 | 0 |
0001 | 0 | 0001 | 0 |
.... | 0 | ... | 0 |
1111 | 1 | 1111 | 1 |
二.基于查找表(LUT)的FPGA的結構
我們看一看xilinx Spartan-II的內部結構,如下圖:
xilinx Spartan-II 芯片內部結構

Slices結構
Spartan-II主要包括CLBs,I/O塊,RAM塊和可編程連線(未表示出)。在spartan-II中,一個CLB包括2個Slices,每個slices包括兩個LUT,兩個觸發(fā)器和相關邏輯。 Slices可以看成是SpartanII實現邏輯的最基本結構 (xilinx其他系列,如SpartanXL,Virtex的結構與此稍有不同,具體請參閱數據手冊)
altera的FLEX/ACEX等芯片的結構如下圖:
altera FLEX/ACEX 芯片的內部結構

邏輯單元(LE)內部結構
FLEX/ACEX的結構主要包括LAB,I/O塊,RAM塊(未表示出)和可編程行/列連線。在FLEX/ACEX中,一個LAB包括8個邏輯單元(LE),每個LE包括一個LUT,一個觸發(fā)器和相關的相關邏輯。LE是FLEX/ACEX芯片實現邏輯的最基本結構(altera其他系列,如APEX的結構與此基本相同,具體請參閱數據手冊)
二.查找表結構的FPGA邏輯實現原理
我們還是以這個電路的為例:
點擊瀏覽該文件
此主題相關圖片如下:
A,B,C,D由FPGA芯片的管腳輸入后進入可編程連線,然后作為地址線連到到LUT,LUT中已經事先寫入了所有可能的邏輯結果,通過地址查找到相應的數據然后輸出,這樣組合邏輯就實現了。 該電路中D觸發(fā)器是直接利用LUT后面D觸發(fā)器來實現。時鐘信號CLK由I/O腳輸入后進入芯片內部的時鐘專用通道,直接連接到觸發(fā)器的時鐘端。觸發(fā)器的輸出與I/O腳相連,把結果輸出到芯片管腳。這樣PLD就完成了圖3所示電路的功能。(以上這些步驟都是由軟件自動完成的,不需要人為干預)
這個電路是一個很簡單的例子,只需要一個LUT加上一個觸發(fā)器就可以完成。對于一個LUT無法完成的的電路,就需要通過進位邏輯將多個單元相連,這樣FPGA就可以實現復雜的邏輯。
由于LUT主要適合SRAM工藝生產,所以目前大部分FPGA都是基于SRAM工藝的,而SRAM工藝的芯片在掉電后信息就會丟失,一定需要外加一片專用配置芯片,在上電的時候,由這個專用配置芯片把數據加載到FPGA中,然后FPGA就可以正常工作,由于配置時間很短,不會影響系統(tǒng)正常工作。 也有少數FPGA采用反熔絲或Flash工藝,對這種FPGA,就不需要外加專用的配置芯片。
二.選擇PLD還是FPGA?
根據上一篇PLD的結構和原理可以知道,PLD分解組合邏輯的功能很強,一個宏單元就可以分解十幾個甚至20-30多個組合邏輯輸入。而FPGA的一個LUT只能處理4輸入的組合邏輯,因此,PLD適合用于設計譯碼等復雜組合邏輯。 但FPGA的制造工藝確定了FPGA芯片中包含的LUT和觸發(fā)器的數量非常多,往往都是幾千上萬,PLD一般只能做到512個邏輯單元,而且如果用芯片價格除以邏輯單元數量,FPGA的平均邏輯單元成本大大低于PLD。 所以如果設計中使用到大量觸發(fā)器,例如設計一個復雜的時序邏輯,那么使用FPGA就是一個很好選







