【转载】图解DRAM的结构原理

2024-08-22 01:58
文章标签 原理 图解 结构 转载 dram

本文主要是介绍【转载】图解DRAM的结构原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank

R.F.R.F. 發表於 2014年5月31日 09:00 2014-05-31 收藏此文

  •  

 

Bd23113ce5b92317e60fb01ffb8917bf bank、rank、channel這些關於記憶體的名詞是否已困繞許久,疑似了解卻又說不出個所以然來。就讓我們一步步拆解記憶體的面紗,從架構到讀寫方式逐步揭開記憶體的秘密。

揮發性記憶體分 2 種,SRAM 和 DRAM

RAM(Ramdom Access Memory)隨機存取記憶體,之所以稱作「隨機存取」,是因為相較於早期的線性儲存媒體(磁帶)而言,因為磁帶的存取是線性的,存取時間會依目前磁帶位置和欲存取位置的距離而定,需轉動磁帶至應有的位置,距離越長、轉得越久、存取時間也就越久。而 RAM 沒有這種煩惱,存取時間為固定值,不會因為資料在記憶體的位置而影響存取時間。

而 RAM 在電腦裡又可大致上分為 2 種:SRAM 和 DRAM,兩者的基礎原理差不多,都是將電荷儲存至內部,藉由改變不同的電荷儲存 0 或是 1。SRAM(Static Random Access Memory)靜態隨機存取記憶體和 DRAM(Dynamic Random Access Memory)有著幾點不同,SRAM 的結構較複雜、單位面積的容量較少、存取速度快,DRAM 則是構造簡單、單位面積內的容量較多、存取時間較 SRAM 慢,同時 DRAM 也因為構造較簡單的關係,儲存的電荷會隨著時間漸漸消失,因此需要有個再充電(Refresh)的動作保持電容儲存的資料。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲SRAM 單一位元儲存區的構造。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲DRAM 單一位元儲存區的構造。

由圖中 SRAM 和 DRAM 構造可得知,SRAM 採用正反器(flip-flop)構造儲存,DRAM 則是採用電容儲存。因為 SRAM 和 DRAM 種種的特性不同,SRAM 適合做為暫存器和 CPU 快取使用,DRAM 則是適合做為主記憶體或是其他裝置間的快取使用。

揮發與非揮發性記憶體

揮發性記憶體(Volatile Memory)和非揮發性記憶體(Non-Volatile Memory)之間的差異在於,斷電之後是否可保存內部資料,揮發性記憶體的資料會隨著失去電力供應而消失,而非揮發性記憶體依然可以保有內部資料。

揮發性記憶體包含了SRAM和DRAM,而非揮發性記憶體包含ROM(Read-Only Memory)和Flash Memory快閃記憶體。

主記憶體子系統

DRAM 由於製造簡單、高密度,作為電腦內部的主記憶體再適合不過了。但是由於主記憶體擺放在 CPU 之外,從工廠出來的晶粒需要封裝和組合之後才可和 CPU 連結,因此從 CPU 至 DRAM 晶粒之間依據層級由大至小為 channel>DIMM>rank>chip>bank>row/column,接下來就一一說明這些部分。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲主記憶體由大至小,由上往下可做這樣的拆分。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲主記憶體從 channel 至 chip 的相對應關係。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank

▲chip 往下拆分為 bank。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲bank 往下拆就是 1 個個的儲存單元,橫向 1 排稱之為 row,直向 1 排稱之為 column,每排 column 的下方都有個 row buffer,用以暫存讀出來的 row 排資料。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲單一 DRAM 晶片的內部功能區塊圖(圖片取自Micron)。

channel 和 DIMM

從記憶體控制器出來之後,最先遇到的就是 channel,每個 channel 需要配有 1 組記憶體控制器、2 個 channel 配置 2 組……以此類推。而每個 channel 中能夠擁有許多組 DIMM(Dual In-line Memory Module),DIMM 也就是目前消費者能夠在市場上買到的記憶體模組,因為多年前的主機板必須購買記憶體顆粒(chip)直接插在主機板上,而後發展出 SIMM(Single In-line Memory Module),將多組記憶體顆粒焊在 1 片電路板上,成為記憶體模組,再將此電路板插在主機板上。接著為了增加資料吞吐量,將 1 條記憶體模組的頻寬從 SIMM 的 32bit 改換成 DIMM 的 64bit,這設計依然沿用至今。

從記憶體顆粒過度到 SIMM 的時代,坊間出現了替使用者將記憶體顆粒焊到 SIMM 電路板上的服務,因為當時記憶體非常昂貴,花一些小錢就可以把記憶體延用至新的電腦上。

rank 和 chip

rank 指的是連結到同 1 個CS(Chip Select)的記憶體顆粒 chip,記憶體控制器能夠對同 1 rank 的 chip 進行讀寫操作,而在同 1 rank 的 chip 也分享同樣的控制訊號。以目前的電腦來說,因為 1 組 channel 的寬度為 64bit,所以能夠同時讀寫 8byte 的資料,如果是具有 ECC 功能的記憶體控制器和 ECC 記憶體模組,那麼 1 組 channel 的寬度就是 72bit。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲rank 1 和 rank 2 共享同組 address/comand 訊號線,利用 chip select 線選擇欲讀取或是寫入的那一組,之後將資料經由 MUX 多工器送出。

有些人會有錯誤觀念,以 chip 的數量或是以記憶體模組的單、雙面進行 rank 的判斷,但其實要以記憶體控制器和記憶體顆粒的規格進行判斷,目前家用 PC 的記憶體控制器通道絕大部分都是 64bit 寬,記憶體顆粒則是 8bit 寬,因此 8 顆並聯即可滿足記憶體控制器的需求,也就是 1 組 rank。但偶爾也有以 16bit 寬的記憶體顆粒製成的記憶體模組,此時 4 個 chip 就是 1 組 rank。

這在採用 Intel H61/H81 晶片組和傳統單channel的主機板時須特別注意,因為 Intel 限制 H61/H81 每個 channel 僅能支援 2 組 rank,而不是 4 組 rank,部分主機板每個 channel 又做了 2 組記憶體模組插槽,造成部分使用者同組 channel 放入 2 條記憶體模組時能夠辨識全部的記憶體容量(雙面單 rank 的記憶體模組),部分使用者則是僅能辨識一半的容量(雙面雙 rank 的記憶體模組)。

bank、row、column

bank 再往下分拆就是實際儲存位元的電路,一般來說橫向選擇排數的線路稱為 row(row enable、row select、word line),直向負責傳遞訊號的線路為column(bitline),每組 bank 的下方還會有個 row buffer(sense amplifier),負責將獨出的 row 資料暫存,等待 column 位址送到後輸出正確的位元,以及判斷儲存的資料是 0 還是 1。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
▲1 個 bank 的讀取操作。

圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank

▲1 個 bank 的寫入操作。

 

这篇关于【转载】图解DRAM的结构原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094914

相关文章

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente