在进行突发传输时,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址 。这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得 。
突发连续读取模式:只要指定起始列地址与突发长度,后续的寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与BL相同)即可做到连续的突发传输 。
谈到了突发长度时 。如果BL=4,那么也就是说一次就传送4×64bit的数据 。但是,如果其中的第二笔数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(DataI/OMask,简称DQM)技术 。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据 。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽 。DQM由北桥控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM 信号线,每个信号针对一个字节 。这样,对于4bit位宽芯片,两个芯片共用一个DQM信号线,对于8bit位宽芯片,一个芯片占用一个DQM信号,而对于 16bit位宽芯片,则需要两个DQM引脚 。
在数据读取完之后,为了腾出读出放大器以供同一Bank内其他行的寻址并传输数据,内存芯片将进行预充电的操作来关闭当前工作行 。还是以上面那个Bank示意图为例 。当前寻址的存储单元是B1、R2、C6 。如果接下来的寻址命令是B1、R2、C4,则不用预充电,因为读出放大器正在为这一行服务 。但如果地址命令是B1、R4、C4,由于是同一Bank的不同行,那么就必须要先把R2关闭,才能对R4寻址 。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(eriod,行预充电有效周期),单位也是时钟周期数 。
在不同Bank间读写也是这样,先把原来数据写回,再激活新的Bank/Row 。
文章插图
数据选取脉冲(DQS)
DQS 是DDR中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据 。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由北桥发来的DQS信号,读取时,则由芯片生成DQS向北桥发送 。完全可以说,它就是数据的同步信号 。
在读取时,DQS与数据信号同时生成(也是在CK与CK#的交叉点) 。而DDR内存中的CL也就是从CAS发出到DQS生成的间隔,DQS生成时,芯片内部的预取已经完毕了,由于预取的原因,实际的数据传出可能会提前于DQS发生(数据提前于DQS传出) 。由于是并行传输,DDR内存对tAC也有一定的要求,对于,tAC的允许范围是±0.75ns,对于,则是±0.7ns,有关它们的时序图示见前文,其中CL里包含了一段DQS 的导入期 。
DQS 在读取时与数据同步传输,那么接收时也是以DQS的上下沿为准吗?不,如果以DQS的上下沿区分数据周期的危险很大 。由于芯片有预取的操作,所以输出时的同步很难控制,只能限制在一定的时间范围内,数据在各I/O端口的出现时间可能有快有慢,会与DQS有一定的间隔,这也就是为什么要有一个tAC规定的原因 。而在接收方,一切必须保证同步接收,不能有tAC之类的偏差 。这样在写入时,芯片不再自己生成DQS,而以发送方传来的DQS为基准,并相应延后一定的时间,在DQS的中部为数据周期的选取分割点(在读取时分割点就是上下沿),从这里分隔开两个传输周期 。这样做的好处是,由于各数据信号都会有一个逻辑电平保持周期,即使发送时不同步,在DQS上下沿时都处于保持周期中,此时数据接收触发的准确性无疑是最高的 。
- 制作大容量IMG文件或任意调整IMG文件大小的方法
- [转帖]linux下的CPU、内存、IO、网络的压力测试
- 涨点神器!超越Adam!谷歌提出Lion炼丹优化器,内存更小、效率更高!
- 128和256内存手机到底差距在哪
- 树懒大小一般是多少
- linux性能优化-内存原理
- freeswitch APR库内存池
- ARM32内存空间分配
- linux中给R分配内存,Linux内存超分配Overcommit深入理解
- 雷达编程实战之Firmware内存优化