Connecting DUT and TB using interface without modports

In reply to cgales:

Thank you, your solution is very helpful! But there is a moment: when signal cb.S_AXIS_TREADY rises before cb.S_AXIS_TVALID, the first word is skipped.

Is this some timing issue? I have the feeling that code evaluated before cb event and the expression @(cb); after cb.S_AXIS_TLAST <= data_buffer.bus[i].tlast; row just waited for nearest event but not full clock cycle.

I decided to add @(cb) in the beginning (before while loop) and it start working.

Am I right?