在多个systemverilog任务中发出$ urandom_rage具有相同的值

时间:2017-12-22 01:30:59

标签: system-verilog

现在我正在尝试在多个systemvalue任务中获取随机值。 所以我刚刚实现如下

module testa;

task sendtransfer1

foreach (burst3.Data[ii1])
burst1.data[ii1] = $urandom_range (967295,0);

end task

task sendtransfer2

foreach (burst3.Data[ii2])
burst2.data[ii2] = $urandom_range (967295,0);

end task


task sendtransfer3

foreach (burst3.Data[ii3])
burst3.data[ii3] = $urandom_range (967295,0);

end task




initial begin
   for(int i = 0; i<1000; i++) begin
       sendtransfer1
    end
end

initial begin
   for(int ii = 0; ii<1000; ii++) begin
       sendtransfer2
    end
end

initial begin
   for(int iii = 0; iii<1000; iii++) begin
       sendtransfer3
    end
end

endmodule

得到结果后,我发现三个burst1,data [ii1],burst2.data [ii1]和burst3.data [ii1]输出值相同。

我想实现randome值对每个任务的每个任务都有自己的随机值。

我应该怎么做才能在每项任务中获得每个随机值?

更新

module testa;

int ii1;
int ii2;
int ii3;

task sendtransfer1
burst1 = new;
burst1.pInst = activeMaster1;


foreach (burst3.Data[ii1])
burst1.data[ii1] = $urandom_range (967295,0);

end task

task sendtransfer2
burst2 = new;
burst2.pInst = activeMaster2;

foreach (burst3.Data[ii2])
burst2.data[ii2] = $urandom_range (967295,0);

end task


task sendtransfer3
burst3 = new;
burst3.pInst = activeMaster3;

foreach (burst3.Data[ii3])
burst3.data[ii3] = $urandom_range (967295,0);

end task




initial begin
   for( ii1 = 0; ii1<1000; ii1++) begin
       sendtransfer1
    end
end

initial begin
   for( ii2 = 0; ii2<1000; ii2++) begin
       sendtransfer2
    end
end

initial begin
   for( ii3 = 0; ii3<1000; ii3++) begin
       sendtransfer3
    end
end

endmodule

我改变了你的建议。但三个任务的随机输出值保持不变。

和“你最好的选择是将值作为参数传递给每个任务。”也是相同的价值观。

enter image description here

1 个答案:

答案 0 :(得分:0)

将代码放入MCVE会有所帮助。问题很可能是你的三个for循环中声明了局部变量(i,ii,iii),但在你的任务中引用了ii1,ii2,ii3。您最好的选择是将值作为参数传递给每个任务。