詳解CPLD/FPGA架構與原理
可編程邏輯器件(Programmable Logic Device,PLD)起源于20世紀70年代,是在專用集成電路(ASIC)的基礎上發展起來的一種新型邏輯器件,是當今數字系統設計的主要硬件平臺,其主要特點就是完全由用戶通過軟件進行配置和編程,從而完成某種特定的功能,且可以反復擦寫。在修改和升級PLD時,不需額外地改變PCB電路板,只是在計算機上修改和更新程序,使硬件設計工作成為軟件開發工作,縮短了系統設計的周期,提高了實現的靈活性并降低了成本,因此獲得了廣大硬件工程師的青睞,形成了巨大的PLD產業規模。
本文引用地址:http://www.ex-cimer.com/article/202402/455683.htm目前常見的PLD產品有:編程只讀存儲器(Programmable Read Only Memory,PROM)、現場可編程邏輯陣列(Field Programmable Logic Array,FPLA)、可編程陣列邏輯(Programmable Array Logic,PAL)、通用陣列邏輯(Generic Array Logic,GAL)、可擦除的可編程邏輯器件(Erasable Programmable Logic Array,EPLA)、復雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)和現場可編程門陣列(Field Programmable Gate Array,FPGA)等類型。
PLD器件從規模上又可以細分為簡單PLD(SPLD)、復雜PLD(CPLD)以及FPGA,它們內部結構的實現方法各不相同。
可編程邏輯器件按照基本單元顆粒度可以分為3類:
· 小顆粒度(如:“門海(sea of gates)”架構)
· 中等顆粒度(如:FPGA)
· 大顆粒度(如:CPLD)
按照編程工藝可以分為四類:
· 熔絲(Fuse)和反熔絲(Antifuse)編程器件
· 可擦除的可編程只讀存儲器(UEPROM)編程器件
· 電信號可擦除的可編程只讀存儲器(EEPROM)編程器件(如:CPLD)
· SRAM編程器件(如:FPGA)
在工藝分類中,前3類為非易失性器件,編程后,配置數據保留在器件上;第4類為易失性器件,掉電后配置數據會丟失,因此在每次上電后需要重新進行數據配置。
可編程邏輯器件的發展歷史
可編程邏輯器件的發展可以劃分為4個階段,即從20世紀70年代初到70年代中為第1階段,20世紀70年代中到80年代中為第2階段,20世紀80年代到90年代末為第3階段,20世紀90年代末到目前為第4階段。
第1階段:可編程器件只有簡單的可編程只讀存儲器(PROM)、紫外線可擦除只讀存儲器(EPROM)和電可擦只讀存儲器(EEPROM)3種,由于結構的限制,它們只能完成簡單的數字邏輯功能。
第2階段:出現了結構上稍微復雜的可編程陣列邏輯(PAL)和通用陣列邏輯(GAL)器件,正式被稱為PLD,能夠完成各種邏輯運算功能。典型的PLD由“與”、“非”陣列組成,用“與或”表達式來實現任意組合邏輯,所以PLD能以乘積和形式完成大量的邏輯組合。
第3階段:Xilinx和Altera分別推出了與標準門陣列類似的FPGA和類似于PAL結構的擴展性CPLD,提高了邏輯運算的速度,具有體系結構和邏輯單元靈活、集成度高以及適用范圍寬等特點,兼容了PLD和通用門陣列的優點,能夠實現超大規模的電路,編程方式也很靈活,成為產品原型設計和中小規模(一般小于10000)產品生產的首選。這一階段,CPLD、FPGA器件在制造工藝和產品性能都獲得長足的發展,達到了0.18工藝和系數門數百萬門的規模。
第4階段:出現了SOPC和SOC技術,是PLD和ASIC技術融合的結果,涵蓋了實時化數字信號處理技術、高速數據收發器、復雜計算以及嵌入式系統設計技術的全部內容。Xilinx和Altera也推出了相應SOCFPGA產品,制造工藝達到65 ,系統門數也超過百萬門。并且,這一階段的邏輯器件內嵌了硬核高速乘法器、Gbits差分串行接口、時鐘頻率高達500MHz的PowerPC微處理器、軟核MicroBlaze、Picoblaze、Nios以及NiosII,不僅實現了軟件需求和硬件設計的完美結合,還實現了高速與靈活性的完美結合,使其已超越了ASIC器件的性能和規模,也超越了傳統意義上FPGA的概念,使PLD的應用范圍從單片擴展到系統級。目前,基于PLD片上可編程的概念仍在進一步向前發展。
開發工具
基于高復雜度PLD器件的開發,在很大程度上要依靠電子設計自動化(EDA)來完成。PLD的EDA工具以計算機軟件為主,將典型的單元電路封裝起來形成固定模塊并形成標準的硬件開發語言(如HDL語言)供設計人員使用,設計人員考慮如何將可組裝的軟件庫和軟件包搭建出滿足需求的功能模塊甚至完整的系統。
PLD開發軟件需要自動地完成邏輯編譯、化簡、分割、綜合及優化、布局布線、仿真以及對于特定目標芯片的適配編譯和編程下載等工作。典型的EDA工具中必須包含兩個特殊的軟件包,即綜合器和適配器。綜合器的功能就是將設計者在EDA平臺上完成的針對某個系統項目的HDL、原理圖或狀態圖形描述,針對給定的硬件系統組件,進行編譯、優化、轉換和綜合。
隨著開發規模的級數性增長,就必須減短PLD開發軟件的編譯時間、并提高其編譯性能以及提供豐富的知識產權(IP)核資源供設計人員調用。此外,PLD開發界面的友好性以及操作的復雜程度也是評價其性能的重要因素。目前在PLD產業領域中,各個芯片提供商的PLD開發工具已成為影響其成敗的核心成分。
只有全面做到芯片技術領先、文檔完整和PLD開發軟件優秀,芯片提供商才能獲得客戶的認可。一個完美的PLD開發軟件應當具備下面5點:
· 準確地將用戶設計轉換為電路模塊
· 能夠高效地利用器件資源
· 能夠快速地完成編譯和綜合
· 提供豐富的IP資源
· 用戶界面友好、操作簡單
CPLD工作原理與簡介
基于乘積項(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工藝制造的,一上電就可以工作,無需其他芯片配合。
FPGA工作原理與簡介
如前所述,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,這樣每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,找出地址對應的內容,然后輸出即可。
下面給出一個4與門電路的例子來說明LUT實現邏輯功能的原理。
例:給出一個使用LUT實現4輸入與門電路的真值表。
表1-1 4輸入與門的真值表
從中可以看到,LUT具有和邏輯電路相同的功能。實際上,LUT具有更快的執行速度和更大的規模。
由于基于LUT的FPGA具有很高的集成度,其器件密度從數萬門到數千萬門不等,可以完成極其復雜的時序與邏輯組合邏輯電路功能,所以適用于高速、高密度的高端數字邏輯電路設計領域。其組成部分主要有可編程輸入/輸出單元、基本可編程邏輯單元、內嵌SRAM、豐富的布線資源、底層嵌入功能單元、內嵌專用單元等,主要設計和生產廠家有Xilinx、Altera、Lattice、Actel、Atmel和QuickLogic等公司,其中最大的是Xilinx、Altera、Lattice三家。
如前所述,FPGA是由存放在片內的RAM來設置其工作狀態的,因此工作時需要對片內RAM進行編程。用戶可根據不同的配置模式,采用不同的編程方式。FPGA有如下幾種配置模式:
· 并行模式:并行PROM、Flash配置FPGA;
· 主從模式:一片PROM配置多片FPGA;
· 串行模式:串行PROM配置FPGA;
· 外設模式:將FPGA作為微處理器的外設,由微處理器對其編程。
目前,FPGA市場占有率最高的兩大公司Xilinx和Altera生產的FPGA都是基于SRAM工藝的,需要在使用時外接一個片外存儲器以保存程序。上電時,FPGA將外部存儲器中的數據讀入片內RAM,完成配置后,進入工作狀態;掉電后FPGA恢復為白片,內部邏輯消失。這樣FPGA不僅能反復使用,還無需專門的FPGA編程器,只需通用的EPROM、PROM編程器即可。Actel、QuickLogic等公司還提供反熔絲技術的FPGA,只能下載一次,具有抗輻射、耐高低溫、低功耗和速度快等優點,在軍品和航空航天領域中應用較多,但這種FPGA不能重復擦寫,開發初期比較麻煩,費用也比較昂貴。Lattice是ISP技術的發明者,在小規模PLD應用上有一定的特色。早期的Xilinx產品一般不涉及軍品和宇航級市場,但目前已經有Q Pro-R等多款產品進入該類領域。
FPGA芯片結構
目前主流的FPGA仍是基于查找表技術的,已經遠遠超出了先前版本的基本性能,并且整合了常用功能(如RAM、時鐘管理和DSP)的硬核(ASIC型)模塊。如圖1-1所示(注:圖1-1只是一個示意圖,實際上每一個系列的FPGA都有其相應的內部結構),FPGA芯片主要由6部分完成,分別為:可編程輸入輸出單元、基本可編程邏輯單元、完整的時鐘管理、嵌入塊式RAM、豐富的布線資源、內嵌的底層功能單元和內嵌專用硬件模塊。
圖1-1 FPGA芯片的內部結構
每個模塊的功能如下:
1. 可編程輸入輸出單元(IOB)
可編程輸入/輸出單元簡稱I/O單元,是芯片與外界電路的接口部分,完成不同電氣特性下對輸入/輸出信號的驅動與匹配要求,其示意結構如圖1-2所示。FPGA內的I/O按組分類,每組都能夠獨立地支持不同的I/O標準。通過軟件的靈活配置,可適配不同的電氣標準與I/O物理特性,可以調整驅動電流的大小,可以改變上、下拉電阻。目前,I/O口的頻率也越來越高,一些高端的FPGA通過DDR寄存器技術可以支持高達2Gbps的數據速率。
圖1-2 典型的IOB內部結構示意圖
外部輸入信號可以通過IOB模塊的存儲單元輸入到FPGA的內部,也可以直接輸入FPGA 內部。當外部輸入信號經過IOB模塊的存儲單元輸入到FPGA內部時,其保持時間(Hold Time)的要求可以降低,通常默認為0。
為了便于管理和適應多種電器標準,FPGA的IOB被劃分為若干個組(bank),每個bank的接口標準由其接口電壓VCCO決定,一個bank只能有一種VCCO,但不同bank的VCCO可以不同。只有相同電氣標準的端口才能連接在一起,VCCO電壓相同是接口標準的基本條件。
2. 可配置邏輯塊(CLB)
CLB是FPGA內的基本邏輯單元。CLB的實際數量和特性會依器件的不同而不同,但是每個CLB都包含一個可配置開關矩陣,此矩陣由4或6個輸入、一些選型電路(多路復用器等)和觸發器組成。開關矩陣是高度靈活的,可以對其進行配置以便處理組合邏輯、移位寄存器或RAM。在Xilinx公司的FPGA器件中,CLB由多個(一般為4個或2個)相同的Slice和附加邏輯構成,如圖1-3所示。每個CLB模塊不僅可以用于實現組合邏輯、時序邏輯,還可以配置為分布式RAM和分布式ROM。
圖1-3 典型的CLB結構示意圖
Slice是Xilinx公司定義的基本邏輯單位,其內部結構如圖1-4所示,一個Slice由兩個4輸入的函數、進位邏輯、算術邏輯、存儲邏輯和函數復用器組成。算術邏輯包括一個異或門(XORG)和一個專用與門(MULTAND),一個異或門可以使一個Slice實現2bit全加操作,專用與門用于提高乘法器的效率;進位邏輯由專用進位信號和函數復用器(MUXC)組成,用于實現快速的算術加減法操作;4輸入函數發生器用于實現4輸入LUT、分布式RAM或16比特移位寄存器(Virtex-5系列芯片的Slice中的兩個輸入函數為6輸入,可以實現6輸入LUT或64比特移位寄存器);進位邏輯包括兩條快速進位鏈,用于提高CLB模塊的處理速度。
圖1-4 典型的4輸入Slice結構示意圖
3. 數字時鐘管理模塊(DCM)
業內大多數FPGA均提供數字時鐘管理(Xilinx的全部FPGA均具有這種特性)。Xilinx推出最先進的FPGA提供數字時鐘管理和相位環路鎖定。相位環路鎖定能夠提供精確的時鐘綜合,且能夠降低抖動,并實現過濾功能。
4. 嵌入式塊RAM(BRAM)
大多數FPGA都具有內嵌的塊RAM,這大大拓展了FPGA的應用范圍和靈活性。塊RAM可被配置為單端口RAM、雙端口RAM、內容地址存儲器(CAM)以及FIFO等常用存儲結構。RAM、FIFO是比較普及的概念,在此就不冗述。CAM存儲器在其內部的每個存儲單元中都有一個比較邏輯,寫入CAM中的數據會和內部的每一個數據進行比較,并返回與端口數據相同的所有數據的地址,因而在路由的地址交換器中有廣泛的應用。除了塊RAM,還可以將FPGA中的LUT靈活地配置成RAM、ROM和FIFO等結構。在實際應用中,芯片內部塊RAM的數量也是選擇芯片的一個重要因素。
單片塊RAM的容量為18k比特,即位寬為18比特、深度為1024,可以根據需要改變其位寬和深度,但要滿足兩個原則:首先,修改后的容量(位寬、深度)不能大于18k比特;其次,位寬最大不能超過36比特。當然,可以將多片塊RAM級聯起來形成更大的RAM,此時只受限于芯片內塊RAM的數量,而不再受上面兩條原則約束。
5. 豐富的布線資源
布線資源連通FPGA內部的所有單元,而連線的長度和工藝決定著信號在連線上的驅動能力和傳輸速度。FPGA芯片內部有著豐富的布線資源,根據工藝、長度、寬度和分布位置的不同而劃分為4類不同的類別。
· 第一類是全局布線資源,用于芯片內部全局時鐘和全局復位/置位的布線;
· 第二類是長線資源,用以完成芯片Bank間的高速信號和第二全局時鐘信號的布線;
· 第三類是短線資源,用于完成基本邏輯單元之間的邏輯互連和布線;
· 第四類是分布式的布線資源,用于專有時鐘、復位等控制信號線。
在實際中設計者不需要直接選擇布線資源,布局布線器可自動地根據輸入邏輯網表的拓撲結構和約束條件選擇布線資源來連通各個模塊單元。從本質上講,布線資源的使用方法和設計的結果有密切、直接的關系。
6. 底層內嵌功能單元
內嵌功能模塊主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等軟處理核(Soft Core)?,F在越來越豐富的內嵌功能單元,使得單片FPGA成為了系統級的設計工具,使其具備了軟硬件聯合設計的能力,逐步向SOC平臺過渡。
DLL和PLL具有類似的功能,可以完成時鐘高精度、低抖動的倍頻和分頻,以及占空比調整和移相等功能。Xilinx公司生產的芯片上集成了DLL,Altera公司的芯片集成了PLL,Lattice公司的新型芯片上同時集成了PLL和DLL。PLL和DLL可以通過IP核生成的工具方便地進行管理和配置。DLL的結構如圖1-5所示。
圖1-5 典型的DLL模塊示意圖
7. 內嵌專用硬核
內嵌專用硬核是相對底層嵌入的軟核而言的,指FPGA處理能力強大的硬核(Hard Core),等效于ASIC電路。為了提高FPGA性能,芯片生產商在芯片內部集成了一些專用的硬核。例如:為了提高FPGA的乘法速度,主流的FPGA中都集成了專用乘法器;為了適用通信總線與接口標準,很多高端的FPGA內部都集成了串并收發器(SERDES),可以達到數十Gbps的收發速度。
Xilinx公司的高端產品不僅集成了Power PC系列CPU,還內嵌了DSP Core模塊,其相應的系統級設計工具是EDK和Platform Studio,并依此提出了片上系統(System on Chip)的概念。通過PowerPC、Miroblaze、Picoblaze等平臺,能夠開發標準的DSP處理器及其相關應用,達到SOC的開發目的。
軟核、硬核以及固核的概念
IP(Intelligent Property)核是具有知識產權核的集成電路芯核總稱,是經過反復驗證過的、具有特定功能的宏模塊,與芯片制造工藝無關,可以移植到不同的半導體工藝中。到了SOC階段,IP核設計已成為ASIC電路設計公司和FPGA提供商的重要任務,也是其實力體現。對于FPGA開發軟件,其提供的IP核越豐富,用戶的設計就越方便,其市場占用率就越高。目前,IP核已經變成系統設計的基本單元,并作為獨立設計成果被交換、轉讓和銷售。
從IP核的提供方式上,通常將其分為軟核、硬核和固核這3類。從完成IP核所花費的成本來講,硬核代價最大;從使用靈活性來講,軟核的可復用使用性最高。
· 軟核:軟核在EDA設計領域指的是綜合之前的寄存器傳輸級(RTL)模型;具體在FPGA設計中指的是對電路的硬件語言描述,包括邏輯描述、網表和幫助文檔等。軟核只經過功能仿真,需要經過綜合以及布局布線才能使用。其優點是靈活性高、可移植性強,允許用戶自配置;缺點是對模塊的預測性較低,在后續設計中存在發生錯誤的可能性,有一定的設計風險。軟核是IP核應用最廣泛的形式。
· 固核:固核在EDA設計領域指的是帶有平面規劃信息的網表;具體在FPGA設計中可以看做帶有布局規劃的軟核,通常以RTL代碼和對應具體工藝網表的混合形式提供。將RTL描述結合具體標準單元庫進行綜合優化設計,形成門級網表,再通過布局布線工具即可使用。和軟核相比,固核的設計靈活性稍差,但在可靠性上有較大提高。目前,固核也是IP核的主流形式之一。
· 硬核:硬核在EDA設計領域指經過驗證的設計版圖;具體在FPGA設計中指布局和工藝固定、經過前端和后端驗證的設計,設計人員不能對其修改。不能修改的原因有兩個:首先是系統設計對各個模塊的時序要求很嚴格,不允許打亂已有的物理版圖;其次是保護知識產權的要求,不允許設計人員對其有任何改動。IP硬核的不許修改特點使其復用有一定的困難,因此只能用于某些特定應用,使用范圍較窄。
評論