,,,
(北京化工大學 信息科學與技術學院,北京 100029)
集成電路測試是集成電路生產(chǎn)環(huán)節(jié)中的最后一道生產(chǎn)工序,為了保證集成電路的質量,測試在集成電路生產(chǎn)中具有非常重要的作用[1]。而測試軟件則是測試系統(tǒng)的核心,肩負著驅動整個測試系統(tǒng)硬件模塊的重要使命,是連接測試資源和被測器件的必不可少的中間介質[2]。
目前,美國、日本等國家的集成電路自動測試軟件IG-XL、SmartTest等具備了較為成熟的技術,均支持通用格式STIL和STDF并且提供軟件二次接口,具有良好的通用性和可擴展性,可以方便、快捷地完成測試程序的開發(fā)[3]。但其大部分基于Windows操作系統(tǒng)。目前國內集成電路軟件的開發(fā)與研究也處于發(fā)展之中,曹菲[4]基于PCIe總線技術設計并實現(xiàn)了一種通用數(shù)字集成電路測試系統(tǒng),該測試系統(tǒng)提供直流、交流、功能測試等多種測試需求,但測試軟件的測試程序是由測試碼生成的,存在對于使用者的編程能力有較高的要求的缺點。戴春翟[5]等設計了一款集成電路通用測試軟件,利用多層次、模塊化的軟件結構設計方法,令參數(shù)和測試程序互相分離,提高了測試的效率,但該軟件在測試數(shù)據(jù)存儲方面不支持通用的STDF格式存儲[5]。以上集成電路測試軟件的開發(fā)都是基于Windows系統(tǒng)的,對于硬件儀器的使用,只能調用Windows平臺支持的儀器驅動,具有一定的局限性,不能很好地滿足測試軟件的跨平臺測試需求。
Qt是一種C++圖形用戶界面應用程序開發(fā)框架,可在Windows、Linux等平臺下運行,并且具有良好的UI特性和豐富的API[6],可用來設計良好的界面并且滿足跨平臺的運行需求,因此可應用于集成電路測試軟件的開發(fā)。
本文基于Qt設計實現(xiàn)一款集成電路測試軟件。給出了測試參數(shù)配置、測試程序運行及測試結果管理3部分功能的設計與實現(xiàn)方法,并進行了實驗測試。
集成電路測試軟件由測試程序開發(fā)、測試程序運行和測試數(shù)據(jù)管理組成的。在集成電路的測試過程中會涉及到直流參數(shù)、功能測試等多種測試需求。測試中首先要對被測芯片的引腳信息進行定義,然后設置測試負載板上相應通道編號,將引腳通過測試負載板與測試儀器實現(xiàn)連接。同時,需要實現(xiàn)對測試機器資源的分配,即控制測試硬件產(chǎn)生必需的電壓、波形和時序需要的信息。最重要的一部分還涉及到測試向量數(shù)據(jù),包含施加到被測器件輸入端邏輯狀態(tài)和輸出端期望邏輯狀態(tài)。測試向量通常由仿真文件 (如 VCD、WGL等類型)通過自動轉換軟件將仿真文件轉換而來,也可由測試工程師編寫來完成[7]。
集成電路測試中需要對上述種類繁多,關系復雜的參數(shù)進行處理,因此采用界面層、引擎層和數(shù)據(jù)層3層架構對軟件進行設計。其中,采用模型/視圖/代理(MVD)的框架進行軟件界面層的設計。MVD是Qt在Model View Controller(MVC)的基礎上引入模型/視圖結構得來的[8],MVC是一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼的方式,MVD中把視圖和控制部件結合在一起,使得框架更為簡潔,通過使用該框架,能夠有效地分離數(shù)據(jù)和界面。測試軟件架構圖如圖1所示。
圖1 測試軟件架構圖
1) 軟件的最上層也就是界面層,界面層的最上層是視圖層,用于管理用戶和軟件的交互,利用Qt的UI特性,提供給用戶良好的操作使用界面,用戶可以通過在界面上對控件進行操作從而對測試參數(shù)進行配置和修改。測試參數(shù)配置、測試程序運行以及測試結果管理3部分的界面均采用列表的形式進行展現(xiàn),其中所涉及到的網(wǎng)格線、是否可以拖動,數(shù)據(jù)項的展示形式、列表的列寬、菜單的內容和樣式以及會使用到對話框的樣式和內容都在視圖層進行管理,均采用QTableView表格視圖來實現(xiàn)。
委托層處理的也是用戶的輸入,也就是把用戶的輸入委托給Qt的某個部件進行處理。對于在集成電路測試過程中需要用戶輸入的測試參數(shù)信息采用文本框輸入的方式進行處理,對于給出用戶可選項的信息采用下拉框的方式進行處理,對于可選的測試信息采用復選框的方式進行處理,此外還可以自定義委托,當用戶處理完這些輸入之后,將數(shù)據(jù)發(fā)送給數(shù)據(jù)模型層。
模型層有3個主要功能,首先,與引擎層進行通信,獲取數(shù)據(jù)信息;其次,開放數(shù)據(jù)訪問接口,委托層和視圖層通過模型索引訪問數(shù)據(jù)模型層的數(shù)據(jù);其三,該層還設置了數(shù)據(jù)的顯示方式,在集成電路測試軟件界面中可以被編輯的數(shù)據(jù)設置為Qt::EditRole,需要以文本形式顯示的數(shù)據(jù)則被設置為Qt::DisplayRole。
2) 引擎層的測試參數(shù)編輯引擎定義了數(shù)據(jù)模型層功能函數(shù)中真正的邏輯實現(xiàn),當數(shù)據(jù)模型層的函數(shù)被觸發(fā)時會調用引擎層定義的邏輯功能。運行引擎則實現(xiàn)了測試流程的解析。
3) 數(shù)據(jù)層則以數(shù)據(jù)表的形式實現(xiàn)了整個測試過程中所涉及到數(shù)據(jù)的存儲,分別對測試軟件用戶信息、測試參數(shù)信息、測試運行信息以及測試結果信息進行存儲。數(shù)據(jù)庫層直接和引擎層進行通信,數(shù)據(jù)庫層會提供數(shù)據(jù)給引擎層,引擎層最終對測試參數(shù)進行的修改會被更新到數(shù)據(jù)庫層的數(shù)據(jù)庫中。
測試參數(shù)配置需要完成對被測芯片的描述以及進行配置測試過程中所需要的參數(shù),這部分是完成測試的基礎。
為方便用戶的操作,測試參數(shù)配置部分采用模塊化的設計,測試中所需要的被測管腳信息、管腳通道映射、時序信息、電源信息、電平信息、向量信息等在界面的顯示上被分為不同的模塊。測試參數(shù)配置給用戶提供友好交互的向導界面,實現(xiàn)各模塊參數(shù)的配置。所以在程序的實現(xiàn)過程中,視圖層要提供設置測試內容的人機交互接口,需要進行配置的參數(shù)信息在界面上以列表的形式進行顯示,這部分在數(shù)據(jù)模型層中進行設置。對于具體參數(shù)值的設置是用戶進行輸入的,因此視圖層都是用于實現(xiàn)模塊人機交互部分的響應,即實現(xiàn)用戶點擊的引起的信號觸發(fā)以及對相應彈窗的觸發(fā),并獲取用戶輸入內容。
2.1.1 模塊間通信設計與實現(xiàn)
對于測試參數(shù)配置部分整體而言,其中的每個模塊都不是獨立的,很多模塊間存在著一定的聯(lián)系。為解決模塊間存在關聯(lián)的問題,在引擎層采用如圖2所示的實現(xiàn)方式。信號管腳模塊的CPin類當信號發(fā)生變動時通過Connect PinGroup (CPinStore* pPinStore, std::vector
圖2 模塊間關系圖
2.1.2 軟件二次接口開發(fā)
此外,由于用戶會有個性化的測試需求,測試參數(shù)配置部分提供二次開發(fā)接口功能,設置為用戶代碼模塊,在這個模塊用戶可實現(xiàn)對API函數(shù)的調用,通過將用戶代碼模塊配置到測試項中,實現(xiàn)用戶自定義的測試需求。
采用Lua作為用戶代碼的開發(fā)調試工具,因為Lua有著良好的可嵌入性[9],將Lua嵌入C++之后,如果對用戶代碼的修改均可以在Lua中進行,不用再重新編譯C++項目。集成電路測試軟件開發(fā)平臺作為宿主,Lua作為嵌入式腳本,嵌入到宿主語言中,為測試軟件提供自定義測試的功能,用C++編寫的API函數(shù)作為Lua的底層擴展庫,是Lua腳本訪問主要的功能函數(shù)。實現(xiàn)流程如圖3所示。
圖3 用戶代碼模塊流程圖
1) 用戶代碼模塊用于完成自定義測試功能的任務,該模塊運行時會加載用戶自定義的測試。
2) 調用Lua語言提供的Lua_newstate接口函數(shù)創(chuàng)建 Lua解釋器,調用lua_ register()將用戶自定義編寫的API函數(shù)注冊到Lua文件中。
3) 按照 Lua語法將已經(jīng)在 Lua解釋器中注冊過的API函數(shù)編寫成自定義測試需要的邏輯功能寫到 Lua腳本中,保存為user.lua文件。
4) 將user.lua配置到用戶代碼模塊中,當用戶代碼模塊加載時,便會調用Lua_dofile函數(shù)加載Lua文件,此時,Lua文件運行觸發(fā)Lua_getglobal函數(shù),在Lua解釋器中被注冊的API函數(shù)被調用,用戶自定義的測試功能被實現(xiàn)。
測試運行部分實現(xiàn)對所測試芯片進行功能和性能測試。仿真運行部分調用儀器資源模型和DUT仿真模型,完成仿真測試;調試運行部分調用測試儀器的硬件設備驅動函數(shù),通過計算機與測試儀器的通信接口向硬件端口發(fā)送控制命令,硬件電路解析命令使硬件電路完成相應的動作,并具有設斷點調試等功能。
測試運行部分的視圖顯示共分為3部分:引腳通道配置的選擇,測試工程的信息以及測試結果的顯示。測試結果的顯示包括測試項的測試結果和分級結果。在視圖層,定義4個類 BinResultTableView、TestResult TableView、ProjectInfoTableView、Pakage InfoTableView分別進行視圖顯示信息的設置,對于引腳通道配置的選擇和測試流程的選擇均在委托層采用下拉框的特殊形式進行處理,在模型層則定義4個類BinResultData、TestResultTableData、ProjectInfoData、PakageInfoData對表頭等數(shù)據(jù)的顯示形式進行定義并和引擎層進行通信。
圖4 測試運行界面顯示架構圖
根據(jù)集成電路測試的需求,測試軟件的運行過程中需要創(chuàng)建用戶界面并進行測試的線程(主線程)和管腳映射下載線程(子線程)。主線程負責界面的顯示和測試的進行,子線程負責管腳映射關系的下載,兩個線程的運行是并列的不相互影響,因此,使用多線程技術可以提高軟件的運行效率。
用戶運行測試軟件時,會建立一個進程同時為這個進程創(chuàng)建一個主線程。在進行下載管腳映射關系時,就需要再創(chuàng)建一個測試線程來完成測試工作。Qt開啟多線程,主要用到類QThread。用CWorkThread類繼承QThread,然后重寫虛函數(shù)run()。當要開啟新線程時,只需要實例該類,調用LoadPackage (const std::string strRunFile, int nPackageID)函數(shù)觸發(fā)start()函數(shù)間接調用run()函數(shù)來創(chuàng)建新的線程。當需要結束該線程時,調用UnLoadPackage(),觸發(fā)Quit()函數(shù)來刪除非主線程管理的任務,結束該線程。
在多線程程序設計中,線程與線程之間進行通信是非常重要的。用戶需要在界面中點擊“下載”按鈕來進行下載管腳映射關系,也就是說需要在用戶界面中控制線程,為了實現(xiàn)這種功能,采用Qt自帶的信號與槽的方式進行線程的通信。在主線程中定義slot函數(shù),在子線程中定義signal函數(shù),通過connect函數(shù)實現(xiàn)信號與槽函數(shù)之間的通信,從而實現(xiàn)主線程與子線程之間的通信。
圖5 多線程實現(xiàn)流程圖
測試數(shù)據(jù)管理模塊實現(xiàn)對測試運行結果進行存儲并提供測試結果的可視化顯示功能。
為了提高軟件的通用性,采用STDF格式對測試數(shù)據(jù)進行存儲。STDF文件由多個數(shù)據(jù)模塊構成,V4版本共計25個模塊,不同的模塊被稱為不同的記錄類型,每個模塊有其固定的記錄內容,這些模塊按照一定的順序,共同組合構成了整個STDF文件[10]。實現(xiàn)STDF存儲的流程如圖6所示。
基于STDF的格式特點,對STDF格式的存儲也以數(shù)據(jù)模塊為單位進行實現(xiàn),每個數(shù)據(jù)模塊都由以下三部分組成:記錄標題、必選的數(shù)據(jù)記錄以及可選的數(shù)據(jù)記錄。
首先創(chuàng)建一個數(shù)據(jù)容器向量,命名為Vector,Vector用于存儲數(shù)據(jù)模塊的必選的數(shù)據(jù)記錄以及可選的數(shù)據(jù)記錄,將二進制數(shù)據(jù)轉換成ASCII碼之后依次存入Vector,然后獲取Vector的長度,因為記錄標題占4字節(jié)的長度,所以將Vector的長度加4字節(jié)后存到數(shù)組List中,再根據(jù)數(shù)據(jù)模塊的類型確認記錄標題的內容后將記錄標題存入List,List中便是STDF中數(shù)據(jù)模塊的內容,將各個模塊按照規(guī)定的順序寫入STDF文件,便完成了文件的存儲。
圖6 STDF格式存儲流程圖
在軟件的功能基本開發(fā)完成后,以二進制計數(shù)器芯片M54HCT160作為被測芯片,對軟件的仿真運行功能進行了測試。
1)新建工程:
啟動軟件進入系統(tǒng)登錄界面,輸入正確的用戶名和密碼,點擊菜單欄中“工程”按鈕選中“新建工程”,填寫工程名稱、保存路徑。點擊“確定”后在工程存放目錄下生成文件名為“M54HCT160_TEST”的工程文件。
2)工程參數(shù)設置:
進入工程參數(shù)設置界面后,可以對芯片測試工程的參數(shù)進行輸入設置了,工程參數(shù)設置界面主要包括:管腳信號定義、管腳映射配置、電源模塊配置、電平模塊配置,直流參數(shù)模塊配置。
(1)管腳信號定義,首先定義待測芯片的管腳名稱和管腳類型,然后定義信號組,方便接下來的測試。
(2)管腳映射配置,在定義好信號管腳信息后,配置管腳映射模塊,將信號與儀器通道建立起連接。
(3)電源模塊配置接下來配置開短路測試中所需要的電源參數(shù)。
(4)電平模塊配置接著配置管腳的驅動電平與比較電平等參數(shù)。
(5)直流參數(shù)模塊配置,需要說明的是開短路測試的判斷條件,如果引腳接觸正常,那么測試結果應該為二極管的導通電壓 0.7 V 左右,設置判斷條件為 0.2~1.5 V 之間。
(6)測試項配置,將已經(jīng)配置好的電源、電平模塊配置到“Open/Short”測試項中。
3)測試結果:
測試結果如圖8所示,管腳“MR/”、“D[2]”、“D[3]”、“Q[0]”、“Q[2]”沒有通過測試,結果為“FAIL”,其他管腳通過測試,結果為“PASS”。
圖7 測試項配置圖
圖8 測試結果圖
本文提出的基于Qt的集成電路測試軟件,可支持在Windows和Linux平臺使用,滿足跨平臺的測試需求,整體上采用MVD架構有效的分離了界面和數(shù)據(jù),測試參數(shù)配置部分采用Lua語言開發(fā)了軟件的二次接口,滿足了用戶的個性化測試需求,測試運行部分采用多線程的技術,提高了軟件的運行效率,測試數(shù)據(jù)管理部分采用STDF格式對測試數(shù)據(jù)進行了存儲,提高了軟件的通用性,測試表明,本軟件具有集成電路測試功能,為集成電路測試軟件的實現(xiàn)提供了一種新思路。