Thursday, November 20, 2025

Generate Non overlapping addresses

 Start address 

 End address 

Cannot be over lapping.

class a;

      rand   bit [31:0]  start_address[] ;

      rand   bit [31:0]  end_address[] ;

      rand   int size ; 

      //100 -1000

      //1000-5000

  constraint c1 {

        foreach(start_address[i]) start_address[i] != end_address[i] ;

    }                      


  constraint c2 {

    foreach(start_address[i]) 

      foreach(start_address[j])

        if(i!=j) 

          !(start_address[j] inside {[start_address[i]:end_address[i]]}); }                      

  constraint c3 {

    foreach(end_address[i]) 

      foreach(end_address[j])

        if(i!=j) 

             !(end_address[j] inside {[start_address[i]:end_address[i]]}) ;}                 

  endclass


module top ;

  a a1;

  initial begin 

    a1 = new();

    a1.start_address= new[20];

    a1.end_address = new[20];

    repeat (20) begin

      a1.randomize();

      //foreach(a1.start_address[i])

      $display("start addr = %p ", a1.start_address );

        $display("end addr = %p",  a1.end_address );

    end 

  end

  

endmodule


    

No comments:

Post a Comment