这是针对pragma HLS interface 语法的翻译笔记,可以作为原英文文档的辅助文档,原文地址是SDSoc Development Help
正文
在vivado HLS基于C的设计中,函数形式参数代表了输入和输出操作。但是在RTL设计中,必须设计接口来执行这些输入和输出操作,并且通常使用特定的I / O(输入-输出)协议进行操作。有关更多信息,请参考《Vivado Design Suite用户指南:高级综合(UG902)》中的“Ch.1 Manage Interface” 。(推荐参考:对ug902中manage interface部分的优质翻译)
INTERFACEpragma指定如何在接口合成期间依据函数定义创建RTL端口。
RTL实现中的端口派生自:
- 指定的任何函数级协议
- 函数参数
- 由顶级函数访问的,并且是在其作用域之外定义的全局变量
Function-level protocols(函数层级的协议)也称为block-level I/O protocols(块级I/O协议),用于提供信号来控制函数何时开始操作,并指示函数操作何时结束、空闲和准备好接受新的输入。函数级协议的实现:
- 由值指定为三种模式
ap_ctrl_none,ap_ctrl_hs或ap_ctrl_chain。其中的ap_ctrl_hs是默认的块级I / O协议。 - 与函数名相关联。
port-level (I/O) interface protocol(端口级I / O接口协议):可以为每个函数参数指定port-level (I/O) interface protocol(端口级I / O接口协议),如有效握手(ap_vld)或确认握手(ap_ack)。如果函数会返回一个值,则为顶层函数和函数返回中的每个参数创建端口级I/O接口协议。创建的默认I/O协议取决于C参数的类型。在使用块级IO协议启动块的操作后,使用端口级IO协议对数据进行序列输入和输出。
如果访问了全局变量,但所有读和写操作都是design的本地操作,即是在design中创建资源,那么在RTL中不需要I/O端口。如果全局变量是外部源或地址,则以类似的方式将其接口指定为标准函数参数。参见下面的示例。
当INTERFACEpragma用于子函数时,只能使用register选项。子函数不支持< mode>选项。
提示:Vivado HLS自动确定任何子函数使用的I/O协议。除了指定端口是否寄存外,您无法控制这些端口。
语法
将pragma放在函数内。
#pragma HLS interface <mode> port=<name> bundle=<string> \
register register_mode=<mode> depth=<int> offset=<string> \
clock=<string> name=<string> \
num_read_outstanding=<int> num_write_outstan

本文深入解析pragmaHLS接口语法,涵盖多种接口模式如ap_vld、ap_ack及AXI系列,详解如何在VivadoHLS中指定端口协议、寄存选项与深度配置,帮助读者掌握高效RTL设计技巧。
最低0.47元/天 解锁文章
3387





