基于FPGA的SDRAM控制器设计(三)

1.SDRAM写数据模块及仿真

图1.1为SDRAM工作方式状态机,要实现写数据功能,首先给到SDRAM一个ACT命令,用以**要写入的行地址,从而使SDRAM从IDLE状态进入Row Active状态。接着给一个Write命令(其中带有列地址)就可以通过sdram_dq引脚写入数据。数据写完后,给到Precharge命令关闭现有工作行,准备打开新一行的操作,此命令进行完后自动返回IDLE状态
基于FPGA的SDRAM控制器设计(三)

图1.1 工作方式状态机

基于FPGA的SDRAM控制器设计(三)

图1.2 写命令时序图

图1.2为写命令的具体时序图,其中包含了列地址(A0-A9),BANK地址(BA0,BA1)以及其他各引脚的电平。
仿真模块的整体时序如图1.3所示,往SDRAM里面写入两行数据,中途会被Auto-refresh命令打断,为防止冲突,需要进一步完善TOP模块的仲裁机制,使得SDRAM在需要刷新时能够得到响应。
基于FPGA的SDRAM控制器设计(三)

图1.3 仿真模块时序图
注:红色方框内应为低电平。 写模块命令产生时序图见图1.4。

基于FPGA的SDRAM控制器设计(三)

图1.4 写模块时序图

基于FPGA的SDRAM控制器设计(三)

图1.5 仿真结果
仿真结果如图1.5,可以看到在写入了第0行第507列的数据之后进行了一次Auto Refresh,之后继续写入数据直到第0行被写满,接着进行一次Precharge后对第1行继续写入数据。

2. SDRAM读数据模块及仿真

同样参照图1.1的状态机,在读命令前,需要给到ACT命令以**相应的行,接着给到写命令进入到写数据状态。
可以参照读数据模块相应地构建读数据模块,只需要改写读数据命令为写数据命令。

3.代码

我的Github

4.参考资料

【开源骚客】基于FPGA的SDRAM控制器设计