config_db 传参intf的问题

来源:互联网 发布:mac云盘下载速度慢 编辑:程序博客网 时间:2024/06/12 00:08

Case

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

   

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

   

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

   

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

Cause

    uvm_config_db去找virtual OCP_if #(...)时,有点像是去找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,

   1.top instance interface的时候进行传参

   2.在的component中,在declare virtual interface的时候,不要传参了,直接decare。然后通过自建vif assign function,一层一层往下assign,这样就能够保持interface传参的特性。

   如下另一个env的做法:

    declare直接是: virtual interface OCP_if vif;

  

     

 

0 0