作者:静-静-静距离 | 来源:互联网 | 2023-10-10 15:33
由于工作需要,需要使用DDR4,资源有限,选择在开发板上进行DDR3的入门学习,套路大同小异,现将调试过程进行相关记录。
开发板上只有一颗DDR3颗粒,型号为MT41K128M16,大小256MB,数据位宽16bit,这里可以计算一下按照16bit位宽读写DDR,地址最大值:256*1024*1024*8/16 = 'd134217728 = 'h800_0000。
一、DDR读写用户接口:
二、DDR读写时序
严格按照手册上的读写时序进行配置,用户侧的输入控制信号,推荐组合逻辑进行编写,避免不必要的延时:
三、简单记录下MIG的IP配置
注意:例化完MIG之后,为了验证硬件的好与坏,DDR3需要抓取init_calib_complete信号,该信号为高电平,表示DDR颗粒正常工作并且校验完成;如果是DDR4颗粒,在上板调试时,调试界面会有校验是否通过指示。
(1)MIG工作频率设置最高的400MHz。
此时PHY to Controller Clock Ratio固定为4:1,UI clock为400MHz / 4 = 100MHz,这个时钟是MIG输出给UI的时钟,用户可以拿这个时钟来驱动用户逻辑,能够避免跨时钟域的问题。
MIG工作频率设置为400MHz时,由于DDR是双边沿采样,因此DDR实际的工作频率为800MHz;用户工作频率为100MHz,DDR颗粒的数据位宽为16bit,那么可以计算出用户接口的数据位宽为16*8 = 128bit。
总结,物理层,DDR颗粒工作频率800MHz/位宽16bit,用户侧工作频率100MHz/位宽128bit。
(2)输入给MIG的系统时钟200MHz,该200MHz时钟在本工程中,由开发板上晶振的50MHz通过MMCM产生,MIG通过内部的PLL产生400MHz的MIG工作频率。
(3)系统时钟属性选择No Buffer,50MHz晶振时钟产生200MHz的MMCM选择了Global Buffer
(4)参考时钟属性选择No buffer,从MIG的用户手册时钟树上分析,MIG工作频率 > 667MHz时,根据FPGA的速度等级去选择参考时钟,为300MHz还是400MHz;否则参考时钟选择200MHz。
当系统时钟设置为200MHz时,参考时钟可以设置为use system clock。
四、仿真分析
(1)写,w_app_cmd[2:0]为3'b000
burst突发8,地址位宽28bit,从28'h000_0000到28'h7ff_fff8;写数据位宽128bit,取值为地址值+1。
28'h000_0000开始写:
28'h7ff_fff8结束写,此时DDR颗粒写满:
(2)读,w_app_cmd[2:0]为3'b001
读命令发出,到读到数据有一段时间的延时。
读第一个数据:
读最后一个数据:
附代码:ddr3_read_write_ctr.v-硬件开发文档类资源-CSDN文库