Verilog 如何将100个变量中的1个随机化

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();

假设我们有一个类,它包含一组随机变量(大约100个
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
的参数中。