限制随机 10 位,这样不会有 7 个连续的 0 或 1

Constrain random 10-bit such that there won't be 7 consecutive 0s or 1s

假设有一个 rand 10 位变量名为 data。我想确保不会有 7 个连续的 0 或 1。有人可以建议我如何以这种方式进行约束吗?

constraint c_data
{
    foreach(data[i]) 
    {
        (data[i] && data[i+7]) == 0;  
    }
}

但是当i大于3时,数组将越界。

这是避免像 10'b000000011110'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

您可以添加一个蕴涵来保持索引有界

parameter width = 7;

constraint c_data
{
    foreach(data[i]) 
    {
        (i < data.size() - width) -> !(data[i+:width] inside {'0,'1});
    }
}