这篇博客主要分析一下复位的时候MIG IP核都对DDR3干了些什么。首先大家可以着重关注RAS#、CAS#、WE#这三个信号只有当这三个引脚同时被拉低时BA[2:0]上的信号才会被DDR3判定为MR命令。第一步上电后RESET先拉低期间CKE也拉低当RESET拉高后过一段时间CKE再拉高。上电后RESET#信号需要保持低电平200us,CKE需要在RESET#拉高之前被拉低且最少维持10ns; 在RESET#被拉高之后需要等待一段时间后CKE才能被拉高。在这段时间内DRAM会开始内部初始化在CKE拉高之前时钟CK、CK#必须开始且稳定至少10ns或5个tCK此外在这个期间必须标记一个NOP或Deselect命令。在RESET#拉高之后当CKE拉高CKE就必须持续拉高至初始化过程结束 在CKE拉高之后在发送第一个MRS命令之前需要等待tXPR;第二步通过BA引脚向DDR3发送MR指令。当CS#、RAS#、CAS#、WE#四个引脚全部拉低时BA上的数据才会被DDR3识别为MRMode Register Set模式寄存器配置指令指令。指令发送的先后顺序为MSR2、MSR3、MSR1、MSR0分别对应BA[2:0]分别等于2b010、2b011、2b001、2b000也就是对应的二进制数。与此同时地址线上的数据图中0x0008就是要写入MSR2寄存器中的数据MSR2配置时地址线14bit对应14131211109876543210保留RTT_WRDynamic On Die Termination during Write写操作期间的片内终端阻抗保留CWLCAS Write LatencyCAS延迟MSR3配置时地址线14bit对应14131211109876543210保留MPR EnableMPR位置MPRMSR1配置时地址线14bit对应14131211109876543210保留RTT_NOMRTT_NOMAL输出驱动DLL EnableODSDLL保留MSR0配置时地址线14bit对应14131211109876543210保留Precharge PDWrite RecoveryDLL ResetCAS Latency高位CAS Latency低位Burst TypeBurst Length第三步发送ZQCLZQ Calibration Long阻抗长校准指令左边蓝框以及一个NOP空指令右边白框阻抗校准指令的作用是校准DDR3内部输出驱动阻抗Output Driver ImpedanceODT终端阻抗On Die Termination然后校准指令有两种ZQCL阻抗长校准和ZQCS阻抗短校准前者在复位的时候执行时长512个时钟周期约640ns是核心校准后者在正常运行期间周期性执行时长64个时钟周期约80ns主要进行微调。发送ZQCL命令后DDR3会比较ZQ引脚上接的240Ω电阻来对内部的输出驱动阻抗 Ron和ODT终端阻抗 RTT通过内部电路设置这两个电阻以及标定IO上的MOS导通电阻什么的。所以这个外接240Ω电阻精度一定要高ZQCL的命令为CS# 0、RAS# 1、CAS# 1、WE# 1同时BAQ全0、地址线的第10位为1其余为0。而NOP的指令为CS# 0、RAS# 0、CAS# 1、WE# 1同时BA和地址线全0为了方便大家阅读接下来的仿真图中我把信号线改了个名字第四步现在开始进入物理层初始化阶段这个阶段主要包含读平衡和写平衡环节。写平衡期间MIG IP核会持续翻转DQS同时DDR3向DQ上发送相位反馈数据用来告诉MIG IP核DQS相对时钟边沿是超前还是落后这里使用示例工程的缘故DQS上的数据是固定的。