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