问题1:刷新周期
这个问题在http://www.ippipp.com/group/topic/id/1930中已有记录,之前是关于4096和8192刷新周期的问题,即SDRAM行地址数,也就是SDRAM总共有多少个地址线的问题。
现在重新提出来是因为发现SDRAM有偶发的某些位置数据不对,要么是写没有写对,要么是读出校验的时候没有读对,高度怀疑是没有写对。就因为是偶发所以才会对SDRAM的读也怀疑。
经过使用SignalTap进行debug发现SDRAM空闲的时候行间刷新周期是784个时钟周期(100MHz),也即7840ns,那么整片刷新周期7840x8192=64225280ns,稍微大于要求的64ms。
检查代码,发现刷新模块设置的刷新周期是781个时钟周期,小于理论要求的64ms/8192=7812.5ns。经过分析该SDRAM控制器在自动刷新命令发出后需要等待主状态机应答,所以实际上行间刷新周期比设置的要多出3个时钟周期。
问题2:tRAS问题
这个问题和 http://www.ippipp.com/group/topic/id/1930中提到的刷新问题有点类似,都是因为器件型号不同导致控制使用的时序比实际器件要求的最小时间还要小。所以需要放大tRAS时间。
美光不同后缀对于tRAS时间范围:
-6A:42ns~120000ns
-75:44ns~120000ns
-7E:37ns~120000ns
检查代码发现实际写的tRAS是四个时钟周期,即只有40ns,所以当使用-6A和-75的时候可能会出问题。
图1:SDRAM写操作时的tRAS
如图1所示,tRAS是从c_state的状态6,即ACTIVE到状态E,即PRECHARGE之间的间隔,这里只有4个时钟周期,即40ns。