戴 程 李 濤 何星宏
(西安郵電大學(xué)電子工程學(xué)院 西安 710121)
計(jì)算單元是現(xiàn)代計(jì)算機(jī)發(fā)揮強(qiáng)大能力的一個(gè)重要基石[1],其可靠性驗(yàn)證也因此變得十分重要。自從20世紀(jì)80年代浮點(diǎn)標(biāo)準(zhǔn)IEEE754[2]提出以來,由浮點(diǎn)格式定義在運(yùn)算中帶來的復(fù)雜邊界情況驗(yàn)證始終是一項(xiàng)復(fù)雜的挑戰(zhàn)[3]。相對(duì)簡(jiǎn)單的整數(shù)運(yùn)算也同樣伴隨著多種異常情況。本文正是針對(duì)這一需求,將浮點(diǎn)整數(shù)混合單元作為具體驗(yàn)證對(duì)象,提出一種可靠的驗(yàn)證方案。
面對(duì)當(dāng)前復(fù)雜設(shè)計(jì)的驗(yàn)證需求,業(yè)界廣泛而又成熟的應(yīng)對(duì)策略是搭建驗(yàn)證平臺(tái),而本文在基本原型[4]的基礎(chǔ)之上借鑒了Crossgroup(交叉覆蓋組)[4]的思路,將計(jì)算任務(wù)根據(jù)數(shù)據(jù)類型、運(yùn)算類型、取值區(qū)間、異常數(shù)據(jù)操作等屬性進(jìn)行分割,對(duì)應(yīng)每個(gè)分割塊建立完整的驗(yàn)證通道,然后以塊為基本單位在上層進(jìn)行合適的單項(xiàng)或者組合驗(yàn)證。這樣在面對(duì)具體應(yīng)用中的差異化設(shè)計(jì)時(shí),可以靈活的選取調(diào)整其中的塊以及添加新的塊。最終形成底層固化若干基本塊及其變化版本,上層直接調(diào)用底層基本塊或者由基本快組成的高級(jí)塊的形式,這種過程類似于軟件應(yīng)用程序庫中函數(shù)使用的方法。
該設(shè)計(jì)支持單精度(1.8.23)、單精度擴(kuò)展精度(1.8.32)、整數(shù)3種數(shù)據(jù)類型。浮點(diǎn)運(yùn)算支持乘加、乘、加、比較運(yùn)算,執(zhí)行一次需要3個(gè)時(shí)鐘;整數(shù)運(yùn)算支持乘加、乘、加、比較、移位運(yùn)算,執(zhí)行一次需要2個(gè)時(shí)鐘。其整體結(jié)構(gòu)如圖1所示。
整個(gè)設(shè)計(jì)從上至下依次分為3級(jí):第1級(jí)完成浮點(diǎn)運(yùn)算階碼的對(duì)階,乘加運(yùn)算中乘運(yùn)算全部和加運(yùn)算一部分;第2級(jí)完成剩余部分的加運(yùn)算以及前導(dǎo)0計(jì)算;第3級(jí)完成規(guī)格化、舍入以及格式化輸出。
設(shè)計(jì)的核心處理通道實(shí)現(xiàn)的是浮點(diǎn)乘加運(yùn)算(A*B+C),其余運(yùn)算都是嵌入到主通道之中,共用主通道中的計(jì)算資源完成運(yùn)算,沿著主通道進(jìn)行數(shù)據(jù)流動(dòng)直至產(chǎn)生最終結(jié)果。
本論文采用SystemVerilog語言來設(shè)計(jì)驗(yàn)證平臺(tái)[8],整體驗(yàn)證結(jié)構(gòu)如圖2所示。
圖2 驗(yàn)證平臺(tái)結(jié)構(gòu)框圖
首先由Driver產(chǎn)生激勵(lì)同時(shí)傳遞給Reference Model、DUV以及Monitor,其內(nèi)部可以通過選擇以及控制不同的激勵(lì)約束文件(Packet)來對(duì)應(yīng)不同的驗(yàn)證場(chǎng)景,也就是引言所提到的實(shí)現(xiàn)不同的基本塊以及高級(jí)塊的思想,同時(shí)在Environment配置環(huán)境時(shí)也有不同的Driver可供選擇,本文實(shí)現(xiàn)了3個(gè)Driver分別對(duì)應(yīng)3種數(shù)據(jù)類型。
其次DUV是待驗(yàn)證的設(shè)計(jì),ReferenceModel是用SystemVerilog語言設(shè)計(jì)的參考模型[9],兩者接收并執(zhí)行完全相同的激勵(lì),然后輸出結(jié)果給Scoreboard;而Monitor用于保留激勵(lì)以及ReferenceModel中的關(guān)鍵信息,供Scoreboard在結(jié)果比較時(shí)使用。
再次由Scoreboard接收并綜合這些信息完成結(jié)果的比較判定,同時(shí)輸出驗(yàn)證報(bào)告,其內(nèi)容可分為兩部分:本次驗(yàn)證測(cè)試激勵(lì)以及執(zhí)行結(jié)果等的統(tǒng)計(jì)信息;執(zhí)行結(jié)果或者平臺(tái)運(yùn)行出錯(cuò)時(shí)刻保留的相關(guān)信息。
最后在Environment中完成整個(gè)環(huán)境的配置,保證每種測(cè)試塊都擁有一條完整獨(dú)立的驗(yàn)證通道,但是除了必要的獨(dú)立部分,其余部分是共用的,這樣可以優(yōu)化平臺(tái)的整體設(shè)計(jì)。在程序塊Testcase中會(huì)完成驗(yàn)證平臺(tái)與DUV的連接以及整個(gè)平臺(tái)啟動(dòng)/終止的控制。
若將某個(gè)設(shè)計(jì)所有可能的激勵(lì)看做一個(gè)激勵(lì)空間,在大多數(shù)情況下如果想要遍歷這個(gè)激勵(lì)空間是需要付出難以承受的計(jì)算代價(jià)以及時(shí)間代價(jià),對(duì)于運(yùn)算類設(shè)計(jì)尤其如此。因此比較切實(shí)可行的解決方案是通過約束選取整個(gè)激勵(lì)空間的一個(gè)子空間來表征整個(gè)激勵(lì)空間,當(dāng)子空間隨機(jī)覆蓋充分時(shí)便可以較為充分的認(rèn)為DUV功能驗(yàn)證通過。但是這樣并不完備,理由有兩點(diǎn):一個(gè)是選取的子空間畢竟是部分,可能會(huì)忽略一些導(dǎo)致問題的激勵(lì);另一個(gè)是子空間中隨機(jī)化生成激勵(lì)的方式通常會(huì)出現(xiàn)個(gè)別激勵(lì)很難覆蓋到的情況,從而引出定向測(cè)試來作為必要的補(bǔ)充手段。
定向測(cè)試核心在于定向激勵(lì),本文的定向激勵(lì)分為浮點(diǎn)、整數(shù)兩部分。浮點(diǎn)激勵(lì)一部分來自IBM實(shí)驗(yàn)室開發(fā)的浮點(diǎn)定向測(cè)試包[10],它們擁有特定的格式(見表1),包含操作數(shù)與驗(yàn)證過的結(jié)果,通過Python腳本將其轉(zhuǎn)化為DUV所識(shí)別的激勵(lì)格式后作為整個(gè)平臺(tái)初始的校準(zhǔn)測(cè)試;另一部分是補(bǔ)充激勵(lì),作為隨機(jī)測(cè)試的補(bǔ)充。整數(shù)激勵(lì)組成可以類比浮點(diǎn)激勵(lì),只是其校準(zhǔn)測(cè)試所用激勵(lì)是通過人為挑選若干邊界與常規(guī)情況產(chǎn)生。
表1 激勵(lì)格式解讀(按位置對(duì)應(yīng))
此外本文還擴(kuò)展定向激勵(lì)部分實(shí)現(xiàn)了仿真問題的自動(dòng)化[11]重現(xiàn)。當(dāng)執(zhí)行結(jié)果出錯(cuò)時(shí)通過腳本從驗(yàn)證報(bào)告中將錯(cuò)誤時(shí)刻相關(guān)信息以及相關(guān)數(shù)據(jù)提取,然后作為新的激勵(lì)重新運(yùn)行仿真來重現(xiàn)目標(biāo)問題。整個(gè)過程自動(dòng)化進(jìn)行,極大地方便了問題的仿真調(diào)試。
隨機(jī)測(cè)試是整個(gè)測(cè)試的核心,在通過約束選取子空間之后,便按照引言所述思路根據(jù)數(shù)據(jù)類型、運(yùn)算類型、取值區(qū)間、異常數(shù)據(jù)操作等屬性將子空間分割成基本塊、高級(jí)塊的形式,每一塊都進(jìn)行基于功能覆蓋率[13]統(tǒng)計(jì)的獨(dú)立隨機(jī)測(cè)試,同時(shí)通過定向測(cè)試的補(bǔ)充測(cè)試加以配合。所有塊都擁有相同的隨機(jī)測(cè)試流程,具體描述如下。
第一,從激勵(lì)約束文件Packet內(nèi)部約束描述,Packet的選取、多個(gè)Packet的控制,Driver的選取等多方面進(jìn)行靈活配合來產(chǎn)生預(yù)期的激勵(lì)。
第二,通過使用不同的隨機(jī)種子來賦予激勵(lì)更強(qiáng)的隨機(jī)性。
第三,運(yùn)行仿真,調(diào)試解決錯(cuò)誤的情況。
第四,進(jìn)行功能覆蓋率檢查[14]。該項(xiàng)的核心是設(shè)計(jì)了一系列Covergroup,采集輸入、輸出、部分功能類以及部分設(shè)計(jì)模塊中的內(nèi)部關(guān)鍵信息,然后通過自動(dòng)、手動(dòng)建倉(cāng)以及交叉?zhèn)}等方式實(shí)現(xiàn)對(duì)功能覆蓋率的量化分析,對(duì)于隨機(jī)化中難以覆蓋的倉(cāng)將轉(zhuǎn)到定向測(cè)試環(huán)節(jié)進(jìn)行補(bǔ)充測(cè)試。
第五,根據(jù)覆蓋率分析反饋,從激勵(lì)約束、隨機(jī)種子、Covergroup等多方面進(jìn)行調(diào)整,逐漸實(shí)現(xiàn)對(duì)子空間的全覆蓋。
第六,按照以上4步反復(fù)迭代,直至在Covergroup較為充分的情況下功能覆蓋率達(dá)到100%,結(jié)束隨機(jī)測(cè)試。
整個(gè)測(cè)試分為6項(xiàng),分別對(duì)應(yīng)3種數(shù)據(jù)類型的定向與隨機(jī)兩類測(cè)試。其中隨機(jī)測(cè)試按照上文提到的多種因素分為不同的測(cè)試塊[15]進(jìn)行測(cè)試;定向測(cè)試完平臺(tái)校準(zhǔn)測(cè)試、問題重現(xiàn)以及補(bǔ)充測(cè)試。具體測(cè)試分類及規(guī)模如表2所示
表2 測(cè)試項(xiàng)目及規(guī)模統(tǒng)計(jì)
經(jīng)過不斷調(diào)試修正,完成所有測(cè)試項(xiàng)目。現(xiàn)摘錄其中單精度運(yùn)算的測(cè)試結(jié)果如圖3、圖4所示。
圖3 單精度定向測(cè)試報(bào)告
圖4 單精度隨機(jī)測(cè)試報(bào)告
本文綜合利用多種測(cè)試方法來完成目標(biāo)設(shè)計(jì)的功能驗(yàn)證任務(wù),在此過程中驗(yàn)證了以劃分基本塊與高級(jí)塊的方式將整個(gè)驗(yàn)證任務(wù)進(jìn)行分割并各自驗(yàn)證的思路。也證明了該思路在應(yīng)對(duì)復(fù)雜多樣的運(yùn)算類設(shè)計(jì)驗(yàn)證任務(wù)的可行性。
接下的工作中會(huì)通過進(jìn)一步分析不同的運(yùn)算設(shè)計(jì),構(gòu)建更為豐富的基本塊與高級(jí)塊,尋找更為合理的塊間組合方式來應(yīng)對(duì)不同的運(yùn)算類設(shè)計(jì),從而進(jìn)一步完善和驗(yàn)證這一驗(yàn)證思路的有效性。