天天看點

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。

DDR3詳解(轉)

二.實際工作中

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

DDR3詳解(轉)

        接下來,相關的列位址被選中之後,将會觸發資料傳輸,但從存儲單元中輸出到真正出現在記憶體晶片的 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,時鐘觸發後的通路時間)。

DDR3詳解(轉)

                                                                          圖中标準CL=2,tAC=1

       目前記憶體的讀寫基本都是連續的,因為與CPU交換的資料量以一個Cache Line(即CPU内Cache的存儲機關)的容量為準,一般為64位元組。而現有的Rank位寬為8位元組(64bit),那麼就要一次連續傳輸8次,這就涉及到我們也經常能遇到的突發傳輸的概念。突發(Burst)是指在同一行中相鄰的存儲單元連續進行資料傳輸的方式,連續傳輸的周期數就是突發長度(Burst Lengths,簡稱BL)。在進行突發傳輸時,隻要指定起始列位址與突發長度,記憶體就會依次地自動對後面相應數量的存儲單元進行讀/寫操作而不再需要控制器連續地提供列位址。這樣,除了第一筆資料的傳輸需要若幹個周期(主要是之前的延遲,一般的是tRCD+CL)外,其後每個資料隻需一個周期的即可獲得。

DDR3詳解(轉)

        突發連續讀取模式:隻要指定起始列位址與突發長度,後續的尋址與資料的讀取自動進行,而隻要控制好兩段突發讀取指令的間隔周期(與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,行預充電有效周期),機關也是時鐘周期數。

三.DDR3架構

DDR3詳解(轉)

在不同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上下沿時都處于保持周期中,此時資料接收觸發的準确性無疑是最高的。

DDR3詳解(轉)

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

四.容量的計算

DDR3詳解(轉)

        上圖為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。

五.管腳功能描述

DDR3詳解(轉)
DDR3詳解(轉)

這裡的指令并不是IP核的指令

DDR3詳解(轉)
DDR3詳解(轉)

六.工作原理

         首先,晶片進入上電,在上電最小為200us的平穩電平後,等待500usCKE使能,在這段時間晶片内部開始狀态初始化,該過程與外部時鐘無關。在時鐘使能信号前(cke),必須保持最小10ns或者5個時鐘周期,除此之外,還需要一個NOP指令或者Deselect指令出現在CKE的前面。然後DDR3開始了ODT的過程,在複位和CKE有效之前,ODT始終為高阻。在CKE為高後,等待tXPR(最小複位CKE時間),然後開始從MRS中讀取模式寄存器。然後加載MR2、MR3的寄存器,來配置應用設定;然後使能DLL,并且對DLL複位。接着便是啟動ZQCL指令,來開始ZQ校準過程。等待校準結束後,DDR3就進入了可以正常操作的狀态。對于基本的配置過程,現在就可以結束了。下面,結合CH1的控制器FPGA,說明對DDR3相關的配置。