0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

個(gè)性化地定制自己的uvm代碼生成器模板和腳本

芯片驗(yàn)證工程師 ? 來(lái)源:芯片驗(yàn)證工程師 ? 2023-05-14 16:51 ? 次閱讀

在項(xiàng)目上使用uvm代碼自動(dòng)生成可以提高驗(yàn)證環(huán)境搭建的效率,你可以:

使用uvm代碼生成器創(chuàng)建基本的uvm驗(yàn)證環(huán)境框架,然后丟棄代碼生成器模板并擴(kuò)展和維護(hù)生成出來(lái)的代碼。盡管uvm代碼生成器僅在項(xiàng)目的初始階段使用,然后被丟棄,但仍然提高了驗(yàn)證的效率。

團(tuán)隊(duì)所有成員的驗(yàn)證環(huán)境結(jié)構(gòu)獲得了統(tǒng)一,方便了集成和檢視。

根據(jù)項(xiàng)目的特定需求,個(gè)性化地定制自己的uvm代碼生成器模板和腳本。

示例

要運(yùn)行uvm代碼生成器,至少需要三個(gè)template 文件:

clkndata.tpl    Interface templatefile
common.tpl      Commontemplatefile
pinlist         Pinlistfile

定義 DUT的文件

mydut/mydut.sv  SystemVerilog sourcefilefor the DUT

兩個(gè)腳本,一個(gè)用于運(yùn)行uvm代碼生成器,另一個(gè)用于運(yùn)行仿真(為了避免記住命令行及其參數(shù))。

gen Scripttorunthecodegenerator
run Scripttorunthe simulator

下面是這個(gè)示例中使用的 DUT 文件:

mydut/mydut.sv

module mydut (input clk, input byte data);
  always @(posedge clk)
    $display("mydut data = %h", data);
endmodule

Interface template file

我們需要的第一個(gè)模板文件是The first template file。此文件表征一個(gè) DUT的接口,指定一些變量名稱,諸如UVM transaction中的變量和 SystemVerilog 接口中的變量。

clkndata.tpl

agent_name= clkndata
trans_item =data_tx
trans_var  = rand byte data;


if_port= logic clk;
if_port= byte data;
if_clock= clk

其中變量的含義,見(jiàn)名知意。

agent_nameclkndata將用作生成的許多文件名前綴,例如clkndata_agent、clkndata_if、clkndata_pkg 和 clkndata_config。

實(shí)際上,每個(gè) DUT 接口都有一個(gè)這樣的template file,每個(gè)template file都包含唯一的agent名稱。

trans_itemdata_tx將用作類名,該類擴(kuò)展uvm_sequence_item以定義生成的agent中使用事務(wù)transaction,即從sequener發(fā)送到driver和通過(guò)monitor的analysis port發(fā)送的transaction。

trans_var “=”后面的rand byta data將包含在生成的transaction類中。注意行尾的“;”:這很重要,因?yàn)樗鼘⒈粡?fù)制到生成的代碼中。另外,如果希望變量隨機(jī)化,請(qǐng)記住包含 rand 關(guān)鍵字。通常會(huì)有多個(gè)trans_var行。

if_port“=”后面的logic clk;和if_port= bytedata;將包含在生成的 SystemVerilog interface中。同樣,請(qǐng)注意行尾的“;”。即使是最簡(jiǎn)單的例子,我們也需要一個(gè)時(shí)鐘和一個(gè)數(shù)據(jù)信號(hào)。最后,if_clock挑選出其中一個(gè)interface變量作為時(shí)鐘信號(hào)。作為if_clock指定的名稱必須是同一template文件中if_ports之一。

Common template file

我們需要的第二個(gè) template file是Common template file,必須命名為 common.tpl。uvm代碼生成器始終需要一個(gè)common.tpl 文件,該文件指定了一些常用設(shè)置。只有一個(gè)設(shè)置是強(qiáng)制的,即dut_top,有大量可選設(shè)置可讓你對(duì)生成的代碼進(jìn)行控制。許多設(shè)置具有合理的默認(rèn)值,因此你可以在開始時(shí)忽略這些設(shè)置。

common.tpl

dut_top= mydut

dut_top指定DUT top module的名稱,在本例中為 mydut。DUT 源文件必須放置在名為 ./dut 的目錄中,或者你可以使用common.tpl文件設(shè)置dut_source_path選擇其他目錄名稱,也可以在名為 files.f 的單個(gè)文件中手動(dòng)列出文件的位置。

Filename pinlist

第三個(gè)template文件是Pinlist file,它指定 DUT 的端口(在 DUT 的 SystemVerilog 代碼中指定)和 DUT 接口的變量(在Interface template file

中指定)之間的連接。

Pinlist file

!clkndata_if
clkclk
data data

Pinlist file分為多個(gè)部分,每個(gè) DUT 接口一個(gè)部分,每個(gè)部分以感嘆號(hào) “!” 開頭,后跟接口名稱,該名稱始終是agent名稱加上后綴_if。在這個(gè)示例中,只有一個(gè)agent clkndata,因此相應(yīng)的接口名稱為 clkndata_if。其余的每一行都包含 DUT top module的端口名稱,后跟相應(yīng) DUT 接口中的變量名稱。

也可以使用Pinlist file連接不屬于任何特定interface的 DUT 端口,例如:

!
clock_port global_clock_var
reset_port global_reset_var

運(yùn)行uvm代碼生成器

在提供了三個(gè)template文件(clkndata.tpl,common.tpl,pinlist)和DUT文件(mydut.sv)之后,我們現(xiàn)在可以為這個(gè)示例運(yùn)行uvm代碼生成器。我們將命令行放在單行腳本文件中:

perl ../easier_uvm_gen.pl clkndata.tpl

Common template file的名稱默認(rèn)為 common.tpl(但可以使用 -m 開關(guān)從命令行進(jìn)行設(shè)置。現(xiàn)在我們可以運(yùn)行uvm代碼生成器:

94cb3c28-f22c-11ed-90ce-dac502259ad0.png

生成的結(jié)構(gòu)如下所示。弄清楚代碼生成器到底是做什么的最好方法是自己運(yùn)行它!

top_tb (module)
 ? top_th (module instance)
   ? clkndata_if (interface instance)
     mydut (module instance)
   top_config (class uvm_object)


 ? top_test (object, class uvm_test)
    ? top_env (uvm_env)
       ? clkndata_config (uvm_object)
         clkndata_agent (uvm_agent)
          ? clkndata_sequencer
            clkndata_driver (uvm_driver)
            clkndata_monitor (uvm_monitor)
         clkndata_coverage (uvm_subscriber)


       ? top_default_seq (created in run_phase, class uvm_sequence)
          ? clkndata_default_seq (uvm_sequence)
             ? data_tx (uvm_sequence_item)

?

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19359
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4876

    瀏覽量

    69956
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    322

    瀏覽量

    21533
  • 代碼生成器
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    9250
  • 環(huán)境搭建
    +關(guān)注

    關(guān)注

    0

    文章

    54

    瀏覽量

    9176

原文標(biāo)題:Easier UVM Code Generator Part 1: 入門

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

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    基于STRAIGHT算法的個(gè)性化語(yǔ)音生成方法

    算法對(duì)相關(guān)參數(shù)進(jìn)行修改;通過(guò)STRAIGHT合成器生成新的個(gè)性化的語(yǔ)音。實(shí)驗(yàn)結(jié)果表明,該方法可以得到高質(zhì)量的個(gè)性化合成語(yǔ)音,MOS得分為4.18分?!娟P(guān)鍵詞】:語(yǔ)音合成;;STRAIG
    發(fā)表于 04-23 11:28

    利用LabVIEW代碼生成器簡(jiǎn)化應(yīng)用項(xiàng)目

    利用LabVIEW代碼生成器簡(jiǎn)化應(yīng)用項(xiàng)目
    發(fā)表于 02-26 14:01 ?24次下載
    利用LabVIEW<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>簡(jiǎn)化應(yīng)用項(xiàng)目

    代碼生成器的應(yīng)用

    jeesite框架代碼生成器,可以很方便的生成代碼,挺不錯(cuò)的。
    發(fā)表于 01-14 15:19 ?0次下載

    數(shù)碼管代碼生成器

    數(shù)碼管代碼生成器,迅速生成數(shù)碼管的相應(yīng)代碼
    發(fā)表于 04-25 10:54 ?43次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器V1.2

    stm32庫(kù)函數(shù)代碼自動(dòng)生成器是STM32學(xué)習(xí)的小工具。 stm32庫(kù)函數(shù)代碼自動(dòng)生成器可以根據(jù)你的配置生成相應(yīng)的庫(kù)函數(shù)
    發(fā)表于 06-17 17:55 ?0次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版,感興趣的可以看看。
    發(fā)表于 07-13 16:55 ?0次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版 STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    基于UVM代碼生成器的開發(fā)設(shè)計(jì)

    不一相互矛盾的UVM代碼。對(duì)于這些問(wèn)題UVM 代碼生成器基本都可以解決,更為關(guān)鍵的是,這對(duì)于項(xiàng)目的開發(fā)效率提高也是一件極有意義的事情。 簡(jiǎn)單
    發(fā)表于 09-15 17:18 ?22次下載
    基于<b class='flag-5'>UVM</b>的<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>的開發(fā)設(shè)計(jì)

    avr初始代碼生成器中文版免費(fèi)下載

    avr初始代碼生成器,中文界面,適用于ICCAVR和WINAVR(GCC)編譯器,是工程師的實(shí)用軟件。
    發(fā)表于 12-12 16:35 ?0次下載
    avr初始<b class='flag-5'>化</b><b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>中文版免費(fèi)下載

    python生成器是什么

    python生成器 1. 什么是生成器? 生成器(英文名 Generator ),是一個(gè)可以像迭代器那樣使用for循環(huán)來(lái)獲取元素的函數(shù)。 生成器的出現(xiàn)(Python 2.2 +),實(shí)現(xiàn)
    的頭像 發(fā)表于 02-24 15:53 ?3829次閱讀

    如何擴(kuò)展自定義功能塊,以及代碼生成器的用法

    被動(dòng)代碼生成器 目標(biāo)代碼生成之后,需要進(jìn)行修改和完善,然后獨(dú)立發(fā)展和維護(hù),與代碼生成器再與關(guān)系。
    的頭像 發(fā)表于 11-02 13:26 ?1307次閱讀

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目
    發(fā)表于 01-11 19:00 ?0次下載
    將使用<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b><b class='flag-5'>生成</b>的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目

    Easier UVM Code Generator Part 1: 運(yùn)行仿真

    在運(yùn)行uvm代碼生成器后,我們現(xiàn)在可以開始運(yùn)行仿真。同樣,我們將命令行放入腳本文件中
    的頭像 發(fā)表于 05-19 09:18 ?969次閱讀

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目
    發(fā)表于 06-30 20:54 ?0次下載
    將使用<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b><b class='flag-5'>生成</b>的項(xiàng)目移植到與智能配置器一起使用的項(xiàng)目

    RL78的代碼生成器發(fā)布說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《RL78的代碼生成器發(fā)布說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 01-30 09:48 ?0次下載
    RL78的<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b>發(fā)布說(shuō)明

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品