一种8位宽外部存储器控制器edac校验码的生成方法

文档序号:9615023阅读:1299来源:国知局
一种8位宽外部存储器控制器edac校验码的生成方法
【技术领域】
[0001] 本发明涉及一种EDAC校验码的生成方法,特别是空间处理器8位宽外部存储器控 制器的EDAC功能仿真校验码的生成方法,属于计算机应用技术领域。
【背景技术】
[0002] 空间处理器受辐射影响,可能导致存储体中存储内容在'0'、'1'之间突变,从 而导致半导体电路出现错误的逻辑状态,影响半导体器件的功能,通常称之为单粒子翻转 (SEU),因此,需要具备EDAC(ErrorDetectionAndCorrection)功能。空间处理器的外部 存储器一般有8位宽和32位宽两种。32位宽外部存储器的抗单粒子翻转,需要另外一个 用于存放校验码的8位宽外部存储器的配合,由于数据位和校验码分别存放在两个存储体 中,所以数据位和校验码的地址相同,因此,32位宽的外部存储器主要用于对速度要求较高 的应用。8位宽外部存储器的应用主要是考虑到体积上的要求,它的校验码和数据位存放在 同一个存储体中。
[0003] 在流片之前需要对空间处理器8位宽的外部存储器控制器进行功能仿真,其中比 较重要的就是EDAC功能仿真,而该功能仿真需要R0M/RAM中可执行程序的校验码。
[0004] 以往空间处理器的8位宽外部存储器控制器硬件设计上要求存储器中数据位对 应的校验码是顺序存储的,一般是将校验码从存储器的四分之三处地址开始往后顺序排 放,处理器在读取校验码时需要为了计算四分之三处地址而要求知道存储器的容量,因此, 需要增加管脚来专门判断存储器的容量,从而会增加内部逻辑单元,影响处理器的性能。

【发明内容】

[0005] 本发明解决的技术问题是:克服现有技术的不足,提供一种8位宽外部存储器控 制器EDAC校验码的生成方法,能够节省管脚数,减少内部逻辑单元,提高处理器性能。
[0006] 本发明的技术方案是:一种8位宽外部存储器控制器EDAC校验码的生成方法,包 括如下步骤:
[0007] (1. 1)在高级程序编译生成8位宽外部存储器控制器可执行测试程序的过程中, 通过所用链接脚本的配合,将text段、data段和rodata段的地址以0x10对齐,得到一个 对齐的可执行测试程序的dat文件;
[0008] (1. 2)读取dat文件,得到该文件中数据存储的首地址FirstAdd;
[0009] (1. 3)读取给定的地址位宽n,根据空间处理器外部存储器的具体情况判断地址 位宽是否合理,如果不合理给出提示后结束,否则根据地址位宽和步骤(1. 2)得到的dat文 件中数据存储的首地址,计算存储器的最大地址MaxAdd,MaxAdd的计算公式为:MaxAdd= 2n+FirstAdd;
[0010] (1. 4)逐行读取dat文件并统计出该文件的行数DataLine,根据DataLine判断输 入数据量是否小于存储器的容量,如果不小于就给出提示并结束,否则计算校验码所占的 行数ParLine,计算ParLine的方法为:
[0011] (a)当DataLine是 4 的整数倍时,ParLine=DataLine/4 ;
[0012] (b)当DataLine不是 4 的整数倍时,ParLine=DataLine/4+1 ;
[0013] (1. 5)根据DataLine与ParLine判断数据位与校验码的总容量是否大于存储器的 容量,如果大于就给出提示并结束,否则开始计算校验码;
[0014] (1. 6)将原来dat文件中的数据和新生成的校验码写到输出文件中,原来的数据 位从文件头开始顺序排放,而新生成的校验码从文件尾开始倒序排放,中间部分根据地址 位宽η和校验码行数ParLine确定补0情况,得到带EDAC校验码的输出文件。
[0015] 所述步骤(1. 1)中对齐的可执行测试程序dat文件的格式为:
[0016] 文件的每行有5个数据,第一列是以0x10递增的十六进制的32bits地址,每行的 地址后面是4个十六进制的32bits数据位,每行的第一个数据位在存储器中的地址就是该 行第一列的数据。
[0017] 所述步骤(1. 6)中得到带EDAC校验码的输出文件的方法为:
[0018] (3. 1)将原来dat文件中的数据依次写到输出文件中,格式与原来的dat文件一 样。
[0019] (3. 2)根据存储器的最大地址MaxAdd和校验码行数ParLine确定补0情况,并写 到输出文件中:
[0020](a)如果行首的地址小于(MaxAdd-16*ParLine),那么该行后面的4个数据位全部 补〇 ;
[0021] (b)如果行首的地址等于(MaxAdd_16*ParLine),那么该行后面的4个数据位不补 〇或者部分补〇 ;
[0022] (c)如果行首的地址大于(MaxAdd-16*ParLine),那么该行不补0,数据位都是校 验码,将计算得到的校验码按倒序写到该行后面的数据位,直到原来dat文件中第一行的 第一个数据位的校验码被写到输出文件中为止。
[0023] 所述步骤(b)的实现方式为:
[0024] (4. 1)如果(DataLine% 4)等于0,那么该行不用补0,该行的第一个数据位为原 来dat文件中最后一行数据位的校验码,第二个数据位为原来dat文件中倒数第二行数据 位的校验码,第三个数据位为原来dat文件中倒数第三行数据位的校验码,第四个数据位 为原来dat文件中倒数第四行数据位的校验码;
[0025] (4. 2)如果(DataLine% 4)等于1,那么该行补3个0,即该行的前三个数据位都 为〇,最后一个数据位为原来dat文件中最后一行数据位的校验码;
[0026] (4. 3)如果(DataLine% 4)等于2,那么该行补2个0,即该行的前两个数据位都 为0,第三个数据位为原来dat文件中最后一行数据位的校验码,第四个数据位为原来dat 文件中倒数第二行数据位的校验码;
[0027] (4. 4)如果(DataLine% 4)等于3,那么该行补1个0,即该行的第一个数据位为 〇,第二个数据位为原来dat文件中最后一行数据位的校验码,第三个数据位为原来dat文 件中倒数第二行数据位的校验码,第四个数据位为原来dat文件中倒数第三行数据位的校 验码。
[0028] 与现有技术相比,本发明具有如下有益效果:
[0029] (1)本发明提供一种8位宽外部存储器控制器EDAC校验码的生成方法,将存储器 中数据位对应的校验码倒序存储,处理器在读取校验码时不需要为了计算四分之三处地址 而要求知道存储器的容量,而是将所有地址线上的数值都置为1,直接到存储器的最末端读 取第一个数据位的校验码,接着倒序读取其余的校验码,从而节省管脚数,减少内部逻辑单 兀,提尚处理器性能;
[0030] (2)在生成作为输入的dat文件时,通过所用链接脚本的配合,将text段、data段 和rodata段的地址对齐,避免了不对齐时空缺处读到错误数据,或者校验码和地址对应不 上的错误,也大大减少了读取数据、计算校验码以及写到输出文件的工作量,可以提高8位 宽外部存储器控制器的功能验证效率,缩短产品开发周期;
[0031] (3)本方法对输入参数会进行判断,会将原dat文件的数据量与存储器的容量进 行比较,以及在计算校验码前将数据位和校验码的总容量与存储器的容量进行比较,每次 判断或者比较后,如果不合理都会给出相应的错误提示,并立即结束程序的运行,使用者可 以根据提示调整输入参数,非常简单方便,极大地节省了验证时间。
【附图说明】
[0032] 图1为本发明方法的流程图;
[0033] 图2为本发明ROM中原dat文件格式示意图;
[0034] 图3为本发明ROM中带校验码的输出文件格式示意图。
【具体实施方式】
[0035] 本发明提出了一种8位宽外部存储器控制器EDAC校验码的生成方法,如图1所示 为本发明方法流程图,具体步骤如下:
[0036] (1. 1)在高级程序编译生成8位宽外部存储器控制器可执行测试程序的过程中, 通过所用链接脚本的配合,将text段、data段和rodata段的地址都以0x10对齐,得到一 个对齐的可执行测试程序dat文件。
[0037] 可执行测试程序可以是ROM中运行的可执行测试程序的dat文件,也可以是 RAM中运行的可执行测试程序的dat文件,这两个dat文件的格式完全一样,只是数据存 储的首地址FirstAdd不一样,ROM中的FirstAdd为 0x00000000,RAM中的FirstAdd为 0x20000000〇
[0038] 对齐的可执行程序dat文件的格式为:
[0039] 文件的每行有5个数据,第一列是以0x10递增的十六进制的32bits地址,每行的 地址后面是4个十六进制的32bits数据位,每行的第一个数据位在存储器中的地址就是该 行第一列的数据。如图2所示为ROM中可执行测试程序的dat文件格式示意图。
[0040] (1. 2)读取dat文件,得到该文件中数据存储的首地址FirstAdd。
[0041] (1. 3)读取给定的地址位宽n,根据空间处理器外部存储器的具体情况判断地址 位宽是否合理,如果不合理给出提示(地址位宽过大或过小)后结束,否则根据地址位宽和 步骤(1. 2)得到的dat文件中数据存储的首地址,计算存储器的最大地址MaxAdd,MaxAdd 的计算公式为:MaxAdd= 2n+FirstAdd;
[0042] (1· 4)逐行读取dat文件并统计出该文件的行数DataLine,根据DataLine判断输 入数据量是否小于存储器的容量,如果不小于就给出提示(输入数据量大于等于存储器的 容量)并结束,否则计算校验码所占的行数ParLine,计算ParLine的方法为:
[0043] (a)当DataLine是 4 的整数倍时,ParLine=DataLine/4 ;
[0044] (b)当DataLine不是 4 的整数倍时,ParLine=DataLine/4+1 ;
[0045] (1. 5)根据DataLine与ParLine判断数据位与校验码的总容量是否大于存储器的 容量,如果大于就给出提示(输入数据量加校验码量大于存储器的容量)并结束,否则开始 计算校验码;
[0046] (1. 6)将原来dat文件中的数据和新生成的校验码写到输出文件中,原来的数据
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1