如何只随机化一个类中的 1 个变量? [英] How to randomize only 1 variable in a class?
本文介绍了如何只随机化一个类中的 1 个变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下课程
class ABC;
rand bit[2 : 0] mode;
randc bit[2 : 0] mode_cylic;
constraint range{
mode >= 2;
mode < 6;
};
constraint range_cylic{
mode_cylic >= 2;
mode_cylic < 6;
};
endclass
我有一个测试类 ABC
的测试对象,我只想随机化该对象中的 mode
变量.我该怎么做?
I have a test object of the test class ABC
, and I want to randomize only the mode
variable in that object. How can I do that?
推荐答案
一种方法是对不想随机化的变量禁用随机化:
One way is to disable randomization for the variable you don't want to randomize:
class ABC;
rand bit[2 : 0] mode;
randc bit[2 : 0] mode_cylic;
constraint range{
mode >= 2;
mode < 6;
}
constraint range_cylic{
mode_cylic >= 2;
mode_cylic < 6;
}
endclass
module tb;
ABC abc = new();
bit result;
initial begin
abc.range_cylic.constraint_mode(0);
abc.mode_cylic.rand_mode(0);
repeat (10) begin
result = abc.randomize();
$display("mode=%0d mode_cylic=%0d", abc.mode, abc.mode_cylic);
end
end
endmodule
请参阅 IEEE Std 1800-2017,第 18.8 节使用 rand_mode() 禁用随机变量.
Refer to IEEE Std 1800-2017, section 18.8 Disabling random variables with rand_mode().
这是我得到的输出:
mode=2 mode_cylic=0
mode=2 mode_cylic=0
mode=2 mode_cylic=0
mode=4 mode_cylic=0
mode=4 mode_cylic=0
mode=2 mode_cylic=0
mode=4 mode_cylic=0
mode=3 mode_cylic=0
mode=5 mode_cylic=0
mode=4 mode_cylic=0
或者,如果您希望 mode_cylic
在 range_cylic
范围内具有特定值,请使用 with
:
Or, if you want mode_cylic
to have a specific value within the range_cylic
range, use with
:
initial begin
repeat (10) begin
result = abc.randomize() with { mode_cylic == 5; };
$display("mode=%0d mode_cylic=%0d", abc.mode, abc.mode_cylic);
end
end
这是我得到的输出:
mode=2 mode_cylic=5
mode=2 mode_cylic=5
mode=2 mode_cylic=5
mode=4 mode_cylic=5
mode=4 mode_cylic=5
mode=2 mode_cylic=5
mode=4 mode_cylic=5
mode=3 mode_cylic=5
mode=5 mode_cylic=5
mode=4 mode_cylic=5
这篇关于如何只随机化一个类中的 1 个变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文