Constraint for memories

A memory is of size 8192 bytes and it is byte addressable. I need to generate 3 different start and end addresses within this memory space. Each of these 3 sub areas can be a min of 1 byte and a max of 8192 bytes. These need to be non overlapping.

I have tried creating a size variable and start addr variable with solve before constraint for size before address. This is not working for me.

Any help in creating a constraint for this is appreciated.

In reply to kernalmode1:

class address;
   int N = 3;
   int memLimit = 8192;
   rand bit [15:0] addrs[];
   rand bit [15:0] sizes[]
   function new;
      addrs = new[N];
      sizes = new[N]
   endfunction
 
   constraint c{
		foreach(addrs[Range]) {if (Range != N-1)
		   addrs[Range] + sizes[Range] < addrs[Range+1];
		else
		   addrs[Range] + sizes[Range] < memLimit;
               sizes[Range] inside {[1:memLimit-1]};
		}
 
endclass

In reply to dave_59:

Thanks Dave.

class address;
   int N = 3;
   int memLimit = 8192;
   rand bit [15:0] addrs[];
   rand bit [15:0] sizes[];
   function new();
     addrs = new[N];
     sizes = new[N];
   endfunction
 
   constraint c {
		foreach(addrs[Range]) {
                  if (Range != N-1)
		    addrs[Range] + sizes[Range] < addrs[Range+1];
		  else
		    addrs[Range] + sizes[Range] < memLimit;
                  sizes[Range] inside {[1:memLimit-1]};
		}
   }
endclass

module top;
  initial begin
  address fc;
  fc = new();
    repeat(10) begin
      fc.randomize();
      $display("%p %p", fc.addrs, fc.sizes);
    end
  end
endmodule

In reply to dave_59:

In reply to kernalmode1:

class address;
int N = 3;
int memLimit = 8192;
rand bit [15:0] addrs[];
rand bit [15:0] sizes[]
function new;
addrs = new[N];
sizes = new[N]
endfunction
constraint c{
foreach(addrs[Range]) {if (Range != N-1)
addrs[Range] + sizes[Range] < addrs[Range+1];
else
addrs[Range] + sizes[Range] < memLimit;
sizes[Range] inside {[1:memLimit-1]};
}
endclass

Hi Dave,
What is “Range” variable here?

In reply to seenu:

It is the foreach loop iterator variable.