内存初始化是什么意思 (内存初始化浅析-内存系列三)

文章编号:8926 更新时间:2024-02-20 分类:互联网资讯 阅读次数:

资讯内容

小张上次回去后,好久都没来找我,我以为他对内存知识已经不感兴趣了,没想到他今天又约我见面。我来到上次的咖啡馆,他已经等我好久了。原来他上次回去后,找了好久资料,虽然对硬件知识有了个整体把握,但看的越深入就有越多的疑问。他知道我对固件了解比较深入,想问问我关于软件方面的问题。我不禁被小张对知识的渴求所打动,点了一杯美式咖啡,开始了今天的介绍。

内存初始化是什么意思内存初始化浅析内存系

内存初始化

小张开门见山,直奔主题:内存硬件结构这么复杂,我平时写程序怎么从来都没有用过,是不是操作系统把什么寻址啊、延迟啊都自己搞定了?。这就不对了,操作系统对内存的了解只到了段页管理那一层,也就是到了物理地址那里。你可以看看我的博客,上面有介绍段页管理。物理地址到Rank,Bank等的寻址,都是内存控制器完成的。我喝了一口咖啡,开始津津有味的介绍起来。

自Intel/AMD把北桥取消后,内存控制器都被集成进了CPU,毕竟摆脱了FSB,延迟大大减小,而带宽可以大大增加,同时主板的成本也降低了。初始化内存控制器和内存是固件的一项重要任务,可以说是主要任务之一。也许你看过前面关于UEFI的介绍,就会明白,内存初始化是在PEI阶段完成的。一般来说我们把内存初始化分成三个阶段:

1。准备阶段

这个阶段主要是为了内存training做好准备。它要完成:

A.初始化内存控制器寄存器。

B.读取SPD内容。通过SMBUS读取SPD的内容,对各个延迟记录在案,下个阶段会用到。各个DIMM的SMBUS地址不同,一般是A0/A1/A2/A3,和主板走线有关。这个步骤也可以检查出来内存插槽上有没有插DIMM。在有些嵌入式主板上内存颗粒是直接焊到主板上的,这时很可能没有SPD。这时就需要固件工程师根据实际的内存颗粒的硬件手册,将延迟信息硬编码到代码中了。

2。内存Training

看到Training也许你会感到奇怪,人工智能是要训练,内存也要训练吗?

从DDR2到DDR3,一个很大的改动是信号线的连接方式。一个典型的DDR2的连接方式如图:

而DDR3变成:

这种菊花链式的方式,DDR标准的制定者JEDEC对它有个专门的叫法——Fly-by。这种设计大大减小DIMM厂商的硬件制造难度。同时由于CLK/CLK#、DQS、AD和CMD信号不需要同时传递,改善了信号完整性,使更高频率成为可能。世界上没有免费的午餐,它也带了不少麻烦,一个很大的问题是内存控制器的时序协调难度变大了很多。菊花链的连接方式也意味着信号在各个内存颗粒之间传递有个时间差。第一个内存颗粒和第二个颗粒也许延迟不大,但到了第八个就相当可观了。回忆一下我们上次的介绍,在行有效和列有效后,过了CL的时间第一颗chip把数据放在数据线DQ相应位上,而要过了很久第八颗Chip才把数据准备好,内存控制器要何时才能采集数据呢?现在每个内存通道一般都有两个内存插槽,情况会更加复杂。火上浇油的是,DDR标准是JEDEC制定的,内存颗粒和DIMM厂商是个生态圈,里面鱼龙混杂,内存颗粒和DIMM的延迟千奇百怪。这和ARM做的嵌入式平台只需要支持固定的内存颗粒完全不同,所有主板厂商都希望支持市面上更多的内存条。有时这就像踩钢丝,对内存A很好的时序,也许对内存B就不行。如果在启动阶段就发现时序错误还好,错误或者过激的时序如果躲过了BIOS的内存检测,到了操作系统运行的时候会造成更大的麻烦。

如何才能准确的设定时序呢?所幸JEDEC提供了标准做法,叫做WriteLevelingCoarse。简单来说,就是内存控制器不停的发送不同时延的DQS信号,内存颗粒在DQS-DQS#的上升沿采样CK的状态,并通过DQ线反馈给DDR3控制器(一组01010101的数据)。控制器端反复的调整DQS-DQS#的延时,直到控制器端检测到DQ线上0到1的跳变控制器就锁住此时的延时值,此时便完成了一个Writeleveling过程。如下图:

它结合其他的如on-dietermination(ODT)和调节Vref电压等一起完成了内存的Training。这是个不断找到平衡点的过程,也是个训练的过程。

标签: 个人电脑计算机技术计算机组成原理

本文地址: https://yihaiquanyi.com/article/b0163c5215bbd68a3622.html

上一篇:内存型号大全内存系列二深化了解配件原理...
下一篇:不遵循惯例是什么意思不遵循为啥还可以work...

发表评论