我最近正在作一个面向底层的开发工作,具体上说,是围绕内存制造与测试的工作。
这个项目就是为很多内存制造商提供测试方案,用于快速的检测内存模组的测试。
应对众多厂家的要求,我需要在软件的界面上显示测试的环境信息,这包括 CPU 速度和
cache 信息,SDRAM 的速率,通道模式,时序信息。时序信息包括了 CL,tRCD,tRP,tRAS。
当然还包括内存测试方案的信息,和测试状态信息。
CPU 的大致信息,你可以通过 CPUID 指令获得,而亦可以用 rdtsc 读取系统的时间戳来算
到 CPU 的实时速率。这个方法对于大多数 CPU 都是可行的,少数不支持 CPUID 指令的就
是例外。
SDRAM 的信息大多数存储于主板的芯片组中,北桥的内存控制器管理着内存的工作方式和监
督其工作状态。拿 Intel 为例,自 945 以前的芯片组,其资料都是公开的,参照官方的
Intel Datasheet,你可以获得 PCI 设置参数的读取方法。所有的信息乃至支持的模组类型,
可控的时序范围都是可以读到的。大家用到的 CPU-Z,都应该是这样读到的。
然而,到了 965 时代,这一切都发生了改变。从 965 Datasheet 资料上看,这片资料也相
对比较完整。但是 Chipset 寄存器的组织结构却发生了变化,寄存器组的分工更加的明确
和正式化。按照原先的想法,这并没有什么不妥。毕竟 965 是转向 Intel 3 系列的实验板。
但是在我们用老的方法读取这些资料的时候,发现了一个大问题。按照 Datasheet 资料上
这个项目就是为很多内存制造商提供测试方案,用于快速的检测内存模组的测试。
应对众多厂家的要求,我需要在软件的界面上显示测试的环境信息,这包括 CPU 速度和
cache 信息,SDRAM 的速率,通道模式,时序信息。时序信息包括了 CL,tRCD,tRP,tRAS。
当然还包括内存测试方案的信息,和测试状态信息。
CPU 的大致信息,你可以通过 CPUID 指令获得,而亦可以用 rdtsc 读取系统的时间戳来算
到 CPU 的实时速率。这个方法对于大多数 CPU 都是可行的,少数不支持 CPUID 指令的就
是例外。
SDRAM 的信息大多数存储于主板的芯片组中,北桥的内存控制器管理着内存的工作方式和监
督其工作状态。拿 Intel 为例,自 945 以前的芯片组,其资料都是公开的,参照官方的
Intel Datasheet,你可以获得 PCI 设置参数的读取方法。所有的信息乃至支持的模组类型,
可控的时序范围都是可以读到的。大家用到的 CPU-Z,都应该是这样读到的。
然而,到了 965 时代,这一切都发生了改变。从 965 Datasheet 资料上看,这片资料也相
对比较完整。但是 Chipset 寄存器的组织结构却发生了变化,寄存器组的分工更加的明确
和正式化。按照原先的想法,这并没有什么不妥。毕竟 965 是转向 Intel 3 系列的实验板。
但是在我们用老的方法读取这些资料的时候,发现了一个大问题。按照 Datasheet 资料上