UVM仿真时,monitor模块报错
时间:10-02
整理:3721RD
点击:
出错代码如下,为monitor中的一个task
task my_monitor::receive_one_pkt(ref my_transaction get_pkt);
logic valid=0;
logic [7:0]data;
byte unsigned data_q[$];
byte unsigned data_array[];
int data_size;
while(!valid)
receive_one_byte(valid,data);
while(valid)
begin
data_q.push_back(data);
receive_one_byte(valid,data);
end
data_size=data_q.size();
data_array=new[data_size];
for(int i=0;i<data_size;i++)
data_array=data_q;
get_pkt.payload=new[data_size-18];
data_size=get_pkt.unpack_bytes(data_array)/8;
endtask
编译通过,仿真错误报告如下:Error-[DT-NV] Negative value
/home/klin/jiangwei/uvm-1.1b/examples/integrated/my_book_test_layer/tb/agent/monitor.sv, 61
Negative size value -18 specified for dynamic array
Please make sure that the specified value is a non negative number.
对照正确的程序发现如果把程序中第一个while(!valid)改成while(valid!==1)则仿真可以通过
不明白为什么会报错以及为什么这么改就不会出错,求高人解答
task my_monitor::receive_one_pkt(ref my_transaction get_pkt);
logic valid=0;
logic [7:0]data;
byte unsigned data_q[$];
byte unsigned data_array[];
int data_size;
while(!valid)
receive_one_byte(valid,data);
while(valid)
begin
data_q.push_back(data);
receive_one_byte(valid,data);
end
data_size=data_q.size();
data_array=new[data_size];
for(int i=0;i<data_size;i++)
data_array=data_q;
get_pkt.payload=new[data_size-18];
data_size=get_pkt.unpack_bytes(data_array)/8;
endtask
编译通过,仿真错误报告如下:Error-[DT-NV] Negative value
/home/klin/jiangwei/uvm-1.1b/examples/integrated/my_book_test_layer/tb/agent/monitor.sv, 61
Negative size value -18 specified for dynamic array
Please make sure that the specified value is a non negative number.
对照正确的程序发现如果把程序中第一个while(!valid)改成while(valid!==1)则仿真可以通过
不明白为什么会报错以及为什么这么改就不会出错,求高人解答
顶顶顶
是不是你的线上有x 态啊
!valid 和 valid !== 1的差别就在与 如果valid 是 x态,那么 !valid 的判断是成立的。 但是 valid !== 1就是不成立的。
你chk下
1、仿真出错其实已经报出来了,是因为你的动态数组的size为负,其实就是根本没有执行收包操作,
2、也就是你的valid估计为x/z态导致,那么改才好的
有点疑问,data_size 由data queue的size ()来drive,一个未操作过的data queue默认size()不是0吗?怎么会是负数呢?
get_pkt.payload=new[data_size-18];
显然你这里data_size是0啊,报错了,你要看一下它说什么
while(!valid)和while(valid!==1)是不一样的,因为valid可能是z或者x
我也觉得应该是这样!