一种FPGA内嵌PowerPC处理器的改进型程序固化方法

时间:2022-08-13 06:51:06

【摘要】在使用含有CPU核的FPGA进行逻辑设计并开发软件时,CPU核的工作模式对硬件逻辑资源分配,尤其是存储器资源分配有相应限制,并且需要根据CPU的启动模式和加载流程对资源分配进行规划...

一种FPGA内嵌PowerPC处理器的改进型程序固化方法

摘 要:本文主要针对目前应用比较广泛的FPGA芯片的嵌入式CPU硬核,结合使用需求,并通过对厂商提供的程序固化方式的研究,从硬件平台,软件加载流程等方面综合分析,提出一种改进型的程序固化方法,以较小的代价,实现了不同应用环境下的一致程序固化方法,方便了用户调试和固化程序,提高了工作效率。

关键词:fpga;嵌入式;CPU硬核;固化;加载

中图分类号:TP368

随着现场可编程门阵列技术的发展,目前主流的FPGA都具备大规模、高速度的特性,并且为特定的应用集成了诸如DSP,高速串行IO口等资源。但是面向通用处理或者高集成控制的嵌入式应用领域,如果单纯使用大规模的FPGA芯片,依靠逻辑设计完成相关功能,则在技术、时间以及可维护性上具有一定的难度。随着这种要求的逐步增多,在FPGA中首先出现的具备通用处理功能的CPU均是以软核形式提供的,比如Xilinx的MicroBlaze系列软核,满足了一部分用户的使用要求。

当用户需要更为复杂的功能时,比如高速、复杂的智能板卡和面向硬实时应用的领域,既需要解决板卡集成问题,同时还需要一个高性能处理器,此时基于FPGA的CPU软核所提供的功能则无法满足。因此,Xilinx在Virtex系列之后就推出了集成powerpc405处理器硬核的Virtex2Pro以及Virtex4系列,并在最新的Virtex5系列中集成了性能更为强大的PowerPC440处理器硬核。

在使用含有CPU核的FPGA进行逻辑设计并开发软件时,CPU核的工作模式对硬件逻辑资源分配,尤其是存储器资源分配有相应限制,并且需要根据CPU的启动模式和加载流程对资源分配进行规划。同时,在使用Xilinx官方所提供的方法时又具有一定的局限性,因此,结合实际使用,本文提出了一种更为全面的基于FPGA嵌入式处理器硬核的程序调试、固化以及加载方法,能够适应更为广泛的情况。

1 FPGA PowerPC处理器硬核程序固化及运行方式分析

1.1 启动流程描述

作为FPGA硬核PowerPC在启动流程上和其他处理器的启动有所差别:主要的区别就是在该CPU核只能在FPGA逻辑加载完成之后才能取指令工作,然后CPU默认从32位的地址空间的最高的4字节0xFFFFFFFC取指令执行,并进行跳转,并完成CPU相关寄存器和程序运行环境初始化,最后跳转到用户的main函数入口开始执行[1]。

1.2 程序固化方式及优缺点分析

根据PowerPC的启动流程,在进行程序固化可以使用两种方式实现,如下:

(1)第一种就是将FPGA内部BRAM分配到地址空间最高端,并将软件作为逻辑的一部分固化到PROM中,实现软件和逻辑同时加载。其优点是实现简单,缺点就是当在设备中使用时,难以支持主机复位操作,且在即插即用的应用场合会出现问题。

(2)第二种方法是将非易失存储器指向地址空间的高端,让CPU在逻辑加载完成后直接从该存储器取指令执行。该方法的优点是可以用于多个场合,可以作为主机,也可以作为设备来使用。缺点是在使用该方式时,而需要针对调试和固化运行环境使用两种不同的逻辑版本,且固化方式复杂,增加较多工作量。

1.3 应用模式分析

针对上面提到两种程序固化方式所出现的问题进行分析,结合实际使用,针对以下三种使用模式提出一种适合于不同情况下的逻辑资源分配以及程序调试固化要求的方法,以较小的代价解决上面的问题。三种使用模式如下:

(1)PowerPC作为主机使用,运行大规模的软件,但是内部BRAM资源又不能满足程序的运行要求时,需要使用搬家程序进行二次加载,启动速度慢。

(2)PowerPC作为设备的控制器时(例如高速PCI接口卡上的协处理器),需要响应主机的软复位请求,并以最快的方式完成复位,而且必须保证硬件功能正确。

(3)在PowerPC需要运行代码量大的设计中,程序的调试和固化运行需要使用不同的硬件逻辑版本。

2 新方法对硬件平台及资源分配的要求及其流程说明

针对这些分析,在硬件资源分配及逻辑设计上做如下更改,根据硬件要求对软件固化流程进行改动,即可解决。更改说明如下:

(1)逻辑中增加一个专门的BRAM块,大小为16KB即可满足要求,并且该RAM必须占用存储器的高端空间。

(2)需要在复位逻辑的Core复位请求输入上逻辑“或”上一个主机复位请求输入[1]。

(3)使用外部RAM时,外部RAM不能接复位信号,或者确保复位无效即可。

(4)不能使用OCM总线接口的BRAM资源,否则无法保证复位之后OCM BRAM内部程序内容的正确性[1]。

在对硬件按照要求分配相应的资源并跟更改部分设计之后就可使用下面描述的方法实现程序的固化和加载。具体流程如下:

(1)在EDK环境下使用Flash固化工具提供的方式,生成一个bootloader程序,并且根据要求,对其中的冗余代码进行修改,以加快运行速度。

(2)在EDK环境下修改bootloader工程的链接脚本,使其只占用高端的16KB字节的空间,并编译生成相应的elf程序。

(3)使用EDK环境提供的方式将bootloader程序代码和逻辑融合,生成用于固化的逻辑代码。

(4)将逻辑和代码分别固化到PROM和Flash中,结束。

该方法在逻辑中只需要增加一个16KB的BRAM资源,能够兼容GDB和SDK两种不同程序调试环境,且不需要针对调试和最终产品设计多个逻辑版本,可适用于多种环境,所有工作均可使用集成开发环境中的插件完成,不需要用户自己设计额外的程序,能够最大化减少逻辑设计、程序开发以及程序固化等相关工作。

3 PowerPC新启动流程说明

在使用本文所讲述的方式完成整个系统软件的固化后,以FPGA芯片为中心来看,无论是作为主机还是设备而言,其板卡上电之后的启动流程如下:

(1)逻辑加载,并同时加载bootloader程序到内部的高端BRAM中。

(2)跳转到bootloader并执行。

(3)从Flash中将应用程序代码搬移到相应的运行空间,比如内部的BRAM或者外部RAM空间中。

(4)判断应用程序入口。

(5)跳转到应用程序入口开始执行。

4 总结

文中所提到的方法是对Xilinx给出标准方法的总结并结合实际使用情况进行分析之后整理的,其主要点有两个方面:一、简化用户逻辑设计,不需要为调试和固化分别设计两套逻辑;二、适用于不同的情况,基本没有使用限制。

总之,用户要结合自身逻辑设计以及应用场合,合理选择,才能兼顾效率、可靠性以及可维护性,并最大化地减少工作量,提高工作效率。

参考文献:

[1]Xilinx,Inc.PowerPC 405 Processor Block Reference Guide,2005.

[2]AMCC.PPC405GP Embedded Processor User’s Manual,2006.

[3]Xilinx,Inc.Software Debugging Techniques for PowerPC440 Processor Embedded Platforms,2008.

[4]IBM.128-bit Processor Local Bus Architecture Specifications,2001.

作者简介:张利洲(1981.11-),男,陕西人,硕士,工程师,主要研究方向:嵌入式通信。

作者单位:中国航空工业第631研究所,西安 710119

上一篇:谁更适合接任CEO 下一篇:浅谈在线考试系统的设计