前面几篇博客已经讲到了关于0V7725的相关驱动问题,那么OV7725驱动成功之后,设定OV7725输出RGB565格式,那么对于640x480x16,那么若是选用FIFO,应该设置为位宽16bit,存储深度为30万,但是这样是不现实的。所以采用存储深度更大的SDRAM来实现数据的缓存。

要么对于SDRAM的学习资料,笔者列举以下几篇文档供大家学习。

当然还有之前各位大神写的博客,都可以进行参考,这里不一一列举。

本篇博客先整体介绍SDRAM,以及SDRAM的重要知识点。

  1.基础知识

SDRAM(synchronous dynamic random access memory),同步动态随机存储器。同步也就是与CPU前端总线的系统时钟频率相同,并且内部命令的发送与数据的传输都是以它为基准。动态是SDRAM是电容阵列,需要不断的充放电,不断刷新数据保证数据不丢失,所以SDRAM有个重要参数,就是刷新频率。

我们可以把SDRAM想象成一个表格,若要写入某一个单元,则需指定行地址和列地址,如下图21.1所示,整个由行列组成的块,称之为L-Bank,大部分的SDRAM都是基于4个L-Bank设计的,也就是有4张这样的表格。寻址流程,先是指定L-Bank的地址,再进行指定行地址,然后再指定列地址寻址单元,其中每个单元可以放置8/16/32位的数据。

笔者常用的是hynix(海思)的SDRAM芯片,如下图。基于hynix的其他其他型号操作时序都是一样的,只不过存储容量改变。时钟频率以及其他参数改变,这个之后会提及到。

由上图可以看出,有四个分区,每一个分区是由行和列激活信号,并通过行和列的预解码实现行和列的锁定,其中地址缓存器赋予地址寄存器,用来产生行和列的预解码,以及模式寄存器,模式寄存器用来控制写入的方式。状态机部分是产生控制逻辑,功能和仲裁器一样,SDRAM的实施其实也是利用了DMA的原理,CPU只需给仲裁逻辑发送相应的指令,会将数据从一个地方搬运到另一个地方。

所以整个SDRAM部分,应该包括逻辑控制单元,地址寄存器,数据寄存器,在时序控制中,还有一个命令解码器,CPU就是通过这个通道来实现命令的交互,来操作内存条的。SDRAM中还有模式寄存器,这个决定SDRAM是否能够读写操作的成败。

2. PCB设计注意事项

SDRAM在制作PCB时,为了保证在高频下正常工作,首先应该处理好电源引脚的退耦电容,退耦电容的layout与FPGA电源引脚一样,在PCB设计时尽可能的靠近电源引脚,以最大限度地滤除纹波,提高SDRAM驱动电源的质量。

SDRAM时钟信号:由于SDRAM的工作频率较高,为避免传输效应,同时避免对其他信号产生干扰,在时钟线的布线时应尽可能采用地线隔离,缩短PCB上面的走线长度。

SDRAM控制信号:由于是高速并行操作,控制线在layout时尽可能地等长,以最大限度地保证时序信号的同步性。

如果对SDRAM的时钟,时序要求比较高,则在重要的控制线上面,加33Ω电阻来消除干扰。这个主要是降低信号边沿的跳变速率。

SDRAM尽可能地远离电源,晶振,用户接口等干扰比较大的电路模块

SDRAM走线即使没有严格的走等长线,只要走线不是太长,都没有太大关系。

上图是笔者经常采用的一种方案,其中引脚15和19如果不采用掩模处理的话,可以直接接地。

//=======================================================================

更多详细的资料下载可以登录笔者百度网盘:

网址:http://pan.baidu.com/s/1bnwLaqF

密码:fgtb

//=======================================================================

SDRAM 学习笔记(一)的更多相关文章

  1. SDRAM学习笔记(二)

    上一篇博客主要讲解了一下SDRAM整体结构以及PCB方面的注意事项.接下来讲解一下需要用到的一些命令. 1.常用命令的缩写 上述是常用到的一些指令集. 2.模式寄存器   (1)突发长度 通过对A0~ ...

  2. SDRAM 学习笔记(三)

    上图是terasic公司提供的SDRAM控制器,大部分已经封装好,我们需要修改其中部分代码,以此来实现我们自己需要的功能. 1.PLL时钟设定 首先上面的sdram_pll.v中产生上一篇博客所需要的 ...

  3. SDRAM学习笔记

    摘自“开源骚客视频教程” 1.仲裁模块就是用来控制什么时候读.写.刷新 2.模块中的状态机 3.初始化时序图说明,来自“IS42S116160.pdf”文件 4.SDRAM写时序图,来自“IS42S1 ...

  4. jz2440-uboot-201204版本移植【学习笔记】【原创】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山二期视频学习笔记 交叉编译工具:arm-linux-gcc (GCC)4.3.2 PC环境:ubuntu18.04 一.uboot ...

  5. jz2440使用openjtag+openocd+eclipse调试【学习笔记】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山二期视频学习笔记 交叉编译工具:arm-linux-gcc (GCC) 3.4.5 eclipse版本:eclipse-cpp-l ...

  6. jz2440存储管理实验【学习笔记】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 简介:先来简单的说明一下这次的实验,看看下图,我们的程序通过烧录器下载到nandflash当中去,之后在启动的时 ...

  7. Aurora学习笔记连载一:仿真平台搭建

    由于公司项目需要,需要学习Aurora协议,才有了这样的连载学习笔记,也算是对自己学习的一份记录吧. 对于Aurora是什么,大家自行百度. 当然,Kevin也在此先提醒大家,本套学习笔记不是你想学就 ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. 深入理解Linux内核-内存管理

    内核如果给自己分配动态内存 动态内存:RAM的某些部分被永久打分配给内核,用来存放内核代码以及静态内核数据结构:剩余的部分被称为动态内存 连续物理内存区管理: 页框管理:1.页大小的选择,通常情况下主 ...

  2. Unity Shaders and Effects Cookbook (4-1)(4-2)静态立方体贴图的创建与使用

    開始学习第4章 - 着色器的反射 看完了1.2节,来记录一下.反射主要是利用了 Cubemap 立方体贴图. 认识Cubemap 立方体贴图.就如同名字所说.在一个立方体上有6张图.就这样觉得吧. 假 ...

  3. JAVA与C++,C与C++的差别

    首先来分析JAVA与C++的差别: JAVA是纯面向对象的语言,而C++是基于面向对象过程的语言. JAVA有着垃圾回收机制.它的语法是C++的子集,即JAVA有的C++都有.而C++有的JAVA不全 ...

  4. zabbix server 与数据库不在同一台服务器上面

    16312:20170527:095215.225 database is down: reconnecting in 10 seconds 16312:20170527:095225.225 [Z3 ...

  5. Cloud Resource

    Cloud Public Cloud Aliyun AWS Azure Cloud Stack SDN指南 DNS:Band Private Cloud DC/OS OpenStack Hybrid ...

  6. win2008r2的iis7.5手动建站方法,iis7.5中用独立用户建立网站的方法,提高网站安全性

    win2003的iis6手动建站方法,iis6中用独立用户建立网站的方法,提高网站安全性,我们前面的教程有说明,请看http://www.piis.cn/zhishi/web574.asp 现在我们说 ...

  7. angular.js测试框架protracotr自带的webdriver-manager启动问题“Invalid or corrupt jarfile”

    按照官网安装完protractor. 升级webdriver-manager,获取selenium-server-standalone库文件以及各种浏览器驱动文件. webdriver-manager ...

  8. Asp.Net MVC App_Code无法识别

    Asp.Net MVC需要写公共类的时候 右击添加 App_Code 文件夹,新建类—>右击类—>属性,生成操作 —>选择 —>编译 Asp.Net MVC项目本身是个应用程序 ...

  9. java多线程16:join()的使用

    讲解join()方法之前请确保对于即wait()/notify()/notifyAll()机制已熟练掌握.可以参考前面的笔记 join()方法的作用是等待线程销毁.join()方法反应的是一个很现实的 ...

  10. Linux下RTL-SDR基础环境安装

    安装 cmake and libusb apt-get install cmake apt-get -dev 安装 RTL-SDR sudo apt-get install rtl-sdr kali已 ...