内存参数配置方法、 处理器及设备 【技术领域】
本发明涉及通信技术, 尤其涉及一种内存参数配置方法、 处理器及设备。背景技术 一般通信系统都需要集成多种外设控制器的处理器, 一般称为嵌入式处理器。嵌 入式处理器需要大容量存储器, 简称为内存, 用于保存嵌入式处理器的运行程序和数据。 目 前常用的存储器有同步动态随机存储器 (Synchronous Dynamic Radom Access Memory ; 简称为 : SDRAM)、 双倍数据率同步动态随机存储器 (Double Data Rate SDRAM ; 简称为 : DDR SDRAM)、 第二代双倍数据率同步动态随机存储器 (DDR2 SDRAM)、 第三代双倍数据率同步动 态随机存储器 (DDR3 SDRAM), 这些存储器所允许的操作速率越来越高, 其操作控制动作也 越来越复杂。
嵌入式处理器通过相应技术的内存控制器对存储器件进行管理。 内存控制器和内 存器件之间采用一组电气信号线连接, 这组电气信号线一般有用户同步工作节奏的时钟信 号、 命令控制信号、 地址信号、 数据信号等。为了使内存控制器和内存器件能够协同工作, 两者之间定义了各种严格的标准信号传输格式, 包括信号节拍变化的先后关系 ( 简称为时 序 )。 这些信号的时序受内存控制器、 内存器件、 连接两者的印制板走线的电气特性影响, 同 时还受外部的温度、 湿度、 电磁干扰等环境因素的影响。为了消除这些影响, 需要在内存控 制器内和内存器件内配置一定的参数, 这组参数配置后, 可以使内存控制器和内存器件按 照标准的时序关系运行, 从而使内存控制器可以正确存取内存器件。正确配置内存控制器 和内存器件的时序参数使之能稳定工作往往比较困难, 如何获得正确的配置参数也比较困 难。
目前, 获取和配置内存控制器和内存器件的配置参数的方法往往是 : 在特定的嵌 入式系统中, 针对特定的嵌入式处理器, 选取特定的内存器件与之配合。 然后选取多种可能 的内存配置参数, 借助外部工具 ( 如示波器 ), 测试内存控制器和内存器件在每一种可能的 配置参数下的操作时序, 对比这些操作时序关系图, 选取最标准的时序关系图所对应的那 组配置参数。将这组配置参数存储到非易失性的只读存储器 (Read-Only Memory ; 简称为 : ROM) 中。嵌入式处理器每次启动后, 将这组参数从 ROM 中读出写入到内存控制器和内存器 件中, 使其按照预设的时序关系操作运行。
上述方法是借助外部工具 ( 如示波器 ) 通过多次测试获取内存控制器和内存的配 置参数。 然而随着技术的发展, 内存控制器和内存器件之间的工作频率越来越高, 并且他们 的电信号的振动幅度值越来越低, 而现有测试工具由于技术原因, 其采样精度无法随着内 存技术的快速提升而提升, 因此已经无法准确测试出需要配置的配置参数, 往往测试出来 的参数值和实际的工作情况有较大的偏差。
发明内容
本发明提供一种内存参数配置方法、 处理器及设备, 用以解决因受外部测试工具技术的限制无法获取准确性较高的配置参数的问题, 提高配置参数的准确性。
本发明提供一种内存参数配置方法, 包括 :
处理器根据预设步长和预先存储的配置参数的初始值, 对所述配置参数进行内存 读写测试, 获取所述配置参数的最大配置值和最小配置值 ;
所述处理器对所述最大配置值和所述最小配置值进行数值计算, 获取所述配置参 数的最佳配置值 ;
所述处理器将所述配置参数的最佳配置值分别写入内存控制器和内存器件。
本发明提供一种处理器, 包括 :
第一获取模块, 用于根据预设步长和预先存储的配置参数的初始值, 对所述配置 参数进行内存读写测试, 获取所述配置参数的最大配置值和最小配置值 ;
第二获取模块, 用于对所述最大配置值和所述最小配置值进行数值计算, 获取所 述配置参数的最佳配置值 ;
配置模块, 用于将所述配置参数的最佳配置值分别写入内存控制器和内存器件。
本发明提供一种设备, 包括 : 内存控制器、 内存器件和本发明提供的任一处理器。
本发明的内存参数配置方法、 处理器及设备, 由处理器根据配置参数的初始值和 预设步长, 对配置参数进行内存读写测试, 根据读写测试结果获取最大配置值和最小配置 值, 并将最大配置值和最小配置值数值计算的结果作为配置参数的最佳配置值分别写入内 存控制器和内存器件中, 实现对配置参数的配置, 由于不再使用外部工具, 解决了受外部工 具技术限制而无法获取到准确性较高的配置参数的问题, 实现了配置参数的自适应配置, 提高了所配置的配置参数的准确性。 附图说明 图 1 为本发明一实施例提供的内存参数配置方法的流程图 ;
图 2A 为本发明一实施例提供的步骤 101 的一种实施方式的流程图 ;
图 2B 为本发明一实施例提供的处理器控制内存控制器根据递增后的配置参数或 根据递减后的配置参数对内存器件进行读写操作的一种实施方式的流程图 ;
图 2C 为本发明一实施例提供的处理器控制内存控制器根据递增后的配置参数或 根据递减后的配置参数对内存器件进行读写操作的另一种实施方式的流程图 ;
图 3 为本发明另一实施例提供的内存参数配置方法的流程图 ;
图 4 为本发明又一实施例提供的内存参数配置方法的流程图 ;
图 5 为本发明一实施例提供的处理器的结构示意图 ;
图 6 为本发明另一实施例提供的处理器的结构示意图 ;
图 7 为本发明一实施例提供的设备的结构示意图。
具体实施方式
图 1 为本发明一实施例提供的内存参数配置方法的流程图。如图 1 所示, 本实施 例的方法包括 :
步骤 101、 处理器根据预设步长和预先存储的配置参数的初始值, 对配置参数进行 内存读写测试, 获取配置参数的最大配置值和最小配置值。在本实施例中, 处理器可以为嵌入式处理器, 但不限于此。 该处理器包括大容量的 存储器, 即内存器件, 并通过内存控制器对内存器件进行控制。
一般, 处理器的内存控制器上电复位后, 都保存着一组默认的配置参数, 并且每个 配置参数均有初始值。这组默认的配置参数是预先存储进去的。每个配置参数的初始值一 般是由处理器的设计者经过统计计算得到的。 每个配置参数的初始值一般都落在该配置参 数的取值范围内, 可以使内存控制器正常访问内存器件, 但并不能保证在任何环境下内存 控制器都可以可靠的访问内存器件的所有空间, 也就是说, 每个配置参数的初始值并非最 佳配置值。
在本实施例中, 处理器可以先将每个默认配置参数的初始值保存在非易失性 ROM 中。以便于进行内存读写测试。
在本实施例中, 处理器对每个配置参数均进行内存读写测试, 为每个配置参数均 获取最佳配置值, 并且对每个配置参数进行内存读写测试的方法相同。 在本实施例中, 为了 获取每个配置参数的最佳配置值, 预先设定了配置参数的取值逐渐变化时的步长, 基于此, 处理器以每个配置参数的初始值为开始, 按照预设步长逐渐增加或减小配置参数的取值, 并控制内存控制器在配置参数取每个值时对内存器件进行读写操作, 即进行内存读写测 试, 根据读写操作的结果, 获取每个配置参数的最大配置值和最小配置值。 处理器可以将每 个配置参数的最大配置值和最小配置值也存储到 ROM 中。 在本实施例中, 每个配置参数的最大配置值是根据步长逐渐增加配置参数的取值 进行内存读写测试时, 第一次出现测试失败时对应的配置参数的取值。每个配置参数的最 小配置值是根据步长逐渐减小配置参数的取值进行内存读写测试时, 第一次出现测试失败 时对应的配置参数的取值。其中, 每个配置参数的最大配置值和最小配置值并不限于上述 获取方式, 还可以是其他获取方式, 例如可以设定递增或递减的次数, 并将到达递增或递减 次数时配置参数的取值作为最大配置值或最小配置值。
步骤 102、 处理器对最大配置值和最小配置值进行数值计算, 获取配置参数的最佳 配置值。
其中, 处理器对最大配置值和最小配置值进行数值计算, 获取配置参数的最佳配 置值的方法包括 : 在获取每个配置参数的最大配置值和最小配置值后, 处理器对获取的最 大配置值和最小配置值取平均, 将配置参数的最大配置值和最小配置值的平均值作为该配 置参数的最佳配置值。这种方式简单、 易于实现, 且所获取的最佳配置值准确性较高。
在此说明, 处理器对配置参数的最大配置值和最小配置值进行数值计算, 获取配 置参数的最佳配置值的方式并不限于取平均一种, 还可以是其他方式, 如可以通过最大 配置值和最小配置值加权求和的方法获取最佳配置值, 例如 : 最佳配置值=最大配置值 x0.6+ 最小配置值 x0.4。
步骤 103、 处理器将配置参数的最佳配置值分别写入内存控制器和内存器件。
在获取配置参数的最佳配置值后, 处理器将配置参数的最佳配置值分别写入内存 控制器和内存器件, 实现对内存控制器和内存器件的配置参数的配置, 从而使内存控制器 可以根据所配置的配置参数正确的对内存器件进行读写操作, 提高内存控制器读写内存器 件的成功率。
在本实施例中, 处理器根据预设步长和内存控制器中预先存储的配置参数的初始
值, 逐步递增或递减配置参数的取值, 并在每种取值的情况下控制内存控制器对内存器件 进行读写操作, 实现对配置参数的内存读写测试, 根据测试结果获取配置参数的最大配置 值和最小配置值, 并根据最大配置值和最小配置值获取最佳配置值, 完成对内存控制器和 内存器件的参数的配置, 实现了配置参数的自适应配置, 不再依赖外部测试工具, 解决了配 置参数的准确性受外部测试工具限制的问题, 提高了所配置的配置参数值的准确性, 进而 提高了内存控制器对内存器件进行读写操作的成功率。
另外, 内存控制器和内存器件的时序关系和环境具有较强的相关性, 在不同的环 境下, 所需的配置参数值有较大差异, 为了达到最佳时序关系, 现有技术需要重新使用外部 测试工具进行测试, 而使用外部测试工具获取的配置参数值的方法相当不方便, 而本实施 例可由处理器自行完成配置参数的最佳配置值的获取和配置, 不受外部测试工具的限制, 在环境发生变化时可以随时进行重新配置, 提高了对内存控制器和内存器件进行参数配置 的灵活性, 为内存控制器和内存器件之间的时序关系在不同环境下均达到最佳提供了保 障。
再者, 由于内存工艺技术更新换代非常快, 因此内存器件的更新换代也很快, 处理 器系统的内存器件也要经常更换, 更换的内存器件的电气特性肯定会产生差异, 因此, 每更 换一次内存器件, 就需要重新测试, 重新确定配置参数的值。现有技术使用 ROM 存储配置参 数的值, 故每更换一次内存器件就需要更换一次 ROM, 这种操作既费时又费力。而本实施例 由于不再依赖外部测试工具, 使得对配置参数的测试和配置变得简单易于执行, 使处理器 可以直接将获取的配置参数的最佳配置值写入内存控制器和内存器件, 当需要重新配置时 可以在执行一次测试和配置操作即可, 与更换 ROM 的操作相比, 要省时省力的多。 图 2A 为本发明一实施例提供的步骤 101 的一种实施方式的流程图。 如图 2A 所示, 本实施方式包括 :
步骤 101a、 处理器将配置参数由初始值开始按照所述步长中的第一步长逐渐递 增, 并将递增后的配置参数写入所述内存控制器和所述内存器件, 并控制内存控制器根据 递增后的配置参数对内存器件进行读写操作, 获取读写操作不成功时的配置参数的值作为 配置参数的最大配置值。
步骤 101b、 处理器将配置参数由初始值开始按照所述步长中的第二步长逐渐递 减, 并将递减后的配置参数写入内存控制器和内存器件, 并控制内存控制器根据递减后的 配置参数对内存器件进行读写操作, 获取读写操作不成功时的配置参数的值作为配置参数 的最小配置值。
其中, 步骤 101a 用于获取配置参数的最大配置值, 故将配置参数的取值按照一定 步长 ( 即第一步长 ) 逐渐递增 ; 步骤 101b 用于获取配置参数的最小配置值, 故将配置参数 的取值按照一定步长 ( 即第二步长 ) 逐渐递减。
在本实施例中, 配置参数递增时的第一步长和递减时的第二步长可以相同, 也可 以不同。
其中, 在步骤 101a 中, 处理器将配置参数由初始值每递增一个步长, 就将递增后 的配置参数写入内存控制器和内存器件, 并在每写入一个递增后的配置参数就控制内存控 制器根据该写入的递增后的配置参数对内存器件进行读写操作, 然后紧跟着判断此次读写 操作是否成功, 直到出现读写操作不成功 ( 即第一次读写操作不成功 ) 时, 将此时配置参数
的值作为其最大配置值。
另外, 在步骤 101a 中, 处理器将配置参数由初始值开始逐渐递增, 获取多个递增 后的配置参数, 将多个递增后的配置参数一起写入内存控制器和内存器件中, 并控制内存 控制器按照配置参数的取值由小到大的顺序依次根据写入的递增后的配置参数对内存器 件进行读写操作, 并紧跟着判断每次读写操作是否成功, 直到出现读写操作不成功 ( 即第 一次读写操作不成功 ) 时, 将此时配置参数的值作为其最大配置值。在该实施方式中, 要求 处理器能够从所获取的多个递增后的配置参数中确定出配置参数的最大配置值。
其中, 在步骤 101b 中, 处理器将配置参数由初始值每递减一个步长, 就将递减后 的配置参数写入内存控制器和内存器件, 并在每写入一个递减后的配置参数就控制内存控 制器根据该写入的递减后的配置参数对内存器件进行读写操作, 然后紧跟着判断此次读写 操作是否成功, 直到出现读写操作不成功 ( 即第一次读写操作不成功 ) 时, 将此时配置参数 的值作为其最小配置值。
另外, 在步骤 101b 中, 处理器将配置参数由初始值开始逐渐递减, 获取多个递减 后的配置参数, 将多个递减后的配置参数一起写入内存控制器和内存器件中, 并控制内存 控制器按照配置参数的取值由大到小的顺序依次根据写入的递减后的配置参数对内存器 件进行读写操作, 并紧跟着判断每次读写操作是否成功, 直到出现读写操作不成功 ( 即第 一次读写操作不成功 ) 时, 将此时配置参数的值作为其最小配置值。在该实施方式中, 要求 处理器能够从所获取的多个递减后的配置参数中确定出配置参数的最小配置值。
本实施例并不限制步骤 101a 和步骤 101b 的执行顺序, 除了本实施例的执行方式 外, 还可以先执行步骤 101b 的操作, 然后再执行步骤 101a 的操作, 或者以并行的方式同时 执行步骤 101a 和步骤 101b 的操作。
进一步, 处理器控制内存控制器根据递增后的配置参数或根据递减后的配置参数 对内存器件进行读写操作可以使用各种通过读写操作检测内存存取可靠性的算法。
如图 2B 所示, 一种处理器控制内存控制器根据某个递增后的配置参数或某个递 减后的配置参数对内存器件进行读写操作的实施方式包括 :
步骤 1011、 处理器随机生成内存测试地址空间的起始地址和结束地址。
在本实施例中, 处理器可以使用任何可以生成随机数的算法, 例如伪随机算法, 来 随机生成内存测试地址空间的起始地址和结束地址。 本实施例使用随机生成方式可以使读 写操作更加符合内存器件的实际使用情况, 提高测试的准确性。
步骤 1012、 处理器控制内存控制器根据递增后的配置参数或递减后的配置参数向 起始地址和结束地址所界定的所有内存空间中依次写入第一测试数据, 然后依次读出第一 测试数据。
其中, 如果处理器将配置参数递增, 就会将递增后的配置参数写入内存控制器和 内存器件, 故处理器启动或触发内存控制器, 并告知内存控制器对起始地址和结束地址所 界定的所有内存空间进行读写操作, 并告知内存控制器需要写入的测试数据 ( 即第一测试 数据 ) 后, 内存控制器就会根据之前处理器写入的递增后的配置参数对内存器件进行读写 操作。 如果处理器将配置参数递减, 就会将递减后的配置参数写入内存控制器和内存器件, 故处理器启动或触发内存控制器, 并告知内存控制器对起始地址和结束地址所界定的所有 内存空间进行读写操作, 并告知内存控制器需要写入的测试数据 ( 即第一测试数据 ) 后, 内存控制器就会根据之前处理器写入的递减后的配置参数对内存器件进行读写操作。
在本步骤中, 内存控制器向起始地址和结束地址所界定的所有内存空间进行遍 历, 依次写入第一测试数据, 然后再依次从起始地址和结束地址所界定的所有内存空间读 出写入的第一测试数据。例如 : 假设起始地址和结束地址所界定的所有内存空间包括第 1 地址 - 第 N 地址, 则内存控制器依次向第 1 地址 - 第 N 地址中写入第一测试数据, 然后依次 从第 1 地址 - 第 N 地址中读出第一测试数据。
内存控制器将读出的第一测试数据提供给处理器。其中, N 是自然数。
步骤 1013、 处理器判断写入的第一测试数据和读出的第一测试数据是否全部相 同; 如果判断结果为是, 执行步骤 1014 ; 如果判断结果为否, 执行步骤 1017。
具体的, 处理器通过将每个地址对应的写入的第一测试数据和读出的第一测试数 据进行比较, 判断是否相同 ; 如果在某个地址上出现了写入和读出的第一测试数据不同, 就执行步骤 1017 ; 如果每个地址对应的写入和读出的第一测试数据均相同, 则执行步骤 1014。
步骤 1014、 处理器控制内存控制器根据递增后的配置参数或递减后的配置参数向 起始地址和结束地址所界定的所有内存空间中依次写入第二测试数据, 然后依次读出第二 测试数据。 为了提高测试的准确性, 当步骤 1012 所示的测试通过后, 处理器进一步控制内存 控制器再根据处理器之前写入的递增或递减后的配置参数向起始地址和结束地址所界定 的所有内存空间读写第二测试数据, 即对递增或递减后的配置参数进行第二次测试。
其中, 内存控制器向起始地址和结束地址所界定的所有内存空间读写第二测试数 据的过程, 与向起始地址和结束地址所界定的所有内存空间读写第一测试数据的过程相 同, 在此不再详述。
其中, 为了进一步提高测试的准确性, 第一测试数据与第二测试数据不同, 但并不 限于不同。
步骤 1015、 处理器判断写入的第二测试数据和读出的第二测试数据是否全部相 同; 如果判断结果为是, 执行步骤 1016 ; 如果判断结果为否, 执行步骤 1017。
该步骤与步骤 1013 相类似, 处理器通过将每个地址对应的写入的第二测试数据 和读出的第二测试数据进行比较, 判断是否相同 ; 如果在某个地址上出现了写入和读出的 第二测试数据不同, 就执行步骤 1017 ; 如果每个地址对应的写入和读出的第二测试数据均 相同, 则执行步骤 1016。
步骤 1016、 处理器确定读写操作成功。
步骤 1017、 处理器确定读写操作不成功。
在本实施方式中并不限制第一测试数据和第二测试数据的具体数值。其中, 对 于以二进制表示时具有 0 和 1 连续变化的数值能够更好地测试内存控制器和内存器件间 的时序关系, 故第一测试数据和第二测试数据优选采用以二进制表示时具有 0 和 1 连续 变化的数值, 例如 0x55(0x55 的二进制表示为 0b’ 01010101) 和 0xaa(0xaa 二进制表示为 0b’ 10101010)。
基于上述, 更为优选的, 第一测试数据为 0x55, 第二测试数据为 0xaa ; 或者第一测 试数据为 0xaa, 第二测试数据为 0x55。
进一步说明, 在本实施方式中, 处理器先控制内存控制器根据第一测试数据进行 测试, 然后根据第二测试数据进行测试, 但并不限于该顺序 ; 例如 : 处理器还可以先控制内 存控制器根据第二测试数据进行测试, 然后根据第一测试数据进行测试。
进一步, 本实施方式还可以根据实际应用环境, 选择采用一个测试数据、 二个、 三 个或更多测试数据进行测试的方式。
本实施例方式通过采用随机生成地址空间的方法, 保证对任意空间任意地址的随 机测试, 符合内存的实际使用情况, 进而通过选择具有 0 和 1 连续变化的测试数据进行测 试, 可以很好的模拟内存控制器和内存器件间的时序关系, 进一步提高了测试的真实性 ; 同 时通过采用两次测试的方式, 提高了测试准确性。
如图 2C 所示, 另一种处理器控制内存控制器根据某个递增后的配置参数或某个 递减后的配置参数对内存器件进行读写操作的实施方式包括 :
步骤 2011、 处理器随机生成内存测试地址空间的起始地址和结束地址。
步骤 2012、 处理器控制内存控制器根据递增后的配置参数或递减后的配置参数向 起始地址和结束地址所界定的所有内存空间中依次写入第一测试数据, 然后依次读出第一 测试数据。 步骤 2013、 处理器判断写入的第一测试数据和读出的第一测试数据是否全部相 同; 如果判断结果为是, 执行步骤 2014 ; 如果判断结果为否, 执行步骤 2019。
步骤 2014、 处理器控制内存控制器根据递增后的配置参数或递减后的配置参数向 起始地址和结束地址所界定的所有内存空间中依次写入第二测试数据, 然后依次读出第二 测试数据。
步骤 2015、 处理器判断写入的第二测试数据和读出的第二测试数据是否全部相 同; 如果判断结果为是, 执行步骤 2016 ; 如果判断结果为否, 执行步骤 2019。
上述步骤 2011- 步骤 2015 可参见步骤 1011- 步骤 1015 的描述, 在此不再赘述。
步骤 2016、 处理器控制内存控制器根据递增后的配置参数或递减后的配置参数向 起始地址和结束地址所界定的所有内存空间中依次交替写入第一测试数据和第二测试数 据, 然后依次读出交替写入的第一测试测试数据和第二测试数据。
在本实施方式中, 处理器为了进一步提高测试准确性, 在经过步骤 2012 和步骤 2014 的测试后, 进一步控制内存控制器根据处理器之前写入的递增或递减后的配置参数对 起始地址和结束地址所界定的所有内存空间进行交替读写操作。
在本步骤中, 内存控制器向起始地址和结束地址所界定的所有内存空间进行遍 历, 交替地向起始地址和结束地址所界定的地址空间中写入第一测试数据和第二测试数 据, 然后再依次从起始地址和结束地址所界定的地址空间读出所写入的第一测试数据和第 二测试数据。例如 : 假设起始地址和结束地址所界定的所有内存空间包括第 1 地址 - 第 N 地址, 则内存控制器向第 1 地址和第 2 地址分别写入第一测试数据和第二测试数据, 向第 3 地址和第 4 地址分别写入第一测试数据和第二测试数据, ……, 向第 n 地址和第 n+1 地址分 别写入第一测试数据和第二测试数据, 直至写满起始地址和结束地址所界定的所有内存空 间。 然后依次从第 1 地址 - 第 N 地址中读出第一测试数据和第二测试数据。 1 ≤ n ≤ n+1 ≤ N, N 是自然数。
内存控制器将读出的第一测试数据和第二测试数据提供给处理器。
步骤 2017、 处理器判断交替写入的第一测试数据和第二测试数据和读出的第一测 试数据和第二测试数据是否全部相同 ; 如果判断结果为是, 执行步骤 2018 ; 如果判断结果 为否, 执行步骤 2019。
步骤 2018、 处理器确定读写操作成功。
步骤 2019、 处理器确定读写操作不成功。
在本实施例方式中, 同样不限制第一测试数据和第二测试数据的具体数值。较 为优选的, 第一测试数据和第二测试数据不同。更为优选的, 第一测试数据和第二测试数 据优选采用以二进制表示时具有 0 和 1 连续变化的数值, 例如 0x55(0x55 的二进制表示为 0b’ 01010101) 和 0xaa(0xaa 二进制表示为 0b’ 10101010)。例如 : 第一测试数据为 0x55, 第二测试数据为 0xaa ; 或者第一测试数据为 0xaa, 第二测试数据为 0x55。
在此说明, 在本实施方式中, 处理器先控制内存控制器根据第一测试数据进行单 独测试, 然后根据第二测试数据进行单独测试, 再同时根据第一测试数据和第二测试数据 进行交替测试, 但并不限于该顺序。 例如 : 处理器还可以先控制内存控制器根据第二测试数 据进行单独测试, 然后再根据第一测试数据进行单独测试, 再同时根据第一测试数据和第 二测试数据进行交替测试。又例如 : 处理器还可以先控制内存控制器同时根据第一测试数 据和第二测试数据进行交替测试, 然后根据第一测试数据进行单独测试, 再根据第二测试 数据进行单独测试。再例如 : 处理器还可以先控制内存控制器同时根据第一测试数据和第 二测试数据进行交替测试, 然后根据第二测试数据进行单独测试, 再根据第一测试数据进 行单独测试。另外, 所使用的测试数据也不限于两个。 本实施例方式通过采用随机生成地址空间的方法, 保证对任意空间任意地址的随 机测试, 符合内存的实际使用情况, 进而通过选择具有 0 和 1 连续变化的测试数据进行测 试, 可以很好的模拟内存控制器和内存器件间的时序关系, 进一步提高了测试的真实性 ; 同 时通过多种测试方式进行多次测试, 提高了测试准确性。
图 3 为本发明另一实施例提供的内存参数配置方法的流程图。如图 3 所示, 本实 施例的方法包括 :
步骤 300、 处理器将配置参数及其初始值配置到内存控制器和内存器件中。
其中, 处理器可以根据实际应用场景, 选择内存控制器和内存器件的配置参数, 并 对配置参数进行初始化, 然后将配置参数和其初始值写入内存控制器和内存器件。
步骤 301、 处理器根据预设步长和配置参数的初始值, 对配置参数进行内存读写测 试, 获取配置参数的最大配置值和最小配置值。
该步骤 301 的具体实现可参见图 2A- 图 2C 的描述, 在此不再赘述。
步骤 302、 处理器对最大配置值和最小配置值进行数值计算, 获取配置参数的最佳 配置值。
其中, 数值计算方法可以是取平均的方法, 也可以是加权求和的方法。该步骤 302 可详见步骤 102 的描述。
步骤 303、 处理器判断循环次数是否为 0 ; 当判断结果为否, 执行步骤 304 ; 当判断 结果为是, 执行步骤 305。
在本实施例中, 为了更精确找到最佳配置值, 可以通过循环执行上述步骤 301 和 步骤 320, 其中重复循环的次数越多, 得到最佳配置值越准确。 故在本实施例中, 预先设定循
环次数, 并通过判断循环次数是否递减为 0, 来实现多次循环。
通常, 重复 2 次得到的最佳配置值的准确性基本可以满足需要, 故循环次数可以 设置为 2, 但不限于此。
步骤 304、 处理器将配置参数的最佳配置值作为配置参数的初始值, 并返回执行步 骤 301。
步骤 305、 处理器将配置参数的最佳配置值分别写入内存控制器和内存器件。
在本实施例中, 通过设置循环次数实现重复循环获取最佳配置值, 提高了获取的 最佳配置值的准确性。
图 4 为本发明又一实施例提供的内存参数配置方法的流程图。如图 4 所示, 本实 施例的方法包括 :
步骤 400、 处理器根据内存控制器和内存器件对应的所有配置参数的特性, 从所有 配置参数中选择出相互独立的一组配置参数并存储。
在实际应用中, 通过测试发现, 内存控制器和内存可以配置的参数往往是有限的 组合, 比如, 只有 m 个参数 {P1, P2, P3…Pm}。 在这些参数组合中, 有些配置参数是相关的, 根据 内存控制器和内存器件对应的配置参数的特性或作用, 可以将有限的组合归纳为 n 个独立 不相关的配置参数 {P1, P2, P3…Pn}。 例如, 根据配置参数的特性或作用可以归纳出以下几个 不相关的配置参数 : 操作命令到数据输入的间隔控制参数、 操作命令到数据输出的间隔控 制参数、 一个操作完成到下一个操作的最小间隔控制参数、 控制命令中的时序控制参数、 总 线驱动能力和端接特性控制参数等。 这些配置参数都独立影响总线操作的时序关系。 其中, m、 n 均为自然数, 且 n ≤ m。每个配置参数都有一定的取值范围, 假设每个配置参数有 k 个 取值, 则每个配置参数的取值范围可以表示为 : Pi = {pi1, pi2, pi3,…, pir, pi(r+1), pi(r+2),…, pi(k-2), pi(k-1), pik} ; 其中 1 ≤ i ≤ n。而这 n 个独立不相关的配置参数中每个参数的配置值 都不会影响其它参数的配置值对操作时序关系的影响。 这几个独立不相关的配置参数对时 序关系的影响满足叠加关系。
这些组合中, 每个配置参数只有一定的取值范围可以保证内存控制器可以正常访 问内存器件, 而且往往只有一个组合的配置值, 例如 {p1f, p2f, p3f… pnf} 会使内存控制器和 内存之间时序关系最佳, 即只有一个取值可以保证内存控制器可以最可靠的访问存取内 存。而和这个最佳配置值差值越大的配置值, 会使内存控制器和内存之间的时序关系变得 越差, 即, 每个配置参数的取值的连续变化有使内存控制器和内存之间的时序关系连续变 化的趋势。
步骤 401、 处理器对选择出的相互独立的配置参数进行初始化, 并将相互独立的配 置参数及其各自的初始值写入内存控制器和内存器件中。
为了从每个配置参数的取值范围中获取最佳配置值, 本实施例的处理器对选出的 相互独立的配置参数分别进行初始化。其中, 初始化所选择的初始值处于每个配置参数的 取值范围内, 其可以保证内存控制器可以访问内存器件, 但不一定是最佳配置值。
步骤 402、 处理器设置变量 r, 并设置其初始值为写入内存控制器和内存器件中的 配置参数的个数。其中, 变量 r 用于表示当前还未进行最佳配置值获取操作的配置参数个 数。
步骤 403、 处理器选择其中一个配置参数。步骤 404、 处理器保持其他配置参数的值不变, 根据预设步长和选择的配置参数的 初始值, 对选择的配置参数进行内存读写测试, 获取选择的配置参数的最大配置值和最小 配置值。
步骤 405、 处理器对最大配置值和最小配置值取平均, 获取配置参数的最佳配置 值。
步骤 406、 处理器判断循环次数是否为 0 ; 当判断结果为否, 执行步骤 407 ; 当判断 结果为是, 执行步骤 408。
步骤 407、 处理器将选择的配置参数的最佳配置值作为选择的配置参数的初始值, 并返回执行步骤 404。
步骤 408、 处理器将选择的配置参数的最佳配置值分别写入内存控制器和内存器 件。
步骤 409、 处理器将变量 r 减 1。其中, 每对一个配置参数进行完最佳配置值获取 操作后, 就将变量 r 减去 1, 以统计当前未执行获取最佳配置值操作的配置参数的个数。
步骤 410、 处理器判断变量 r 是否为 0 ; 如果判断结果为否, 返回执行步骤 403 ; 如 果判断结果为是, 执行步骤 411。
步骤 411、 结束操作。
本实施例描述了处理器同时获取多个配置参数的最佳配置值, 并进行配置的过 程, 其中对于每个配置参数的配置流程均相同, 可参见前述实施例的描述。另外, 本实施例 与现有技术相比, 通过获取相互独立的多个配置参数, 既可以满足内存控制器和内存器件 之间时序关系的需求, 又降低了配置操作, 有利于提高配置效率。
图 5 为本发明一实施例提供的处理器的结构示意图。如图 5 所示, 本实施例的处 理器包括 : 第一获取模块 51、 第二获取模块 52 和配置模块 53。
其中, 第一获取模块 51, 用于根据预设步长和预先存储的配置参数的初始值, 对配 置参数进行内存读写测试, 获取配置参数的最大配置值和最小配置值。 第二获取模块 52, 与 第一获取模块 51 连接, 用于对第一获取模块 51 获取的最大配置值和最小配置值进行数值 计算, 获取配置参数的最佳配置值。 配置模块 53, 与第二获取模块 52 连接, 用于将第二获取 模块 52 获取的配置参数的最佳配置值分别写入内存控制器和内存器件。
其中, 本实施例的处理器与内存器件、 内存控制器属于同一设备的不同部件, 处理 器可以将有关数据存储到内存器件中, 并控制内存控制器对内存器件进行读取操作。
本实施例的处理器的各功能模块可用于执行图 1 所述内存参数配置方法的流程, 其具体工作原理不再赘述, 详见方法实施例的描述。
本实施例的处理器, 根据预设步长和内存控制器中预先存储的配置参数的初始 值, 逐步递增或递减配置参数的取值, 并在每种取值的情况下控制内存控制器对内存器件 进行读写操作, 实现对配置参数的内存读写测试, 根据测试结果获取配置参数的最大配置 值和最小配置值, 并根据最大配置值和最小配置值获取最佳配置值, 完成对内存控制器和 内存器件的参数的配置, 实现了配置参数的自适应配置, 不再依赖外部测试工具, 解决了配 置参数的准确性受外部测试工具限制的问题, 提高了所配置的配置参数值的准确性, 进而 提高了内存控制器对内存器件进行读写操作的成功率。另外, 本实施例的处理器通过自行 获取配置参数的最佳配置值并完成配置, 不受外部测试工具的限制, 在环境发生变化时可以随时进行重新配置, 提高了对内存控制器和内存器件进行参数配置的灵活性, 为内存控 制器和内存器件之间的时序关系在不同环境下均达到最佳提供了保障。同时, 本实施例的 处理器使参数配置不再依赖外部测试工具, 使得对配置参数的测试和配置变得简单易于执 行, 并且处理器可以直接将获取的配置参数的最佳配置值写入内存控制器和内存器件, 当 需要重新配置时可以在执行一次测试和配置操作即可, 与现有技术中每次更新配置参数时 需要执行更换存储配置参数的 ROM 的操作相比, 要省时省力的多。
图 6 为本发明另一实施例提供的处理器的结构示意图。本实施例基于图 6 所示实 施例实现, 如图 6 所示, 本实施例的第一获取模块 51 包括 : 最大值获取子模块 511 和最小值 获取子模块 512。
其中, 最大值获取子模块 511, 用于将配置参数由初始值开始按照步长中的第一步 长逐渐递增, 并将递增后的配置参数写入内存控制器和内存器件, 并控制内存控制器根据 递增后的配置参数对内存器件进行读写操作, 获取第一次读写操作不成功时的配置参数的 值作为配置参数的最大配置值, 并提供给第二获取模块 52。
最小值获取子模块 512, 用于将配置参数由初始值开始按照步长中的第二步长逐 渐递减, 并将递减后的配置参数写入内存控制器和内存器件, 并控制内存控制器根据递减 后的配置参数对内存器件进行读写操作, 获取第一次读写操作不成功时的配置参数的值作 为配置参数的最小配置值, 并提供给第二获取模块 52。 上述各功能子模块可用于执行图 2A 所示实施方式的流程, 其具体工作原理不再 赘述, 详见方法实施例的描述。
进一步, 本实施例的最大值获取子模块 511 还包括 : 第一写入单元 5111、 第一生成 单元 5112、 第一控制单元 5113、 第一确定单元 5114 和第一获取单元 5115。
其中, 第一写入单元 5111, 用于将配置参数由初始值开始按照所述步长中的第一 步长逐渐递增, 并将递增后的配置参数写入内存控制器和所述内存器件。第一生成单元 5112, 用于随机生成内存测试地址空间的起始地址和结束地址。 第一控制单元 5113, 与第一 写入单元 5111 和第一生成单元 5112 连接, 用于控制内存控制器根据第一写入单元 5111 写 入的递增后的配置参数向第一生成单元 5112 所生成的起始地址和结束地址所界定的所有 内存空间中依次写入第一测试数据, 然后依次读出第一测试数据, 并控制内存控制器根据 递增后的配置参数向起始地址和结束地址所界定的所有内存空间中依次写入第二测试数 据, 然后依次读出第二测试数据。 第一确定单元 5114, 与第一控制单元 5113 连接, 用于在写 入的第一测试数据和读出的第一测试数据相同, 且写入的第二测试数据和读出的第二测试 数据相同时, 确定读写操作成功, 在写入的第一测试数据和读出的第一测试数据不相同, 或 者写入的第二测试数据和读出的第二测试数据不相同时, 确定读写操作不成功。第一获取 单元 5115, 与第一确定单元 5114 连接, 用于获取第一确定单元 5114 确定出的第一次读写操 作不成功时的配置参数的值作为配置参数的最大配置值。
进一步, 最小值获取子模块 512 包括 : 第二写入单元 5121、 第二生成单元 5122、 第 二控制单元 5123、 第二确定单元 5124 和第二获取单元 5125。
其中, 第二写入单元 5121, 用于将配置参数由初始值开始按照所述步长中的第二 步长逐渐递减, 并将递减后的配置参数写入内存控制器和内存器件。第二生成单元 5122, 用于随机生成内存测试地址空间的起始地址和结束地址。第二控制单元 5123, 与第二写入
单元 5121 和第二生成单元 5122 连接, 用于控制内存控制器根据第二写入单元 5121 写入的 递减后的配置参数向第二生成单元 5122 所生成的起始地址和结束地址所界定的所有内存 空间中依次写入第一测试数据, 然后依次读出第一测试数据, 并控制内存控制器根据递减 后的配置参数向起始地址和结束地址所界定的所有内存空间中依次写入第二测试数据, 然 后依次读出第二测试数据。第二确定单元 5124, 与第二控制单元 5123 连接, 用于在写入的 第一测试数据和读出的第一测试数据相同, 且写入的第二测试数据和读出的第二测试数据 相同时, 确定读写操作成功, 在写入的第一测试数据和读出的第一测试数据不相同, 或者写 入的第二测试数据和读出的第二测试数据不相同时, 确定读写操作不成功。第二获取单元 5125, 与第二确定单元 5124 连接, 用于获取第二确定单元 5124 确定出的第一次读写操作不 成功时的配置参数的值作为配置参数的最小配置值。
上述各功能单元可用于执行图 2A 和图 2B 所示实施方式中的相应流程, 其具体工 作原理不再赘述, 详见方法实施例的描述。
另外, 本实施例的第一控制单元 5113 还用于控制内存控制器根据递增后的配置 参数向起始地址和结束地址所界定的所有内存空间中依次交替写入第一测试数据和第二 测试数据, 然后依次读出交替写入的第一测试测试数据和第二测试数据。 第二控制单元 5123 还用于控制内存控制器根据递减后的配置参数向起始地址和 结束地址所界定的所有内存空间中依次交替写入第一测试数据和第二测试数据, 然后依次 读出交替写入的第一测试测试数据和第二测试数据。
其中, 本实施例对第一测试数据和第二测试数据的具体数值不做限定, 但较为优 选的, 第一测试数据和第二测试数据优选采用以二进制表示时具有 0 和 1 连续变化的数值, 例如 0x55 和 0xaa。例如 : 第一测试数据为 0x55, 第二测试数据为 0xaa ; 或者第一测试数据 为 0xaa, 第二测试数据为 0x55。
上述各功能单元可用于执行图 2C 所示实施方式中的相应流程, 其具体工作原理 不再赘述, 详见方法实施例的描述。
进一步, 本实施例的处理器还包括 : 重置触发模块 61。
重置触发模块 61, 与第一获取模块 51 和第二获取模块 52 连接, 用于在配置模块将 配置参数的最佳配置值分别写入内存控制器和内存器件之前, 将第二获取模块 52 获取的 配置参数的最佳配置值作为配置参数的初始值, 发送给第一获取模块 51, 并触发第一获取 模块 51 重新根据预设步长和配置参数的初始值, 对配置参数进行内存读写测试, 获取配置 参数的最大配置值和最小配置值。
该重置触发模块 61 可用于执行图 3 所示内存参数配置方法中的相应流程, 其具体 工作原理不再赘述。
进一步, 本实施例的处理器还可以包括 : 获取存储模块 62。
该获取存储模块 62, 用与第一获取模块 51 连接, 于在第一获取模块根据预设步长 和预先存储的配置参数的初始值, 对配置参数进行内存读写测试, 获取配置参数的最大配 置值和最小配置值之前, 根据内存控制器和内存器件对应的所有配置参数的特性, 从所有 配置参数中选择出相互独立的一组配置参数并存储, 并将所存储的配置参数提供给第一获 取模块 51。
该获取存储模块 62 可用执行图 4 所示内存参数配置方法中的相应流程, 其具体工
作原理不再赘述。
本实施例的处理器, 通过采用随机生成地址空间的方法, 保证对任意空间任意地 址的随机测试, 符合内存的实际使用情况, 进而通过选择具有 0 和 1 连续变化的测试数据进 行测试, 可以很好的模拟内存控制器和内存器件间的时序关系, 进一步提高了测试的真实 性; 同时通过采用多次测试的方式, 提高了测试准确性。
图 7 为本发明一实施例提供的设备的结构示意图。如图 7 所示, 本实施例的设备 包括 : 处理器 71、 内存控制器 72 和内存器件 73。处理器 71 与内存控制器 72 连接, 内存控 制器 72 与内存器件 73 连接。
其中, 处理器 71 为本发明上述实施例提供的处理器, 其实现结构可参见图 5 或图 6 所示, 其工作原理可参见图 1- 图 4 所示方法实施例的描述, 在此均不再赘述。
另外, 处理器 71 与内存控制器 72 和内存器件 73 之间的操作关系, 以及内存控制 器 72 与内存器件 73 之间的操作关系也参见图 1- 图 4 所示方法实施例中的描述。
本实施例的设备, 由处理器自行完成对内存器件和内存控制器的配置参数的配 置, 不再依赖外部测试工具, 解决了配置参数的准确性受外部测试工具限制的问题, 提高了 所配置的配置参数值的准确性, 进而提高了内存控制器对内存器件进行读写操作的成功 率。 另外, 本实施例的设备由于不受外部测试工具的限制, 在环境发生变化时可以随时进行 重新配置, 提高了对内存控制器和内存器件进行参数配置的灵活性, 为内存控制器和内存 器件之间的时序关系在不同环境下均达到最佳提供了保障。并且, 本实施例的设备在进行 配置参数更新时, 不需要更换 ROM, 与现有技术相比要省时省力的多。
本领域普通技术人员可以理解 : 实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成, 前述的程序可以存储于一计算机可读取存储介质中, 该程序 在执行时, 执行包括上述方法实施例的步骤 ; 而前述的存储介质包括 : ROM、 RAM、 磁碟或者 光盘等各种可以存储程序代码的介质。
最后应说明的是 : 以上实施例仅用以说明本发明的技术方案, 而非对其限制 ; 尽 管参照前述实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解 : 其依然 可以对前述各实施例所记载的技术方案进行修改, 或者对其中部分技术特征进行等同替 换; 而这些修改或者替换, 并不使相应技术方案的本质脱离本发明各实施例技术方案的范 围。