开发者分享|Vitis库流程:视觉L1重映射函数Zynqbaremetal设计实例

FPGA开发圈 2023-07-07 12:04

本文作者:AMD 高级产品应用工程师  Kevin Morris


这篇博客展示了在 AMD Zynq 设计中,如何用 Vitis Vision Library 中的函数(remap)导出一个 IP,并基于此 IP 构建一个的硬件平台(XSA),进而基于此平台来运行嵌入式应用。

remap 函数是指从图像的某个位置获取像素信息,并将这些像素信息重新放置到另一个图像的另一个位置。在此示例中,设计将使用 128x128 像素的灰度输入图像,然后在输出端将其水平翻转。


测试采用以下设置:

  • 版本:Vivado 和 Vitis 2023.1

  • 操作系统:Ubuntu 20.04.1 LTS

  • 硬件:Zynq UltraScale+ ZCU104 评估板 (xczu7ev-ffvc1156-2-e)


1

//   创建 Vitis HLS IP 项目

在本节中,我们将利用 Vitis Vision L1 库提供的预先存在的 Makefile 来创建和导出 remap 函数,以便在 Vivado 项目中使用。


打开终端选择一个适合的路径位置,并将最新的 Vitis 库克隆到该位置:

git clone https://github.com/Xilinx/Vitis_Libraries


跳转至 Vision L1 中名为 remap 的函数的目录下:

cd Vitis_Libraries/vision/L1/examples/remap


注:专门就 Vision 库而言,需要 OpenCV 库才能编译函数。请使用下面链接中的指令编译 OpenCV,并在运行下一步之前设置所需的环境变量。
https://support.xilinx.com/s/article/Vitis-Libraries-Compiling-and-Installing-OpenCV?language=en_US

设置 Vitis/Vivado 工具,然后运行 HLS 项目脚本来构建 HLS 设计,并用该设计将函数作为 Vivado IP 导出。

PLATFORM——这是评估板平台名称,通常可以通过 PLATFORM_REPO_PATHS 环境变量或在 /base_platforms 中的 Vitis 安装目录内找到该名称。


VIVADO_SYN——此参数通过 export_design 流程运行 Vitis HLS 项目,该流程提供项目的压缩文件作为 Vivado IP。

您还可以打开 Vitis HLS 项目,通过命令 vitis_hls -p remap.prj 查看结果和报告。


注:由于此 Vitis HLS 项目来自 Makefile,其并不包括在 GUI 环境下直接重新运行 C Simulation 或 Cosimulation 所需的标志和参数。您可以检查 remap 文件夹中的 run_hls.tcl 文件,以查看仿真所需要添加的必要标志和参数。


重新运行上述指令,添加适当的变量,以便从命令行运行仿真(例如:CSIM=1 和/或 COSIM=1)。


2

//   创建 Vivado 平台项目

本节将展示如何使用上一节中创建的 Vitis HLS IP 来创建一个以 ZCU104 为目标器件的自定义平台。

将上一节中创建的导出 IP 复制到它自己的存储库位置,然后打开 Vivado。

按照下列步骤创建项目并对其进行设置:

选择 Create Project,点击 Next:

  • 输入项目名称:remap_vivado,点击 Next

  • 选择 RTL 项目,此时不要指定源文件,点击 Next

  • 在评估板选项卡,选择 Zynq UltraScale+ ZCU104 评估板,点击 Next,然后选择 Finish

打开项目后:

  • 在左侧的流程导航器中选择 Project Manager > Settings

  • 选择 IP > Repository,点击 + 并在此添加 ip_repo 文件夹的位置,然后关闭窗口


我们现在可以添加自定义 IP 及其余的模块:

  • 在左侧的流程导航器中,选择 IP Integrator > Create Block Design

为原理图选择描述性名称,或保留其默认值,然后选择 OK

  • 选择 +(添加 IP),并选择 Remap_accel 模块

  • 选择 +(添加 IP),并选择 Zynq UltraScale+ MPSoC 模块

  • 点击窗口顶部横幅上的 Run Block Automation。

确保勾选 Apply Board Preset,然后选择 OK


现在,我们将配置 MPSoC 模块,使其具有合适的接口,能够与 IP 进行通信:

双击图中的 MPSoC 模块,并做出以下修改。我们将关闭本设计中不会用到的一些功能。

更改这些设置后,选择 OK 将这些变更应用到 MPSoC 模块上。


我们现在可以使用连接自动化功能将这些模块彼此连接:

  • 点击 Run Connection Automation

    勾选全部自动化,然后选择 OK

  • 点击 Run Connection Automation(第二次运行会把 IP 其它的 AXI 接口也链接起来,这些接口是IP互联接口的一部分

    勾选全部自动化,然后选择 OK


此刻的设计应类似于下图(您可以点击工具栏上的“Regenerate”,可自动对各个模块进行重新排列):


检查 Address Editor 选项卡。请注意,默认自动分配地址,AXI 和 IP 控件的地址空间设置为 0x0 和 0xA000_0000。



返回至图表选项卡,选择工具栏上的 Validate Design 按钮,或者在 Vivado 的主窗口中使用 Tools > Validate Design。确保设计无误。


在 Sources 窗口的 Sources 选项卡中,展开 Design Sources ,右键点击当前模块设计,选择 Create HDL Wrapper(选择 Let Vivado manage wrapper and auto-update),然后点击 OK。


在左侧的 Flow Navigator 中,选择 Generate Block Design,保留默认选项,然后点击 Generate。您可以在 Design Runs 选项卡中监视运行状态。

完成上述步骤后,点击 Generate Bitstream,选择 Yes/OK 来运行生成比特流的必要流程。完成创建后,您可以点击 Cancel 关闭打开的对话框,结束操作。


现在我们可以将硬件平台导出为 XSA 格式,以便 Vitis 与我们的应用一起使用。

在顶部工具栏中选择 File > Export > Export Hardware

  • 选择 Next

  • 选择 Include bitstream,点击 Next

  • 设置 XSA 文件名:remap_platform,点击 Next,然后点击 Finish。输出的 XSA 文件默认保存在项目的根目录


3

//   创建 Vitis 应用项目

现在我们已经从 Vivado 导出了一个平台 XSA,我们可以使用这个文件来定义我们的平台,并创建一个应用程序来在平台内通信和运行 IP。


打开 Vitis,然后导入 XSA:

vitis -workspace remap_ws


此操作会打开工作空间为 remap_ws 的 Vitis GUI。

  • 创建应用项目

  • 选择 Next
    从顶部的选项卡中选择 Create a new platform from hardware (XSA),然后浏览上一节的 remap_platform.xsa 文件,接着选择 Next

  • 设置应用项目名称:remap_project,选择将 psu_cortexa53_0 用作处理器,然后选择 Next

  • 保留默认域信息(Standalone OS),然后选择 Next

  • 选择“Empty Application (C)”模板,然后选择 Finish


本博文包括参考文件,可供下载(点击阅读全文查看参考文件)。可将这些文件解压到项目的根目录中。


在“Explorer”窗口展开 remap_project_system > remap_project > src,右键点击 src,选择 Import Sources,浏览保存参考文件的目录,选择并导入下列文件:

  • remap_example_app.c

  • remap_input_image.h

  • remap_x_map.h

  • remap_y_map.h


文件导入后,可随时检查 remap_example_app.c 文件,以查看应用正在执行的操作。总之,应用程序用 DDR 内存中的输入图像和映射数组数据配置 IP,并指示 IP 处理数据并将其写回 DDR 内存。


现在,我们可以构建平台并编译应用,以使其直接在 ZCU104 板上运行。

在助手窗口中:

  • 选择 remap_platform [Platform],并使用 Build 按钮(锤子图标),等待 Build Finished 消息出现

  • 选择 remap_project_system [System],并使用 Build 按钮(锤子图标),等待 Build Finished 消息出现


完成构建过程可能需要一些时间,时间长短取决于您的系统。


4

//   在硬件上运行应用 

现在,我们可以运行设计并验证 remap 函数的运行。


在助手窗口中,选择 remap_project_system [System],使用绿色运行图标,选择 Launch Hardware。


 一旦完成设计运行,且硬件仍在运行时,选择 XSCT 窗口。如果窗口未打开,选择 Vitis > XSCT Console。


在控制台运行以下命令:

xsct% source remap_memory_copy.tcl


注:此脚本是参考文件的组成部分。您也可以指文件的完整路径,或使用“cd”跳转至适当的目录。


此脚本将读取内存中“input_buffer”和“output_buffer”的数据,并将数据分别保存为 input.data和 output.data。在继续操作之前等待完成消息。


在创建完 input.data 文件和 output.data 文件后,您现在可以通过运行 Python 脚本来验证 remap 函数是否已成功执行图像的水平翻转。运行下列 Python 脚本:

python3 remap_convert_image.py


注:运行此脚本需要安装“numpy”和“Pillow” Python 包,通常使用“pip install numpy”和“pip install Pillow”命令来安装这些包。


此脚本将输出两种文件,一个是 input.png,另一个是 output.png,表示发送到硬件的输入图像,以及通过 IP 传递后的输出图像。


【预约研讨会】如何利用最新Vitis HLS提高任务级并行性?



FPGA开发圈 这里介绍、交流、有关FPGA开发资料(文档下载,技术解答等),提升FPGA应用能力。
评论
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 71浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 85浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 88浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 109浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 71浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 51浏览
  •         霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子
    锦正茂科技 2024-12-10 11:07 64浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 84浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 50浏览
  •         在有电流流过的导线周围会感生出磁场,再用霍尔器件检测由电流感生的磁场,即可测出产生这个磁场的电流的量值。由此就可以构成霍尔电流、电压传感器。因为霍尔器件的输出电压与加在它上面的磁感应强度以及流过其中的工作电流的乘积成比例,是一个具有乘法器功能的器件,并且可与各种逻辑电路直接接口,还可以直接驱动各种性质的负载。因为霍尔器件的应用原理简单,信号处理方便,器件本身又具有一系列的du特优点,所以在变频器中也发挥了非常重要的作用。  &nb
    锦正茂科技 2024-12-10 12:57 76浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 79浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 141浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 102浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦