class pllreg_env; static int pktnum; //Interface: virtual pllreg_if pif; virtual spi_if wif; virtual sram_if#(25,32) xif; //Component: spi_driver w_driver; pllreg_driver p_driver; spi_monitor w_monitor; pll_refmodel p_model; pllreg_monitor p_monitor; pllreg_scoreboard p_scb; function new(); endfunction; extern function build(); extern task run(); endclass function pllreg_env::build(); w_driver = new(); if(!w_driver.randomize() with { error_time < 0; }) $fatal(0,"Randomize Failed"); w_driver.pktnum = pktnum; w_driver.vif = wif; w_driver.autarchy = 1'b1; w_driver.half_sclk = 4; w_monitor = new(); w_monitor.wif = wif; w_monitor.xif = xif; p_driver = new(); p_driver.pif = pif; p_driver.wif = wif; p_monitor = new(); p_monitor.pif = pif; p_monitor.xif = xif; p_model = new(); p_model.pif = pif; p_model.wif = wif; p_model.xif = xif; p_scb = new(); endfunction task pllreg_env::run(); int error=0; fork w_driver.do_drive(); p_driver.do_drive(); w_monitor.do_mon(); p_monitor.do_mon(); p_model.do_imitate(); while(1) begin repeat(2) @(posedge wif.csn); @(posedge wif.clk); p_model.dout.pop_back(); if(p_scb.compare( p_model.dout , w_monitor.act_trans.data , p_model.pllout , p_monitor.act_trans )) error++; p_model.dout.delete(); p_model.pllout.delete(); p_monitor.act_trans.delete(); end join $display("SCOREBOARD:"); $display("\tError_pll:\t%0d",error); endtask