• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種高效率可重構(gòu)的CPU驗(yàn)證平臺

      2021-12-02 11:09:08劉春銳張宏奎黃旭東陳振嬌
      電子與封裝 2021年11期
      關(guān)鍵詞:參考模型用例覆蓋率

      劉春銳,張宏奎,黃旭東,陳振嬌

      (中科芯集成電路有限公司,江蘇無錫214072)

      1 引言

      隨著大規(guī)模集成電路技術(shù)的不斷發(fā)展,數(shù)字集成電路的規(guī)模不斷增大,功能不斷增強(qiáng),這給完備性驗(yàn)證帶來了更大的挑戰(zhàn)[1]。在CPU芯片的設(shè)計(jì)中,高效和完備的功能驗(yàn)證已成為CPU可靠性的重要依據(jù)[2],為了全面驗(yàn)證CPU的功能,驗(yàn)證工程師通常需要編寫成千上萬條驗(yàn)證用例[3],并且需要逐一運(yùn)行測試并分析結(jié)果。據(jù)統(tǒng)計(jì),驗(yàn)證時間通常占到處理器芯片研發(fā)流程的60%以上[4]。如果完全采用人工的方法分析和查錯,驗(yàn)證效率極低,正確性難以保證,驗(yàn)證周期長且驗(yàn)證完成時間無法預(yù)估。因此,一個快速、完備、系統(tǒng)的功能驗(yàn)證平臺對于CPU的設(shè)計(jì)來說至關(guān)重要,可有效縮短芯片設(shè)計(jì)周期并提高設(shè)計(jì)質(zhì)量[5]。除此之外,由于CPU指令多,指令組合場景多,驗(yàn)證用例非常龐大,除了驗(yàn)證平臺外,通過編寫自動化腳本,批量構(gòu)建用例和統(tǒng)計(jì)驗(yàn)證結(jié)果,對提高整個驗(yàn)證效率也是至關(guān)重要的[6]。本文提出了一種高效率可重構(gòu)的CPU驗(yàn)證平臺,可通過自動化腳本構(gòu)建用例和統(tǒng)計(jì)結(jié)果,通過代碼覆蓋率標(biāo)志驗(yàn)證結(jié)束。

      2 驗(yàn)證平臺結(jié)構(gòu)

      高效率可重構(gòu)的CPU驗(yàn)證平臺采用了模塊化結(jié)構(gòu),具有更強(qiáng)的可重復(fù)使用性和可移植性,有效提高了驗(yàn)證效率,縮短了芯片驗(yàn)證周期[7]。不同指令集架構(gòu)可以使用驗(yàn)證平臺設(shè)計(jì)思路修改參考模型后即可重復(fù)使用。另外,該設(shè)計(jì)平臺提供了自動調(diào)試功能,自動比較CPU執(zhí)行指令的結(jié)果值和參考模型執(zhí)行指令的結(jié)果值,為分析、調(diào)試和定位錯誤提供了有效的手段,可以大大提高設(shè)計(jì)迭代效率。CPU驗(yàn)證平臺由驗(yàn)證用例生成模塊、匯編器模塊、CPU模塊、參考模型模塊、結(jié)果比較模塊、參考模型監(jiān)視模塊、CPU監(jiān)視模塊、程序RAM和數(shù)據(jù)RAM構(gòu)成,該驗(yàn)證平臺可以實(shí)現(xiàn)從驗(yàn)證程序開發(fā)到驗(yàn)證結(jié)果查錯的整個流程,其結(jié)構(gòu)如圖1所示。

      圖1 CPU驗(yàn)證平臺結(jié)構(gòu)

      2.1 CPU模塊

      CPU模塊是驗(yàn)證平臺的驗(yàn)證主體,本文的CPU為基于TI指令集架構(gòu)的某CPU微處理器,該CPU微處理器的特性如下:

      1)哈佛結(jié)構(gòu);

      2)8級流水線結(jié)構(gòu);

      3)單發(fā)射順序執(zhí)行;

      4)支持32 bit單精度浮點(diǎn)計(jì)算;

      5)支持32 bit定點(diǎn)計(jì)算;

      6)指令長度支持16 bit和32 bit兩種。

      2.2 驗(yàn)證用例生成模塊

      一般CPU的流水線結(jié)構(gòu)包括取指、譯碼、訪存、執(zhí)行和寫回等階段,其中指令便是CPU的輸入源。為驗(yàn)證CPU的功能,需要編寫指令并將其加載到CPU的程序RAM,然后啟動CPU,CPU讀取程序RAM中的指令并運(yùn)行指令,最后根據(jù)CPU的指令執(zhí)行結(jié)果驗(yàn)證設(shè)計(jì)的正確性。

      為完備驗(yàn)證CPU的功能,在開發(fā)CPU的驗(yàn)證用例前,需要分析CPU的特性,根據(jù)CPU的特性進(jìn)一步將其分解成功能測試點(diǎn),形成驗(yàn)證規(guī)格表,驗(yàn)證人員據(jù)此開發(fā)驗(yàn)證用例覆蓋所有的測試點(diǎn)。由于CPU指令多,CPU相關(guān)流水線結(jié)構(gòu)沖突和數(shù)據(jù)沖突場景多,驗(yàn)證用例數(shù)量龐大,所以大部分驗(yàn)證用例通過驗(yàn)證用例生成模塊的自動化腳本批量生成,邊界驗(yàn)證用例由人工編寫生成。為全面覆蓋CPU的功能,驗(yàn)證用例采用匯編代碼編寫,通過驗(yàn)證用例生成模塊生成后綴為.asm的匯編驗(yàn)證用例。

      驗(yàn)證用例生成模塊主要由生成驗(yàn)證用例的Perl(Practical Extraction and Report Language)[8]腳本構(gòu)成。為保證生成的匯編驗(yàn)證用例的正確性,在Perl腳本中將CPU的每條指令均單獨(dú)構(gòu)建子函數(shù),每個子函數(shù)使用編號命名,子函數(shù)內(nèi)部將該指令的限制用法單獨(dú)編程。以UI16TOF32指令為例,其子函數(shù)Perl腳本如下:

      將待驗(yàn)證的超過400條CPU指令分類并逐條編寫Perl子函數(shù),Perl主函數(shù)通過調(diào)用編號隨機(jī)的Perl子函數(shù)實(shí)現(xiàn)各指令間的隨機(jī)組合,并按照匯編格式生成匯編驗(yàn)證用例。

      現(xiàn)有CPU驗(yàn)證平臺的驗(yàn)證用例通常使用C語言或者高級語言隨機(jī)生成,通過編譯器編譯后加載到CPU中進(jìn)行驗(yàn)證。使用高級語言編寫的驗(yàn)證用例由于編譯器的優(yōu)化,通常不能實(shí)現(xiàn)CPU內(nèi)部資源的高效利用,從而不能覆蓋到CPU數(shù)據(jù)相關(guān)沖突和流水線相關(guān)沖突的部分場景,造成CPU功能驗(yàn)證不全、功能覆蓋率難收斂的情況。本文使用自動化Perl腳本直接構(gòu)建匯編驗(yàn)證用例,而匯編驗(yàn)證用例會直接指定指令使用的CPU內(nèi)部資源,從而可以覆蓋到CPU數(shù)據(jù)相關(guān)沖突和流水線相關(guān)沖突的各種場景。這不僅提高了CPU驗(yàn)證的可靠性,而且由于無需使用編譯器編譯,提高了仿真效率,縮短了驗(yàn)證周期。

      2.3 匯編器模塊

      匯編驗(yàn)證用例構(gòu)建完成后,使用TI公司的CCS匯編器編譯,通過格式轉(zhuǎn)換器轉(zhuǎn)換成Verilog代碼能識別的存儲器存儲文件,該存儲文件是后綴為.hex的程序機(jī)器碼文件。格式轉(zhuǎn)換器采用Perl語言編寫,可生成多種Verilog能夠識別的文件。

      2.4 程序RAM

      程序RAM內(nèi)部通過Verilog的$readmemh系統(tǒng)函數(shù)讀取后綴為.hex的存儲器文件,存入程序RAM中,CPU模塊通過存儲器接口讀取該程序RAM空間的程序數(shù)據(jù)。

      2.5 數(shù)據(jù)RAM

      數(shù)據(jù)RAM主要存儲CPU流水線訪存和回寫的數(shù)據(jù)。

      2.6 參考模型模塊

      參考模型模塊是針對CPU模塊提出的,參考模型模塊和CPU模塊是對產(chǎn)品特性的兩個獨(dú)立的實(shí)現(xiàn),也就是說,參考模型模塊功能上與CPU模塊等價(jià),但參考模型模塊與CPU模塊的設(shè)計(jì)不同,兩者區(qū)別如下。

      1)輸入:參考模型模塊的輸入是匯編驗(yàn)證用例,而CPU模塊的輸入是存儲在程序RAM中的經(jīng)匯編器模塊編譯后的二進(jìn)制指令碼。

      2)指令處理流程:參考模型模塊逐行讀取匯編驗(yàn)證用例中的指令,每條指令執(zhí)行完成后才會繼續(xù)讀取下一條匯編指令,而CPU模塊是基于流水線的設(shè)計(jì),讀取當(dāng)前指令不需要上一條指令執(zhí)行完成。

      3)運(yùn)算單元:參考模型使用SystemVerilog[9]語言完成指令的乘、加、移位等運(yùn)算,其具有接口、斷言、受約束的隨機(jī)化激勵等特點(diǎn),能夠大幅提高測試效率,且具有較高的功能測試覆蓋率[10],而CPU模塊的乘、加、移位等運(yùn)算是基于電路的設(shè)計(jì)。

      根據(jù)上述參考模型模塊和CPU模塊設(shè)計(jì)的主要區(qū)別,可以得出參考模型模塊的設(shè)計(jì)思想:逐行讀取匯編文件中的匯編指令,通過SystemVerilog字符串匹配技術(shù)完成匯編指令匹配,從而識別出匯編指令功能,然后實(shí)現(xiàn)指令功能。參考模型對指令的串行執(zhí)行方式巧妙地驗(yàn)證了CPU模塊的流水線相關(guān)沖突和數(shù)據(jù)相關(guān)沖突設(shè)計(jì)的正確性。同時,由于參考模型模塊和CPU模塊的運(yùn)算單元設(shè)計(jì)不一致,CPU模塊運(yùn)算單元的正確性也可以得到驗(yàn)證。參考模型的設(shè)計(jì)流程如圖2所示。

      圖2 參考模型模塊設(shè)計(jì)流程

      參考模型模塊的設(shè)計(jì)流程描述如下:

      1)參考模型模塊使用Perl腳本讀入驗(yàn)證用例生成模塊產(chǎn)生的后綴為.asm的匯編驗(yàn)證用例,將匯編驗(yàn)證用例中的注釋去掉,并在匯編驗(yàn)證用例中的每行指令結(jié)束位置添加行結(jié)束標(biāo)志;

      2)參考模型模塊讀入Perl腳本處理后的匯編驗(yàn)證用例,通過SystemVerilog的$feof系統(tǒng)任務(wù)判斷該驗(yàn)證用例是否結(jié)束,當(dāng)驗(yàn)證用例沒有被讀完時,轉(zhuǎn)步驟3,否則參考模型模塊的流程結(jié)束;

      3)參考模型模塊使用$fscanf系統(tǒng)任務(wù)按字符讀取匯編驗(yàn)證用例,并存入指令字符數(shù)組中,然后通過步驟1添加的行結(jié)束標(biāo)志判斷該行指令是否結(jié)束,如果該行指令未結(jié)束,則重復(fù)步驟3,否則,跳轉(zhuǎn)至步驟4;

      4)參考模型模塊讀取指令字符數(shù)組,通過字符串匹配功能識別匯編指令的操作碼和操作數(shù),如MOV32 R0,R1,操作碼是MOV32,目的操作數(shù)是寄存器R0,源操作數(shù)是寄存器R1;

      5)參考模型模塊根據(jù)步驟4識別出的指令功能和操作數(shù)執(zhí)行該指令,如MOV32 R0,R1,將寄存器R1的值送到R0中,然后開始下一條指令的讀取,跳轉(zhuǎn)至步驟2。

      參考模型模塊對比驗(yàn)證CPU模塊的方式為:將驗(yàn)證用例生成模塊生成的同一驗(yàn)證用例送入?yún)⒖寄P湍K和CPU模塊,然后比較參考模型模塊和CPU模塊所有指令的執(zhí)行結(jié)果,如果參考模型模塊和CPU模塊的行為不一致,或者CPU模塊的功能實(shí)現(xiàn)出現(xiàn)錯誤,或者參考模型模塊的功能實(shí)現(xiàn)出現(xiàn)錯誤,或者兩者實(shí)現(xiàn)功能均出現(xiàn)錯誤,通過定位修改參考模型模塊和CPU模塊的錯誤。如果CPU模塊和參考模型模塊的行為一致,或者兩者都對,這是希望的結(jié)果;或者兩者犯同樣的錯誤,那么需要想辦法減小這種情況出現(xiàn)的可能性,比如參考模型模塊的設(shè)計(jì)人員不能為CPU模塊設(shè)計(jì)人員,或者引入第三方,例如VIP、FPGA[11]原型等。本文采用參考模型模塊設(shè)計(jì)人員不為CPU模塊設(shè)計(jì)人員的方法降低參考模型和CPU模塊設(shè)計(jì)同時出錯的可能性。

      參考模型模塊是該驗(yàn)證平臺中最重要的組件,參考模型模塊是保證功能驗(yàn)證正確性的核心[12],也是該驗(yàn)證平臺實(shí)現(xiàn)高效率和重構(gòu)優(yōu)勢的核心組件?,F(xiàn)有CPU驗(yàn)證平臺參考模型的設(shè)計(jì)基本分為兩類,一類是使用編譯器自帶的由高級語言編寫的軟件參考模型,軟件參考模型復(fù)雜難懂,某些軟件參考模型的核心代碼甚至是加密的,這增大了驗(yàn)證人員的調(diào)試難度。搭建基于軟件參考模型的驗(yàn)證平臺通常工作量大,人力投入高,且調(diào)試周期長。另一類是基于指令碼匹配技術(shù)設(shè)計(jì)的參考模型,該類參考模型通常會遵照CPU流水線時序編寫,其工作量與CPU設(shè)計(jì)工作量相當(dāng),人力投入和調(diào)試周期依然較長。本文通過SystemVerilog的字符串匹配技術(shù)串行識別匯編文件,無需嚴(yán)格按照流水線時序設(shè)計(jì),參考模型的工作量大大減少,人力投入和周期均減少,不僅提高了CPU的驗(yàn)證效率,而且縮短了驗(yàn)證周期。

      2.7 CPU監(jiān)視模塊

      CPU監(jiān)視模塊主要完成CPU模塊指令執(zhí)行結(jié)果的監(jiān)測功能,CPU模塊通常的指令執(zhí)行結(jié)果是修改CPU模塊內(nèi)部資源和數(shù)據(jù)RAM,CPU模塊內(nèi)部資源包括通用寄存器和輔助寄存器等,CPU監(jiān)視模塊主要將CPU模塊對寄存器和數(shù)據(jù)RAM的執(zhí)行結(jié)果打印到日志中。

      2.8 參考模型監(jiān)視模塊

      參考模型監(jiān)視模塊主要完成參考模型模塊指令執(zhí)行結(jié)果的監(jiān)測功能,參考模型模塊模擬CPU模塊的行為,參考模型模塊內(nèi)部的通用寄存器、輔助寄存器和數(shù)據(jù)RAM資源也同樣參照CPU模塊定義,參考模型監(jiān)視模塊主要是將參考模型模塊對寄存器和數(shù)據(jù)RAM的執(zhí)行結(jié)果打印到日志中。

      2.9 結(jié)果比較模塊

      結(jié)果比較模塊通過對比CPU監(jiān)視模塊和參考模型監(jiān)視模塊提供的指令運(yùn)行的打印結(jié)果,給出比較結(jié)果,幫助驗(yàn)證人員快速完成CPU驗(yàn)證結(jié)果的分析和判斷。

      3 驗(yàn)證流程

      本文采用Synopsys公司的VCS作為仿真工具,為實(shí)現(xiàn)批量驗(yàn)證,編寫了基于Perl的批處理程序,該程序可一次批量驗(yàn)證多個用例,并統(tǒng)計(jì)驗(yàn)證結(jié)果,生成驗(yàn)證報(bào)告。批量驗(yàn)證流程如圖3所示。

      圖3 批量驗(yàn)證流程

      批量驗(yàn)證流程描述如下:

      1)通過驗(yàn)證用例生成模塊批量生成驗(yàn)證用例,即后綴為.asm的匯編驗(yàn)證用例;

      2)將匯編驗(yàn)證用例傳入?yún)R編器模塊,跳轉(zhuǎn)至第3步,將匯編驗(yàn)證用例傳入?yún)⒖寄P湍K,跳轉(zhuǎn)至第6步;

      3)匯編器模塊將匯編驗(yàn)證用例編譯成指令碼之后,程序RAM將指令碼讀入RAM中;

      4)CPU模塊讀取存在程序RAM中的指令碼指令,并執(zhí)行指令;

      5)CPU的監(jiān)視模塊監(jiān)測CPU模塊的執(zhí)行結(jié)果,并將CPU模塊的執(zhí)行結(jié)果輸出;

      6)參考模型模塊讀取驗(yàn)證用例生成模塊產(chǎn)生的匯編指令,并執(zhí)行指令;

      7)參考模型監(jiān)視模塊監(jiān)測參考模型模塊的執(zhí)行結(jié)果,并將參考模型模塊的執(zhí)行結(jié)果輸出;

      8)結(jié)果比較模塊比較參考模型的監(jiān)視模塊和CPU監(jiān)視模塊的輸出結(jié)果,如果結(jié)果一致,則輸出該驗(yàn)證用例測試通過的信息,否則輸出驗(yàn)證用例測試失敗的信息;

      9)重新開始下一個驗(yàn)證用例的仿真驗(yàn)證,依次循環(huán)直到所有的驗(yàn)證用例全部運(yùn)行結(jié)束,批處理程序顯示本次批量驗(yàn)證的統(tǒng)計(jì)信息,并輸出驗(yàn)證用例通過或者失敗的信息;

      10)所有驗(yàn)證用例仿真均通過后,收集并合并驗(yàn)證用例覆蓋率。

      4 結(jié)果分析

      運(yùn)用該功能驗(yàn)證平臺進(jìn)行了32位CPU的驗(yàn)證。根據(jù)該CPU的特性,分別驗(yàn)證了5類共計(jì)1044條驗(yàn)證用例,驗(yàn)證結(jié)果均通過,驗(yàn)證結(jié)果如表1所示。

      表1 驗(yàn)證結(jié)果

      除此之外,為保證驗(yàn)證的充分性,對所有驗(yàn)證用例進(jìn)行了代碼覆蓋率收集和合并。通過分析覆蓋率,定向構(gòu)造用例,提高驗(yàn)證的完備性。

      本驗(yàn)證平臺的代碼覆蓋率結(jié)果如下。

      1)行覆蓋率:CPU的行覆蓋率為100%。

      2)翻轉(zhuǎn)覆蓋率:CPU的翻轉(zhuǎn)覆蓋率為99.81%,覆蓋率較低的原因是輸入和輸出數(shù)據(jù)信號的翻轉(zhuǎn)覆蓋率低,本文主要關(guān)注控制信號的翻轉(zhuǎn)覆蓋率,對不能達(dá)到100%的控制信號均進(jìn)行了分析,確認(rèn)是否是CPU不能進(jìn)入的值,對于CPU可能會翻轉(zhuǎn)的值,定向構(gòu)造用例,進(jìn)行覆蓋。

      3)條件覆蓋率:CPU的條件覆蓋率為83.17%,未覆蓋的條件分支是設(shè)計(jì)中不會出現(xiàn)的分支。

      4)狀態(tài)機(jī)覆蓋率:本文的DUT內(nèi)部無狀態(tài)機(jī)。

      5)分支覆蓋率:CPU的分支覆蓋率為100%。

      5 結(jié)束語

      在CPU的設(shè)計(jì)中,高效和完備的功能驗(yàn)證已成為CPU是否可靠的重要參考依據(jù),本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于SystemVerilog的CPU驗(yàn)證平臺,論述了驗(yàn)證平臺的整體設(shè)計(jì)結(jié)構(gòu)、實(shí)現(xiàn)流程和批量驗(yàn)證的實(shí)現(xiàn)方式。該驗(yàn)證平臺有較好的通用性和可移植性,對于不同的指令集架構(gòu),稍加修改參考模型便可使用。該驗(yàn)證平臺已成功應(yīng)用于32位CPU芯片的功能驗(yàn)證,相比該CPU之前的驗(yàn)證方法,驗(yàn)證周期從預(yù)估的10個月縮短到3個月,大大提高了驗(yàn)證效率,縮短了CPU交付周期。另外,該設(shè)計(jì)平臺可以通過參考模型模塊和監(jiān)視模塊快速定位CPU的設(shè)計(jì)缺陷,縮短設(shè)計(jì)人員迭代開發(fā)的周期。

      猜你喜歡
      參考模型用例覆蓋率
      民政部等16部門:到2025年村級綜合服務(wù)設(shè)施覆蓋率超80%
      UML用例模型中依賴關(guān)系的比較與分析
      我國全面實(shí)施種業(yè)振興行動 農(nóng)作物良種覆蓋率超過96%
      聯(lián)鎖軟件詳細(xì)設(shè)計(jì)的測試需求分析和用例編寫
      從出土文獻(xiàn)用例看王氏父子校讀古書的得失
      基于環(huán)境的軍事信息系統(tǒng)需求參考模型
      語義網(wǎng)絡(luò)P2P參考模型的查詢過程構(gòu)建
      基于噴丸隨機(jī)模型的表面覆蓋率計(jì)算方法
      基于覆蓋率驅(qū)動的高性能DSP指令集驗(yàn)證方法
      基于參考模型的制造業(yè)MES需求建模
      沈丘县| 新平| 宿迁市| 云安县| 屏东市| 阳西县| 古浪县| 利辛县| 荃湾区| 新密市| 晋宁县| 安岳县| 通化市| 宣武区| 天等县| 石屏县| 兴化市| 彰化市| 宁国市| 邓州市| 寿宁县| 当阳市| 高安市| 华宁县| 山阴县| 锦州市| 江阴市| 宁德市| 青岛市| 济宁市| 肥西县| 同江市| 密云县| 灵寿县| 乌鲁木齐市| 藁城市| 宕昌县| 纳雍县| 洪雅县| 尤溪县| 永年县|