193 lines
4.4 KiB
Systemverilog
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
|
||
|
|