内存学习(2):内存分类与常用概念2(SDRAM与DDR)

SDRAM与DDR的简单概念介绍

SDRAM

定义:

同步动态随机存取内存(Synchronous Dynamic Random-Access Memory,简称SDRAM)是有一个同步接口的动态随机存取内存DRAM(可以参考前文)。可以理解为是一种利用同步计时器对存储器的输入输出信号加以控制的DRAM。

  • 同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准
  • 动态是存储阵列需要不断的刷新来保证数据不丢失(DRAM所带有的属性)
  • 随机是指数据不是线性依次存储,而是自由指定地址进行数据读写(DRAM所带有的属性)

同步与异步:

  • 通常DRAM是有一个异步接口的,这样它可以随时响应微处理器传递而来的控制输入的变化。
  • SDRAM在DRAM的架构基础上增加同步功能(通过增加同步接口实现)和双区域功能(Dual Bank),使得微处理器能与SDRAM的时钟同步。
  • 具体操作为:在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机(同步计时器),对进入的指令进行流水(Pipeline)操作。这使得SDRAM与没有同步接口的异步DRAM(Asynchronous DRAM)相比,可以有一个更复杂的操作模式。所以SDRAM执行命令和传输资料时相较于DRAM可以节省更多时间。

读写操作流水:

该流水操作意味着芯片可以在完整处理完之前的指令前,接受一个新的指令,用以作为流水线以更高的吞吐量完成任务。

  • 写Pipline:写入命令在另一个指令执行完之后可以立刻执行,而不需要等待数据写入存储队列的时间。
  • 读Pipline:需要的数据在读取指令发出之后固定数量的时钟后到达,而这个等待的过程可以发出其它附加指令。这种延迟被称为等待时间(Latency),在为计算机购买内存时是一个很重要的参数。

SDRAM在计算机中被广泛使用,从起初的SDRAM到之后一代的DDR(或称DDR1),然后是DDR2和DDR3进入大众市场,2015年开始DDR4进入消费市场。

多Bank:

SDRAM是多Bank结构,例如在一个具有两个Bank的SDRAM模组中(Dual Bank),其中一个Bank在进行预充电期间,另一个Bank却是可以随时被读取的,这样当进行一次读取后,又马上读取已经预充电Bank的数据时,就无需等待而是可以直接读取了,这也就大大提高了存储器的访问速度。

DDR

定义:

全称为(Double Data Rate Synchronous Dynamic Random Access Memory,Double Data Rate SDRAM,),中文名为“双数据率同步动态随机存储器”或者“双数据率SDRAM”。DDR是在原有的SDRAM的基础上改进而来。此时为了明确定义,SDRAM可以被区别定义为(Single Data Rate SDRAM,SDR SDRAM)。DDR定义中的名词含义如下:

  • 同步:是指内存工作需要同步时钟,内部命令的发送与数据传输都以它为基准(SDRAM带来的属性)
  • 动态:是指DDR是一种掉电就丢失数据的存储器件,并且需要定时的刷新来保持数据的完整性(DRAM带来的属性)
  • 双数据率是指:SDRAM在一个CLK周期传输一次数据,而DDR在一个CLK周期传输两次数据,在差分时钟CLKCLK#的交叉点都有数据传输因此称之为Double Data Rate(具体可以参考后文)

双倍数据率:

别于SDR SDRAM单一周期内只能读写1次,DDR的双倍数据传输率指的就是单一周期内可读取或写入2次,本文基本都特指DDR1。在核心频率不变的情况下,DDR传输效率为SDR SDRAM的2倍。

该概念称为预取Prefetch,就有了prefetch技术,DDR1是两位预取(2-bit Prefetch,个人理解为请求为1bit的情况下,会预先一次取出2bit,为之后的IO数据传输做准备),有的公司则贴切的称之为2-n Prefetch(n代表芯片位宽)。

在描述DDR速度的时候一般使用MT/S单位,每秒多少兆次数据传输。举例而言,当核心频率为133~200 MHz的时候,此时DDR内存的传输速率约为266~400 MT/s不等,像是DDR 266、DDR 400都是这个时期的产品。

首先可以看一张DDR的时序图

image-20231105111158548

从图中发现它多了两个信号: CLK#DQSCLK#与正常CLK时钟相位相反,形成差分时钟信号。而数据的传输在CLKCLK#的交叉点进行,可见在CLK上升(CLK#下降沿)与CLK下降沿(CLK#上升沿)都有数据被触发,从而实现DDR。

在此,可以说通过差分信号( CLKCLK#)达到了DDR的目的,CLK#帮助了第二个数据的触发,但这只是对表面现象的简单描述,从严格的定义上讲并不能这么说。之所以能实现双倍的速率,还要从其内部的改进说起。也就是后文所描述的L-Bank结构。

Bank:

从图中可以看出来,白色区域内与SDRAM的结构基本相同,但请注意灰色区域,这是与SDRAM的不同之处。在于对不同内部Load Bank (L-Bank)规格的使用。其具体操作流程可以通过如下的内部结构进行说明:

image-20231105112938940

SDRAM中L-Bank存储单元的容量(也可以称为芯片内部总线位宽,个人认为理解为Bank的数量也可以)与芯片位宽(也可称为芯片I/O总线位宽)相同(在之后的博客中会讲解SDRAM的内部结构,以及为什么会有这一特性)。但在DDR SDRAM中并不是这样,存储单元的容量是芯片位宽的多倍,在此为了方便理解,先设置为2倍,也就是最初的DDR1。所以在此需要说明在DDR中不能再套用讲解SDRAM时 “芯片位宽=存储单元容量” 的情况。也因此,真正的行、列地址数量也与同规格SDRAM不一样了。

以上图为例,在读取时,L-Bank在内部时钟信号的触发一次数据传输事务,其中希望若干个8bit数据,个人理解为Bank数量为16,在内部颗粒读取到的数据量为16bit,传输到读取锁存器,分成两个8bit数据传给复用器,合并为一个8bit的数据流(包含两个8bit,之后按序输出),然后由发送器在DQS的控制下在外部差分时钟的时钟交叉点分两次传输8bit的数据。这样,如果时钟频率为100MHz,那么在I/O端口处,由于是上下沿触发,那么就是传输频率就是200MHz。

一些写博客过程中的思考

问题1:为什么不对SDR SDRAM进行提速,实现更高的内部时钟,来完成更高效的信息读取?

如果使用更加高频的信号,这里的“高频”是相对于给定技术时代或应用场景的限制来理解的,这些信号可能会带来:

  • 有限的信道带宽导致更多的离散
  • 高频信号需要更多的功耗
  • 更容易受到电容耦合和反射的影响
  • 让PCB 上存在的各种无意天线的辐射

高频信号也更难使用测试设备进行表征和故障排除。例如,示波器的模拟和数字带宽有限,随着频率的增加,它会在波形中引入更多失真。

因此,在尝试实现更高的时钟速率之前,从现有时钟速率中提取尽可能多的吞吐量是有意义的。通过从单一数据速率接口转向 DDR 接口,设计人员可以在不改变系统最大信号频率的情况下显着提高数据传输速率。即使数据信号的最大频率增加了两倍,所有这一切都可以实现,这个新的数据频率不高于先前的时钟频率。

问题2:为什么SDR SDRAM需要通过差分时钟进行,data传输事务的出发,而不是通过单个时钟的上升沿和下降沿?

查阅了很多资料,发现对CLK#的作用认识很少,很多人理解为第二个触发时钟,实现第二个数据的泵出,其实它的真实作用是起到触发时钟校准的作用。

对此需要说明,差分时钟线的具体使用如下:

  • 控制信号和地址信号都会在CLK的上升沿和CLK#的下降沿交叉处采集
  • 数据传输在一个周期的上升沿和下降沿(一个时钟周期的同相反相交叉处有两个)都会进行

从这里可以发现,数据的预取是通过CLK实现的,数据的第二次泵出也不仅仅是通过CLK#的时钟沿实现的。

由于数据是在CLK的上升沿和下降沿分别两次触发,实现DDR传输周期缩短一半的目标,在此过程中必须要保证传输周期的稳定以确保数据的正确传输,这就要求CLK的上升沿和下降沿间距要有精确的控制。

image-20231105154633104

但因为温度、电阻性能的改变等原因,同时CLK上升沿快下降沿慢,单独使用的时候CLK上下沿间距可能发生变化,很难实现上面所需要达到的精确控制。

添加反向时钟CLK#(上升慢下降快)形成差分时钟,就能起到纠正的作用。也使差分时钟的跳变点频率 CL成为1.5倍 和 2.5倍CLK 成为可能,并容易实现。这种触发方式可以提高数据传输的可靠性和稳定性。

参考文献

至简设计系列-SDRAM读写控制器 - 知乎
差分时钟作用_差分时钟的作用_tanfuz的博客-CSDN博客
DDR基础原理介绍:差分时钟,同相,反相,两者差分交叉处也即差分值为0时读写信号,一个时钟周期可以上升沿下降沿都传输数据。相当两个时钟了。所以spi简单一个时钟信号不可能一个周期内同时锁定上升沿下降沿_什么是差分时钟-CSDN博客
DDR SDRAM简介_与SDRAM的区别_时序介绍-维库电子通
差分时钟、DQS与DQM - DDRx的关键技术介绍(上) - edadoc - 博客园
DDR扫盲—-关于Prefetch(预取)与Burst(突发)的深入讨论_ddr 预取-CSDN博客
DDR扫盲——关于Prefetch与Burst的深入讨论-CSDN博客
DDR基本原理-CSDN博客
【精选】(一)DDR 基础介绍——(演进、构成、存储原理)_SD.ZHAI的博客-CSDN博客
关于DDR的prefetch_ddr prefetch-CSDN博客
双倍数据速率 - 维基百科,自由的百科全书
DDR内存技术原理分析讲解 - 知乎
DDR技术简介 - 知乎
DDR Memory工作原理 - 知乎
ddr(双倍数据速率) - 知乎
科普:DDR为什么使用双倍数据速率 - 知乎
DDR基础原理介绍 - 知乎
深入内存/主存:解剖DRAM存储器 - 知乎
深入浅出DDR系列(一)–DDR原理篇_ddr interleave-CSDN博客
【精选】一步一步带你理解DDR基本原理_ddr内存控制器的工作原理_百里杨的博客-CSDN博客
一文搞懂DDR SDRAM工作原理 - 知乎
【紫光同创国产FPGA教程】【第十章】DDR3读写测试实验 - ALINX官方博客 - 博客园
DQS(Bidirectional data strobe,双向数据滤波【转】-CSDN博客
DDR memory工作原理 - 君の内存
【精选】FPGA SDRAM和DDR的学习(DDR部分)_fpga ddr_George_ray的博客-CSDN博客
DDR4, DDR3, DDR2, DDR1 及SDRAM各有何不同? - 創見資訊

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

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

相关文章

浅谈自动化测试框架开发

在自动化测试项目中,为了实现更多功能,我们需要引入不同的库、框架。 首先,你需要将常用的这些库、框架都装上。 pip install requests pip install selenium pip install appium pip install pytest pip install pytest-rerunfailures pip …

数据结构-顺序表

1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线…

初识rust

调试下rust 的执行流程 参考: 认识 Cargo - Rust语言圣经(Rust Course) 新建一个hello world 程序: fn main() {println!("Hello, world!"); }用IDA 打开exe,并加载符号: 根据字符串找到主程序入口: 双击…

python模块的介绍和导入

python模块的介绍和导入 概念 在Python中,每个Python代码文件都是一个模块。写程序时,我们可以将代码分散在不同的模块(文件)中,然后在一个模块中引用另一个模块的内容。 导入格式 1、在一个模块中引用(导入)另一个模块可以使用import语句…

web前端——HTML+CSS实现九宫格

web前端——HTMLCSS实现九宫格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

大数据毕业设计选题推荐-无线网络大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【JavaEE】JVM 剖析

JVM 1. JVM 的内存划分2. JVM 类加载机制2.1 类加载的大致流程2.2 双亲委派模型2.3 类加载的时机 3. 垃圾回收机制3.1 为什么会存在垃圾回收机制?3.2 垃圾回收, 到底实在做什么?3.3 垃圾回收的两步骤第一步: 判断对象是否是"垃圾"第二步: 如何回收垃圾 1. JVM 的内…

Linux MMC子系统 - 3.eMMC 5.1常用命令说明(1)

By: Ailson Jack Date: 2023.11.05 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/162.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

SpringBoot 将 jar 包和 lib 依赖分离,dockerfile 构建镜像

前言 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它提供了很多便利的功能&#xff0c;例如自动配置、快速开发等等。 在使用 Spring Boot 进行开发时&#xff0c;我们通常会使用 Maven 或 Gradle 进行项目构建。 本文将为您介绍如何使用 Maven 将 Spring Boot …

项目实战:新增@Controller和@Service@Repository@Autowire四个注解

1、Controller package com.csdn.mymvc.annotation; import java.lang.annotation.*; Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Inherited public interface Controller { }2、Service package com.csdn.mymvc.annotation; import java.lang.annotation.*…

上线Spring boot-若依项目

基础环境 所有环境皆关闭防火墙与selinux 服务器功能主机IP主机名服务名称配置前端服务器192.168.231.177nginxnginx1C2G后端服务器代码打包192.168.231.178javajava、maven、nodejs4C8G数据库/缓存192.168.231.179dbmysql、redis2C4G Nginx #配置Nginxyum源 [rootnginx ~]…

大语言模型对齐技术 最新论文及源码合集(外部对齐、内部对齐、可解释性)

大语言模型对齐(Large Language Model Alignment)是利用大规模预训练语言模型来理解它们内部的语义表示和计算过程的研究领域。主要目的是避免大语言模型可见的或可预见的风险&#xff0c;比如固有存在的幻觉问题、生成不符合人类期望的文本、容易被用来执行恶意行为等。 从必…

[原创]Cadence17.4,win64系统,构建CIS库

目录 1、背景介绍 2、具体操作流程 3、遇到问题、分析鉴别问题、解决问题 4、借鉴链接并评论 1、背景介绍 CIS库&#xff0c;绘制原理图很方便&#xff0c;但是需要在Cadence软件与数据库之间建立联系&#xff0c;但是一直不成功&#xff0c;花费半天时间才搞明白如何建立关系并…

[LeetCode] 2.两数相加

一、题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个…

Idea 对容器中的 Java 程序断点远程调试

第一种&#xff1a;简单粗暴型 直接在java程序中添加log.info()&#xff0c;根据需要打印信息然后打包覆盖&#xff0c;根据日志查看相关信息 第二种&#xff1a;远程调试 在IDEA右上角点击编辑配置设置相关参数在Dockerfile中加入 "-jar", "-agentlib:jdwp…

【Redis】安装(Linuxwindow)及Redis的常用命令

一&#xff0c;Redis简介 Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperloglogs等数…

Java通过cellstyle属性设置Excel单元格常用样式全面总结

最近做了一个导出Excel的功能&#xff0c;导出是个常规导出&#xff0c;但是拿来模板一看&#xff0c;有一些单元格的样式设置&#xff0c;包括合并&#xff0c;背景色&#xff0c;字体等等&#xff0c;毕竟不是常用的东西&#xff0c;需要查阅资料完成&#xff0c;但是搜遍全网…

Java21-虚拟线程小试牛刀-meethigher

其他语言&#xff0c;如Go早期就支持了叫做协程的东西&#xff0c;它是轻量化后的线程&#xff0c;而Java异步编程却只有线程的概念。JDK8以后的升级带来的改变总体感觉不大&#xff0c;不过这次JDK21带来的Virtual Thread还是值得体验一把的&#xff0c;可以说是YYDS&#xff…

【多线程】Lambda表达式

package org.example;public class TestLambda {public static void main(String[] args) {Like likenew Like();like.lambda();}}//定义一个函数式接口 interface ILike{void lambda(); }//实现类 class Like implements ILike{Overridepublic void lambda() {System.out.prin…

网络层重要协议 --- IP协议

小王学习录 今日摘录IP数据报数据报首部IPv4的局限及解决方法 地址管理路由选择扩展&#xff1a;NAT和NAPT的结合使用 今日摘录 关山难越&#xff0c;谁悲失路之人。萍水相逢&#xff0c;尽是他乡之客。 网络层的职责是地址管理和路由选择&#xff0c;在网络层中最重要的协议…