【问题标题】:Constrain random 10-bit such that there won't be 7 consecutive 0s or 1s约束随机 10 位,使得不会有 7 个连续的 0 或 1
【发布时间】:2021-02-08 13:44:16
【问题描述】:
假设有一个名为 data 的 rand 10 位变量。我想确保不会有 7 个连续的 0 或 1。有人可以建议我如何以这种方式进行约束吗?
constraint c_data
{
foreach(data[i])
{
(data[i] && data[i+7]) == 0;
}
}
但是当i大于3时,数组就会越界。
【问题讨论】:
标签:
constraints
verilog
system-verilog
【解决方案1】:
您可以添加暗示以保持索引有界
parameter width = 7;
constraint c_data
{
foreach(data[i])
{
(i < data.size() - width) -> !(data[i+:width] inside {'0,'1});
}
}
【解决方案2】:
这是避免10'b0000000111 或10'b1111111000 等值的一种方法:
class foo;
rand bit [9:0] data;
constraint c_data {
!(data[9:3] inside {'0, '1});
!(data[8:2] inside {'0, '1});
!(data[7:1] inside {'0, '1});
!(data[6:0] inside {'0, '1});
}
endclass
module tb;
foo foo;
initial begin
foo = new();
repeat (10_000) begin
if (!foo.randomize()) $error;
$displayb(foo.data);
end
end
endmodule