On the logical layer interface, treq_byte_count may not seem to output a correct value. Is this expected?
There are three possibilities for this.
1. If you are using SRIO v4.3 or earlier core, there is a problem with core calculating treq_byte_count when transmitting messages. See (Xilinx Answer 30320). This issue will be fixed in SRIO v4.4.
2. If you are performing NREAD of less than 8 bytes, the treq_byte_count will be always show 8-bytes minimum.
Our core will convert all the partial DWORD NREAD to full DWORD transactions. When NREAD comes in with less than 8-bytes, our core will still send 8-bytes of data because that is the full DWORD.
The reason for this is because all response data must be full DWORD transactions, and also properly aligned within the DWORD. By reading the entire DWORD we prevent the user from having to perform the partial request and re-alignment. It also reduces the number of transaction sizes which need to be supported by a user back end. The initiator device which requested the NREAD will still know how many bytes it has requested. In the case of NWRITE, we cannot do that. We should write only the correct number of bytes that were intended.
3. If you transmit intermittent byte counts, treq_byte_count does not match what was sent in ireq_byte_count of the initiator:
The RapidIO spec only defines allowable wrsize values of 8, 16, 32, 64, 128, 256, and 512. Therefore, the core uses this data to determine the TREQ_BYTE_COUNT. Please see Table 4-3 and Table 4-4 of the Logical Spec from the RapidIO Trade Association: IO_logical.pdf
The ireq_byte_count is a direct hex count of the transaction size the user would like to initiate. When the core receives this count, it encodes it into the rd/wrsize and wdptr as dictated by tables 4-3 and 4-4 of the spec. If the byte count does not match one of the exact values in this table, it will encode the transaction as the next bigger size which is supported, but only send the amount of data the user provides (in the write case).
ftype = NREAD, byte_count = 9'h060 (96 bytes) will be encoded into the SRIO packet as wdptr = 1'b0, rdsize = 4'hD.
ftype = NWRITE, byte_count = 9'h060 (96 bytes) will be encoded into the SRIO packet as wdptr = 1'b1, wrsize = 4'hD defining the write size as 128 bytes (since 96 bytes is not a viable size for SRIO writes). However, if the user sends only 96 bytes of data, 96 bytes will be transmitted.