【sv】constraint

本文详细记录了在SystemVerilog中如何应用概率约束、软约束处理符号数、绝对值计算及排列组合问题,包括概率分布、soft constraints实例和位宽管理技巧。了解如何利用$urandom/$random生成随机数,以及如何避免循环依赖和处理大数运算问题。

constraint的一些问题记录. 过程记录, 持续更新......

  • 概率的约束
需要约束在某些值的概率大一些,其他值的概率小一些,可以使用以下方法
constraint xxx::yyy_cons{
  (aaa inside {bbb_q}) dist {1:/1, 0:/2}; //约束aaa在某些值,比如bbb_q中的值时,概率大一些
  
  {(aaa == bbb),(ccc == ddd)} dist {[2'b00:2'b10]:/1, 2'b11:/1}; //约束aaa==bbb,ccc==ddd两个条件都满足时的概率大一些

  (aaa < 0) dist {1:/2, 0:/1};  //aaa为有符号数,约束aaa为负数的概率大一些

  (aaa) inside {['1-2:'1]}; 
  //注意,如果$bits(aaa)>=32时,没有问题,否则解约束失败,因为此等效于 (aaa) inside {[32'hFFFFFFFF-32'h2:'1]} , 正确写法为 (aaa) inside {['1-2'h2:'1]}; sv表达式原则中有讲此部分内容
}
  • soft constraints
class c1;
bit[63:0] a;
bit[63:0] b;
constraint cons1{
  soft a == 0;
  foreach(b[i]) soft b[i] == 0;
}
endclass

module test;
  initial begin
    c1 c = new();
    c.randomize() with {a[0] == 1; b[0] == 1;};
  end
endmodule

此例中,随机完后,a = 随机值(a[0]=1); b = 1;

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值