高端建网站优化站点
读信号,dqs 是对齐到dq的边沿, 写信号,dqs 的边沿是对到中间的。
spec 就是这样规定的。我们在dq的最中间的采样,肯定是最安全的。
dqs 是对齐到dq的边沿 , 在silicon 内部,还是通过移位完成的。
rl: read latency
cl : cas latency
al: additive latency
cwl: cas write latency
trrd row to row delay
tccd column to column delay
trcd: row to colum delay
delay: execution will start after a specific time
latency: execution has started. but it' not stable enough, a specific time is required for stabilization
latency: 是已经产生了脉冲,等 它稳定之后,再把信号发到总线上。
简而言之。 我已经发了,但内部逻辑上,我已经发了这个信号了。
在多次传输,想达到更高的带宽,会产生冲突,为什么会冲突呢,因为active 的时候,行列地址都在总线上。
round trip optimize , 其实就是调latency, 就在在现有的情况下,能不能对信号有改善。
basic training : 是要扫所有的pi range.
make signals aligned logically
因为它根本不知道系统是什么样子的
高级的training ,找到了就跳出来
use deselect comand, 如果不用des, 它会一直持续。
相当于人为的引入一些噪声, 让你下面的数据都是无效的,以目前的状态,是否人的margin 还是很好。
basic training 就是把信号对齐。
预备知识差不多了。
cross over
target:
align different clock domain inside mc
method:
buf pi domain, 由一个时钟源,分发给各个时钟,前提是把总开关,调调好,
发现任何一根receive enable 是0的时候,采样停止。告诉硬件,往后的数据就到过来了
是rx的。因为我们不知道,什么时候,送过来。数据的开始,在这个地方,把我们采样的阀门打开。
当任何一个到的时候,我们就固定。 所有17 根的dqs 都到达这个状态的时候。
receive enable:
也就是我们basic training 的第一步,先把ctrl clock 对齐, receive enable. training 对顺序是有要
先把receive enable train 出来
目标:
发出一个读命令, 调整 rcv_en 延时,RTL 还有IO LATENCY , 使得RCV_EN 在DQS preamble 的中间。
方法: 第一步精调, 使得rcv_en 在 dqs assert 的中间。
sweep 128 pi,
第二步, 粗调rtl ( round time latency) , rcv_en 可以采样dqs preamble.
第三步,粗调 IO LATENCY 让rcv_en 可以采样所有的dqs 前导码。
它其实是一个delay. 既然是receive , 就是rx, dimm 送来的dqs 信号, 我mc 知道它啥时候过来的,我啥时候该采样dqs, dq 啊。 dqs 在上生沿, 采样dq, 啥时候去采样dqs, 当经过了rcv en 这样一个delay, 这个delay 其实 是为了节省时间 。 否则,数据还没有送过来,我就开始采, 首先是耗电。 没有经过training , 时延也会受影响。
我读命令发出来了, 接下来,我肯定是期望, data 会发过来。 等到了round trip latency 这个点到了, 我接激活mc 去接下来的工作。 如果置成0, 就是一发读信号,我就开始采样。
在data 没有过来之前,我们进入一个低功耗状态。 该收信号,收信号。 在止之前,我就得等。因为既然是时间, 增加rtl 是什么意思, 其实就是增等待的时候。
我发了一个读信号出去, 数据过来了, memory 自己都还没有ready. 先进我的buffer, 我不发给mc 去处理。 先不做动作, 等 silicon 内部已经stable 了, io lateny 增加, 意味着我在这个地方hold 住 更久的时候。 如果写成0. 就是直通了, 信号一来, 就传出去。
rcv_en 就是采我的dqs. 这个时候一到达, 立马, 半个周期, 就有dqs 过来。
rtl , 先预估一下, 你什么时候过来。
io latency 你过来了, 控制不了DIMM 啥时候过来。 我能控制自己。控制不了dimm 什么时候过来, 但是我能控制我自己。
我憋着,憋多久呢? 再憋 rcv en 这么久。
硬件逻辑就开始工作。
增加io latency , rcv en 就采不到东西。 相当于是进行左移了。 增加 io latency 就相当于信号跑过去了。 采晚了, 会导致miss 掉, 一直不收, 这么多数据 miss 掉了。
preamble 是两个周期的0. 所以preamle 在硬件上就是两个周期的0. 都是perbank 的。
他们的目的是不一样的。
要想达到晚输出的效果,只能调io latency.
三个latency 是如何搭配起来。 rcv _en 的粒度是pi. 一个q clock 是等于64 个pi.
rtl 就是一个assume.到了这个latency 之后, 所有硬件逻辑才开始工作。 信号过来了, 有些先过来,有些后过来,先到的,我就hold 住。rcv en
就是说,第一步, 挪 rcv en 去采样dqs. dqs 高电平才是assert . 采到0 就是0, 最后我就要采出来, 就是把dqs 的样子采出来。 我就能知道 dqs 长这个样子。 我再计算。 当我们知道 dqs 的形状之后。 再计算这两点, 除以2, 就可以让rcv en 采到正中间。
挪到他采到的是一个0为止, 大家都 一起挪, 左移,我们发现任何一根dqs 采到0 的时候,我们停止。 我们就让他先停下来, 至少有一个的dqs rcv en 到了地方。告诉硬件, dqs 就要过来了。 第0个数据。 把我们采样的阀门打开, 就是一个over all 的。 我们就固定了round trip latency. 大概需要经过43 个clock. 这个是一个统领的, 信号有先后顺序, 这时候就去憋。 调io latency. 把信号先憋这么久, 一直什么时候,算结束, 所有18 根的dqs 都达到这个状态。
DDR3 的工作原理
DDR3 的内部是一个存储阵列,将数据填进去,和表格检索原理一样,先指定一个行row, 再指定一个列column, 我们就可以准确的找到