基于HLS工具的进阶实战学习笔记2——Stream与DataFlow

笔记——学习HLS:Stream与DataFlow

HLS的一个类 hls::stream, 来流式处理数据,综合以后形成一份FIFO
在c仿真时,如果模块内部定义了这个类型的变量,这个fifo被认为是无限长度,但综合为电路时,长度默认为1,需要加约束设置其长度。
在这里插入图片描述如果不做约束,在综合时会报如下错误:
ERROR: [XFORM 203-733] An internal stream ‘tp_stream.V.V’ (stream_test/stream_test.cpp:23) with default size is used in a non-dataflow region, which may result in deadlock. Please consider to resize the stream using the directive ‘set_directive_stream’ or the ‘HLS stream’ pragma.
ERROR: [HLS 200-70] Pre-synthesis failed.

如果是main函数里定义该类型变量,由于不会综合成电路,仍然会认为是个无限容量的FIFO。

定义两个模块:
typedef ap_uint<128> my_uint128_t;
void stream_test_part1(
hls::stream<my_uint128_t> &stream_in,
hls::stream<my_uint128_t> &stream_out,
ap_uint<16> stream_len
)
{
for(int i=0;i<stream_len;i++){
#pragma HLS LOOP_TRIPCOUNT min=10000 max=10000 avg=10000
my_uint128_t tp;
tp = stream_in.read();
tp = tp+1;
stream_out.write(tp);
}

}

void stream_test_part2(
hls::stream<my_uint128_t> &stream_in,
hls::stream<my_uint128_t> &stream_out,
ap_uint<16> stream_len
)
{
for(int i=0;i<stream_len/2;i++){
#pragma HLS LOOP_TRIPCOUNT min=5000 max=5000 avg=5000
my_uint128_t tp,tp2;
tp = stream_in.read();
tp2 = stream_in.read();
stream_out.write(tp+tp2);
}

}

void stream_test(
hls::stream<my_uint128_t> &stream_in,
hls::stream<my_uint128_t> &stream_out,
ap_uint<16> stream_len)
{
hls::stream<my_uint128_t> tp_stream;
#pragma HLS STREAM variable=tp_stream depth=4 dim=1

stream_test_part1(
	stream_in,
	tp_stream,
	stream_len
);

stream_test_part2(
	tp_stream,
	stream_out,
	stream_len
);

}
由于stream_len是参数,在综合时需要加上约束HLS LOOP_TRIPCOUNT,否则无法得到Latency
在这里插入图片描述加上约束后
在这里插入图片描述发现Latency为20002,也就是说
stream_test_part1(
stream_in,
tp_stream,
stream_len
);

stream_test_part2(
	tp_stream,
	stream_out,
	stream_len
);

这两个模块没有并行工作,如同C语言函数调用在串行。
需要对stream_tes模块进行并行约束。
在这里插入图片描述在这里插入图片描述通过联合仿真,检查时序波形
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值