DDR3 內存簡要說明


首先,我們先了解一下內存的大體結構工作流程,這樣會比較容量理解這些參數在其中所起到的作用。這部分的講述運用DDR3的簡化時序圖。

   DDR3的內部是一個存儲陣列,將數據“填”進去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Column),我們就可以准確地找到所需要的單元格,這就是內存芯片尋址的基本原理。對於內存,這個單元格可稱為存儲單元,那么這個表格(存儲陣列)就是邏輯 Bank(Logical Bank,下面簡稱Bank)。 

DDR3內部Bank示意圖,這是一個NXN的陣列,B代表Bank地址編號,C代表列地址編號,R代表行地址編號。

如果尋址命令是B1、R2、C6,就能確定地址是圖中紅格的位置

目前DDR3內存芯片基本上都是8個Bank設計,也就是說一共有8個這樣的“表格”。

尋址的流程也就是先指定Bank地址,再指定行地址,然后指列地址最終的確尋址單元。

 

目前DDR3系統而言,還存在物理Bank的概念,這是對內存子系統的一個相關術語,並不針對內存芯片。內存為了保證CPU正常工作,必須一次傳輸完CPU 在一個傳輸周期內所需要的數據。而CPU在一個傳輸周期能接受的數據容量就是CPU數據總線的位寬,單位是bit(位)。控制內存與CPU之間數據交換的北橋芯片也因此將內存總線的數據位寬等同於CPU數據總線的位寬,這個位寬就稱為物理Bank(Physical Bank,有的資料稱之為Rank)的位寬。目前這個位寬基本為64bit。

在實際工作中,Bank地址與相應的行地址是同時發出的,此時這個命令稱之為“行激活”(Row Active)。在此之后,將發送列地址尋址命令與具體的操作命令(是讀還是寫),這兩個命令也是同時發出的,所以一般都會以“讀/寫命令”來表示列尋址。根據相關的標准,從行有效到讀/寫命令發出之間的間隔被定義為tRCD,即RAS to CAS Delay(RAS至CAS延遲,RAS就是行地址選通脈沖,CAS就是列地址選通脈沖),我們可以理解為行選通周期。tRCD是DDR的一個重要時序參數,廣義的tRCD以時鍾周期(tCK,Clock Time)數為單位,比如tRCD=3,就代表延遲周期為兩個時鍾周期,具體到確切的時間,則要根據時鍾頻率而定,DDR3-800,tRCD=3,代表30ns的延遲。

                     圖中顯示的是tRCD=3

 

接下來,相關的列地址被選中之后,將會觸發數據傳輸,但從存儲單元中輸出到真正出現在內存芯片的 I/O 接口之間還需要一定的時間(數據觸發本身就有延遲,而且還需要進行信號放大),這段時間就是非常著名的 CL(CAS Latency,列地址脈沖選通潛伏期)。CL 的數值與 tRCD 一樣,以時鍾周期數表示。如 DDR3-800,時鍾頻率為 100MHz,時鍾周期為 10ns,如果 CL=2 就意味着 20ns 的潛伏期。不過CL只是針對讀取操作。

由於芯片體積的原因,存儲單元中的電容容量很小,所以信號要經過放大來保證其有效的識別性,這個放大/驅動工作由S-AMP負責,一個存儲體對應一個S- AMP通道。但它要有一個准備時間才能保證信號的發送強度(事前還要進行電壓比較以進行邏輯電平的判斷),因此從數據I/O總線上有數據輸出之前的一個時鍾上升沿開始,數據即已傳向S-AMP,也就是說此時數據已經被觸發,經過一定的驅動時間最終傳向數據I/O總線進行輸出,這段時間我們稱之為 tAC(Access Time from CLK,時鍾觸發后的訪問時間)。

                      圖中標准CL=2,tAC=1

 

  目前內存的讀寫基本都是連續的,因為與CPU交換的數據量以一個Cache Line(即CPU內Cache的存儲單位)的容量為准,一般為64字節。而現有的Rank位寬為8字節(64bit),那么就要一次連續傳輸8次,這就涉及到我們也經常能遇到的突發傳輸的概念。突發(Burst)是指在同一行中相鄰的存儲單元連續進行數據傳輸的方式,連續傳輸的周期數就是突發長度(Burst Lengths,簡稱BL)。

在進行突發傳輸時,只要指定起始列地址與突發長度,內存就會依次地自動對后面相應數量的存儲單元進行讀/寫操作而不再需要控制器連續地提供列地址。這樣,除了第一筆數據的傳輸需要若干個周期(主要是之前的延遲,一般的是tRCD+CL)外,其后每個數據只需一個周期的即可獲得。

 

突發連續讀取模式:只要指定起始列地址與突發長度,后續的尋址與數據的讀取自動進行,而只要控制好兩段突發讀取命令的間隔周期(與BL相同)即可做到連續的突發傳輸。

談到了突發長度時。如果BL=4,那么也就是說一次就傳送4×64bit的數據。但是,如果其中的第二筆數據是不需要的,怎么辦?還都傳輸嗎?為了屏蔽不需要的數據,人們采用了數據掩碼(Data I/O Mask,簡稱DQM)技術。通過DQM,內存可以控制I/O端口取消哪些輸出或輸入的數據。這里需要強調的是,在讀取時,被屏蔽的數據仍然會從存儲體傳出,只是在“掩碼邏輯單元”處被屏蔽。DQM由北橋控制,為了精確屏蔽一個P-Bank位寬中的每個字節,每個DIMM有8個DQM 信號線,每個信號針對一個字節。這樣,對於4bit位寬芯片,兩個芯片共用一個DQM信號線,對於8bit位寬芯片,一個芯片占用一個DQM信號,而對於 16bit位寬芯片,則需要兩個DQM引腳。

 

在數據讀取完之后,為了騰出讀出放大器以供同一Bank內其他行的尋址並傳輸數據,內存芯片將進行預充電的操作來關閉當前工作行。還是以上面那個Bank示意圖為例。當前尋址的存儲單元是B1、R2、C6。如果接下來的尋址命令是B1、R2、C4,則不用預充電,因為讀出放大器正在為這一行服務。但如果地址命令是B1、R4、C4,由於是同一Bank的不同行,那么就必須要先把R2關閉,才能對R4尋址。從開始關閉現有的工作行,到可以打開新的工作行之間的間隔就是tRP(Row Precharge command Period,行預充電有效周期),單位也是時鍾周期數。

 

在不同Bank間讀寫也是這樣,先把原來數據寫回,再激活新的Bank/Row。

數據選取脈沖(DQS)

DQS 是DDR中的重要功能,它的功能主要用來在一個時鍾周期內准確的區分出每個傳輸周期,並便於接收方准確接收數據。每一顆芯片都有一個DQS信號線,它是雙向的,在寫入時它用來傳送由北橋發來的DQS信號,讀取時,則由芯片生成DQS向北橋發送。完全可以說,它就是數據的同步信號。

在讀取時,DQS與數據信號同時生成(也是在CK與CK#的交叉點)。而DDR內存中的CL也就是從CAS發出到DQS生成的間隔,DQS生成時,芯片內部的預取已經完畢了,由於預取的原因,實際的數據傳出可能會提前於DQS發生(數據提前於DQS傳出)。由於是並行傳輸,DDR內存對tAC也有一定的要求,對於DDR266,tAC的允許范圍是±0.75ns,對於DDR333,則是±0.7ns,有關它們的時序圖示見前文,其中CL里包含了一段DQS 的導入期。

DQS 在讀取時與數據同步傳輸,那么接收時也是以DQS的上下沿為准嗎?不,如果以DQS的上下沿區分數據周期的危險很大。由於芯片有預取的操作,所以輸出時的同步很難控制,只能限制在一定的時間范圍內,數據在各I/O端口的出現時間可能有快有慢,會與DQS有一定的間隔,這也就是為什么要有一個tAC規定的原因。而在接收方,一切必須保證同步接收,不能有tAC之類的偏差。這樣在寫入時,芯片不再自己生成DQS,而以發送方傳來的DQS為基准,並相應延后一定的時間,在DQS的中部為數據周期的選取分割點(在讀取時分割點就是上下沿),從這里分隔開兩個傳輸周期。這樣做的好處是,由於各數據信號都會有一個邏輯電平保持周期,即使發送時不同步,在DQS上下沿時都處於保持周期中,此時數據接收觸發的准確性無疑是最高的。

在寫入時,以DQS的高/低電平期中部為數據周期分割點,而不是上/下沿,但數據的接收觸發仍為DQS的上/下沿

 

 

 

3.容量的計算

 

上圖為X8data的單顆DDR3架構圖,行(Row)地址線復用14根,列(Column)地址線復用10根,Bank數量為8個,IO Buffer 通過8組數位線(DQ0-DQ7)來完成對外的通信,故此單顆DDR3芯片的容量為2的14次方乘2的10次方乘8乘8,結果為1Gbit,因為1B包含8bit,1GB/8=128MB。

如果我們要做成容量為1GB的內存條則需要8顆這樣的DDR3內存芯片,每顆芯片含8根數位線(DQ0-DQ7)則總數寬為64bit,這樣正好用了一個Rank。

假果還用128MB的DDR3芯片去做2GB內存條,結果就會有所不同。我們最好選用4根數位線(DQ0-DQ3),數量是16顆,這樣也是用了一個Rank。

在K2的項目中我們要做容量為8GB的內存條,則數量用64顆128M的DDR3,這樣位寬高達64X4=256bit,要做成4個Rank。

 

DDR簡要概念說明

嚴 格的說DDR應該叫DDR SDRAM,是Double Data Rate SDRAM(synchronous dynamic random access memory,同步動態隨機存儲器)的縮寫,同步是指其時鍾頻率與CPU前端總線的系統時鍾頻率相同,動態是指存儲陣列需要不斷刷新來保證數據不丟失,隨 機是指數據可隨機存儲和訪問。
    SDRAM在一個時鍾周期內只傳輸一次數據,它是在時鍾的上升期進行數據傳輸;而DDR內存則是一個時鍾周期內傳輸兩次數據,它能夠在時鍾的上升期和下降期各傳輸一次數據,因此稱為雙倍速率同步動態隨機存儲器。
    DRAM 制造商的一些資料中顯示,內存至少要每64ms刷新一次,這也就意味着內存有1%的時間要用來刷新。內存的自動刷新對於內存廠商來說不是一個難題,而關鍵 在於當對內存單元進行讀取操作時保持內存的內容不變,所以DRAM單元每次讀取操作之后都要進行刷新:執行一次回寫操作,因為讀取操作也會破壞內存中的電 荷,也就是說對於內存中存儲的數據是具有破壞性的。所以內存不但要每64ms刷新一次,每次讀操作之后也要刷新一次。

    接着說明幾個SDRAM的概念:
1,物理BANK:傳統內存系統為了保證CPU 的正常工作,必須一次傳輸完CPU 在一個傳輸周期內所需要的數據。那時的內存必須要組織成P-Bank 來與CPU 打交道,所以會出現兩根32bit的內存搭配才能跟64bit的奔騰CPU開機成功。
2,芯片位寬:為了組成P-Bank所需的位寬,就需要多顆芯片並聯工作。組成64bit,對於16bit芯片,需要4 顆(4×16bit=64bit)。對於8bit 芯片,則就需要8 顆了。
3,邏輯BANK:Logical Bank,SDRAM 的內部是一個存儲陣列。陣列就如同表格一樣,將數據“填”進去,你可以它想象成一張表格。單一的L-Ban k將會造成非常嚴重的尋址沖突,大幅降低內存效率,所以人們在內部分割成多個L-Bank。

4,內存芯片容量:存儲單元數量=行數×列數(得到一個L-Bank的存儲單元數量)×L-Bank的數量,比如128Mbit:2M x 16Bit x 4 Banks:第一個數目是行列相乘的矩陣單元數目,第二個數目是單個存儲體的位寬,第三個是邏輯BANK數目。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM