这是针对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_noneap_ctrl_hsap_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_outstanding=<int> \
max_read_burst_length=<int> max_write_burst_length=<int>

其中各部分含义:

  • < mode>:为函数参数、函数使用的全局变量或block-level control protocols指定接口协议模式。有关这些不同模式的详细描述,请参阅Vivado Design Suite用户指南中的“界面综合参考”:高级综合(UG902)。模式可以指定为以下方式之一:
    ap_none:没有协议。接口是一个数据端口。
    ap_stable:没有协议。接口是一个数据端口。Vivado HLS假设数据端口在重置后总是稳定的,这允许内部优化来删除不必要的寄存器。(这个没懂什么意思,打算再去看看ug902)
    ap_vld:(valid)实现一个与数据端口相关联的端口,以指示数据何时可供读写。
    ap_ack:(acknowledge)实现一个与数据端口相关联的端口,以确认数据已被读写。
    ap_hs:实现与数据端口关联的valid端口和acknowledge端口。以提供双向握手信号,指示数据何时对读写有效,以及确认数据已被读写。
    ap_ovld:实现与输出数据端口关联的valid端口,以指示数据何时可以读写。
    IMPORTANT!: Vivado HLS使用模式ap_none实现输入参数或任何读/写参数的输入一半。
    ap_fifo:使用标准的FIFO接口实现端口。使用数据输入和输出端口以及相关的active-Low FIFO空端口和满端口。(这句英文不好翻译,大致意思就是为流水型的数组接口,额外配置了FIFO模块)
    Note:只能在读参数或写参数上使用此接口。ap_fifo模式不支持双向读/写参数。
    此外,官方网站的pragma HLS stream中写道:

    意思是当顶级函数的参数指定为接口类型ap_fifo时,该数组自动实现为流格式
    ap_bus:实现指针和按引用传递端口作为总线接口。
    ap_memory:将数组参数实现为标准RAM接口。如果在Vivado IP integrator中使用RTL设计,则内存接口将显示为离散的端口。
    bram:将数组参数实现为标准RAM接口。如果在Vivado IP integrator中使用RTL设计,那么内存接口将作为单个端口出现。
    axis:将所有端口实现为一个AXI4-Stream接口。
    s_axilite:将所有端口实现为一个AXI4-Lite接口。Vivado HLS在导出RTL过程中生成一组相关的C驱动程序文件。
    m_axi:实现所有端口作为一个AXI4接口。可以使用config_interface命令指定32位(默认)或64位地址端口,并控制任何地址偏移量。
    (AXI相关我打算后面去看ug902文档,先推荐:推荐看的CSDN文档)
    这篇文档中介绍了:
    AXI总线和AXI接口以及AXI协议的概念:
    总线、接口和协议,这三个词常常被联系在一起。总线是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由由数据线、地址线、控制线等构成。接口是一种连接标准,又常常被称之为物理接口。协议就是传输数据的规则。
    AXI总线介绍:
    AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分。AXI的第一个版本出现在AMBA3.0,发布于2003年。当前的最新的版本发布于2010年。
    AXI4:主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;
    AXI4-Lite:是一个简单地吞吐量地址映射性通信总线,占用很少的逻辑单元;
    AXI4-Stream:面向高速流数据传输,去掉了地址项,允许无限制的数据突发传输规模;
    AXI4总线分为主、从两端,两者间可以连续的进行通信。

    ap_ctrl_none:没有块级I/O协议。
    注意:使用ap_ctrl_none模式可能会阻止使用C/RTL co-simulation 验证设计。
    ap_ctrl_hs:实现一组块级控制端口,以启动设计操作,并指示设计何时空闲、完成和准备好接受新的输入数据。
    注意:ap_ctrl_hs模式是默认的块级I/O协议。
    ap_ctrl_chain:实现一组块级控制端口,以启动设计操作、继续操作,并指示设计何时空闲、完成和准备好接受新的输入数据。注意:(和ap_ctrl_hs的区别)ap_ctrl_chain接口模式类似于ap_ctrl_hs,但是它提供了一个额外的输入信号ap_continue来apply back pressure。Xilinx建议在将Vivado HLS块链接在一起时使用ap_ctrl_chain块级I/O协议。

  • port=< name>:指定接口pragma应用到的函数参数、函数返回值或全局变量的名称。
    提示:可以将块级I/O协议(ap_ctrl_none、ap_ctrl_hs或ap_ctrl_chain)分配给函数返回值的端口,如:

#pragma HLS INTERFACE ap_ctrl_none port = return
  • bundle=< string>:将函数参数分组到AXI接口端口。默认情况下,Vivado HLS将指定为AXI4-Lite (s_axilite)接口的所有函数参数组到单个AXI4-Lite端口。类似地,所有指定为AXI4 (m_axi)接口的函数参数都被分组到一个AXI4端口中。该选项将具有相同bundle=< string>的所有接口端口显式地分组到相同的AXI接口端口中,并将RTL端口命名为< string>指定的值。

  • register:一个可选的关键字,用于寄存信号和任何相关协议信号,并使信号至少持续到函数执行的最后一个周期。此选项适用于以下界面模式:

    提示:config_interface命令的-register_io选项可以全局控制寄存所有顶层函数的输入/输出。有关更多信息,请参阅Vivado Design Suite用户指南:高级合成(UG902)。

  • register_mode= <forward|reverse|both|off>:与register关键字一起使用,该选项指定是在forward路径(TDATA和TVALID)、reverse路径、both路径 (TDATA, TVALID和TREADY)、或都不(off),放置寄存器。默认的register_mode是both。AXI-Stream(axis) side-channel signals被认为是数据信号,并且每当TDATA被register时它就会被register。

  • depth=< int>:指定testbench要处理的最大样本数目。此设置指示Vivado HLS为RTL co-simulation创建的verification adapter 中所需的FIFO的最大尺寸。提示:虽然深度通常是一个选项,但是对于m_axi接口来说它是必需的。

  • offset=< string>:控制AXI4- lite (s_axilite)和AXI4 (m_axi)接口中的地址偏移量。
    对于s_axilite接口,<string>指定寄存器map中的地址。
    对于m_axi接口,<string>指定了以下值:
    direct:生成一个标量输入偏移端口。
    slave:生成一个偏移端口,并自动将其映射到AXI4-Lite从接口。
    off:不生成偏移端口。
    提示:config_interface命令的-m_axi_offset选项全局控制了设计中所有M_AXI接口的偏移端口。

  • clock=< name>:是可选的,只用于s_axilite模式。这定义了接口要使用的时钟信号。默认情况下,axis - lite接口时钟与系统时钟相同。此选项用于为axis - lite (s_axilite)接口指定单独的时钟。
    提示:如果使用bundle选项将多个顶级函数参数分组到一个axis - lite接口中,那么只需要在一个bundle成员上指定时钟选项。

  • num_read_outstanding=:对于AXI4 (m_axi)接口,这个选项指定在设计停止之前,在没有响应的情况下,可以向AXI4总线发出多少读取请求。这显示了设计之中的内部存储——一个FIFO的大小:num_read_outstanding*max_read_burst_length*word_size

  • num_write_outstanding=:对于AXI4 (m_axi)接口,这个选项指定在设计停止之前,在没有响应的情况下,可以向AXI4总线发出多少写请求。这显示了设计之中的内部存储——一个FIFO的大小:num_write_outstanding*max_write_burst_length*word_size

  • max_read_burst_length=:对于AXI4 (m_axi)接口,这个选项指定了在突发传输期间所读取的数据值的最大的数量。

  • max_write_burst_length=:对于AXI4 (m_axi)接口,这个选项指定在突发传输期间写入的数据值的最大数量。

  • name=:此选项用于根据您自己的意愿重命名端口。生成的RTL端口将使用这个名称。

例子1

在本例中,两个函数参数都是使用AXI4-Stream接口实现的:

void example(int A[50], int B[50]) {//Set the HLS native interface types#pragma HLS INTERFACE axis port=A#pragma HLS INTERFACE axis port=Bint i;for(i = 0; i < 50; i++){B[i] = A[i] + 5;}
}

例子2

下面关闭块级I/O协议,并赋给函数返回值:

#pragma HLS interface ap_ctrl_none port=return

函数参数InData被指定为使用ap_vld接口,并且还表明输入应该被寄存:

#pragma HLS interface ap_vld register port=InData

例子3

此示例定义了顶级transpose函数的端口的接口标准。注意使用bundle=选项对信号进行分组。

// TOP LEVEL - TRANSPOSE
void transpose(int* input, int* output) {#pragma HLS INTERFACE m_axi port=input offset=slave bundle=gmem0#pragma HLS INTERFACE m_axi port=output offset=slave bundle=gmem1#pragma HLS INTERFACE s_axilite port=input bundle=control#pragma HLS INTERFACE s_axilite port=output bundle=control#pragma HLS INTERFACE s_axilite port=return bundle=control#pragma HLS dataflow

pragma HLS interface 端口综合相关推荐

  1. pragma HLS stream语法

    默认情况下,数组变量被实现为RAM: 顶层函数数组参数被实现为RAM接口端口. 通用数组被实现为RAM,用于读写访问. 在涉及 DATAFLOW optimizations(数据流优化)的子函数中,数 ...

  2. HLS高层次综合生成yolov2加速器IP核笔记int16

    步骤整理中

  3. HLS pragma

    文章目录 Vivado HLS Pragmas by Type 1. Kernel Optimization 1.1 pragma HLS allocation 1.2 pragma HLS cloc ...

  4. HLS第二十八课(UG871,接口综合)

    接口的返回值,入口参数,都是需要用pragma约束的. 首先来回顾一下接口. a clock and reset have been added to the design: ap_clk and a ...

  5. Vivado HLS #pragma 学习笔记(一)

    https://www.xilinx.com/html_docs/xilinx2018_2/sdaccel_doc/hls-pragmas-okr1504034364623.html 数据精度 支持任 ...

  6. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  7. HLS:矩阵乘法单元设计与SDK测试

    目录 一.引言 二.程序框架 三.初步设计 四.报告分析 五.优化操作 六.接口优化 七.上板测试 八.补充部分 九.时间与参考 一.引言 矩阵乘法,涉及数组优化.循环优化和接口优化等.是一个学习HL ...

  8. HLS:卷积运算单元设计与SDK测试

    目录 一.引言 二.概念 三.程序 四.优化 五.测试 六.补充 一.引言 涉及内容包括:多位宽并行,动态定点数运算,设置LOOP_TRIPCOUNT来性能分析等. 二.概念 1.功能定义. 为了让卷 ...

  9. Vitis初探—1.将设计从SDSoC/Vivado HLS迁移到Vitis上

    〇.前言 2020.11.25日,Xilinx更新了Vitis2020.2版本.正好之前报名里Xilinx的自适应计算挑战赛,比赛要求使用Vitis平台进行开发,所以今天趁着新版本发布把我之前参加DA ...

  10. Vivado HLS加速卷积层运算

    源代码链接:https://github.com/happyday22/HLS_accelerator 1.Introduction 卷积神经网络(CNN)主要由卷积层.池化层.全连接层和激活层等网络 ...

最新文章

  1. 驰骋工作流程引擎案例-水质检测工作流程设计开发实现过程
  2. 二叉树的深搜(DFS)与广搜(BFS)
  3. 数据导入和整理模块---pandas
  4. 关于Xcode 7.3 7.3.1 断点 卡死 无限菊花
  5. Hadoop生态Zookeeper安装
  6. 苏大微型计算机原理与应用题库,苏州大学计算机原理及应用考研复习题.pdf
  7. python在统计专业的应用_Python:使用Counter进行计数统计
  8. mysql安装 linux rpm_linux MySQL5.7 rpm安装
  9. Github 爆火!程序员疯抢的 Java 面试宝典(PDF 版)限时开源
  10. c51汇编语言教程,汇编语言入门视频教程
  11. gs地图开发_中国地图全图高清版大图审图号GS(2016)2923号
  12. java——配置环境变量
  13. java :工资计算
  14. centos7.5系统动态扩容磁盘及系统挂载未分配硬盘空间
  15. 图像处理-图像增强(一)
  16. HTML语言常用英语,学习html语言应该掌握的几组英文单词
  17. Synchro Arts 5折优惠即将结束
  18. 基于javaweb基于java的管理系统毕业设计与开发源码
  19. eclipse+tomcat环境配置
  20. 各类软件开发文档的英文缩写

热门文章

  1. 2019银保监计算机类真题,2019中国银保监会招聘考试全真模拟卷(计算机类)
  2. php邮箱发送,PHP的邮箱发送
  3. java broken pipe_java Broken pipe 几种原因
  4. 信息与计算机科学学校排名,2021中国信息与计算科学专业大学排名 最好的高校排行榜...
  5. 电大本科计算机科学与技术,中央电大开放本科计算机科学与技术专业微计算机技术试题_0701...
  6. 洛谷 p4234 最小差值生成树
  7. Java软件工程师职位分析
  8. 独立院校转设,高考新生何去何从|转设对新生有哪些影响
  9. leetcode解题方案--013--Roman to Integer
  10. Notes V11内存不足?