详解SDRAM基本原理以及FPGA实现读写控制

文章目录

  • 一、SDRAM简介
  • 二、SDRAM存取结构以及原理
    • 2.1 BANK以及存储单元结构
    • 2.2 功能框图
    • 2.3 SDRAM速度等级以及容量计算
  • 三、SDRAM操作命令
    • 3.1 禁止命令: 4'b1xxx
    • 3.2 空操作命令:4'b0111
    • 3.3 激活命令:4'b0011
    • 3.4 读命令:4'b0101
    • 3.5 写命令 :4'b0100
    • 3.6 突发中止命令 :4'b0110
    • 3.7 预充电命令 :4'b0010
    • 3.8 刷新命令:4'b0001
    • 3.9 配置模式寄存器命令:4'b0000
  • 四、FPGA实现SDRAM读写操作
    • 4.1 系统框图


一、SDRAM简介

  SDRAM是“Synchronous Dynamic Random Access Memory”的缩写,也叫同步动态随机存取器。因为其单位存储量大、高数据带宽、读写速度快、价格相对便宜等优点被广泛使用在各行各业。同时,其升级版的DDR作为电脑内存也被广泛使用。

  • 同步:是指SDRAM工作需要同步时钟,内部的命令的发送与数据的传输都以此时钟为基准,同步时钟是由控制器(CPU/FPGA)发出;
  • 动态:是指SDRAM需要不断的刷新来保证数据不丢失;
  • 随机:是指数据不是线性依次存储,而是自由指定地址进行数据读写。

二、SDRAM存取结构以及原理

2.1 BANK以及存储单元结构

   SDRAM存取数据结构不同于FIFO和RAM,可以把SDRAM存取结构类比成表格结构,如下图所示。想要对一个存储单元进行读写操作,可以通过行地址列地址来定位到所想要操作的存储单元。

在这里插入图片描述

   把这种N行N列的“表格”称为一个逻辑BANK也叫 L-bank。通常SDRAM里面存在多个逻辑BANK,因此想要读写操作需要先指定一个逻辑BANK然后通过行地址和列地址定位到想要读写的存储单元。“表格”中的一个单元格是SDRAM的一个存储单元,一个存储单元里可以存放一个或者多个bit的数据,其中存放一个bit的存储单元结构入下图所示:

在这里插入图片描述
  由上图可以看出,一个存储单元是由两个选通三极管以及电容组成。当电容的电荷高于设定阈值时,表示存储的为高电平,否者为低电平。由于电容不是理想的电容,因此电容的电荷量会随着时间的移动慢慢减少。所以需要定时不断地给电容充电来保持数据的稳定,这就体现了SDRAM的动态特性。

2.2 功能框图

  打开芯片数据手册,我们可以看到SDRAM功能框图如下:

在这里插入图片描述
   由功能框图可以看出,SDRAM结构包含一个逻辑控制单元,其中包含了(命令解码单元和模式寄存器)、包含了一个地址寄存器(行列地址复用)、刷新计数器、BANK控制器、四个BANK、以及数据输出寄存器等等。外部通过 CS_N、RAC_N、CAS_N、WE_N 以及地址总线向逻辑控制单元输入命令,命令经过命令解码器进行译码后,将控制参数保存到模式寄存器中,逻辑控制单元进而控制逻辑运行。SDRAM器件引脚图如下所示:

在这里插入图片描述
   # 符号表示该信号为低电平有效。破折号 (-) 表示 x8 和 x4 引脚功能与 x16 引脚功能相同。以镁光生产的4 Meg x 16 x 4 banks的SDRAM为例,引脚说明如下:

引脚名称位宽类型功能描述
CLK1bitinputSDRAM工作所需的系统时钟:所有信号都在CLK上升沿采样
CKE1bitinput时钟使能信号:高电平时才能操作SDRAM
CS#1bitinput片选信号:低电平时有效,高电平时屏蔽所有输入输出端口,CLK,CKE,DQM除外
CAS#1bitinput列选通信号:低电平时A[8:0]为输入的列地址
RAS#1bitinput行选通信号:低电平时A[12:0]为输入的行地址
WE#1bitinput写使能信号:低电平时有效,{CS#,CAS#,RAS#,WE#}构成SDRAM操作命令
DQM[1:0]2bitinput数据掩码信号:高位掩码高字节数据,低位掩码低字节数据
BA[1:0]2bitinputBANK地址信号
A[12:0]13bitinput地址总线,不同命令下有不同含义
DQ[15:0]16bitinout输入和输入数据复用的数据总线

2.3 SDRAM速度等级以及容量计算

  打开芯片数据手册,最开始位置我们可以看到本数据手册支持这三种SDRAM。
在这里插入图片描述

  • MT48LC16M16A2:代表镁光公司生产的SDRAM型号,不同厂商生产的SDRAM命名各不相同。
  • 4 Meg x 16 x 4 banks:4 Meg表示一个BANK的存储单元数量,16表示一个存储单元所占的bit数,4bank表示一共有四个bank

在这里插入图片描述
  SDRAM容量数=一个bank存储单元数量✖一个存储单元的位宽✖bank数量。例如:4 Meg x 16 x 4 banks的SDRAM容量= 8192✖4096✖16✖4 = 2147483648 bit = 268435456 Byte=256MB

在这里插入图片描述
   由上图可以看出,不同速度等级对应的最大系统时钟频率不同。CL为列选通潜伏期, t R C D ^tRCD tRCD, t R P ^tRP tRP分别为自激活等待时间和预充电等待时间。

三、SDRAM操作命令

   对SDRAM的操作都是通过由{CS_N、RAS_N、CAS_N、WE_N} 四路控制信号构成指令来的, 数据手册也提供了SDRAM的指令集,如图所示:

在这里插入图片描述

3.1 禁止命令: 4’b1xxx

   无论CKE是否有效,COMMAND INHIBIT (禁止命令)都会阻止器件执行新命令。该设备被取消选择,已经进行的操作命令不受影响。

3.2 空操作命令:4’b0111

   该命令给被选中的 SDRAM 芯片传递一个空操作信息,目的是为了防止 SDRAM 处于空闲或等待状态时,SDRAM被其他命令写入,已经进行的操作命令不受影响。

3.3 激活命令:4’b0011

  该命令用于激活指定bank中的某一行。{BA0,BA1}的值用于选择哪个bank,地址总线A[12:0]用于选择哪一行。激活该行后,该行一直保持激活状态,并可以进行后续读/写操作,操作完成后,只有执行一次预充电命令(Precharge)后,被激活的特定行被关闭。每次激活只能激活一个Bank,同一个Bank 中每次只能激活一行,当需要对同一 L-Bank 中其他行进行操作时, 必须先执行一个预充电命令关闭当前行,再激活另一行进行操作。激活命令示意图如下:

在这里插入图片描述

3.4 读命令:4’b0101

  读命令用于对已经激活的bank和行进行读操作。A10的值决定是否在读操作完成后对该行进行预充电来关闭该行。如果为低电平,则继续保持该行的激活状态,后续也能继续进行读写操作。{BA1,BA0}选择想要读取的bank,A0-A9选择哪一行,读命令操作示意图如下:

在这里插入图片描述

3.5 写命令 :4’b0100

  写命令用于对已经激活的bank和行进行写操作。A10的值决定是否在读操作完成后对该行进行预充电来关闭该行。如果为低电平,则继续保持该行的激活状态,后续也能继续进行读写操作。{BA1,BA0}选择想要写入的bank,A0-A9选择哪一行,写命令操作示意图如下:
在这里插入图片描述

3.6 突发中止命令 :4’b0110

  SDRAM 处于读/写操作过程中可被写入,突发停止操作被用来截断固定长度或者整页长度的突发,执行突发停止命令后,最近执行的数据读写操作被终止。

3.7 预充电命令 :4’b0010

  该命令用于关闭指定bank中打开行或所有bank中打开的行。在发出预充电命令后的指定时间 ( t R P ^tRP tRP)后,相对应的bank才能用于后续的行访问。输入 A10 确定是对指定bank还是所有bank进行预充电,如果仅对指定bank进行预充电,则输入 BA0 和 BA1 选择该bank。Bank 预充电后,它处于空闲状态,必须在向该 Bank 发出任何 READ 或 WRITE 命令之前重新激活它。

3.8 刷新命令:4’b0001

  前面提到,由于电容会产生漏电流,因此必须在电容电荷量泄露完成之前对电容进行充电,这就叫刷新。目前国际公认的标准是,存储体中电容的数据有效保存期上限是 64ms,也就是说每一行刷新的循环周期最大为 64ms,那么刷新速度就是:行数/64ms。例如8192行的SDRAM刷新周期就为7.8125us。
   刷新命令分为自动刷新和自刷新。在CKE为高电平时,执行自动刷新前必须执行预充电命令,来关闭所有bank。每次刷新后,需要等待相应周期后才能进行读写操作。在CKE为低电平时,执行自刷新,主要用于休眠状态下,对数据的保存。

3.9 配置模式寄存器命令:4’b0000

  该命令只有所有bank 均处于空闲状态时才可被写入,否则配置出错,而且在执行此命令后,SDRAM 必须等待相应的响应时间 t R S C ^tRSC tRSC(Register Set Cycle)后,才可写入新的命令。在配置模式寄存器时,需要使用地址总线来辅助配置,如下图所示:

在这里插入图片描述

  1. A0,A1,A2 控制数据突发长度。突发长度可设置为1、2、4、8 和整页,单位为字节,整页表示一次突发传输一整行的数据量。若在数据读写操作时不使用突发传输,此时可等效为突发长度为 1 字节,每次读写数据时,都要对存储单元进行寻址,如果要实现连续的读写操作,就要不断地发送列地址和读/写命令。下图是突发长度设置为4的读操作时序图:

在这里插入图片描述
  由图可以看出,若使用突发传输,只要指定起始列地址和突发长度,内存就会依次地自动对后面相应数量的存储单元进行读写操作,这样,除了第一笔数据传输需要若干个(CL)周期外,其后的每个数据只要一个周期即可获得。下图是突发长度不设置突发长度的读操作时序图:
在这里插入图片描述

  1. A3设置突发类型,0为顺序突发,1为隔行突发。具体突发顺序如下图所示:

在这里插入图片描述
  一般情况下都设置为顺序突发。

  1. A4,A5,A6设置列选通潜伏期,是指从读命令被寄存到数据总线上到出现第一个有效数据之间的时钟周期间隔,列选通潜伏期可被设置为 2 个或 3 个时钟周期,如下图所示。
    在这里插入图片描述

  2. A7,A8设置操作模式,SDRAM 存在标准模式、测试模式等多种模式,但对于普通用户,只开放了标准模式,在使用 SDRAM 时只需将 A7,A8 设置为低电平进入标准模式即可。

  3. A9设置写突发模式:当 A9 = 0 时,通过 A[2:0] 编程的突发长度适用于读和写突发;当M9 = 1时,编程的突发长度适用于读突发,但是写操作不是突发,一次只能写一个数据

  4. A12,A11,A10 保留。

四、FPGA实现SDRAM读写操作

  实现uart接收数据到SDRAM中,然后从SDRAM读出来再通过uart发送出去。

4.1 系统框图

(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/588182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【蓝牙协议栈】【BR/EDR】传统蓝牙 command/event/acl/sco/iso 命令格式解析

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【精讲蓝牙协议栈】、【精讲BLE协议栈】和【Android Bluetooth Stack】专栏会持续更新中…

Java进阶-Java Stream API详解与使用

本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理。通过详细解释和示例,文章展示了 Java Stream API 在简化代码、提高效率以及支持函数式编程方面的优势。文中还比较了 Java Stream API 与其他集合处理库的异同&…

【氮化镓】GaN器件在航天器高可靠正向转换器中应用

文章是发表在《IEEE Journal of Emerging and Selected Topics in Power Electronics》2022年10月第10卷第5期上的一篇关于GaN(氮化镓)器件在航天器高可靠性正向转换器中应用的研究。文章的作者是匹兹堡大学电气与计算机工程系的Aidan Phillips, Thomas Cook和Brandon M. Gra…

c#word文档:3.向Word文档中插入表格/4.读取Word文档中表格

--向Word文档中插入表格-- (1)在OfficeOperator项目的WordOperator类中定义向Word文档插入换页的函数NewPage (2)在WordOperator类中定义向Word文档插入表格的函数InsertTable using Microsoft.Office.Interop.Word;// 引入Mic…

Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueue BlockingQueue 解决线程通信的问题。阻塞方法:put、take。 生产者消费者模式 生产者:产生数据的线程。消费者:使用数据的线程。 (Thread1生产者,Thread2消费者) 实现类 ArrayBlockingQueueLinkedBlockingQueuePr…

MATLAB 数据导入

MATLAB 数据导入(ImportData) 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

Electron+Vue3+Vite+ElectronForge整合-全部ts开发 - 一键启动两个服务 一键打包两个服务

说明 本文介绍一下 Electron Vue3 Vite Electron Forge 的高级整合操作。vue3 : 使用 TS 的语法开发; Electron : 使用 TS 的语法开发。 补充 : 目前Electron的开发还是以JS为主,不过我们可以直接使用TS开发,在执行和打包时&a…

UE5 蓝图入门

基础节点创建: 常量: 按住 1 ,点击鼠标左键,创建常量 二维向量: 按住 2 ,点击鼠标左键,创建二维向量 三维向量: 按住 3 ,点击鼠标左键 按 c 键打出一个注释框 参考视…

C# Winform父窗体打开新的子窗体前,关闭其他子窗体

随着Winform项目越来越多,界面上显示的窗体越来越多,窗体管理变得更加繁琐。有时候我们要打开新窗体,然后关闭多余的其他窗体,这个时候如果一个一个去关闭就会变得很麻烦,而且可能还会出现遗漏的情况。这篇文章介绍了三…

HR招聘测评,如何进行人才测评?

说起“人才测评”几个字,相信大家都不会陌生,很多人,尤其是求职者来说,则更加熟悉。在求职应聘中,已经有越来越多的企业开始采用人才测评进行人员选拔。了解人才测评的含义,知道人才测评如何进行&#xff0…

打破失联困境:门店如何利用AI智能名片B2B2C商城小程序重构与消费者的紧密连接?

在如今这个消费者行为日益碎片化的时代,门店经营者们时常感叹:消费者进店如同一场不期而遇的缘分,然而一旦离开门店,就仿佛消失在茫茫人海中,难以再觅其踪迹。这种“进店靠缘分,离店就失联”的困境&#xf…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

平面模型上提取凸凹多边形------pcl

平面模型上提取凸凹多边形 pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::ExtractConvexConcavePolygons(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud) {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);p…

政安晨:【Keras机器学习示例演绎】(二十八)—— 使用 卷积神经网络与循环神经网络 架构进行视频分类

目录 数据收集 设置 定义超参数 数据准备 序列模型 推论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正…

Android Handler用法

Android Handler用法 为什么要设计Handler机制&#xff1f;Handler的用法1、创建Handler2、Handler通信2.1 sendMessage 方式2.2 post 方式 Handler常用方法1、延时执行2、周期执行 HandlerThread用法主线程-创建Handler子线程-创建Handler FAQMessage是如何创建主线程中Looper…

微服务保护和分布式事务(Sentinel、Seata)笔记

一、雪崩问题的解决的服务保护技术了解 二、Sentinel 2.1Sentinel入门 1.Sentinel的安装 &#xff08;1&#xff09;下载Sentinel的tar安装包先 &#xff08;2&#xff09;将jar包放在任意非中文、不包含特殊字符的目录下&#xff0c;重命名为 sentinel-dashboard.jar &…

Docker容器---Harbor私有仓库部署与管理

一、搭建本地私有仓库 1、下载registry镜像 [rootlocalhost ~]#docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4a2: Pull complete e2ead8259a04: Pull comp…

vulnhub靶场之FunBox-1

一.环境搭建 1.靶场描述 Boot2Root ! This is a reallife szenario, but easy going. You have to enumerate and understand the szenario to get the root-flag in round about 20min. This VM is created/tested with Virtualbox. Maybe it works with vmware. If you n…

NASA数据集——NASA 标准二级(L2)暗目标(DT)气溶胶产品每 6 分钟在全球范围内对陆地和海洋上空的气溶胶光学厚度(AOT)产品

VIIRS/NOAA20 Dark Target Aerosol 6-Min L2 Swath 6 km 简介 NOAA-20&#xff08;前身为联合极地卫星系统-1&#xff08;JPSS-1&#xff09;&#xff09;--可见红外成像辐射计套件&#xff08;VIIRS&#xff09;NASA 标准二级&#xff08;L2&#xff09;暗目标&#xff08;D…

集合的基本操作

集合&#xff1a; 在java当中&#xff0c;含有着一些不同的存储数据的相关集合。分为单列集合&#xff08;Collection&#xff09;和双列集合(Map)。 Collection 首先学习Collection来进行展示&#xff1a; 以框框为例子&#xff0c;蓝色的代表的是接口&#xff0c;而红色的…
最新文章