uboot, s5pv210, 内存讲解(3)
首先是 异步 内存的读写时序。
1、 首先内存控制器 将 行地址 发出
2、 然后 将 RAS 拉低, 这时候,内存芯片开始锁存行地址,并且开始解码。
3、 然后 内存控制器 发出 列地址, , 然后拉低 CAS,
4 、这时候, 内存开始锁存列地址,并且开始解码。
5 、 内存过一段时间开始把数据放到 数据总线上。
6 、 内存控制器,拉高 RAS, CAS。
7 、 进入下一个循环。
然后来看一下 如何计算容量。
首先 s5pv210 , DMC0 , 可以寻址 512M地址。也就是 2的29 次方。
地址总线 是14根, 也就是 2的28次方,但是我们知道,它每发出一个地址,读取的是4个字节,至于它怎么 寻找每一个地址的值, 先不管。 也就是 2的28次方, 再乘以 2的2次方。 等于 2的20次方。够了。
然后是关于 内存时序的变迁。
1 asychoronous dram ----> FPM ---->EDO----->BEDO----->SDRAM----->
DDR(double date rate SDRAM)
然后是时序的具体的 演进
1 第一种就是 DRAM。
2 第二种是, 不给行地址了,因为一般也是读取 连续的地址。
3 第三种是, 由于 地址与 数据线是并行的,那么数据可以不用等列地址 给完, 在输出。
4 第四种是, 由于一般是 连续的读取,那么列地址都省了,直接使用 累加器加一,来输出数据。
然后是关于 SDRAM 的时序。
1 、 异步的内存有一个 弊端,就是 cpu 的速率的升级,与内存的速率的升级 不是同步的。有时候 cpu 的 速度上去了,但是 内存的速度没上去,就需要匹配,
2 但是 使用 同步的话,就是加一个时钟线 ,就有更强的适应性,大家都遵守时钟的速度,时钟的速度 由最低的哪个决定,如果大家 想提高速度,那么提高时钟的频率就行了。
3 SDRAM: sychoronous DRAM。
4 、 可以看到 SDRAM中, 每次是时钟的上升沿 去采集数据。
5 、 在DDR 中, 上升沿与 下降沿 都输出了数据。这样速度就提高了。
然后在来看看 DQS的作用。
1 在SDRAM 中,数据是这样的,时钟的上升沿,开始发出数据,然后得等一小会,等数据稳定了,也就是 下降沿的时候 , 去采集数据。这是没问题的。
2 、 但是 DDR 就有问题了, 如果上升沿,下降沿,都输出数据的话,那么我过多长时间去采集数据呢?
3、这里有个术语, 就是 在输出数据与采集数据之间的时间 叫做 data eye , 我在瑞芯微的 手册中见过。
4、接下来就轮到 DQS 出场了,这是一个 差分信号,它来通知, 下载可以采集数据了。
举个例子, 3568 的原理图上。
可以看到, 一个 片选上有 两组的 DQS。
DQS 是跟 data 对应的。
然后来看一下 内存的DLL。
1 、 你看 内存 会从 cpu 接收一个时钟------>然后内存根据输入的时钟,自己会产生一个时钟------> 然后内存的数据的输出,是根据 自己的时钟的。
2 、 这里有两个延迟, 一个是 从时钟输入,到自己产生时钟,是有一个延迟的,第二个是 自己的时钟的上升沿 开始输出数据,但是到 数据线上真正有数据也是有一个延时的。
3 、 所以 内存的内部的时钟,反正也是赶不上 cpu 的时钟,那么干脆就延迟一下, 看上去跟 输入的时钟保持一致。 但是 第二个 是避免不了的,但是也是可以接收了。
然后在来看一下 关于内存的容量的问题。
1 、 s5pv210 上, DMC0 是 521M的寻址的。
2、 使用的内存芯片 是 16M x 8IO x 8 bank 的, 也就是说,内存的 寻址空间是 128M , 输出一个字节,但是由于是 4 片 拼在一起了,所以是 每读取一个地址,输出了4个字节。容量是 512M了。
3 、 但是,注意 ,DMC0 的 寻址空间仍然是 128M , 它这里是怎么处理的呢? 不理解。
疑问:
1、 这么说的话,是不是 32位的 的cpu 要突破 4G的内存了呢,因为我可以 设计的一个 地址,读取出 1万个字节这种。
2、 对了, 在软件上, 4字节对齐,是不是就跟这个设计有关了?