Intel® 高层次综合编译器专业版Pro版: 参考手册

ID 683349
日期 12/04/2023
Public
文档目录

4.2. Avalon® 流(Streaming)接口

组件可以具有符合Avalon Streaming (ST) 接口规范的输入和输出流。这些输入和输出流以将引用传递给ihc::stream_in<>ihc::stream_out<>对象作为组件的函数参数来表示。

当您使用Avalon ST接口时,您可以在多个时钟周期内序列化数据。即,一个组件调用可以多次从流中读取数据。

您无法从流类派生新类别,也无法将其封装为其它格式(例如,结构体(struct)或数组(array))。但是,您可以将对这些类的实例的引用用作其它类中的引用,这意味着您可以创建一个类别,具有对流对象的引用并作为数据成员(data member)。

一个组件可以有多个用于流的读站点。同样地,一个组件可以有多个用于流的写站点。但是,为了获得最佳组件性能,请尝试将设计中的每个输入流限制为单个读取站点,并且将每个输出流限制为单个写入站点。

注: 在组件内部,除非流之间存在数据依赖关系,否则无法保证不同流的执行顺序。
关于流接口的更多信息,请参阅Avalon接口规范中的“Avalon流接口”。
限制: Intel® HLS Compiler不支持Avalon ST channelerror信号。

流输入接口

表 8.   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信号。
表 9.   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信号阻塞写调用。

流输出接口

表 10.   Intel® HLS Compiler Pro版流输出接口模板总结
模板对象或参数 描述
ihc::stream_out 从组件来的流输出接口。
ihc::readylatency 指定ready信号被解除置位与不再能接受新输入的输入流两者之间的周期数。
ihc::bitsPerSymbol 描述数据如何分解为数据总线上的符号。
ihc::firstSymbolInHighOrderBits 指定流中的数据符号是否按大端顺序排列。
ihc::usesPackets 公开流接口上的startofpacketendofpacket边带信号。
ihc::usesEmpty

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

ihc::usesReady 控制是否存在就绪信号。
表 11.   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)startofpacketendofpacket信号的阻塞写入。
void write(T data, bool sop, bool eop, int empty) 仅当设置了usesPackets<true>usesEmpty<true> 时可用。

通过带外startofpacketendofpacketempty信号的阻塞写入。

bool tryWrite(T data) 从组件来的非阻塞写调用。返回值表示写入是否成功。
bool tryWrite(T data, bool sop, bool eop)

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

通过带外startofpacketendofpacket信号的非阻塞写入。

返回值表示写入是否成功。即,当HLS组件尝试写入流的同时,下游接口正在将ready信号拉高。

bool tryWrite(T data, bool sop, bool eop, int empty) 仅当设置了usesPackets<true>usesEmpty<true> 时可用。

通过带外startofpacketendofpacketempty信号的非阻塞写入。返回值表示写入是否成功

T read() 从测试台使用阻塞读调用来从组件读回数据。
T read(bool &sop, bool &eop)

仅当设置了usesPackets<true>时有效。

从测试台使用阻塞读调用,通过带外startofpacketendofpacket信号从组件读回数据。
T read(bool &sop, bool &eop, int &empty) 仅当设置了usesPackets<true>usesEmpty<true>时可用。

从测试台使用阻塞读调用,以带外startofpacketendofpacketempty 信号从组件读回数据。