微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > UVM中如何精准控制仿真结束?

UVM中如何精准控制仿真结束?

时间:10-02 整理:3721RD 点击:
验证新人,刚开始学习。请问各位前辈,如何控制UVM精准的结束仿真?
《UVM实践》中也说了:在Sequence中raise和drop objection,但如果立即drop,DUT有延迟的话会收不到最后一笔包。
所以,方法1:在Sequence的body中,发完以后,等一定延迟再drop。
方法2:对main_phase的set_drain_time进行配置,为非0。
——两者本质都是延迟一段固定时间。
然而,长度随机的包,经过DUT的延迟,结束的时间是不同的。
如何精准的在scoreboard比较结束后,就结束仿真?
(比如:为了测定转发延迟。但如果都打印信息,仿真速度又会变慢)
如果在比较任务的while(1)外raise、drop,则仿真不会结束。
如果将比较任务改成for循环发包数,到0结束。但如果丢包了,永远减不到0,也可能阻塞不结束。
求教各位前辈、大师~

我也有這方面的因扰.
我是用你說的第一個方法, 在 body 中延迟一段時間再drop. 這段時間是略估會造成延迟的最大值. 所以會浪費一些 simulation 時間.
我也想知道還有没有其它更好的方法.

可以用进程间通信的方法呀,接收包结束了给环境一个标志或者触发一个event,来控制仿真结束,这个是最好的机制,延时是下等策略。

  1. function void my_component::phase_ready_to_end( uvm_phase phase );
  2. if( !is_ok_to_end() ) begin
  3. phase.raise_objection( this , "not yet ready to end phase" );
  4. fork begin
  5. wait_for_ok_end();
  6. phase.drop_objection( this , "ok to end phase" );
  7. end
  8. join_none
  9. end
  10. endfunction : phase_ready_to_end

复制代码


Ready_to_end_phasewithoutfork/join_noneisusedintheObject-to-AllandObject-to-Onephasingpoliciesoften
used in components such as transactors and scoreboards.

13.1.4.3.2 phase_ready_to_end
virtual function void phase_ready_to_end(
uvm_phase phase
)
Invoked when all objections to ending the given phase and all sibling phases have been dropped, thus
indicating that phase is ready to begin a clean exit. Sibling phases are phases who share any adjacent
successor nodes
摘自 1800.2-2017;从这里 看出 依然 是需要 在 transactor, scoreboard中 分别 raise drop,对于 process控制 并不能起 决定性作用 ;我 估摸着 小编 是希望找到 关于 如何 有效 的 process control 的答案 吧;在 1800-2012 9.6 process control 中 有详细的 解决方案;

等收包结束。有需要的话,也可以监测设计内部信号。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top