System Verilog 约束技巧

本文详细介绍了SystemVerilog中的随机约束及其应用,包括简单表达式约束、权重分布、集合与inside约束、randc变量的周期随机性、条件约束以及双向约束。此外,还探讨了使用`solvebefore`引导概率分布、`randomize()`函数的用法以及`pre_randomize`和`post_randomize`回调函数。文章还涉及了随机数函数和`rand_mode`的使用,并展示了如何处理数组约束,确保元素的唯一性和数组元素和的约束。最后,提到了`randcase`在构建决策树中的作用。

System Verilog的约束与随机

约束

  • 简单表达式:一个表达式中最多只能使用一个关系操作符,约束块里只能包含表达式,所以在约束块里不能进行赋值。

  • 权重分布:dist

    src dist {0:40,[1:3]:=60}; //权重和不用等于100,值和权重可以是常数或者变量
    
  • 集合(set)和inside

    c inside {[lo:hi]} ; 
    c inside {[$:4],[20:$]} //可以使用$取位宽范围内的最大或者最小值
    int fib[5] = '{1,2,3,4,5};
    c inside fib; //可以使用数组进行约束
    
  • randc:

    //randc变量表示周期随机性,即所有可能的值都被取过之后才可能重复
    class RandcInside;  //集合里的值只被取一次
    	int              array[] ;
    	randc bit [15:0] index   ;
    	function new(input int a[]);
    		array = a ;
    	endfunction
        function int pick;
    		return array[index] ;
    	endfunction 
        constraint c_size {index < array.size;}
    endclass
    
    initial begin
        RandcInside ri ;
     	ri = new('{1,3,5,6,2,8}) ;
        repeat(ri.array.size) begin 
        	as
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值