FPGA之旅设计99例之第二十例---SDRAM存储器实现(上)

简介: 笔记

一. 简介


本例将介绍SDRAM的使用。SDRAM是一个存储器件,存储容量大,存储速度比较快,速度可达100M,特别适合用来当中视频或者音频中的存储器件。


在采集到OV5640传输过来的图像数据的时候,FPGA的片上资源是没有那么大的存储空间进行存储的,必须通过外部的存储器件进行存储。恰好开发板上有一片SDRAM,所以用此来进行存储,一般而言入门级的FPGA开发板上都是配置的SDRAM,中高级一点的是DDR2(alter开发板),DDR3(xilinx开发板)。


所以本例将实现一个完善的SDRAM存储控制器,供大家查看。


关注微信 公众号 FPGA之旅 回复 FPGA之旅设计99例之第二十例 获取全部工程文件 包括sdram仿真模型。


二. SDRAM接口信号


从下面框图中可以看出,SDRAM接口信号可以分为四大类:控制信号,地址信号,数据输入输出信号,掩码信号。下面将详细介绍各个命令的作用。

30.png31.png

以上就是SDRAM的全部接口信号了,并没有特别复杂。


下图是SDRAM的所有命令,在对SDRAM进行操作的时候,需要使用到。

32.png


然后在.v文件中先将其定义出来,方便后续使用

33.png



三. SDRAM上电初始化


上电后,没有任何时序上的操作,只需要延时100us(手册上要求最小为100us),使输入输出电平达到稳定,即可,在此期间,发送的命令最好为NOP。


这里初始化包括了初始化和加载模式寄存器,我认为初始化,就是加载模式寄存器。


(1)模式寄存器

模式寄存器的定义如下,通过地址线给出,每位都有其具体的含义。


0-2 bit:定义突发长度,每给一个读/写命令后,输出/输入的数据大小


4-6bit :定义潜伏期,发出读命令后,延时多少个周期给读数据,仅对读操作有效


10-12bit:保留,始终置高即可


其余位始终保持为0即可。模式寄存器的内容就这么多。

35.png



(2)初始化

下图是初始化的过程,按照图示要求依次发送对应的命令即可,命令与命令之间的间隔时间手册上都有说明,取的时候,可以适当取大。模式寄存器的A信号被分成了两部分A10和其他,可以看到A10在PRECHARGE阶段有特殊作用,一般为1,对所有的bank都进行预充电。


在模式寄存器中A10也是为1的,所以在整个初始化过程中,A可以直接赋值为模式寄存器的值。

36.png



实现过程如下,也是非常简介的,编写好初始化模块看,可以直接仿真,这里多亏了大佬写的sdram模型(就是一个.v文件),不用上板,可以直接仿真看代码编写是否正确。

37.png



仿真输出如下,可以看到和时序图中,命令发送过程是一样,同时也可以看到,模式寄存器配置的具体参数,非常方便,初始化模块就顺利的编写完成了。


38.png

公众号:FPGA之旅


目录
相关文章
|
6月前
|
异构计算
FPGA进阶(3):SDRAM读写控制器的设计与验证(二)
FPGA进阶(3):SDRAM读写控制器的设计与验证(二)
51 0
|
6月前
|
异构计算 内存技术
FPGA进阶(3):SDRAM读写控制器的设计与验证(一)
FPGA进阶(3):SDRAM读写控制器的设计与验证
148 0
|
Go vr&ar C语言
【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十一:SDRAM模块④ — 页读写 β
实验二十一:SDRAM模块④ — 页读写 β 未进入主题之前,让我们先来谈谈一些重要的体外话。《整合篇》之际,笔者曾经比拟Verilog如何模仿for循环,我们知道for循环是顺序语言的产物,如果Verilog要实现属于自己的for循环,那么它要考虑的东西除了步骤以外,还有非常关键的时钟。
888 0
|
Go vr&ar C语言
【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十九:SDRAM模块② — 多字读写
实验十九:SDRAM模块② — 多字读写 表示19.1 Mode Register的内容。 Mode Register A12 A11 A10 A9 A8 A7 A6 A5 A4 A3...
818 0
|
Go vr&ar C语言
【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写
实验十八:SDRAM模块① — 单字读写 笔者与SDRAM有段不短的孽缘,它作为冤魂日夜不断纠缠笔者。笔者尝试过许多方法将其退散,不过屡试屡败的笔者,最终心情像橘子一样橙。《整合篇》之际,笔者曾经大战几回儿,不过内容都是点到即止。
1061 0
|
12天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
106 74
|
1月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
146 69
|
1月前
|
移动开发 算法 数据安全/隐私保护
基于FPGA的QPSK调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的QPSK调制解调系统,通过Vivado 2019.2进行仿真,展示了在不同信噪比(SNR=1dB, 5dB, 10dB)下的仿真效果。与普通QPSK系统相比,该系统的软解调技术显著降低了误码率。文章还详细阐述了QPSK调制的基本原理、信号采样、判决、解调及软解调的实现过程,并提供了Verilog核心程序代码。
73 26

热门文章

最新文章