微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 求助:如何在UVM验证环境中增加某个时刻对DUT内部存储的读写?

求助:如何在UVM验证环境中增加某个时刻对DUT内部存储的读写?

时间:10-02 整理:3721RD 点击:
各位:
接着折腾.
已经有一个简单的UVM验证环境,为DUT产生驱动,并监控输出。然后,我们觉得只对输入输出port的数据进行监控还不大够,需要在适当的时候把DUT内部存储数据取出来进行一番比对。由于是刚接触UVM,好多还不懂的,所以上来问问大家该怎么弄。
取出DUT内部的存储数据这个我倒是知道可以通过regmodel实现,但是问题是什么时候去取数。比如说DUT内部有A、B、C三个子模块,这三个模块都往内部存储中读写数据,而且是A处理完DUT输入数据之后送到memory中,然后B就可以开始取,做完处理之后还存到memory中,然后C接着取B处理完的数据,这样。所以,我需要A有个控制信号告诉我,什么时候我处理完了,然后我再去取regmodel的数据。
那我目前还没想明白:
1. 我怎么获取A中的这个控制信号,同事告诉我,各个模块中的控制信号有reg型的,也有wire型的。
2. 使用regmodel的话,是放到sequence中用regmodel.ram.peek(Aaddr)来读取数据呢,还是写一个monitor,直接监控,但是用monitor的话,难道要把这些内部的信号都拉到port口么?
不知道有哪位高人能帮帮忙呀?

尝试在测试顶层将带有层次化路径控制信号赋值给接口中一信号,然后在sequence中检测该接口控制信号时序关系应该可以实现的。

也就是说,把内部信号连到顶层能访问的port口上,方便使用?


UVM中,基于class的动态ENV和基于module的DUT之间需要虚接口处理,通过在tb顶层将层次化路径信号,赋值到接口内部某个信号(按需求定义),一般虚接口都会在tb顶层通过uvm_config_db添加到global config resource database(或叫全局配置表)里面,然后在sequence里get该接口,通过检测接口信号发生变化来控制sequence进一步操作,这样应该是可以完成的。
在其它如verilog或vhdl(通过Buffer)、可以通过层次化路径方式检测信号边沿的跳变或者其它情况,而执行相应的操作。specman E由于没有虚接口概念都通过层次化路径方式检测信号边沿的跳变,触发相应事件,来控制sequence的执行顺序。
我也是在学习当中,希望大牛赐教。

我的方法一直都是和2楼的一样,通过vertual interface把内部信号接出来,但是感觉好麻烦,如此做 感觉UVM还不如verilog直接层次化assign进去,希望哪位高手有更好的方法。期待中

可重用是手段,但不是目的。

如果需要reference DUT的信号比较少的话,直接在sequence里面可以使用层次化的方式拿到dut的signal,
例如按照你给的例子,那就是wait到dut的A的action done信号,就是wait(testbench.dut.A.done == 1'b1)这样。关于regmodel一般是frontdoor和backdoor两种方法,如果你需要verify 从dut interface到memory的data path的话就用前者,否者就用backdoor的方式,只需要简单的设置下memory的hdl path 就可以用了,很简单。

在driver中,put_response(rsp)给sequence,
在sequence中get_response(rsp)根据rsp的value来判断发送不同的sequence。
不过要在driver中注册一下rsp的信息

直接在sequence里hierarchy到dut的信号会报错

受益匪浅



不会吧,我试过可以呀。sequence可以直接使用DUT的hierarchy。

这个要看情况的。如果此sequence被include在一个package里面,那么是不可以的。

哦。我知道了,我一般不这样打package。这样打package有什么好处么?

UVM把它的所有的代码放在一个package里,大家使用import uvm_pkg::*的方式,这样从总体来说比较干净。而且package的存在可以规范自己的代码书写习惯(使用绝对路径的方式不是一个好的编码习惯)

呃,我是想说我一般打package的时候不把sequence包进去。想问的是把sequence一块打包进去的package打法有什么优势么,那不把sequence打包进去又有什么好处呢?关于打package的时候包含哪个不包含哪个以前都没仔细想过,只是从一开始就按照习惯这样打,如果这个习惯不大好的话,肯定得改变。

原则上,可以复用的东西尽量放在package里,可以复用的sequence也如此。以后复用时使用import package就可以了,而不必include。

OK.谢谢!

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

网站地图

Top