王紅衛(wèi) 占楊林 梁利平
(中國(guó)科學(xué)院微電子研究所,北京 100029)
隨著大規(guī)模集成電路系統(tǒng)設(shè)計(jì)的飛速發(fā)展,集成規(guī)模日益龐大,集成功能日益復(fù)雜。芯片驗(yàn)證在芯片研發(fā)中所占的比例越來(lái)越重,占據(jù)了整個(gè)研發(fā)周期的70%以上[1]。芯片驗(yàn)證已成為整個(gè)芯片流程中的瓶頸,驗(yàn)證的完備性和驗(yàn)證效率的提高成為驗(yàn)證的難點(diǎn),也是目前驗(yàn)證的主要研究方向。
目前,數(shù)字芯片設(shè)計(jì)驗(yàn)證領(lǐng)域在驗(yàn)證技術(shù)、驗(yàn)證方法學(xué)、驗(yàn)證語(yǔ)言、IP核重用驗(yàn)證、驗(yàn)證流程及評(píng)估等方面都取得了巨大的進(jìn)步。但是,驗(yàn)證技術(shù)已經(jīng)落后于設(shè)計(jì)和制造能力,成為整個(gè)數(shù)字芯片領(lǐng)域發(fā)展的瓶頸,制約了設(shè)計(jì)生產(chǎn)率的提高。隨著驗(yàn)證技術(shù)的逐步發(fā)展,現(xiàn)在以測(cè)試向量自動(dòng)生成技術(shù)(Testautomation)為代表的高級(jí)驗(yàn)證技術(shù)[2]已逐步取代傳統(tǒng)的基于直接檢測(cè)(Direct-test)的驗(yàn)證技術(shù),而在高復(fù)雜度數(shù)字芯片設(shè)計(jì)中發(fā)揮越來(lái)越重要的作用。此外,EDA行業(yè)也提出了種種新的驗(yàn)證方法,包括基于覆蓋率的驗(yàn)證方法,軟硬件協(xié)同驗(yàn)證的方法,基于斷言的驗(yàn)證方法等。針對(duì)具體的系統(tǒng)實(shí)現(xiàn),選擇合理的驗(yàn)證方法,可以大大減少驗(yàn)證的時(shí)間。
本文闡述了Diamond多核DSP處理器系統(tǒng)所采用的將測(cè)試向量自動(dòng)生成的驗(yàn)證技術(shù)和基于覆蓋率為導(dǎo)向相結(jié)合的驗(yàn)證方法[3],并加入了高可觀測(cè)性的自動(dòng)檢測(cè)機(jī)制,建立了一個(gè)可重用的自動(dòng)化驗(yàn)證平臺(tái)。
Diamond 處理器是一種可以和32位通用RISC處理器無(wú)縫連接的DSP處理器。整個(gè)處理器兼容通用32位CPU指令集,同時(shí)具有自己完整功能的DSP擴(kuò)展指令集,使得整個(gè)處理器既可以作為CPU使用,也可以作為DSP使用。
本文中的DUT是Diamond處理器系統(tǒng)的數(shù)據(jù)通路(Datapass)部分,其結(jié)構(gòu)如圖1所示。它內(nèi)部由Decode_32、ALU、MUL、LDST、DAG、Reg_pool組成。Decode_32模塊完成32位指令的譯碼,轉(zhuǎn)換成11位編碼分配給各個(gè)運(yùn)算模塊。ALU模塊處理加減、移位等邏輯運(yùn)算指令功能。MUL模塊主要處理乘法、乘累加等乘法類(lèi)指令功能。LDST模塊完成memory的數(shù)據(jù)存儲(chǔ)功能。DAG模塊主要完成memory地址運(yùn)算的功能。Reg_pool是系統(tǒng)的寄存器堆,所有指令的數(shù)據(jù)都要從這里讀出,運(yùn)算結(jié)果最終也要寫(xiě)回到這里。
整個(gè)系統(tǒng)的數(shù)據(jù)通路主要是由這幾個(gè)模塊通過(guò)分配好的流水級(jí)進(jìn)行指令的譯碼,數(shù)據(jù)和地址的運(yùn)算,最終寫(xiě)回到寄存器堆中相應(yīng)的寄存器中。
圖1 Diamond DSP處理器系統(tǒng)的數(shù)據(jù)通路簡(jiǎn)圖
根據(jù)DSP處理器系統(tǒng)的特性及驗(yàn)證需求,設(shè)計(jì)的平臺(tái)結(jié)構(gòu)如圖2所示。各個(gè)模塊的功能如下文描述。
Makefile是用于自動(dòng)編譯并優(yōu)化程序結(jié)構(gòu)的UNIX統(tǒng)一體。用這個(gè)文件來(lái)組織我們的驗(yàn)證環(huán)境,能夠方便地指定仿真庫(kù)和模式、網(wǎng)表路徑、配置仿真模式、控制仿真波形的開(kāi)關(guān)、重命名log文件等功能[4]。DSP自動(dòng)驗(yàn)證環(huán)境集成了兩種驗(yàn)證方式:Special方式和Random方式。只需要輸入相應(yīng)的命令make special或make random,自動(dòng)生成相應(yīng)的log文件和wave文件,方便快速定位錯(cuò)誤并修正bug。
它是一個(gè)腳本文件,主要用于設(shè)置本地仿真環(huán)境、創(chuàng)建目錄文件并復(fù)制環(huán)境、更新模塊文件、運(yùn)行仿真等功能。
向量文件是所有測(cè)試激勵(lì)的集合,在DSP自動(dòng)化驗(yàn)證平臺(tái)中,采用受約束的隨機(jī)激勵(lì)為主,定向激勵(lì)為輔的驗(yàn)證策略。我們有兩種不同的測(cè)試向量:自動(dòng)生成的隨機(jī)測(cè)試向量[5]和根據(jù)DSP指令編寫(xiě)的定向測(cè)試向量。隨機(jī)測(cè)試向量是用C語(yǔ)言編寫(xiě)的偽隨機(jī)生成程序自動(dòng)產(chǎn)生的32位指令編碼,指令之間滿(mǎn)足DSP系統(tǒng)中的指令約束關(guān)系,測(cè)試的覆蓋范圍比定向測(cè)試要全面,比完全隨機(jī)測(cè)試覆蓋點(diǎn)準(zhǔn)確,有效地縮短達(dá)到目標(biāo)覆蓋率的時(shí)間。定向測(cè)試向量是由我們?nèi)藶榫帉?xiě),通過(guò)對(duì)覆蓋率的分析,會(huì)得出一些驗(yàn)證上的功能“遺漏點(diǎn)”,這些“遺漏點(diǎn)”是偽隨機(jī)生成程序無(wú)法覆蓋到的功能點(diǎn),通過(guò)定向測(cè)試向量的添加能夠提高整體的覆蓋率。
它是一個(gè)perl腳本[6]文件,主要用于生成固定格式的report文件,重命名及保存生成的log文件和波形文件。
波形控制文件dump.v主要通過(guò)調(diào)用VCS自帶的波形操作函數(shù),保存仿真波形,為方便驗(yàn)證打開(kāi)或者關(guān)閉某些模塊的波形保存等等。
主要用于指定覆蓋率收集的層級(jí)關(guān)系,其中包括添加或者刪除某些模型的覆蓋率收集操作等等。
SDF文件用于后仿,它包括單元延時(shí),設(shè)置并保存檢測(cè)的時(shí)序信息,
Model是驗(yàn)證人員根據(jù)待測(cè)芯片的功能行為描述編寫(xiě)的效仿模型,通過(guò)測(cè)試激勵(lì)的輸入把Model中的輸出作為期望結(jié)果與待測(cè)芯片中得到的輸出結(jié)果進(jìn)行比較,對(duì)芯片進(jìn)行功能驗(yàn)證。
圖2 自動(dòng)化驗(yàn)證平臺(tái)結(jié)構(gòu)圖
該驗(yàn)證環(huán)境設(shè)置了一個(gè)監(jiān)視器,主要是用來(lái)監(jiān)視DUT輸出的數(shù)據(jù),這些數(shù)據(jù)是自動(dòng)檢測(cè)機(jī)制無(wú)法檢查到的。比如控制指令之間數(shù)據(jù)相關(guān)的stall信號(hào),如果有問(wèn)題,就會(huì)第一時(shí)間被監(jiān)視器捕捉到并顯示在log文件里。
自動(dòng)檢測(cè)機(jī)制主要有兩個(gè)功能:
一是檢查經(jīng)過(guò)指令譯碼后的DUT中11位指令編碼與驗(yàn)證平臺(tái)中的編碼是否相同,保證進(jìn)入下層模塊的指令正確性。
二是對(duì)數(shù)據(jù)的比較,首先是測(cè)試生成程序?qū)拇嫫鞫训某跏蓟蹬c驗(yàn)證環(huán)境中的寄存器值相比較,這是對(duì)輸入數(shù)據(jù)的比較,只有保證輸入的正確性,才能進(jìn)行之后數(shù)據(jù)的比較。其次是DUT輸出的結(jié)果與驗(yàn)證環(huán)境得到的期望結(jié)果之間的比較。這種三方之間的比對(duì)機(jī)制,保證了DUT功能的正確性。
仿真log文件是仿真的輸出,包括了cycle、data、engine控制信息,我們可以通過(guò)log文件的信息找到出錯(cuò)的寄存器以及時(shí)間點(diǎn),從而快速定位bug。
以覆蓋率為導(dǎo)向的驗(yàn)證方法(Coverage-Driven Verification)[7]是根據(jù)功能覆蓋點(diǎn)來(lái)測(cè)量驗(yàn)證進(jìn)度,這些功能覆蓋點(diǎn)可以確定一個(gè)功能是否被驗(yàn)證過(guò)。這樣,驗(yàn)證的目標(biāo)變?yōu)樘顫M(mǎn)設(shè)計(jì)的功能覆蓋模型。以覆蓋率為導(dǎo)向的驗(yàn)證方法可以直接測(cè)試平臺(tái)來(lái)填滿(mǎn)這個(gè)功能覆蓋率模型,或者可以讓一個(gè)隨機(jī)的測(cè)試平臺(tái)生成測(cè)試集驗(yàn)證功能。
在自動(dòng)化驗(yàn)證環(huán)境中,我們通過(guò)將隨機(jī)測(cè)試生成程序產(chǎn)生的偽隨機(jī)測(cè)試向量作為測(cè)試激勵(lì),反復(fù)不斷地進(jìn)行指令的隨機(jī)測(cè)試,得到覆蓋率信息,因?yàn)闇y(cè)試向量是根據(jù)偽隨機(jī)序列機(jī)制生成的,肯定會(huì)有一些功能點(diǎn)沒(méi)有覆蓋到。此時(shí)通過(guò)對(duì)覆蓋率的分析可以確定哪些功能點(diǎn)已經(jīng)覆蓋,哪些測(cè)試激勵(lì)是多余的,為功能“遺漏點(diǎn)”添加定向測(cè)試向量進(jìn)行覆蓋并消除冗余的測(cè)試激勵(lì),進(jìn)而提高覆蓋率。圖3為以覆蓋率為導(dǎo)向的驗(yàn)證方法的流程,整個(gè)流程包括兩個(gè)環(huán)路,在實(shí)際應(yīng)用中,可能需要多次迭代才能完成驗(yàn)證。
圖3 以覆蓋率為導(dǎo)向的驗(yàn)證流程圖
驗(yàn)證DSP數(shù)據(jù)通路(Datapass)仿真出來(lái)的存儲(chǔ)類(lèi)指令讀寫(xiě)memory操作部分波形如圖4所示。自動(dòng)檢測(cè)機(jī)制會(huì)檢查DUT的輸出結(jié)果,將該結(jié)果與驗(yàn)證平臺(tái)中得到的期望結(jié)果進(jìn)行比較,如果相等,說(shuō)明DUT中存儲(chǔ)類(lèi)指令讀寫(xiě)memory的操作功能是正確的。同理可以檢查其它操作的驗(yàn)證結(jié)果。驗(yàn)證過(guò)程中采用了在生成的log文件中根據(jù)是否存在錯(cuò)誤報(bào)告來(lái)判斷設(shè)計(jì)時(shí)都存在缺陷,免去了直接從仿真波形上查到錯(cuò)誤的繁瑣性。如果仿真過(guò)程中報(bào)出錯(cuò)誤,但從log文件上看不出錯(cuò)誤原因,那么就要通過(guò)仿真波形來(lái)觀察錯(cuò)誤發(fā)生的原因。根據(jù)芯片支持多種類(lèi)型指令操作的特性,而且指令之間會(huì)存在數(shù)據(jù)相關(guān)等問(wèn)題,為了提高驗(yàn)證的效率,我們開(kāi)發(fā)了自動(dòng)生成程序,用于生成受約束的隨機(jī)測(cè)試向量,覆蓋到了絕大部分指令功能,通過(guò)多次回歸測(cè)試[8],分析覆蓋率,為隨機(jī)測(cè)試未覆蓋到的指令功能添加定向測(cè)試向量,所有的測(cè)試向量全部通過(guò)并且使覆蓋率達(dá)到了100%。
圖4 存儲(chǔ)類(lèi)指令讀寫(xiě)memory操作部分波形圖
該驗(yàn)證平臺(tái)中除了傳統(tǒng)的兩方對(duì)比機(jī)制外,還添加了軟件模擬器生成的測(cè)試結(jié)果比較,在仿真運(yùn)行過(guò)程中,通過(guò)調(diào)用系統(tǒng)指令SystemCall可以在仿真過(guò)程中檢測(cè)測(cè)試結(jié)果的正確與否,該軟件模擬器由SystemC編寫(xiě)完成,同樣是根據(jù)設(shè)計(jì)中的約束進(jìn)行配置,它帶來(lái)的好處是防止DUT與測(cè)試環(huán)境產(chǎn)生同樣的錯(cuò)誤而導(dǎo)致出現(xiàn)同樣的錯(cuò)誤結(jié)果;另一方面也提高了功能驗(yàn)證中的完善性和正確性。第三方結(jié)果比較機(jī)制的添加,使驗(yàn)證人員能夠及時(shí)發(fā)現(xiàn)驗(yàn)證環(huán)境中無(wú)法發(fā)現(xiàn)的功能遺漏點(diǎn),縮短了驗(yàn)證周期,節(jié)省了人力物力。
本文設(shè)計(jì)的驗(yàn)證平臺(tái)結(jié)構(gòu)清晰,模塊間相對(duì)獨(dú)立。在驗(yàn)證其它DUT時(shí),驗(yàn)證平臺(tái)中的監(jiān)視器,自動(dòng)檢測(cè)機(jī)制可以直接復(fù)用[9],而驗(yàn)證環(huán)境中的功能模塊可以根據(jù)DUT的特性加以修改便可重用。這樣可以節(jié)省重新編寫(xiě)代碼的時(shí)間,加速了驗(yàn)證的進(jìn)程。
以覆蓋率為導(dǎo)向的DSP自動(dòng)化驗(yàn)證平臺(tái),借助于隨機(jī)測(cè)試向量生成的自動(dòng)化,使驗(yàn)證工人員不需要手工編寫(xiě)繁雜的測(cè)試向量,數(shù)據(jù)比對(duì)過(guò)程完全自動(dòng)化,省去了人工比對(duì)波形的繁復(fù)工作。另外,平臺(tái)中添加以覆蓋率為導(dǎo)向的驗(yàn)證策略,保證了功能覆蓋的完全。經(jīng)過(guò)分析可以看出,該驗(yàn)證平臺(tái)模塊化強(qiáng)、易于理解和重用,驗(yàn)證過(guò)程自動(dòng)化,能夠有效地提高驗(yàn)證效率,確保驗(yàn)證功能的完整性。
[1] 劉燕,王京梅.基于VMM的流量管理芯片驗(yàn)證[J].現(xiàn)代電子技術(shù),2009(12):15-18.
[2] 董楊鑫,鄭建宏.基于斷言的SoC設(shè)計(jì)驗(yàn)證方法[J].電子測(cè)試,2007(2):52-55.
[3] Qiu Li, Feng Dong-qin. Functional Verification of EPA Chip.[C]// Proc. International Conference on Electric Information and Control Engineering(ICEICE) 2011.[S.l.]:IEEE Press, 2011:1-5.
[4] 陳皓.跟我一起寫(xiě)Makefile. [EB/OL].[2012-06-18].http://www.Cublog.cn/u/19881/upfile /060718103303.pdf.
[5] Carl Pixley, Aruna Chittor, Fred Meyer. Functional Verification 2003:Technology, Tools and Methodology. [C]// Proc. ASIC, 2003.[S.l.]:IEEE Press, 2003:1-5.
[6] Randal L.Scbwartz, Tom Pboenix.Perl語(yǔ)言入門(mén)[M] 南京:東南大學(xué)出版社,2009.
[7] 褚曉濱,陸鐵軍.結(jié)合斷言與覆蓋率為導(dǎo)向的驗(yàn)證方法[J].微電子學(xué)與計(jì)算機(jī),2008(11):40-43.
[8] 侯海軍,郭斌林.基于VMM的芯片驗(yàn)證平臺(tái)設(shè)計(jì)[J].中國(guó)水運(yùn),2008(12):22-35.
[9] O.Petlin,A. Genusov, L. Wakeman. METHODOLOGY AND CODE REUSE IN THE VERIFICATION OF TELECOMMUNICATION SOCs [C]// Proc. 13th Annual IEEE International ASIC/SOC Conference, 2000.[S.l.]:IEEE Press, 2000:187-191.