页面加载中,请稍候
来源:电子电路开发学习发布时间:2022-12-055168浏览
询问 AIZYNQ系列是Xilinx最近几年推出的多核异构SoC,集成了FPGA和ARM处理器,ARM部分是双核ARM Cortex-A9处理器,双核可以同时对称使用,还可以非对称使用。

基于OpenAMP软件架构,可以实现一个ARM核运行Linux系统,而另一个ARM核运行RTOS,如FreeRTOS,或者裸机跑,RTOS和FPGA端进行低延时的高速数据交换,满足实时任务需求,而跑Linux的ARM核可以作为上层应用,处理更复杂的业务逻辑。

本文分享基于OpenAMP框架的双核ARM通信案例的使用说明,CPU0(Master)运行Linux系统,CPU1(Remote)运行裸机或FreeRTOS程序。CPU0使用remoteproc加载CPU1程序,并对CPU1进行配置。

图 1
OpenAMP详细开发说明可查阅官方文档:
https://china.xilinx.com/content/dam/xilinx/support/documentation/sw_manuals/xilinx2021_2/ug1186-zynq-openamp-gsg.pdf
本文基于创龙科技 Xilinx Zynq-7010/7020平台进行案例测试。

图 2
产品资料获取
(案例源码、用户手册、核心板硬件资料、产品规格书)
可识别下方二维码获取

1 01
echo_test案例
案例功能:CPU0使用RPMsg向CPU1发送数据,CPU1接收到数据后再使用RPMsg向CPU0回传数据。CPU0对回传的数据进行验证,并输出验证结果。
将CPU1裸机或FreeRTOS可执行文件复制到评估板文件系统“/lib/firmware/”目录下,并执行如下命令加载CPU1程序。
Target# echo echo_test.elf > /sys/class/remoteproc/remoteproc0/firmware
Target#echo start > /sys/class/remoteproc/remoteproc0/state

图 3
执行如下命令加载RPMsg驱动,并在“/dev/”目录下生成RPMsg设备节点。
Target#modprobe rpmsg_user_dev_driver

图 4
将CPU0应用程序可执行文件复制到评估板文件系统,并执行如下命令通过RPMsg与CPU1进行通信。
Target# ./echo_test

图 5
输入1,并按回车键进行测试。

图 6

图 7
输入2,并按回车键退出测试。

图 8
执行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state

图 9
2 1
matrix_multiply案例
案例功能:CPU0随机生成两个矩阵并使用RPMsg向CPU1发送数据,CPU1接收到数据后进行矩阵乘法运算,再使用RPMsg向CPU0回传运算结果,然后CPU0通过串口终端输出运算结果。
将CPU1裸机或FreeRTOS可执行文件复制到评估板文件系统“/lib/firmware/”目录下,并执行如下命令加载CPU1程序。
Target# echo matrix_multiply.elf> /sys/class/remoteproc/remoteproc0/firmware
Target# echo start > /sys/class/remoteproc/remoteproc0/state

图 10
执行如下命令加载RPMsg驱动,并在“/dev/”目录下生成RPMsg设备节点。
Target# modprobe rpmsg_user_dev_driver

图 11
将CPU0应用程序可执行文件复制到评估板文件系统,并执行如下命令通过RPMsg与CPU1进行通信。
Target#./mat_mul_demo

图 12
输入1,并按回车键进行测试。

图 13
输入2,并按回车键退出测试。

图 14
执行如下命令,停止CPU1程序。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state

图 15
3 01
内存分配说明
512MByte DDR容量版本核心板的内存地址分配如下:
表 1
名称
地址范围
范围大小
PSLinux
0~0x17FF FFFF
384MByte
PLMicroBlaze
0x1800 0000~0x18FF FFFF
16MByte
OpenAMP-remoteapp
0x1900 0000~0x19FF FFFF
16MByte
PL
0x1A00 0000~0x1FFF FFFF
96MByte
1GByte DDR容量版本核心板的内存地址分配如下:
表 2
名称
地址范围
范围大小
PSLinux
0~0x17FF FFFF
384MByte
PLMicroBlaze
0x1800 0000~0x18FF FFFF
16MByte
OpenAMP-remoteapp
0x1900 0000~0x19FF FFFF
16MByte
PL
0x1A00 0000~0x1FFF FFFF
96MByte
PSLinux
0x2000 0000~0x3FFF FFFF
512MByte
如需修改CPU1程序(OpenAMP-remote app)内存地址空间范围,可通过更改设备树文件tlz7x-easyevm-s.dts、资源表rsc_table.c及链接文件lscript.ld对内存地址空间进行重新分配。三者需同步修改并保持一致,以确保固件程序链接地址与设备树配置的elf_ddr_0对应。所使用的资源(内存和virtio设备资源)不能超出设备树文件配置的内存范围。

图 16设备树文件tlz7x-easyevm-s.dts配置

图 17设备树文件tlz7x-easyevm-s.dts配置

图 18CPU1程序资源表rsc_table.c配置

图 19CPU1程序链接文件lscript.ld配置
产品资料获取
(案例源码、用户手册、核心板硬件资料、产品规格书)
可识别下方二维码获取





新闻来源:电子电路开发学习,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!
2026-06-23
2026-06-14

2026-06-10