基于Zynq‑7000的片上存储器抗单粒子翻转防护方法与流程

文档序号:12034459阅读:685来源:国知局
基于Zynq‑7000的片上存储器抗单粒子翻转防护方法与流程

本发明涉及软件方法领域,具体应用于星载系统中,具体是一种基于zynq-7000的片上存储器抗单粒子翻转防护方法。



背景技术:

近年来,商用器件(commercial-off-the-shelf,cots)因成本低、性能高、不受国外进口限制等特点被越来越多地应用于航天领域中。其中,xilinx公司的zynq-7000系列器件将双核arm处理器与可编程逻辑、硬ip外设紧密集成,其灵活性和可配置性的完美结合受到小卫星领域的广泛关注,逐步应用于航天领域的工程实践中。

zynq-7000socps部分内的双核armcortex-a9处理器可采用非对称多处理(asymmetricmulti-coreprocessor,amp)机制以并行或冗余的方式执行不同的任务,使系统性能实现最大化。zynq-7000socps部分内的片上存储器(on-chipmemory,ocm)包含256kb的ram存储空间,具有较高的访问吞吐量,是zynq-7000soc片内双核处理器之间进行数据交互和资源共享的重要资源媒介。但zynq-7000作为cots器件其抗辐射能力较低,其片上存储器很容易受到对ram敏感的单粒子翻转的影响,造成存储器数据状态的改变,导致双核处理器通信的失效,甚至导致星载系统指令或数据的失效,引发系统崩溃。

在星载系统的设计中,不仅要满足星载系统基本的功能需求,更要考虑星载系统的高可靠性要求。目前,针对单粒子翻转进行存储器加固的常用方法是硬件edac电路,主要包括处理器自带edac电路和用fpga实现edac电路两类。其中,处理器自带edac电路通常由芯片的安全等级决定,如宇航级芯片,而zynq-7000内的片上存储器仅具有奇偶校验功能,不具备纠错能力,不满足星载系统抗单粒子翻转的需求;用fpga实现edac电路具有设计灵活、可配置的特点,但sram型fpga作为易失性存储,其自身可靠性存在问题,且最重要的是双核处理器与片上存储器已集成在同一芯片中,无法通过外加硬件edac电路实现存储器的加固。



技术实现要素:

为解决传统硬件edac在zynq-7000内片上存储器ocm加固的局限性,本发明提供了一种基于zynq-7000的片上存储器抗单粒子翻转软件防护设计方法,利用zynq-7000内双核arm处理器和软件生成中断(softwaregenerateinterrupt,sgi)的资源特性,采用软件edac方法实现ocm的数据容错,保障双核通信的可靠性。

一种基于zynq-7000的片上存储器抗单粒子翻转防护方法,cpu0或cpu1中的原始数据通过软件edac模块进行编码操作,写入到ocm中;ocm中的hsiao码数据通过软件edac模块进行解码操作,被cpu0或cpu1读取;当数据读取检测到单位错或双位错时,sgi产生软件中断进行双核同步数据回写或通知cpu0和cpu1进行处理,其特征在于:

a、关键变量定义及初始化:将需存储在ocm且待加固的变量作为关键变量,定义关键变量的位宽,指定关键变量在ocm中的存储地址,初始化关键变量,并对sgi进行使能;

b、数据编解码操作:采用具有纠一检二功能的hsiao码作为ocm加固的纠错码,根据hsiao码算法原理,对cpu写入ocm的数据进行编码操作,对cpu从ocm读取的数据进行解码操作;

c、错误中断生成:采用zynq-7000内部软件生成中断sgi处理检测到的错误,当从ocm读取数据检测到单位错时,sgi产生软件中断sec,通知cpu0和cpu1进行同步回写;当从ocm读取数据检测到双位错时,sgi产生软件中断ded,通知cpu0和cpu1进行处理;

d、双核同步回写:当数据读取检测到单位错时,通过hsiao码解码操作可以得到cpu所需的正确数据,但为便于后续数据的使用需将正确数据回写到ocm中。同时为避免一个cpu在数据回写过程中被另一个cpu访问,采取双核同步回写操作,直到数据回写完成才可以被访问。

进一步的,所述的关键变量定义及初始化过程中,将所有存储到ocm的关键变量定义成位宽为32位的无符号长整型数,其中仅低16位有效,高16位全部清0,用作(13,8)hsiao码校验位的存储;为所有的关键变量分配ocm存储地址,zynq-7000内ocm默认的映射地址空间为(0x0000_0000~0x0003_ffff)和(0xffff_0000~0xffff_ffff);对存储到ocm的关键变量进行初始化赋值。

进一步的,所述的解码操作过程中,当cpu向ocm写入数据时,从cpu0或cpu1中读取原始数据,将原始数据的低16位有效数据拆分成两组8位数据,对8位数据进行移位操作存入一个长度为8的数据位数组中,使数组中各元素最低位的值为8位数据相应位的值;根据上述得到的数据数组与(13,8)hsiao码算法获取的生成矩阵g,对每一个8位数据进行编码操作,并获取一个长度为5的校验位数组;根据hsiao码的数据位分配,将两组数据位数组和校验位数组进行移位操作,合成一个32位hsiao码数据,存入ocm中。

进一步的,所述的解码操作过程中,当cpu从ocm读取数据时:从ocm中读取hsiao码数据,并记录该数据地址,将hsiao码数据拆分成两组(13,8)hsiao码数据,对13位编码数据进行移位操作存入一个长度为13的编码位数组中,使数组中各元素最低位的值为编码数据相应位的值;根据上述得到的编码位数组与(13,8)hsiao码算法获取的监督矩阵h,对每一个编码数据进行解码操作,并获取一个长度为5的校验子数组;将两组校验子数组进行移位操作,使校验子s相应位的值为数组中各元素最低位的值,根据校验子s得到无错、单位错和双位错的错误状态标志,对于无错和单位错可以得到正确的数据,被cpu0或cpu1读取和使用。

进一步的,所述的错误中断生成过程中,为单位错和双位错分别分配一个sgiid号,初始化并开启对应的sgi;当检测到错误时,将sgi连接到所有的cpu,通过写zynq-7000内部icdsgir寄存器,产生相应的软件中断,同时对错误状态标志sec_flag或ded_flag置位;进入单位错或双位错对应的软件中断服务函数。

进一步的,所述的双核同步回写过程中,当cpu0检测到单位错时:cpu0解码操作对单位错状态标志sec_flag置1,cpu0和cpu1同时进入单位错中断服务程序;在cpu0中,获取待回写变量的存储地址和正确数据,并将该正确数据回写到对应的存储地址,将sec_flag置0;在cpu1中,等待cpu0完成回写操作,直到sec_flag为0。

进一步的,所述的双核同步回写过程中,当cpu1检测到单位错时:cpu1解码操作对单位错状态标志sec_flag置2,cpu0和cpu1同时进入单位错中断服务程序;在cpu1中,获取待回写变量的存储地址和正确数据,并将该正确数据回写到对应的存储地址,将sec_flag置0;在cpu0中,等待cpu1完成回写操作,直到sec_flag为0。

本发明的有益效果是:通过采用本发明的技术方案,

(1)该方法利用zynq-7000内部双核arm处理器和软件生成中断sgi等自带的资源特性,将软件edac模块分为数据编解码模块、错误中断生成模块和双核同步回写模块三部分,使关键变量具有纠正1位错误的同时能检测到2位错误,以及数据回写的能力。

(2)该方法采取双核同步回写操作,解决一个cpu在数据回写过程中另一个cpu重复读取到错误数据的问题,避免数据回写对双核arm处理器访问ocm造成的冲突。

(3)该方法属于空间环境中存储器加固的软件处理手段,解决了zynq-7000内cpu与ocm之间无法硬件容错的缺陷,可对ocm中指定地址的数据进行加固,满足双核之间数据访问的条件,提高双核通信的可靠性。

附图说明

图1为本发明软件edac原理框图。

图2为hsiao码数据位分配图。

图3为软件edac数据写入流程图。

图4为软件edac数据读取流程图。

图5为cpu0双核同步回写程序流程图。

图6为cpu1双核同步回写程序流程图。

具体实施方式

下面结合附图对本发明做进一步说明。

一种基于zynq-7000的片上存储器抗单粒子翻转防护方法,利用zynq-7000芯片内双核arm处理器和软件生成中断(softwaregenerateinterrupt,sgi)的资源特性,采用软件edac方法实现ocm的数据容错,保障双核通信的可靠性,其原理框图如图1所示。

在图1中,cpu0或cpu1中的原始数据通过软件edac模块进行编码操作,写入到ocm中;ocm中的hsiao码数据通过软件edac模块进行解码操作,被cpu0或cpu1读取;当数据读取检测到单位错或双位错时,sgi产生软件中断进行双核同步数据回写或通知cpu0和cpu1进行处理。主要步骤如下:

步骤(一)关键变量定义及初始化:将需存储在ocm且待加固的变量作为关键变量,定义关键变量的位宽,指定关键变量在ocm中的存储地址,初始化关键变量,并对sgi进行使能;具体为:

(1)将所有存储到ocm的关键变量定义成位宽为32位的无符号长整型数,其中仅低16位有效,高16位全部清0,用作(13,8)hsiao码校验位的存储,其hsiao码数据位分配如图2所示;

(2)为所有的关键变量分配ocm存储地址,zynq-7000内ocm默认的映射地址空间为(0x0000_0000~0x0003_ffff)和(0xffff_0000~0xffff_ffff)。

(3)对存储到ocm的关键变量进行初始化赋值。

步骤(二)数据编解码操作:采用具有纠一检二功能的hsiao码作为ocm加固的纠错码,根据hsiao码算法原理,对cpu写入ocm的数据进行编码操作,对cpu从ocm读取的数据进行解码操作,具体为:

如图3所示,当cpu向ocm写入数据时:

(1)从cpu0或cpu1中读取原始数据,将原始数据的低16位有效数据拆分成两组8位数据,对8位数据进行移位操作存入一个长度为8的数据位数组中,使数组中各元素最低位的值为8位数据相应位的值;

(2)根据上述得到的数据数组与(13,8)hsiao码算法获取的生成矩阵g,对每一个8位数据进行编码操作,并获取一个长度为5的校验位数组;

(3)根据图2所示的hsiao码数据位分配,将两组数据位数组和校验位数组进行移位操作,合成一个32位hsiao码数据,存入ocm中。

如图4所示,当cpu从ocm读取数据时:

(1)从ocm中读取hsiao码数据,并记录该数据地址,将hsiao码数据拆分成两组(13,8)hsiao码数据,对13位编码数据进行移位操作存入一个长度为13的编码位数组中,使数组中各元素最低位的值为编码数据相应位的值;

(2)根据上述得到的编码位数组与(13,8)hsiao码算法获取的监督矩阵h,对每一个编码数据进行解码操作,并获取一个长度为5的校验子数组;

(3)将两组校验子数组进行移位操作,使校验子s相应位的值为数组中各元素最低位的值,根据校验子s得到无错、单位错和双位错的错误状态标志,对于无错和单位错可以得到正确的数据,被cpu0或cpu1读取和使用。

步骤(三)错误中断生成:采用zynq-7000内部软件生成中断sgi处理检测到的错误,当从ocm读取数据检测到单位错时,sgi产生软件中断sec,通知cpu0和cpu1进行同步回写;当从ocm读取数据检测到双位错时,sgi产生软件中断ded,通知cpu0和cpu1进行处理。具体为:

(1)为单位错和双位错分别分配一个sgiid号,初始化并开启对应的sgi;

(2)当检测到错误时,将sgi连接到所有的cpu,通过写zynq-7000内部icdsgir寄存器,产生相应的软件中断,同时对错误状态标志sec_flag或ded_flag置位;

(3)进入单位错或双位错对应的软件中断服务函数。

步骤(四)双核同步回写:当数据读取检测到单位错时,通过hsiao码解码操作可以得到cpu所需的正确数据,但为便于后续数据的使用需将正确数据回写到ocm中,同时为避免一个cpu在数据回写过程中被另一个cpu访问,采取双核同步回写操作,直到数据回写完成才可以被访问,如图4、图5所示。具体为:

当cpu0检测到单位错时:

(1)cpu0解码操作对单位错状态标志sec_flag置1,cpu0和cpu1同时进入单位错中断服务程序;

(2)在cpu0中,获取待回写变量的存储地址和正确数据,并将该正确数据回写到对应的存储地址,将sec_flag置0;在cpu1中,等待cpu0完成回写操作,直到sec_flag为0。

当cpu1检测到单位错时:

(1)cpu1解码操作对单位错状态标志sec_flag置2,cpu0和cpu1同时进入单位错中断服务程序;

(2)在cpu1中,获取待回写变量的存储地址和正确数据,并将该正确数据回写到对应的存储地址,将sec_flag置0;在cpu0中,等待cpu1完成回写操作,直到sec_flag为0。

以上所述实施例仅为表达本发明的实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形、同等替换、改进等,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1