fpga控制sdram存储器的读写2:sdram初始化

本文详细阐述了SDRAM芯片上电后的初始化步骤,包括关闭未激活行、预充电、刷新、设置模式寄存器,以及关键操作时序、延迟时间和Verilog代码实现。通过解读数据手册,一步步指导如何在FPGA中精确控制初始化流程以确保高效稳定的工作。
一.理论知识

sdram芯片上电后,执行读写操作之前,首先要做的第一件事就是初始化,这里解释下初始化的目的。

1.在使用sdram资源的时候,要先给出芯片的地址,这个地址就是行/列地址。初始化第一步,首先就是要关闭所有bank中激活的行。虽然系统上电之后,sdram还没开始使用,没有被激活的行,但是依然要执行预充电这一步操作,确保在使用之前所有bank中没有激活的行。

2.sdram是动态存储器,物理层面是靠电容来维持电平信号,需要不断地给它刷新来给电容充电。在使用sdram资源之前,要给sdram的所有bank刷新。为了确保刷新成功,在初始化期间,要刷新多次。

3.刷新完之后,要给sdram发送模式寄存器配置指令,模式寄存器主要控制芯片的读写方式突发方式突发长度等配置信息。为后面的读写操作提前设置参数信息。

二.解读数据手册

1.初始化操作时序
初始化操作时序
2.延迟时间
在这里插入图片描述
在这里插入图片描述
3.配置寄存器的值
在这里插入图片描述
上面的时序图是从镁光公司提供的sdram芯片数据手册中截选出来的。时序图介绍:

1.sdram上电后,加载稳定的时钟信号,然后设置CKE为高电平。芯片手册要求sdram的时钟频率最高不超过166M,这里我们选用100M时钟频率。sdram要求在时钟上升沿到来的时候,所有的信号数据要准备好,sdram会在上升沿采集这些信号。我们在fpga内部定义一个100M时钟信号,所有信号都在100M时钟的上升沿赋值。但是fpga的信号传输到sdram芯片中间会有延迟,所以我们另外再定义一个100M时钟信号,比前面的100M时钟信号偏移一定的角度,新的100M时钟上升沿比前面的100M时钟早到一会儿,然后把这个新的100M时钟信号发送给sdram。这样就能确保sdram能在时钟上升沿的时候采集到稳定的信号。

2.等待至少T=100us的时间,我们这里取200us,此过程中操作命令保持为空操作命令。

3.200us等待结束后,写入预充电命令,A10设置为高电平,对所有Bank进行预充电。

4.预充电指令写入后,等待tRP时间,从上图中找到tRP最少为20ns,sdram的时钟是100M,所以我们这里设置为2个时钟周期,此过程中操作命令保持为空操作命令。

5.等待tRP时间之后,写入自动刷新命令。

6.自动刷新命令写入后,等待 tRFC时间,从上图中找到tRFC最少为66纳秒,我们设置为7个时钟周期,此过程中操作命令保持为空操作命令。

7.tRFC等待时间结束后,再次写入自动刷新命令。

8.自动刷新命令写入后,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值