1. 当设定突发长度是一页时, 一页指的是多少?
答:一页指的是一个bank的所有列,比如一个bank 是256列, 那么一页就代表突发长度是256个,也就是 完整的一行。
2. 为什么自动刷新的周期是64ms除以一个bank 的所有行数?自动刷新都有哪些进行方式?
答:因为存储体中电容的数据有效保存期上限是64ms,因此要保证至少每隔64ms要将所有bank刷新完。这里不是一个自动刷新操作的耗时时间为64ms,一个自动刷新操作的耗时看datasheet, 有的是9个时钟周期,如果时钟是100M,那么一个自动刷新命令要执行的周期是90ns。
假如一个SDRAM 有4个bank,行地址是12bit, 那么一个bank就有4096行(2的12次方),每一次给一个自动刷新命令时, 所有bank 的 同一行地址都进行刷新(如果有4个bank, 那么同时四个bank 的同一行也就是有四个行同时进行刷新)。刷新命令一次仅对一行有效,每刷新一行都要发送一次自动刷新的命令,所以刷新完整个SDRAM 需要发送4096次自动刷新命令。每次执行完自动刷新命令 行地址计数器自动增1,为下次刷新命令作用的行做准备。
SDRAM 的刷新操作是周期性的,在两次刷新的间隔可以进行数据的相关操作。每次自动刷新操作之间的时间间隔不一定要均匀分布。
- 自动刷新可以是在某个集中时间段将所有行都刷新一次,也就是一次性刷新完(时间t),然后在(64ms - 时间t)的空隙里可进行读写操作,经过64ms以后,又进行新的一轮刷新。
- 也可以是在 每隔 64ms/4096=15625ns 时间刷新一次,一次刷新操作是9个时钟周期,剩余的时间(1562个周期-9个周期)空隙可进行读写操作。
- 也可以是先等待读写,读写完了再刷新,保证能在64ms内的某个时间 对所有bank 都进行了刷新操作即可。
3. 那如果是在写的时刻却到了该刷新的操作该怎么办?
肯定不能在写的时候进行刷新动作,这样会引起数据丢失。 但比如采用突发模式是一页,在刷新操作要进行的前一拍 却进入了写操作,那么这个刷新操作要等待256(一页的长度)+ 激活时间 + 预充电时间 才能进行,那怎么办呢?
为了简化设计,可以这样调整:
因为刷新4096行是要求在15625ns 时间内就刷新一次。我们可以将刷新间隔改为15625ns - 256(一页的长度)- 激活时间 - 预充电时间 ),如果时钟周期是100M, 那么这个刷新间隔大概是1300个时钟周期。每次计数器计数到1300时间就进行一次刷新,如果遇到写的状态,则等待变为idle状态以后再执行自动刷新的操作。
这样设计的话,最长的刷新等待时间是刚计数到1300时遇到写,此时要等待1300+256+激活时间 + 预充电时间 小于1562个时钟周期,这个等待的时间是在时序要求内的。
那有人会问改成1300个周期作为刷新间隔是否会很浪费电,是,不过这个在可以接受的范围。
4.自动刷新( Auto Refresh)和自刷新(Self Refresh)以及预充电(Precharge)有什么区别?
答: 可以参考 https://www.sohu.com/a/126626646_463982
4.为什么在激活命令的时候给了bank地址, 在写操作的时候还要给bank 地址呢?
答: 命令的时序是这样设计的。
可能是为了避免好几个bank 的不同行 被激活了 同时在使用时 ,这时候为了不混淆不同bank 的行, 所以读写的时候 也要带上bank 地址,防止冲突产生(这是我自己的思考,还没有得到证实)
关于SDRAM 写时序的相关问题
5. 关于SDRAM 读时序的相关问题