【发布时间】:2022-01-22 18:32:50
【问题描述】:
我需要在一个范围内生成一个10的随机值倍数。
我使用了$urandom_range(maxVal,minVal),它会在一个范围内生成一个随机值,但我需要该值是 10 的倍数。
我该怎么做?
【问题讨论】:
我需要在一个范围内生成一个10的随机值倍数。
我使用了$urandom_range(maxVal,minVal),它会在一个范围内生成一个随机值,但我需要该值是 10 的倍数。
我该怎么做?
【问题讨论】:
伪代码:
$urandom_range(maxVal / 10,minVal / 10) * 10
【讨论】:
使用约束。例如,要生成 31 到 162 之间的数字,它们是 10 的倍数:
module tb;
int unsigned foo;
initial begin
repeat (8) begin
std::randomize(foo) with {
foo inside {[31:162]}; // min:max
(foo % 10) == 0; // multiples of 10
};
$display(foo);
end
end
endmodule
示例打印输出:
110
70
160
90
160
70
60
130
请参阅 IEEE Std 1800-2017,第 18 节。约束随机值生成。
$urandom_range 非常适合简单的条件,但随着您添加更多条件,它可能会变得很麻烦。约束可以很好地扩展,因为您可以不断为每个条件添加新的约束。
【讨论】: