详解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.rhkb.cn/news/319330.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 已开源:https://github.com/stay-leave/enhance_llm 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。…

新型直膨式光伏光热热泵/动力热管复合循环系统

太阳能光伏光热热泵(即PVT热泵)技术是建筑领域内实现碳中和的有效技术手段,该技术具有优越的热电冷联产能力。然而,现有的PVT热泵在良好的室外工况下能耗较高。为了解决这一问题,本文提出了一种新型的DX-PVT热泵/动力热…

【c++】模板编程解密:C++中的特化、实例化和分离编译

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来学习模版的进阶部分 目录 1.非类型模版参数按需实例化 2.模版的特化函数模版特化函数模版的特化类模版全特化偏特化 3.分离编译模版分离编译 1.非类…

ubuntu搭建kms服务器

1.下载kms开源包(如果提示找不到wget命令的话:apt install wget): wget https://github.com/Wind4/vlmcsd/releases/download/svn1111/binaries.tar.gz2.解压: tar -xzvf binaries.tar.gz接着cd 进入 Linux/intel/static/ 文件夹下: 3.选择对应的文件,这里我们选…

力扣每日一题104:二叉树的最大深度

题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2…

OpenCV(二)—— 车牌定位

从本篇文章开始我们进入 OpenCV 的 Demo 实战。首先,我们会用接下来的三篇文章介绍车牌识别 Demo。 1、概述 识别图片中的车牌号码需要经过三步: 车牌定位:从整张图片中识别出牌照,主要操作包括对原图进行预处理、把车牌从整图…

飞书API(7):MySQL 入库通用版本

一、引入 在上一篇介绍了如何使用 pandas 处理飞书接口返回的数据,并将处理好的数据入库。最终的代码拓展性太差,本篇来探讨下如何使得上一篇的最终代码拓展性更好!为什么上一篇的代码拓展性太差呢?我总结了几点: 列…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档:https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码:https://mariadb.org/ma…

022、Python+fastapi,第一个Python项目走向第22步:ubuntu 24.04 docker 安装mysql8集群、redis集群(三)

这次来安装mysql8了,以前安装不是docker安装,这个我也是第一次,人人都有第一次嚒 前言 前面的redis安装还是花了点时间的,主要是网上教程,各有各的好,大家千万别取其长处,个人觉得这个环境影响…

【C语言】分支和循环(上)

【C语言】分支和循环(上) 1、if语句1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2、关系操作符3、条件操作符4、逻辑操作符:与、或、非(取反)(&&,||,&#xff0…

深入理解网络原理3----TCP核心特性介绍(上)【面试高频考点】

文章目录 前言TCP协议段格式一、确认应答【保证可靠性传输的机制】二、超时重传【保证可靠性传输的机制】三、连接管理机制【保证可靠性传输的机制】3.1建立连接(TCP三次握手)---经典面试题3.2断开连接(四次挥手)3.3TCP状态转换 四…

「 网络安全常用术语解读 」通用漏洞报告框架CVRF详解

1. 背景 ICASI在推进多供应商协调漏洞披露方面处于领先地位,引入了通用漏洞报告框架(Common Vulnerability Reporting Format,CVRF)标准,制定了统一安全事件响应计划(USIRP)的原则,…

JSP与JavaBean

目录 一、JavaBean是什么 二、创建JavaBean 三、在JSP中使用JavaBean 1、按照Java语法直接使用 2、<jsp:useBean>动作 Bean的加载原理 scope属性的不同取值 3、<jsp:setProperty>动作 设置为一个表达式的值或字符序列 通过表单的参数的值来设置Bean的相应…

Find My无人机|苹果Find My技术与无人机结合,智能防丢,全球定位

无人机是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机&#xff0c;或者由车载计算机完全地或间歇地自主地操作。无人机按应用领域&#xff0c;可分为军用与民用。军用方面&#xff0c;无人机分为侦察机和靶机。民用方面&#xff0c;无人机行业应用&#xff0c;是无…

43 单例模式

目录 1.什么是单例模式 2.什么是设计模式 3.特点 4.饿汉和懒汉 5.峨汉实现单例 6.懒汉实现单例 7.懒汉实现单例&#xff08;线程安全&#xff09; 8.STL容器是否线程安全 9.智能指针是否线程安全 10.其他常见的锁 11.读者写者问题 1. 什么是单例模式 单例模式是一种经典的&a…

多多搜索推广计划怎么设置

拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自主设置佣金比例&#xff0c;激励推广者去帮助商家推广商品链接&#xff0c;按最终有效交易金额支付佣金&#xff0c;不成交不扣费。是商家破零、积累基础销量的重要…

自动化机器学习——网格搜索法:寻找最佳超参数组合

自动化机器学习——网格搜索法&#xff1a;寻找最佳超参数组合 在机器学习中&#xff0c;选择合适的超参数是模型调优的关键步骤之一。然而&#xff0c;由于超参数的组合空间通常非常庞大&#xff0c;手动调整超参数往往是一项耗时且困难的任务。为了解决这个问题&#xff0c;…

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX&#xff0c;创建连接&#xff0c;点击NEW SUBSCRIPTION,创建一个主题&#xff0c;这里使用test/topic,在下面Json中填写…

使用 ORPO 微调 Llama 3

原文地址&#xff1a;https://towardsdatascience.com/fine-tune-llama-3-with-orpo-56cfab2f9ada 更便宜、更快的统一微调技术 2024 年 4 月 19 日 ORPO 是一种新的令人兴奋的微调技术&#xff0c;它将传统的监督微调和偏好校准阶段合并为一个过程。这减少了训练所需的计算…

Java零基础入门到精通_Day 8

1.API 应用程序接口 Java API:指的就是JDK 中提供的各种功能的Java类这些类将底层的实现封装了起来&#xff0c;我们不需要关心这些类是如何实现的&#xff0c;只需要学习这些类如何使用即可&#xff0c;我们可以通过帮助文档来学习这些API如何使用。 2. String String 类…