顶层函数不一定是主函数,但是顶层函数即就是你要生成的硬件输入输出的形式:
如下面一段C=A*B的乘法加速器代码:
其顶层函数为:void mmult_accel_core,定义了输入,输出两个数据流,即会对应生成硬件的端口
void mmult_accel_core (AXI_VAL in_stream[2*SIZE], AXI_VAL out_stream[SIZE])
{
// Map ports to Vivado HLS interfaces
#pragma HLS INTERFACE ap_fifo port=in_stream
#pragma HLS INTERFACE ap_fifo port=out_stream
// Map HLS ports to AXI interfaces
#pragma HLS RESOURCE variable=in_stream core=AXIS metadata="-bus_bundle INPUT_STREAM"
#pragma HLS RESOURCE variable=out_stream core=AXIS metadata="-bus_bundle OUTPUT_STREAM"
#pragma HLS RESOURCE variable=return core=AXI4LiteS metadata="-bus_bundle CONTROL_BUS"
dut_mmult_accel_core <float, DIM, SIZE, 4, 5, 5>(in_stream, out_stream);
return;
}
int main(void)
{
typedef float T;
int ret_val = 0;
ret_val = test_matrix_mult<T, DIM, SIZE, 4,5,5>();
return ret_val;
}