王 濤,黃坤超,李晨陽
(中國(guó)電子科技集團(tuán)公司第十研究所,四川 成都 610036)
隨著FPGA在航空、航天、通信、識(shí)別等領(lǐng)域的廣泛使用,以及業(yè)內(nèi)對(duì)FPGA驗(yàn)證質(zhì)量要求的不斷提高,傳統(tǒng)的仿真驗(yàn)證已難以滿足日益增長(zhǎng)的驗(yàn)證需求,驗(yàn)證技術(shù)也由傳統(tǒng)仿真驗(yàn)證逐漸轉(zhuǎn)移到新一代的驗(yàn)證方法學(xué)中.
目前主流的驗(yàn)證方法學(xué)分別是VMM,OVM和UVM,其中UVM已成為業(yè)內(nèi)廣泛使用的驗(yàn)證技術(shù)[1],屬于TLM級(jí)驗(yàn)證,具有較高層次,主流的EDA工具均支持UVM,已成為各大公司驗(yàn)證趨勢(shì).國(guó)內(nèi)航天等科研單位都在積極開展FPGA自動(dòng)化測(cè)試技術(shù)研究,對(duì)UVM驗(yàn)證方法表現(xiàn)出極大興趣.UVM主要是針對(duì)相似的FPGA接口進(jìn)行驗(yàn)證,據(jù)統(tǒng)計(jì),現(xiàn)有的大部分UVM驗(yàn)證平臺(tái)的實(shí)現(xiàn)與DUT呈現(xiàn)緊耦合性[2],導(dǎo)致驗(yàn)證組件不能直接在不同項(xiàng)目平臺(tái)中使用,其可重用性需要通過重建或替換已有驗(yàn)證平臺(tái)的部分代碼來實(shí)現(xiàn),使得多重測(cè)試環(huán)境復(fù)雜度增加,產(chǎn)生大量的工作量[3,4].
面對(duì)多接口的復(fù)雜設(shè)計(jì)環(huán)境,為滿足多重驗(yàn)證環(huán)境需要,利用通用UVM驗(yàn)證平臺(tái)架構(gòu)進(jìn)行重新優(yōu)化設(shè)計(jì),建立一種基于UVM的高層次化測(cè)試平臺(tái),提出層次化設(shè)計(jì)、通用數(shù)據(jù)庫(kù)共享、事件同步化控制、自動(dòng)化執(zhí)行等技術(shù),建立一套新的重用機(jī)制,使得重用性即能在相似接口內(nèi)重用,又可以在多種不同接口的復(fù)雜環(huán)境中重用,提升測(cè)試的可重用性.實(shí)驗(yàn)結(jié)果表明改進(jìn)后的平臺(tái)可使測(cè)試時(shí)間縮短40%以上,并滿足多種接口測(cè)試需要.
目前FPGA設(shè)計(jì)較多的是采用DSP+FPGA設(shè)計(jì)構(gòu)架,對(duì)歷屆測(cè)試項(xiàng)目統(tǒng)計(jì)FPGA對(duì)外接口主要包括UART,SPI和DSP等.一般情況下UART,SPI和DSP接口設(shè)計(jì)是通過總線架構(gòu)形式配合使用,如圖1所示.
圖1 FPGA通用接口關(guān)系
根據(jù)UART,SPI和DSP 3種接口支持的不同類型協(xié)議,通過思維導(dǎo)圖分解接口需求,主要包含DSP的只讀、只寫、可讀可寫測(cè)試,UART和SPI的收發(fā)功能一致性測(cè)試、緩沖測(cè)試、幀格式測(cè)試,校驗(yàn)位測(cè)試、幀長(zhǎng)測(cè)試、毛刺測(cè)試、波特率測(cè)試等,可通過配置寄存器組合出不同的實(shí)現(xiàn)模式.
基于UVM測(cè)試平臺(tái),改進(jìn)后的FPGA通用接口自動(dòng)化測(cè)試平臺(tái)如圖2所示.
圖2 通用接口自動(dòng)化測(cè)試平臺(tái)
FPGA軟件通用接口自動(dòng)化測(cè)試平臺(tái)分為測(cè)試平臺(tái)和管理平臺(tái)兩部分.管理平臺(tái)為自動(dòng)化測(cè)試平臺(tái)的實(shí)施提供所對(duì)應(yīng)的可視化操作窗口,提供接口參數(shù)配置和結(jié)果輸出界面,通過腳本方式完成管理平臺(tái)與測(cè)試平臺(tái)之間的數(shù)據(jù)交互.
測(cè)試平臺(tái)在UVM基礎(chǔ)上改進(jìn)形成,由一個(gè)TOP頂層封裝起來,首先在TEST層控制發(fā)送sequence_high(高層次序列)給序列器sequencer;Sequencer將sequence_high以指針的形式傳遞給驅(qū)動(dòng)器Driver;其次在BASE_TEST層中建立通用數(shù)據(jù)庫(kù)和ENV層之間的各個(gè)組件連接關(guān)系,建立數(shù)據(jù)傳輸通道;Driver根據(jù)接收到的高層次序列命令sequence_high,從通用數(shù)據(jù)庫(kù)sequence_low_lib中提取相應(yīng)的底層次序列sequence和系統(tǒng)配置參數(shù)sequence_sys,將底層次序列送給被測(cè)件DUT;監(jiān)控器Monitor收集DUT輸出數(shù)據(jù)和覆蓋率數(shù)據(jù)等,將收集好的數(shù)據(jù)傳遞給Collect_lib(數(shù)據(jù)收集庫(kù)),Collect_lib負(fù)責(zé)數(shù)據(jù)統(tǒng)一管理和覆蓋率收集;比較器Scoreboard從數(shù)據(jù)收集庫(kù)Collect_lib提取要比較的數(shù)據(jù),在Scoreboard比較完成后,打印輸出結(jié)果.最終實(shí)現(xiàn)測(cè)試指令與測(cè)試設(shè)計(jì)相分離,測(cè)試設(shè)計(jì)與被測(cè)設(shè)計(jì)相分離的設(shè)計(jì),完成整個(gè)測(cè)試過程.
對(duì)于任何一種新型的驗(yàn)證方法學(xué)來說,分層的測(cè)試平臺(tái)是一個(gè)關(guān)鍵概念,分層有助于驗(yàn)證平臺(tái)的可移植性和可維護(hù)性[5].研究表明,越是高層次化的驗(yàn)證則驗(yàn)證效率越高[6].傳統(tǒng)的仿真采用平面式的驗(yàn)證環(huán)境,層次化程度很低,不利于重用,難以處理各種情境下的驗(yàn)證問題.
現(xiàn)有的UVM驗(yàn)證平臺(tái)在TLM級(jí)組件之間的通信通過專門PORT端口傳遞消息[7],在TEST頂層直接實(shí)現(xiàn)和控制測(cè)試序列產(chǎn)生,同時(shí)還要考慮多序列之間的同步問題,抽象層次級(jí)別低,同時(shí)驗(yàn)證組件之間呈現(xiàn)緊耦合關(guān)系,導(dǎo)致其可重用性較差.當(dāng)多重環(huán)境存在時(shí),驗(yàn)證的復(fù)雜度和出錯(cuò)概率都急劇增加[8,9].因此,為提高代碼的可重用性,需要在一個(gè)UVM驗(yàn)證平臺(tái)下,即要保留TLM級(jí)處理能力,又要同時(shí)滿足多重環(huán)境需要.為此,在UVM基礎(chǔ)上設(shè)計(jì)出一種新的高層次化結(jié)構(gòu),如圖3所示.
改進(jìn)后的UVM和通用UVM的層次關(guān)系不同之處在于:一方面,將原有的測(cè)試序列sequence按層次分成4類,分別為高層次序列、底層次序列庫(kù)、數(shù)據(jù)收集庫(kù)和系統(tǒng)配置4個(gè)部分,由于原來的序列使用過于直接,級(jí)別低,劃分不明確,每次測(cè)試都需要用戶重新開始設(shè)計(jì),因此,通過分解,序列不僅提高了重用性,而且提升序列的抽象級(jí)別,同時(shí)解決了多序列帶來的同步化問題,消除了采用vrtual sequencer和virtual sequencer進(jìn)行同步的復(fù)雜序列設(shè)計(jì);另一方面,在ENV層中統(tǒng)一Driver,Monitor,Scoreboard和Ref_model4個(gè)組件,其中只保留sequencer和Drive組件之間采用PORT端口傳遞信息,繼承UVM特性,其余組件之間信息傳遞使用通用數(shù)據(jù)庫(kù)共享方式替代PORT端口傳遞消息,取消agent代理層設(shè)計(jì),這樣做可以大大地簡(jiǎn)化測(cè)試環(huán)境之間的耦合關(guān)系,不僅提高了可重用性,而且在處理不同信息時(shí)得到了擴(kuò)展,處理方式更加簡(jiǎn)潔和透明.使用一個(gè)平臺(tái),即可完成對(duì)不同的多接口測(cè)試環(huán)境需要.
通用數(shù)據(jù)庫(kù)是在建立測(cè)試用例過程中引入的一種專家知識(shí)庫(kù)概念[10],是一個(gè)中央存儲(chǔ)數(shù)據(jù)庫(kù),由一組產(chǎn)生各種激勵(lì)序列的sequence類組成,可以與UVM驗(yàn)證環(huán)境中的任何組件進(jìn)行信息交互,整合了仿真所需要的多個(gè)獨(dú)立的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的創(chuàng)建從需求中提取高價(jià)值的信息,結(jié)合隨機(jī)約束特性,進(jìn)行高效利用.高層次序列、底層次序列庫(kù)、數(shù)據(jù)收集庫(kù)、系統(tǒng)配置4個(gè)部分與組件之間的共享方式如圖4所示.
圖4 數(shù)據(jù)庫(kù)與組件之間的共享方式
sequence_high按照需求規(guī)格提煉出驗(yàn)證特性,將驗(yàn)證特性進(jìn)行歸類處理后,對(duì)應(yīng)測(cè)試用例的功能測(cè)試點(diǎn)表示,sequence_low_lib就是每個(gè)功能測(cè)試點(diǎn)具體輸入數(shù)據(jù)序列的集合.高層次序列抽象級(jí)別較高,為決策者,低層次序列是直接測(cè)試序列,抽象級(jí)別較低,為執(zhí)行者,兩者將決策與具體執(zhí)行聯(lián)合在一起.collect_lib主要是收集DUT輸出的各種實(shí)測(cè)數(shù)據(jù),同時(shí)也收集參考模型或底層序列庫(kù)傳遞來的期望數(shù)據(jù)以及覆蓋收集等,在收集數(shù)據(jù)完成后,產(chǎn)生不同的同步標(biāo)志信息,供比較器Scoreboard使用.由于DUT是一種時(shí)序電路,驅(qū)動(dòng)接口時(shí)會(huì)有時(shí)序參數(shù)要求,因此,必須要有sequence_sys系統(tǒng)配置,sequence_sys主要包括建立控制接口信號(hào)正確時(shí)序關(guān)系的各種時(shí)序參數(shù),如時(shí)鐘頻率、建立時(shí)間、保持時(shí)間、發(fā)包間隔等.
圖5~圖8 分別是高層次序列、底層次序列庫(kù)、數(shù)據(jù)收集庫(kù)、系統(tǒng)配置設(shè)計(jì)示例,每類序列設(shè)計(jì)允許創(chuàng)建、修改、新增、刪除等操作.實(shí)現(xiàn)機(jī)制采用class形式將序列封裝起來形成一組參數(shù)化,提高繼承者的配置功能和通用功能.通過利用UVM的Field_Automation宏機(jī)制注冊(cè),使用`uvm_field_*系列宏體注冊(cè)不同數(shù)據(jù)類型的變量,宏的使用實(shí)際上相當(dāng)于是一種對(duì)數(shù)據(jù)變量的控制開關(guān),使用if/case判決條件語句判決高層次序列激活時(shí)啟用不同的數(shù)據(jù)變量.利用該機(jī)制用戶能夠很方便地產(chǎn)生所需要的各種序列.
圖5 高層次序列設(shè)計(jì)
圖8 數(shù)據(jù)收集設(shè)計(jì)
通用數(shù)據(jù)庫(kù)是作為uvm_object的class類產(chǎn)生所有相關(guān)的數(shù)據(jù)分類設(shè)計(jì),數(shù)據(jù)庫(kù)可以在任何的component or object中共享.共享方式在BASE_TEST層完成配置,主要作用是建立數(shù)據(jù)庫(kù)和ENV層的各個(gè)組件之間連接關(guān)系,建立數(shù)據(jù)傳輸通道,其基本結(jié)構(gòu)如圖9所示.使用uvm_config_db::set(源文件使用)函數(shù)將需要共享的數(shù)據(jù)庫(kù)傳遞給指定的模塊;組件調(diào)用時(shí),使用uvm_config_db::get(目的文件使用)函數(shù)將該指定的模塊導(dǎo)出共享的數(shù)據(jù)庫(kù).
圖9 數(shù)據(jù)庫(kù)在不同組件之間的映射
利用數(shù)據(jù)庫(kù)充分挖掘UVM驗(yàn)證環(huán)境中數(shù)據(jù)的有用信息,提高數(shù)據(jù)分析的有效性,支撐決策制定,聯(lián)合不同的DSP,UART,SPI等接口最優(yōu)數(shù)據(jù)格式需求,構(gòu)建一種可共享和跨項(xiàng)目的通用數(shù)據(jù)庫(kù),有效提高跨組件的通信和互操作能力,實(shí)現(xiàn)資源合理配置,滿足多個(gè)平臺(tái)重用.
測(cè)試平臺(tái)組件Driver,Monitor,Scoreboard 3者之間必須有密切的時(shí)序配合才能正常工作,基于時(shí)鐘周期級(jí)的測(cè)試平臺(tái)對(duì)于具體時(shí)鐘的緊耦合性很強(qiáng),需要處理執(zhí)行過程中初始化、驅(qū)動(dòng)、監(jiān)控和比較等組件,組件之間的信息交互難以處理同步化關(guān)系,同時(shí)還存在一定的時(shí)序競(jìng)爭(zhēng)問題.事件觸發(fā)對(duì)于具體時(shí)鐘的緊耦合性不強(qiáng),采用事件觸發(fā)解決組件之間信息傳遞同步化處理是一種很好的解決辦法,如圖10所示.
圖10 基于事件的同步化控制
測(cè)試平臺(tái)的自動(dòng)化執(zhí)行,是提升測(cè)試效率的有效手段,平臺(tái)可以同時(shí)提供兩種自動(dòng)化執(zhí)行方法,包括人機(jī)交互界面自動(dòng)調(diào)試和命令行的腳本化輸入方式.
利用腳本執(zhí)行測(cè)試平臺(tái),測(cè)試結(jié)果自動(dòng)呈現(xiàn).腳本的開發(fā)關(guān)鍵是要處理好測(cè)試平臺(tái)工作目錄配置以及腳本處理對(duì)象,即方便腳本設(shè)計(jì)又可以便利平臺(tái)重用,利用腳本將平臺(tái)工作目錄下的各個(gè)組件銜接形成一個(gè)整體進(jìn)行無縫工作.測(cè)試平臺(tái)的腳本目錄及工作流程如圖11 和圖12所示.
圖11 測(cè)試平臺(tái)腳本目錄
圖12 測(cè)試平臺(tái)工作流程
同時(shí)利用Qt工具開發(fā)出人機(jī)交互界面,用戶選擇不同接口的預(yù)設(shè)測(cè)試用例即可執(zhí)行測(cè)試,通過調(diào)用仿真工具執(zhí)行并打印測(cè)試結(jié)果,管理界面如圖13所示.
圖13 人機(jī)交互式的管理界面
利用改進(jìn)后的自動(dòng)化測(cè)試平臺(tái),對(duì)一個(gè)包含多個(gè)接口項(xiàng)目進(jìn)行測(cè)試,軟件主要實(shí)現(xiàn)功能包括接收DSP接口寫入的數(shù)據(jù)并緩存到FIFO中,再將數(shù)據(jù)讀出通過UART接口發(fā)送出去;同時(shí)將UART接口接收到的數(shù)據(jù)緩存到另一個(gè)FIFO中,再由DSP將數(shù)據(jù)讀出.通過仿真工具Questa Sim 10.5運(yùn)行腳本文件run.fdo,仿真完畢后打印測(cè)試結(jié)果和覆蓋率信息,圖14 和圖15 是測(cè)試完成后的部分輸出結(jié)果.
圖14 打印結(jié)果
圖15 覆蓋率報(bào)告
經(jīng)測(cè)試,UART接口的波特率余量約為:(39.46~38.46 kHz)/38.46 kHz=2.6%,與通常要求的20%余量相比,其UART模塊抗干擾性較差.另外此次測(cè)試還檢查出奇校驗(yàn)、偶校驗(yàn)報(bào)錯(cuò),無校驗(yàn)正確,與源代碼的無校驗(yàn)設(shè)計(jì)特性相符合,DSP讀寫功能正常.統(tǒng)計(jì)測(cè)試過程中的消耗時(shí)間,包括腳本編輯、參數(shù)配置、接口配置、用例編譯鏈接、結(jié)果記錄、測(cè)試執(zhí)行、環(huán)境搭建等占用時(shí)間統(tǒng)計(jì),總消耗時(shí)間為13.7 h.同時(shí)將該項(xiàng)目在傳統(tǒng)測(cè)試和UVM驗(yàn)證平臺(tái)上試運(yùn)行,統(tǒng)計(jì)測(cè)試時(shí)間分別為36 h和23 h,經(jīng)對(duì)比,該平臺(tái)有效降低測(cè)試時(shí)間40%以上,測(cè)試效率得到有效提升.
FPGA通用接口自動(dòng)化測(cè)試平臺(tái)主要面向FPGA軟件測(cè)試,解決FPGA軟件通用接口在測(cè)試過程中自動(dòng)化測(cè)試環(huán)境缺乏、支撐功能不足等問題.通過利用層次化設(shè)計(jì)、通用數(shù)據(jù)庫(kù)共享、事件同步化控制、腳本執(zhí)行等技術(shù),改進(jìn)UVM驗(yàn)證架構(gòu),提高測(cè)試平臺(tái)的可重用性和自動(dòng)化水平.通用數(shù)據(jù)庫(kù)還需進(jìn)一步通過實(shí)踐檢驗(yàn),形成一種廣泛認(rèn)可方式,將更豐富的方法應(yīng)用于測(cè)試平臺(tái),提高軟件研制進(jìn)度和質(zhì)量.