在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 202|回复: 4

[求助] vcs是否有默认仿真时间?

[复制链接]
发表于 2024-5-22 17:00:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
正在学习uvm白皮书,跑了书上一个例子,想问下vcs在仿真的时候有没有默认仿真时间?我运行的这个top_tb.sv里没有$finish(),makefile在运行vcs和verdi时也没有和时间相关的参数,但是运行的时候会自动停止且由于dut很简单,仿真时间很短会自动结束。我应该如何查看这个时间?

发表于 2024-5-23 19:04:02 | 显示全部楼层
DUT是静态的,应该和里面的东西关系不大。你的top_tb里面还有啥?外部激励怎么给的?是不是所有进程执行完了就结束了?
 楼主| 发表于 2024-6-5 13:50:34 | 显示全部楼层

UVM白皮书



gaurson 发表于 2024-5-23 19:04
DUT是静态的,应该和里面的东西关系不大。你的top_tb里面还有啥?外部激励怎么给的?是不是所有进程执行完 ...


我是看了白皮书7.3.5的例子,发现里面bus_driver的run_phase;my_driver的main_phase;my_model的main_phase都有while(1),但是没有看到drop_objection,所以猜是不是有默认仿真时间结束了这些phase
我最近看到网上有提到在sequence里控制objection,这会控制driver里的phase吗?

以下是my_model的代码

class my_model extends uvm_component;
   
   uvm_blocking_get_port #(my_transaction)  port;
   uvm_analysis_port #(my_transaction)  ap;

   reg_model p_rm;
   extern function new(string name, uvm_component parent);
   extern function void build_phase(uvm_phase phase);
   extern virtual  task main_phase(uvm_phase phase);
   extern virtual  function void invert_tr(my_transaction tr);

   `uvm_component_utils(my_model)
endclass

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

function void my_model::build_phase(uvm_phase phase);
   super.build_phase(phase);
   port = new("port", this);
   ap = new("ap", this);
endfunction

function void my_model::invert_tr(my_transaction tr);
    tr.dmac = tr.dmac ^ 48'hFFFF_FFFF_FFFF;
    tr.smac = tr.smac ^ 48'hFFFF_FFFF_FFFF;
    tr.ether_type = tr.ether_type ^ 16'hFFFF;
    tr.crc = tr.crc ^ 32'hFFFF_FFFF;
    for(int i = 0; i < tr.pload.size; i++)
      tr.pload = tr.pload ^ 8'hFF;
endfunction

task my_model::main_phase(uvm_phase phase);
   my_transaction tr;
   my_transaction new_tr;
   uvm_status_e status;
   uvm_reg_data_t value;
   super.main_phase(phase);
   p_rm.invert.read(status, value, UVM_FRONTDOOR);
   while(1) begin
      port.get(tr);
      new_tr = new("new_tr");
      new_tr.copy(tr);
      //`uvm_info("my_model", "get one transaction, copy and print it:", UVM_LOW)
      //new_tr.print();
      if(value)
         invert_tr(new_tr);
      ap.write(new_tr);
   end
endtask
发表于 2024-6-5 19:06:39 | 显示全部楼层
起码从这里看,不是my_model结束的,你可能还要看看别的代码。在sequence里面使用objection是可行的。有可能你说的案例里面就是在sequence里面结束的仿真。都看一看,找到可疑的地方在发来看看。
发表于 2024-6-6 17:08:18 | 显示全部楼层
学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-16 09:50 , Processed in 0.019194 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表