田生宏 田培成
(西安理工大學高等技術學院,陜西 西安710082)
目前,大量使用的可編程邏輯器件是CPLD和FPGA,產品種類很多,均可實現任何數字邏輯功能。設計者可以利用CPLD和FPGA,通過原理圖輸入法或硬件描述語言設計一個數字系統,使之完成特定的功能,并且能運用軟件仿真的方法來驗證設計的正確性。CPLD和FPGA用于開發數字邏輯電路,可以縮短設計時間,減少集成電路數目和降低成本,極大地提高系統的可靠性。近年來,誕生了一些新型的CPLD和FPGA器件,集成度高,可以替代幾十甚至幾千塊通用IC芯片,其單片邏輯門數已達到上百萬門,可實現的邏輯功能也越來越強。
在可編程邏輯器件的發展過程中,不同廠家對新型PLD器件的叫法不盡相同,對CPLD和FPGA的分類標準也有差異,人們通常把基于乘積項技術和EEPROM工藝或Flash Memory工藝的器件稱為CPLD,把基于查找表技術和SRAM工藝的器件稱為FPGA(也有些資料將這兩種器件都稱為CPLD或都稱為FPGA)。這樣給使用和選擇帶來了不便甚至困惑,本文按一般的分類方法,分別介紹這兩種可編程邏輯器件各自的特點,以期給使用者以幫助。
CPLD是從SPLD發展而來的高密度PLD產品,目前CPLD的產品種類繁多,各具特色,但其構成基本相同。如圖1所示為CPLD的結構示意圖,它由若干個邏輯陣列塊(LAB)、可編程互連陣列(PIA)和可編程的輸入/輸出模塊(IOB)組成。

圖1 CPLD的結構示意圖
CPLD大都采用分區陣列結構,即將整個器件分成若干個邏輯陣列塊(Logic Array Block,LAB),每一個LAB實際上就是許多PAL/GAL陣列組成的SPLD組合,這些PAL/GAL陣列常被稱為宏單元(macro cell)。在通常情況下,每個宏單元包括可編程的與門陣列、乘積項選擇矩陣、或門陣列以及一個可編程的寄存器。根據器件類型的不同,CPLD中可以包含2~64個相同的LAB,可以容納上萬個等效的宏單元。
這些LAB經過內部的可編程互連陣列(Programmable Interconnect Array,PIA)進行互連,從而實現比較復雜的邏輯功能。
可編程的輸入/輸出模塊(Input/Output Block,IOB)允許每個I/O引腳單獨配置成輸入、輸出或雙向工作方式。所有I/O引腳都有一個三態緩沖器,它可以由某個全局輸出使能信號控制,也可以把使能端直接連接到地或電源上。
CPLD一般采用CMOS工藝和EEPROM或Flash Memory等先進技術、具有密度高、速度快和功耗低等性能。采用CPLD設計數字系統,可以使系統性能更優越。
現場可編程門陣列(FPGA)是另一種重要的可編程邏輯器件。FPGA在原理上與CPLD不同,FPGA的內部不使用PAL/GAL類型的邏輯,許多FPGA都使用查找表(Look-Up Table,LUT)這種存儲器型的邏輯塊,并包括小規模的門陣列和觸發器電路,代替了CPLD中的與或邏輯結構,同時,因為FPGA含有更多的邏輯塊,含有更多的互連單元,它使用與CPLD不同的可編程互連工藝,從而提供更靈活的布線功能,因而FPGA顯得更為靈活。
查找表本質上就是一個RAM。目前FPGA中多使用四輸入的LUT,所以每一個LUT可以看成一個有4位地址線的16×1的RAM。當用戶通過原理圖或HDL語言描述了一個邏輯電路以后,FPGA開發軟件會自動計算邏輯電路的所有可能的結果,并把結果事先寫入RAM。這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,找出地址對應的內容,然后輸出即可。
FPGA主要由可配置邏輯塊(Configurable Logic Block,CLB)、輸入/輸出模塊(Input/Output Block,IOB)和可編程互連線(Programmable Interconnect,PI)組成。
可配置邏輯塊(CLB)是FPGA的基本結構單元,能夠實現邏輯函數。CLB一般由函數發生器、數據選擇器、觸發器和信號變換電路等部分組成。例如,在Xilinx公司的Spartan-Ⅱ型號的FPGA中,一個CLB包括兩個SLICE(SLICE是組成CLB的基本單元),每個SLICE包括兩個LUT、兩個觸發器和相關邏輯。SLICE可以看成是Spartan-Ⅱ實現邏輯的最基本的結構。在通常情況下,FPGA中的邏輯單元通過查找表的功能來實現組合邏輯函數,查找表實際上取代了CPLD中與門/或門陣列。
輸入/輸出模塊(IOB)分布于器件四周,提供內部邏輯與外圍引腳間的連接。
可編程互連線(PI)由許多金屬線構成,以提供高速可靠的內部連接,將CLB之間、CLB和IOB之間連接起來構成復雜邏輯。
實際的FPGA中有很多個查找表用來配置可編程互連線的連接以及控制I/O引腳的連接。
CPLD和FPGA的產品種類較多,均能實現各種邏輯功能,用于開發各類數字系統,但它們又有各自的特點:
1)CPLD更適合完成各種算法和組合邏輯,FPGA更適合于完成時序邏輯。
2)在編程上FPGA比CPLD具有更大的靈活性。CPLD通過修改具有固定內連電路的邏輯功能來編程,FPGA主要通過改變內部連線的布線來編程;FPGA可在邏輯門上編程,而CPLD是在邏輯塊上編程。
3)FPGA的集成度比CPLD高,具有更復雜的布線結構,能實現更復雜的邏輯功能。
4)CPLD比FPGA使用起來更方便。CPLD的編程采用EEPROM或FLASH技術,無需外部存儲器芯片,使用簡單。而FPGA的編程信息需存放在外部存儲器上,使用方法復雜。
5)CPLD的速度比FPGA快,并且其傳輸時間具有較大的可預測性。這是由于FPGA是門級編程,并且基本邏輯單元之間采用分布式互聯;而CPLD是邏輯塊級編程,其內連電路是固定的。
6)在編程方式上,CPLD主要是基于EEPROM或FLASH存儲器編程,編程次數可達上萬次,優點是系統斷電時編程信息也不丟失。FPGA大部分是基于SRAM編程,編程信息在系統斷電時丟失,每次上電時,需從器件外部將編程數據重新寫入SRAM中。其優點是可以編程任意次,并可在工作中快速編程。
7)CPLD保密性好,FPGA保密性差。
因為CPLD和FPGA具有各自的特點,用CPLD和FPGA設計數字系統時需要不同的邏輯設計技巧。FPGA是細粒器件,其基本單元和路由結構都比CPLD的小,FPGA是“寄存器豐富”型器件(即其寄存器與邏輯門的比例高),而CPLD正好相反,它是“邏輯豐富”型的,很多設計人員偏愛CPLD是因為它簡單易用和高速的優點。CPLD更適合邏輯密集型應用,而FPGA則更適用于寄存器密集型設計。
數字系統的設計人員可以采用各種結構的芯片來完成同一邏輯功能,設計時需要在設計規模、速度、芯片價格及系統性能要求等方面進行平衡,選擇最佳結果。設計者選定CPLD或FPGA器件、確定硬件方案后,再根據設計要求,采用硬件描述語言VHDL對系統的邏輯功能進行描述與編程,然后利用專用軟件平臺進行編譯、仿真和測試,直至實現預期功能,完成設計。最后利用專用設備將編程代碼下載至器件中,即完成了系統樣機的制作。如何使用硬件描述語言進行PLD器件的設計,可查閱其它資料及有關書籍。