UVM验证平台中自动对比
reference_model里面负责把transaction包发给scoreboard,但是现在发现scoreboard里面
的端口不能正常接收transaction。在scoreboard里面,有两个并行运行的while(1)语句,分别
如下:
现在只有一个while(1)语句里的actual_port能正常接收数据,原因在哪里,请求解答
scb中用analysis_port比较常见一点,使用write函数更加合适,可以用vcs的gui 跟一下,很快就可以定位到问题了
你是说,1. 在scb里面,用analysis_port而不是uvm_blocking_get_port是吧。
2. 用write函数,是写出去的啊,我目前scb里面要用get来接收数据。
请对1和2做一下详细解释,多谢
用put/get也可以。我觉得你需要检查一下,数据源是否ready
这两种用法都是可以的,不过一般在scb可能会选择Analysis_port(简称AP)吧,AP是以广播的形式传递的,只要在ref_model中是用ap_port.write(tr)。然后在scb中实现一个write(trans_type tr)的函数即可。AP的方式没有延时,不会阻塞,相对比较简单。blocking的方式会有阻塞,而且一般是一对一的连接,更加适合在处理或者驱动数据的Components之间一对一的传输数据,上层传递过来的数据没有被获取的时候是不能够再put新的数据的。
如何识别数据源是否ready ?
你好,之前你回复的帖子中有这样一句话:只要在ref_model中是用ap_port.write(tr)。然后在scb中实现一个write(trans_type tr)的函数即可。
后一句没看明白,我们在scb中不是要接收来自ref_model的数据吗,应该用get函数才对啊,怎么还要用到
write函数呢?
这个就是AP端口的用法,需要接受数据的组件就例化一个ap端口,然后实现write函数即可,VMM和UVM中都有这个用法,具体的你可以查一下说明。
是因为对于analysis_port来说,analysis_port.write(xxx)会调用与之连接的analysis_imp的write()方法,所以imp接口的write函数必须要实现