包的前 32 位码字必须始终为包报头,用于按下表所示对多个位字段进行编码。
位 | 字段 |
---|---|
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] |
“Packet ID”(包 ID)是由编译器基于布线要求分配的。“Packet Type”(包类型)可以是要插入的任意 3 位模式,用于识别包的类型。“Source Row”(源码行)和“Source Column”(源码列)表示 AI 引擎 tile(拼块)坐标,包即源自该坐标。按约定,源自可编程逻辑 (PL) 的包的源码行和列为 -1,-1。
您负责在每个包开始时构造和发送相应的包报头。在接收侧,需先接收到包报头并解码后,才能读取数据。
以下运算有助于在 AI 引擎内核中对包报头进行汇编或反汇编。
void writeHeader(output_pktstream *str, unsigned int pcktType, unsigned int ID);
void writeHeader(output_pktstream *str, unsigned int pcktType, unsigned int ID, bool tlast);
uint32 getPacketid(input_pktstream *w, int index);
uint32 getPacketid(output_pktstream *w, int index);
writeHeader
API 允许以给定包 ID 和包类型来对包报头进行汇编。使用执行此 API 的 AI 引擎拼块的坐标来自动插入源码行和列。
getPacketid
API 允许在输入或输出包串流数据结构上查询编译器分配的包 ID。索引实参表示 graph 规范中的拆分或合并分支边沿。
重要: 在 PL 内核中不支持
writeHeader()
和 getPacketid()
API。重要:
generateHeader
API 已弃用,并替换为 writeHeader
API。如需了解更多详情,请参阅 显式包切换。