How to Initiate Back-to-Back Write Transactions from Master
Q:
How to Initiate Back-to-Back Write Transactions from Master
A:
following are the modification required at master end to achieve back-to-back transaction driving the VIP:
- constraint all the master relevant delays to ‘0’ during transaction randomization.
`uvm_do_with(req,
{
xact_type == svt_axi_transaction::WRITE;
burst_length == 1;
data_before_addr == 0;
addr_valid_delay == 0;
foreach(wvalid_delay[i]) {
wvalid_delay[i] == 0;
}
bready_delay == 0;
})
make sure that the master keeps all its ready signals always asserted,to do this, set respective default_* ready signal values to ‘1’ as below:
this.master_cfg[0].default_bready = 1;
this.master_cfg[0].default_rready = 1;
Now if one would like to try this with VIP basic example, another thing to ensure is that slave also responds back-to-back.
following are the modifications applied at slave end for slave response and its port configuraiton:
1)
constraint all slave relevant delays to ‘0’ during response randomization,
`uvm_rand_send_with(req,
{
foreach(rresp[i]) {
rresp[i] inside { svt_axi_transaction::SLVERR,
svt_axi_transaction::OKAY };
}
bresp inside { svt_axi_transaction::SLVERR,
svt_axi_transaction::OKAY };
addr_ready_delay == '0;
foreach (wready_delay[index]) {
wready_delay[index] == '0;
}
bvalid_delay == '0;
})
2)
set all slave default_*ready signal to keep asserted,
this.slave_cfg[0].default_awready = 1;
this.slave_cfg[0].default_wready = 1;
attached it the waveform snapshot, with only write TR.