現場可編程門陣列(FPGA)的出現大大壓縮了電子產品研發(fā)的周期和成本,由于FPGA器件具有高密度、低功耗、高速、高可靠性等優(yōu)點,在航空、航天、通信、工業(yè)控制等方面得到了大量應用。隨著FPGA應用領域的擴展以及重要性和復雜程度的提高,其可靠性問題變得越來越突出,因此對FPGA系統(tǒng)的測試需求變得尤為迫切。
目前FPGA測試技術的研究主要集中于對FPGA芯片資源的測試,通過編程覆蓋FPGA所有的邏輯資源[1,2]和連接資源,驗證每個單元基本邏輯功能的正確性,而無法對電路的整體行為進行有效的驗證。硬件描述語言(HDL)是FPGA電路設計的主要實現方式,和軟件一樣,HDL也是人腦思維的邏輯產物,同樣存在著不希望或不可接受的人為錯誤。隨著設計復雜程度的提高,由HDL引入的缺陷成為影響FPGA可靠運行的關鍵因素,對FPGA電路行為的測試成為提高系統(tǒng)質量和可靠性的重要環(huán)節(jié)。
MIN Y.H.提出了在FPGA系統(tǒng)中進行高層測試的必要性。高層測試即任何高于門級的測試,考慮的是高層描述,如HDL、狀態(tài)圖、功能塊圖等,通過高層測試發(fā)現設計中的缺陷,并在系統(tǒng)的開發(fā)階段充分考慮測試需求,指導系統(tǒng)設計。以此為基礎,先后提出了一系列具體的實施方法,如層次化的測試方法、基于電路功能或結構的測試方法、基于模擬的測試方法等。
1 研究背景
1.1 軟件測試技術概述
在IEEE的軟件工程標準術語中,軟件測試定義為使用人工和自動手段來運行或測試某個系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或找出預期結果與實際結果之間的差別。
按照測試級別,軟件測試包括單元測試、部件測試、配置項測試、系統(tǒng)測試等;按照測試方法,軟件測試可分為動態(tài)測試和靜態(tài)測試,動態(tài)測試又可分為黑盒測試和白盒測試。靜態(tài)測試包括了代碼審查、靜態(tài)分析、代碼走查等測試類型;動態(tài)測試包括邏輯測試、功能測試、性能測試、接口測試等測試類型。白盒測試通常采用以邏輯覆蓋衡量的結構性測試技術;黑盒測試通常采用包括功能分解、等價類劃分、邊界值分析等在內的功能性測試技術。
1.2 FPGA系統(tǒng)的特點
FPGA作為可編程邏輯器件,通過編程的方式(如HDL)將通用芯片配置成用戶需要的硬件數字電路,FPGA和軟件系統(tǒng)具有相似的結構和開發(fā)方式,HDL與軟件都是人腦思維邏輯的產物,具有相似的語法和失效機理。因此,將軟件測試的成熟技術用于FPGA測試,在理論和操作上均具有可行性。
但是,由于軟硬件系統(tǒng)本質上的不同,FPGA和軟件系統(tǒng)在測試要求上存在一定的差異,表1從開發(fā)方式、代碼執(zhí)行順序、受硬件影響程度、執(zhí)行結果的隨機性以及應用領域等方面,歸納了FPGA和軟件系統(tǒng)的不同之處。
2 FPGA特有測試要求
針對FPGA和軟件系統(tǒng)的差異,存在不同于軟件測試特有的測試要求,包括HDL代碼檢測要求、測試級別要求和時序測試用例設計要求等。
2.1 HDL代碼檢測要求
由于HDL代碼并行執(zhí)行并存在硬件環(huán)境的影響以及競爭、冒險等不確定結果,在白盒測試中具有不同于軟件測試的要求。一方面,不同于軟件的控制流和數據流,并行程序的時序和信號流是一對相互依存的信息,程序的邏輯狀態(tài)由二者共同確定。這就要求在測試中,既要依據信號流圖對組合邏輯進行驗證,還要依據時序圖分析時變信號的時序一致性。另一方面,硬件特征對運行結果的影響也是代碼檢測中需要考慮的因素。在編碼規(guī)范的制定上,應當充分考慮并行程序的特點,正確處理與硬件資源之間的關系,避免競爭、冒險等不確定結果的產生。
2.2 測試級別的要求
與傳統(tǒng)自底向上的電子設計技術不同,FPGA采用與軟件開發(fā)相同的自頂向下的設計方法。一個項目的開發(fā)過程,從系統(tǒng)的分解、RTL模型的建立、門級模型的產生,到最終的可以物理布線實現的底層電路,是一個從高抽象級別到低抽象級別的開發(fā)周期。在開發(fā)過程中,需要在每一階段分別進行行為仿真、功能仿真、門級時序仿真等仿真驗證,而在測試階段需要自底向上依次從門級、元件功能級到系統(tǒng)行為級進行測試。
2.3 時序測試用例設計要求
FPGA的并行運算和高響應速度的特性,使其在對高速時序邏輯的處理中得到廣泛應用。因此對FPGA系統(tǒng)功能、性能的測試中,不能僅僅局限于對穩(wěn)態(tài)輸入輸出的驗證,還需要驗證系統(tǒng)對時序信號的響應及輸出量隨時間變化正確性的判斷。因此在測試用例的設計中,需要對系統(tǒng)輸入、輸出的時間變化趨勢進行規(guī)定,并提供動態(tài)輸出信號的判斷準則,同時需要開發(fā)時序測試環(huán)境支持測試用例的執(zhí)行。
3 FPGA測試技術框架
3.1 測試級別
把抽象的實體結合成單個或統(tǒng)一實體的過程稱為綜合,FPGA系統(tǒng)的每一步開發(fā)過程都可以稱為一個綜合環(huán)節(jié),即將自然語言表示經過自然語言綜合轉換為HDL算法表示,再通過行為綜合轉換在寄存器傳輸(RTL)級,進一步通過邏輯綜合轉換為邏輯門的表示,最終通過結構綜合轉換為版圖表示。對于每一個綜合環(huán)節(jié),都對應響應的測試級別,FPGA測試的“V”模型如圖1所示。
與軟件測試一樣,在FPGA的開發(fā)階段,測試就扮演著驗證和確認的角色。但不同的是,FPGA的每一個綜合環(huán)節(jié)的輸出結果都是一種對設計的形式化表示方法,不但可以通過靜態(tài)的方法檢查驗證,而且有強大的仿真工具能夠支持在開發(fā)階段對各個綜合環(huán)節(jié)進行動態(tài)仿真驗證,這樣更有利于盡早發(fā)現缺陷,減少缺陷修改的成本。
而在測試階段,在真實環(huán)境下,自底向上依次進行門級、單元級、元件級和系統(tǒng)級測試,以分別對門級模型、RTL模型、行為模型和系統(tǒng)需求進行驗證。
(1)門級測試:驗證基本邏輯門的正確性。
(2)單元測試:FPGA的單元包括并行代碼塊,以及順序代碼中進程、函數和過程。在這一級別的測試中,對RTL模型規(guī)定的各單元功能、邏輯、接口等逐項進行測試。
(3)元件測試:在FPGA開發(fā)中,將具有一定功能和接口的電路封裝成的可復用單元稱為元件(component),通過對元件的例化和連接構成具有更復雜功能的元件,直到構成整個系統(tǒng)。在元件測試中,通過元件的輸入輸出接口,對元件的行為進行驗證。元件測試包括對元件集成的測試,從對最底層元件測試開始,是一個自底向上逐層集成的過程。
(4)系統(tǒng)測試:針對完整的FPGA系統(tǒng)的測試,驗證FPGA系統(tǒng)對規(guī)定的功能、性能等需求的滿足性。
在FPGA系統(tǒng)開發(fā)過程中,邏輯綜合和結構綜合過程基本通過綜合工具由計算機自動完成,開發(fā)者主要是依據仿真結果進行修改與優(yōu)化;而在自然語言綜合和行為綜合中,需要大量的人工介入,是缺陷引入的主要環(huán)節(jié),也是FPGA測試的重點。
3.2 測試類型
與軟件測試相同,FPGA測試可分為靜態(tài)測試和動態(tài)測試。靜態(tài)測試包括文檔審查、代碼審查、靜態(tài)分析、代碼走查等類型。在代碼審查中,除了進行軟件測試的相關檢查項外,還包括檢查代碼運行時序的正確性、代碼的魯棒性和代碼的可綜合性。而在代碼走查中,需要沿程序的時序和信號流兩個相關維度,驗證代碼的動態(tài)執(zhí)行情況。
動態(tài)測試不但沿用軟件測試中一般采用的邏輯測試、功能測試、性能測試、接口測試、強度測試、余量測試、安全性測試、恢復性測試、邊界測試、數據處理測試等,還包含FPGA系統(tǒng)特有的下載與配置測試、魯棒性測試等。
(1)下載與配置測試:測試系統(tǒng)是否能夠正確實現程序的下載和芯片的配置。一般需要進行不同目標芯片和編程方式的下載與配置測試,對可重構FPGA系統(tǒng)重構能力的測試。
(2)魯棒性測試:驗證系統(tǒng)能否避免干擾和沖突得到穩(wěn)定而可靠的輸出測試,一般需要測試輸出電平的穩(wěn)定性、輸出邏輯的確定性及系統(tǒng)抗電磁干擾的能力。
3.3 測試方法與測試環(huán)境
白盒測試和黑盒測試是軟件測試中的兩大方法,在FPGA測試中同樣適用。除此之外,由于嵌入式邏輯分析儀的支持,使得灰盒測試在FPGA測試中具有很好的應用前景。
(1)白盒測試是結構性測試方法,根據代碼的內部特征設計、選擇測試用例。FPGA的白盒測試一般在仿真環(huán)境下進行,可分為代碼仿真、門級仿真和時序仿真。代碼仿真不考慮硬件特性,輸出理想情況下源代碼執(zhí)行結果,具有直觀、速度快的特點,可以在設計的最初階段盡早發(fā)現問題;門級仿真是針對代碼綜合后生成的門級網表或是實現后生成的門級模型進行的仿真,可以檢驗綜合或實現后對系統(tǒng)或模塊功能的滿足性。時序在門級仿真的基礎上加入時延文件即時序仿真,時序仿真能夠比較真實地反映邏輯的時延與功能,但對于邏輯量大的系統(tǒng)耗時較長。
(2)黑盒測試是一種功能性測試方法,只測試產品對功能、性能等需求的滿足性,而不考慮產品的內部結構和處理過程。軟件測試中的測試方法和測試環(huán)境可以對FPGA中的組合邏輯進行有效的測試。而對于時序邏輯,測試環(huán)境還包含了對動態(tài)輸入、動態(tài)數據采集的支持,以及對采集數據的比較分析。在測試用例的設計中,規(guī)定系統(tǒng)輸入、輸出隨時間變化的趨勢,并對特殊的評價方法和通過準則進行定義。
(3)目前主流的FPGA開發(fā)工具都提供了嵌入式邏輯分析儀工具,使得灰盒測試成為了可能。嵌入式邏輯分析儀的原理是在FPGA真實運行環(huán)境內部,利用冗余的芯片資源,將預制的系統(tǒng)內部信號實時通過接口輸出。這樣就可以在軟件真實運行中,監(jiān)視軟件內部的信號、變量和狀態(tài),避免了由于輸入輸出域信息丟失以及容錯環(huán)節(jié)造成的代碼缺陷無法暴露的問題,提高了FPGA代碼的測試性[7]。
4 應用實例
以軟件測試為基礎的FPGA測試技術已經得到了成功的應用。對某數字調制解調系統(tǒng)進行了測試,該系統(tǒng)以Altera公司EP1C3T144芯片為宿主機,采用VHDL語言編寫,實現了偏移四相相移鍵控(OQPSK)的調制、解調功能。
測試項目組對該系統(tǒng)在元件級、系統(tǒng)級進行了測試,包括靜態(tài)分析、代碼審查、邏輯測試、功能測試、性能測試、邊界測試、魯棒性測試、安全性測試等測試類型,其中:
(1)靜態(tài)分析采用HDL Designer工具進行了編碼規(guī)則檢查,共分析出違反編碼規(guī)則43處,其中2處存在代碼問題,得到了正確的修改,25處影響了代碼的可讀性和維護性,提出改進建議,均進行了相應處理。
(2)代碼審查發(fā)現代碼問題4處,均為代碼和設計文檔不一致所造成,全部修改正確,并提出一處影響邏輯門資源使用效率的改進建議。
(3)元件測試采用Altera Modelsim工具在仿真環(huán)境下進行,共設計測試用例95個,全部執(zhí)行通過。
(4)系統(tǒng)測試環(huán)境由任意波形發(fā)生器Agilent 33250A、邏輯分析儀Agilent 16902B和示波器Agilent MS09404構成動態(tài)測試環(huán)境,如圖2所示,設計測試用例48個,其中33個規(guī)定了輸入、輸出信號的動態(tài)時序,測試用例全部執(zhí)行通過。
經過測試以及相應的修改和回歸,該FPGA系統(tǒng)代碼質量和可靠性得到了提高,系統(tǒng)功能、性能得到了驗證。
軟件測試技術在FPGA測試中的成功應用,有效解決了FPGA系統(tǒng)的測試問題。通過測試,提高了硬件描述語言的編寫質量和系統(tǒng)的可靠性,并對FPGA的電路行為進行了有效的驗證。動態(tài)測試時序測試用例的自動生成,以及系統(tǒng)輸出波形與預期的自動比較和判斷,將成為未來進一步研究的重點。隨著FPGA系統(tǒng)在各關鍵領域的進一步普及,以軟件測試為基礎的FPGA測試將具有更廣闊的應用前景。