82 lines
1.3 KiB
Systemverilog
82 lines
1.3 KiB
Systemverilog
class mcureg_driver;
|
|
|
|
|
|
mcureg_trans tr;
|
|
|
|
//interface
|
|
virtual mcureg_if mif;
|
|
virtual spi_if wif;
|
|
|
|
int pktnum;
|
|
|
|
|
|
function new();
|
|
endfunction
|
|
extern task do_drive();
|
|
extern task make_pkt();
|
|
|
|
endclass : mcureg_driver
|
|
|
|
task mcureg_driver::do_drive();
|
|
int pkt_i = 0;
|
|
|
|
mif.fb_st_info = 2'b0 ;
|
|
mif.run_time = 32'b0 ;
|
|
mif.instr_num = 32'b0 ;
|
|
mif.mcu_param[3:0] = {32'b0,32'b0,32'b0,32'b0} ;
|
|
|
|
fork
|
|
while(1) begin
|
|
if(pkt_i == pktnum) break;
|
|
make_pkt();
|
|
end
|
|
|
|
repeat(pktnum) begin: kill_progress
|
|
@(negedge wif.csn);
|
|
pkt_i++;
|
|
end
|
|
join
|
|
|
|
|
|
endtask
|
|
|
|
task mcureg_driver::make_pkt();
|
|
int cnt=0;
|
|
|
|
cnt = 0;
|
|
|
|
|
|
tr = new();
|
|
if(!tr.randomize())
|
|
$fatal(0,"Randomize Failed");
|
|
|
|
while(cnt<2000) begin
|
|
@(posedge wif.clk);
|
|
|
|
cnt = cnt + 1;
|
|
|
|
case(cnt)
|
|
tr.wrmask_time:
|
|
mif.wrmask <= tr.wrmask;
|
|
tr.fb_st_info_time:
|
|
mif.fb_st_info <= tr.fb_st_info;
|
|
tr.run_time_time:
|
|
mif.run_time <= tr.run_time;
|
|
tr.instr_num_time:
|
|
mif.instr_num <= tr.instr_num;
|
|
tr.mcu_param_time[0]:
|
|
mif.mcu_param[0] <= tr.mcu_param[0];
|
|
tr.mcu_param_time[1]:
|
|
mif.mcu_param[1] <= tr.mcu_param[1];
|
|
tr.mcu_param_time[2]:
|
|
mif.mcu_param[2] <= tr.mcu_param[2];
|
|
tr.mcu_param_time[3]:
|
|
mif.mcu_param[3] <= tr.mcu_param[3];//*/
|
|
endcase
|
|
|
|
end
|
|
|
|
|
|
endtask : make_pkt
|
|
|