索手锋芒的个人空间 http://blog.eetop.cn/calvin [收藏] [复制] [分享] [RSS]

日志

config_db 传参interface的问题

已有 887 次阅读2016-8-22 11:21 |个人分类:UVM notebook

Case

   对于不同的配置可能某些信号位宽不一样的interface,一般的想法是声明可以传参的interface,如下:

   

    在top层instance的时候,可以根据实际的情况进行传参。如下:

   

    然而,使用config_db的时候会碰一个问题:config_db_set去set到需要用到的地方。如下:

   

      如果uvm_config_db中传的参数的值不等于intf声明的default值,那么会直接报错提示没有找到该interface的声明,从而没办法达到预期的传参的目的。

Cause

    uvm_config_db去找#()中的type时,有点像是去找templete,如果传参与default不一样,比如是 DataWidth==32,那么uvm_config_db会去找 OCP_if#(parameter DataWidth=32 .....),  当然就找不到,因为templete只有OCP_if#(parameter DataWidth=64 .....).

Solution 1

    所以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设定为最大的位宽。

    

   

Solution 2

    整个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;

  

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

关闭

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

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

GMT+8, 2020-1-20 18:28 , Processed in 0.030614 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部