求助: UVM virtual sequence里面可以创建uvm_object吗?
时间:10-02
整理:3721RD
点击:
uvm_object class如下:
class my_data extends uvm_object;
rand bit [7:0] data[];
rand bit [31:0] data_length;
`uvm_object_utils(my_data)
endclass
virtual sequence 如下:
class my_sequence extends uvm_sequence;
...
task my_sequence::collect_data();
my_data data_item;
data_item = my_data::type_id::create("data_item")
...
endtask
endclass
ncverilog编译的时候报错,my_data data_item需要有一个'=' or '<='
我这个例子有点特殊,只需要传递my_data到scoreboard, 所以不需要定义为transaction
不知道大家有没有遇到类似的状况?
class my_data extends uvm_object;
rand bit [7:0] data[];
rand bit [31:0] data_length;
`uvm_object_utils(my_data)
endclass
virtual sequence 如下:
class my_sequence extends uvm_sequence;
...
task my_sequence::collect_data();
my_data data_item;
data_item = my_data::type_id::create("data_item")
...
endtask
endclass
ncverilog编译的时候报错,my_data data_item需要有一个'=' or '<='
我这个例子有点特殊,只需要传递my_data到scoreboard, 所以不需要定义为transaction
不知道大家有没有遇到类似的状况?
这个collect_data的task应该是extern的吧,怎么放到endclass里面了?
打错了,应该是:
class my_sequence extends uvm_sequence;
...endclass
task my_sequence::collect_data();
my_data data_item;
data_item = my_data::type_id::create("data_item")
...
endtask
我试了一下,如果将my_data data_item 定义为my_sequence的一个成员,
在new() function里创建就是ok的。
但是如果在task里创建就会有问题。
因为我只需要在这个task动态创建,然后通过analysis_port write到scoreboard。
不知道这样是否是合法的?
你的my_data class里加个new函数吧