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. MongoDB数据查询 --MongoDB

    1.插入测试数据 use flower db.goods.insert({'goods_name':'Hyacinth',price:10,num:800}) db.goods.insert({goo ...

  2. CSS清除浮动的一种简便的方法

    在使用的浮动的元素的父元素添加该CSS样式 .clear{ overflow: auto; }

  3. expect简单自动交互-用于密码、命令输入

    1. 安装expect #yum -y install expect 2. 新建.exp文件,用于ssh交换机 #vi exp.exp #!/bin/expect set f [open ipfile ...

  4. JVM调优之JMeter使用(三)

    JMeter是Apache 下基于Java 的一款性能测试和压力测试工具.它基于Java 开发,可对HTTP 服务器和FTP服务器,甚至是数据库进行压力测试. 下载地址:http://jmeter.a ...

  5. 将本地文件上传到GitHub

    首先,可参见廖雪峰老师的官方网站进行Git安装:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c ...

  6. nginx 基本操作及配置

    基本操作: 1.启动nginx {global}/nginx 例如:/usr/local/Cellar/nginx/1.13.12/bin/nginx 2.重启nginx {global}/nginx ...

  7. Daily record-October

    October 11. Hope is a good thing, maybe the best of things, and no good thing ever dies. 希望是美好的,也许是人 ...

  8. View事件体系

    View事件体系 文章目录 View事件体系 一.Android View基础知识 1.1 View简介 1.2 View分类 1.3 View的结构 1.4 View的坐标 1.4.1 Androi ...

  9. 第7天:Q Quant库(未完待续)

    一.本文大纲: 1.Python内置函数计算期权的价格 2.numpy加速数值计算 3.SciPy进行仿真模拟 4.SciPy求解器计算隐含波动率 5.matplotlib绘图 二.案例 (看不懂,略 ...

  10. 初学web前端

    菜鸟刚入门,说说最近学习的心得吧. 首先我学前端主要是因为前端可以看到一些东西,比较有趣 好玩.相比其他语言更简单一些 ,但是却没有那么枯燥. 刚刚开始学习前端肯定就是html+css了.我是混着学的 ...