为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?

	欢迎关注微信公众号:DRAM视界

其实on-die ECC都是在LPDDR5跟DDR5上才开始从JEDEC上开始明确定义的feature需要DRAM vendor来支持的。
DDR4跟LPDDR4并没有在官方spec上定义on-die ECC的spec,连option的选项都没有
但是为何LPDDR4其实是可以支持on-die ECC,目前LPDDR4的颗粒,应该内部其实都是有on-die ECC的,但是DDR4压根实现不了on-die ECC呢?
DRAM的ECC,目前的编码方式都是128bit data,产生8bit parity或者ECC code. 而且必须要128bit才行。这8bit的ECC code是要被写入到DRAM内存里面的,从而read的时候,可以读取这8bit ECC code来判定read data是否有错,如果是SBF,就可以纠错了,如果是double bit,大部分时候是可以detect到错误,即所谓的SEC(Single Error Correct) + DED(Double Error Detect).
以下是几点原因:

  1. 写的时候,ECC是内部产生8bit code同时写,读的时候是内部读取8bit code来纠错。所以主要需要支持ECC而导致的潜在的risk是:write的时候要同时产生8bit code,才能一起写入。写入时间会增长(tWR), read的时候要处理8bit code来纠错(tAA会变大), 但是tAA只要性能足够好,因为ECC带来的tAA跟tWR的变大不是致命题,但是是影响因子之一
  2. 主要是mask-write在DDR4跟LPDDR4的定义不一样。
    DDR4的MaskWrite没有单独的command,只是通过DM pin来标注maskwrite.也即DM pin给L的时候,这对应的beat的data是被mask掉不被写入的,给H的时候,就不mask,正常写入。
    为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?_第1张图片
    但是LPDDR4的truth table里面会有个单独的Mask-Write command.
    为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?_第2张图片
    多了这一笔mask-write command有什么影响呢?
    假如host需要发一笔mask-write command给DRAM,DRAM如果需要支持ECC, DRAM需要做什么?因为ECC 8bit code需要128bit来产生。那么如果是mask-write,假如mask-write mask了128bit里面的64个bit,也即mask掉的64bit data是不会被写入DRAM的,所以ECC的8bit parity是不能根据这个mask掉的64bit data来产生8bit code,而是需要把没有mask的64bit + array里面不会被改写的64bit(mask掉的64bit)合并起来产生8bit code,这个8bit code才是真正代表最终mask-write动作之后array里面的真实的128bit所应该产生的code.
    那么问题来了,DRAM怎么知道被mask掉的64bit的data,在array里面是什么值的?解决办法是DRAM需要提前知道,也即在write data来临之前就要提前知道并提前准备好data,等write data来临的时候,将被mask掉的位置对应的原来的array data跟即将写入的data merge成一个128bit来写入并产生8bit。
    所以mask-write 这个command的真实作用是:DRAM收到mask-write后,DRAM内部做了一个internal read,把对应地址的128bit data先内部提前读出来放到一个位置提前准备好,等DQ上的data来临之后(经过WL), 根据mask-write需要mask掉的位置,把对应位置的data从提前准备好的data里面拿出来覆盖掉,在merge成一笔128bit写回DRAM并产生符合预期的8bit ECC CODE.
    但是DDR4不支持Mask-Write command. 所以DDR4做不了提前read的动作,ECC就会出错。
    所以DDR4不支持ECC的根本原因,是DDR4不支持mask-write command.

你可能感兴趣的:(DRAM从旁听到入门,笔记,架构)