So I have created a design where I have a lot of modules connect together in a line where each one uses streaming interface based on valid/enable protocol. Some of these use fixed packet size while others do not. I am using the TUSER field of the AXI-S protocol as well to contain the metadata for the packets that go through the system.
Since the data comes in as packets. Each can be assigned a packet ID. This data passes down the system from one module to another and the packet ID is passed along with it. So at the end, I can see that the data coming out at a given time, is actually originating from packet XYZ at the input. This is important as a debug aid. There are some other things that can aid in debug.
Now the thing is, I don't need packet ID in the synthesized design. It only serves purpose of debug. Now the question is,
Do I create a separate parallel system with streaming interface that is for SIMULATION ONLY (i.e covered by pragma translate_off and pragma_translate_on) and use this to pass the packet ID and any other bit of data that I believe is useful when debugging the system. OR ,
I add a field covered by pragma translate_off and pragma_translate_on, into the record that is used to represent the TUSER field and likewise change the length of TUSER between synthesis and simulation? This way the debug fields shall appear in simulation but not in synthesis. OR ,
Use the AXI-S TID field to contain the debug data and cover it under pragma translate_off and pragma_translate_on. OR, something else?