如果数据类型为 ap_axis
或 ap_axiu
的函数实参不包含任何 AXI4 旁路元素(即 WUser
、WId
和 WDest
参数设置为 0),则使用不含旁路的 AXI4-Stream。在以下示例中,2 种接口均使用 AXI4-Stream 来实现:
#include "ap_axi_sdata.h"
#include "hls_stream.h"
typedef ap_axiu<32, 0, 0, 0> trans_pkt;
void example(hls::stream< trans_pkt > &A, hls::stream< trans_pkt > &B)
{
#pragma HLS INTERFACE mode=axis port=A
#pragma HLS INTERFACE mode=axis port=B
trans_pkt tmp;
A.read(tmp);
tmp.data += 5;
B.write(tmp);
}
综合后,2 个实参均使用数据端口 (TDATA
) 和标准 AXI4-Stream 协议端口(TVALID
、TREADY
、TKEEP
、TLAST
和 TSTRB
)来实现,如下图所示。
图 1. 不含旁路的 AXI4-Stream 接口
提示: 如果指定的
hls::stream
对象的数据类型并非 ap_axis
或 ap_axiu
,那么该工具会推断不含 TLAST
信号或任何旁路信号的 AXI4-Stream 接口。此 AXI4-Stream 接口实现耗用的器件资源较少,但无法查看串流何时结束。通过使用结构体可将多个变量组合到同一个 AXI4-Stream 接口中,此结构体默认是由 Vitis HLS 聚合而成的。将单个结构体的多个元素聚合到单宽矢量中即可在同一个 AXI4-Stream 接口中实现该结构体的所有元素。