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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: doogo

[原创] 《UVM实战》24小时问答

[复制链接]
发表于 2014-10-13 09:01:21 | 显示全部楼层
非常感谢!!
发表于 2014-10-13 10:58:10 | 显示全部楼层
right on
发表于 2014-10-13 11:14:41 | 显示全部楼层
很好的建议,good
 楼主| 发表于 2014-10-13 11:48:24 | 显示全部楼层



这种情况就需要把波形dump出来,然后看里面的reg的值到底是多少,写操作是否成功,并进一步debug了。
发表于 2014-10-14 08:52:42 | 显示全部楼层
先看看 在 发言
发表于 2014-10-14 16:23:37 | 显示全部楼层
在学习verilog语言,不知道后面会不会转到这个方向
发表于 2014-10-16 18:15:42 | 显示全部楼层
作者你好!学习system verilog有两个月了,非常激动有《UVM实战》这本书,带我探索UVM的世界。学习system verilog语言却不知如何搭建验证平台的迷茫一扫而光,真心感谢你。

目前读完了第二章,对uvm验证平台全貌有了初步了解。有点疑问,也许后面的章节能解惑,但现在还是想请教一下。

关于仿真结束的控制,在未接触UVM时,我的做法是,定义一个全局变量packet_number。Generator产生packet_number个drive_packet,Receiver会收到packet_number个receive_packet,Scoreboard挨个对比drive_packet和receive_packet。仿真结束由Scoreboard决定,当对比pass的包数量达到packet_number时,即认为仿真结束。

但是在UVM中推荐在sequence中通过objection控制仿真结束。sequence位于驱动端,从驱动端的角度控制仿真结束,如何保证在接收端接收到所有transaction,并且scoreboard对比完所有transaction?

谢谢。
 楼主| 发表于 2014-10-16 20:51:17 | 显示全部楼层


作者你好!学习system verilog有两个月了,非常激动有《UVM实战》这本书,带我探索UVM的世界。学习system v ...
longxigen 发表于 2014-10-16 18:15



1、请参考5.2.3节“控制objection的最佳选择”。2、UVM中也可以不在sequence中控制transaction
3、如果在sequence中控制,那么sequence中发出的transaction会交给reference model,reference model会交给scoreboard,scoreboard在收到reference model中的transaction后,存放在一个expect_queue里。当monitor接收到DUT的transaction并交给scoreboard后,scoreboard会从expect_queue中弹出一个transaction。所以在仿真结束前查看expect_queue是否为空,如果不为空,说明sequence发出了transaction,但是DUT并没有输出足够的transaction。
发表于 2014-10-17 12:52:17 | 显示全部楼层
回复 128# doogo

对于你说的第3点,“在仿真结束前查看expect_queue是否为空”,是指UVM自动会检查,还是需要自己添加检查代码?

对于书中的例子:
class case0_sequence extends uvm_sequence #(my_transaction);
   my_transaction m_trans;
   function  new(string name= "case0_sequence");
      super.new(name);
   endfunction
   
   virtual task body();
      if(starting_phase != null)
         starting_phase.raise_objection(this);
      repeat (10) begin
         `uvm_do(m_trans)
      end
      #100;
      if(starting_phase != null)
         starting_phase.drop_objection(this);
   endtask
   `uvm_object_utils(case0_sequence)
endclass

可否这样理解,上述例子的仿真,在Driver给回第10个Transaction的item_done,再延迟100个仿真时间单位,就结束仿真。
如果这样理解的话,在驱动第10个Transaction后,如果DUT不能在100个仿真时间单位内返回数据,那么第10个Transaction就不会完成接收和对比。
 楼主| 发表于 2014-10-17 19:34:23 | 显示全部楼层


回复  doogo

对于你说的第3点,“在仿真结束前查看expect_queue是否为空”,是指UVM自动会检查,还是需 ...
longxigen 发表于 2014-10-17 12:52



需要自己添加。UVM有一个check_phase,通常在这个phase检查。

延时100,期待着DUT能够在这100ns之内把最后一个数据输出。100这个数字要根据DUT具体的延时来定的。另外,后面你就会发现,根本不需要写这个#100,而通过设置一个参数叫做drain_time的就可以自动延时。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-6 16:58 , Processed in 0.021812 second(s), 7 queries , Gzip On, Redis On.

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