色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

Easier UVM Code Generator Part 2:添加用戶定義的代碼

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 2023-05-20 09:45 ? 次閱讀

在本文中,我們將進一步實現monitor和coverage collector components,以便在仿真期間收集功能覆蓋信息

實現monitor

為了在驗證環境中進行檢查或覆蓋率收集,我們首先需要完成monitor的實現。與前文driver代碼的生成實現類似,我們使用template files指示uvm代碼生成器包含我們的任務。

Filename include/clkndata_do_mon.sv
task clkndata_monitor::do_mon();
  forever @(posedge vif.clk)
  begin
    m_trans = data_tx::create("m_trans");
    m_trans.data = vif.data;
    analysis_port.write(m_trans);
  end
endtask

和driver一樣,任務的命名需要以agent接口為前綴。do_mon任務應monitor DUT 接口,然后組裝成一個事務m_trans,最后通過analysis_port發送出去。

Filename clkndata.tpl
...
driver_inc = clkndata_do_drive.sv
monitor_inc = clkndata_do_mon.sv
...

實現Covergroup

uvm代碼生成器將生成一個subscriber component,該組件連接到monitor的analysis_port。默認情況下,此subscriber將使用covergroup對任何接收到的事務值進行采樣。自動生成的代碼如下所示:

Filename clkndata_coverage.sv
class clkndata_coverage extends uvm_subscriber #(data_tx);


  `uvm_component_utils(clkndata_coverage)


  bit m_is_covered;


  data_tx m_item;


  covergroup m_cov;
    option.per_instance = 1;
    cp_data: coverpoint m_item.data;
  endgroup


  extern function new(string name, uvm_component_parent);
  extern function void write(input data_tx t);


endclass


function clkndata_coverage::new(string name, uvm_component_parent);
  super.new(name, parent);
  m_is_covered = 0;
  m_cov = new;
endfunction


function void clkndata_coverage::write(input data_tx t);
  m_item = t;
  m_cov.sample();
  if (m_cov.get_inst_coverage() >= 100) m_is_covered = 1;
endfunction
...

為了完成覆蓋模型,可以在include文件中提供一組用戶定義的coverpoints,例如:

Filename include/clkndata_cover_inc.sv
covergroup m_cov;
  option.per_instance = 1;
  cp_data: coverpoint m_item.data {
    bins zero = {0};
    bins one  = {1};
    bins negative = { [-128:-1] };
    bins positive = { [1:127] };
    option.at_least = 16;
  }
endgroup

同樣,必須使用正確的命名約定。文件名前綴為agent interface,必須將covergroup 命名為 m_cov,并且引用輸入事務的變量名稱必須為m_item。

Filename clkndata.tpl
...
driver_inc = clkndata_do_drive.sv
monitor_inc = clkndata_do_mon.sv
agent_cover_inc = clkndata_cover_inc.sv
...

生成的subscriber component現在包括剛剛提供的covergroup:

Filename clkndata_coverage.sv
class clkndata_coverage extends uvm_subscriber #(data_tx);
  ...
  data_tx m_item;


  `include "clkndata_cover_inc.sv"
  ...
  extern function void write(input data_tx t);
  ...
endclass

進一步擴展生成的代碼

上述文件 clkndata_cover_inc.sv 僅包含一個covergroup。生成的代碼實例化該covergroup,并包含一個用于對covergroup進行sample的write方法。但是,如果你需要subscriber 采取除samplecovergroup之外或而不是采樣的其他操作怎么辦?答案是,不僅可以include covergroup,還可以從一組include文件中提取類的所有內容。如果要自己提供 new 和 write 方法,則還需要禁止自動生成它們。為此,你需要更改 interface template file,如下所示:

Filename clkndata.tpl
...
#agent_cover_inc = clkndata_cover_inc.sv


agent_cover_inc_inside_class = clkndata_cover_inc_inside.sv
agent_cover_inc_after_class  = clkndata_cover_inc_after.sv
agent_cover_generate_methods_inside_class = no
agent_cover_generate_methods_after_class  = no
...

生成的subscriber 組件現在如下所示:

classclkndata_coverageextendsuvm_subscriber#(data_tx);
`uvm_component(clkndata_coverage)
`include"clkndata_cover_inc_inside.sv"
endclass
`include "clkndata_cover_inc_after.sv"

然后,可以提供以下兩個include文件:

Filename include/clkndata_cover_inc_inside.sv
covergroup m_cov;
  option.per_instance = 1;
  cp_data: coverpoint m_item.data {
    bins zero = {0};
    bins one  = {1};
    bins negative = { [-128:-1] };
    bins positive = { [1:127] };
    option.at_least = 16;
  }
endgroup


extern function new(string name, uvm_component_parent);
extern function void write(input data_tx t);


Filename include/clkndata_cover_inc_after.sv


function clkndata_coverage::new(string name, uvm_component_parent);
  super.new(name, parent);
  m_cov = new;
endfunction


function void clkndata_coverage::write(input data_tx t);
  m_item = t;
  m_cov.sample();
endfunction: write

你現在可以靈活地在這兩個include文件中提供任何代碼。你可以讓用戶定義的代碼插入到生成的代碼中,而不是代碼生成器寫出 'include 指令,如下所示:

Filename clkndata.tpl
...
agent_cover_inc_inside_class = clkndata_cover_inc_inside.sv  inline
agent_cover_inc_after_class  = clkndata_cover_inc_after.sv   inline
...

Override a Sequence

正如我們在前面的文章中看到的,生成的代碼包含一個top-level virtual sequence:

文件名 top_seq_lib.sv

Filename top_seq_lib.sv
...
task top_default_seq::body();
  super.body();
  ...
  clkndata_default_seq seq;
  seq = clkndata_default_seq::create("seq");
  seq.randomize();
  seq.start(m_clkndata_agent.m_sequencer, this);
endtask
...

可以通過擴展創建和啟動的任何default sequence,例如

Filename my_clkndata_seq.sv
class my_clkndata_seq extends clkndata_default_seq;
  ...
  task body();
    ...
    for (int i = 0; i < 16; i++)
    begin
      req = data_tx::create("req");
      start_item(req);
      if ( !req.randomize() with { data == i; })
        ...
      finish_item(req);
    end
  endtask
endclass

然后,需要在interface template file中標識該文件,并將用戶定義的sequence作為default sequence:

Filename clkndata.tpl
...
agent_cover_inc = clkndata_cover_inc.sv
agent_seq_inc = myclkndata_seq.sv


agent_factory_set = clkndata_default_seq my_clkndata_seq

然后,uvm代碼生成器會使用工廠機制覆蓋整個default sequence:

Filenametop_test.sv
function void top_test::build_phase(uvm_phase phase);
  ...
  clkndata_default_seq::get_type());
  ...
endfunction





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19193
  • 生成器
    +關注

    關注

    7

    文章

    317

    瀏覽量

    21053
  • DUT
    DUT
    +關注

    關注

    0

    文章

    189

    瀏覽量

    12425

原文標題:Easier UVM Code Generator Part 2:添加用戶定義的代碼

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Companion Transport Layer RTL Code Generator Tool

    Companion Transport Layer RTL Code Generator Tool
    發表于 01-27 23:45 ?11次下載
    Companion Transport Layer RTL <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool

    Code Generator Tool 用戶手冊 RX API Reference Rev.1.00

    Code Generator Tool 用戶手冊 RX API Reference Rev.1.00
    發表于 03-17 19:31 ?0次下載
    <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool <b class='flag-5'>用戶</b>手冊 RX API Reference Rev.1.00

    e2 studio Code Generator 集成開發環境 用戶手冊:RL78 API Reference

    e2 studio Code Generator 集成開發環境 用戶手冊:RL78 API Reference
    發表于 03-21 19:36 ?0次下載
    e2 studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> 集成開發環境 <b class='flag-5'>用戶</b>手冊:RL78 API Reference

    CS+ Code Generator Tool 集成開發環境 用戶手冊: Pin View Rev.1.10

    CS+ Code Generator Tool 集成開發環境 用戶手冊: Pin View Rev.1.10
    發表于 03-21 20:04 ?0次下載
    CS+ <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool 集成開發環境 <b class='flag-5'>用戶</b>手冊: Pin View Rev.1.10

    e2 studio Code Generator 用戶手冊: RX API Reference

    e2 studio Code Generator 用戶手冊: RX API Reference
    發表于 03-23 19:34 ?0次下載
    e2 studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> <b class='flag-5'>用戶</b>手冊: RX API Reference

    [e2studio] Renesas Starter Kit for RX130 Code Generator Tutorial 手冊

    [e2studio] Renesas Starter Kit for RX130 Code Generator Tutorial 手冊
    發表于 03-29 18:36 ?0次下載
    [e<b class='flag-5'>2</b>studio] Renesas Starter Kit for RX130 <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊

    Easier UVM Code Generator Part 1: 運行仿真

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

    Easier UVM Code Generator Part 4:生成層次化的驗證環境

    本文使用Easier UVM Code Generator生成包含多個agent和interface的uvm驗證環境。
    的頭像 發表于 06-06 09:13 ?1186次閱讀

    Code Generator Tool 用戶手冊 RX API Reference Rev.1.00

    Code Generator Tool 用戶手冊 RX API Reference Rev.1.00
    發表于 07-06 20:57 ?1次下載
    <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool <b class='flag-5'>用戶</b>手冊 RX API Reference Rev.1.00

    e2 studio Code Generator 集成開發環境 用戶手冊:RL78 API Reference

    e2 studio Code Generator 集成開發環境 用戶手冊:RL78 API Reference
    發表于 07-07 19:36 ?0次下載
    e2 studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> 集成開發環境 <b class='flag-5'>用戶</b>手冊:RL78 API Reference

    CS+ Code Generator Tool 集成開發環境 用戶手冊: Pin View Rev.1.10

    CS+ Code Generator Tool 集成開發環境 用戶手冊: Pin View Rev.1.10
    發表于 07-07 20:05 ?0次下載
    CS+ <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tool 集成開發環境 <b class='flag-5'>用戶</b>手冊: Pin View Rev.1.10

    e2 studio Code Generator 用戶手冊: RX API Reference

    e2 studio Code Generator 用戶手冊: RX API Reference
    發表于 07-10 19:26 ?0次下載
    e2 studio <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> <b class='flag-5'>用戶</b>手冊: RX API Reference

    [e2studio] Renesas Starter Kit for RX130 Code Generator Tutorial 手冊

    [e2studio] Renesas Starter Kit for RX130 Code Generator Tutorial 手冊
    發表于 07-11 19:01 ?0次下載
    [e<b class='flag-5'>2</b>studio] Renesas Starter Kit for RX130 <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊

    [e2studio] Renesas Starter Kit for RX23T Code Generator Tutorial 手冊

    [e2studio] Renesas Starter Kit for RX23T Code Generator Tutorial 手冊
    發表于 07-11 19:37 ?0次下載
    [e<b class='flag-5'>2</b>studio] Renesas Starter Kit for RX23T <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊

    [e2studio] Renesas Starter Kit+ for RX64M Code Generator Tutorial 手冊

    [e2studio] Renesas Starter Kit+ for RX64M Code Generator Tutorial 手冊
    發表于 07-12 19:52 ?0次下載
    [e<b class='flag-5'>2</b>studio] Renesas Starter Kit+ for RX64M <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊
    主站蜘蛛池模板: 高清毛片一区二区三区| 亚洲国产高清视频在线观看| 欧美人与善交大片| 99RE6国产精品视频播放| 男人被绑着强行摸j| 亚洲精品国产第一区第二区| 国产原创中文视频| 怡春院院日本一区二区久久| 男男校园园bl文全肉高h寝室| 亚洲精品色播一区二区| 久久4k岛国高清一区二区| 亚洲电影二区| 九九免费的视频| AV72啪啪网站| 欧美丰满少妇久久无码精品| 《乳色吐息》无删减版在线观看 | 手机看片国产免费久久网| 国产午夜亚洲精品区| 最近更新2019中文字幕免费| 久久re6热在线视频| 亚洲精品国产字幕久久vr| 美女被抽插到哭内射视频免费| 成人在线精品视频| 日本精品久久久久中文字幕 1| 国产伦精品一区二区三区免费观看 | 国产精品一国产精品免费| 最近高清中文字幕无吗免费看| 丝袜足控免费网站xx91| 理论片午午伦夜理片影院| 99re久久精品在线播放| 我要色导航| 蜜桃TV成人网站免费打开| 国产伦精品一区二区三区| 99久久国产综合色| 欧洲-级毛片内射八十老太婆| 国产亚洲欧美ai在线看片| xxxx69中国| 玩弄人妻少妇500系列网址| 久久性综合亚洲精品电影网| 国产哺乳期奶水avav| 99精品99|