当要求写SDRAM时,控制状态机的状态由c_tRCD2跳变到c_WR状态,发出写命令。SDRAM控制器会在发写命令的同时将本次突发数据的第一个数据送到总线上,接着是三个周期的状态:c_tDAL1、c_DAL2、c_tDAL3,之后回到c_idle状态。这样完成了写数据的一次循环,刚好需要 8个周期。在回到c_idle状态后即可启动下一次写数据传输,这时状态机跳到c_ACT状态,发出激活另一个bank的某一行的命令,然后经过两个周期后,此时上一次写操作的数据突发长度刚好结束。下一个周期状态变成c_WR,发下一次的写命令,同时将这一次突发长度的第一个数据放到SDRAM数据总线上……如此循环,可以完成长度是1280的连续数据的写入。这个循环如何结束呢?当发了最后一个突发写命令后,状态机回到c_idle时,即可停止循环,不再进入激活状态。总之通过控制这个状态机可以完成长度是8的倍数的连续数据读写。控制状态机还有实现刷新操作的功能,当要求对SDRAM进行刷新操作时,控制状态机的状态会跳变到c_AR,SDRAM控制器会依此发出刷新命令。然后状态机跳变到c_tRFC状态等待刷新操作的结束。当刷新操作结束后,状态机将恢复到c_idle。这样就完成了一次刷新操作。如果需要多次刷新,就可以连续进行多次这样的循环。
2.3 SDRAM控制器的综合
本设计使用的SDRAM芯片是MT48LC2M3282,FPGA芯片是cyclone的EP1C6Q240C6。综合工具是QuartusII 6.0。综合的结果是逻辑单元使用了170个,占总资源的3%;工作频率最高可以达到240.10 MHz,满足项目要求。
3 代码的仿真测试
本设计的仿真工具是Modelsim6.1f,部分仿真测试波形见图5。图中描述了读一行数据的时序图,在开始突发写数据后,SDRAM的数据总线sdr_DQ上的数据没有被中断。这个表示整个设计达到了能够支持超长数据突发读写功能,能满足设计要求。
4 结束语
本文介绍了一种实现超长数据突发读写的设计。此设计采用切换Bank操作节约了激活命令所花费的时间;采用自动预冲命令节约了预冲命令所花费的时间;采用集中刷新完成了足够的刷新操作。通过对上面操作的组合设计,能够很好地完成超长数据的突发读写。在设计中,成功地实现了突发长度是1280的数据读写,满足了项目需求。