External constraint in randomization

In reply to Rajaraman R:

As Dave pointed out, it should be in the same scope as class declaration.



// Code your testbench here
// or browse Examples
class Packet;
  rand bit [7:0] length;
  rand bit [7:0] payload[];
  constraint c_valid {length > 0;
  payload.size() == length;}
  extern constraint c_external;
  extern function void display(); 
endclass
 
function void Packet:: display();
   $display("length=%d payload=%d",length,payload.size() );
endfunction
 
    constraint Packet::c_external {length == 1;}
 
// test.sv
program test;
  Packet p;
  initial begin
    p=new();
    
    p.display();
    
    assert(p.randomize());
    
    p.display();
  end
endprogram