FPGA組成、工作原理和開發(fā)流程
1. FPGA概述
本文引用地址:http://www.ex-cimer.com/article/201610/307821.htmFPGA是英文Field Programmable Gate Array的縮寫,即現(xiàn)場可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點
2. FPGA芯片結(jié)構(gòu)
FPGA芯片主要由三部分組成,分別是IOE(input output element,輸入輸出單元)、LAB(logic array block,邏輯陣列塊,對于Xilinx稱之為可配置邏輯塊CLB)和Interconnect(內(nèi)部連接線)。
2.1 IOE
IOE是芯片與外部電路的物理接口,主要完成不同電氣特性下輸入/輸出信號的驅(qū)動與匹配要求,比如從基本的LVTTL/LVCMOS接口到PCI/LVDS/RSDS甚至各種各樣的差分接口,從5V兼容到3.3V/2.5V/1.8V/1.5V的電平接口,下面是ALTERA公司的Cyclone IV EP4CE115F29設(shè)備的IOE結(jié)構(gòu)
圖1 EP4CE115F29設(shè)備的IOE結(jié)構(gòu)圖
FPGA的IOE按組分類,每組都能夠獨立地支持不同的I/O標(biāo)準(zhǔn),通過軟件的靈活配置,可匹配不同的電器標(biāo)準(zhǔn)與IO物理特性,而且可以調(diào)整驅(qū)動電流的大小,可以改變上/下拉電阻,Cyclone IV設(shè)備有8個IO blank(組),見下圖:
圖2 Cyclone IV設(shè)備的IO組
2.2 LAB
LAB是FPGA的基本邏輯單元,其實際的數(shù)量和特性依據(jù)所采用的器件的不同而不同,EP4CE115F29設(shè)備的每個LAB的布局包括16個LE、LAB控制信號、LE carry chains、Register chains和Local interconnect,其LAB結(jié)構(gòu)圖如下:
圖3 LAB結(jié)構(gòu)圖
LE是Cyclone IV設(shè)備最小的邏輯單元,每個LE主要有LUT和寄存器組成的,
圖4 LE的結(jié)構(gòu)圖
查找表LUT(Look-Up-Table)其本質(zhì)是一個靜態(tài)存儲器SRAM,目前FPGA多采用4輸入的LUT,每個LUT可以看作一個有4位地址線的16x1的RAM。當(dāng)我們通過原理圖或HDL語言描述了一個邏輯電路后,F(xiàn)PGA開發(fā)軟件會自動計算邏輯電路的所有可能的結(jié)果,并把結(jié)果事先寫入RAM。這樣,在FPGA工作時,每輸入一個信號進(jìn)行邏輯運算就等于輸入一個地址進(jìn)行查表,找出地址對應(yīng)的內(nèi)容,然后輸出。
圖5 LUT的實現(xiàn)原理圖
2.3 Interconnect
FPGA內(nèi)部連接線很豐富,根據(jù)數(shù)據(jù)手冊的描述,主要有圖3中的Row interconnect、column interconnect、Direct link interconnect、和Local interconnect和Register chain interconnect(寄存器之間連接的連接線)。
內(nèi)部連接線聯(lián)通FPGA內(nèi)部的所有單元,而連線的長度和工藝決定著信號再連接線上的驅(qū)動能力和傳輸速度。在實際開發(fā)中,設(shè)計者不需要直接選擇連接線,布局布線器可自動地根據(jù)輸入邏輯網(wǎng)表(這由綜合生成)的拓?fù)浣Y(jié)構(gòu)和約束條件選擇連接線來連通各個邏輯單元,所以,從本質(zhì)上來說,布線資源的使用方法和設(shè)計的結(jié)果有密切和直接、直接的關(guān)系。
3. FPGA工作原理
FPGA利用小型查找表(16×1RAM)來實現(xiàn)組合邏輯,每個查找表連接到一個D觸發(fā)器的輸入端(見圖4),觸發(fā)器再來驅(qū)動其他邏輯電路或驅(qū)動I/O,由此構(gòu)成了既可實現(xiàn)組合邏輯功能又可實現(xiàn)時序邏輯功能的基本邏輯單元模塊,這些模塊間利用金屬連線互相連接或連接到I/O模塊。FPGA的邏輯是通過向內(nèi)部靜態(tài)存儲單元加載編程數(shù)據(jù)來實現(xiàn)的,存儲在存儲器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O間的聯(lián)接方式,并最終決定了FPGA所能實現(xiàn)的功能,F(xiàn)PGA允許無限次的編程。
4. FPGA開發(fā)流程
原理圖和HDL(Hardware description language,硬件描述語言)是兩種最常用的數(shù)字硬件電路描述方法,其中HDL設(shè)計法具有更好的可移植性、通用性和模塊劃分與重用性的特點,在目前的工程設(shè)計中被廣泛使用,下面對FPGA設(shè)計熟悉電路時的開發(fā)流程是基于HDL的。
圖6 FPGA的開發(fā)流程
1) 系統(tǒng)功能設(shè)計
在系統(tǒng)設(shè)計之前,首先要進(jìn)行的是方案論證、系統(tǒng)設(shè)計和FPGA芯片選擇等準(zhǔn)備工作。系統(tǒng)工程師根據(jù)任務(wù)要求,如系統(tǒng)的指標(biāo)和復(fù)雜度,對工作速度和芯片本身的各種資源、成本等方面進(jìn)行權(quán)衡,選擇合理的設(shè)計方案和合適的器件類型。一般都采用自頂向下的設(shè)計方法,把系統(tǒng)分成若干個基本單元,然后再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。
2) RTL級HDL設(shè)計
RTL級(Register Transfer Level,寄存器傳輸級)指不關(guān)注寄存器和組合邏輯的細(xì)節(jié)(如使用了多少個邏輯門、邏輯門的連接拓?fù)浣Y(jié)構(gòu)等),通過描述數(shù)據(jù)在寄存器之間的流動和如何處理、控制這些數(shù)據(jù)流動的模型的HDL設(shè)計方法。RTL級比門級更抽象,同時也更簡單和高效。RTL級的最大特點是可以直接用綜合工具將其綜合成為門級網(wǎng)表,其中RTL級設(shè)計直接決定著系統(tǒng)的功能和效率。
3) RTL級仿真
也稱為功能(行為)仿真,或是綜合前仿真,是在編譯之前對用戶所設(shè)計的電路進(jìn)行邏輯功能驗證,此時的仿真沒有延遲信息,僅對初步的功能進(jìn)行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關(guān)心的輸入信號組合成序列),仿真結(jié)果將會生成報告文件和輸出信號波形,從中便可以觀察各個節(jié)點信號的變化。如果發(fā)現(xiàn)錯誤,則返回設(shè)計修改邏輯設(shè)計。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。雖然功能仿真不是FPGA開發(fā)過程中的必需步驟,但卻是系統(tǒng)設(shè)計中最關(guān)鍵的一步。
為了提高功能仿真的效率,需要建立測試平臺testbench,其測試激勵一般使用行為級HDL語言描述,其中RTL級模塊是可綜合的,它是行為級模塊的一個子集合。
4) 綜合
所謂綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。綜合優(yōu)化根據(jù)目標(biāo)與要求優(yōu)化所生成的邏輯連接,使層次設(shè)計平面化,供FPGA布局布線軟件進(jìn)行實現(xiàn)。就目前的層次來看,綜合優(yōu)化(Synthesis)是指將設(shè)計輸入編譯成由與門、或門、非門、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,而并非真實的門級電路。真實具體的門級電路需要利用FPGA制造商的布局布線功能,根據(jù)綜合后生成的標(biāo)準(zhǔn)門級結(jié)構(gòu)網(wǎng)表來產(chǎn)生。為了能轉(zhuǎn)換成標(biāo)準(zhǔn)的門級結(jié)構(gòu)網(wǎng)表,HDL程序的編寫必須符合特定綜合器所要求的風(fēng)格。由于門級結(jié)構(gòu)、RTL級的HDL程序的綜合是很成熟的技術(shù),所有的綜合器都可以支持到這一級別的綜合。常用的綜合工具有Synplicity公司的Synplify/Synplify Pro軟件以及各個FPGA廠家自己推出的綜合開發(fā)工具。
5) 門級仿真
也稱為綜合后仿真,綜合后仿真檢查綜合結(jié)果是否和原設(shè)計一致。在仿真時,把綜合生成的標(biāo)準(zhǔn)延時文件反標(biāo)注到綜合仿真模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線后的實際情況還有一定的差距,并不十分準(zhǔn)確。目前的綜合工具較為成熟,對于一般的設(shè)計可以省略這一步,但如果在布局布線后發(fā)現(xiàn)電路結(jié)構(gòu)和設(shè)計意圖不符,則需要回溯到綜合后仿真來確認(rèn)問題之所在。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。
6) 布局布線
實現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,將工程的邏輯和時序與器件的可用資源匹配。布局布線是其中最重要的過程,布局將邏輯網(wǎng)表中的硬件原語和底層單元合理地配置到芯片內(nèi)部的固有硬件結(jié)構(gòu)上,并且往往需要在速度最優(yōu)和面積最優(yōu)之間作出選擇。布線根據(jù)布局的拓?fù)浣Y(jié)構(gòu),利用芯片內(nèi)部的各種連線資源,合理正確地連接各個元件。也可以簡單地將布局布線理解為對FPGA內(nèi)部查找表和寄存器資源的合理配置,布局可以被理解挑選可實現(xiàn)設(shè)計網(wǎng)表的最優(yōu)的資源組合,而布線就是將這些查找表和寄存器資源以最優(yōu)方式連接起來。
目前,F(xiàn)PGA的結(jié)構(gòu)非常復(fù)雜,特別是在有時序約束條件時,需要利用時序驅(qū)動的引擎進(jìn)行布局布線。布線結(jié)束后,軟件工具會自動生成報告,提供有關(guān)設(shè)計中各部分資源的使用情況。由于只有FPGA芯片生產(chǎn)商對芯片結(jié)構(gòu)最為了解,所以布局布線必須選擇芯片開發(fā)商提供的工具。
7) 時序仿真
是指將布局布線的延時信息反標(biāo)注到設(shè)計網(wǎng)表中來檢測有無時序違規(guī)(即不滿足時序約束條件或器件固有的時序規(guī)則,如建立時間、保持時間等)現(xiàn)象。時序仿真包含的延遲信息最全,也最精確,能較好地反映芯片的實際工作情況。由于不同芯片的內(nèi)部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線后,通過對系統(tǒng)和各個模塊進(jìn)行時序仿真,分析其時序關(guān)系,估計系統(tǒng)性能,以及檢查和消除競爭冒險是非常有必要的。
8) FPGA板級調(diào)試
通過編程器將布局布線后的配置文件下載至FPGA中,對其硬件進(jìn)行編程。配置文件一般為.pof或.sof文件格式,下載的方式包括AS(主動)、PS(被動)、JTAG(邊界掃描)等方式。
邏輯分析儀(Logic Analyzer,LA)是FPGA設(shè)計的主要調(diào)試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA芯片生產(chǎn)商都提供了內(nèi)嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的SignalTapII以及SignalProb)來解決上述矛盾,它們只需要占用芯片少量的邏輯資源,具有很高的實用價值。
評論