赛灵思 zynq-7000 all programmable soc已具有很强的板载处理能力。但是zynq应用处理单元(apu)中强大的双cortex-a9处理器和相关外设的存在并不妨碍您在同一封装中添加一个或多个microblaze处理器,只要能让应用受益就好。
为什么要给处理功能已经很强大的解决方案添加microblaze呢?首先就是可靠性的问题。单线程会大幅提高可靠性。您可以针对计算密集型任务为每个cortex-a9都布置一个线程,而且能根据需要为其它线程实例化任何数量的microblaze处理器。其次,您可将任何杂务交给microblaze去完成,让处理功能强大的cortex-a9去执行最需要它的工作,充分发挥其用武之地,从而节省数个关键的工作周期。
下面这个例子能反映以上两种情况。设想一下,一个任务需要长期高强度计算,同时还要监控用户输入。这里,microblaze可管理用户输入(频率较低、计算强度不高),并写入apu存储器空间,这样apu闲置时(也就是完成了处理任务时)就能看看接下来需要处理什么信息。
一旦您决定在基于zynq的设计中添加一个microblaze处理器,马上就会发现一些问题。首要问题就是apu如何与microblaze通信,哪些处理器系统(ps)资源可供microblaze使用。包括zc702和zedboard等在内的许多开发板将许多外设直接映射到与处理系统相连的引脚。可编程逻辑(pl)中,这些引脚不能直接访问microblaze。处理系统还包含多种不同定时器和中断资源。有什么办法能从microblaze领域访问这些资源吗?
ps与pl之间的接口
处理器系统和可编程逻辑紧密结合,这意味着cortex-a9、窥探控制单元(scu)、ps外设、时钟管理及其它功能与可编程逻辑之间存在多个紧密的集成连接。事实上,ps和pl之间共有6种不同类型的互联,您可将这些互联类型彼此结合使用。此外,许多路径是对称的,也就是说pc能启动到pl的连接,而pl也能启动到ps的连接。
图1:pl中ps和microblaze的边界是一片雷区吗?二者能否共享资源?
赛灵思公司目前提供的应用指南、用户指南和白皮书等大量资料均介绍了作为设计“核心”的zynq-7000 apu如何利用可编程逻辑来访问存储器、基于pl的外设和硬芯片外设(如pcie模块、bram、dsp48和千兆位级收发器等)。要分析microblaze如何成为其自身领域的主导,逻辑上的第一步就是看看6个接口变量,首先从通用、高性能和加速器一致性端口这三类axi接口入手。
ps有两个连接到pl的主axi通道和两个由pl启动的从通道(图2)。这里的“主”是指axi通道为发起方,能启动数据交换,而“从”在只能用于响应到达的数据。主axi通道通常用来与pl中的外设通信。从axi通道负责响应pl的请求,其中可能包括microblaze处理器所执行的事务处理。这些axi通道连接到ps的中央互联,可路由到许多资源。
此外,还有4个高性能(64位宽)axi通道连接点。从ps角度来说,所有这4个通道均为从通道,连接至ps中的存储器接口子系统(图3)。这4个通道的目的就是让ps中的主设备启动ddr存储器事务处理。
这种存储器互联和ddr存储器控制器是所有资源到ddr存储器的门户。虽然cortex-a9处理器的优先级通常高于从axi连接,但4个axi连接中每个都有一个“现在为我服务”信号,能让发出该请求的通道获得优先级。未断言该信号时,架构、采用循环机制确定哪个请求方有权访问特定类型存储器。
加速器一致性端口(acp)是另一种pl的32位axi ps从连接。acp的独特之处在于它直接连接到scu中。scu的任务就是确保l1、l2和ddr存储器之间的一致性。采用acp,您能访问ps中的每个cortex- a9处理器的高速缓存存储器,而不必担心与主存储器中的数据同步问题(硬件会自动处理好这个问题)。该功能不仅可大幅降低设计负担,而且还能显著加速处理器与pl之间的数据传输。
图2:到处理系统中央互联的简化连接
图3:到ddr存储器控制器和片上存储器(ocm)的简化连接
除了axi链接之外,可扩展多路输入输出(emio)信号也可用于路由许多ps的硬外设直至pl,以便访问封装引脚。只有54个封装引脚直接连接到ps,不过ps的硬外设可使用的引脚数量大大超过54个。emio是ps硬外设和pl之间的通道。这些i/o信号可直接路由到pl可用的封装引脚,而您也可利用这些引脚与pl中兼容的外设进行通信。
ps和pl之间另外的各种杂项信号可以分为5个基本类:时钟与复位、中断信号、事件信号、空闲axi与ddr存储器信号,以及dma信号。
* 时钟与复位:ps为pl提供4个独立的可编程频率。通常这些时钟之一用于axi连接。每个时钟域都有自己的域复位信号,可重设与该域关联的任何器件。
* 中断信号:ps中的通用中断控制器(gic)负责收集所有可用源的中断,包括ps外设的所有中断源和可编程逻辑的16个“外设”类型中断。此外,还有4个连接到cpu(irq0、 irq1、fiq0和fiq1)的直接中断。来自ps外设的共28个中断可提供给pl。
* 事件信号:这些“带外”异步信号说明ps的特殊情况。ps提供一系列信号用于表明哪个cpu进入待机模式,哪个cpu执行了sev(“发送事件”)指令。ps可用事件信号从wfe(“等待事件”)状态中唤醒。
* 空闲axi与ddr存储器信号:ps的空闲axi信号用来指示pl中没有未处理的axi事务处理。该信号由pl驱动,是用来启动ps总线时钟关断功能的条件之一,确保所有pl总线器件均处于闲置状态。ddr紧急/仲裁信号用来向ps ddr存储器控制器的4个axi端口ddr仲裁表示关键的存储器处于紧张状况。
* dma信号:ps的直接存储器访问(dma)模块通过一系列“请求和确认”信号与pl从设备通信。
图4:硬件设计实例方框图
访问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。软件协调和定义良好的行为是避免争抢情况和寻址冲突的关键。
IR推出IR3588 ChiL数字控制IC及IR3552、IR3546
电磁流量计如何接线_电磁流量计接线实物图
Linux CFS虚拟时间
柔性线路板布局和最佳化方案
直流Load Line如何最小化所需的大容量电容
MicroBlaze如何与ZynqSoC和平共存
基于STM32、ESP32,钢铁侠打造机械臂设计
防抖技术的革新 回顾EIS和OIS的防抖原理
工控机产业迈入新时期 两方面的变化正在呈现
电源频率检测器/过流检测器电路设计
开关电源电路图详解,快来浏览学习吧!
注意力通信模型ATOC助力多智能体协作 DARPA将资助人工智能造假竞赛
79元谷歌VR头盔与三星GearVR对比评测:只有三个缺点
电动汽车和燃油车在未来谁才是主流
关于磁珠的基础知识
环境传感器在实际设计应用中应考虑哪些问题
报警电路的类型原理及问题分析
WiFi 6是什么,它有什么优势优点
大有可为!泰科协作机器人全面布局医疗健康行业
浅析电网干扰