class mcureg_driver; mcureg_trans tr; //interface virtual mcureg_if mif; virtual spi_if wif; function new(); endfunction extern task do_drive(); extern task make_pkt(); endclass : mcureg_driver task mcureg_driver::do_drive(); 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 make_pkt(); 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