payload.push_back($urandom);
- logic[7:0] payload[$];
- payload.delete();
- repeat($urandom_range(2,4))
- payload.push_back($urandom);
- foreach(payload[index]) begin
- for(int i=0;i<8;i++) begin
- rtr_io.cb.din[3] <= payload[index][i];
- @(rtr_io.cb);
- end
- end
声明一个8bit的队列payload,给它赋2到4字节的随机数,然后将这个队列传递给一个单bit的din[3],最后的波形显示队列中的随机数都是1。这不正常吧。
我把payload.push_back($urandom);改成了payload.push_back($random);结果还是全为1;
请教!
这是sv lab上面的吧。可能是你另外的代码有问题吧
先不要看波形,先看一看,payload里面是什么,用$display打印出来。在for上面写,$display("payload = %0h", payload[index]);看看队列里面是什么数。
我试了你说的方法,提示错误:index未定义,foreach(payload[index])
$dispaly("payload = %0h,payload[index]");
foreach遍历不用定义index吧
写错了
$dispaly("payload = %0h",payload[index]);
我检查payload里面的数了,都正常,但是波形还是不对
hello world
payload is 3c
din[da] = 0
din[da] = 0
din[da] = 1
din[da] = 1
din[da] = 1
din[da] = 1
din[da] = 0
din[da] = 0
hello world
payload is 7d
din[da] = 1
din[da] = 0
din[da] = 1
din[da] = 1
din[da] = 1
din[da] = 1
din[da] = 1
din[da] = 0
hello world
payload is e2
din[da] = 0
din[da] = 1
din[da] = 0
din[da] = 0
din[da] = 0
din[da] = 1
din[da] = 1
din[da] = 1
hello world
payload is b
din[da] = 1
din[da] = 1
din[da] = 0
din[da] = 1
din[da] = 0
din[da] = 0
din[da] = 0
din[da] = 0
@(rtr_io.cb);
把这句话前后的时间点一级赋的值都打出来,最后把波形也一并贴出来
因为其他代码没有贴出来,所以把时序图贴出来看(下面)
波形上的din[3]是rtr_io.cb.din[3]吗?能否给出波形中该信号的层次结构?
是的。另外sa是一个源地址变量,我设成了3。dint[sa]就是rtr_io.cb.dint[3]。
粗心啊,把队列payload里面的数送到DUT的其他端口了,怪不得就算打印payload里面的值也没有问题,
问题已解决,谢谢大家了