精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

Easier UVM Code Generator Part 1: 運行仿真

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

在運行uvm代碼生成器后,我們現在可以開始運行仿真。同樣,我們將命令行放入腳本文件中:

Filename runius
cd generated_tb/sim
compile_ius.sh


Filename runquesta
cd generated_tb/sim
vsim -c -do "do compile_questa.do; run -all"


Filename runvcs
cd generated_tb/sim
compile_vcs.sh


Filename runriviera
cd generated_tb/sim
vsimsa -do compile_riviera.do
./sim目錄包含運行CadenceMentor,Synopsys等仿真器的腳本。 生成的驗證環境將運行僅生成單個transaction的sequence,因此在仿真日志中,應該會看到來自clkndata_driver的UVM_INFO消息,其中打印出transaction中數據字段的值,如下所示:
# UVM_INFO ../tb/clkndata/sv/clkndata_driver.sv(47) @ 0: uvm_test_top.m_env.m_clkndata_agent.m_driver [clkndata_driver] req item 
# vseq.seq.req 
# data = f4
但是,你不會看到從 DUT 打印出此數據值($display(“mydut data = %h”, data);參考前文中DUT的代碼),因為我們尚未提供driver的實現,因此盡管driver正在從sequencer接收事務,但它實際上并沒有驅動DUT接口

`ifndef CLKNDATA_DRIVER_SV
`define CLKNDATA_DRIVER_SV
//Youcaninsertcodeherebysettingdriver_inc_before_classinfileclkndata.tpl
classclkndata_driverextendsuvm_driver#(data_tx);
`uvm_component_utils(clkndata_driver)
virtualclkndata_ifvif;
clkndata_configm_config;
externfunctionnew(stringname,uvm_componentparent);
//Youcaninsertcodeherebysettingdriver_inc_inside_classinfileclkndata.tpl
endclass:clkndata_driver
function clkndata_driver::new(string name, uvm_component parent);
super.new(name, parent);
endfunction:new
//Youcaninsertcodeherebysettingdriver_inc_after_classinfileclkndata.tpl
`endif//CLKNDATA_DRIVER_SV
實現driver

為了驅動DUT的接口,我們需要完成driver的實現。為此,我們可以提供driver需要調用的任務代碼,然后在template files指示uvm代碼生成器包含我們的任務。
Filename include/clkndata_do_drive.sv
task clkndata_driver::do_drive(); 
  vif.data <= req.data; 
  @(posedge vif.clk); 
endtask
在此任務中必須使用正確的命名約定。clkndata是interface template file中的agent名稱,這需要作為任務和文件名的前綴。要讓uvm代碼生成器包含我們的任務,我們需要添加到interface template file。
Filename clkndata.tpl
...
driver_inc = clkndata_do_drive.sv
實現后的driver代碼:
`ifndefCLKNDATA_DRIVER_SV
`define CLKNDATA_DRIVER_SV


//Youcaninsertcodeherebysettingdriver_inc_before_classinfileclkndata.tpl
classclkndata_driverextendsuvm_driver#(data_tx);
`uvm_component_utils(clkndata_driver)
virtualclkndata_ifvif;
clkndata_configm_config;
externfunctionnew(stringname,uvm_componentparent);
  // Methods run_phase and do_drive generated by setting driver_inc in file clkndata.tpl
  extern task run_phase(uvm_phase phase);
externtaskdo_drive();
//Youcaninsertcodeherebysettingdriver_inc_inside_classinfileclkndata.tpl
endclass:clkndata_driver


function clkndata_driver::new(string name, uvm_component parent);
  super.new(name, parent);
endfunction : new


task clkndata_driver::run_phase(uvm_phase phase);
`uvm_info(get_type_name(),"run_phase",UVM_HIGH)
  forever
  begin
    seq_item_port.get_next_item(req);
      `uvm_info(get_type_name(), {"req item
",req.sprint}, UVM_HIGH)
    do_drive();
    seq_item_port.item_done();
  end
endtask:run_phase


// Start of inlined include file generated_tb/tb/include/clkndata_do_drive.sv
task clkndata_driver::do_drive();
  vif.data <= req.data;
  @(posedge vif.clk);
endtask
//?End?of?inlined?include?file
//?You?can?insert?code?here?by?setting?driver_inc_after_class?in?file?clkndata.tpl
`endif // CLKNDATA_DRIVER_SV
我們現在可以使用與以前相同的腳本簡單地重新運行uvm代碼生成器和仿真。 仿真器log說明DUT被正確地驅動了:
# mydata data = f4
此消息表明,我們的DUT 現在正在通過 clkndata 接口接收事務。驗證環境仍然只向 DUT 發送一個transaction,如何配置發送多個transaction?

發送多個transaction

uvm代碼生成器生成的代碼默認發送單個transaction,可以使用common template file中的設置輕松更改此值。
Filename common.tpl
dut_top = mydut
top_default_seq_count = 10
修改后再重新生成uvm代碼。
`ifndefTOP_SEQ_LIB_SV
`define TOP_SEQ_LIB_SV


class top_default_seq extends uvm_sequence #(uvm_sequence_item);


`uvm_object_utils(top_default_seq)


top_config      m_config;
clkndata_agent  m_clkndata_agent;
// Number of times to repeat child sequences
int m_seq_count = 10;


extern function new(string name = "");
extern task body();
extern task pre_start();
extern task post_start();


`ifndef UVM_POST_VERSION_1_1
// Functions to support UVM 1.2 objection API in UVM 1.1
extern function uvm_phase get_starting_phase();
extern function void set_starting_phase(uvm_phase phase);
`endif




endclass : top_default_seq


function top_default_seq::new(string name = "");
super.new(name);
endfunction : new




task top_default_seq::body();
`uvm_info(get_type_name(), "Default sequence starting", UVM_HIGH)




repeat (m_seq_count)
  begin
  fork
    if (m_clkndata_agent.m_config.is_active == UVM_ACTIVE)
    begin
      clkndata_default_seq seq;
      seq = clkndata_default_seq::create("seq");
      seq.set_item_context(this, m_clkndata_agent.m_sequencer);
      if ( !seq.randomize() )
        `uvm_error(get_type_name(), "Failed to randomize sequence")
        seq.m_config = m_clkndata_agent.m_config;
        seq.set_starting_phase( get_starting_phase() );
        seq.start(m_clkndata_agent.m_sequencer, this);
      end
    join
end


`uvm_info(get_type_name(), "Default sequence completed", UVM_HIGH)
endtask : body




task top_default_seq::pre_start();
uvm_phase phase = get_starting_phase();
if (phase != null)
phase.raise_objection(this);
endtask: pre_start


task top_default_seq::post_start();
uvm_phase phase = get_starting_phase();
if (phase != null)
phase.drop_objection(this);
endtask: post_start


`ifndef UVM_POST_VERSION_1_1
function uvm_phase top_default_seq::get_starting_phase();
return starting_phase;
endfunction: get_starting_phase


function void top_default_seq::set_starting_phase(uvm_phase phase);
starting_phase = phase;
endfunction: set_starting_phase
`endif
//Youcaninsertcodeherebysettingtop_seq_incinfilecommon.tpl


`endif // TOP_SEQ_LIB_SV



現在運行仿真腳本,將看到 DUT 接收 10 個transaction而不是1個transaction。 我們可以通過類似的方式實現driver、monitor、fcov收集。

任何包含文件都必須放在名為 ./include 的目錄中或者可以使用common template file設置inc_path選擇其他目錄名稱。




審核編輯:劉清

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

    關注

    14

    文章

    1016

    瀏覽量

    83647
  • UVM
    UVM
    +關注

    關注

    0

    文章

    181

    瀏覽量

    19144
  • 生成器
    +關注

    關注

    7

    文章

    313

    瀏覽量

    20982
  • DUT
    DUT
    +關注

    關注

    0

    文章

    189

    瀏覽量

    12348

原文標題:Easier UVM Code Generator Part 1: 運行仿真

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

收藏 人收藏

    評論

    相關推薦

    圖像處理:HDMI顯示代碼的UVM仿真

    本篇完成對HDMI顯示代碼的UVM仿真,梳理一下在windows-modelsim工具下UVM仿真環境的建立,調試以及遇到的問題。 仿真架構
    的頭像 發表于 11-10 15:35 ?5162次閱讀
    圖像處理:HDMI顯示代碼的<b class='flag-5'>UVM</b><b class='flag-5'>仿真</b>

    Companion Transport Layer RTL Code Generator Tool

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

    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> 用戶手冊: RX API Reference

    [CubeSuite+] Renesas Starter Kit for RL78/L1C Code Generator Tutorial 手冊 Rev.1.02

    [CubeSuite+] Renesas Starter Kit for RL78/L1C Code Generator Tutorial 手冊 Rev.1.02
    發表于 03-30 18:46 ?0次下載
    [CubeSuite+] Renesas Starter Kit for RL78/L<b class='flag-5'>1</b>C <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊 Rev.1.02

    Renesas Starter Kit+ for RZ/T1 Code Generator Tutorial 手冊 Rev.1.00

    Renesas Starter Kit+ for RZ/T1 Code Generator Tutorial 手冊 Rev.1.00
    發表于 05-15 19:31 ?0次下載
    Renesas Starter Kit+ for RZ/T<b class='flag-5'>1</b> <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊 Rev.1.00

    [CS+] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊 Rev.1.00

    [CS+] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊 Rev.1.00
    發表于 05-15 19:49 ?1次下載
    [CS+] Renesas Starter Kit for RL78/G<b class='flag-5'>1</b>G <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊 Rev.1.00

    [e2studio] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊

    [e2studio] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊
    發表于 05-15 19:55 ?0次下載
    [e2studio]  Renesas Starter Kit for RL78/G<b class='flag-5'>1</b>G <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊

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

    在本文中,我們將進一步實現monitor和coverage collector components,以便在仿真期間收集功能覆蓋信息。
    的頭像 發表于 05-20 09:45 ?726次閱讀

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

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

    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> 用戶手冊: RX API Reference

    Renesas Starter Kit+ for RZ/T1 Code Generator Tutorial 手冊 Rev.1.00

    Renesas Starter Kit+ for RZ/T1 Code Generator Tutorial 手冊 Rev.1.00
    發表于 07-11 20:43 ?0次下載
    Renesas Starter Kit+ for RZ/T<b class='flag-5'>1</b> <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊 Rev.1.00

    [CS+] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊 Rev.1.00

    [CS+] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊 Rev.1.00
    發表于 07-12 18:43 ?0次下載
    [CS+] Renesas Starter Kit for RL78/G<b class='flag-5'>1</b>G <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊 Rev.1.00

    [CS+] Renesas Starter Kit+ for RX71M Code Generator Tutorial 手冊

    [CS+] Renesas Starter Kit+ for RX71M Code Generator Tutorial 手冊
    發表于 07-12 18:45 ?1次下載
    [CS+] Renesas Starter Kit+ for RX71M <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊

    [e2studio] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊

    [e2studio] Renesas Starter Kit for RL78/G1G Code Generator Tutorial 手冊
    發表于 07-12 18:48 ?0次下載
    [e2studio]  Renesas Starter Kit for RL78/G<b class='flag-5'>1</b>G <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊

    [CubeSuite+] Renesas Starter Kit for RL78/L1C Code Generator Tutorial 手冊 Rev.1.02

    [CubeSuite+] Renesas Starter Kit for RL78/L1C Code Generator Tutorial 手冊 Rev.1.02
    發表于 07-12 20:21 ?0次下載
    [CubeSuite+] Renesas Starter Kit for RL78/L<b class='flag-5'>1</b>C <b class='flag-5'>Code</b> <b class='flag-5'>Generator</b> Tutorial 手冊 Rev.1.02