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. 从mysql向HBase+Phoenix迁移数据的心得总结

    * 转载请注明出处 - yosql473 - 格物致知,经世致用 mysql -> HBase + Phoenix 1.总体方案有哪些? 1)通过Sqoop直接从服务器(JDBC方式)抽取数据到 ...

  2. fail to resolve com.umeng.analytics:analytics:latest.integration

    今天友盟接入的时候,他娘的居然提示我这个友盟jar包拉不下来 明明之前还好好的,而且别的什么东西都没问题,就这个有问题 原来使用的是 compile "com.umeng.analytics ...

  3. 初识Log4Net

    刚刚了解log4net,根据自己的理解翻译了一下比较重要的东西.详细状况请见log4net官方网站 log4net是一种帮助程序员将日志语句输出到各种目标文件的输出工具,有了log4net,就可以在运 ...

  4. 触发form表单的两种提交方式,submit和button的用法

    1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交. 方法一: 在jsp的前端页面 ...

  5. IPhone手机常用的一些连

    1.查看固件可下载链接. ipsw.me 2.查看手机型号(是global还是GSM). https://ipsw.me/device-finder 3.系统降级链接. https://jingyan ...

  6. thymeleaf下拉框从后台动态获取集合数据并回显选中

    今天遇到从后台集合中取出对象在前台页面下拉列表展示: <select name="signature" lay-search="" class=" ...

  7. php单点登录

    http://blog.csdn.net/luyaran/article/details/54890036

  8. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要2—类型、值、变量

    [类型.值.变量]数字.文本.布尔值.null和undefined.全局对象.包装对象.不可变的原始值和可变的对象引用.类型转换.变量声明.变量作用域 P44~71(PDF版).P32~59(书版) ...

  9. 微信为什么不能下载apk 微信不能打开App下载地址的问题

    此方法可以实现微信内置浏览器跳转到手机其它浏览器,现在网上其它的方法都只是一个页面,让访问者自己手动点右上角浏览器打开,而这个不同,是可以直接自动跳转的.       <?php   error ...

  10. ssh自动登入

    公司的服务器在国外,所以测试的查看日志的时候需要测试机,然后继续ssh 非常不方便,所以编写一个简单的ssh登入脚本 #!/usr/bin/expectset timeout 3spawn ssh n ...