【问题标题】:soft constraints not working properly for a bit variable软约束不适用于位变量
【发布时间】:2019-07-22 08:57:59
【问题描述】:

我有一个变量数据,我希望最后一位为 1,其余位为 0,我使用软约束编写了这个。

class ABC;
  rand bit [3:0] data;

  // This constraint is defined as "soft" 
  constraint c_data {
                       soft data == 0;
                            data[0] == 1;
                    }
endclass

module tb;
  ABC abc;

  initial begin
    abc = new;
    abc.randomize();
    $display ("data = %0b", abc.data);
  end
endmodule

我希望输出是 'b0001,但实际输出是 data = 1101”

【问题讨论】:

    标签: constraints system-verilog


    【解决方案1】:

    您的问题是由您定义软约束soft data == 0 的方式引起的。

    只有在不与其他(硬)约束相矛盾的情况下,才会满足软约束。您的软约束表明data[3:0]所有 位必须是0。但是,在您的硬约束中,您说data[0] 必须是1。因此,软约束不能满足并被忽略。

    您可以通过将data == 0 定义为硬约束来验证这一点:然后随机化将失败。

    要获得您期望的行为,请尝试如下定义类:

    class ABC;
        rand bit [3:0] data;
    
        // This constraint is defined as "soft" 
        constraint c_data {
                            soft data[3:1] == 0;
                            data[0]        == 1;
                           }
    endclass
    

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 2021-05-11
      • 1970-01-01
      • 2017-01-22
      • 2017-12-09
      • 1970-01-01
      相关资源
      最近更新 更多