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的双核启动与通信问题解决的更多相关文章

  1. 基于Zynq平台的EtherCAT主站方案实现

    作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...

  2. JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信

    阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NI ...

  3. 基于ZYNQ的SOC——Hellow_World实验

    ZYNQ是一款SOC芯片,之前使用VGA做过的实验只是PL(Programmable Logic)部分,而ZYNQ最突出的功能,就是内部的双核Cortex-A9,所以从现在开始我将学习ZYNQ的SOC ...

  4. 基于NIOS II的双端口CAN通信回环测试

    基于NIOS II的双端口CAN通信回环测试 小梅哥编写,未经授权,严禁用于任何商业用途 说明:本稿件为初稿,如果大家在使用的过程中有什么疑问或者补充,或者需要本文中所述工程源文件,欢迎以邮件形式发送 ...

  5. CH02基于ZYNQ的嵌入式LINUX移植

    CH02基于ZYNQ的嵌入式LINUX移植 1.1概述 实验环境: Windows 10 专业版 Vmware workstation 14.1.1 Ubuntu 16.04.3 Xilinx SDx ...

  6. [原创]基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程

    基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程 待添加完善中

  7. [原创]基于Zynq AXI-Bram Standalone & Linux 例程

    基于Zynq AXI-Bram Standalone & Linux 例程 待添加完善中

  8. [原创]基于Zynq AXI-GPIO Standalone & Linux 例程

    基于Zynq AXI-GPIO Standalone & Linux 例程 待添加完善中

  9. [方案]基于Zynq WiFi方案构建

    基于Zynq系列,搭建无线传输平台 1) 2.4G 2) 5G AC

随机推荐

  1. Gerapy 安装

    1下载: pip install gerapy 2. 在D盘中新建一个文件夹,该然后cd 到该文件夹中,执行: gerapy init # 初始化,可以在任意路径下进行 cd gerapy # 初始化 ...

  2. JDK7动态代理源码分析

    IObject proxy = (IObject) Proxy.newProxyInstance(IObject.class.getClassLoader(), new Class[]{IObject ...

  3. 当前 .NET SDK 不支持将 .NET Core 2.1 设置为目标。请将 .NET Core 2.0 或更低版本设置为目标,或使用支持 .NET Core 2.1 的 .NET SDK 版本。

    解决方案:项目>属性>应用程序>目标框架>安装其他框架. 此处我下载了2.1的x64的框架并安装. 安装后,重新打开vs即可点击切换新框架.

  4. 拷贝的表的SQL语句 SELECT INTO 和 INSERT INTO SELECT的用法与区别

    一.select   into  from 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Tabl ...

  5. struts1与struts2的区别。

    1) 两个框架都是MVC的WEB框架, 2) struts1是老牌框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本低,Struts2核心设计思想主要源自Webwork,实现更优雅,更容易扩 ...

  6. (转)Jquery on()事件委派

    今天浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一 ...

  7. C++基础学习_01

    C++基础学习_01 基础知识:1.命名空间,2.IO流(输入输入),3.参数缺省,4.函数重载 1.命名空间 作用:对标识符的名称进行本地化,避免命名冲突 定义:namaspace space_na ...

  8. Cognos无法解密来着内容库的用户名和密码凭证

    1. 问题描述 启动Cognos失败,报错代码为QE-DEF-0368. 2. 问题分析 Frame Work和Cognos Server安装在不同的目录和/或不同的机器上. 3. 解决方案 需要把S ...

  9. Html5 <video>实现摄像头监控问题:html5并不支持rtsp协议,所以使用vlc进行转码,将rtsp转http流,这样<video>才可以直接播放

    今天在写html5中播放旷视C2摄像头视频监控的功能,查了很多资料,才发现Html5 <video>并不支持rtsp协议.后来查到使用第三方转码才得以实现. 这里把方法写下来分享给大家. ...

  10. PHP调用Python接口过程中所遇到的问题

    在php调用python脚本时,首先把python相关组件安装完善.用Python命令检测运行脚本而不报错. 在调用接口的过程 1.没有打开的python脚本的权限 解决办法:把python脚本所在的 ...