|
对于不同的配置可能某些信号位宽不一样的interface,一般的想法是声明可以传参的interface,如下:
在top层instance的时候,可以根据实际的情况进行传参。如下:
然而,使用config_db的时候会碰一个问题:config_db_set去set到需要用到的地方。如下:
如果uvm_config_db中传的参数的值不等于intf声明的default值,那么会直接报错提示没有找到该interface的声明,从而没办法达到预期的传参的目的。
uvm_config_db去找#()中的type时,有点像是去找templete,如果传参与default不一样,比如是
DataWidth==32,那么uvm_config_db会去找 OCP_if#(parameter DataWidth=32 .....),
当然就找不到,因为templete只有OCP_if#(parameter
DataWidth=64 .....).
所以Interface传参对于UVM来说挺鸡肋的,还不如直接用define.
对于图1, 直接用DataWidth=`MBUS_DWIDTH可以绕过这个问题,但没有根本解决。如果在一个env里面既有32又有64的datawidth的interface怎么办呢?通过简单的define就不够用了。
解决的办法就是,然后需要为VIP的config class里面加上一个变量DATA_WIDTH用以标明实际的datawidth,其driver,monitor,packet都以这个变量来识别真正的数据位宽。在top层连线的时候,注意不同的intf位宽不一样。 interface声明中,define `MBUS_DWIDTH设定为最大的位宽。
整个env不用config_db来拿virtual interface,(貌似是从最初OVM沿用过来的)
1.top instance interface的时候进行传参
2.在的component中,在declare virtual interface的时候,特别注意一定不要传参,直接decare。然后通过自建vif assign function,一层一层往下assign,这样就能够保持interface传参的特性。
如下另一个env的做法:
declare直接是: virtual interface OCP_if vif;
小黑屋| 关于我们| 联系我们| 在线咨询 | EETOP 创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )
GMT+8, 2021-1-17 14:07 , Processed in 0.030843 second(s), 6 queries , Gzip On, Redis On.
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.