## 內存條容量與顆粒容量的關系
首先說一下顆粒
簡單的講,顆粒就是內存條上的幾片較大集成塊,顆粒數據是每片集成塊的數據,與內存容量是一個倍數關系。
容量單位:Mb,MB,注意字母B的大小寫。
8Mb=1MB
電腦以及人們常說的256兆,512兆,是指256MB,512MB。
三星內存顆粒:
512Mb 128M\*4
512Mb 64Mb\*8
512Mb 32M\*16
等等,都是顆粒資料,而非內存條的實際容量。
內存條容量=顆粒容量*顆粒數量
顆粒容量:即顆粒數據提供的容量,
顆粒數量:即內存條較大集成塊的數量,也就是有幾片,數量就是幾。
比如:
根據網友提供的資料:
力積電子的顆粒:
512Mb 32M\*16
直接使用Mb為單位計算:
顆粒容量=512Mb(32M\*16),
顆粒數量=2,
內存條容量=顆粒容量\*顆粒數量
=512Mb\*2=1024Mb=128MB(注意單位中字母B的大小寫,1024MB/8=128MB)
即128兆。
或者這樣算:使用MB為單位計算:
512Mb/8=64MB,
顆粒容量=64MB,
顆粒數量=2,
內存條容量=顆粒容量\*顆粒數量
=64MB\*2=128MB。
可見廠方標的是正確的。
隨便提一句,混淆視聽的公司還是有的。比如電信營運商說2兆(2M)的寬帶,用戶一般認為2兆(2M)是2MB,可電信營運商說2兆實際是2Mb,也就是256KB,2Mb/8=0.25MB=256KB.
# DRAM 內存介紹
SDRAM(Synchronous dynamic random access memory),同步動態隨機訪問內存,通常包括 SDR (Single Data Rate) SDRAMs以及DDR (Double Data Rate) SDRAMs.在顯卡中常用的是GDDR SDRAMs以及HBM。
??????? 如圖一所示,左邊就是PC系統中常用的內存條,該內存條是雙通道2G內存(dual inline Memory Module),通常簡稱為DIMM。我們可以看到內存條上黑色的128MB內存芯片,這些內存芯片簡稱為IC。該內存條是雙面內存,就是說正反兩面都有8個IC,總共16個IC,16*128M=2GB。DIMM的單面稱作rank,比如下圖的2GB內存條,它就是由rank1,rank2兩個單面組成,每個面有8個IC。
*圖一,DRAM的組成*
???? 每個IC內部通常由8個bank組成(DDR3通常為8個bank,GDDR5通常有16個bank),這些bank共享一個memory I/O controller, 但是在每個bank內部的讀寫可以并行進行。
???? 每個bank內部包括行地址解碼器,列地址解碼器,傳感放大器,以及DRAM內存陣列。如圖2所示,這些內存陣列由行列組成,每個行列交叉的單元,表示n bit,通常是8bit或者16位【每一位都是由一個晶體管和一個電容組成,在GDDR5和HBM內存中,通常為32Byte】,表示一個字節或者一個word。bank中的每一行組成一個page,每一行又包括很多列(這兒列是指單個交叉單元)。內存讀寫的最小單位就是這些交叉單元,通常只有這些單元被放入傳感放大器的時候,才能夠被讀寫,所以通常要不斷在行和傳感放大器之間移動數據。
??? 把一行放入傳感放大器稱作"activate”,因為這個操作會激活bank。把傳感放大器的內容放入行,稱作“precharge”。有時候Read或者write的時候會隱含著 precharge的操作,稱作AP-read,或者AP-write,AP(auto precharge)。
圖二 bank內部結構
>[danger]在圖一中每個bank由16k(16384bit)的page組成,每個page包括1k的列,每列是8bit的byte,所以總共16384 rows/bank x 1,024 columns addresses/row x 1 byte/column address x 8stacked banks=128M
對于DDR3,我們通常說它是8n-prefetch(這兒n是指每個rank的bank數目),因為DDR3,每個IC有8個bank,每個bank讀取數據的最小單位是8bit,一個byte。每次數據讀取request,都會讀取8\*8bit=64bitdata,而不管這些數據是否都是我們所需要的,比如我們只需要其中的某個byte,但讀request會讀取8個byte。
???? 如果圖三所示, SDRAM讀寫通常能用一個簡單的狀態機來描述,它的狀態包括idle, active, precharging一個或多個bank。和任何其它狀態機一樣,從一個狀態轉換到另一個狀態,并在新的狀態開始數據操作,都需要一些最小等待時間,這些時延會影響SDRAM讀寫數據的性能,從而影響整個計算機系統的性能。
SDARM bank中的內存單元行列交叉(通常稱作cell? )點,用來存儲數據,它通常都是一些電容和放大器組成,由于電容的特性,它的電量會隨著時間衰減,比如溫度等因素都會影響它的衰減速度,所以需要周期性進行加電刷新操作,維持其中的數據。刷新頻率通常依賴于內存die的工藝以及cell本身的設計。對內存cell的讀寫和內存刷新有相同的效果,但是在電容電量衰減到必須刷新之前,并不是所有的內存cell都有讀寫操作,所以定時刷新仍是需要的。通常刷新操作是按行或者說page進行的,刷新之后,該行cell的電容就會被充電。通常的刷新操作周期是幾百clocks到幾千clocks。
???? 在刷新命令之前,每個bank必須要先precharged,然后處于idle狀態,這需要消耗一個tRP時延(The minimum number of clock cycles required between the issuing of the precharge command and activating a different row within the same bank)。在一個刷新命令完成后,所有的bank處于precharge (idle)狀態,在刷新命令和下一個activate命令(ACT)之間cycles數目必須大于等于tRFC(the Row Refresh Cycle Time )。
圖三,? SDRAM數據傳輸狀態機
由于數據傳輸時候,都有一定的時延,所以有下面的一些符號描述bank內數據傳輸的各個階段時延。
| 參數 | 符號 | 注釋 |
| --- | --- | --- |
| Row Active Time | TRAS | The minimum number of clock cycles required between a bank active command and issuing the precharge command. |
| Row Address to Column Address Delay | TRCD | The minimum number of clock cycles required between the activation of a row and accessing columns within it. |
| CAS latency | CL | The time between sending a column address to the memory and the beginning of the data in response. This is the time it takes to read the first bit of memory from a DRAM with the correct row already open. |
| Row Precharge Time | TRP | The minimum number of clock cycles required between the issuing of the precharge command and activating a different row within the same bank. |
| Activate to Activate in same bank. | TRC | The minimum number of clock cycles required between the activation of a row activting another row in the same bank. |
| Burst | | The number of data beats in a column access. This is usually 8 for recent DDR3/GDDR5 devices. |
SDRAM在響應讀寫命令之前,bank必須處于激活狀態,內存控制器通過發送activate命令,指定被訪問的rank,bank以及page(row)。激活一個bank的時間稱作tRCD,the Row-Column (or Command) Delay ,它表示激活發送active命令,program控制邏輯以及把內存行列單元讀取到傳感放大器中以便讀寫的cycles數目。
???? bank激活之后,傳感放大器中有完整page內容,這個時候,可以發射讀寫命令,指定從某列開始讀寫數據。從某個激活的page(放在傳感放大器中)中讀取一個byte數據消耗的時間稱作, the Column Address Strobe (CAS) Latency ,通常間歇位CL 或者tCAS, 它包括在讀寫接口發送讀寫命令,program控制邏輯,把傳感放大器的內容傳輸入到輸入輸出緩沖,并把數據的第一個word放在內存總線上總共消耗的時間。
???? 一個bank每次只能打開一個page(這兒打開是指把page內容放入到傳感放大器),對于處于打開狀態的page,我們可以進行讀寫操作,如果不需要再對該page進行讀寫操作,可以關閉該page, 把該page內容寫入bank的行列單元對應的page中,以便對其它page進行讀寫操作。這個關閉操作通過發射一個Precharge命令實現,precharge命令可以關閉某一個bank,也可以關閉rank中所有打開的bank。
??? Precharge命令可以和bank中的上一個讀寫操作進行綁定,從而進行一個組合操作,這時發送一個Read with Auto-Precharge (RDA) 或 Write with Auto-Precharge (WRA)代替單獨的讀寫操作命令。只要滿足一定的條件,這將允許SDRAM控制邏輯自動的打開或者關閉bank。需要滿足的條件包括:(1) A minimum of RAS Activation Time (tRAS) has elapsed since the ACT command was issued, and (2) a minimum of Read to Precharge Delay (tRTP) has elapse since the most recent READ command was issued。
??? precharge命令把傳感放大器中的數據寫入bank中對應的page中,然后DRAM core能夠準備下一個數據訪問。 precharge一個打開的bank所消耗的時間稱作the Row Access Strobe (RAS) Precharge Delay ,通過寫作tRP。同一個bank兩個activate命令之間所消耗的時間稱作tRC,它等于tRAS+tRP。不同bank的ACT命令間隔時間稱作the Read-to-Read Delay (tRRD)。
下面的時序圖標出了各個階段時延:

[https://blog.csdn.net/qq\_39759656/article/details/81672895](https://blog.csdn.net/qq_39759656/article/details/81672895)