微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > MicroBlaze如何与Zynq SoC和平共存

MicroBlaze如何与Zynq SoC和平共存

时间:08-21 来源:互联网 点击:
访问DDR存储器

我们下面来分析一个设计实例,该实例涵盖了典型MicroBlaze用户可能涉及的几个常见的需求,比如如何访问DDR存储器;如何使用PS IOP中的外设;如何在MicroBlaze和PS之间传输数据块;如何在MicroBlaze和PS之间实现事件同步等。图4给出了解决每种问题的方法(分别标识为1、2、3、4)。

访问DDR存储器最简单方法就是通过4个高性能(HP)AXI接口的一个或多个连接(方框图右上方)。4个64位宽端口可供可编程逻辑访问。您首先必须启用一个端口,然后连接AXI到端口。MicroBlaze采用AXI4-Lite接口,而HP端口则应用作全AXI4连接。所幸的是,赛灵思设计工具可自动弥补,无需任何手动修改就确保实现成功连接。方框图中①显示了该连接。这类连接的优势在于创建起来非常简单,而DDR存储器对设计来说就是常规存储器。而不足之处在于,AXI-Lite不支持突发模式,而且只有32位宽,因此会丧失不少性能。

还可通过其它方法将基于PL的外设连接到DDR存储器,比如采用DMA控制器,同样也可采用HP端口。虽然这种连接机制更复杂,但能提高大数据块的传输性能。

在PS中启用UART和三重定时器/计数器(TTC)。M_AXI_GP0连接的BRAM控制器位于PL中,但从概念上说是PS设计的组成部分(实际上也是PS设计的一部分)。

MicroBlaze作为设计的另一部分采用BRAM提供64KB的整合代码和数据空间,供MicroBlaze专用。显然,我们能连接这些端口到PS的HP端口以访问DDR存储器,不过这样做会让实现工作变得更复杂。

有3个连接到MicroBlaze的标准外设:一个是负责接收TTC的PWM波形输入并将其解释为中断源和接收的UART字符中断的中断控制器;一个是负责驱动ZC702开发板上8个LED的GPIO,第三个是用于连接到PS所连接的同一BRAM的B侧的BRAM控制器。此外还有两个连接:一个是到S_AXI_GP0的连接,用于实现PS内部外设的寻址;另一个到高性能端口的连接,可让MicroBlaze访问DDR存储器部分。

外设、数据块和同步

到PS S_AXI_GP0端口的连接是访问可编程系统IOP模块的关键(图中的②)。S代表这是一个从端口,也就是接受PL中的组件启动的事务处理。在MicroBlaze和S_AXI_GP0端口之间建立连接时,IOP模块可从0xE000_0000扩展到0xE02F_FFFF,这意味着MicroBlaze地址空间中的其它外设都不能重叠于这段地址,而这段地址将供处理器共享。

与此同时,许多机制均支持MicroBlaze和PS之间的数据块传输。往返DMA和DDR以及DMA和片上存储器(OCM)就是两个可能性。另一种就是在设计实例中实现的机制,其使用双端口BRAM(图中的③)。PS为BRAM控制器一侧主设备,而MicroBlaze则为其另一侧主设备。软件负责管理分区和共享BRAM存储器空间的使用,因为两侧都有权对存储器的全部内容进行全面读取和写入。

最终问题涉及如何在MicroBlaze和PS之间同步事件。PS包括大量定时器,您能对PL中任意数量的定时器实例化。设计实例中采用了一个TTC外设中的一个通道来生成100毫秒的脉冲信号(图中的④)。这里的关键是要认识到TTC生成的波形能从PS以外访问,但TTC中断只能在PS以内可用。您可用波形本身作为MicroBlaze中断,从而规避这个问题。此外,您也可采用硬件定时器(AXI定时器或用户编码的定时器)为PS和MicroBlaze提供中断。


图5:独立软件域和重叠项。

软件支持

与任何嵌入式设计一样,您要考虑的不光是硬件实现问题,还要考虑软件支持。对本例而言,要考虑两个处理器的重叠区域(如图5所示)。

就硬件而言,要把系统视为两个相互交叉的嵌入式设计:PS和MicroBlaze。我们的参考设计可让PS为其自身和MicroBlaze生成时钟信号并提供中断。MicroBlaze可使用这些信号,但不能影响或对其修改。PS和PL共用PS的IOP模块、DDR存储器与控制器以及常见的双端口BRAM。

从地址映射角度看,IOP地址固定在硬件中,不能修改。MicroBlaze和Cortex-A9必须对外设使用相同的地址。技术参考手册在这方面做了详细说明,非常具有参考价值。技术参考手册分两部分对解决设计中的外设问题进行了阐述。这部分中的所有寄存器都列出了地址和简介,管理两个处理器之间的资源则是用户要开展的一项任务,要避免数据冲突,避免资源不足等。


图6:Cortex-A9应用和MicroBlaze应用流程图。

采用DDR存储器及其控制器比较简单,因为DDR存储器控制器能管理冲突问题,而且提供适当的启发避免任何请求方无法获得数据。由于这不在用户控制下,时延可能会有些难以预见。

常见的BRAM采用相同的较低地址位,不过针对该模块的每个处理器存储器空间的位置可用Xilinx Platform Studio的地址标签来选择。跟以前一样,数据冲突、同步和存储器分配也是读者要完成的工作。

我们的软件设计实例更主要的目的是演示连接Cortex-A9和MicroBlaze的过程,而不是要做任何实际的工作。一些方法将演示这方面的可能性。

图6左侧所示的Zynq-7000应用是一款简单的设计,其采用赛灵思单机版板支持包。它运行的程序很大程度上让处理器保持空闲状态,只是周期性地通过串行端口发出T字符表明自己仍在工作。此外,它会计算T的次数并将计数统计保存在BRAM中,与MicroBlaze共享。

MicroBlaze应用也运行单机版板支持套件。这样就能支持中断,每次串行端口上出现字符,MicroBlaze就把字符缓存起来,并发送对应的Hex-ASCII到PS IOP模块的串行端口。此外,它会构建接收字符串,每收到一个字符都保存在DDR存储器中。收到回车后,将计算校验和,并在字符串后直接添加到DDR存储器。BRAM预先设定的位置处设置标记,当Cortex代码“看到”标记时就从DDR存储器读取字符串,并验证校验和。如果校验和准确,MicroBlaze发出“+”,否则发出“X”。

简而言之,设计实例证明MicroBlaze和Zynq7000 PS完全能和平共处。AXI连接点数量很多,使MicroBlaze(或PL中的任何组件)能方便地访问IOP模块中的外设、OCM和DDR。可编程逻辑能方便地访问IOP模块的中断,而PL中能生成一系列中断并发送给PS。软件协调和定义良好的行为是避免争抢情况和寻址冲突的关键。

关于作者:

作者:Bill Kafig
赛灵思公司高级内容开发工程师
bill.kafig@xilinx.com

Praveen Venugopal
赛灵思公司解决方案开发工程师
pvenugo@xilinx.com

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top