轉自:http://www.360doc.com/content/14/0116/16/15528092_345730642.shtml
首先,我們先了解一下內存的大體結構工作流程,這樣會比較容量理解這些參數在其中所起到的作用。這部分的講述運用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的延遲。
接下來,相關的列地址被選中之后,將會觸發數據傳輸,但從存儲單元中輸出到真正出現在內存芯片的 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,時鍾觸發后的訪問時間)。
目前內存的讀寫基本都是連續的,因為與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。
1.結構框圖:
2.管腳功能描述
3.狀態圖:
Power on: 上電
Reset Procedure: 復位過程
Initialization: 初始化
ZQCL: 上電初始化后,用完成校准ZQ電阻。ZQCL會觸發DRAM內部的校准引擎, 一旦校准完成,校准后的值會傳遞到DRAM的IO管腳上,並反映為輸出驅動和ODT阻值。
ZQCS: 周期性的校准,能夠跟隨電壓和溫度的變化而變化。校准需要更短的時間窗口,一次校准,可以有效的糾正最小0.5%的RON和RTT電阻。
Al:Additive latency.是用來在總線上保持命令或者數據的有效時間。
在ddr3允許直接操作讀和寫的操作過程中,AL是總線上的數據出現到進入器件內部的時間。
下圖為DDR3標准所支持的時間操作。
Write Leveling:為了得到更好的信號完整性,DDR3存儲模塊采取了FLY_BY的拓撲結構,來處理命令、地址、控制信號和時鍾。FLY_BY的拓撲結構可以有效的減少stub的數量和他們的長度,但是卻會導致時鍾和strobe信號在每個芯片上的flight time skew,這使得控制器(FPGA或者CPU)很難以保持Tdqss ,tdss和tdsh這些時序。這樣,ddr3支持write leveling這樣一個特性,來允許控制器來補償傾斜(flight time skew)。存儲器控制器能夠用該特性和從DDR3反饋的數據調成DQS和CK之間的關系。
在這種調整中,存儲器控制器可以對DQS信號可調整的延時,來與時鍾信號的上升邊沿對齊。控制器不停對DQS進行延時,直到發現從0到1之間的跳變出現,然后DQS的延時通過這樣的方式被建立起來了,由此可以保證tDQSS。
MRS: MODE Register Set, 模式寄存器設置。為了應用的靈活性,不同的功能、特征和模式等在四個在DDR3芯片上的Mode Register中,通過編程來實現。模式寄存器MR沒有缺省值,因此模式寄存器MR必須在上電或者復位后被完全初始化,這樣才能使得DDR可以正常工作。正常工作模式下,MR也可以被重新寫入。模式寄存器的設置命令周期,tMRD兩次操作的最小時間,其具體時序圖,如下圖所示。模式寄存器,分為MR0、MR1、MR2和MR4。MR0用來存儲DDR3的不同操作模式的數據:包括突發長度、讀取突發種類、CAS長度、測試模式、DLL復位等。
MR1用來存儲是否使能DLL、輸出驅動長度、Rtt_Nom、額外長度、寫電平使能等。MR2用來存儲控制更新的特性,Rtt_WR阻抗,和CAS寫長度。MR3用來控制MPR。
MPR: Multi-purpose register. 多用途寄存器。MPR的功能是讀出一個預先設定的系統時序校准比特序列。
為了使能MPR功能,需要在MRS的寄存器MR3的A2位寫1,並且在此之前需要將ddr3的所有bank處於idle狀態;一旦MPR被使能后,任何RD和RDA的命令都會被引入到MPR寄存器中,當MPR寄存器被使能后,除非MPR被禁止(MR3的A2=0),否則就只有RD和RDA被允許。在MPR被使能的時候,RESET功能是被允許的。
Precharge Power Down: bank在in-progress命令后關閉
Active Power Down:bank在in-progress命令后依然打開
Idle:所有的bank必須預先充電,所有時序滿足,DRAM的ODT電阻,RTT必須為高阻。
CWL:CAS write latency. 以時鍾周期為單位,在內部寫命令和第一位輸入數據的時間延時,該單位始終為整數。
在操作過程中,所有的寫延時WL被定義為AL(Additive Latency)+CWL。
Rtt: Dynamic ODT.DDR3引入的新特性。在特定的應用環境下為了更好的在數據總線上改善信號完整性,不需要特定的MRS命令即可以改變終結強度(或者稱為終端匹配)。在MR2中的A9和A10位設置了Rtt_WR。Ddr3中,有兩種RTT值是可以選擇的,一種是RTT_Nom,另一種是RTT_WR;Rtt_Nom是在沒有寫命令的時候被選擇的,當有了寫命令后,ODT就會變成Rtt_wr,當寫命令結束后,又會回到Rtt_nom。也就是說,RTT在ODT使能后,出現,當總線上沒有數據的時候,采用的RTT值為RTT_nom;而當總線上有了數據后,要求此時的ODT的值為Rtt_wr。具體的DDR3的ODT產生時序見圖2。當ODT被使能后,必須要保持高電平ODTH4個時鍾周期才可以有效;如果寫命令被放入寄存器並且ODT是高,那么ODT必須保持ODTH4或者ODTH8,這樣ODT才可以有效。
ACT = ACTIVATE PREA = PRECHARGE ALL SRX = 自刷新推出
MPR = 多用處寄存器 READ = RD,RDS4,RDS8 WRITE=WR,WRS4,WRS8
MRS=模式寄存器集 READ AP=RDAP,RDAPS4,RDAPS8 WRITE=WRAP,WRAPS4,WRAPS8
PDE=掉電進入 REF=REFRESH ZQCL=ZQ LONG CALIBRATION
PDX=掉電推出 RESET=啟動復位過程 ZACS=ZA SHORT CALIBTATION
PRE=預充電 SRE=自刷新進入
4、工作原理
在描述了上述的一些基本概念后,就可以對圖1中的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相關的配置。
上表中MRS可以設置Mode寄存器值
以上圖為例CS#,RAS#,CAS#,WE#為L,L,H,H。則指令為Row/Bank Active;隨后CS#拉高,command無效,在第4個時鍾周期這4個信號變為L,H,L,H,對照表格,指令為Read,經過幾個時鍾周期延遲,在3CLK后讀數據。
5. 基本功能
DDR3 SDRAM是高速動態隨機存取存儲器,內部配置有8個BANK。DDR3 SDRAM使用8n預取結構,以獲得高速操作。8n預取結構同接口組合起來以完成在I/O腳上每個時鍾兩個數據字的傳輸。DDR3 SDRAM的一個單次讀或寫操作由兩部分組成:一是在內部DRAM核中進行的8n位寬四個時鍾數據傳輸,另一個是在I/O腳上進行的兩個對應n位寬、半時鍾周期的數據傳輸。
對DDR3 SDRAM的讀寫操作是有方向性的突發操作,從一個選擇的位置開始,突發長度是8或者是一個以編程序列的長度為4的Chopped突發方式。操作開始於Active命令,隨后是一個Read/Write命令。Active命令同時並發含帶地址位,以選擇Bank和Row地址(BA0-BA2選擇BANK、A0-A15選擇Row)。而Read/Write命令並發含帶突發操作的起始Column地址,並確定是否發布自動預充電命令(通過A10)和選擇BC4或BL8模式(通過A12)(如果模式寄存器使能)。
在正常操作之前,DDR3 SDRAM必要以預先定義的方式上電和初始化。
引入DDR3內存的動因
CPU廠商的DDR3內存攻略
DDR3內存的技術改進
邏輯Bank數量