一. 简介
本例将介绍SDRAM的使用。SDRAM是一个存储器件,存储容量大,存储速度比较快,速度可达100M,特别适合用来当中视频或者音频中的存储器件。
在采集到OV5640传输过来的图像数据的时候,FPGA的片上资源是没有那么大的存储空间进行存储的,必须通过外部的存储器件进行存储。恰好开发板上有一片SDRAM,所以用此来进行存储,一般而言入门级的FPGA开发板上都是配置的SDRAM,中高级一点的是DDR2(alter开发板),DDR3(xilinx开发板)。
所以本例将实现一个完善的SDRAM存储控制器,供大家查看。
关注微信 公众号 FPGA之旅 回复 FPGA之旅设计99例之第二十例 获取全部工程文件 包括sdram仿真模型。
二. SDRAM接口信号
从下面框图中可以看出,SDRAM接口信号可以分为四大类:控制信号,地址信号,数据输入输出信号,掩码信号。下面将详细介绍各个命令的作用。
以上就是SDRAM的全部接口信号了,并没有特别复杂。
下图是SDRAM的所有命令,在对SDRAM进行操作的时候,需要使用到。
然后在.v文件中先将其定义出来,方便后续使用
三. SDRAM上电初始化
上电后,没有任何时序上的操作,只需要延时100us(手册上要求最小为100us),使输入输出电平达到稳定,即可,在此期间,发送的命令最好为NOP。
这里初始化包括了初始化和加载模式寄存器,我认为初始化,就是加载模式寄存器。
(1)模式寄存器
模式寄存器的定义如下,通过地址线给出,每位都有其具体的含义。
0-2 bit:定义突发长度,每给一个读/写命令后,输出/输入的数据大小
4-6bit :定义潜伏期,发出读命令后,延时多少个周期给读数据,仅对读操作有效
10-12bit:保留,始终置高即可
其余位始终保持为0即可。模式寄存器的内容就这么多。
(2)初始化
下图是初始化的过程,按照图示要求依次发送对应的命令即可,命令与命令之间的间隔时间手册上都有说明,取的时候,可以适当取大。模式寄存器的A信号被分成了两部分A10和其他,可以看到A10在PRECHARGE阶段有特殊作用,一般为1,对所有的bank都进行预充电。
在模式寄存器中A10也是为1的,所以在整个初始化过程中,A可以直接赋值为模式寄存器的值。
实现过程如下,也是非常简介的,编写好初始化模块看,可以直接仿真,这里多亏了大佬写的sdram模型(就是一个.v文件),不用上板,可以直接仿真看代码编写是否正确。
仿真输出如下,可以看到和时序图中,命令发送过程是一样,同时也可以看到,模式寄存器配置的具体参数,非常方便,初始化模块就顺利的编写完成了。
公众号:FPGA之旅