class Enviornment;
int group_num;
virtual router_io router;
Semphore sem[ ];
Driver drv[];
Receiver rcv[];
Generator gen[];
Scoreboard scb;
extern function new(virtual router_io router, int group_num);
extern virtual task reset();
extern virtual fuction void build();
extern virtual task run();
extern virtual task wrap_up():
endclass
function Enviorment::new(virtual router_io router, int group_num);
this.router = router;
this.group_num = group_num;
endfunction
task Enviorment::rest();
...
endtask
function void Enviorment::build();
sem = new[group_num];
drv = new[group_num];
rcv = new[group_num];
gen = new[group_num];
scb = new();
foreach( sem[i])
sem[i] = new(1);
foreach( gen[i])
gen[i] = new();
foreach(drv[i])
drv[i] = new($sformatf("drv[%0d]", i), i , sem, gen[i].out_box[i], scb.driver_mbox, router);
foreach(rcv[i])
rcv[i] = new($sformatf("rcv[%0d]", i), i , scb.receiver_mbox, router);
endfunction
task Environment::run();
foreach(gen[i])
gen[i].start();
scb.start();
foreach(drv[i])
drv[i].start();
foreach(rcv[i])
rcv[i].start();
endtask
task Environment::wrap_up();
wait(scb.DONE.triggerd);
endtask