当前栏目
AIE(19)—Packet Switching(1)
多个stream数据流可以共享一个物理通道,这个物理通道可以是PL到AIE也可以是AIE到PL。这样的好处是节省了PL接口,尤其适用于低带宽的场合。
本质上,packet switching使用了一对解复用器(de-multiplexer)和复用器(multiplexer)。前者将打包的数据流根据packet ID分配给不同的kernel,后者将来自于不同kernel上的数据流合并汇聚为一个数据流。为此,在ADF graph library中引入了pktsplit<n>和pktmerge<n>。pktsplit<n>是一个1:n的解复用器,pktmerge<n>是一个n:1的复用器。n最大值为32。
我们通过一个具体案例来体会一下packet switching的使用方法。这个例子包含4个AIE kernel,每个kernel的输入/输出均采用Window-based方式。4个Kernel的输入数据分别来自于pktsplit解复用器的4个输出,而4个Kernel的输出数据则通过pktmerge复用器合并为一路输出数据。需要注意的是将packet stream与window连接时connect里填的参数分别为pktstream和window,如下图中红色方框所示。
从编译结果来看,packet switching方式从PL到AIE只使用了一个物理通道,同样地,从AIE到PL也只使用了一个物理通道。
在编译结果Emulation-AIE/Work/temp目录下,packet_ids_c.h内显示了Kernel输入/输出端口与Packet ID之间的对应关系。该.h文件可用于后续使用HLS对PL编程。该目录下还会生成一个packet_ids_v.h,用于后续使用Verilog对PL编程。
这里就要说明一下packet数据流的格式。Packet数据流由packet header和数据流构成。每个Packet ID对应的数据流长度必须一致。Packet header的格式如下图所示。图中表明低5位为packet ID,这也佐证了为什么最多包含32个数据流。
基于此,在提供输入激励时就要采用如下图所示方式。图中红色方框为packet header,蓝色方框表明对应packet ID下的数据将为最后一个数据。不难看出,这里每个packet ID下的数据流长度为8。
我们把这4个packet header解析下来如下图所示。重点关注其中的packet ID。可以看到packet ID分别为0/1/2/3。
再看AIE的仿真结果,如下图所示。同样地,红色方框为packet header。蓝色方框表明此时为相应packet ID下的最后一个数据。对packet header进行解析,即可获知数据packet ID,再通过packet_ids_c.h中的文件内容,就可以知道该ID的数据是由哪个AIE Kernel输出。
Copyright @ FPGA技术驿站
转载事宜请私信 | 获得授权后方可转载
相关文章
- redis灵魂拷问:19图+11题带你面试通关
- EasyC++19,C++中的for循环
- 《安富莱嵌入式周报》第270期:2022.06.13--2022.06.19
- JavaScript笔记(19)之JS执行机制
- 论文/代码速递2022.10.19!
- 报道称苹果因COVID-19而推迟在印度开设首家Apple Store实体店
- 使用公共 Registry – 每天5分钟玩转 Docker 容器技术(19)
- 科学家使用全基因组关联研究准确标记出更多致命的COVID-19变体
- 一步步搭建Oracle 19环境(oracle19怎么安装)
- Moderna研究表明其COVID-19疫苗在6个月后对几种变异体的效果依然良好
- 德国卫生官员:数千人可能接种了假的COVID-19疫苗