在Vitis HLS设计中,由于只能获取到fifo
的empty
、full
信号,而不像RTL设计中还能拿到write/read count,所以在dataflow
中,只能通过empty
、full
信号来进行数据驱动。反压fifo
是通过fifo
的full
信号来控制程序的运行。下面介绍两种笔者涉及到的反压技巧,以便大家在自己的设计中举一反三。
技巧1
下图所示为dataflow
中一个最基本的结构,在反压设计中,backPressStrm
如果指定depth=2
,那么Producer
写入两个数后,如果Consumer
没读取,则Producer
会hang住等待Consumer
中backPressStrm
的读取,所以Consumer
通过合理的控制实现了反压的应用。
伪码
{
#pragma HLS inline off
#pragma HLS dataflow
hls::stream<bool> backPressStrm;
#pragma HLS stream variable = backPr