基于ZYNQ的双核启动与通信问题解决
1 处理器间的通信
为AMP 设计创建应用之前,您需要考虑应用如何进行通信(如有需要)。最简单的方法是使用片上存储器。Zynq SoC 配备256KB 的片上SRAM,可从以下四个源地址进行访问:
• 利用侦测控制单元(SCU)从任意内核进行访问;
• 利用SCU 通过AXI 加速器一致性端口(ACP)从可编程逻辑进行访问;
• 利用片上存储器(OCM)互联通过高性能AXI 端口从可编程逻辑进行访问;
• 也是利用OCM 从中央互联进行访问。
由于这些不同的访问源都能对片上存储器进行读写,因此尤为重要的一点是,在使用OCM 之前一定要首先详细了解其的运行方式。
既然OCM 有多个访问源,那么显然应该定义一个仲裁和优先级形式。由于侦测控制单元需要最低时延(SCU 既可以是处理器内核也可以是AXI ACP 接口),因此SCU 从这些访问源的读操作就具有最高优先级,紧接着是SCU 写操作,然后是OCM 互联读/ 写操作。用户可通过将片上存储器控制寄存器中的SCU 写操作的优先级设置为低来颠倒SCU 写操作和OCM 互联访问的优先级。
OCM 本身结构为128 位字,分成四个64KB 分区,并位于PS 地址空间的不同位置。初始配置下,前三个64KB 区块布置在地址空间的起始位置,最后一个64KB 区块置于地址空间的末尾。
1.1 简单的片上存储器实例
您可使用赛灵思I/O 函数访问OCM, 以便从所选的存储器地址读取和写入数据。这些函数包含在Xil_IO.h 中, 可支持在CPU 地址空间内存储和访问8 位、16 位或32 位字符型、短整型或整型数据。使用这些函数时,只需知道您希望访问的地址以及想要在此存储的值即可。如果是写操作,方法如下:
Xil_Out8(0xFFFF0000,0x55);
read_char = Xil_In8(0xFFFF0000);
使用该技术时要确保两个地址指向片上存储器中的相同位置,尤其是当不同人编写不同内核程序时更应如此,为此更好的方法是使用共同的头文件。该文件将包含针对特定传输的相关操作地址的宏定义,例如:
#define LED_PAT 0xFFFF0000
另一种备选方法是让两个程序都使用指示器来访问存储单元。您可以通过使用宏命令定义指向恒定地址的指示器(一般用C 语言)来实现这一点:
#define LED_OP (*(volatile unsigned int *)(0xFFFF0000))
此外,您还可以对地址再次进行宏定义,以确保该地址为两个应用程序的共用地址。这种方法无需使用赛灵思I/O 库,而是通过指示器实现简单访问。
2、双核运行和启动完整工程创建过程记录
我们利用wiki提供的文件创建硬件工程和软件工程,并创建基于QSPI Flash的固化文件mcs文件。
2.1 创建硬件工程
下载文件earlyaccess_xapp1079_2014.2.zip。网址如下:
http://www.wiki.xilinx.com/XAPP1079+Latest+Information
然后解压earlyaccess_xapp1079_2014.2.zip,把design文件夹下的src文件夹拷贝到C:\Users\Administrator\AppData\Roaming\Xilinx文件夹下面,然后打开软件Vivado 2014.2,然后点击ToolsàRun Tcl Script,打开路径C:\Users\Administrator\AppData\Roaming\Xilinx选择create_proj_ zedBoard.tcl,然后点击OK。就会自动运行创建Project_1的硬件工程,生成bit文件,打开implement,Export Hardware,launch SDK。硬件工程模块图如下图1所示:
图1
工程放在C盘复杂目录下寻找起来不方便,我们把他拷贝到目录E:\Zed7020_lab\2014.2\zed_amp_bare_metal_cortex_a9文件夹下面,然后打开vivadio,打开SDK。
2.2 创建软件工程
在SDK软件中选择Xilinx_Tools->Repositories,选择New,浏览文件夹选择路径E:\Zed7020_lab\2014.2\zed_amp_bare_metal_cortex_a9\src\sdk_repo,然后点击OK。如下图2所示:
图2
创建FSBL工程,选择File->New->Application_Project,工程命名为fsbl,然后点击Next,选择模板‘Zynq FSBL’,然后点击Finish。
重新启动CPU1依靠FSBL BSP文件修改的向量表。所以需要验证FSBL BSP使用的standalone来自local repository。
选择fsbl_bsp,然后右键选择'Board Support Package Settings',观察界面,验证OS Version是4.91,然后点击Cancle。如下图3所示:
图3
创建应用工程运行在CPU0,选择File->New->Application_Project,工程命名为'app_cpu0',然后选择next。选择模板'Empty Application'然后点击Finish。然后下解压包的路径…\earlyaccess_xapp1079_2014.2\design\src\apps\app_cpu0下拷贝文件app_cpu0.c和lscript.ld粘贴到SDK工程app_cpu0->src下面。如图4所示:
图4
创建板级支持包为CPU1,选择File->New->Board_Support_Package,然后将工程命名为app_cpu1_bsp,改变处理器为’ ps7_cortexa9_1’。然后点击Finish。在 'Board Support Package Settings' 里选择Overview->drivers->ps7_cortexa9_1 和改变the extra_compiler_flags 值 为 '-g -DUSE_AMP=1',然后点击OK。如下图5所示:
图5
创建应用程序运行在CPU1上,选择File->New->Application_Project,然后工程命名为'app_cpu1',改变处理器为‘ps7_cortexa9_1’,选择板级支持包,使用已存在的板级支持包'app_cpu1_bsp',然后点击Next,选择模板'Empty Application',然后点击Finish。如下图6所示:
图6
然后下解压包的路径…\earlyaccess_xapp1079_2014.2\design\src\apps\ app_cpu1下拷贝文件app_cpu1.c和lscript.ld粘贴到SDK工程app_cpu1->src下面。
2 生成mcs文件和烧写mcs文件到QSPI Flash
下面将生成烧写到QSPI里面的mcs文件和烧写的步骤。
2.1 生成mcs文件
单击‘app_cpu1’,选择Xilinx Tools –> Create zynq boot image,选择Add,选择文件…/app_cp0/Debug/ app_cpu0.elf,点击打开。然后选择app_cpu0.elf,点击UP。把文件app_cpu0.elf移动到app_cpu1.elf上面。然后在Output pach后面把boot.bin修改为Boot.mcs。然后点击 Create Image。如下图7所示:
图7
2.2 烧写Boot.mcs到QSPI Flash
选择Xilinx Tools –> Program Flash,在Image File后面选择刚才生成的Boot.mcs文件,Offset为0x0,Flash Type为qsip_single。勾选Blank check after erase和Verify after flash。检查开发板上电和连线状况,然后点击Program。如下图8所示:
图8
基于ZYNQ的双核启动与通信问题解决的更多相关文章
- 基于Zynq平台的EtherCAT主站方案实现
作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...
- JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信
阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NI ...
- 基于ZYNQ的SOC——Hellow_World实验
ZYNQ是一款SOC芯片,之前使用VGA做过的实验只是PL(Programmable Logic)部分,而ZYNQ最突出的功能,就是内部的双核Cortex-A9,所以从现在开始我将学习ZYNQ的SOC ...
- 基于NIOS II的双端口CAN通信回环测试
基于NIOS II的双端口CAN通信回环测试 小梅哥编写,未经授权,严禁用于任何商业用途 说明:本稿件为初稿,如果大家在使用的过程中有什么疑问或者补充,或者需要本文中所述工程源文件,欢迎以邮件形式发送 ...
- CH02基于ZYNQ的嵌入式LINUX移植
CH02基于ZYNQ的嵌入式LINUX移植 1.1概述 实验环境: Windows 10 专业版 Vmware workstation 14.1.1 Ubuntu 16.04.3 Xilinx SDx ...
- [原创]基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程
基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程 待添加完善中
- [原创]基于Zynq AXI-Bram Standalone & Linux 例程
基于Zynq AXI-Bram Standalone & Linux 例程 待添加完善中
- [原创]基于Zynq AXI-GPIO Standalone & Linux 例程
基于Zynq AXI-GPIO Standalone & Linux 例程 待添加完善中
- [方案]基于Zynq WiFi方案构建
基于Zynq系列,搭建无线传输平台 1) 2.4G 2) 5G AC
随机推荐
- ionic2使用cordova打包的环境搭建
1.安装node.js(不用说了) 2.安装JDK(java的开发基础类库) 3.安装SDK(安卓开发集成包) 4.gradle( JAVA界的Weboack ,支撑app的编译,打包的流程) 5.安 ...
- fiddler安装及mock数据
1,fiddler安装,解决无法抓到https问题 可用本机的火狐浏览器测试,不行,就fiddler生成证书,拷到火狐里 在firefox中,选项->进入配置界面:高级-> 证书 -> ...
- Visual Studio 删除空行
Visual Studio 没有提供此功能,只能用正则表达式,具体做法如下: 一.ctrl+ H 打开替换框 二.在替换框中的源中输入 ^(?([^\r\n])\s)*\r?$\r?\n 图如下: 完 ...
- [LeetCode] 26. Remove Duplicates from Sorted Array ☆(从有序数组中删除重复项)
[LeetCode] Remove Duplicates from Sorted Array 有序数组中去除重复项 描述 Given a sorted array nums, remove the d ...
- 安装pyspider遇到的坑
pyspider是国人写的一款开源爬虫框架,个人觉得这个框架用起来很方便,至于如何方便可以继续看下去. 作者博客:http://blog.binux.me/ 安装pyspider安装pyspider: ...
- php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)
上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/ baidu.p ...
- Spring中配置使用slf4j + log4j
本人也是查看别人博客获得的方法,详细讲解请参照 https://www.cnblogs.com/yuxiaole/p/9297266.html 下面进入正题: 1.在pom.xml中注入相关的依赖 & ...
- 基于观察者模式-----otto源码分析
一.otto简介 otto是支付公司square一个专注于android的开源项目,该项目是一个event bus模式的消息框架,是一个基于Guava的增强型事件总线.旨在将应用程序的不同部分分离,同 ...
- 解读——angeltoken钱包
Angeltoken可不可靠,这是每一个会员都会考虑的问题.有风险意识很重要,但是,更重要的是,怎么才能规避风险,最大限度的安全投资呢? AngelToken值得我们每一个想要改变自己处境的平凡人,认 ...
- GIT 初始化 中文编码、自动换行
解决中文编码: git config --global core.quotepath false git config --global gui.encoding utf-8 解决git log 中文 ...