👉个人主页:highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
参考资料:《镁光DDR数据手册》
目录
DDR SDRAM芯片引脚
DDR SDRAM芯片框图
DDR SDRAM的mode register
DDR SDRAM的初始化
DDR SDRAM芯片引脚
第一代DDR引脚与初代SDRAM的不同上图红框圈出来了:
1、单端时钟改为差分时钟;
2、增加DQS信号,这时的DQS还是单端的;
3、VDD和VDDQ从3.3V降到了2.5V;
4、IO引脚电平从TTL改为了SSTL_2,增加了SSTL_2参考电压VREF(VDDQ/2)。另外外部还需要SSTL_2 IO的端接电压VTT(VDDQ/2)。
DDR SDRAM芯片框图
这里再把SDRAM的框图贴出来,大家对比一下:
可以看到,DDR的框图和初代SDRAM相比,只有红框处有所区别。我们从输入和输出两个方向分别看:
首先看输出,也就是读DDR数据,假设存储阵列核心频率100MHz,仅单边沿有效,IO gating在一个时钟边沿一次性输出16bit数据给到read latch锁存,然后通过MUX多路复用器输出8bit给输出驱动器,MUX这里16bit输入变8bit输出,两个8bit的输出总有个先后顺序吧,这个顺序在MUX这里靠最低位列地址COL0来决定,关于burst type和顺序的定义在后面说到mode register相关内容后再详细说。时钟CK在经过DLL与外部时钟同步后,驱动DRIVERS输出数据,这里的时钟频率与核心频率一致,但是是双边沿有效,所以这里一个时钟周期的两个沿刚好就能把内部输出的16bit数据输出完毕。另外DDR在输出数据时,内部的DQS generator会生成一个单端DQS信号,与数据一起在时钟作用下输出,这里的DQS与数据的相位关系是边沿对齐。
然后看输入,也就是写数据。接收模块RCVRS先后收到16bit输入数据DQ和2bit屏蔽信号DM,在控制器输出的DQS双边沿作用下,按既定的突发顺序将8+8的DQ和1+1的DM锁存到input register,控制器输出的DQS与DQ、DM为中心对齐关系。Input register将两个8bit数据合并成16bit数据给到write fifo,随后write fifo输出16bit数据给到IO gating进行写入阵列控制。此fifo的输入参考时钟为DQS,输出参考时钟为CK,均为单边沿有效,由于DDR内部逻辑是以CK为参考,而写入时的外部接口逻辑是以DQS为参考,所以需要一个fifo来实现跨时钟域的同步。
DDR SDRAM的mode register
DDR的模式寄存器与初代SDRAM大体相同,由于新增了功能,于是新增了extended mode register,相关定义如下:
Bit[2:0]:BL,突发长度。支持2、4、8突发长度。
Bit[3]:burst传输方式,0表示顺序传输,1表示交错传输。传输顺序由低位地址线决定,定义如下:
Bit[6:4]:CAS潜伏期,可设置为2、2.5、3,单位为时钟周期tck。
Bit[n:7]:操作模式,除了bit8之外,其他bit都是0,bit8为0为正常操作模式,bit8为1为DLL复位。DLL复位需要通过LMR命令来实现,镁光的这颗DDR是DLL复位完之后自动进入正常操作模式,不用再用LMR把这个bit8又写为0。
Bit[n+2:n+1]:00表示为基础模式寄存器,01表示为扩展模式寄存器。
Bit[0]:DLL,0使能,1不使能。正常工作都要使能。不使能DLL仅用于调试用途。
Bit[1]:驱动强度,0正常强度,1降低强度。正常为SSTL_2,class II驱动强度,降低后为正常强度的54%,用于轻负载场景,如点对点拓扑。
DDR SDRAM的初始化
流程图如下,大家自行看一下:
初始化时序图如下: