你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

Adam Tayloy玩转MicroZed系列59:Zynq与PicoBlaze第4章

发布者:jackzhang 时间:2014-12-08 17:04:14

作者:Adam Taylor

在以前发布的玩转MicroZed系列博客中,我们建立了一个基于Zynq的系统,通过使用双端口RAMS和BRAM(块RAM)控制器将两个PicoBlaze处理器核连接到Zynq的PS部分,现在我们将学习一下怎样实现更新存储在双端口RAM中的PicoBlaze处理器的程序。

首先在执行程序的控制下,我们怎样实现自由的存储PicoBlaze程序包括软件应用程序然后将他们下载到CPU中执行。

当我们定义Zynq系统时,一个关键点就是使用Zynq SoC’s PS部分的俩个EMIO 端口控制PicoBlaze内核的复位输入信号。(我们要为每个PicoBlaze都提供一个复位输入来实现俩个内核的独立复位),当我们更新处理器的程序存储RAM的时候,两个复位管脚允许我们能够独立复位每一个PicoBlaze处理器模块。当处理器的程序存储空间处在一个不确定或者混合的状态时,这个处理器就不能够继续执行程序了。

在一个实例化的处理器内更新PicoBlaze程序代码的基本算法如下:
1.为将要更新处理器声明复位管脚
2.通过从Zynq PS到BRAM控制器的写操作更新处理器的块RAM空间
3.一旦完成BRAM的写操作,取消处理器的复位,允许处理器重启并执行新的程序代码

尽管上面的步骤很简单,但是首先我们必须以正确的格式生成新的PicoBlaze程序,并且也能够包含到Zynq SoC PS部分的ARM Cortex-A9 MPCore处理器的程序代码中。解决这个问题的最简单方式就是将新程序以数组的形式写入到ARM处理器的C程序代码中。 为了实现这个功能,我们必须处理一下由PicoBlaze汇编器生成的hex格式的文件,我们可以手动处理但是对于大型程序就显得比较笨拙了,因此我编写了一个简单的TCL脚本,将hex格式的文件转化为C的头文件,这个头文件可以加入到你的编译环境中。(这个脚本和所有程序我已经上传到Github中了,会在本篇博客的结尾备注的)

准备好了正确格式的文件,并且包含到了ARM Cortex-A9 MPCore的程序当中,我们就可以轻松的读取这个数组内容,将它写入到合适的BRAM当中。因为我们使用的是32位的地址,每四个字节都是独立可编址的,并且每四个字节都是一个独立的地址空间。例如第一个32位的地址是0,第二个地址是4,第三个地址是8,这样一直进行下去。

我们可以使用下面这个函数将内容写入到BRAM当中:
XBram_WriteReg(PICO_0_BASE, ram_addr, test2[read_out]);

我们可以使用for循环遍历整个数组,如下图所示:

以我们以前创建的系统示例为基础,使用这些结构,我们就能够简单快速的编写一个简单的程序,允许我们更新任意一个PicoBlaze内核的程序存储空间,本博客的程序实现的功能是每个PicoBlaze处理器控制他们各自的LED灯,以或快或慢的频率闪烁。

当然这并不意味着在处理器执行期间我们能够下载新的镜像文件到PicoBlaze处理器中, 如果要实现这样的功能,我们必须编写一个稍有不同的程序和TCL脚本,我们将在下一篇博客当中介绍。

快要有60篇博客了,我觉得如果有一个Git Hub存储空间将是一个非常好的想法,所以我已经创建了一个,地址是“ https://github.com/ATaylorCEngFIET/MicroZed-Chronicles ”,我会将以前博客的代码上传,但是现在这个存储空间中只有本次博客的程序源代码。

原文链接:
http://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chro...

© Copyright 2014 Xilinx Inc
如需转载,请注明出处

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了