基于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所示
在这里插入图片描述

图1.1 初始化时序图

在这里插入图片描述

图1.2 命令真值表

2. SDRAM初始化模块以及仿真

初始化模块流程:
 A、 上电后给到一定延时(200us)
 B、 输出PRECHARGE命令
 C、 经过一个时钟周期(20ns)输出AUTO REFRESH命令
 D、 经过四个时钟周期(80ns)再次输出一个AUTO REFRESH命令
 E、 最后输出MODE REGISTER SET命令
 F、 完成SDRAM初始化

仿真结果:
在这里插入图片描述

图1.3 刷新模块仿真结果

 运行一段时间过后(210us),已有初始化完成信息显示如图1.3所示,CAS潜伏期(给出读命令后,数据会有相应的延时才会输出),设置为3个时钟周期,设置突发长度为4个存储单元,突发类型为连续型。

3.TOP模块的仲裁机制

 这个仲裁模块利用状态机来实现,主要用于处理刷新、读、写操作的先后顺序问题。
 目前只写了仲裁状态ARBIT、刷新状态AREF和初始状态IDLE。初始状态结束后进入仲裁状态,在仲裁状态下收到刷新使能后进入刷新状态,在刷新状态下收到刷新完成后进入仲裁状态。

4. SDRAM刷新模块代码以及仿真

刷新功能整体时序如图1.4
在这里插入图片描述

图1.4 刷新时序图

A、 一片SDRAM有4096行,4个bank,每一次只刷新4个bank的一行,在64ms内需要刷新到所有4096行,所以每次刷新的间隔为64000us/4096=15us。
B、 当刷新模块内部计数到15us时,向TOP模块发送刷新请求,仲裁模块回送刷新使能命令。
C、 刷新模块只需要在PRECHARGE命令后(20ns)输出一次刷新命令即可完成一次刷新。
D、 仿真结果如图1.5
在这里插入图片描述

图1.5 刷新仿真结果

可以看到在初始化完成后,每隔15us SDRAM就完成了一次刷新。

5.代码

我的Github

6.参考资料

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值