class sysreg_driver; sysreg_trans tr; //interface virtual sysreg_if vif; virtual spi_if wif; int pktnum; function new(); endfunction extern task do_drive(); extern task make_intr(); endclass : sysreg_driver task sysreg_driver::do_drive(); int pkt_i = 0; fork while(1) begin if(pkt_i == pktnum) break; make_intr(); end repeat(pktnum) begin: kill_progress @(negedge wif.csn); pkt_i++; end join endtask task sysreg_driver::make_intr(); int cnt=0; vif.pll_lock =1'b0; vif.pll_lost_lock =1'b0; vif.ch0_dbg_upd =1'b0; vif.ch0_dbg_fifo_e =1'b0; vif.ch0_dbg_fifo_f =1'b0; vif.ch0_ldst_addr_unalgn =1'b0; vif.ch0_dec_err =1'b0; vif.ch0_exit_irq =1'b0; vif.ch1_dbg_upd =1'b0; vif.ch1_dbg_fifo_e =1'b0; vif.ch1_dbg_fifo_f =1'b0; vif.ch1_ldst_addr_unalgn =1'b0; vif.ch1_dec_err =1'b0; vif.ch1_exit_irq =1'b0; vif.ch2_dbg_upd =1'b0; vif.ch2_dbg_fifo_e =1'b0; vif.ch2_dbg_fifo_f =1'b0; vif.ch2_ldst_addr_unalgn =1'b0; vif.ch2_dec_err =1'b0; vif.ch2_exit_irq =1'b0; vif.ch3_dbg_upd =1'b0; vif.ch3_dbg_fifo_e =1'b0; vif.ch3_dbg_fifo_f =1'b0; vif.ch3_ldst_addr_unalgn =1'b0; vif.ch3_dec_err =1'b0; vif.ch3_exit_irq =1'b0; cnt = 0; tr = new(); if(!tr.randomize()) $fatal(0,"Randomize Failed"); while(cnt<3000) begin @(posedge wif.clk); cnt = cnt + 1; case(cnt) tr.pll_lock_time: vif.pll_lock <=1'b1; tr.pll_lost_lock_time: vif.pll_lost_lock <=1'b1; tr.ch0_dbg_upd_time: vif.ch0_dbg_upd <=1'b1; tr.ch0_dbg_fifo_e_time: vif.ch0_dbg_fifo_e <=1'b1; tr.ch0_dbg_fifo_f_time: vif.ch0_dbg_fifo_f <=1'b1; tr.ch0_ldst_addr_unalgn_time: vif.ch0_ldst_addr_unalgn <=1'b1; tr.ch0_dec_err_time: vif.ch0_dec_err <=1'b1; tr.ch0_exit_irq_time: vif.ch0_exit_irq <=1'b1; tr.ch1_dbg_upd_time: vif.ch1_dbg_upd <=1'b1; tr.ch1_dbg_fifo_e_time: vif.ch1_dbg_fifo_e <=1'b1; tr.ch1_dbg_fifo_f_time: vif.ch1_dbg_fifo_f <=1'b1; tr.ch1_ldst_addr_unalgn_time: vif.ch1_ldst_addr_unalgn <=1'b1; tr.ch1_dec_err_time: vif.ch1_dec_err <=1'b1; tr.ch1_exit_irq_time: vif.ch1_exit_irq <=1'b1; tr.ch2_dbg_upd_time: vif.ch2_dbg_upd <=1'b1; tr.ch2_dbg_fifo_e_time: vif.ch2_dbg_fifo_e <=1'b1; tr.ch2_dbg_fifo_f_time: vif.ch2_dbg_fifo_f <=1'b1; tr.ch2_ldst_addr_unalgn_time: vif.ch2_ldst_addr_unalgn <=1'b1; tr.ch2_dec_err_time: vif.ch2_dec_err <=1'b1; tr.ch2_exit_irq_time: vif.ch2_exit_irq <=1'b1; tr.ch3_dbg_upd_time: vif.ch3_dbg_upd <=1'b1; tr.ch3_dbg_fifo_e_time: vif.ch3_dbg_fifo_e <=1'b1; tr.ch3_dbg_fifo_f_time: vif.ch3_dbg_fifo_f <=1'b1; tr.ch3_ldst_addr_unalgn_time: vif.ch3_ldst_addr_unalgn <=1'b1; tr.ch3_dec_err_time: vif.ch3_dec_err <=1'b1; tr.ch3_exit_irq_time: vif.ch3_exit_irq <=1'b1; endcase case(cnt-1) tr.pll_lock_time: vif.pll_lock <=1'b0; tr.pll_lost_lock_time: vif.pll_lost_lock <=1'b0; tr.ch0_dbg_upd_time: vif.ch0_dbg_upd <=1'b0; tr.ch0_dbg_fifo_e_time: vif.ch0_dbg_fifo_e <=1'b0; tr.ch0_dbg_fifo_f_time: vif.ch0_dbg_fifo_f <=1'b0; tr.ch0_ldst_addr_unalgn_time: vif.ch0_ldst_addr_unalgn <=1'b0; tr.ch0_dec_err_time: vif.ch0_dec_err <=1'b0; tr.ch0_exit_irq_time: vif.ch0_exit_irq <=1'b0; tr.ch1_dbg_upd_time: vif.ch1_dbg_upd <=1'b0; tr.ch1_dbg_fifo_e_time: vif.ch1_dbg_fifo_e <=1'b0; tr.ch1_dbg_fifo_f_time: vif.ch1_dbg_fifo_f <=1'b0; tr.ch1_ldst_addr_unalgn_time: vif.ch1_ldst_addr_unalgn <=1'b0; tr.ch1_dec_err_time: vif.ch1_dec_err <=1'b0; tr.ch1_exit_irq_time: vif.ch1_exit_irq <=1'b0; tr.ch2_dbg_upd_time: vif.ch2_dbg_upd <=1'b0; tr.ch2_dbg_fifo_e_time: vif.ch2_dbg_fifo_e <=1'b0; tr.ch2_dbg_fifo_f_time: vif.ch2_dbg_fifo_f <=1'b0; tr.ch2_ldst_addr_unalgn_time: vif.ch2_ldst_addr_unalgn <=1'b0; tr.ch2_dec_err_time: vif.ch2_dec_err <=1'b0; tr.ch2_exit_irq_time: vif.ch2_exit_irq <=1'b0; tr.ch3_dbg_upd_time: vif.ch3_dbg_upd <=1'b0; tr.ch3_dbg_fifo_e_time: vif.ch3_dbg_fifo_e <=1'b0; tr.ch3_dbg_fifo_f_time: vif.ch3_dbg_fifo_f <=1'b0; tr.ch3_ldst_addr_unalgn_time: vif.ch3_ldst_addr_unalgn <=1'b0; tr.ch3_dec_err_time: vif.ch3_dec_err <=1'b0; tr.ch3_exit_irq_time: vif.ch3_exit_irq <=1'b0; endcase end endtask : make_intr