Memory SystemsCache, DRAM, Disk翻译学习DRAM部分(一)

缘由

       做SOC DDR集成一段时间了,有幸接触了DDR4和LPDDR4,后面项目可能是LPDDR5。一般只看官方协议和第三方文档。对于我现在的工作,感觉看这些足够了。最近项目结束,跟公司小伙伴分享DDR知识的时候,才发现好多地方,我仅仅记住了结论,没有深究。机缘巧合下发现了这本memory的电子书;打算周末空余时间翻译学习一下;更加深入了解一下DRAM。再立一个flag,cache有机会也翻译翻译。感觉书写的不错。

开始啦!

                          It’s the Memory, Stupid!

7 Overview of DRAMs

7.1DRAM的结构和基础知识

        一个随机存取存储器(RAM)使用一个单一的晶体管-电容对每一个位数据进行储存,那么称这个RAM为动态随机存取存储器或DRAM。图7.3在右下角显示用于DRAM中的存储单元的电路。

       这个电路是动态的,因为存储电子的电容器不是完美的器件,它们会逐渐漏电,因此为了保留在其中存储的信息,DRAM中的每个电容器必须定期刷新(即读取和重写)。
       每个DRAM芯片包含一个或多个内存阵列,这些内存阵列是矩形的储存单元网格,每个单元可以存储一个数据位。由于这些阵列是矩形网格,可以将它们与典型的网格结构相关联。一个很好的例子是曼哈顿式的街道布局,大道是从北到南,街道是从东到西。当在这样的城市中需要指定一个会面地点时,只需指定一条街道和一条大道的交叉口,位置就能明确无误地指定出来。
       内存阵列的组织方式与曼哈顿的街道和大道类似,只不过内存阵列是按行和列组织的。图7.3中显示了一个带有行和列标识的DRAM芯片的内存阵列。通过确定行和列的交点(通过向DRAM指定行地址和列地址),内存控制器可以访问DRAM芯片内部的单个存储单元,以读取或写入其中存储的数据。
FIGURE 7.3: DRAM内部的基本组织结构。DRAM内存阵列是一个储存单元的网格,每个储存单元存储一个数据位,位于行和列的交汇处。
       对DRAM的一种特征化方式是通过其内部的内存阵列数量来实现的。内存芯片内部的内存阵列可以以多种不同的方式工作。它们可以协同工作,可以完全独立工作,或者可以以介于其他两种方式之间的方式工作。如果内存阵列被设计成协同工作,它们将作为一个单元运行,每当内存控制器访问DRAM时,内存芯片通常传输或接收与内存阵列数量相等的位数。例如,在简单的组织中,一个x4 DRAM(读作“by four”)表示DRAM至少有四个内存阵列,并且列宽为4位(每次读取或写入列时传输4位数据)。
       在x4 DRAM部件中,有四个阵列,每个阵列同时读取一个数据位,当内存控制器发出列读取请求时,该部件每次发送4位数据。同样,x8 DRAM表示该DRAM至少有八个内存阵列,并且列宽为8位。图7.4展示了x2、x4和x8 DRAM的内部组织结构。在过去的两十年中,更宽的输出DRAM已经出现,x16和x32部件现在常见,主要用于高性能应用。
       请注意,图7.4中的 每个DRAM示意图代表了多个阵列,但只有一个单独的"bank"(内存块)。每组独立运行而不受其他组影响的内存阵列集合被称为一个"bank",而不是一个"array"。每个"bank"都是独立的,只有少数限制,它可以在其他"bank"(在同一DRAM设备上或在其他DRAM设备上)被激活、预充电、读取等的同时进行操作。使用多个独立的内存"bank"自DRAM问世以来一直是计算机设计的常见做法。特别是, 交错多个内存"bank"一直是一种用来利用低带宽设备实现高带宽内存总线的常见方法。在交错内存系统中,数据总线使用比任何一个DRAM"bank"支持的频率更快;控制电路在多个"bank"之间切换以实现这种数据速率。例如,如果一个DRAM"bank"每10纳秒可以产生一个新的数据块,那么可以在两个"bank"之间来回切换以每5纳秒生成一个新的数据块,或者在四个"bank"之间轮流切换以每2.5纳秒生成一个新的数据块,从而有效地将任何一个"bank"可实现的数据速率翻倍或增加四倍。这项技术至少可以追溯到20世纪60年代中期,当时它被用于当时两台性能最高(事实证明也是最有文档记录的)的计算机:IBM System/360 Model 91 [Anderson et al. 1967] 和Seymour Cray的Control Data 6600 [Thornton 1970]。
       
       
FIGURE 7.4: 宽数据输出的DRAM的逻辑组织。如果DRAM一次输出多于一个位,其内部组织结构通常由多个阵列组成,每个阵列向总数据输出提供一个位的数据。
理解:上图这样的多个memory array组成一个bank。一个bank中memory array的个数对应颗粒的位宽
        因为一个系统可以拥有多个DIMM模块,每个DIMM模块可以被视为一个独立的"bank"(内存块),而每个DIMM模块上的DRAM设备可以在内部实现多个独立的"bank",因此引入了"rank"这个词来区分DIMM级别的独立操作与内部"bank"级别的独立操作。图7.5说明了现代DRAM系统中的各种组织层次。一个系统可能由许多独立的DIMM模块组成。每个DIMM模块可以包含一个或多个独立的"rank"。每个"rank"是一组DRAM设备,它们可以协同工作,而在内部,每个这些DRAM设备实现了一个或多个独立的"bank"。最后,每个"bank"由从属的内存阵列组成,阵列的数量等于DRAM部件的数据宽度(即,一个x4部件每个"bank"有四个从属阵列)。在"rank"和"bank"级别具有并发性可以通过流水线请求来提供带宽。在"rank"级别和"bank"级别同时有多个DRAM设备协同工作,以及在"bank"级别有多个阵列协同工作,可以提供并行访问的带宽。
理解:bank和rank其实都是为了提高带宽效率存在。其思想就是可以并行操作,减少等待的时间。不同的是:bank是针对颗粒内部级别的并行操作;而rank表示更大层次的并行,表示DIMM层次的并行,比如先对rank0进行操作,然后紧接着对rank1进行操作,然后rank0准备好,发送或者接受数据,发送完后,rank1也准备好了,再发送rank1的。
FIGURE 7.5: DIMMs,rank,bank和array。一个系统可能拥有许多DIMM模块,每个DIMM模块可以包含一个或多个rank。每个rank是一组联动的DRAM设备,每个DRAM设备可能拥有多个bank。每个bank可能有多个组成阵列,具体取决于部件的数据宽度。
       JEDEC风格的内存总线组织根据其功能和组织被分类为 数据总线、地址总线、控制总线和芯片选择总线。图7.6展示了一个示例布局,其中显示了一个内存控制器连接到两个内存模块。
(1)传输数据到和从DRAM的数据总线相对较宽。它通常是64位宽,而在高性能系统中它可以更宽。
(2)专用的地址总线用于传输行地址和列地址到DRAM,其宽度随DRAM设备的物理存储而增长(当前典型的宽度约为15位)。
(3)控制总线由行和列 strobes、输出使能、时钟、时钟使能和其他相关信号组成。这些信号与地址总线信号类似,它们都从内存控制器连接到系统中的每个DRAM。
(4)最后,还有一个芯片选择网络,它从内存控制器连接到一个rank(一组可以单独寻址的DRAM设备)中的每个DRAM。例如,一个内存模块可以包含两个rank的DRAM设备;对于系统中的每个DIMM,可以有两个单独的芯片选择网络,因此芯片选择“总线”的大小随着系统中物理内存的最大容量而扩展。
      最后一个总线,即芯片选择总线,在JEDEC风格的内存系统中至关重要,因为它允许内存请求的预期接收者。在请求(例如读取或写入)时,芯片选择总线上会发出一个值。芯片选择总线包含系统中每个DRAM rank的独立线路。芯片选择信号通过与每组小型DRAM独特的线路传输,启用或禁用该rank中的DRAM,以便它们分别处理当前总线上的请求或忽略当前总线上的请求。因此,只有请求发送到的那些DRAM会处理该请求。尽管系统中的所有DRAM都连接到相同的地址和控制总线, 理论上都可以同时对同一个请求做出响应,但芯片选择总线可以防止这种情况发生.
理解:对于DDR中的CS片选信号,是用于选择哪个rank是打开的,允许访问;哪个rank是关闭的不允许访问。
FIGURE 7.6: JEDEC风格的内存总线组织。图示展示了一个内存控制器和两个内存模块的系统,其中包括一个16位数据总线和一个8位地址和命令总线。
        图7.7着重关注微处理器、内存控制器和DRAM设备,并说明了DRAM请求涉及的步骤。如前所述,DRAM设备通过内存控制器间接连接到微处理器;微处理器通过某种形式的网络(总线、点对点、交换机等)连接到内存控制器;而内存控制器通过另一个网络(总线、点对点等)连接到DRAM。内存控制器充当微处理器和DRAM之间的联络人,使微处理器不需要了解DRAM操作的细节。微处理器向内存控制器提出请求,由内存控制器满足这些请求。微处理器可以同时连接到潜在的多个内存控制器;或者,多个微处理器可以连接到同一个内存控制器。图中展示了最简单的情况(单处理器系统)。内存控制器可以同时连接到潜在的多个DRAM设备。特别地,DIMMs是消费者购买DRAM最常见的物理形式,它们是小型PCB板,上面有一些DRAM设备。内存控制器通常连接至少一个DIMM,因此可以同时连接多个DRAM设备。
      图7.7还说明了典型DRAM读取操作的步骤。在对请求进行排序和排队之后,微处理器将特定的请求发送到内存控制器。一旦请求到达内存控制器,它将被排队等待,直到DRAM准备就绪,并处理了所有之前的和/或更高优先级的请求。与SRAM相比,内存控制器与DRAM的接口相对复杂;行地址 strobe (RAS) 和列地址 strobe (CAS) 组件在图7.8中显示了详细信息。
      回顾一下图7.3,电容位于字线和位线的交汇处;它通过由字线控制的晶体管连接到位线。晶体管是一个开关,当字线上的电压升高时,连接到该字线的所有晶体管都会成为关闭的开关(打开),将它们各自的电容器连接到相关的位线。
       字线和位线的交汇处的电容器非常小,相对于位线的物理特性,它们容纳的电子数量微不足道。因此,当这些电容器连接到它们相关的位线时,需要使用称为感测放大器的特殊电路来检测存储在电容器上的值。感测放大器首先将位线预充电到在逻辑电平0和逻辑电平1之间的电压水平。当稍后电容器通过晶体管连接到位线时,电容器会在位线上稍微改变电压水平。感测放大器检测到微小的变化并将位线电压拉到逻辑电平0或1。将位线上的电压完全升高或完全降低,与在高和低之间的预充电状态相反,实际上会在晶体管保持打开状态的情况下重新充电电容器。
       回到处理读取请求的步骤。内存控制器必须将提供的数据地址分解为几个组件,以标识内存系统内适当的rank、该rank内的bank,以及在标识的bank内的行和列。用于标识行和列的组件称为行地址和列地址。通常,bank标识符是一个或多个地址位。rank编号最终导致一个芯片选择信号通过其中一个独立的芯片选择线路之一发送出去。
       一旦确定了rank、bank和row,必须对适当bank内的位线进行预充电(precharge)(设置为逻辑电平在0和1之间的中间状态)。
        一旦适当的bank已经被预充电,第二步就是通过设置芯片选择信号来激活所需的bank中的适当行和bank标识符,并通过地址总线发送行地址和bank标识符,以及信号化DRAM的 RAS引脚(行地址 strobe——表示信号在低电平时处于活动状态)。这告诉DRAM将一整行数据(数千位)发送到DRAM的感测放大器中(这些电路用于检测和放大由行内存储单元中的电荷表示的微小逻辑信号)。这通常需要几十纳秒的时间,而且这一步骤可能已经完成(行或页面可能已经打开或激活,这意味着感测放大器中可能已经有有效数据)。
理解:(1)precharge是对一个bank进行precharge的;而不是对一个bank的一行。
           (2)RAS和CAS都是低电平有效的
       一旦感测放大器恢复了数值,并且位线被拉到适当的逻辑电平,内存控制器执行最后一步,即通过设置芯片选择信号来激活所需的bank中的DRAM组,通过地址总线发送列地址和bank标识符,并发出DRAM的CAS引脚信号(列地址 strobe——与RAS类似,条上的符号表示信号在低电平时处于活动状态)。这将导致感测放大器中的仅选择位连接到输出驱动器,然后它们将被驱动到数据总线上。读取列数据需要大约数十纳秒的时间。当内存控制器接收到数据后,它将数据转发给微处理器。
       将地址分两个不同步骤传输的过程(即分开传输行地址和列地址)与SRAM不同。最初,DRAM的I/O引脚数量很少,因为制造成本主要受到封装中I/O引脚数量的限制。这种限制I/O引脚数量的愿望对DRAM体系结构产生了长期影响;大多数DRAM的地址引脚仍然是复用的, 这意味着数据地址的两个不同部分在不同的时间通过相同的引脚发送,而不是使用更多的地址引脚并一次性发送整个地址。
理解:比如所LPDDR就是CA引脚少,命令多周期表示
FIGURE 7.7: 系统组织和DRAM读取的步骤。从DRAM读取数据并不像从SRAM(静态随机存取存储器)那样简单,在其中的若干阶段请求可能会被阻塞。
FIGURE 7.8: 多阶段DRAM访问协议。行访问将DRAM页面加载到位线上,以供感测放大器检测。列地址将DRAM页面的子集加载到总线上(例如,4位数据)。
      大多数计算机系统都具有类似于心跳的特殊信号,称为时钟。时钟传输一个连续的信号,具有定期的“高”和“低”值。通常,它被表示为方波或半方波,每个周期都与下一个相同,如图7.9所示。方波的上升部分称为时钟的正边沿或上升沿,下降部分称为时钟的负边沿或下降沿。计算机系统中的主要时钟称为系统时钟或全局时钟,通常位于主板上(包含微处理器和内存总线的PCB)。系统时钟驱动微处理器、内存控制器以及许多相关的外围设备。
      如果时钟直接驱动DRAM,那么DRAM被称为同步DRAM。如果时钟不直接驱动DRAM,那么DRAM被称为异步DRAM。
       在同步DRAM中,DRAM内部的步骤与时钟的一个或多个边沿同步进行。
       在异步DRAM中,DRAM内部的操作步骤在内存控制器命令DRAM执行时发生,并且这些命令通常与系统时钟的一个或多个边沿同步进行。
理解:DDR是同步DRAM,所以DDR的工作是跟着时钟边沿进行的
FIGURE 7.9:时钟信号的示例。时钟通常被表示为方波(底部)或近似方波(顶部)。它们会无限重复,而重复的形状称为时钟周期。上面显示的这两个时钟具有相同的频率,即在给定时间周期内的周期数相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哈哈黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值