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;
</

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

被折叠的 条评论
为什么被折叠?



