0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Vitis HLS中使用C语言代码创建AXI4-Lite接口

YCqV_FPGA_EETre 来源:搜狐网 作者:搜狐网 2020-09-13 10:04 次阅读

在本教程中,我们将来聊一聊有关如何在 Vitis HLS 中使用 AXI4-Lite 接口创建定制 IP 的基础知识。

注:在 Vivado HLS 中使用 AXI 创建 IP 的过程与使用 Vitis HLS 的过程不同。如果您想要在 Vivado HLS 中创建 AXI IP,请参阅UG902。

https://china.xilinx.com/support/documentation/sw_manuals/xilinx2020_1/c_ug902-vivado-high-level-synthesis.pdf

AXI4-Lite 属于基本 AXI 通信协议。它常用于简单的低吞吐量存储器映射通信(例如,往来于控制寄存器和状态寄存器的通信)。

如上图所示,AXI4-Lite 接口可设置为只读(仅包含 2 条读取通道)或只写(仅包含 3 条写入通道)。

在本教程中,我们将创建以下 IP,并使用 s_axi_BUS_A 作为我们的 AXI4-Lite 接口:

本教程结束时,您将能够

了解在 Vitis HLS 中创建 AXI4-Lite 接口的相关基础知识。

了解 Vitis HLS 中的编译指示相关信息,此类编译指示用于定义所使用的 AXI 接口。

打开 AXI4-Lite 设计示例

在 Vitis HLS 中提供了 AXI4-Lite 的设计示例。要打开 AXI4-Lite 的设计示例,请遵循以下步骤进行操作:

1. 打开 Vitis HLS GUI。在首页屏幕中,选择“克隆示例 (Clone Examples)”选项以便从 GitHub 复制 Vitis HLS 设计示例:

2. 在弹出选项卡中,选择示例的保存位置,然后单击“确定 (OK)”:

3. 在下一个屏幕中,设计示例将显示在左下角。选中“HLS 微教程 (HLS Tiny Tutorials)”和“工作树结构 (Working Tree)”旁的箭头即可查看所有可用示例。

4. 向下滚动,找到 interface_axi_lite 示例。右键单击文件夹名称,然后选中“运行并打开 HLS 工程 (Run and Open HLS Project)”选项。

5. 完成此操作后,将在左侧选项卡中打开此工程。双击 example.cpp 和 example_test.cpp 以查看源代码和测试激励文件。

源代码详解

此示例包含 2 个主要文件:

Example.cpp - 此代码将综合到 RTL 中以创建“简介”中所示的 IP。此 IP 将与 Vivado Design Suite 中的其它 IP 相结合,并最终被放置到您的硬件上。

Example_test.cpp - 此测试激励文件将用于确保 example.cpp 按期望方式运行。Example.cpp 算法将通过如下方式进行检查:将该算法的输出与测试激励文件中执行的“期望数据 (golden data)”计算结果进行比较。只要黄金数据与 example.cpp 的返回结果相匹配,HLS 中的测试激励文件就会返回 0。

选中左侧列中“源代码 (Source)”下的 example.cpp 即可打开源代码。接下来我们来详细看下代码:

函数实参

void example(char *a, char *b, char *c)

进入库之后首先可看到的是 example(); 函数。只要您熟悉基于 C 语言的设计,就不难发现,通过形参(如上述示例中的 char *a、char *b 和 char*c)即可瞬间执行所有输入和输出操作。

在 RTL 设计中,数据通过端口进出 IP。这些端口可使用特定 I/O 协议(例如,AXI4-Lite、AXI4-Stream 等)来进行操作,这样即可保证 IP 块之间能够进行标准化的通信。

对于进出 IP 的每一条数据,都应将其指定为主源文件中的一个独立函数实参。稍后,该函数实参将被综合成硬件 (RTL) 中的一个“端口”。

注:端口实际上可通过 3 种不同方法来创建,但本教程将主要讲解采用函数实参的方法。

端口衍生自:

指定的任意函数级协议。

函数实参。

全局变量(供顶层函数访问,在其作用域范围外定义)。

注:由于 AXI4-Lite 接口中的变量为函数实参,因此在 C 语言代码中无法为其指定默认值。因此,无法为 AXI4-Lite 接口中的任何寄存器指定默认值。这些寄存器可通过 config_rtl 命令进行复位来实现,但不能为其指定任何其它默认值。(请参阅控制复位行为以了解详细信息)。

https://china.xilinx.com/html_docs/xilinx2020_1/vitis_doc/programmingvitishls.html

接口编译指示

接下来,我们来看看编译指示接口。

首先逐一了解下其中每个组件:

#pragma HLS INTERFACE s_axilite port=a bundle=BUS_A

#pragma HLS INTERFACE s_axilite port=b bundle=BUS_A

#pragma HLS INTERFACE s_axilite port=c register bundle=BUS_A

#pragma HLS INTERFACE s_axilite port=return bundle=BUS_A

我们需要把 IP 的输入/输出定义为 s_axilite,这样才能使用 AXI4-Lite 协议。如果我们的代码中不包含此行,那么数据输入/输出将综合到基本连线中,并且将不含关联的握手信号。在此情况下,输入将保持稳定状态直至执行读取输入操作为止,一旦未谨慎执行此操作,就可能导致错误。

接口编译指示格式如下:

#pragma HLS interface port= (register) bundle=

其中:

:用于指定函数实参的接口协议模式。在此例中,我们选择的是 s_axilite。

port=:用于指定 INTERFACE 编译指示所应用到的函数实参名称。

(register):这是可选关键字,用于寄存(即存储)信号和所有关联的协议信号。它会导致信号保持直至至少完成函数执行的最后一个周期为止。

bundle=:此关键字支持您将端口信号手动组合到单一数据总线内。如果函数返回指定为 AXI4-Lite 接口(即代码示例中的第 25 行),那么所有数据端口都将被自动捆绑到单一总线中。如果未在此处明确提供捆绑名称,那么 Vitis HLS 将使用默认捆绑名称control。当使用其它器件(例如,CPU)来配置和控制块的启动和停止操作时,这是常见的做法。

s_axilite port=return:用于设置类型为 s_axilite 的函数实参,端口名称“return”将在 IP 块中创建中断信号。您可通过 AXI4-Lite 接口和 C 语言驱动程序文件来完成中断编程。如需了解更多信息,请参阅此处

https://china.xilinx.com/html_docs/xilinx2020_1/vitis_doc/programmingvitishls.html#auo1539734222936

注:如果任意顶层函数实参指定为 AXI4-Lite 接口,则函数返回也必须指定为 AXI4-Lite 接口。

注 2:默认情况下,HLS 会为分组到同一个 AXI4-Lite 接口的每个端口分配地址。Vitis HLS 在C 驱动程序文件(如下链接)中提供了分配的地址。要显式定义地址,可使用 offset 选项。在 AXI4-Lite 接口中,Vitis HLS 保留地址 0x0000 到 0x000C,用于块级 I/O 协议信号和中断控制。

https://china.xilinx.com/html_docs/xilinx2020_1/vitis_doc/programmingvitishls.html#auo1539734222936

函数主体

*c += *a + *b;

在该函数中,可以精确定义希望此 IP 执行的操作,此 IP 将导入 2 个值(a 和 b)并将结果 (c) 存储在寄存器中。为测试功能,测试激励文件将为 a 和 b 提供 example() 函数,并将其与自己计算 a+b 所得的值进行比较。如果结果相匹配,那么测试激励文件应始终返回 0,并且 c 仿真即可通过。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    7635

    浏览量

    148452
  • C语言代码
    +关注

    关注

    0

    文章

    10

    浏览量

    9120

原文标题:开发者分享 | Vitis HLS 中的 AXI4-Lite 简介-上

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Zynq中AXI4-LiteAXI-Stream功能介绍

    Zynq中AXI4-Lite功能 AXI4-Lite接口AXI4的子集,专用于和元器件内的控制寄存器进行通信。AXI-Lite允许构建简单
    的头像 发表于 09-27 11:33 8171次阅读
    Zynq中<b class='flag-5'>AXI4-Lite</b>和<b class='flag-5'>AXI</b>-Stream功能介绍

    创建AXI Sniffer IP以在Vivado IP Integrator中使用教程

    在某些情况下,通过嗅探 AXI 接口来分析其中正在发生的传输事务是很有用的。在本文中,我将为大家演示如何创建基本 AXI4-Lite Sniffer IP 以对特定地址上正在发生的读写
    发表于 07-08 09:35 826次阅读

    可以在EDK中使Axi4Stream接口/总线吗?

    你好,我正在EDK中使axi4stream。有人可以帮助我如何使用通过Vivado高级综合(HLS)生成的ap_fifo / axi4stream
    发表于 02-28 13:47

    vivado hls axi接口问题

    你好!如果我想使用vivado hls来合成具有axi接口代码,是否有必须遵循的标准编码风格?
    发表于 04-21 10:23

    AXI4-lite端口可以保持未连接状态吗?

    我必须通过AXI4-lite接口配置Jesd204b核心,或者我可以简单地将AXI4-lite端口保持未连接状态(强制接地)?Jesd204核心示例top没有提供有关AXI4-Lite
    发表于 05-15 09:30

    【正点原子FPGA连载】第四章呼吸灯实验-领航者ZYNQ之HLS 开发指南

    ap_none接口的IP核。在本章我们将通过呼吸灯实验,来学习如何使用Vivado HLS工具生成一个带有AXI4-Lite总线接口的IP核,并学习Vivado
    发表于 10-10 17:01

    使用Vitis HLS创建属于自己的IP相关资料分享

    HLS 采用 CC++ 描述并将它们转换为自定义硬件 IP,完成后我们就可以在 Vivado 项目中使用该IP。Vitis
    发表于 09-09 16:45

    将DSP设计融入嵌入式系统的AXI4-Lite接口

    了解System Generator如何提供AXI4-Lite抽象,从而可以将DSP设计融入嵌入式系统。 完全支持包括集成到IP目录,接口连接自动化和软件API。
    的头像 发表于 11-27 07:24 3018次阅读

    如何创建基本AXI4-Lite Sniffer IP以对特定地址上正在发生的读写传输事务进行计数

    这将创建一个附带 BD 的 Vivado 工程,此 BD 包含 AXI VIP (设置为 AXI4-Lite接口) 和 AXI GPIO
    的头像 发表于 04-30 16:24 2101次阅读
    如何<b class='flag-5'>创建</b>基本<b class='flag-5'>AXI4-Lite</b> Sniffer IP以对特定地址上正在发生的读写传输事务进行计数

    如何导出IP以供在Vivado Design Suite中使用?

    AXI 基础第 6 讲 - Vitis HLS 中的 AXI4-Lite 简介中,使用 C 语言
    的头像 发表于 04-26 17:32 3565次阅读
    如何导出IP以供在Vivado Design Suite<b class='flag-5'>中使</b>用?

    AXI4 、 AXI4-LiteAXI4-Stream接口

    AXI4 是一种高性能memory-mapped总线,AXI4-Lite是一只简单的、低通量的memory-mapped 总线,而 AXI4-Stream 可以传输高速数据流。从字面意思去理解
    的头像 发表于 07-04 09:40 6099次阅读

    何在Vitis HLS中使用C语言代码创建AXI4-Lite接口

    您是否想创建自己带有 AXI4-Lite 接口的 IP 却感觉无从着手?本文将为您讲解有关如何在 Vitis
    的头像 发表于 07-08 09:40 1294次阅读

    使用AXI4-LiteVitis HLS创建的IP连接到PS

    AXI 基础第 6 讲 - Vitis HLS 中的 AXI4-Lite 简介中,使用 C 语言
    发表于 08-02 09:43 629次阅读
    使用<b class='flag-5'>AXI4-Lite</b>将<b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b><b class='flag-5'>创建</b>的IP连接到PS

    自定义AXI-Lite接口的IP及源码分析

    在 Vivado 中自定义 AXI4-Lite 接口的 IP,实现一个简单的 LED 控制功能,并将其挂载到 AXI Interconnect 总线互联结构上,通过 ZYNQ 主机控制,后面对 Xilinx 提供的整个
    发表于 06-25 16:31 2042次阅读
    自定义<b class='flag-5'>AXI-Lite</b><b class='flag-5'>接口</b>的IP及源码分析

    何在Vitis HLS GUI中使用库函数?

    VitisHLS 2023.1 支持新的 L1 库向导,本文将讲解如何下载 L1 库、查看所有可用功能以及如何在 Vitis HLS G
    的头像 发表于 08-16 10:26 618次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>Vitis</b> <b class='flag-5'>HLS</b> GUI<b class='flag-5'>中使</b>用库函数?