一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种ZYNQ系列芯片引导启动的改进设计方法与流程

2022-11-14 02:05:09 来源:中国专利 TAG:

一种zynq系列芯片引导启动的改进设计方法
技术领域
1.本发明涉及引导启动技术领域,特别是一种zynq系列芯片引导启动的改进设计方法。


背景技术:

2.ultrascale
tm
mpsoc同时拥有ps端和pl端,ps又有两种不同的多核处理器可以运行底层代码或者操作系统及其应用,对于ocm(onchipram)内存空间,主要分为256k的axisram和128k的ahbsram,引导启动的主要目的是将flash中的程序搬移到ocm,其中引导启动程序放在axisram中,业务app放在ahbsram。
3.目前zynq的启动过程包括三个功能阶段,预配置阶段(pre-configuration),配置阶段(configuration),后配置阶段(post-configuration),前面两个阶段是zynq底层芯片配置,而后配置阶段fsbl才会引导启动bit和app。在fsbl执行完搬移bit后,前两个配置阶段处于无用状态,因此可以考虑将此时的axiaram内存释放,替换为内存占用空间更小的二级引导boot,从而达到扩大内存的目的。
4.目前国内外针对zynq内存不足的问题,提出了很多可行的技术方案,这些方案各自存在优缺点。
5.首先第一种方案,修改zynq中icf内存管理文件,每个芯片器件,iar有默认的icf目录对应每一种器件,由用户自行配置,可以将axisram一部分内存划分给ahbsram,但是由于fsbl本身占用空间达到200k,因此该方案对于业务app最多是增加56k。
6.其次第二种方案,采用外挂ddr的方式,使用该方式可以直接扩充运行内存几个g的空间,但是ddr硬件成本高,并且涉及到复杂的硬件电路配置,而对于几百k的业务app来说,使用外挂ddr的方式存在一定的资源浪费。
7.然后第三种方案,采用xip本机执行启动的方式,本地执行时,代码段不必先加载到物理内存中,wince只分配虚拟地址空间给代码段,并把它映射到flashrom上,这就大大节省了物理内存,但是xip只支持允许现行访问的flashrom,xip加载方式的缺点就是执行速度相对较慢,因此xip不太适合实时性要求较高的场合。
8.最后第四种方案,优化业务app代码,做到本身代码的节流,即简化代码程序,删减冗余代码,但是该方式可能会影响工程的整体功能。
9.目前zynq系列芯片存在一定的内存不足问题,单一的业务app主要运行在ahb sram中,其内存是128k,而一般工程大小为200k左右,因此就针对该问题提出了引导启动的改进设计方法。


技术实现要素:

10.鉴于此,本发明提供一种zynq系列芯片引导启动的改进设计方法,开发二次引导的方式,将业务app同时运行在axisram和ahbsram中,变相的扩大运行内存空间,同时axisram相比较ahbsram,运行速度更快,可以降低功耗。
11.本发明公开了一种zynq系列芯片引导启动的改进设计方法,包括以下步骤:
12.步骤1:pmu完成zynq芯片管理模块的复位和唤醒,并加载bootrom代码;
13.步骤2:bootrom从外部存储设备中读取启动镜像,并进行搜索以及验证;
14.步骤3:完成镜像文件搬移前的待确定任务;
15.步骤4:进行镜像文件中pl端bit位流搬移;
16.步骤5:进行镜像文件中二级boot复制搬移;
17.步骤6:利用二级boot完成镜像文件中业务app的二次引导;
18.步骤7:采用汇编的方式将执行地址转换到业务app的入口开始地址。
19.进一步地,所述步骤1包括:
20.步骤11:por上电后,初始化pmu重置;然后执行pmu的rom中的预处理代码;
21.步骤12:pmu完成复位和唤醒功能后,引导csu复位,确定硬件版本和cpu启动方式;
22.步骤13:csu复位后,加载csu rom代码,其包含bootrom;
23.步骤14:bootrom完成对外部设备的初始化,从而使得arm核能够成功访问该外部设备;其中,所述外部设备包括sd卡、nand、nor、qspi flash。
24.进一步地,所述步骤2包括:
25.确定启动方式为qspi flash,对镜像文件进行搜索和验证,完成对镜像文件的第一部分,即fsbl的搬移;同时分配flash中存储fsbl、bit、二级引导app、业务app的区域的开始地址,然后对镜像文件的id和checksum进行验证,以及加密验证。
26.进一步地,所述步骤3包括:
27.镜像文件搬移前需要确定是否加密,是否需要身份验证,以及是否是xip,同时确定镜像文件的相关关键参数,所述相关关键参数包括设备加载地址、加载内存长度、设备执行地址,即app程序启动地址;其中,设备执行地址能够通过二级引导app的首地址,以及程序icf的配置来获取。
28.进一步地,若csu检测到分区已加密,则csu会执行解密并初始化ocm,判定启动模式设置,执行fsbl加载和可选pmu固件加载操作;执行csu rom代码后,控制权交给fsbl;fsbl使用pcap接口对含比特流的pl进行编程。
29.进一步地,所述步骤4包括:
30.采用dma寄存器进行pl端bit流的搬移,所述dma寄存器主要功能是用于实现存储器与外部设备之间的数据搬移。
31.进一步地,所述步骤5包括:
32.步骤51:确定设备id以及复制的大小;
33.步骤52:根据znyq的qspi寄存器,设置数据传输模式和传输速率;其中,采用标准spi的传输方式;
34.步骤53:利用memcpy的方式进行内存地址的数据搬移。
35.进一步地,所述第一次引导的过程为:
36.将fsbl搬移到axi sram中,将二级引导app内存搬移至ahb sram中;
37.所述第二次引导的过程为:
38.在fsbl执行完配置阶段后,清空axi sram的内存空间,然后利用二级引导boot将业务app搬移到axi sram和ahb sram中,从而启动业务app。
39.进一步地,zynq整个内存空间的划分为:
40.将axi sram的256k内存空间分配给业务app的rom区域;将ahb sram的64k内存空间分配给业务app的ram区域;划分堆栈区的具体内存大小;修改icf中起始地址,将其定义为固定地址0x20000。
41.进一步地,在所述步骤7中,所述入口开始地址能够在icf内存管理文件中进行设置,汇编部分已经封装成函数。
42.由于采用了上述技术方案,本发明具有如下的优点:通过开发二次引导技术,首先,可以大大增加可用运行内存,提高软件的运行速度;其次,节约了公司重新替换硬件所需要的成本,减轻了人力物力的浪费;然后,二次引导技术将ps端、pl端分开烧写,方便软件配置项的管理,对于后续版本更新可以更好的升级;最后,在pl端不修改的前提下,大大缩短软件调试人员的烧写时间,将原有的10分钟烧写缩减为1-2秒;本发明是直接修改软件程序进行改进,不需要额外增加硬件,同时只需要zynq系列芯片就可以实现应用,有着较好的通用性。
附图说明
43.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
44.图1为本发明实施例的第一次引导搬移示意图;
45.图2为本发明实施例的第二次引导搬移示意图;
46.图3为本发明实施例的最终内存分配结果示意图;
47.图4为本发明实施例的一种zynq系列芯片引导启动的改进设计方法的流程示意图。
具体实施方式
48.结合附图和实施例对本发明作进一步说明,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
49.本发明提供了一种zynq系列芯片引导启动的改进设计方法的实施例,具体流程如下图所示。
50.该方法首先将原有flash存储的三部分fsbl、bit、业务app,划分为四个部分fsbl、bit、二级引导app,业务app,第一次引导将fsbl搬移到axi sram中,二次引导boot搬移到ahb sram中,具体如下图1所示。
51.其次,清空axi sram的内存空间,然后利用二级引导boot将业务app搬移到axi sram和ahb sram中,具体如图2所示。
52.最后,整个ocm的分配情况是业务app占用axi sram和ahb sram,可用空间是320k,大大扩充运行空间,具体如图3所示。
53.另外,二次引导在原有zynq启动方式的基础上进行开发设计,也就是新增步骤6,参见图4,具体执行流程如下:
54.step1:pmu完成zynq芯片管理模块的复位和唤醒,并加载bootrom代码;
55.具体地,首先pmu(platform management unit平台管理单元)处理所有复位和唤醒过程,上电复位用于复位csu和pmu,该步骤是执行bootrom(嵌入处理器芯片内的一小块掩模rom或写保护闪存)中的内容,其次初始化整个系统,确定是qspi(queued spi)还是sd(secure digital memory card)卡等启动方式;对软件进行por(power-on reset电源上电复位)全方位复位,确定硬件版本,确定cpu启动方式,最终bootrom会先完成对sd卡,nand(计算机闪存设备),nor(非易失闪存),qspi flash等的初始化,从而使得arm(asynchronous response mode:异步响应方式)核能够成功访问并使用这些外设;
56.step2:bootrom从外部存储设备中读取启动镜像,并进行搜索以及验证;
57.具体地,确定启动方式(qspi flash),对镜像文件进行搜索和验证,完成对镜像文件的第一部分fsbl(first stage boot loader)的搬移;同时分配各个分区的开始地址。主要以开始地址 32k进行搜索,寻找有效的启动镜像,范围小于16m,然后对镜像文件的id和checksum进行验证,以及加密验证。
58.step3:完成镜像文件搬移前的待确定任务;
59.具体地,身份加密验证,搬移前需要确定是否加密,是否需要身份验证,是否是xip(execute in place,即芯片内执行),同时确定设备加载地址,加载内存长度,设备执行地址等。该地址是通过第二阶段的分区首地址,并且根据程序icf(内存管理文件)的配置,自动获取。
60.如果csu(configuration security unit配置安全单元)检测到分区已加密,那么csu会执行解密并初始化ocm(on chip memory)、判定启动模式设置、执行fsbl加载和可选pmu固件加载操作。执行csu rom代码后,它会将控制权交给fsbl。fsbl使用pcap(一种通用的数据流格式)接口来对含比特流的pl(fpga部分)进行编程。
61.step4:进行镜像文件中pl端bit位流搬移;
62.具体地,pl端bit位流搬移,采用dma(direct memory access,直接存储器访问)寄存器方式进行搬移,dma是一种直接内存访问的控制器,实现存储器与外设之间的数据搬移;
63.step5:进行镜像文件中二级boot复制搬移;
64.具体地,二级boot复制搬移,首先确定设备id以及复制的大小,然后根据znyq的qspi寄存器,设置传输模式和传输速率,其中采用标准spi的传输方式,最后利用memcpy的方式进行内存地址的数据搬移;
65.step6:利用二级boot完成镜像文件中业务app的二次引导;
66.具体地,该过程是改进部分,在原有基础上增加二级boot搬移,首先清除axi(总线协议)sram(静态随机存取存储器)内存空间,然后采用复制搬移的方式再次将业务app搬移到ocm中。其降低了zynq芯片实际运行的功耗;提高程序的运行速度;扩大了程序的实际运行内存;缩短了程序烧写时间。
67.step7:采用汇编的方式将执行地址转换到业务app的入口开始地址。
68.具体地,采用汇编的方式将执行地址转换到app的入口开始地址,该地址可以在icf内存管理文件中进行设置,汇编部分已经封装成函数。
69.另外,zynq整个内存空间大致分为只栈区(stack)、堆区(heap)、全局区(静态区)
(static)、程序代码区等,其具体的内存划分为:
70.首先,将axi sram的256k内存空间分配给业务app的rom区域:
71.define symbol__icfedit_region_rom_start__=0x20000;
72.define symbol__icfedit_region_rom_end__=0x5ffff;
73.其次,将ahb(先进高性能总线)sram的64k内存空间分配给业务app的ram区域:
74.define symbol__icfedit_region_ram_start__=0xe1feffff;
75.define symbol__icfedit_region_ram_end__=0xe1ffffff;
76.然后,划分堆栈区的具体内存大小:
77.define symbol__icfedit_size_vectors__=0x100;
78.define symbol__icfedit_size_cstack__=0x9000;
79.define symbol__icfedit_size_irqstack__=0x1000;
80.define symbol__icfedit_size_fiqstack__=0x200;
81.define symbol__icfedit_size_abtstack__=0x120;
82.define symbol__icfedit_size_undstack__=0x100;
83.define symbol__icfedit_size_heap__=0x500;
84.最后,为了整个二次引导软件的通用型性,修改icf中起始地址,将其定义为固定地址0x20000:
85.define region rom_startup_region=mem:[from__icfedit_regio n_rom_start__size__icfedit_size_cstartup__];
[0086]
place in rom_startup_region{section.cstartup};
[0087]
最后验证,通过某型项目进行仿真验证,首先,按照常规流程打包生成boot.bin,boot.bin包含fsbl、bit和二级boot,然后烧写到flash的起始地址位置0区域,其次将业务app.bin烧写到偏移0xe00000的位置,即14m的位置。目前经过300次的常温测试,是可行的。
[0088]
利用map(一种内存映射文件)文件分析最终内存剩余量,map文件就是通过编译器编译之后,生成的程序、数据及io空间信息的一种映射文件,里面包含函数大小,入口地址等一些重要信息。首先,对于axi sram的内存空间,可以看出只使用到0x0003c774,使用了113k,还剩余143k的内存空间,其次,对于ahb sram的内存空间,可以看出只使用到0xe1fffe68,使用了42k,还剩余24k的内存空间。
[0089]
通过上面的内存分析,可以看出目前程序使用内存是156k,剩余内存是167k,总使用量小于70%,满足工程软件的使用要求。其次,对于ps未挂接ddr(双倍速率同步动态随机存储器),或者app程序不大的工程项目,该种方法具有一定的通用性。
[0090]
至此,该系统完成了zynq系列芯片二次引导内存扩充的验证工作。
[0091]
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献