文档目录

13.15. Intel® HLS Compiler Pro版流输入接口

使用stream_in对象和模板参数要明确声明 Avalon® Streaming(ST)输入接口。您还可以使用stream_in Function API。

表 53.   Intel® HLS Compiler Pro版流输入接口模板总结
模板对象或参数 描述
ihc::stream_in 连接组件的流输入接口。
ihc::buffer 指定与流相关的输入数据上FIFO缓冲区的容量(以字为单位)。
ihc::readyLatency 指定ready信号被解除置位与不再能接受新输入的输入流两者之间的周期数。
ihc::bitsPerSymbol 描述数据如何分解为数据总线上的符号。
ihc::firstSymbolInHighOrderBits 指定流中的数据符号是否按大端顺序排列。
ihc::usesPackets 公开流接口上的startofpacketendofpacket边带信号。
ihc::usesEmpty

公开流接口上的empty带外(out-of-band )信号。

ihc::usesValid 控制流接口上是否存在valid信号。

ihc::stream_in模板对象

句法
ihc::stream_in<datatype, template parameters >
有效值
任何有效的C++数据类型
默认值
N/A
描述
到组件的流输入接口。

流数据总线的宽度等于sizeof(datatype)的宽度。

测试台必须完全填充该缓冲区(流),组件才能开始从缓冲区读取。

要了解更多信息,请查看以下教程:
  • <quartus_installdir>/hls/examples/tutorials/interfaces/explicit_streams_buffer
  • <quartus_installdir>/hls/examples/tutorials/interfaces/explicit_streams_packets_empty
  • <quartus_installdir>/hls/examples/tutorials/interfaces/explicit_streams_packet_ready_valid
  • <quartus_installdir>/hls/examples/tutorials/interfaces/explicit_streams_ready_latency
  • <quartus_installdir>/hls/examples/tutorials/interfaces/multiple_stream_call_sites

ihc::buffer模板参数

句法
ihc::buffer<value>
有效值
非负整数值
默认值
0
描述
换言之,与流关联的输入数据的FIFO缓冲区的容量。缓冲区具有延迟。它会立即使用数据,但这些数据不会立即提供给组件中的逻辑。

如果您使用tryRead()函数访问此流,并且流读取被安排在操作的第一个周期内,对tryRead()函数的第一次(或更多)调用可能会在模拟(并且由此在硬件中)过程中返回false

查看High-Level Design Reports的System Viewer中的函数查看器,了解组件中操作的调度时间。如果看到此行为,请使用阻塞read()函数确保仿真与模拟之间的一致性。

此参数仅适用于输入流。

ihc::readyLatency模板参数

句法
ihc::readyLatency<value>
有效值
非负整数值介于0-8
默认值
0
描述
ready信号被解除置位与不再能接受新输入时的输入流之间的周期数。

ihc::bitsPerSymbol模板参数

句法
ihc::bitsPerSymbol<value>
有效值
能被数据类型大小整除的正整数值。
默认值
数据类型大小
描述
描述数据如何在数据总线上被分解为符号。

数据将根据您设置的ihc::firstSymbolInHighOrderBits被分解。默认情况下,数据按小端顺序分解。

ihc::firstSymbolInHighOrderBits模板参数

句法
ihc::firstSymbolInHighOrderBits<value>
有效值
truefalse
默认值
false
描述
指定流中的数据符号是否按大端顺序排列。

提示: 要确认此参数的设置,请查看设计的模拟波形。您无法在仿真或模拟测试台中看到设置此参数的效果。

ihc::usesPackets模板参数

句法
ihc::usesPackets<value>
有效值
truefalse
默认值
false
描述
公开流接口上的startofpacketendofpacket边带信号,可以通过基于读/写的数据包来访问。

ihc::usesEmpty模板参数

句法
ihc::usesEmpty<value>
有效值
truefalse
默认值
false
描述

公开流接口上的empty带外(out-of-band)信号。

仅对每个时钟周期读取多个数据符号的流使用此声明。

empty信号表示在数据包的最终流读取期间数据总线上不代表有效数据的符号数。

您可以通过ihc::firstSymbolInHighOrderBits声明控制empty符号位于低位或高位。

ihc::usesValid模板参数

句法
ihc::usesValid<value>
有效值
truefalse
默认值
true
描述
控制valid信号是否出现在流接口上。如果为false,则上游源必须在每个置位ready的周期提供有效数据。

这样相当于将流读取调用更改为tryRead,并假设success始终为true

如果设置为false,则bufferreadyLatency必须为0。

Intel® HLS Compiler Pro版流输入接口stream_in函数API

表 54.   Intel® HLS Compiler Pro版流输入接口stream_in函数API
函数API 描述
T read() 从组件内部使用阻塞读调用
T read(bool& sop, bool& eop)

仅当设置了usesPackets<true>时可用。

通过带外(out-of-band)startofpacketendofpacket信号阻塞读取。
T read(bool& sop, bool& eop, int& empty) 仅当设置了usesPackets<true>usesEmpty<true> 时可用。

通过带外startofpacketendofpacket,和empty信号阻塞读取。

T tryRead(bool &success) 在组件内部使用非阻塞读取调用。如果读操作有效则success bool(布尔类型)被设置为true(有效)。即,当组件尝试从流中读取时, Avalon® -ST valid信号为高。

tryRead()的仿真模型不是周期精确的,因此tryRead()的行为在模拟和仿真之间可能会有所不同。

T tryRead(bool& success, bool& sop, bool& eop)

仅当设置了usesPackets<true>时可用。

通过带外(out-of-band)startofpacketendofpacket信号的非阻塞读取。
T tryRead(bool& success, bool& sop, bool& eop, int& empty) 仅当设置了usesPackets<true>usesEmpty<true> 时可用。

通过带外startofpacketendofpacket,和empty信号的非阻塞读取。

void write(T data) 从测试台使用阻塞写调用来填充要发送到组件的FIFO。
void write(T data, bool sop, bool eop)

仅当设置了usesPackets<true>时可用。

通过带外(out-of-band)startofpacketendofpacket 信号阻塞写调用。
void write(T data, bool sop, bool eop, int empty) 仅当设置了usesPackets<true>usesEmpty<true> 时可用。

通过带外startofpacketendofpacket,和empty信号阻塞写调用。

Intel® HLS Compiler流输入接口代码实例

如下代码实例说明stream_in声明和stream_in函数API。
 // Blocking read
void foo (ihc::stream_in<int> &a) {
 int x = a.read(); 

}
 // Non-blocking read
void foo_nb (ihc::stream_in<int> &a) {
 bool success = false;
 int x = a.tryRead(success);

 if (success) {
 // x is valid
 }
}

int main() {
 ihc::stream_in<int> a;
 ihc::stream_in<int> b;
 for (int i = 0; i < 10; i++) {
  a.write(i);
  b.write(i);
 }
 foo(a);
 foo_nb(b);
}