The first 32-bit word of a packet must always be a packet header which encodes several bit fields, as shown in the following table.
Bit | Note |
---|---|
4-0 | Packet ID |
11-5 | 7'b0000000 |
14-12 | Packet Type |
15 | 1'b0 |
20-16 | Source Row |
27-21 | Source Column |
30-28 | 3'b000 |
31 | Odd parity of bits[30:0] |
The packet ID in the header should match the ID assigned by the compiler. The packet type can be any 3-bit pattern that you want to insert to identify the type of packet. The source row and column denote the AI Engine tile coordinates from where the packet originated. By convention, source row and column for packets originating in the PL is -1,-1.
The last 32-bit word should have its TLAST
set High. Other words should set their TLAST
Low.
When the packet originates from the PL, the packet header should be constructed by the PL kernels manually. When the AI Engine receives the packet, it is decoded and routed to the destination corresponding to the packet ID in the header.
When the packet originates from the AI Engine, the first 32-bit word should be decoded by the PL kernels manually. By decoding the packet ID from the packet, and reading the packet switching header files (Work/temp/packet_ids_c.h
and Work/temp/packet_ids_v.h
) by the compiler, the PL kernels should be able to route the packet to the correct destination.