在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12561|回复: 14

[求助] uvm中如何使用共享类

[复制链接]
发表于 2012-7-8 19:40:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位大侠,本人遇到一个问题:

本人在用uvm搭建平台的时候有这样一个需求,即需要设置一个共享类,里面存放全局变量,和参数,类似dut中的ram和reg,然后其他组件类需要的
时候可以访问这个类。也就是说这个类一般只创建一个对象,然后多个不同的类需要访问(读写)这个类的成员。

如下是伪代码,能行否:

class share
{
      int a;
      int b;
}

class driver
{
     .....
     //只申明一个share的句柄,不创建对象,由上层组件配置具体的句柄
     share   p;
     ....
}

class  monitor
{
     .....
     share   p;
     ....
}




class env
{
      share sh;
      
      build_phase()
     {
          sh=...creat()....;
         
      }
     
      connect_phase()
      {
            driver.p=sh;
            monitor.p=sh;
      }
  

}
发表于 2012-7-8 22:05:58 | 显示全部楼层
怎么感觉不像RAM和REG,倒是像verilog的parameter之类的?
 楼主| 发表于 2012-7-9 18:57:08 | 显示全部楼层
对哟 不是采用uvm的强大的封装好了的RAL类,主要是处理共享参数。请问这样写的代码可以么。
发表于 2012-7-10 23:00:17 | 显示全部楼层
可以试试用uvm_resource_db
 楼主| 发表于 2012-7-10 23:09:16 | 显示全部楼层
我自己跑代码试过,这种方法可以的,跟c++中的指针使用一样。uvm_resource_db的英文介绍看得比较模糊,没用例子全面介绍该类的用法。楼上可以介绍点学习uvm中类的方法么?
发表于 2014-6-3 18:45:29 | 显示全部楼层
UVM提供了一个pool类专门解决这种问题,其实就是维护一个全局数据,提供了一些function,把变量放到这个pool里面去,需要的时候去get里面的变量。
uvm_queue/uvm_pool/uvm_barrier_pool/uvm_event_pool/uvm_object_string_pool
uvm_pool是一个模板类,该模板内维护了一个与特定类型一致的全局数组,该数组内记录了T类型的对象可以通过key类型的变量进行检索。

  1.   static protected this_type m_global_pool;//在get_global_pool ()中实例化,建立了一个全局的对象     protected T pool[KEY];

  2.  static function this_type get_global_pool ();--》m_global_pool = new("pool");

  3. static function T get_global (KEY key);--》return gpool.get(key);

  4. virtual function T get (KEY key);return pool[key];如果无key则pool[key] = default_value;

  5. virtual function void add (KEY key, T item);//pool[key] = item;

  6. virtual function int num ();//return pool.num();

  7. virtual function void delete (KEY key);//pool.delete(key);

  8. virtual function int exists (KEY key);// return pool.exists(key);

  9. virtual function int first (ref KEY key);

     virtual function int last (ref KEY key);

     virtual function int next (ref KEY key);

     virtual function int prev (ref KEY key);

  10.virtual function uvm_object create (string name="");//产生一个T类型的object并返回

  11.virtual function string get_type_name ();略

  12. virtual function void do_copy (uvm_object rhs);//产生一个本pool的copy

  13.virtual function void do_print (uvm_printer printer);//打印pool中的内容

  14.uvm_object_string_pool等其他pool与上诉过程类似

  15. uvm_queue与uvm_pool完全类似
发表于 2014-6-3 18:46:21 | 显示全部楼层
回复 1# pursues


    UVM提供了一个pool类专门解决这种问题,其实就是维护一个全局数据,提供了一些function,把变量放到这个pool里面去,需要的时候去get里面的变量。
uvm_queue/uvm_pool/uvm_barrier_pool/uvm_event_pool/uvm_object_string_pool
uvm_pool是一个模板类,该模板内维护了一个与特定类型一致的全局数组,该数组内记录了T类型的对象可以通过key类型的变量进行检索。

  1.   static protected this_type m_global_pool;//在get_global_pool ()中实例化,建立了一个全局的对象     protected T pool[KEY];

   2.  static function this_type get_global_pool ();--》m_global_pool = new("pool");

   3. static function T get_global (KEY key);--》return gpool.get(key);

   4. virtual function T get (KEY key);return pool[key];如果无key则pool[key] = default_value;

   5. virtual function void add (KEY key, T item);//pool[key] = item;

   6. virtual function int num ();//return pool.num();

   7. virtual function void delete (KEY key);//pool.delete(key);

   8. virtual function int exists (KEY key);// return pool.exists(key);

   9. virtual function int first (ref KEY key);

      virtual function int last (ref KEY key);

      virtual function int next (ref KEY key);

      virtual function int prev (ref KEY key);

   10.virtual function uvm_object create (string name="");//产生一个T类型的object并返回

  11.virtual function string get_type_name ();略

  12. virtual function void do_copy (uvm_object rhs);//产生一个本pool的copy

   13.virtual function void do_print (uvm_printer printer);//打印pool中的内容

  14.uvm_object_string_pool等其他pool与上诉过程类似

  15. uvm_queue与uvm_pool完全类似
发表于 2014-6-3 19:01:29 | 显示全部楼层
uvm中可以在顶层define一个m_config object在通过uvm_config机制将该m_config给传递给需要的component,而这个m_config object里面就可以存放你想要的数据了,当然也可以把这个config更细化
发表于 2017-10-10 19:46:16 | 显示全部楼层
:)
发表于 2017-10-11 17:40:51 | 显示全部楼层
最后赋值的那个class里面是不是需要cast转换????
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-25 12:37 , Processed in 0.034988 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表