SPI_Test/tb/testbench/awgreg_tb/awgreg_env.sv

95 lines
1.7 KiB
Systemverilog
Raw Permalink Normal View History

2024-06-25 16:41:01 +08:00
class awgreg_env;
int pktnum;
virtual spi_if wif;
virtual awgreg_if aif;
virtual sram_if xif;
spi_driver w_driver;
awgreg_driver a_driver;
spi_monitor w_monitor;
awgreg_monitor a_monitor;
awgreg_scoreboard a_scb;
function new();
endfunction;
extern function build();
extern task run();
endclass: awgreg_env
function awgreg_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'b0;
//my_driver.half_sclk = 16;
a_driver = new();
a_driver.pktnum = pktnum;
a_driver.aif = aif;
a_driver.wif = wif;
w_monitor = new();
w_monitor.pktnum = pktnum;
w_monitor.wif = wif;
w_monitor.xif = xif;
a_monitor = new();
a_monitor.pktnum = pktnum;
a_monitor.aif = aif;
a_monitor.wif = wif;
a_monitor.xif = xif;
a_scb = new();
a_scb.pktnum = pktnum;
a_scb.aif = aif;
a_scb.wif = wif;
endfunction: build
task awgreg_env::run();
int pkt_i=0;
fork
w_driver.do_drive();
a_driver.do_drive();
w_monitor.do_mon();
a_monitor.do_mon();
a_scb.do_check();
//Port: Monitor2Scoreboard
while(1) begin: scb
if(pkt_i==pktnum) break;
@(posedge wif.csn);
repeat(9) @(negedge wif.clk);
a_scb.din = w_monitor.din;
a_scb.dout = w_monitor.dout;
a_scb.awg_tr = a_monitor.awg_tr;
end
repeat(pktnum) begin: kill_progress
@(negedge wif.csn);
pkt_i++;
end
join
$display("SCOREBOARD:");
$display("\tError:\t\t%0d",a_scb.error);
$display("\tError_FB:\t%0d",a_scb.error_fb);
endtask: run