亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于VMM的ALU驗證

        2015-04-12 00:00:00蘇雪潘明翟江濤
        現(xiàn)代電子技術(shù) 2015年7期

        摘 要: 基于VMM方法學(xué)設(shè)計和實現(xiàn)了一個隨機驗證環(huán)境,驗證一個64位ALU。該驗證環(huán)境具備一套功能完備的隨機測試程序發(fā)生器,可以生成覆蓋率指導(dǎo)的有約束的定點、浮點指令序列,調(diào)用一個由C語言實現(xiàn)的參考模型進行運算結(jié)果自檢,并采用覆蓋率收斂技術(shù)實現(xiàn)覆蓋率快速收斂。實踐結(jié)果表明,設(shè)計的隨機驗證環(huán)境,能夠高效驗證ALU的各項邏輯功能,減少測試時間,且隨機測試程序生成模塊可以簡單移植應(yīng)用于處理器其他模塊的功能驗證。

        關(guān)鍵詞: SystemVerilog; VMM; 驗證; 算數(shù)邏輯單元

        中圖分類號: TN407?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)07?0144?04

        隨著高性能處理器設(shè)計日趨復(fù)雜,如何對處理器各設(shè)計模塊進行有效而充分的驗證,是芯片設(shè)計成功的關(guān)鍵因素之一[1]。目前芯片的研發(fā)過程中,功能驗證會消耗70%以上的資源,驗證的自動化程度、驗證語言的使用、驗證平臺的可重用性等問題都嚴(yán)重制約著驗證的進度。為此,Synopsys推出了VMM(Verification Methodology Manual)驗證方法學(xué)解決了上述問題。VMM使用SystemVerilog驗證語言,采用了覆蓋率主導(dǎo)、隨機約束生成、基于斷言的層次化驗證結(jié)構(gòu)。本文圍繞Synopsys的VMM,構(gòu)建了一個ALU(Arithmetic Logic Unit,算術(shù)邏輯單元)的隨機驗證環(huán)境。

        1 DUT

        ALU是微處理器中最重要和最常用的部件之一,它是集多種算術(shù)功能和邏輯功能于一體的單元電路[2]。一般來講,微處理器內(nèi)部主要由數(shù)據(jù)通路和控制通路兩部分組成,ALU是數(shù)據(jù)通路的重要組成部分,是微處理器的核心功能部件,對微處理器性能具有決定性的影響[3?6]。

        該環(huán)境驗證了一款高性能處理器的64位ALU,其支持123條定點、浮點運算指令。ALU接收Decode(譯碼)模塊的譯碼信息(包括指令類型、寄存器號、線程號等控制信息),從下級模塊Register File(寄存器堆)相應(yīng)位置取出操作數(shù)進行運算。其控制邏輯alu_ctrl分為salu_ctrl和calu_ctrl兩個模塊,分別控制SALU和CALU。ALU內(nèi)部結(jié)構(gòu)如圖1所示。

        圖1 ALU內(nèi)部結(jié)構(gòu)

        SALU的控制模塊將定點和浮點比較/選擇指令的r stage譯碼信號轉(zhuǎn)換成fx1 stage的控制信號,并根據(jù)ELU(Error Logic Unit,異常邏輯單元)的flush指示判斷是否將salu_dph的運算結(jié)果寫回寄存器堆。SALU的data_path負(fù)責(zé)定點指令(乘加/除法除外)和浮點選擇/比較類指令的執(zhí)行,執(zhí)行流水線經(jīng)歷fx1→fx2→fx3→w。

        CALU的控制模塊將定點乘法/除法和浮點乘加/除法、開方、轉(zhuǎn)換、舍入指令的r stage譯碼信號轉(zhuǎn)換成fx1 stage的控制信號,同樣的也根據(jù)ELU是否發(fā)生flush決定是否寫回calu_dph的運算結(jié)果。CALU的data_path負(fù)責(zé)浮點運算指令(加減、乘法、除法、開方、舍入、轉(zhuǎn)換)和定點乘加、除法的執(zhí)行。執(zhí)行流水線有3條:

        (1) 定點乘加類指令,流水線經(jīng)歷fx1→fx2→fx3→fx4→fx5→fx6→fw;

        (2) 浮點乘加、加減、舍入、轉(zhuǎn)換運算,流水線經(jīng)歷fp1→fp2→...→fp8→fpw;

        (3)浮點除法、定點除法運算、浮點開方運算,為Blocking執(zhí)行,經(jīng)歷34個cycle。

        考慮到定點與符點運算的指令類型非常多,控制信號的數(shù)量龐大,對該模塊各種輸入信息的隨機控制非常繁瑣復(fù)雜,而且測試過程中很多功能點的驗證容易遺漏,所以采用了從Decode模塊開始注入激勵的驗證方案,即DUT為Decode、ALU、Register File三個模塊。這樣可以直接對DUT注入十六進制指令碼,而不需要對ALU的控制信號逐一約束,采用這種方案極大地減少了隨機信號生成的工作量,測試的覆蓋點也非常全面且容易控制。

        2 基于VMM的ALU驗證結(jié)構(gòu)

        基于VMM的ALU驗證需充分利用VMM的特點,即有約束的隨機激勵生成,自動數(shù)據(jù)對比檢查和功能覆蓋率收集。

        2.1 有約束的隨機激勵生成

        VMM提供了有約束的隨機數(shù)生成。根據(jù)指令語意將ALU指令集進行分類,這樣可以通過一定的約束隨機的生成指令以及指令所需的參數(shù)[7?8],在下一節(jié)的指令生成中會詳細(xì)介紹指令的分類及指令參數(shù)的生成方法。指令生成后,需要通過一個由C代碼實現(xiàn)的匯編器對指令進行處理,這樣匯編指令可以實時轉(zhuǎn)化為十六進制代碼,并可以直接讀入DUT進行仿真測試。

        2.2 自動數(shù)據(jù)對比檢查

        由于ALU是進行各種算數(shù)運算和邏輯運算的部件,傳統(tǒng)的注入?yún)R編代碼,通過觀測仿真波形來確定結(jié)果正確性的驗證方法需要消耗大量人工成本,而且測試數(shù)量非常有限,不適用于遞歸以及大量Test Case的驗證,所以需要一個參照模型能夠生成對應(yīng)的參照結(jié)果,以便快速找出bug。驗證環(huán)境里實現(xiàn)了一個用C語言描述的ALU參照模型。該模型以十六進制指令碼作為輸入,在每條指令執(zhí)行完畢后會寫出對應(yīng)參考結(jié)果。ALU通過Register File來保存數(shù)據(jù)和狀態(tài),可以通過對比Register File的內(nèi)容,來保證ALU的每一條指令的工作狀態(tài)都是和參考模型是一致的。驗證環(huán)境可以讀出ALU執(zhí)行指令后的運算結(jié)果并傳遞給Scoreboard,環(huán)境里C參考模型執(zhí)行的每一條指令的結(jié)果也都會保存下來供Scoreboard讀入,Scoreboard可以實現(xiàn)運算結(jié)果的自動對比,并且在log中打印出來。

        2.3 覆蓋率收集

        為設(shè)計中的特征單獨編寫一套定向測試的方法需要人工編寫代碼,這需要消耗大量的時間和精力,并且很難統(tǒng)計指令的執(zhí)行情況,依靠這種方法得到滿意的覆蓋率非常困難。基于VMM的驗證環(huán)境中,鑒于C模型與DUT實現(xiàn)的功能相同,可利用C模型的運行結(jié)果來實現(xiàn)對指令執(zhí)行情況的統(tǒng)計。由于在每條指令執(zhí)行完畢后都會自檢,可將C模型執(zhí)行的結(jié)果作為功能覆蓋率的采集點,根據(jù)DUT的設(shè)計特征、需要使用的輸入條件等信息提取出覆蓋率模型,在仿真執(zhí)行過程中自動收集,仿真結(jié)束后將所有測試用例的覆蓋率信息合并,給出最終的覆蓋率結(jié)果[9?10]。一般來說,要求代碼覆蓋率及功能覆蓋率都需要達(dá)到100%。

        3 驗證環(huán)境各功能模塊的具體實現(xiàn)

        基于VMM,實現(xiàn)了一個64位ALU的隨機驗證平臺,該平臺能夠隨機產(chǎn)生長度可控的定點和浮點指令序列,并在每一條指令執(zhí)行結(jié)束后進行結(jié)果對比檢測,圖2即為該驗證的詳細(xì)框圖。下面將該平臺的詳細(xì)實現(xiàn)加以介紹。

        圖2 驗證平臺框圖

        3.1 指令生成及Generator模塊

        該64位ALU的設(shè)計基于ARMv8架構(gòu),支持所有的ARMv8定點和浮點指令。首先根據(jù)功能對指令分類,如Arithmetic(immediate)類指令包括ADD、ADDS、SUB、SUBS、CMP、CMN、MOV這7條指令。而對于ADD指令,根據(jù)操作數(shù)還分為兩種情況:

        ADD Wd|WSP, Wn|WSP, #aimm

        Add(immediate): Wd|WSP = Wn|WSP + aimm.

        ADD Xd|SP, Xn|SP, #aimm

        Add(extended immediate): Xd|SP = Xn|SP + aimm.

        這就需要對位寬進行約束,代碼如下:

        constraint c_width_sel

        {

        width_sel inside {32, 64};

        }

        另外,還要對寄存器號進行約束,代碼如下:

        constraint c_reg_num

        {

        source_reg_num0 inside {[0:31]};

        dest_reg_num0 inside {[0:31]};

        }

        對立即數(shù)的范圍進行約束,代碼如下:

        constraint c_aimm

        {

        aim inside{[0:2047]}

        }

        對寄存器間的依賴關(guān)系也可以進行約束,代碼如下:

        constraint c_correlation_S0

        {

        S0_correlation_mode_sel inside {′S_NONE, ′S_S, ′S_D};

        S0_correlation_depth inside {[0:′CORRE_DEPTH - 1]};

        S0_corre_select inside {0, 1};

        S0_corre_select dist {0:=10, 1:=10};

        }

        確定了指令類型,隨機得到指令助記符、指令相關(guān)參數(shù),在以上約束下便可以生成一條滿足語法要求的指令[11]。在測試用例中對指令配比、地址、數(shù)據(jù)等信息進行約束,便能夠控制Generator生成的指令。通過變換隨機種子就可以生成各種各樣不同的指令序列。驗證環(huán)境里可以改變各類指令的配比,寄存器關(guān)聯(lián)模式的配比,以便將一些邊緣情況測到。得到了匯編指令序列后,通過匯編器,將匯編指令編譯成十六進制指令碼。為了方便Scoreboard進行結(jié)果比對,隨機環(huán)境還利用腳本處理,將生成的匯編指令的助記符提取出來以確定指令執(zhí)行的時鐘周期長度。此外,Generator還可以隨機獲取線程號、分支預(yù)測指令的目的地址、方向等信息。

        3.2 Driver模塊

        Driver實現(xiàn)的功能比較簡單,將Generator產(chǎn)生的十六進制代碼及其他隨機參數(shù)依次送入DUT中。另外,Driver也可以直接從外部文件得到asm代碼或十六進制代碼,這樣已有的ALU測試程序都可以在這個環(huán)境中直接調(diào)用。

        3.3 Assert模塊

        Assert用于加強環(huán)境的驗證能力,使用它可以很容易對設(shè)計者期望的行為進行描述,并在環(huán)境中捕捉設(shè)計者的這些期望,代碼如下:

        assert(valid = 1)

        3.4 Scoreboard

        Scoreboard根據(jù)Decode模塊譯碼出來的目的寄存器號,從Register File中相應(yīng)的位置取出寄存器的值,與ALU的C模型運算出來的寄存器結(jié)果作對比。由于ALU模型寫出的值是每條指令執(zhí)行之后的值,而Register File傳遞過來的數(shù)據(jù)是每個時鐘周期的值,為了保證結(jié)果對比的正確性,必須確定好結(jié)果對比的時機。這里根據(jù)Generator模塊生成的助記符可以確定該條指令執(zhí)行的時鐘周期長度,Scoreboard不但要負(fù)責(zé)解讀C模型運算出的參照Register File的結(jié)果文件,還要從Register File模型傳遞過來的數(shù)據(jù)中選取該指令執(zhí)行完畢后的一個時鐘周期的數(shù)據(jù)與參照數(shù)據(jù)進行對比,如果對比失敗,Scoreboard的自檢機制會終止測試。需要補充的是,因為DUT是由時鐘驅(qū)動,而C語言實現(xiàn)的參照模型不帶時序關(guān)系,有些指令運算結(jié)束后可能會亂序提交執(zhí)行結(jié)果,這就需要根據(jù)具體情況做出時序調(diào)整。

        3.5 C模型

        環(huán)境中使用了匯編器和仿真器兩個C模型。由Generator生成的指令代碼會被寫入asm文件,通過makefile調(diào)用一個由C語言實現(xiàn)的匯編器來處理該asm文件,生成一個HEX代碼文件,命令如下:

        aarch64?linux?gnu?objdump ?D asm_file > hex_file

        Generator再讀入這個HEX代碼并傳送給下級模塊。

        仿真器是用C語言實現(xiàn)的ALU模型,該模型可以實時寫出每一條指令執(zhí)行結(jié)束后Register File的狀態(tài),這是判斷ALU的運算結(jié)果是否正確的依據(jù)。驗證環(huán)境通過DPI調(diào)用C函數(shù)的代碼如下:

        import \"DPI?C\" function void AddsIm32(input bit [31:0] inst, input bit [1:0] threadid)

        3.6 功能覆蓋率模型

        對于ALU這樣的DUT,代碼覆蓋率已經(jīng)不能夠代表驗證進度,需要把重心放到功能覆蓋率的收斂上。VMM驗證方法學(xué)的核心優(yōu)勢是具備了功能覆蓋率驅(qū)動的隨機約束能力,能夠比較方便地得到更高的功能覆蓋率。

        為了使ALU的功能覆蓋更快收斂,使用了兩種方法:

        一是改變隨機種子,如圖3所示。由于運行一次仿真,只能測試到一種配置、一次激勵,得到相應(yīng)的功能覆蓋率,那么每次仿真,可以通過命令選項的形式來制定不同的隨機種子(Random Seed),從而改變生成的隨機變量,以得到不同的配置來測試與前一次不同的功能,命令如下:

        vcs +ntb_random_seed = 999 …

        通過腳本控制,可以實現(xiàn)自動運行多次仿真,并且每次仿真都使用不同的隨機種子,這樣可以在某種程度上降低重復(fù)的隨機變量的生成,快速達(dá)到較為理想的功能覆蓋率。然而這種方式存在一定弊端,即仿真運行的次數(shù)無法事先確定,需要人為判斷覆蓋率的收斂情況,再確定是否需要繼續(xù)執(zhí)行仿真,及執(zhí)行次數(shù),這是個需要重復(fù)多次的過程。而且通過變換隨機種子的方式來控制隨機變量的生成,具有一定盲目性,并存在較多的重復(fù)配置,因此功能覆蓋率的收斂仍然需要較多的運行次數(shù),增加了總的運行時間。

        鑒于改變隨機種子的收斂方法的弊端,在后續(xù)的測試中采用了第二種方法,即功能覆蓋率收斂技術(shù)(Coverage Convergence Technology,CCT),如圖4所示,這是Synopsys公司推出的一項技術(shù)[9]。與改變隨機種子方法的思路一樣,CCT的基本原理同樣是根據(jù)每次仿真后的Coverage值來控制下一次隨機變量的生成,所不同的是不再是簡單地改變隨機種子,而是會根據(jù)當(dāng)前的覆蓋率來指導(dǎo)測試向量的生成,減少重復(fù)的測試向量生成,以便實現(xiàn)覆蓋率的快速收斂。

        圖3 改變隨機種子的 圖4 CCT驗證流程

        方法的驗證流程

        通過腳本可以在覆蓋率結(jié)果與測試向量生成之間形成一個反饋環(huán)路,避免了手動反饋覆蓋率帶來的大量時間精力消耗,在功能覆蓋率達(dá)到理想狀態(tài)時可以自動停止仿真。實現(xiàn)CCT需要如下兩個步驟:首先,將 DUT設(shè)計結(jié)構(gòu)的功能點及需要隨機的輸入條件等信息提取來建立功能覆蓋率模型,即在驗證平臺里將需要監(jiān)測的隨機變量定義覆蓋組和覆蓋點,然后在類里對這些變量進行創(chuàng)建和隨機,同時對已建立的功能點進行采樣。其次,腳本控制過程分為四個階段實現(xiàn)功能覆蓋率的收集與反饋,一是在編譯時加上?ntb_opts cct選項,去掉+ntb_random_seed 選項;二是首次運行仿真,建立覆蓋率反饋控制的偏差記錄;第三多次運行仿真,每一次的仿真過程中,Synopsys的VCS仿真工具中的CCT功能,可以實現(xiàn)通過當(dāng)前覆蓋率反饋指導(dǎo)隨機變量生成,進一步減少重復(fù)的測試向量生成,加速功能覆蓋率的收斂,節(jié)省了流片前的寶貴時間[12];最后利用腳本提取每次仿真后的功能覆蓋率增加情況,并判斷覆蓋率是否已收斂,若收斂則自動終止仿真。

        4 結(jié) 語

        本文實現(xiàn)了一個基于VMM的ALU隨機驗證環(huán)境。該環(huán)境不但可以生成隨機指令作為DUT和C模型的輸入,也可以使用已有的測試程序;另外提供了Register File檢測環(huán)境,可以在每一條指令執(zhí)行后檢查Register File 的值,從最全面角度保證每條指令執(zhí)行結(jié)果的正確性;此外還建立了功能覆蓋率模型,收集覆蓋率信息。

        參考文獻(xiàn)

        [1] 張瑾,王劍.基于龍芯2F處理器的硬件驗證平臺的設(shè)計與實現(xiàn)[J].計算機工程與科學(xué),2009(z1):270?275.

        [2] 游肖君.高性能ALU優(yōu)化設(shè)計研究[D].西安:西安電子科技大學(xué),2009.

        [3] 雷普紅.高速算術(shù)邏輯部件的設(shè)計與驗證[D].長沙:國防科學(xué)技術(shù)大學(xué),2006.

        [4] 王大宇.高性能浮點加法器的研究與設(shè)計[D].南京:南京航空航天大學(xué),2012.

        [5] 王重陽.單、雙、擴展精度自適應(yīng)浮點乘、除和開方運算單元的實現(xiàn)[D].北京:華北電力大學(xué)(北京),2011.

        [6] 梅家祥.64位流核心運算部件的設(shè)計與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2012.

        [7] 潘能剛,曾凡平,曹青.隨機測試用例的自動化生成和約簡[J].小型微型計算機系統(tǒng),2011(10):2035?2040.

        [8] 于伽,黑勇,陳黎明.隨機測試程序發(fā)生器的設(shè)計與實現(xiàn)[J].微電子學(xué)與計算機,2012(7):103?111.

        [9] 黃思遠(yuǎn),邵智勇,于承興,等.VMM中功能覆蓋率收斂技術(shù)[J].現(xiàn)代電子技術(shù),2010,33(4):16?21.

        [10] 石君友,王璐,李海偉,等.基于設(shè)計特性覆蓋的測試性定量分析方法[J].系統(tǒng)工程與電子技術(shù),2012(2):418?423.

        [11] 朱思良.基于VMM驗證方法學(xué)的MCU驗證環(huán)境[J].中國集成電路,2011(1):53?59.

        [12] 沈海華,衛(wèi)文麗,陳云霽.覆蓋率驅(qū)動的隨機測試生成技術(shù)綜述[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2009(4):419?431.

        中文字幕一区二区三区久久网| 国产精品欧美成人片| 美女不带套日出白浆免费视频| 未发育成型小奶头毛片av| 少妇高潮惨叫久久久久电影69| 暖暖 免费 高清 日本 在线| 熟妇激情内射com| 亚洲 自拍 另类小说综合图区| 国产精品无码久久久久久| 99精品一区二区三区无码吞精| 无码精品人妻一区二区三区人妻斩 | 2017天天爽夜夜爽精品视频| 欧美成人精品福利在线视频| 亚洲欧洲国无码| 日韩在线手机专区av| 天堂av一区一区一区| 日韩十八禁在线观看视频| 国产白浆大屁股精品视频拍| 一区二区亚洲精品国产精| 狂插美女流出白浆视频在线观看| 国产女同舌吻1区2区| 亚洲av综合国产av日韩| 五月色丁香婷婷网蜜臀av| 国产日韩精品欧美一区喷水| 亚洲av无码专区电影在线观看 | 在线观看av国产自拍| 免费在线日韩| 亚洲天堂av社区久久| 国产大全一区二区三区| 色偷偷亚洲精品一区二区| 人妻经典中文字幕av| 自拍偷自拍亚洲精品第按摩| 不卡一区二区黄色av| 国产成人午夜福利在线观看| 国产综合无码一区二区色蜜蜜| 国产在线视频国产永久视频| 亚洲午夜无码视频在线播放| 亚洲一码二码在线观看| 大香蕉国产av一区二区三区| 少妇激情一区二区三区99| 夫妇交换性三中文字幕|