Hello Everybody,
we implement FPGA IP using AXI4-S interfaces (usually incl. TDATA, TKEEP, TLAST and TUSER, but without TSRTB optional signals). Some Byte Lanes may be marked as Null Bytes via TKEEP = '0' and TVALID = '1' and these Byte Lanes of TDATA may carry 'U' values as they may be fed by, at this point in time not yet initialized, buffer memory. We do use BFMs that cope with this behavior and ignore these Byte Lanes accordingly, while still throwing errors for TKEEP = '1' and TVALID = '1' marked Byte Lanes which carry non '1' or '0' data. Our BFMs also allow generation of these kind of transactions to validate in simulation that modules only process data that should be processed, where pushing 'U' values into them helps to identify falsely processed portions of TDATA.
However, when we now look at the AMBA SVAs, the interpretation is very strict and forbids ANY non '1' or '0' data in the complete TDATA vector when TVALID = '1', without taking the TKEEP signal into account. Our internal discussions did not really come to a final conclusion, but they hint into the direction that maybe the SVA interpretation is too strict in this special case.
So, how to deal with this situation? Either we can test nicely or the interface would pass the SVA checks. Also, avoiding the 'U' values, would require additional logic in the final circuit, which sounds a bit odd.
Right now, we address this situation by providing documentation to our customers, so that they are aware that some interfaces may behave like this and therefor the respective assertion might trigger.
We looked at the AMBA AXI4-S specification and the SVA documentation and on the SVAs itself, but maybe we did miss relevant information on this topic? Can somebody provide some pointers?
Is there a best practice guide out there or something similar?
Thanks a lot for taking the time looking into this topic!