分享

SRAM/SDRAM/DDR/Cache

 袁先森lemon 2021-11-17

参考:正点原子《I.MX6U 嵌入式 Linux 驱动开发指南

1、RAM 与 ROM

RAM随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR 等都是 RAM。RAM 一般用来保存程序数据、中间结果。

ROM只读存储器,断电信息不会丢失。从其制造工艺和功能上分,ROM有五种类型,即掩膜编程的只读存储器MROM(Mask-programmedROM)、可编程的只读存储器PROM(Programmable ROM)、可擦除可编程的只读存储器EPROM(Erasable Programmable ROM)、可电擦除可编程的只读存储器 EEPROM(Elecrically Erasable Programmable ROM)和快擦除读写存储器(Flash Memory)。

SRAM/SDRAM/DDR/Cache :

2. SRAM

        Static Random-Access Memory 静态随机存储器,这里的“静态” 意思是只要 SRAM 上电,里面的数据就会一直保存着,直到 SRAM 掉电。对于 RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式,这里就以 STM32F103/F407 开发板常用的 IS62WV51216 这颗 SRAM 芯片为例简单的讲解一下 SRAM,这是一颗 16 位宽(数据位为 16 位)、1MB 大小的 SRAM,芯片框图如图1所示:

2.1 地址线

        A0~A18是地址线,共19根地址线,可访问的地址大小是 2^19=524288=512KB。不是说 IS62WV51216 是个 1MB 的 SRAM 吗?为什么地址空间只有512KB?前面我们说了 IS62WV51216 是 16 位宽的,也就是一次访问 2 个字节,因此需要对512KB 进行乘 2 处理,得到 512KB*2=1MB。位宽的话一般有 8 位/16 位/32 位,根据实际需求选择即可,一般都是根据处理器的 SRAM 控制器位宽来选择 SRAM 位宽。 

2.2 数据线

        根据 SRAM 位宽的不同,数据线的数量要不同,8 位宽就有 8根数据线,16 位宽就有 16 根数据线,32 位宽就有 32 根数据线。IS62WV51216 是一个 16 位宽的 SRAM,因此就有 16 根数据线,一次访问可以访问 16bit 的数据,也就是 2 个字节。因此就有高字节和低字节数据之分,其中 IO0~IO7 是低字节数据,IO8~IO15 是高字节数据。

2.3 控制线

        SRAM 要工作还需要一堆的控制线,CS2 和 CS1 是片选信号,低电平有效,在一个系统中可能会有多片 SRAM(目的是为了扩展 SRAM 大小或位宽),这个时候就需要 CS 信号来选择当前使用哪片 SRAM。另外,有的 SRAM 内部其实是由两片 SRAM 拼接起来的,因此就会提供两个片选信号。

        OE 是输出使能信号,低电平有效,也就是主控从 SRAM 读取数据。

        WE 是写使能信号,低电平有效,也就是主控向 SRAM 写数据。

        UB 和 LB 信号,前面我们已经说了,IS62WV51216 是个 16 位宽的 SRAM,分为高字节和低字节,那么如何来控制读取高字节数据还是低字节数据呢?这个就是 UB 和 LB 这两个控制线的作用,这两根控制线都是低电平有效。UB 为低电平的话表示访问高字节,LB 为低电平的话表示访问低字节。那么 SRAM 有什么缺点没有?SRAM 最大的缺点就是成本高。

        SRAM 突出的特点就是无需刷新(SDRAM 需要刷新),读写速度快!所以 SRAM通常作为 SOC 的内部 RAM 使用或 Cache 使用,比如 STM32 内存的 RAM 或 I.MX6U 内部的 OCRAM 都是 SRAM。

3. SDRAM

        SDRAM 全称是 Synchronous Dynamic Random Access Memory,翻译过来就是同步动态随机存储器,“同步”的意思是 SDRAM 工作需要时钟线,“动态”的意思是 SDRAM 中的数据需要不断的刷新来保证数据不会丢失,“随机”的意思就是可以读写任意地址的数据。与 SRAM 相比,SDRAM 集成度高、功耗低、成本低、适合做大容量存储,但是需要定时刷新来保证数据不会丢失。因此 SDRAM 适合用来做内存条,SRAM 适合做高速缓存或 MCU内部的 RAM。SDRAM 目前已经发展到了第四代,分别为:SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM。STM32F429/F767/H743 等芯片支持 SDRAM,以 STM32 开发板最常用的华邦 W9825G6KH 为例,W9825G6KH 是一款 16 位宽(数据位为 16 位)、32MB 的 SDRAM、速度一般为 133MHz、166MHz 或 200MHz。W9825G6KH 框图如图2所示:

 

3.1 控制线

        SDRAM 也需要很多控制线,我们依次来看一下:

        CLK:时钟线,SDRAM 是同步动态随机存储器,“同步”的意思就是时钟,因此需要一根额外的时钟线,这是和 SRAM 最大的不同,SRAM 没有时钟线

        CKE:时钟使能信号线,SRAM 没有 CKE 信号。

        CS:片选信号,这个和 SRAM 一样,都有片选信号。

        RAS:行选通信号,低电平有效,SDRAM 和 SRAM 的寻址方式不同,SDRAM 按照行、列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行?哪一列?RAS 是行选通信号,表示要发送行地址,行地址和列地址访问方式如图3所示:

        CAS:列选通信号,和 RAS 类似,低电平有效,选中以后就可以发送列地址了。

        WE:写使能信号,低电平有效。

3.2 A10 地址线

        A10 是地址线,那么这里为什么要单独将 A10 地址线给提出来呢?因为 A10 地址线还有另外一个作用,A10 还控制着 Auto-precharge,也就是预充电。SDRAM芯片内部会分为多个 BANK。SDRAM 在读写完成以后,如果要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般 SDSRAM 都支持自动预充电的功能。

3.3 地址线

        对于 W9825G6KH 来说一共有 A0~A12,共 13 根地址线,但是我们前面说了 SDRAM 寻址是按照行地址和列地址来访问的,因此这 A0~A12 包含了行地址和列地址。不同的 SDRAM 芯片,根据其位宽、容量等的不同,行列地址数是不同的,这个在 SDRAM 的数据手册里面会也清楚的。比如 W9825G6KH 的 A0~A8 是列地址,一共 9 位列地址,A0~A12 是行地址,一共 13位,因此可寻址范围为:2^9*2^13=4194304B=4MB,W9825G6KH 为 16 位宽(2 个字节),因此还需要对 4MB 进行乘 2 处理,得到 4*2=8MB,但是 W9825G6KH 是一个 32MB 的 SDRAM 啊,为什么算出来只有 8MB,仅仅为实际容量的 1/4。这个就是我们接下来要讲的 BANK,8MB 只是一个 BANK 的容量,W9825G6KH 一共有 4 个 BANK。

3.4 BANK 选择线

        BS0 和 BS1 是 BANK 选择信号线,在一片 SDRAM 中因为技术、成本等原因,不可能做一个全容量的 BANK。而且,因为 SDRAM 的工作原理,单一的 BANK 会带来严重的寻址冲突,减低内存访问效率。为此,人们在一片 SDRAM 中分割出多块 BANK,一般都是 2 的 n 次方,比如 2,4,8 等。每个 SDRAM数据手册里面都会写清楚自己是几 BANK。前面我们已经计算出来了一个 BANK 的大小为 8MB,那么四个 BANK 的总容量就是 8MB*4=32MB。 既然有4个BANK,那么在访问的时候就需要告诉SDRAM,我们现在需要访问哪个BANK,BS0 和 BS1 就是为此而生的,4 个 BANK 刚好 2 根线,如果是 8 个 BANK 的话就需要三根线,也就是 BS0~BS2。BS0、BS1 这两个线也是 SRAM 所没有的。

3.5 BANK 区域

        关于 BANK 的概念前面已经讲过了,这部分就是 W9825G6KH 的 4 个 BANK 区域。这个概念也是 SRAM 所没有的。

3.6 数据线

        W9825G6KH 是 16 位宽的 SDRAM,因此有 16 根数据线,DQ0~DQ15,不同的位宽其数据线数量不同,这个和 SRAM 是一样的。

3.7 高低字节选择

        W9825G6KH 是一个 16 位的 SDRAM,因此就分为低字节数据和高字节数据,LDQM 和 UDQM 就是低字节和高字节选择信号,这个也和 SRAM 一样。

4. DDR

        DDR 内存是 SDRAM 的升级版本,SDRAM 分为 SDR SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM。DDR 本质上还是SDRAM。DDR 全称是 Double Data Rate SDRAM,也就是双倍速率 SDRAM,DDR 的速率(数据传输速率)比 SDRAM 高 1 倍!这 1 倍的速度不是简简单单的将 CLK 提高 1 倍,SDRAM 在一个 CLK 周期传输一次数据,DDR 在一个 CLK 周期传输两次数据,也就是在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于 DDR 的预取为 2bit,因此DDR 的速度直接加倍!比如 SDRAM 速度一般是 133~200MHz,对应的传输速度就是133~200MT/s,在描述 DDR 速度的时候一般都使用 MT/s,也就是每秒多少兆次数据传输。133MT/S 就是每秒 133M 次数据传输,MT/s 描述的是单位时间内传输速率。同样 133~200MHz的频率,DDR 的传输速度就变为了 266~400MT/S,所以大家常说的 DDR266、DDR400 就是这么来的。

        DDR2 的 IO 时钟是 DDR 的 2 倍,因此 DDR 内核时钟依旧是 133~200MHz 的时候,总线速度就是 266~400MHz。而且 DDR2 在 DDR 基础上进一步增加预取(prefetch),增加到了4bit,相当于比 DDR 多读取一倍的数据,因此 DDR2 的数据传输速率就是 533~800MT/s,这个也就是大家常说的 DDR2 533、DDR2 800。当然了,DDR2 还有其他速度,这里只是说最常见的几种。

        DDR3 在 DDR2 的基础上将预取(prefetch)提高到 8bit,因此又获得了比 DDR2 高一倍的传输速率,因此在总线时钟同样为 266~400MHz 的情况下,DDR3 的传输速率就是 1066~1600MT/S。

        LPDDR3、DDR3 和 DDR3L 的区别,这三个都是 DDR3,但是区别主要在于工作电压,LPDDR3叫做低功耗 DDR3,工作电压为 1.2V。DDR3 叫做标压 DDR3,工作电压为 1.5V,一般台式内存条都是 DDR3。DDR3L 是低压 DDR3,工作电压为 1.35V,一般手机、嵌入式、笔记本等都使用 DDR3L。

        DDR3L 结构框图如图4所示(这里用镁光 MT41K256M16 数据手册里面的结构框图):

        从图4可以看出,DDR3L 和 SDRAM 对的结构框图很类似,但是还是有点区别。

4.1 控制线

        ODT:片上终端使能,ODT 使能和禁止片内终端电阻。

        ZQ:输出驱动校准的外部参考引脚,此引脚应该外接一个 240 欧的电阻到 VSSQ 上,一般就是直接接地了。

        RESET:复位引脚,低电平有效。

        CKE:时钟使能引脚。

        A12:A12 是地址引脚,但是有也有另外一个功能,因此也叫做 BC 引脚,A12 会在 READ和 WRITE 命令期间被采样,以决定 burst chop 是否会被执行。

        CK 和 CK#时钟信号,DDR3 的时钟线是差分时钟线,所有的控制和地址信号都会在 CK对的上升沿和 CK#的下降沿交叉处被采集。

        CS#:片选信号,低电平有效。

        RAS#、CAS#WE#:行选通信号、列选通信号和写使能信号。

4.2 地址线

        A[14:0]为地址线,A0~A14,一共 15 根地址线,根据 NT5CC256M16ER-EK 的数据手册可知,列地址为 A0~A9,共 10 根,行地址为 A0~A14,共 15 根,因此一个 BANK 的大小就是 2^10*2^15*2=32MB*2=64MB,根据图 23.1.4.2 可知一共有 8 个 BANK,因此 DDR3L 的容量就是 64*8=512MB。

4.3 BANK 选择线

        一片 DDR3 有 8 个 BANK,因此需要 3 个线才能实现 8 个 BANK 的选择,BA0~BA2 就是用于完成 BANK 选择的。

4.4 BANK 区域

        DDR3 一般都是 8 个 BANK 区域。

4.5 数据线

        因为是 16 位宽的,因此有 16 根数据线,分别为 DQ0~DQ15。

4.6 数据选通引脚

        DQS 和 DQS#是数据选通引脚,为差分信号,读的时候是输出,写的时候是输入。LDQS(有的叫做 DQSL)和 LDQS#(有的叫做 DQSL#)对应低字节,也就是 DQ0~7,UDQS(有的叫做 DQSU) 和 UDQS#(有的叫做 DQSU#),对应高字节,也就是 DQ8~15。

4.7 数据输入屏蔽引脚

        DM 是写数据收入屏蔽引脚。关于 DDR3L 的框图就讲解到这里,想要详细的了解 DDR3 的组成,请阅读相应对的数据手册。

5. DDR3 关键时间参数

        大家在购买 DDR3 内存的时候通常会重点观察几个常用的时间参数:

5.1 传输速率

        比如 1066MT/S、1600MT/S、1866MT/S 等,这个是首要考虑的,因为这个决定了 DDR3 内存的最高传输速率。

5.2 tRCD 参数

        tRCD 全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。DDR 的寻址流程是先指定 BANK 地址,然后在指定行地址,最后指定列地址确定最终要寻址的单元。BANK 地址和行地址是同时发出的,这个命令叫做“行激活”(Row Active)。行激活以后就发送列地址和具体的操作命令(读还是写),这两个是同时发出的,因此一般也用“读/写命令”表示列寻址。在行有效(行激活)到读写命令发出的这段时间间隔叫做 tRCD,如图5所示:

         一 般 DDR3 数 据 手 册 中 都 会 给 出 tRCD 的 时 间 值 , 比 如 正 点 原 子 所 使 用 的 NT5CC256M16EP-EK 这个 DDR3,tRCD 参数如图6所示:

        从图6可以看出,tRCD 为 13.91ns,这个我们在初始化 DDR3 的时候需要配置。

        有时候大家也会看到“13-13-13”之类的参数,这个是用来描述 CL-tRCD-TRP 的,如图7所示:

        

        从图7可以看出,NT5CC256M16ER-EK 这个 DDR3 的 CL-TRCD-TRP 时间参数为“13-13-13”。因此 tRCD=13,这里的 13 不是 ns 数,而是 CLK 时间数,表示 13 个 CLK 周期。

5.3 CL 参数

        当列地址发出以后就会触发数据传输,但是数据从存储单元到内存芯片 IO 接口上还需要一段时间,这段时间就是非常著名的 CL(CAS Latency),也就是列地址选通潜伏期,如图8所示:

 

        CL 参数一般在 DDR3 的数据手册中可以找到,比如 NT5CC256M16EP-EK 的 CL 值就是 13个时钟周期,一般 tRCD 和 CL 大小一样。

5.4 AL 参数

        在 DDR 的发展中,提出了一个前置 CAS 的概念,目的是为了解决 DDR 中的指令冲突,它允许 CAS 信号紧随着 RAS 发送,相当于将 DDR 中的 CAS 前置了。但是读/写操作并没有因此提前,依旧要保证足够的延迟/潜伏期,为此引入了 AL(Additive Latency),单位也是时钟周期数。AL+CL 组成了 RL(Read Latency),从 DDR2 开始还引入了写潜伏期 WL(Write Latency),WL 表示写命令发出以后到第一笔数据写入的潜伏期。引入 AL 以后的读时序如图9所示:

        图9就是镁光 DDR3L 的读时序图,我们依次来看一下图中这四部分都是什么内容:

        ①、tRCD:行寻址到列寻址之间的延迟

        ②、AL:解决 DDR 中指令冲突的延迟/潜伏期

        ③、CL:列地址选通潜伏期

        ④、RL 为读潜伏期,RL=AL+CL。

5.5 tRC 参数

        tRC 是两个 ACTIVE 命令,或者 ACTIVE 命令到 REFRESH 命令之间的周期,DDR3L 数据手册会给出这个值,比如 NT5CC256M16EP-EK 的 tRC 值为 47.91ns,参考图6。

5.6 tRAS 参数

        tRAS 是 ACTIVE 命令到 PRECHARGE 命令之间的最小时间,DDR3L 的数据手册同样也会给出此参数,NT5CC256M16EP-EK 的 tRAS 值为 34ns,参考图6。

6.Cache:

         高速缓冲存储器,位于CPU主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。CPU的速度远高于内存,这样CPU会经常处于等待的状态,造成了资源的浪费。Cache就是为了解决这个问题而诞生的。当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率。

        Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上。一级缓存与CPU信息交换的速度是最快的,但容量较小。大多数主板上也集成了Cache,一般被称作二级缓存或外置Cache,比内置Cache容量大一些,一般可达到256KB。如果CPU已经集成了一级缓存和二级缓存,那主板上的Cache就只能称作三级缓存。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多