本文作者: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 传递后的输出图像。
境外服务器资源被占满的原因和解决办法
如何保养油泵电机_油泵电机的日常保养
智能家居不可或缺的 Smart Sensor 解决方案(二)
倍捷连接器在亚洲市场持续耕耘 被广泛应用于重工及其他工业设备领域
吉利此次动力电池项目总投资300亿元,年产能42GWh
视觉L1重映射函数Zynq baremetal设计实例
如何连接系统保护IC以实现更高电流的应用
蒸汽拖把什么牌子好,清洁达人竭力推荐这几款
去耦电容越大越好吗,去耦电容值的选择
双向全双工VoIP对讲音频模块--SIP2402V
解析半导体蚀刻过程中的光学监测
水处理行业电能质量监测与治理系统解决方案
华为p50e配置参数详情 华为p50e什么时候上市
揭秘FACEBOOK未来的机器学习平台
意法半导体的100W和65W VIPerGaN功率转换芯片节省空间 提高消费电子和工业应用的能效
超值之选 RedmiBook14锐龙版火爆首卖中
中国芯片产业在全球处于什么位置?
苹果都把OLED屏作为发展方向了,其他厂商必然跟随
做成功的投资者,拒绝持续亏损,赚的金银钵满
电子设计教程: 电平转换电路