【问题标题】: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'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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-06
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        相关资源
        最近更新 更多