ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

软约束 soft constraint

2022-08-21 16:00:24  阅读:321  来源: 互联网

标签:constraint soft 2021.09 约束 version data


首先使用关键字 soft 声明软约束。

硬约束之间如果存在矛盾,那么求解器将失败,仿真也会失败。当没有同时满足所有有效硬约束和定义为软约束的解决方案时,求解器将放弃软约束并找到满足剩余硬约束的解决方案,如果还找不到那就出错。软约束仅表示对一种解决方案的偏好,当软约束与其他硬约束相矛盾时,软约束将被放弃。

看一个约束冲突的例子:

class sft;
  rand bit [3:0] data;
  constraint data_range { data > 'hf; }
  constraint data_range1 { data <= 'ha; } //conflicting constraint
endclass
module soft_constr;
  initial begin
    sft sf;
    sf = new();
    repeat(4) begin
      sf.randomize();
      $display("\data = %0h",sf.data);
    end
  end
endmodule

在上边的例子中,这两个约束是冲突的。一个是要求data为>'hf,而另一个是限制data为<='ha。在这种情况下,将收到以下运行时错误 (Synopsys – VCS):

仿真结果:

Compiler version S-2021.09; Runtime version S-2021.09;  Aug 21 03:22 2022

=======================================================

Solver failed when solving following set of constraints 


rand bit[3:0] data; // rand_mode = ON 

constraint data_range    // (from this) (constraint_mode = ON) (testbench.sv:5)
{
   (data > 4'hf);
}

=======================================================

Error-[CNST-CIF] Constraints inconsistency failure
testbench.sv, 13
  Constraints are inconsistent and cannot be solved.
  Please check the inconsistent constraints being printed above and rewrite 
  them.

data = 0
           V C S   S i m u l a t i o n   R e p o r t

 

添加软约束之后:

class sft;
  rand bit [3:0] data;
  constraint data_range { soft data > 'hf; }
  constraint data_range1 { data <= 'ha; } //conflicting constraint
endclass
module soft_constr;
  initial begin
    sft sf;
    sf = new();
    repeat(4) begin
      sf.randomize();
      $display("\data = %0h",sf.data);
    end
  end
endmodule

仿真结果:

Compiler version S-2021.09; Runtime version S-2021.09;  Aug 21 03:32 2022
data = 6
data = 3
data = 0
data = 1
           V C S   S i m u l a t i o n   R e p o r t 

  

再来看一下相同的示例,类约束和内联(inline)约束(with constraint)之间存在冲突。这是软约束最有用的地方。将通用约束声明为软约束,允许内联约束(with 约束)覆盖类约束:

看一个例子:

class sft;
  rand bit [3:0] data;
//class constraint converted to 'soft' constraint
  constraint data_range { soft data > 'hf; }
endclass
module soft_constr;
  initial begin
    sft sf;
    sf = new( );
    repeat(4) begin
    //inline constraint - hard
      sf.randomize( ) with { data <= 'ha;};
      $display("\data = %0h",sf.data);
    end
  end
endmodule

 

 仿真结果:

Compiler version S-2021.09; Runtime version S-2021.09;  Aug 21 03:47 2022
data = 6
data = 3
data = 0
data = 1
           V C S   S i m u l a t i o n   R e p o r t 

 

最后,我们可以禁用软约束:

constraint data_range { disable soft data; } 

 

标签:constraint,soft,2021.09,约束,version,data
来源: https://www.cnblogs.com/fuqiangblog/p/16610051.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有