Intel Acceleration Stack for Intel® Xeon® CPU with FPGAs Core Cache Interface (CCI-P) Reference Manual

ID 683193
Date 11/04/2019
Public
Document Table of Contents

1.3.10.1. Mixing Byte Enable and Full Cache Line Accesses

In some applications, it is necessary for an AFU to access buffers that either start unaligned to 64-byte boundaries or end before the next 64-byte boundary in host memory. An AFU can use a mix of byte enable transactions and full cache line accesses to perform buffer writes that start or end on any boundary. For such a transfer the AFU must not mix byte enable bursts (mode=eMOD_BYTE) with full cache line bursts (mode=eMOD_CL).

In the following example, the AFU writes 152 bytes of an incrementing pattern starting at byte address 0x62EC. Since the first and last byte address being accessed do not line up to 64-byte boundaries, the transfer is broken up into three sections with the start and end sections utilizing byte enables to update a subset of bytes within a 64-byte aligned region of memory. The first section writes 20 bytes to memory, then 128 bytes are written using a full cache line burst, followed by a final write of 4 bytes.
Figure 16. Memory Accessed and Corresponding CCIP Address

Since the first access does not start on a 64-byte boundary, the mode is set to eMOD_BYTE. The byte_start field is 0x2C, the byte_len field is 0x14, and the CCIP address bits 41:2 set to 0x62 and CCIP address bits 1:0 set to 0x3.

Since the second access is aligned to a 2CL boundary the next 128 bytes can be posted as a two beat burst with mode set to eMOD_CL. This access cannot be combined with beats that set mode to eMOD_BYTE because the two modes cannot be interleaved in the same burst.

The third access starts on a 64-byte boundary but only accesses four bytes of memory so the mode is set to eMOD_BYTE. The byte_start field is 0x0, the byte_len field is 0x4, and the CCIP address bits 41:2 set to 0x63 and bits 1:0 set to 0x2.
Figure 17. Mixed Byte Enable and Full Cache Line Access Timing Diagram
Figure 18. Host Memory