基于FPGA的SDRAM控制器设计(二)
1. SDRAM理论基础
1、SDRAM(synchronous dynamic random access memory)同步动态随机存储器
2、SDRAM 容量=数据位宽x存储单元数量(Bank数x行地址x列地址)
对于SDRAM仿真module(sdram_module_plus.v):数据位宽为16位、bank数为4、每个bank大小为2Mbit
3、SDRAM初始化过程、各命令对应引脚电平如图1.1、图1.2所示
2. SDRAM初始化模块以及仿真
初始化模块流程:
A、 上电后给到一定延时(200us)
B、 输出PRECHARGE命令
C、 经过一个时钟周期(20ns)输出AUTO REFRESH命令
D、 经过四个时钟周期(80ns)再次输出一个AUTO REFRESH命令
E、 最后输出MODE REGISTER SET命令
F、 完成SDRAM初始化
仿真结果:
运行一段时间过后(210us),已有初始化完成信息显示如图1.3所示,CAS潜伏期(给出读命令后,数据会有相应的延时才会输出),设置为3个时钟周期,设置突发长度为4个存储单元,突发类型为连续型。
3.TOP模块的仲裁机制
这个仲裁模块利用状态机来实现,主要用于处理刷新、读、写操作的先后顺序问题。
目前只写了仲裁状态ARBIT、刷新状态AREF和初始状态IDLE。初始状态结束后进入仲裁状态,在仲裁状态下收到刷新使能后进入刷新状态,在刷新状态下收到刷新完成后进入仲裁状态。
4. SDRAM刷新模块代码以及仿真
刷新功能整体时序如图1.4
A、 一片SDRAM有4096行,4个bank,每一次只刷新4个bank的一行,在64ms内需要刷新到所有4096行,所以每次刷新的间隔为64000us/4096=15us。
B、 当刷新模块内部计数到15us时,向TOP模块发送刷新请求,仲裁模块回送刷新使能命令。
C、 刷新模块只需要在PRECHARGE命令后(20ns)输出一次刷新命令即可完成一次刷新。
D、 仿真结果如图1.5
可以看到在初始化完成后,每隔15us SDRAM就完成了一次刷新。