仅对英特尔可见 — GUID: uvg1547571713163
Ixiasoft
仅对英特尔可见 — GUID: uvg1547571713163
Ixiasoft
13.16. Intel® HLS Compiler Pro版流输出接口
使用stream_out对象和模板参数明确声明 Avalon® Streaming(ST)输出接口。您还可以使用stream_out Function API。
模板对象或参数 | 描述 |
---|---|
ihc::stream_out | 从组件来的流输出接口。 |
ihc::readylatency | 指定ready信号被解除置位与不再能接受新输入的输入流两者之间的周期数。 |
ihc::bitsPerSymbol | 描述数据如何分解为数据总线上的符号。 |
ihc::firstSymbolInHighOrderBits | 指定流中的数据符号是否按大端顺序排列。 |
ihc::usesPackets | 公开流接口上的startofpacket和endofpacket边带信号。 |
ihc::usesEmpty | 公开流接口上的empty带外(out-of-band )信号。 |
ihc::usesReady | 控制是否存在就绪信号。 |
ihc::stream_out模板对象
- 句法
- ihc::stream_out<datatype, template parameter >
- 有效值
- 任何有效的POD(普通旧数据)C++数据类型。
- 默认值
- N/A
- 描述
-
从组件来的流输出接口。一旦组件返回,测试台可以从该缓冲区进行读取。
要了解更多详细信息,请参看如下教程:
- <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/ mulitple_stream_call_sites
ihc::readylatency模板参数
- 句法
- ihc::readylatency<value>
- 有效值
- 非负整数值(介于0-8)
- 默认值
- 0
- 描述
- ready信号被解除置位和不在接受新输入的接收器之间的周期数。
从概念上讲,您可以将此参数视为与流相关数据的输入FIFO缓冲区上差不多就绪的延迟。
ihc::bitsPerSymbol模板参数
- 句法
- ihc::bitsPerSymbol<value>
- 有效值
- 整除数据类型大小的正整数值。
- 默认值
- 数据类型大小
- 描述
-
描述数据如何在数据总线上被分解为符号。
数据将根据您设置的ihc::firstSymbolInHighOrderBits被分解。默认情况下,数据按小端顺序分解。
ihc::firstSymbolInHighOrderBits模板参数
- 句法
- ihc::firstSymbolInHighOrderBits<value>
- 有效值
- true或false
- 默认值
- false
- 描述
-
指定流中的数据符号是否按大端顺序排列。
提示: 要确认此参数的设置,请查看设计的模拟波形。您无法在仿真或模拟测试台中看到设置此参数的效果。
ihc::usesPackets模板参数
- 句法
- ihc::usesPackets<value>
- 有效值
- true或false
- 默认值
- false
- 描述
- 公开流接口上的startofpacket和endofpacket边带信号,可以通过基于读/写的数据包来访问。
ihc::usesEmpty模板参数
- 句法
- ihc::usesEmpty<value>
- 有效值
- true或false
- 默认值
- false
- 描述
-
公开流接口上的empty带外(out-of-band)信号。
仅对每个时钟周期写入多个数据符号的流使用此声明。
empty信号表示在数据包的最终流写入期间数据总线上不代表有效数据的符号数。
您可以通过ihc::firstSymbolInHighOrderBits声明控制empty符号位于低位或高位。
ihc::usesReady模板参数
- 句法
- ihc::usesReady<value>
- 有效值
- true或false
- 默认值
- true
- 描述
-
控制就绪信号是否出现。如果为false,则下游接收器(sink)必须在每个置位valid的周期能够接受数据。这样相当于将流读取调用更改为tryWrite,并假设success始终为true。
如果设置为false,则readyLatency必须为0。
Intel® HLS Compiler Pro版流输出接口stream_out函数API
函数API | 描述 |
---|---|
void write(T data) | 从组件来的阻塞写调用 |
void write(T data, bool sop, bool eop) | 仅当设置了usesPackets<true>时可用。 通过带外(out-of-band)startofpacket和endofpacket信号的阻塞写入。 |
void write(T data, bool sop, bool eop, int empty) | 仅当设置了usesPackets<true>和usesEmpty<true> 时可用。 通过带外startofpacket,endofpacket和empty信号的阻塞写入。 |
bool tryWrite(T data) | 从组件来的非阻塞写调用。返回值表示写入是否成功。 |
bool tryWrite(T data, bool sop, bool eop) | 仅当设置了usesPackets<true>时可用。 通过带外startofpacket和endofpacket信号的非阻塞写入。返回值表示写入是否成功。即,当HLS组件尝试写入流的同时,下游接口正在将ready信号拉高。 |
bool tryWrite(T data, bool sop, bool eop, int empty) | 仅当设置了usesPackets<true>和usesEmpty<true> 时可用。 通过带外startofpacket,endofpacket和empty信号的非阻塞写入。返回值表示写入是否成功 |
T read() | 从测试台使用阻塞读调用来从组件读回数据。 |
T read(bool &sop, bool &eop) | 仅当设置了usesPackets<true>时有效。 从测试台使用阻塞读调用,通过带外startofpacket和endofpacket信号从组件读回数据。 |
T read(bool &sop, bool &eop, int &empty) | 仅当设置了usesPackets<true>和usesEmpty<true>时可用。 从测试台使用阻塞读调用,以带外startofpacket,endofpacket和empty 信号从组件读回数据。 |
Intel® HLS Compiler流输出接口代码实例
// Blocking write void foo (ihc::stream_out<int> &a) { static int count = 0; for(int idx = 0; idx < 5; idx ++){ a.write(count++); // Blocking write } } // Non-blocking write void foo_nb (ihc::stream_out<int> &a) { static int count = 0; for(int idx = 0; idx < 5; idx ++){ bool success = a.tryWrite(count++); // Non-blocking write if (success) { // write was successful } } } int main() { ihc::stream_out<int> a; foo(a); // or foo_nb(a); // copy output to an array int outputData[5]; for (int i = 0; i < 5; i++) { outputData[idx] = a.read(); } }