System verilog constraint

I get all the ranges to be 0 in the following constraint code.


int start_addr = 'h0;
  int end_addr	 = 'hFF;
  
  rand int range[];
  
  rand int num_partition;
  
  rand int partition_size[];
  
  constraint c1{
    num_partition inside {[1:10]};
    range.size() == num_partition;
    partition_size.size() == num_partition; 
    foreach(partition_size[i]){
      partition_size[i] inside {[1:200]};
      partition_size[i+1] > partition_size[i];
    }
  }
  
  constraint c2{
        unique{partition_size};
      }
  constraint c3{
    foreach (range[i]){
      if(i==0) 
        range[i] == start_addr;
      else {
        range[i] == range[i-1] + partition_size[i-1];
      }
    }
  }
  


Output:


num_partition           6 

range =          0 partition_size          21
range =          0 partition_size          72
range =          0 partition_size          78
range =          0 partition_size          80
range =          0 partition_size          81
range =          0 partition_size          84


Its because of the constraint which you mentioned above it is causing randomize to fail and you see all range value to be zero. Try this below one


constraint c1{
    num_partition inside {[1:10]};
    range.size() == num_partition;
    partition_size.size() == num_partition; 
    foreach(partition_size[i]){ 
      partition_size[i] inside {[1:200]};
      if (i < num_partition-1)      
  partition_size[i+1] > partition_size[i];
    }
  }

  int start_addr = 'h0;
  int end_addr	 = 'hFF;
 
  rand int range[];
 
  rand int num_partition;
 
  rand int partition_size[];
 
  constraint c1{ num_partition inside {[1:10]};
                 range.size() == num_partition;
                partition_size.size() == num_partition; }
    
   constraint c2{ foreach(partition_size[i])
   				 {partition_size[i] inside {[1:200]};}
                 }
      
   constraint C3{ foreach(partition_size[i])
        		if(i<partition_size.size-1)
      		    {partition_size[i+1] > partition_size[i];}
                 }
 
   constraint c4{unique{partition_size};}
   
   constraint c5{foreach (range[i])
                    {
                    if(i==0) 
        		range[i] == start_addr;
      		    else 
                       {range[i] == range[i-1] + partition_size[i-1];}
    		    }
  		}


Regards,
Shanthi

Thank you! found the bug