SPI_Test/tb/testbench/sysreg_tb/sysreg_driver.sv

193 lines
4.4 KiB
Systemverilog

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