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

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

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

UVM驗證環(huán)境啟動時及運行時的控制方案

路科驗證 ? 來源:路科驗證 ? 2023-04-13 18:13 ? 次閱讀

話說螺螄殼里做道場,UVM推出這么多年以來每年DVCon會議上總還是有人分享他們基于UVM package做的一些改動,使其能夠更適合項目的要求。正如這篇論文里針對uvm_cmdline_processor這個類做的改動,經(jīng)過修改,UVM環(huán)境在運行時能夠接收更復(fù)雜的參數(shù),繼而滿足更好的控制隨機數(shù)據(jù)發(fā)送的項目要求。

從項目要求來看,在驗證前期隨機數(shù)據(jù)的吞吐、間隔、長度并不需要特意去關(guān)注,而在數(shù)據(jù)完整性基本得到保證以后,就要考慮邊界條件、性能表現(xiàn)等問題,也因此需要對隨機數(shù)據(jù)的約束進行調(diào)節(jié)。SV調(diào)節(jié)約束,以往可以通過對隨機值的rand_model或者約束塊的constraint_mode進行調(diào)節(jié),繼而選擇需要隨機的變量和采取的約束,也可以通過在約束中植入有關(guān)影響隨機范圍的變量,而在仿真過程中影響這些變量去間接影響接下來生成的隨機數(shù)值。

只不過,上面第一種辦法對每個sequence item約束塊的構(gòu)造和組織有要求,而且還需要在仿真前重新編譯繼而影響整個RNG(random number generator),第二種辦法可以在仿真過程中通過對某些變量的修改繼而影響仿真過程中的隨機數(shù)值,看起來是可以實現(xiàn)動態(tài)控制的,但也仍然不夠靈活,無論是對隨機數(shù)值的范圍影響,還是將這種辦法規(guī)范下來,都不適合在整個團隊范圍里去推廣(可以用,但是不夠完善)。

相比于將測試意圖通過sequence和item傳遞到driver,再由driver解析驅(qū)動總線,在驗證后期階段,我們往往需要對測試序列做到更加精準的控制。論文中也提到了可以對以下幾點做到控制:

對數(shù)據(jù)之間的間隔長短做控制,繼而影響數(shù)據(jù)吞吐。

處理器驗證中,要控制的指令內(nèi)容以及指令之間的關(guān)系均需要更多約束,往往還可以需要對操作數(shù)做到更準確的要求(比如其包含的指令、數(shù)據(jù)等信息)。

有時我們還需要在仿真過程中某個階段,特意去控制某個component或者item,以往可以通過uvm_config_db傳遞(在仿真開始前)。

55034f04-d9b3-11ed-bfe3-dac502259ad0.png

以上的控制盡管可以在代碼中實現(xiàn),但從以前的經(jīng)驗來看,這些代碼仍然不夠靈活。所謂更加靈活的要求是能夠在仿真過程中將要求隨時傳遞給仿真環(huán)境,而仿真環(huán)境又能及時接收這些配置、激勵數(shù)據(jù),繼而動態(tài)地對驗證模式、激勵數(shù)據(jù)做出改變。

原本uvm_cmdline_processor可以支持傳遞int和string,但不夠靈活以至于不能很好地控制上面所說的隨機數(shù)有關(guān)的生成過程。而本文擴展的新類就能夠從仿真時傳遞的命令項(同其他仿真參數(shù)一起傳遞并啟動仿真模型)解析更為復(fù)雜的隨機變量約束控制方式,繼而更靈活地控制測試。

551dda2c-d9b3-11ed-bfe3-dac502259ad0.png

這個新的類advanced_cmd_line_processor可以解析的指令新囊括了與約束范圍有關(guān)的min_val/max_val/value/weight的形式(對字符串參數(shù)形式更靈活的支持)

55339ca4-d9b3-11ed-bfe3-dac502259ad0.png

也可以支持對不同數(shù)據(jù)格式的支持,例如Hex/Bin/Int

5552b88c-d9b3-11ed-bfe3-dac502259ad0.png

由于可以在測試時傳遞更為多樣的命令參數(shù),UVM環(huán)境中也就可以利用advanced_cmdline_processor做相應(yīng)的解析,繼而獲得參數(shù)。在Example1中,我們可以在測試時傳遞例如+opcode=ADD:80,SUB:20 或者+operand=32'hfffffff0 或者 +oprand=32'h00000000~32'h0000000f等信息,也均可以在對應(yīng)的組件中獲得參數(shù),并加以利用。

556eed7c-d9b3-11ed-bfe3-dac502259ad0.png

558e7a7a-d9b3-11ed-bfe3-dac502259ad0.png

在packet::pre_randomize()函數(shù)中,就利用advanced_cmdline_processor的方法is_valid()檢查測試時傳遞的參數(shù),并通過get_rand_enum()獲得一個符合+opcode=ADD:80,SUB:20要求的枚舉值。同時,也可以通過get_rand_val()獲得一個滿足類似+oprand=32'h00000000~32'h0000000f要求的隨機數(shù)。

除了通過命令項傳遞某個參數(shù)項以外,advanced_cmdline_processor也可以支持傳遞例如+uvm_set_config_string這樣的命令項,這些命令項仍然可以通過get_rand_val()和其傳遞的對應(yīng)UVM層次獲得測試時傳遞的數(shù)值。這樣的方法可以基于UVM層次將變量、約束范圍、權(quán)重等信息更準確地傳遞到sequence中。

+uvm_set_config_string=*pkt_seq_1,pkt_delay,”0:50,1:50” +uvm_set_config_string=*pkt_seq_2,pkt_delay,”10~20:50,21~100:40,101~500:10”

55a6256c-d9b3-11ed-bfe3-dac502259ad0.png

這篇論文寫得要輕松一些,讀者在閱讀的時候也能跟的上,在解決了一些實際問題的時候可以會心一笑。更贊的一點是,它毫無保留地把解決方案里涉及到advanced_cmdline_processor和其它類/方法都展示在附錄中。基于此,這篇論文提出了一個實際工作中的痛點,然后又輕巧地給出了一個解決方案。這樣的論文生命周期往往可以延續(xù)更久,因為它的目標更聚焦、也解決很多驗證工程師實際工作中的麻煩,更何況還有完整的代碼呈現(xiàn),可以說是拿來就能用了。

不過,我們還可以圍繞著靈活控制隨機測試再給出路科的另外一種解決方案(來自于V3課程的某個模塊)。我們希望不僅僅是在仿真前通過傳遞參數(shù)項來控制驗證環(huán)境和激勵,還希望找到一種可能,在仿真過程中可以對驗證環(huán)境中的變量、約束等內(nèi)容進行修改。

這里以VCS工具為例,它的UCLI(unified command line interface)提供了一種辦法,可以在Tcl命令窗口一側(cè)去調(diào)用SV中的函數(shù)或者任務(wù)。那么,我們可以將可供Tcl調(diào)用的方法放置在某個域中(例如module或者interface)。

比如我們下面的這個例子就可以實現(xiàn)在仿真中查詢、獲得、配置等目的,這些方法在接口中實現(xiàn)以后,在UVM和Tcl兩側(cè)均可以利用這些方法。

55c1dae6-d9b3-11ed-bfe3-dac502259ad0.png

這里定義了一些進入某些特定scope hierarchy的接口,以便在Tcl中調(diào)用,繼而在該scope中調(diào)用某些方法。

55e65d26-d9b3-11ed-bfe3-dac502259ad0.png

這些接口方法可以用來在仿真中設(shè)定報告信息的冗余度。

55f91c68-d9b3-11ed-bfe3-dac502259ad0.png

這里給了一個例子,可以在Tcl腳本的特定時間,進入某個scope,再調(diào)用相應(yīng)的調(diào)試接口方法,調(diào)用這些方式時也可以傳遞參數(shù),并且取得返回值。

這樣的案例用來展示某些調(diào)試接口方法在仿真運行時對驗證環(huán)境的控制,實際上我們在文章上半部分談到的對于隨機值的影響、某些變量的修改、某些驗證組件的工作模式等,只要我們的調(diào)試接口方法定義得當,那么都可以在仿真運行過程中隨時調(diào)用。

從論文描述的解決問題的初衷來看,是為了更方便地去控制激勵的數(shù)據(jù)內(nèi)容,而如果要再拓展那么就可以采用我們給的第二種方式在Tcl中調(diào)用某個scope中的接口方法,讓Tcl與測試用例之間形成一個互動。

其實不管是C-DPI的調(diào)用方式,還是Tcl調(diào)用SV的方式,都是為了讓測試在運行時能夠更靈活地配置、改動(SV的重復(fù)編譯在更大的環(huán)境結(jié)構(gòu)下更為耗時),而相比于C-DPI的方式,通過對UVM uvm_cmdline_processor的拓展在驗證環(huán)境啟動,或者通過Tcl調(diào)用SV方法在驗證環(huán)境運行都更為靈活。而且這兩種方案也都能夠做成規(guī)范,推行到團隊中去。





審核編輯:劉清

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

    關(guān)注

    68

    文章

    19048

    瀏覽量

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

    關(guān)注

    0

    文章

    181

    瀏覽量

    19114
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    9565
  • ADD
    ADD
    +關(guān)注

    關(guān)注

    1

    文章

    20

    瀏覽量

    9386

原文標題:DVCon文賞-2023w16 UVM驗證環(huán)境啟動時及運行時的控制方案

文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何縮短Vivado的運行時

    在Vivado Implementation階段,有時是有必要分析一下什么原因?qū)е?b class='flag-5'>運行時間(runtime)過長,從而找到一些方法來縮短運行時間。
    的頭像 發(fā)表于 05-29 14:37 ?1.4w次閱讀
    如何縮短Vivado的<b class='flag-5'>運行時</b>間

    如何檢查Linux服務(wù)器的運行時

    Linux 中的 uptime 用于查看系統(tǒng)啟動后的運行時間。它是一個比較簡單的 Linux 命令,可以不帶參數(shù)直接運行。
    發(fā)表于 11-25 15:25 ?1.5w次閱讀
    如何檢查Linux服務(wù)器的<b class='flag-5'>運行時</b>間

    數(shù)字IC驗證之“什么是UVM”“UVM的特點”“UVM提供哪些資源”(2)連載中...

    工程師只需要將代碼寫入適當?shù)膒hase當中,平臺運行時,會按照phase的執(zhí)行流程來自動執(zhí)行驗證工程師的代碼。uvm提供了一系列的基類,驗證工程師需要根據(jù)實際的情況擴展出合適的類來構(gòu)建
    發(fā)表于 01-21 16:00

    一種基于UVM的混合信號驗證環(huán)境

    一種基于UVM的混合信號驗證環(huán)境_耿睿
    發(fā)表于 01-07 21:39 ?1次下載

    紫金橋組態(tài)軟件新的功能_運行時組態(tài)

    運行時組態(tài)是組態(tài)軟件新近提出的新的概念。運行時組態(tài)是在運行環(huán)境下對已有工程進行修改,添加新的功能。它不同于在線組態(tài),在線組態(tài)是在工程運行的同
    發(fā)表于 10-13 16:17 ?2次下載
    紫金橋組態(tài)軟件新的功能_<b class='flag-5'>運行時</b>組態(tài)

    電機運行時間進行排列 是分為兩個部分來完成這個程序的設(shè)計的

    前幾天有個學(xué)員咨詢一個程序設(shè)計的問題,程序的控制要求如下:需要控制5臺電機的運行,每臺電機運行時需要記錄運行時間,電機
    的頭像 發(fā)表于 07-19 08:57 ?6978次閱讀
    電機<b class='flag-5'>運行時</b>間進行排列 是分為兩個部分來完成這個程序的設(shè)計的

    如何高效測量ECU的運行時

    ,最終可能會引起運行時間方面的問題。這在項目后期需要大量的時間和金錢來解決。如果不能掌握系統(tǒng)的運行狀態(tài),則很難發(fā)現(xiàn)系統(tǒng)內(nèi)缺陷的根源。 解決方案 將TA軟件工具套件與VX1000測量標定硬件相結(jié)合,可同步分析 ECU內(nèi)部
    的頭像 發(fā)表于 10-28 11:05 ?2134次閱讀

    利用Systemverilog+UVM搭建soc驗證環(huán)境

    利用Systemverilog+UVM搭建soc驗證環(huán)境
    發(fā)表于 08-08 14:35 ?5次下載

    Go運行時:4年之后

    自 2018 年以來,Go GC,以及更廣泛的 Go 運行時,一直在穩(wěn)步改進。近日,Go 社區(qū)總結(jié)了 4 年來 Go 運行時的一些重要變化。
    的頭像 發(fā)表于 11-30 16:21 ?758次閱讀

    什么是Kubernetes容器運行時CRI

    起初,Docker是事實上的容器技術(shù)標準,Kubernetes v1.5之前的代碼中直接調(diào)用Docker API,實現(xiàn)容器運行時的相關(guān)操作。
    的頭像 發(fā)表于 02-20 16:22 ?1426次閱讀
    什么是Kubernetes容器<b class='flag-5'>運行時</b>CRI

    ch32v307記錄程序運行時

    ch32v307記錄程序運行時間 在程序開發(fā)中,很重要的一項任務(wù)就是對程序的運行時間進行評估。對于大型的程序系統(tǒng)來說,它們通常需要處理大量的數(shù)據(jù)或進行復(fù)雜的計算操作。因此,如果程序的運行時間過長
    的頭像 發(fā)表于 08-22 15:53 ?801次閱讀

    Xilinx運行時(XRT)發(fā)行說明

    電子發(fā)燒友網(wǎng)站提供《Xilinx運行時(XRT)發(fā)行說明.pdf》資料免費下載
    發(fā)表于 09-14 10:01 ?0次下載
    Xilinx<b class='flag-5'>運行時</b>(XRT)發(fā)行說明

    AUTOSAR CP運行時環(huán)境與應(yīng)用軟件

    運行時環(huán)境(RTE) AUTOSAR CP運行時環(huán)境(RTE)是AUTOSAR架構(gòu)中的核心組件,它實現(xiàn)了AUTOSAR虛擬功能總線(VFB)的接口,并提供了通信基礎(chǔ)設(shè)施和訪問基礎(chǔ)軟件組
    的頭像 發(fā)表于 10-27 15:44 ?1236次閱讀
    AUTOSAR CP<b class='flag-5'>運行時</b><b class='flag-5'>環(huán)境</b>與應(yīng)用軟件

    如何保證它們?nèi)萜?b class='flag-5'>運行時的安全?

    緊密耦合的容器運行時繼承了主機操作系統(tǒng)的安全態(tài)勢和攻擊面。運行時或主機內(nèi)核中的任何漏洞及其利用都會成為攻擊者的潛在切入點。
    的頭像 發(fā)表于 11-03 15:24 ?600次閱讀

    jvm運行時內(nèi)存區(qū)域劃分

    JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是Java編程語言的運行環(huán)境。JVM的主要功能是將Java源代碼轉(zhuǎn)換為機器代碼,并且在運行時管理Java程序的內(nèi)存。JVM
    的頭像 發(fā)表于 12-05 14:08 ?474次閱讀