---
# System prepended metadata

title: 記憶體 Memory
tags: [Technology]

---

# 記憶體 Memory
###### tags: `Technology`

## 分類
![](https://i.imgur.com/zyDUxOI.png)

* **Random Access Memory (RAM)** - 當記憶體中的訊息被讀取或寫入時，所需要的時間與這段資訊所在的位置無關，也就是說可以不用按照位址的順序，而**隨機指定記憶體位址**來讀取或寫入資料。
    * DRAM
    * SRAM
* **Direct-access data storage** - 讀寫記憶體的時間跟這Physical location有關係，所以讀寫速度會受到media rotation speed或arm movement限制
    * Hard disks
    * CD-RWs
    * DVD-RWs
    * Other older magnetic tapes and drum memory
* 揮發性
    * **Volatile**: 電源關閉時，無法保存資料
        * DRAM
        * SRAM
    * **Non-volatile**: 電源關閉時，可以保存資料
        * ROM
        * Flash

### DRAM(Dynamic RAM)
* 利用**電容**來儲存資料的，也就是藉由判斷電容內的電量多寡來區別0和1，不過在現實中往往會發生**漏電**的現象，屬於揮發性記憶體(volatile memory)
* 一旦時間久了，資料就有可能會消失，因此需要**週期性的充電**，此週期性充電又稱為**重新整理(refresh)**，因此較為耗電。
* 結構
    * 把一個 DRAM 晶片的內部結構剖開看看，會看到一個**儲存陣列（Memorry Array）**。CPU 會給這個儲存陣列「行地址」和「列地址」，就可以選出一個「儲存單元」。
    ![](https://i.imgur.com/tUlqSrL.png)
    * 每一個位元的資料通常都只需 **一個電容跟一個電晶體 (1 Transistor 1 Capacitor, 1T1C)** 來處理，電晶體在這裡的功用是用來控制讀取以及寫入，並不像其他種類的記憶體，是用來代表0與1的，在DRAM中，真正代表0與1的就是電容
    * 資訊存取時由**字元線(Word Line, WL)** 來控制電晶體開關，而**位元線(Bit Line, BL)** 則負責電荷的判讀和電容的充電。
    * 漏電 (leakage)
    ![](https://i.imgur.com/USem7nR.png)
        * 電容的電會從substrate漏掉導致電壓下降，因此需要定期refresh，根據JEDEC standard，每64ms要充電一次
        ![](https://i.imgur.com/Zy0iYba.png)
        * Refresh是一列一列(WL)refresh
* 相比之下在SRAM上一個位元通常需要六個電晶體。正因這緣故，DRAM擁有非常高的密度，**單位體積的容量較高因此成本較低**。
* 缺點為存取速度較SRAM慢
* Write speed = Read speed
* **CMOS晶片**
    * 用於記錄主機板上面的重要參數的一塊可讀寫的**RAM晶片**
    * 電腦主板一般專門配有CMOS**電池**為其供電。
    * 主要包括系統時間、CPU電壓與頻率、各項設備的I/O位址與IRQ等
* 由於主記憶體擺放在 CPU 之外，從工廠出來的晶粒需要封裝和組合之後才可和 CPU 連結，因此從 CPU 至 DRAM 晶粒之間依據層級由大至小為 **channel＞DIMM＞rank＞chip＞bank＞row/column**
    * ![](https://i.imgur.com/NxLXcRA.png)
    * channel 和 DIMM
        * 每個 channel 需要配有 1 組記憶體控制器 (DRAMC)
        * 每個 channel 中能夠擁有許多組 DIMM（Dual In-line Memory Module），**DIMM 也就是目前消費者能夠在市場上買到的記憶體模組**
        * 早期發展出 SIMM（Single In-line Memory Module），將多組記憶體顆粒焊在 1 片電路板上，成為記憶體模組，再將此電路板插在主機板上。接著為了增加資料吞吐量，將 1 條記憶體模組的頻寬從 SIMM 的 32bit 改換成 DIMM 的 **64bit**
    * rank 和 chip
    ![](https://i.imgur.com/j4RsfuT.png)
    * bank、row、column
    ![](https://i.imgur.com/VrMQQdG.png)
    ![](https://i.imgur.com/sJtQmTH.png)
        * bank 再往下分拆就是實際儲存位元的電路，一般來說橫向選擇排數的線路稱為 row（row enable、row select、word line），直向負責傳遞訊號的線路為column（bitline）bank 再往下分拆就是實際儲存位元的電路，一般來說橫向選擇排數的線路稱為 row（row enable、row select、word line），直向負責傳遞訊號的線路為column（bitline）
* 電腦常講的記憶體通常就是DRAM
    * 容量: 4GB、8GB、16GB、32GB
    * 世代
      ![](https://i.imgur.com/Ec5SO8v.png)
        * JEDEC(Joint Electron Device Engineering Council): 記憶體標準的主體制定組織
        * DDR SDRAM (Double Data Rate SDRAM)
        * 目前較為常見的就是DDR3、DDR4，兩者插槽pin腳不一樣，因此購買時要看主機板是支援哪一種
        * DDR3
            * 電壓: 1.5V
            * DR3-1066, DDR3-1333, DDR3-1600, DDR3-1866, DDR3-2133
        * DDR4
            * 電壓: 1.2V (比DDR3更低)
            * DDR4-2133 (最低)、DDR4-2400, 2666, 2800, 2933, 3000, 3200...
    * 尺寸
        * **DIMM（Dual In Line Memory Module）** :是一般桌電所使用的記憶體尺寸
        * **SO-DIMM（Small Outline DIMM）** :則是用於筆記型電腦的記憶體尺寸，它的尺寸比 DIMM 還要短很多。
        ![](https://i.imgur.com/QkyvxBj.png)
    * 頻率
        * DDR3-1600: 後面這個數字代表每秒的傳輸次數（megatransfers），單位是 MT/s，這個值大家也時常視為記憶體的時脈（clock rate），單位是 MHz，換算成傳輸速率就是 64 bits * 1600 MHz / 8 = 12800 MB/s。
    * 延遲時間（CAS latency，CL 值）
        * 電腦要讀取記憶體的資料時，需要等待多久之後才能真正開始讀取
        * 有些記憶體會標示它的延遲時間，其內容是一連串的數字，例如 9-10-9-27，第一個數字就是記憶體的延遲時間，單位是時脈週期。
        * 以DDR3-533為例，CL 值是7個時脈週期的話，換算出來就是 1/533000000 * 7 = 13.09 ns。
    * 主機板記憶體插槽
        * 通常這種很多記憶體插槽的主機板，它的記憶體插槽應該都會有不同的顏色，最簡單的做法就是選同一種顏色插，並且分散在不同的記憶體通道
        ![](https://i.imgur.com/NzasE0e.png)
    * 通道
        * 有單通道、雙通道 (Dual-Channel)、三通道、多通道記憶體
        * 將多個記憶體由串聯方式改良為並聯方式，以得到更大的頻寬
        ![Uploading file..._68nm8q1at]()

* SDRAM (Synchronous DRAM)

### SRAM(Static RAM，靜態隨機存取記憶體): 
* 使用 **flip-flop** 來儲存資料，只要保持通電，裡面儲存的資料就可以恆常保持，然而，當電力供應停止時，SRAM儲存的數據還是會消失（volatile memory）。
* 需要**六個電晶體(6T)** 合起來才能保存一個 bit。
![](https://i.imgur.com/cmnRhNj.png)
![](https://i.imgur.com/69kYhsC.png)
* 電晶體的開關速度遠比電容充電放電的速度還快，所以相對於 DRAM、SRAM 的讀寫速度比 DRAM 快很多。
* **Main Memory用DRAM**，**Cache用SRAM**，因為SRAM價格較高，不易做成大容量，但他的速度較快， 因此整合到CPU內成為快取記憶體以加快資料的存取。


### 唯讀記憶體 ROM (Read Only Memory)
* 非揮發性記憶體，在沒有通電時也能夠將資料記錄下來
* **BIOS(Basic Input Output System)** 
    * 一套**程式**，這套程式是寫死到主機板上面的一個記憶體晶片中，這個記憶體通常是ROM或Flash。
    * 他在**開機**的時候執行，以**載入CMOS當中的參數**，並嘗試呼叫儲存裝置中的開機程式，進一步進入作業系統當中。也可以修改CMOS中的資料。


### Flash 快閃記憶體
* 在電晶體中增加一層以多晶矽為材料的**浮動閘極(Floating-Gate, FG)**，利用FG中有無電荷判別元件之記憶狀態
![](https://i.imgur.com/9PPQCpN.png)
* 屬於非揮發性記憶體(NVM)，FG被絕緣體夾住，當電源關掉時，FG中的電荷無法消散故能保存記憶。
* Flash跟DRAM一樣有高密度優勢，而且還可以作多層次儲存(Multi-Level Cell, MLC)，根據電荷多寡而不只是0和1，可以儲存2個以上的bits，因此記憶體容量可以達幾GB以上。
* 電荷注入都需要經過絕緣層，所以資料存取會慢上許多。
* 電荷經過絕緣層都會對絕緣層造成些許破壞，因此相較於DRAM、SRAM，Flash的壽命較短，只能存取幾千到幾萬次。
* * NOR Flash 
    * 比 NAND Flash 更早導入市場。
    * 讀取的速度較快，但寫入的速度慢、價格也比 NAND Flash 貴。目前用來儲存作業系統的程式碼或重要資料，比如拿來做 ROM。
* NAND Flash
    * 寫入的速度快、價格較低，故目前以 NAND Flash 最為普遍。
    * 應用: USB 硬碟、手機儲存空間、固態硬碟（Solid State Drive，SSD）


## Reference
* https://kopu.chat/2017/06/08/dram_rom/
* https://www.techbang.com/posts/18381-from-the-channel-to-address-computer-main-memory-structures-to-understand