kernel 2有两个输入和一个输出。两个输入均来自于kernel 1的两个输出。由于kernel 1输出采用了stream和window,因此,这里的输入也对应使用stream和window访问方式。然后将读取的数据相加,再把结果写入到window。
我们可以借助Trace View观察每个kernel的执行状况,这就需要在仿真时生成vcd文件。生成vcd文件需要两部设置,如下图所示。
点击default.aierun_summary,将会打开Vitis Analyzer,在这个视图下选择Trace即可看到kernel的执行情况。
Trace view如下图所示。从图中可以看到一些具体的事件。
标记1:
Tile 24_0 DMA s2mm 通道0启动。获取buf0(ping)的lock信号,将数据由PL传送给buf0。
标记2:
Tile 24_0 DMA s2mm通过1启动。获取buf0d(pong)的lock信号,将数据由PL传送给buf0d。
标记3a:
kernel aie_dest1获取输入buffer buf0的lock信号(在图中显示为read lock allocated)。
标记3b:
kernel aie_dest1获取输出buffer buf1的lock信号。
标记4a:
aie_dest1获取了buf0和buf1的lock信号,开始启动工作。
标记4b:
一旦Tile 24_0 DMA s2mm通道1完成,则切换到通道0。这时aie_dest1仍然在读buf0,只有当其释放了buf0的lock信号,Tile 24_0 DMA s2mm通道0才可以启动数据传输。
标记5:
一旦aie_dest1执行结束,它就会释放buf1,这样kernel aie_dest2就会捕获buf1的lock信号。
标记6a:
aie_dest2获取buf1的lock信号之后就开始启动工作。
标记6b:
aie_dest1获取buf0d的lock信号。
标记6c:
aie_dest1获取buf1d的lock信号。
标记7:
aie_dest1在获取buf0d和buf1d的lock信号之后开始启动工作。
标记8:
aie_dest1完成执行,释放buf1d。aie_dest2获取buf1d的lock信号。
标记9:
aie_dest2获取buf1d的lock信号之后,开始启动工作。
注:stream接口不需要lock信号。每个lock的获取和释放都需要一些时钟周期的开销。
没有回复内容