将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方法
【专利摘要】本发明公开了一种将MicroBlaze平台的嵌入式代码向Cortex?A9处理器移植的方法,包括:分析MicroBlaze平台的处理器与Cortex?A9处理器架构的不同之处,修改待移植的嵌入式代码中与处理器架构相关的部分;使用Cortex?A9处理器中集成的外设代替MicroBlaze平台中以软核IP实现的外设,修改待移植的嵌入式代码中与外设相关的部分,使MicroBlaze平台的优秀代码可以在新的Zynq平台上运行,避免了重复开发,并且性能更高的硬件架构也可以进一步激发原有代码的活力。
【专利说明】
将M i croB I aze平台的嵌入式代码向Gortex-A9处理器移植的方法
技术领域
[0001]本发明涉及嵌入式软件技术领域,特别涉及一种将MicroBlaze平台的嵌入式代码向Cortex_A9处理器移植的方法。【背景技术】
[0002]作为全球最大的FPGA生产厂家之一的xilinx公司,近年来非常重视软硬件协同开发的设计理念,在以往软核处理器MicroBlaze的基础之上,进一步推出了搭载硬核处理器 Cortex_A9的Zynq产品线。不仅如此,Zynq在DDR接口带宽、吉比特以太网以及Linux操作系统方面都有显著的优势。这些功能方面的改善,进一步提升了性能,也大大降低了 FPGA的研发设计周期。为了进一步激发原有的基于MicroBlaze的优秀代码的活力,将其向Zynq平台的移植工作就显得很有价值。
【发明内容】
[0003]为了解决上述问题,本发明提供了一种将MicroBlaze平台的嵌入式代码向 Cortex-A9处理器移植的方法,包括:
[0004]分析MicroBlaze平台的处理器与Cortex_A9处理器架构的不同之处,修改待移植的嵌入式代码中与处理器架构相关的部分;
[0005]使用Cortex_A9处理器中集成的外设代替MicroBlaze平台中以软核IP实现的外设,修改待移植的嵌入式代码中与外设相关的部分。
[0006]其中,所述修改待移植的嵌入式代码中与处理器架构相关的部分,具体包括:当 MicroBlaze平台中有8位的IP核直接挂载在32位总线上时,在待移植的嵌入式代码中修改接口数据长度,使所述8位的IP核与Cortex-A9处理器互联。
[0007]其中,所述修改待移植的嵌入式代码中与处理器架构相关的部分,还包括:验证 C〇rteX-A9处理器中各数据类型占用的字节长度与MicroBlaze平台中相同数据类型占用的字节长度是否相等;若不相等,则在待移植的嵌入式代码中修改相关的数据类型占用的字节长度,防止数据溢出。
[0008]其中,所述修改待移植的嵌入式代码中与处理器架构相关的部分,还包括:在待移植的嵌入式代码中修改用来处理用户关系的异步事件的中断异常编号,并根据C〇rteX-A9 处理器的bsp代码适应性修改用户自己的中断服务程序在异常表中的注册及异常的使能。
[0009]其中,所述修改待移植的嵌入式代码中与处理器架构相关的部分,还包括:使用 Cortex-A9处理器中集成的32位定时器代替MicroBlaze平台中挂载在总线上的定时器IP 核,修改待移植的嵌入式代码中与定时器相关的部分。
[0010]其中,所述修改待移植的嵌入式代码中与定时器相关的部分包括:在待移植的嵌入式代码中,将定时器的时钟频率修改为C〇rtex-A9处理器的CPU频率的1/2;将计数器的生长方向修改为向上累加;在自动模式下,若计数器值到达〇则重新加载缺省值。[0〇11 ] 其中,所述使用Cortex_A9处理器中集成的外设代替MicroBlaze平台中以软核IP 实现的外设,修改待移植的嵌入式代码中与外设相关的部分,具体包括:[0〇12] 使用Zynq平台的硬核中断控制器ScuGic代替MicroBlaze平台的软核中断控制器;
[0013]配置中断的触发的极性及形式;[〇〇14]建立中断处理函数及向量表的关系;
[0015]建立中断源和中断控制器的连接;
[0016]使能中断控制器。[0〇17] 其中,所述使用Cortex_A9处理器中集成的外设代替MicroBlaze平台中以软核IP 实现的外设,修改待移植的嵌入式代码中与外设相关的部分,还包括:使用C〇rteX-A9处理器集成的IIC控制器代替MicroBlaze平台中以软核IP实现的IIC控制器,通过配置Zynq平台的EM10来配置IIC控制器的物理管脚。[0〇18] 其中,所述方法还包括,在MicroBlaze项目基础之上,使用tel文件建立Zynq平台的bsp工程。[0〇19] 其中,所述在MicroBlaze项目基础之上,使用tel文件建立Zynq平台的bsp工程,具体包括:[〇〇2〇] 将所述tel文件中sdk create_hw_project命令后修改为Zynq平台的硬件描述文件;[0021 ] 将所述tel文件中sdk create_bsp_pro ject命令中-proc选项后修改为ps7_ cortexa9_0 字符串;
[0022] 将所述tel文件中sdk create_app_pro ject命令中-proc选项后修改为ps7_ cortexa9_0 字符串;[0〇23] 在xilinx vivado开发环境的cmd栏中使用xsct命令执行所述tel文件生成Zynq版本的bsp工程。[0〇24] 本发明实施例的有益效果是:通过分析MicroBlaze平台的处理器与Cortex_A9处理器架构的不同之处,修改待移植的嵌入式代码中与处理器架构相关的部分,使 MicroBlaze平台的优秀代码可以在新的Zynq平台上运行,避免了重复开发;通过使用 Cortex-A9处理器中集成的外设代替MicroBlaze平台中以软核IP实现的外设,修改待移植的嵌入式代码中与外设相关的部分,使MicroBlaze平台的代码可以运行在性能更好的硬件架构上,进一步激发了原有代码的活力。【附图说明】[0〇25]图1为本发明实施例提供的一种将MicroBlaze平台的嵌入式代码向Cortex_A9处理器移植的方法的流程图。【具体实施方式】
[0026]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0027] 图1为本发明实施例提供的一种将MicroBlaze平台的嵌入式代码向Cortex_A9处理器移植的方法的流程图。如图1所示,本发明实施例提供的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方法包括:
[0028]步骤S110:分析MicroBlaze平台的处理器与Cortex_A9处理器架构的不同之处,修改待移植的嵌入式代码中与处理器架构相关的部分。
[0029]步骤S120:使用Cortex_A9处理器中集成的外设代替MicroBlaze平台中以软核IP 实现的外设,修改待移植的嵌入式代码中与外设相关的部分。[0〇3〇]由于MicroBlaze平台和Cortex_A9平台在处理器架构和外设配置等方面有区别, 所以需要在移植前了解待移植的代码中哪些部分是为贴合原MicroBlaze平台而设计,如果想发挥Cortex-A9新平台的优势,需要做哪些方面的更新升级。[0〇31 ] MicroBlaze是基于软核的处理器,而Cortex-A9是基于硬核的ARMv7处理器,所以步骤S110中首先分析移植前后处理器的架构的不同之处,并修改待移植代码中与处理器架构相关的部分。[〇〇32] MicroBlaze处理器和Cortex_A9处理器在寻址方式上存在差异。例如,待移植代码中,在MicroBlaze处理器的总线上挂载了一个8位的IP核,使用32位指针时,MicroBlaze数据总线的字节有效信号为〇xf,且地址线能够为任意整数,所以使用32位指针即可以操作该 IP核的每一个地址。但是在C〇rteX-A9处理器上,使用32位指针时可以访问的地址只能是4 的整数倍,否则会出现数据异常。因此,在本发明的优选实施例中,判断待移植代码中32位的处理器总线上是否挂载了 8位的IP核,当存在这种情况时,在待移植代码中修改接口数据长度,使该IP核移植到Zynq平台上后可以和Cortex-A9处理器互联。[〇〇33]由于不同的处理器对于数据类型长度的定义可能有区别,例如对于int型的字长, 有的处理器定义为4字节的长度,有的处理器定义为8字节的长度。如果原平台对int的定义为8字节,新平台对int的定义为4字节,那么用新平台来运行原平台的代码就会发生数据溢出。为防止这种数据溢出的意外发生,在本发明的优选实施例中,验证C〇rteX-A9处理器中各数据类型占用的字节长度与MicroBlaze平台中相同数据类型占用的字节长度是否相等, 如果某一种数据类型占用的字节长度不相等,则在待移植的嵌入式代码中修改该数据类型占用的字节长度。经验证,MicroBlaze平台与Cortex-A9处理器两种架构各数据类型的字长是一致的。[〇〇34]处理器对于异步事件的处理是基于异常机制的,所以正确的配置异常非常重要。 MicroBlaze平台有9种不同的异常,其中用来处理用户关系的异步事件的中断异常编号为 16,但是在Cortex-A9处理器中,中断异常编号为5,所以在本发明的优选实施例中,在待移植的嵌入式代码中修改用来处理用户关系的异步事件的中断异常编号,即将中断异常编号由16改为5,另外,对于用户自己的中断服务程序在异常表中的注册及异常的使能,xilinx 公司提供了针对两种平台的bsp代码,待移植的代码中用户自己的中断服务程序在异常表中的注册及异常的使能是根据MicroBlaze平台的bsp代码编写的,在代码移植的过程中,应当参考C〇rteX-A9处理器的bsp代码适应性修改用户自己的中断服务程序在异常表中的注册及异常的使能。[〇〇35]当程序需要处理的事务有精确的时序要求时,充分发挥处理器中定时器的功能会达到非常高的效率,因此在嵌入式软件代码中定时器有很广泛的应用。软核处理器 MicroBlaze的设计风格简约,架构中不集成定时器,而是使用了挂载在总线上的定时器IP 核;而C〇rteX-A9处理器架构中集成了一个32位定时器,对于处理器来说此定时器的访问更加的便捷,所以用这个集成的定时器代替原本的定时器IP核会提高定时的精度。但是由于 MicroBlaze处理器和Cortex_A9处理器的时钟可能是不同的,同样是1000个时钟,对于两个平台来说代表的实际时间可能是不同的,因此需要在待移植的代码中修改与定时器有关的部分。使用CorteX-A9集成的定时器时应注意:该定时器的时钟频率为CPU频率的1/2;计数器的生长方向为向上累加;在自动模式下,若计数器值到达0则重新加载缺省值,应当据此修改代码中与定时器有关的部分,例如代码中利用到原定时器IP核的频率,那么可能需要将这个频率修改为C〇rtex-A9处理器的CPU频率的1/2,与C〇rtex-A9集成的定时器的频率对应。[0〇36] MicroBlaze平台中的大量外设是通过软核IP来实现的,Cortex_A9处理器外设集成度更高,为了更好的发挥Cortex-A9平台的性能,步骤S120使用Cortex-A9处理器中集成的外设代替的原设计中的以软核IP实现的外设,由于硬件上架构发生了改动,所以需要对待移植的嵌入式软件代码做相应的修改。
[0037]中断是处理器获取异步事件的有效手段,大部分嵌入式程序设计更是与其息息相关。由于处理器需要应对的状况很复杂,所以中断需要由中断控制器统一管理。MicroBlaze 的中断管理基于软核中断控制器,而Zynq平台则是由性能更好的硬核中断控制器ScuGic实现。在本发明的优选实施例中,在将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植时,使用Zynq平台的硬核中断控制器ScuGic代替MicroBlaze平台的软核中断控制器,配置中断的触发的极性及形式,建立中断处理函数及向量表的关系,建立中断源和中断控制器的连接,使能中断控制器。[〇〇38] MicroBlaze中实现IIC控制器的方式为软核IP,但是当IIC从设备没有正确返回 ACK信号时会导致程序出现“假死”状态,因此在本发明的优选实施例中,使用C〇rteX-A9处理器集成的IIC控制器代替MicroBlaze平台中以软核IP实现的IIC控制器,即使从设备没有正确ACK信号返回,程序也可以灵活的执行。另外,MicroBlaze的IIC控制器可以配置的物理管脚的选择有很多,但是在Zynq平台中IIC控制器可以配置的物理管脚受到Bank的限制,因此在本施例中,通过配置Zynq平台的EM10来配置IIC控制器的物理管脚,使用xilinx公司提供的EM10配置方法使物理管脚的选择更加灵活。[0〇39] MicroBlaze和Zynq两种平台的软件开发通常都采用xilinx出品的SDK,一种基于 eclipse界面、定制版gcc编译器和gdb调试器的嵌入式开发环境。使用此环境在开发两种平台的用户程序时区别不大,但是跟平台相关的底层bsp代码有着本质的不同,bsp是介于硬件和操作系统中驱动层程序之间的一层,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。为了提供一种简便的在MicroBlaze项目基础之上建立Zynq的bsp工程的方法,在本发明优选实施例中,在 MicroBlaze项目基础之上,使用tel文件建立Zynq平台的bsp工程。
[0040]xilinx公司提供的SDK支持使用tel文件生成工程,且原厂提供了一些参考版本的tel文件。[0041 ]对于建立MicroBlaze工程的tel文件,
[0042]将sdk create_hw_project命令后修改为Zynq的硬件描述文件,如zynq.hdf;
[0043]将sdk create_bsp_project命令中-proc选项后修改为ps7_cortexa9_0字符串;
[0044]将sdk create_app_project命令中-proc选项后改为ps7_cortexa9_0字符串;
[0045]在xilinx vivado开发环境的cmd栏中使用xsct命令执行修改后的tel文件即可以生成Zynq版本的bsp及工程。[0〇46]综上所述,本发明提供的一种将MicroBlaze平台的嵌入式代码向Cortex_A9处理器移植的方法,与现有技术相比,具有以下有益效果:
[0047]1、通过分析MicroBlaze平台的处理器与Cortex_A9处理器架构的不同之处,修改待移植的嵌入式代码中与处理器架构相关的部分,使MicroBlaze平台的优秀代码可以在新的Zynq平台上运行,避免了重复开发。
[0048]2、通过使用Cortex_A9处理器中集成的外设代替MicroBlaze平台中以软核IP实现的外设,修改待移植的嵌入式代码中与外设相关的部分,使MicroBlaze平台的代码可以运行在性能更好的硬件架构上,进一步激发了原有代码的活力。
[0049]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【主权项】
1.一种将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方法,其特征在于, 所述方法包括:分析MicroBlaze平台的处理器与Cortex-A9处理器架构的不同之处,修改待移植的嵌 入式代码中与处理器架构相关的部分;使用Cortex-A9处理器中集成的外设代替MicroBlaze平台中以软核IP实现的外设,修 改待移植的嵌入式代码中与外设相关的部分。2.如权利要求1所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述修改待移植的嵌入式代码中与处理器架构相关的部分,具体包括:当 MicroBlaze平台中有8位的IP核直接挂载在32位总线上时,在待移植的嵌入式代码中修改 接口数据长度,使所述8位的IP核与Cortex-A9处理器互联。3.如权利要求2所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述修改待移植的嵌入式代码中与处理器架构相关的部分,还包括:验证 C〇rteX-A9处理器中各数据类型占用的字节长度与MicroBlaze平台中相同数据类型占用的 字节长度是否相等;若不相等,则在待移植的嵌入式代码中修改相关的数据类型占用的字 节长度,防止数据溢出。4.如权利要求3所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述修改待移植的嵌入式代码中与处理器架构相关的部分,还包括:在待 移植的嵌入式代码中修改用来处理用户关系的异步事件的中断异常编号,并根据Cortex-A9处理器的bsp代码适应性修改用户自己的中断服务程序在异常表中的注册及异常的使能。5.如权利要求4所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述修改待移植的嵌入式代码中与处理器架构相关的部分,还包括:使用 Cortex-A9处理器中集成的32位定时器代替MicroBlaze平台中挂载在总线上的定时器IP 核,修改待移植的嵌入式代码中的定时器IP核部分。6.如权利要求5所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述修改待移植的嵌入式代码中的定时器IP核部分包括:将定时器的时钟 频率修改为CPU频率的1/2;将计数器的生长方向修改为向上累加;在自动模式下,若计数器 值到达0则重新加载缺省值。7.如权利要求1所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述使用Cortex-A9处理器中集成的外设代替MicroBlaze平台中以软核IP 实现的外设,修改待移植的嵌入式代码中与外设相关的部分,具体包括:使用Zynq平台的硬核中断控制器ScuGic代替MicroBlaze平台的软核中断控制器;配置中断的触发的极性及形式;建立中断处理函数及向量表的关系;建立中断源和中断控制器的连接;使能中断控制器。8.如权利要求7所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述使用Cortex-A9处理器中集成的外设代替MicroBlaze平台中以软核IP 实现的外设,修改待移植的嵌入式代码中与外设相关的部分,还包括:使用C〇rteX-A9处理器集成的IIC控制器代替MicroBlaze平台中以软核IP实现的IIC控制器,通过配置Zynq平台 的EM10来配置IIC控制器的物理管脚。9.如权利要求1-8任一项所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器 移植的方法,其特征在于,所述方法还包括,在MicroBlaze项目基础之上,使用tel文件建立 Zynq平台的bsp工程。10.如权利要求9所述的将MicroBlaze平台的嵌入式代码向Cortex-A9处理器移植的方 法,其特征在于,所述在MicroBlaze项目基础之上,使用tel文件建立Zynq平台的bsp工程, 具体包括:将所述tel文件中sdk create_hw_project命令后修改为Zynq平台的硬件描述文件;将所述tel文件中sdk create_bsp_project命令中-proc选项后修改为ps7_cortexa9_ 〇字符串;将所述tel文件中sdk create_app_project命令中-proc选项后修改为ps7_cortexa9_ 〇字符串;在xilinx vivado开发环境的cmd栏中使用xset命令执行所述tel文件生成Zynq版本的 bsp工程。
【文档编号】G06F9/44GK105975257SQ201610270543
【公开日】2016年9月28日
【申请日】2016年4月27日
【发明人】舒玉龙
【申请人】北京小鸟看看科技有限公司