The AxiStreamBatcher firmware module takes incoming AxiStreams AXI stream and combines multiple sub-frames (packets) into a larger super-frame. The AxiStreamDebatcher does the reverse, deassembling the super-frame into the original frames.
The batching protocol also takes includes the some of the AXI-Stream's sideband data (TDEST , TID, TUSER) and inserts it in the data stream as part of the batching formatand TUSER) information into the sub-frame tail.
The batching protocol is intended for use in firmware only and expects the debatching to be done in the software. Debatching not done in firmware due to the caching requirements at the sub-frame tail.
The batching protocol does not support partial frame interleaving for the sub-frames. A sub-frame must be an entire AXI stream frame.
Together these features are very useful for sending high rate (>1MHz), small AXI-Stream frame into a CPU.
Version 1 of the packetizer has been designed to allow interleaving of AXI streams
...
Name | Description |
---|---|
MAX_NUMBER_SUB_FRAME_G | Max. number of sub-frames in a super-frame |
MAX_SUPER_FRAME_THRESHOLD_G | Sets the super-frame threshold (in units of bytes) to terminate the super-frame at the end of the current sub-frame |
MAX_CLK_GAP_G | Sets the max. number of clocks cycle between sub-frame to terminate the current super-frame |
AXIS_CONFIG_G | Defines the AXI stream configuration and used to determine the AXI stream width from AXI_CONFIG_G.TDATA_BYTES_C |
The firmware batcher combines sub-The batcher combines frames in to larger super-frame. The super-frame has a 8 (or 16) byte header only 1 header per super-frame (no tail) as follows:
Bits | Name | Description | |||
---|---|---|---|---|---|
3:0 | VERSION | Version info. Should always be 0x1 | |||
7:4 | TYPE | WIDTH | log2( (AXI stream bit width) /16-bits)
| ||
11:8 | CRC | 0: No CRC | |||
| |||||
15:831:16 | SEQ | Packet sequence number of super-frame | 44:32 | TIMEOUT_CFG | |
Other | Reserved | All reserved bits (undefined) bit set to zero |
Notes
If TYPE = 16-bit AXI stream, then appended header is 2 bytes.
If TYPE = 32-bit AXI stream, then appended header is 4 bytes.
If TYPE = 64-bit AXI stream, then appended header is 8 bytes.
If TYPE = 128-bit AXI stream, then appended header is 16 bytes.
If TYPE = 256-bit AXI stream, then appended header is 32 bytes.
...
If TYPE = 512-bit AXI stream, then appended header is 64 bytes.
...
Each packet sub-frame within the super-frame is appended 8 byte tail appendedwith a tail (no header) as follows:
Bits | Name | Description |
---|---|---|
731:0 | TDESTSIZETDEST | of AXI-Stream Number of valid bytes in the sub-frame |
1539:832 | TIDTDEST | TID TDEST of AXI-Stream sub-frame |
2347:1640 | TUSER_FIRST | TUSER of the AXI-Stream sub-frame |
3155:2448 | TUSER_LAST | TUSER of last transaction of the AXI-Stream sub-frame. |
4459:3256 | TIMER_VALUE |
|
45 | SOF | Indicates that this is the start packet of a frame. |
46 | EOF | Indicates that this is the last packet of a frame. |
56:48 | LAST_BYTE_CNT | Number of valid bytes in last transaction of frame |
WIDTH | log2( (AXI stream bit width) /16-bits)
| |
Other | Reserved | All reserved bits (undefined) bit set to zero |
If TYPE =
...
16-bit AXI stream, then appended tail is 8 bytes.
If TYPE =
...
32-bit AXI stream, then appended tail is
...
...
8 bytes.
If TYPE = 64-bit AXI stream, then appended tail is 8 bytes.
If TYPE = 128-bit AXI stream, then appended tail is 16 bytes.
If TYPE = 256-bit AXI stream, then appended header is 32 bytes.
If TYPE = 512-bit AXI stream, then appended header is 64 bytes
...
Header | Data | Tail (32 lsb) |
---|---|---|
0x8000000000000222 | 0xAFFECAFEFEEDBEEF | 0x00080102 |
...
0x8000000000000222
0xAFFECAFEFEEDBEEF
0x1E579C9C00080102
.
...
Larry Ruckman
ruckman@slac.stanford.edu