SPRUJ28E November 2021 – September 2024 AM68 , AM68A , TDA4AL-Q1 , TDA4VE-Q1 , TDA4VL-Q1
The multiple buffer interleave is used to have a single TR plus Secondary TR that can define a fetch where a single line is selected from multiple buffers and then sent as a single buffer. This can be used along with transpose of the data to present data in slices optimal for processing the same algorithm on different data sets at the same time. An example of this can be seen in Figure 10-4.
The case above provides the ability to minimize the number of TRs submitted to make the transfer but the interleaved Read main advantage comes when used with the transpose mode enabled. Figure 10-5 shows the advantage of the interleaved mode along with the transpose mode to allow for maximum size transfer on both read and write transactions.
As the figure shows the data that is written out now contains one element from each block of memory and can be read in directly to processing units.
31 | 16 | ||||||||||||||
SEC_TR_TYPE_SPECIFIC | |||||||||||||||
15 | 6 | 5 | 4 | 3 | 0 | ||||||||||
SEC_TR_TYPE_SPECIFIC | NUMOFFSET | 0 (Multiple Interleave Type) |
The flags field fills in the remaining details about the stream, as follows:
Bit | Field | Description |
---|---|---|
6-31 | Reserved | Reserved for Future Use |
4-5 | NUMOFFSET | The encoded value for the number of offsets. 0: 4, 1: 8, 2: 16 |
0-3 | SEC_TR_TYPE | 0: Multiple Buffer Interleave |
Secondary TR TYPE from the Secondary TR Flags field.
word 31 | word 30 | word 29 | word 28 | ||||||||||||
RESERVED | |||||||||||||||
word 27 | word 26 | word 25 | word 24 | ||||||||||||
RESERVED | |||||||||||||||
word 23 | word 22 | word 21 | word 20 | ||||||||||||
RESERVED | |||||||||||||||
word 19 | word 18 | word 17 | word 16 | ||||||||||||
OFFSET15 | OFFSET14 | OFFSET13 | OFFSET12 | ||||||||||||
word 15 | word 14 | word 13 | word 12 | ||||||||||||
OFFSET11 | OFFSET10 | OFFSET9 | OFFSET8 | ||||||||||||
word 11 | word 10 | word 9 | word 8 | ||||||||||||
OFFSET7 | OFFSET6 | OFFSET5 | OFFSET4 | ||||||||||||
word 7 | word 6 | word 5 | word 4 | ||||||||||||
OFFSET3 | OFFSET2 | OFFSET1 | OFFSET0 | ||||||||||||
word3 | word 2 | word 1 | word0 | ||||||||||||
RESERVED | SECONDARY TR FLAGS | ADDR |
Multiple Buffer Interleave will work by setting the SECTR field in the TR presented to the channel to be either 64 or 128 bytes depending on the number of offsets required. An offset number of 4 or 8 will require 64 bytes while 16 offsets will require 128 bytes. When the channel becomes active it will see that the SECTR field is nonzero and fetch the SECTR of the size specified. The first access from the channel will be a read of the secondary TR as specified in the address field of the TR. Upon receiving the Secondary TR the channel will parse the type field and seeing that it is a Multiple Buffer interleave will load the offset index fields for the channel. Additionally it will load the ADDRESS field from the secondary TR into the Address of the actual TR to allow it to process as normal.
The first address fetch will then be to this SEC_TR_ADDRESS. After finishing the inner loop the next address will be SEC_TR_ADDRESS + OFFSET0.
ICNT1 should be equal to the height of the transfer blocks times the number of offsets.