Verilog 如何将100个变量中的1个随机化
假设我们有一个类,它包含一组随机变量(大约100个Verilog 如何将100个变量中的1个随机化,verilog,system-verilog,Verilog,System Verilog,假设我们有一个类,它包含一组随机变量(大约100个randvariables)。现在,我只想随机化这个类中的一个变量,其余的变量应该是相同的。我该怎么做 class rand_var extends vmm_data; rand bit abc; rand bit [3:0] cde; rand bit en; ... endclass 现在,从一项任务开始,我只想随机化abc,而不是rand\u var的任何其他变量 task custom_task();
rand
variables)。现在,我只想随机化这个类中的一个变量,其余的变量应该是相同的。我该怎么做
class rand_var extends vmm_data;
rand bit abc;
rand bit [3:0] cde;
rand bit en;
...
endclass
现在,从一项任务开始,我只想随机化abc
,而不是rand\u var
的任何其他变量
task custom_task();
rand_var rand1;
rand1 = new config
if (config.randomize () with {
})
else $display("randomization failed");
一种方法是调用
randomize
,只传递希望随机的变量。参考IEEE标准1800-2017第18.11节在线随机变量控制。下面是一个完整的示例:
class rand_var;
rand bit abc;
rand bit [3:0] cde;
rand bit en;
endclass
module tb;
task custom_task();
rand_var rand1;
rand1 = new();
if (!rand1.randomize(abc)) $display("randomization failed");
$display("%b %d %b", rand1.abc, rand1.cde, rand1.en);
endtask
initial repeat (10) custom_task();
endmodule
输出:
1 0 0
1 0 0
1 0 0
0 0 0
1 0 0
1 0 0
0 0 0
1 0 0
1 0 0
0 0 0
对于每个任务调用,只有abc
是随机的
另请参见一种方法是调用随机化并只传递您想要随机的变量。参考IEEE标准1800-2017第18.11节在线随机变量控制。下面是一个完整的示例:
class rand_var;
rand bit abc;
rand bit [3:0] cde;
rand bit en;
endclass
module tb;
task custom_task();
rand_var rand1;
rand1 = new();
if (!rand1.randomize(abc)) $display("randomization failed");
$display("%b %d %b", rand1.abc, rand1.cde, rand1.en);
endtask
initial repeat (10) custom_task();
endmodule
输出:
1 0 0
1 0 0
1 0 0
0 0 0
1 0 0
1 0 0
0 0 0
1 0 0
1 0 0
0 0 0
对于每个任务调用,只有abc
是随机的
另请参见将单个变量随机化的最简单方法是使用
std::randomize
而不是该类的randomize
方法
task custom_task();
rand_var config;
config = new();
if (std::randomize(config.abc) with {
/* constraints on config.abc */
})
else $display("randomization failed");
在调用类randomize
方法时,您也可以使用所谓的内嵌随机化控件,如中所示
if (!config.randomize(abc)) $display("randomization failed");
但这样做时必须小心,因为
config
对象中的所有活动类约束都必须满足,即使变量没有随机化。随机化单个变量的最简单方法是使用std::randomize
而不是类中的randomize
方法
task custom_task();
rand_var config;
config = new();
if (std::randomize(config.abc) with {
/* constraints on config.abc */
})
else $display("randomization failed");
在调用类randomize
方法时,您也可以使用所谓的内嵌随机化控件,如中所示
if (!config.randomize(abc)) $display("randomization failed");
但是这样做时必须小心,因为
config
对象中的所有活动类约束必须仍然满足,即使变量没有随机化。谢谢,Dave。如果我想从许多变量中随机抽取两个变量,如果有办法的话,该怎么办?您可以将所有变量作为一个列表添加到randomize
。谢谢,Dave。如果我想从许多变量中随机抽取两个变量,如果有办法的话,该怎么办?您可以将所有变量作为列表添加到randomize
的参数中。