微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > uvm中如何使用共享类

uvm中如何使用共享类

时间:10-02 整理:3721RD 点击:
各位大侠,本人遇到一个问题:
本人在用uvm搭建平台的时候有这样一个需求,即需要设置一个共享类,里面存放全局变量,和参数,类似dut中的ram和reg,然后其他组件类需要的
时候可以访问这个类。也就是说这个类一般只创建一个对象,然后多个不同的类需要访问(读写)这个类的成员。
如下是伪代码,能行否:
class share
{
int a;
int b;
}
class driver
{
.....
//只申明一个share的句柄,不创建对象,由上层组件配置具体的句柄
sharep;
....
}
classmonitor
{
.....
sharep;
....
}


class env
{
share sh;

build_phase()
{
sh=...creat()....;

}

connect_phase()
{
driver.p=sh;
monitor.p=sh;
}

}

怎么感觉不像RAM和REG,倒是像verilog的parameter之类的?

对哟 不是采用uvm的强大的封装好了的RAL类,主要是处理共享参数。请问这样写的代码可以么。

可以试试用uvm_resource_db

我自己跑代码试过,这种方法可以的,跟c++中的指针使用一样。uvm_resource_db的英文介绍看得比较模糊,没用例子全面介绍该类的用法。楼上可以介绍点学习uvm中类的方法么?

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完全类似

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完全类似

uvm中可以在顶层define一个m_config object在通过uvm_config机制将该m_config给传递给需要的component,而这个m_config object里面就可以存放你想要的数据了,当然也可以把这个config更细化

:)

最后赋值的那个class里面是不是需要cast转换?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top