0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

編寫動(dòng)態(tài)的驗(yàn)證環(huán)境

sanyue7758 ? 來(lái)源:驗(yàn)證芯發(fā)現(xiàn) ? 2023-07-17 10:40 ? 次閱讀

作為一名DV,開發(fā)驗(yàn)證環(huán)境,編寫驗(yàn)證環(huán)境也算是必備基礎(chǔ)技能了。雖然每天都會(huì)coding,但最終寫出來(lái)的代碼,是一次性代碼,還是方法?

何為一次性代碼?可以從復(fù)用性考慮。

代碼的復(fù)用可大可小。IP驗(yàn)證內(nèi)部,寫出的代碼是否可以在不同case間復(fù)用,還是僅針對(duì)具體的需求,點(diǎn)對(duì)點(diǎn)地寫代碼。一個(gè)簡(jiǎn)單的例子就是,不同case的實(shí)現(xiàn),是在不停地復(fù)制粘貼,還是精簡(jiǎn)的實(shí)現(xiàn);不同case的仿真,是否需要重新編譯驗(yàn)證環(huán)境。

system或者soc驗(yàn)證時(shí),寫出的case是否可以方便地移植或者為他人所使用。一個(gè)長(zhǎng)達(dá)數(shù)百行,for/if/while/fork來(lái)回嵌套的函數(shù),大概率會(huì)直接打消大家review的念頭。其大概率也是一次性代碼,復(fù)用性不高。

一次性代碼和方法的區(qū)別,換個(gè)角度看,也是是驗(yàn)證環(huán)境的靜態(tài)和動(dòng)態(tài)性的一種體現(xiàn)。如果環(huán)境中的某些參數(shù)或者特性在編譯階段就已經(jīng)確定,可認(rèn)為是靜態(tài)性的。如果某些參數(shù)或者code執(zhí)行在運(yùn)行時(shí)才會(huì)確定,則是動(dòng)態(tài)性的,即runtime。

使用動(dòng)態(tài)性的代碼,可以使得驗(yàn)證環(huán)境具備較好的靈活性。盡可能少的重新編譯環(huán)境,盡可能高效的debug case,在芯片規(guī)模較大時(shí)顯得尤為重要。尤其在使用一些如增量編譯,MSIE(multi snapshot incremental elaboration),simulation based snapshot方法時(shí),對(duì)環(huán)境結(jié)構(gòu)和靈活性的要求會(huì)更高。這里分享一些靜態(tài)式和動(dòng)態(tài)式的例子和思路。

ifdef/ifndef雙刃劍

條件編譯宏在環(huán)境開發(fā)中經(jīng)常會(huì)使用到,作者此前也分享過(guò)相關(guān)的總結(jié),讀者可參閱:SystemVerilog Macro宏使用場(chǎng)景小結(jié)。

testbench中的env部分盡量減少使用條件編譯宏。比如下面的例子:

3d6f21ec-2323-11ee-962d-dac502259ad0.png

在環(huán)境部分使用ifdef/ifndef,就意味著在不同的場(chǎng)景下,需要重新編譯環(huán)境,是一種靜態(tài)式的思路。

去除ifdef/ifndef,可以使用configuration來(lái)實(shí)現(xiàn),根據(jù)config的結(jié)果來(lái)決定要不要例化或者啟動(dòng)某個(gè)組件。

3d89194e-2323-11ee-962d-dac502259ad0.png

用好plusargs

既然是runtime,動(dòng)態(tài)式,那就從仿真命令中獲取數(shù)據(jù)好了。plusargs有兩個(gè)函數(shù),plusargs和plusargs。前者檢測(cè)是否有制定了某個(gè)參數(shù),后者用于獲取命令行輸入的參數(shù)值。

使用plusargs,可以在仿真前指定某個(gè)參數(shù)的取值,如時(shí)鐘頻率、module選擇、仿真超時(shí)域值等。甚至可以從plusargs中傳入對(duì)隨機(jī)參數(shù)的約束!而且UVM庫(kù)中也有uvm_cmdline_processor,用于處理命令行的輸入?yún)?shù)。同樣的,前面去除ifdef/ifndef的事情,也可以用plusargs來(lái)解決。

plusarg的使用可謂"五花八門"。如果后面有機(jī)會(huì),作者也會(huì)做類似的分享,有興趣的讀者可私信交流和學(xué)習(xí)??傊?,用好plusargs可以在case的調(diào)試時(shí),帶來(lái)效率上的提升。

需求一直在變,做好數(shù)據(jù)驅(qū)動(dòng)

不直接面向具體的數(shù)據(jù)編寫代碼,而是編寫對(duì)數(shù)據(jù)的處理和操作方法。比如環(huán)境中需要對(duì)A0~A9寄存器進(jìn)行配置,以完成DUT的初始化,或者需要對(duì)某些信號(hào)進(jìn)行force和check。需求變化和明天,不知道哪個(gè)會(huì)先來(lái),雖然今天的需求是配置A0~A9, force a0~a9,明天可能就是變成B0~B9。

這里就可以做好通用的寄存器配置方法,需要配置的寄存器從plusargs或者配置文件中導(dǎo)入,而不是看到具體的A0或者B0寄存器。需要force和check的信號(hào),可以從文件中導(dǎo)入,環(huán)境中編寫從force到check的邏輯方法。

數(shù)據(jù)驅(qū)動(dòng)中,聯(lián)合數(shù)組是一個(gè)比較好的數(shù)據(jù)結(jié)構(gòu),在其他語(yǔ)言中也稱為哈希數(shù)組或者字典。這種數(shù)據(jù)結(jié)構(gòu)有key和value兩個(gè)屬性,你所需要的信息可以設(shè)置到key和value上,而不用關(guān)心key和value具體是什么,是數(shù)據(jù)驅(qū)動(dòng)的天然好幫手。比如只使用一個(gè)int cfg[string]類型的聯(lián)合數(shù)組作為函數(shù)的入?yún)?,就可以?shí)現(xiàn)多個(gè)參數(shù)的配置傳遞,具體的配置參數(shù)名體現(xiàn)在cfg的string類型的key中,參數(shù)取值體現(xiàn)在cfg的int類型的value中。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19034

    瀏覽量

    228450
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5270

    瀏覽量

    119646
  • SoC芯片
    +關(guān)注

    關(guān)注

    1

    文章

    592

    瀏覽量

    34800
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    19111
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    189

    瀏覽量

    12271

原文標(biāo)題:編寫動(dòng)態(tài)的驗(yàn)證環(huán)境

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于VMM驗(yàn)證方法學(xué)的MCU驗(yàn)證環(huán)境

    。本文主要提出了一種基于SystemVerilog的VMM驗(yàn)證方法學(xué)的驗(yàn)證環(huán)境。在這個(gè)驗(yàn)證環(huán)境中,驗(yàn)證
    發(fā)表于 03-24 14:07 ?3241次閱讀

    什么是動(dòng)態(tài)鏈接庫(kù)?如何編寫、生成DLL

    什么是動(dòng)態(tài)鏈接庫(kù)?如何編寫、生成DLL
    發(fā)表于 01-17 09:54

    基于VMM的驗(yàn)證環(huán)境驗(yàn)證MCU指令實(shí)現(xiàn)設(shè)計(jì)

    驗(yàn)證結(jié)構(gòu),以及以功能覆蓋率為指標(biāo)的驗(yàn)證流程。在本文中,圍繞Synopsys的VMM(Verification Methodology Manual)構(gòu)建了一個(gè)MCU驗(yàn)證環(huán)境
    發(fā)表于 07-01 08:15

    為什么要使用動(dòng)態(tài)編寫安卓廣播的案例呢

    經(jīng)過(guò)這幾次的篡寫主要還是安卓廣播的案例,望大家見諒。這也是多寫幾個(gè)案例更好的體現(xiàn)安卓廣播的特點(diǎn)。接下來(lái)還是老規(guī)矩,運(yùn)用動(dòng)態(tài)編寫廣播,在這之前我上一篇已經(jīng)提到了為什么要使用動(dòng)態(tài)編寫,在這
    發(fā)表于 12-30 06:16

    如何驗(yàn)證用CodeWarrior工具編寫的軟件?

    如何驗(yàn)證用 CodeWarrior 工具編寫的軟件?有沒有可用的單元測(cè)試,軟件測(cè)試工具?
    發(fā)表于 04-14 08:03

    SoC驗(yàn)證環(huán)境搭建方法的研究

    本文從SoC (System on a Chip)驗(yàn)證環(huán)境外在的框架結(jié)構(gòu)、內(nèi)在的驗(yàn)證數(shù)據(jù)的組織與管理和體現(xiàn)其工作原理的系統(tǒng)腳本的設(shè)計(jì)思想三方面出發(fā),討論SoC 驗(yàn)證
    發(fā)表于 12-14 09:52 ?22次下載

    如何編寫dll文件

    如何編寫dll文件:可以用幾種語(yǔ)言來(lái)實(shí)現(xiàn),如delphi編寫dll,pb編寫dll文件,java 編寫dll,vc 編寫dll,mfc dl
    發(fā)表于 01-16 10:20 ?8820次閱讀

    LINUX環(huán)境下CLIPS動(dòng)態(tài)鏈接庫(kù)的實(shí)現(xiàn)方法

    在LINUX環(huán)境下,為了簡(jiǎn)便、快捷地制作出CLIPS動(dòng)態(tài)鏈接庫(kù),本文采用了CNU AUTOTOOLS把CLIPS嵌入式高級(jí)語(yǔ)言編譯成動(dòng)態(tài)鏈接庫(kù)的實(shí)現(xiàn)方法,重點(diǎn)研究如何編寫配置信息,利用
    發(fā)表于 04-14 21:18 ?30次下載

    參數(shù)化UVM IP驗(yàn)證環(huán)境(上)

    參數(shù)化的IP是可配置的,這意味著在不同的SOC中IP設(shè)計(jì)可以有不同的設(shè)計(jì)參數(shù),設(shè)計(jì)參數(shù)可以對(duì)應(yīng)到協(xié)議、端口號(hào)、端口名稱、以及內(nèi)部邏輯。大量的IP設(shè)計(jì)參數(shù)非常影響驗(yàn)證環(huán)境的構(gòu)建,比如testbench
    發(fā)表于 09-15 14:37 ?6次下載
    參數(shù)化UVM IP<b class='flag-5'>驗(yàn)證</b><b class='flag-5'>環(huán)境</b>(上)

    如何在代碼編寫器StudioIDE開發(fā)環(huán)境中使用腳本實(shí)用程序的詳細(xì)描寫

    腳本是代碼編寫器Studio集成開發(fā)的一種新實(shí)用工具。環(huán)境(IDE)V2.10。它提供了一個(gè)集成到Perl或Visual中的命令庫(kù)?;緫?yīng)用程序(VBA),提供可利用的批處理模式腳本能力。在自動(dòng)化
    發(fā)表于 04-25 14:09 ?8次下載
    如何在代碼<b class='flag-5'>編寫</b>器StudioIDE開發(fā)<b class='flag-5'>環(huán)境</b>中使用腳本實(shí)用程序的詳細(xì)描寫

    基于GameGAN的動(dòng)態(tài)環(huán)境模擬

    對(duì)于任何機(jī)器人系統(tǒng),模擬都是關(guān)鍵的一環(huán)。為正確地進(jìn)行模擬,我們需要編寫復(fù)雜的環(huán)境規(guī)則,如:動(dòng)態(tài)代理的行為,以及每個(gè)代理的行為會(huì)如何影響其他代理的行為。
    的頭像 發(fā)表于 07-08 15:26 ?1972次閱讀

    第4章:程序編寫和調(diào)試環(huán)境簡(jiǎn)介PPT下載

    第4章:程序編寫和調(diào)試環(huán)境簡(jiǎn)介PPT下載
    發(fā)表于 10-08 14:49 ?13次下載

    基于UVM驗(yàn)證環(huán)境開發(fā)測(cè)試流程

    驗(yàn)證環(huán)境用戶需要?jiǎng)?chuàng)建許多測(cè)試用例來(lái)驗(yàn)證一個(gè)DUT的功能是否正確,驗(yàn)證環(huán)境開發(fā)者應(yīng)該通過(guò)以下方式提高測(cè)試用例的開發(fā)效率
    的頭像 發(fā)表于 06-09 11:11 ?905次閱讀
    基于UVM<b class='flag-5'>驗(yàn)證</b><b class='flag-5'>環(huán)境</b>開發(fā)測(cè)試流程

    C和C++編寫環(huán)境下LabVIEW如何調(diào)用動(dòng)態(tài)庫(kù)?

    與C語(yǔ)言編寫動(dòng)態(tài)鏈接庫(kù)相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 這一導(dǎo)出語(yǔ)句,在C代碼中沒有”C” ,而在C++代碼中多了一個(gè)”C”。
    發(fā)表于 06-11 09:15 ?7173次閱讀
    C和C++<b class='flag-5'>編寫</b><b class='flag-5'>環(huán)境</b>下LabVIEW如何調(diào)用<b class='flag-5'>動(dòng)態(tài)</b>庫(kù)?

    一種半動(dòng)態(tài)環(huán)境中的定位方法

    。在導(dǎo)航期間,定位方法可以對(duì)靜態(tài)和非靜態(tài)對(duì)象進(jìn)行分類觀測(cè),并評(píng)估半動(dòng)態(tài)對(duì)象是否移動(dòng),以減少無(wú)效觀測(cè)權(quán)重和位置波動(dòng)。實(shí)驗(yàn)證明所提出的方法可以提高移動(dòng)機(jī)器人在非靜態(tài)環(huán)境下的定位精度。
    的頭像 發(fā)表于 09-30 14:40 ?151次閱讀
    一種半<b class='flag-5'>動(dòng)態(tài)</b><b class='flag-5'>環(huán)境</b>中的定位方法