104 lines
1.7 KiB
Systemverilog
104 lines
1.7 KiB
Systemverilog
|
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
|
||
|
|