【发布时间】:2018-03-07 11:19:12
【问题描述】:
我已经看到用于随机化整数值队列的技术,但我在处理对象队列时遇到了困难。示例代码:
class int_queue_class;
rand int x[$];
function void print;
$display($sformatf("Size: %0d", x.size()));
foreach(x[i])
$display($sformatf("x[%0d] = %0d", i, x[i]));
endfunction : print
endclass : int_queue_class
class obj;
rand int value;
endclass : obj
class obj_queue_class;
rand obj x[$];
function void print;
$display($sformatf("Size: %0d", x.size()));
foreach(x[i])
$display($sformatf("x[%0d] = %0d", i, x[i].value));
endfunction : print
endclass : obj_queue_class
program top();
initial
begin
int_queue_class iqc;
obj_queue_class oqc;
iqc = new();
iqc.randomize() with {x.size() == 5; x[2] == 5;};
iqc.print();
oqc = new();
oqc.randomize() with {x.size() == 5; x[2].value == 5;};
oqc.print();
end
endprogram : top
对于对象,似乎不能使用相同的方法。有没有办法使这样的队列随机化,同时保持同时约束队列大小和单个元素字段的能力?我提出的使用前/后随机化方法的想法都至少放弃了这两个选项中的一个。
【问题讨论】:
-
您应该直接在问题中发布代码。自从他们开始要求用户登录后,EDAPlayground 就不再那么有用了。
-
感谢您指出这一点,我已将 EDA PlayGround 链接替换为实际使用的代码。
-
队列的随机化被实现为动态数组。
标签: class random queue system-verilog