了解DDR首先要對(duì)其命令時(shí)序有所了解,尤其是讀寫(xiě)命令。這里簡(jiǎn)單起見(jiàn)以LPDDR為例分享其讀寫(xiě)的關(guān)鍵時(shí)序和參數(shù)。本文重點(diǎn)在讀寫(xiě)時(shí)序和參數(shù),其他暫時(shí)按下不表。參考《JESD209B.pdf》
Active命令,激活行個(gè)人覺(jué)得稱(chēng)為打開(kāi)行更貼切。
在向LPDDR SDRAM中的bank發(fā)出READ或WRITE命令之前,必須打開(kāi)該bank的一行row。通過(guò)ACTIVE命令完成(見(jiàn)下圖):BA0和BA1選擇bank,地址輸入選擇要打開(kāi)的行RA??梢酝瑫r(shí)有多個(gè)bank處于打開(kāi)(活動(dòng))狀態(tài)。
?

tRCD即打開(kāi)行后到讀寫(xiě)之間的間隔, 行row打開(kāi)后,就可以在tRCD要求的最小時(shí)間后向該行發(fā)出READ或WRITE命令。
?

?

上述定義的是絕對(duì)值,實(shí)際上以CK單位是多少呢?
對(duì)于NOTE24和NOTE25兩行,分別對(duì)應(yīng)的是3和4個(gè)CK,其中LPDDR200只有一個(gè)等級(jí),對(duì)應(yīng)3個(gè)CK。
可以找一個(gè)手動(dòng)計(jì)算一下,以LPDDR400為例其頻率是200MHz(400是按照DDR計(jì)算的),一個(gè)時(shí)鐘周期是1/200uS=5nS,對(duì)于15nS時(shí)間就是3個(gè)CK,20nS就是4個(gè)CK, 其他頻率的參數(shù)計(jì)算也是一樣。
?

同一bank,ACTIVE到ACTIVE命令最小間隔。
只有在前一行關(guān)閉后,才能向同一bank中的另一行發(fā)出后續(xù)ACTIVE命令。同一bank上兩個(gè)ACTIVE命令之間的最小時(shí)間間隔由tRC定義,其值為tRAS+tRP的和。注意這里tRAS有最大值限制。
?

?

不同BANK之間ACTIVE命令的最小間隔。
當(dāng)?shù)谝粋€(gè)bank被訪(fǎng)問(wèn)時(shí),可以向另一個(gè)bank發(fā)出后續(xù)的ACTIVE命令,這可以減少總的行訪(fǎng)問(wèn)開(kāi)銷(xiāo)(間隔更小,且不需要關(guān)閉當(dāng)前bank的行,不需要重新回來(lái)時(shí)又要重新打開(kāi))。不同bank上兩個(gè)ACTIVE命令之間的最小時(shí)間間隔由tRRD定義。
?

?

可以看到tRRD小于tRCD。
下圖顯示了tRCD和tRRD的示意。
?

打開(kāi)的行會(huì)保持活動(dòng)狀態(tài),直到向bank發(fā)出預(yù)充電命令(或帶有自動(dòng)預(yù)充電的READ或WRITE命令:A10指定)關(guān)閉行。
在打開(kāi)同一bank中的不同行之前,必須發(fā)出預(yù)充電命令(或帶有自動(dòng)預(yù)充電的READ或WRITE命令:A10指定)關(guān)閉行。
總結(jié)一下:
lbank相對(duì)獨(dú)立, 但是操作以行為單位,不同bank內(nèi)的行可以同時(shí)操作;
同一bank內(nèi)行一次只能操作一個(gè),需要預(yù)充電(或自動(dòng)預(yù)充電讀寫(xiě))關(guān)閉一個(gè)行才能打開(kāi)另外的行操作。
l關(guān)閉行用預(yù)充電或自動(dòng)預(yù)充電的讀寫(xiě),打開(kāi)行用Active命令。
ltRCD是一個(gè)性能相關(guān)參數(shù),他的大小影響訪(fǎng)問(wèn)速率,因?yàn)榇蜷_(kāi)行是一個(gè)普遍常用的操作。
l做一個(gè)不是特別恰當(dāng)?shù)念?lèi)比,LPDDR需要先Active打開(kāi)行,讀寫(xiě),然后關(guān)閉行。類(lèi)似于FLASH的讀寫(xiě),先加載PAGE到緩存,然后隨機(jī)讀寫(xiě)修改PAGE緩存,然后將緩存編程入FLASH。
列地址即對(duì)應(yīng)PAGE內(nèi)偏移,行地址即對(duì)應(yīng)PAGE地址,操作單位PAGE對(duì)應(yīng)行。
讀寫(xiě)都是burst操作,其中burst長(zhǎng)度為模式寄存器中指定, burst長(zhǎng)則負(fù)載率高有效數(shù)據(jù)占整個(gè)傳輸比例高,但是失敗后代價(jià)大浪費(fèi)比較多的時(shí)間,burst短則負(fù)載效率低,但是失敗后代價(jià)小。16是可選的,出于以上burst長(zhǎng)的優(yōu)勢(shì),有些廠(chǎng)家提供更長(zhǎng)的burst選項(xiàng),此時(shí)對(duì)連續(xù)操作比較多的場(chǎng)景更適用,比如啟動(dòng)時(shí)加載啟動(dòng)程序到LPDDR一般是連續(xù)的操作,長(zhǎng)burst效率更高。
為什么burst都是2,4,8這種偶數(shù)呢,參考《https://mp.weixin.qq.com/s/i1U70EpQ1Lt89EpzqCMQFg》
?

寫(xiě)需要在行打開(kāi)之后進(jìn)行,BA0,BA1選擇bank, 而地址輸入指定列地址。
A10選擇是否自動(dòng)預(yù)充,A10=1時(shí),burst操作完后自動(dòng)預(yù)充關(guān)閉行,否則不自動(dòng)預(yù)充,行仍然處于打開(kāi)狀態(tài)。這兩種模式分別針對(duì)不同的應(yīng)用場(chǎng)景,隨機(jī)讀寫(xiě)前者更合適,因?yàn)榇蟾怕屎竺娌辉俨僮鞅拘袆t自動(dòng)關(guān)閉,免得后面還要手動(dòng)預(yù)充關(guān)閉; 后者適合連續(xù)操作,大概率仍然要操作本行先不關(guān)閉。
?

DM信號(hào)用于寫(xiě)MASK, 和DQ完全對(duì)齊,DM=1則相應(yīng)的數(shù)據(jù)將被顆粒忽略不寫(xiě)入,DM=0對(duì)應(yīng)的數(shù)據(jù)寫(xiě)入。
寫(xiě)時(shí)DQS由控制器發(fā)出,對(duì)齊到DQ的中間,使得顆粒能在DQ的中間采樣。
DQ/DM的建立時(shí)間和保持時(shí)間,即DQ/DM在DQS邊沿前多久準(zhǔn)備好,邊沿后保持多久。
這對(duì)發(fā)送很重要,決定顆粒能不能正確采樣。理論上顆粒在采樣時(shí)DQS邊沿在DQ/DM正中間最好,由于path路徑影響,控制器發(fā)送端到顆粒采樣時(shí)相位并不是一樣的。控制器發(fā)送端此時(shí)可以調(diào)整DQS延遲,讓顆粒接收端采樣時(shí)剛好DQS在DQ中間,這就是寫(xiě)training。
可以通過(guò)不斷延遲DQS來(lái)寫(xiě)并回讀(讀此時(shí)要保證是OK的即讀要先training,而讀可以通過(guò)讀顆粒輸出的預(yù)設(shè)值無(wú)需依賴(lài)寫(xiě)),在寫(xiě)入回讀正確的DQS延遲范圍內(nèi)選擇中間的DQS延遲值即為training結(jié)果。
?

?

?

寫(xiě)命令下一個(gè)周期即可寫(xiě)數(shù)據(jù),tDQSS即寫(xiě)命令對(duì)應(yīng)的CK上升沿與第一個(gè)DQS上升沿的間隔。必須在0.75和1.75CK之間,即在后一個(gè)CK上升沿的±1/4CK窗口內(nèi)。
?

?

?

DQS和CK周期是完全一樣的。
?

?

tDSS:CK上升沿前DQS建立時(shí)間。
tDSH:CK上升沿后DQS保持時(shí)間。
?

tWPRES:Write preamble的建立時(shí)間,即DQS拉低確認(rèn)為preamble之前保持高多久。
tWPRE:Write preamble保持時(shí)間,即第一個(gè)上升沿之前的低時(shí)間。
tWPST:Write postamble保持時(shí)間,即最后一個(gè)下降沿之后的低時(shí)間。
?

?

下面是一個(gè)詳細(xì)的寫(xiě)時(shí)序圖,我們來(lái)對(duì)關(guān)鍵參數(shù)過(guò)程進(jìn)行理解
?

任何WRITE burst的數(shù)據(jù)可以與隨后的WRITE命令連接或截?cái)?。在任何一種情況下,都可以保持輸入數(shù)據(jù)的連續(xù)流動(dòng)。新的寫(xiě)入命令可以在先前寫(xiě)入命令之后的時(shí)鐘的任何正沿上發(fā)出。
在完成的burst的最后一個(gè)元素或被截?cái)嗟妮^長(zhǎng)burst的最后所需數(shù)據(jù)元素之后,應(yīng)用來(lái)自新burst的第一個(gè)數(shù)據(jù)元素。新的寫(xiě)入命令應(yīng)在第一個(gè)寫(xiě)入命令之后X個(gè)周期發(fā)出,其中X等于元素對(duì)中所需數(shù)據(jù)的數(shù)量。
?

上圖演示了burst長(zhǎng)度4的連續(xù)寫(xiě)
(1)第一次寫(xiě)
(2)2個(gè)CK之后第二次寫(xiě)
(3)兩次寫(xiě)間隔2CK剛好是burst 4需要的周期數(shù)4/2(雙邊沿),所以連續(xù)無(wú)間隔。
(4)上下兩部分,分別演示了tDQSS最小和最大時(shí)的情況。
上圖演示了burst長(zhǎng)度4的非連續(xù)寫(xiě)
(1)第一次寫(xiě)
(2)3個(gè)CK之后第二次寫(xiě)
(3)兩次寫(xiě)間隔3CK,在burst 4傳輸完還空閑了一個(gè)CK。
?

上圖演示了隨機(jī)的持續(xù)寫(xiě)
(1)第一次寫(xiě)
(2)1個(gè)CK之后第二次寫(xiě)
(3)兩次寫(xiě)間隔1CK,只能傳輸2n數(shù)據(jù)。如果burst大于2則后面的被截?cái)啵匦马憫?yīng)后面新的命令。效果是任意隨機(jī)的寫(xiě)。這也解釋了為什么寫(xiě)無(wú)需終止burst命令,連續(xù)寫(xiě)就可以實(shí)現(xiàn)截?cái)啵M(jìn)行隨機(jī)寫(xiě)的效果。
?

任何burst寫(xiě)入的數(shù)據(jù)之后可以是后續(xù)的讀取命令。要在不截?cái)?/span>burst寫(xiě)入的情況下執(zhí)行后續(xù)讀,應(yīng)滿(mǎn)足tWTR,如圖所示。
(1)發(fā)送寫(xiě)命令,兩個(gè)周期完成寫(xiě)入burst 4
(2)寫(xiě)入完成后的第一個(gè)CK邊沿開(kāi)始(注意先要找最后數(shù)據(jù)的DQS,然后再找該DQS后的CK上升沿),延遲tWTR,圖中是一個(gè)CK(參數(shù)見(jiàn)后圖根據(jù)頻率可能是1或者2CK)。A10=0不使能自動(dòng)預(yù)充。
(3)新的讀命令。和寫(xiě)是同一設(shè)備可以是不同行。
(4)CL時(shí)間之后,顆粒返回?cái)?shù)據(jù)。(CL的含義見(jiàn)讀部分)
?

?

?

如下圖所示,任何burst寫(xiě)入的數(shù)據(jù)都可能被隨后的READ命令截?cái)?。注意,只有?/span>tWTR周期之前成對(duì)數(shù)據(jù)才會(huì)寫(xiě)入內(nèi)部陣列,并且任何后續(xù)數(shù)據(jù)都必須用DM屏蔽。
(1)寫(xiě)數(shù)據(jù)命令, 假設(shè)burst=4
(2)假設(shè)只想寫(xiě)入2個(gè)數(shù)據(jù),就轉(zhuǎn)為讀,則在第一個(gè)DQS后,MASK掉后續(xù)的DQS數(shù)據(jù),即后面的DQ時(shí)DM=1,然后tWTR之后讀。tWTR的參考是找有效DQS時(shí)鐘后的CK的上升沿。
(3)讀命令
(4)延遲CL之后顆粒返回?cái)?shù)據(jù)。
?

如果沒(méi)有使能A10=1自動(dòng)寫(xiě)預(yù)充,則WRITE burst之后可以是同一bank的預(yù)充電命令。
如圖所示。任何WRITE burst的數(shù)據(jù)都可能被后續(xù)的PRECHARGE命令截?cái)唷?/span>
(1)寫(xiě)命令
(2)tDQSS比較大。大于1CK(最大不大于1.25CK)后,DQS輸出數(shù)據(jù)。
(3)要提前截?cái)?/span>,此時(shí)DM=1 可以MASK掉不需要寫(xiě)入的數(shù)據(jù)(圖中所寫(xiě)實(shí)際此時(shí)顆粒也不關(guān)心DM了),此時(shí)只寫(xiě)了2個(gè)數(shù)據(jù)。
(4)tWR周期以最后DQS有效數(shù)據(jù)后的第一個(gè)CK上升沿開(kāi)始,這里是2CK,此時(shí)間內(nèi)顆粒不關(guān)心DQS,DM。
(5)tWR之后發(fā)送預(yù)充命令。
注意,只有在tWR周期之前的成對(duì)數(shù)據(jù)(雙沿操作)才會(huì)寫(xiě)入內(nèi)部陣列,任何后續(xù)數(shù)據(jù)都應(yīng)該用DM屏蔽(但是圖中寫(xiě)的Don’t Care??,這里控制器還是要求必須要DM數(shù)據(jù)嗎 )。
?

要在不截?cái)?/span>WRITE burst的情況下遵循WRITE,應(yīng)滿(mǎn)足tWR,如圖所示。
(1)寫(xiě)命令
(2)tDQSS比較大。大于1CK(最大不大于1.25CK)后,DQS輸出數(shù)據(jù),兩個(gè)周期完成burst 4傳輸。
(3)tWR周期之后,可以發(fā)送預(yù)充點(diǎn)命令。tWR參數(shù)見(jiàn)后圖。
(4)預(yù)充電命令。
?

?

?

在PRECHARGE命令之后,在滿(mǎn)足tRP之前,不能向同一bank發(fā)出后續(xù)命令。
tRP對(duì)應(yīng)3或4個(gè)CK。
?

?

?
@todo 為什么沒(méi)有寫(xiě)終止而讀有,為什么讀到寫(xiě)不能無(wú)縫切換,寫(xiě)到讀可以無(wú)縫切換。
下一篇繼續(xù)