- UID
- 1023229
- 来自
- 中国
|
2.2 SDRAM控制器的实现
本设计中将SDRAM控制器分成4个子模块:sdr_master主控模块、sdr_ctrl命令模块、sdr_sig译码模块、sdr_data数据通路模块,见图2。sdr_master主控模块根据外部的读写请求向sdr_ctrl命令模块提供各种读写控制信号;sdr_ctrl命令模块内部的控制状态机会依此发出各种SDRAM读写控制命令;sdr_sig译码模块会把sdr_ctrl输出的控制命令译码成符合SDRAM接口的信号。此SDRAM 控制器的设计,最复杂的部分在于如何设计SDRAM的工作时序,即SDRAM何时激活,何时读/写,何时预冲,何时刷新。这些控制除了满足SDRAM的工作特性外,还要满足设计要求。因此,鉴于SDRAM控制的复杂性,一般都采用状态机来控制。本设计中sdr_ctrl命令模块包括两个状态机:初始化状态机完成SDRAM的初始化;控制状态机完成SDRAM的正常工作控制。下面分别详述这两个状态机的设计。
初始化状态机的结构见图3。系统在上电(复位)后,处于i NOP状态;当等待了100 μs后,状态跳转到i PRE,发出预冲命令;接着跳转到i tRP等待;经过tRP时间后,状态跳转到i_AR1,发第一次刷新命令,然后在i_tRFC1等待tRFC时间后发第二次刷新命令,再等待tRFC;接下来转到状态i MRS,发装载模式字命令,然后等待tMRD时间后初始化完成,进入i_ready状态。至此初始化完成,SDRAM芯片就可以正常工作了。
控制状态机的状态跳变见图4。此状态机是为了满足超长数据的连读或连写而特殊设计的。上电后处于c_idle状态,当初始化完成后,控制状态机才能开始正常工作。当外部要求进行读写操作时,会正式地启动状态机。此时状态机跳变到c_ACT状态,使SDRAM控制器发出激活命令;接下来两个状态 c_tRCD1、c_tRCD2是激活等待时间tRCD;然后状态机根据外部是读请求还是写请求,来决定下一个状态是发读命令还是写命令。下面以写数据为例进行说明,读数据的工作过程是一样的。
当要求写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的数据读写,满足了项目需求。 |
|