READ命令见下图,用于对打开的行的burst读取访问,burst长度在模式寄存器中设置。BA0和BA1选择bank,地址输入选择起始列位置。A10的值确定是否使用自动预充电A10=1使能。如果选择“自动预充电”,将在读取burst结束时对正在访问的行进行预充电并关闭;如果未选择“自动预充电”,则该行将保持打开状态以供后续访问。
DQS与输出数据一起由LPDDR SDRAM驱动,完全对齐,控制器内部对DQS延迟到DQ的中间再根据DQS边沿采样DQ。
在完成读取burst后,没有启动其他读取命令,则DQ将变为高阻态。
CK是核心,因为都是以CK时钟为参考来进行的,所以其抖动,占空比等等都有严格的要求,否则无法正常通讯。
对于读,该参数很重要,即CK上升沿到DQS上升沿的距离。
DQS上升沿到DQ有效之间的距离。
理论上读时要求DQS和DQ是对齐的,实际有间隔,要求该间隔不大于tDQSQmax。
DQ有效到CK上升沿的间隔。
tAC=tDQSCK+tDQSQ
tAC和tDQSCK都是以CK上升沿为基准,一个是和DQ有效的距离,一个是和DQS上升沿的间隔,两者差tDQSQ就是DQS上升沿和DQ有效之间的间隔,由于读使用DQS边沿去采样DQ,所以对tDQSQ非常关心,决定了DQS至少要延迟多少才能去采样DQ。
控制内部会调整DQS延迟,延迟到DQ中心即最佳采样位置。
tLZ:DQ & DQS low-impedance time from CK/#CK
tHZ:DQ & DQS high-impedance time from CK/#CK
DQ从DQS边沿开始的保持时间。
在模式寄存器中定义,如下CL=3是默认值,可选CL=2和CL4
CAS延迟定义:当CL=3时,第一个数据在READ命令对应上升沿时钟后的(2*tCK+tAC)处有效。既简单的可以理解为第3个时钟内有效。
BURST TERMINATE命令用于截断读取burst(未使用自动预充电时A10=0)。BURST TERMINATE命令之前最近的READ命令将被截断。注意,BURST TERMINATE命令针对所有bank。此命令不能用于写burst 终止。
DQS的初始低状态被称为读取前导码preamble;与最后一个数据输出数据对齐的低状态被称为读取后同步码postamble。
参数如下
来自读取burst的数据可以通过随后的read命令进行级联或截断。来自新burst的第一个数据跟随在已完成burst的最后一个元素或正在被截断的较长burst的最后所数据之后。新的READ命令应在第一个READ命令之后X个周期发出,其中X等于所需数据输出对的数量(2n预取架构需要对为单位)。如图所示。
(1)第一个读命令
(2)第一个读命令之后,间隔2个周期,发送第二读命令
(3)留给数据传输的周期是2个周期,所以第一个命令传输了4个数据。如果是burst 4刚好传完,burst 8和以上则被截断。
READ命令可以在前一个READ命令之后的任何时钟周期上启动。非连续读取如图所示。
(1)第一个读命令
(2)第一个读命令之后,间隔3个周期,发送第二读命令
(4)留给数据传输的周期是3个周期,如果是burst 4则传输完还剩余一个周期。
可以在一个或多个page中执行全速随机读取访问,如图所示
(1)发送第一个读命令
(2)连续发送第二命令,这样每个命令间隔一个周期,传输2个数据,剩下的被截断。相当于完全随机读取。
可以使用burst TERMINATE命令BST来截断来自任何READ burst的数据,如图所示。BURST TERMINATE延时等于读取(CAS)延时即CL,即应在read命令之后X个周期发出BURST TERMINATE命令,其中X等于所需的数据对数。 简而言之就是需要读多少对数据就在都命令多少个周期后发BST命令。
(1)读命令
(2)一个周期后 BST命令终止,只发送了一个数据对。
必须先完成或截断来自READ burst的数据,然后才能发出后续的WRITE命令。如果需要截断,则必须使用BURST TERMINATE命令,如图tDQSS的情况所示。
(1)读命令
(2)一个周期后发,终止命令,可以发送1个数据对。
(3)2个周期后写命令。
如果burst为2则完全不需要BST命令,因为一个周期足够发送完。
Burst大于2则只传了一个数据对,剩余的截断。
读取burst之后可以是到同一bank的预充电命令,或者用预充电命令截断读取burst(前提是未使能自动预充电A10=0)。PRECHARGE命令应在READ命令之后X个周期发出,其中X等于所需数据对的数量。如图所示。
在PRECHARGE命令之后,在满足tRP之前,不能向同一bank发出后续命令。注意,行预充电时间的一部分在最后一个数据输出的访问期间被隐藏。
在读取被执行到完成的情况下,在最佳时间发出的预充电命令提供了与启用自动预充电的读取burst相同的操作。PRECHARGE命令的缺点是它要求命令和地址总线在适当的时间可用以发出命令。PRECHARGE命令的优点在于,它可以用于截断突发。
(1)读
(2)2个周期后预充电命令,此间可以发送2个数据对
(3)tRP之后(以上一个预充命令上升沿为基准)才能发送新的命令。
tRCD决定了打开行ACTIVE之后多久可以发送读写命令。
CL即CAS决定了读数据命令发出多久之后数据可以返回到总线上。
tRP即决定了发送预充电之后多久可以发送新的命令。
以上三个参数覆盖了最为普遍的操作过程,即
1)打开行
2)读写行
3)预充关闭行
为什么选择这几个参数作为速度评价参数呢,正是因为它代表了最普遍的一般操作,实际行内可以连续随机读,并不需要每次操作都要以上三个步骤效率可以快的更多。所以用最为一般来代替速度评价是合理的。
这里要忍不住来吐槽下各国产厂家,都喜欢加一大长串定语来定义自己第一,只要定语够长,人人都是第一,实际就不是使用普遍操作环境来定义,就属于你懂的操作!!!真正有良心的,有信心的,有能力的,都会关系实际通常的应用场景的体验,那才是接近真实的。
以上分享了LPDDR的读写时序,重点在于DQS,可说能否正确读写主要在于DQS和DQ的相位关系。DDR采用的是source synchronous的设计,即数据传输不再使用CK采样,而是增加了DQS信号,DQS由发送端驱动接收方根据其边沿进行采样DQ。
不管是读还是写,都是接收端看到的DQS边沿在DQ的中间采样就是最优的。这样保证最优的采样窗口。实际是读时颗粒驱动DQS和DQ边缘对齐,由控制器接收端对DQS延迟到DQ中心采样。写时控制器驱动DQS到DM的中心,颗粒不需要作延迟处理。这样做的目的是把决定权都交给控制器,因为颗粒产量大控制成本的收益更可观,所以尽量颗粒简单点,而控制器可以灵活的使用traing算法去调整DQS,比颗粒去调整也更灵活。