hls::stream.size()
方法会返回无符号整数,用于指定串流当前保存的元素数量。这样您即可先检查通道内是否存在数据或者存在的数据量,然后再读取数据,以免发生停滞或死锁。
注释:
hls::stream.size()
可用于检查输入 FIFO 是否已满以及输出 FIFO 是否为空。但是,hls::stream.empty()
只能应用于输入 FIFO,hls::stream.full()
只能应用于输出 FIFO。hls::stream<int> my_stream;
var = 16;
if (my_stream.size()>0) {
my_stream.read(var);
}
仅当存在特定量的空间或数据可供传输事务使用时,hls::stream.size()
方法和 hls::stream.capacity()
方法才能启用高级流程控制用于读取或写入串流。例如,启动大小为 N 的读取突发前,您可检查输入串流中是否存在 N 个数据项可供突发正常完成操作而不会发生停滞。对于写入突发,您还可检查输出串流中是否存在足够空间可用于存储突发数据而不会发生停滞。
if (instream.size() > N)
for(i=0, i<N; i++)
... = instream.read(); // will not block
如需仅在串流已满时才执行读取,请执行以下操作:
if (instream.size() == instream.capacity())
... = instream.read(); // read only if full
提示: 您不能使用
hls::stream.full()
来检查此条件。以下操作将无效:if (instream.full())
... = instream.read();