深入理解DDR:DDR3的運行全流程
掃描二維碼
隨時隨地手機看文章
DDR3的運行全流程涵蓋了從初始化到數(shù)據(jù)讀寫,再到刷新和低功耗模式的復(fù)雜操作。本文將詳細解析DDR3內(nèi)存的運行機制,包括其基本原理、關(guān)鍵操作以及如何通過各種命令和時序控制來實現(xiàn)高效的數(shù)據(jù)處理。
通過深入了解DDR3內(nèi)存的運行全流程,我們可以更好地理解實際使用中DDR是如何工作的,并為理解DDR4/DDR5等更復(fù)雜的內(nèi)存使用提供參考。
下面是DDR3運行過程的可能的狀態(tài)轉(zhuǎn)換:
可以把這整個流程分成:初始化,動態(tài)配置更新,刷新和自刷新,讀寫數(shù)據(jù)這幾個部分。
-
DDR3 SDRAM 初始化
DDR3 SDRAM從上電到進入空閑狀態(tài)的過程中,經(jīng)歷了一系列初始化步驟,包括上電、復(fù)位、初始化、ZQ校準(zhǔn)和空閑狀態(tài)。
Power On -> Reset Procedure -> Initialization -> ZQCL -> Idle
1). 上電(Power On)
-
DDR3 SDRAM芯片上電后,需要一段時間讓電源電壓穩(wěn)定,確保所有內(nèi)部電路都處于正常工作狀態(tài)。
-
這一階段通常需要幾百微秒到幾毫秒的時間。
操作:
-
電源電壓逐漸上升至穩(wěn)定狀態(tài),確保所有內(nèi)部電路都處于正常工作狀態(tài)。
-
內(nèi)存控制器監(jiān)控電源電壓,確保電壓達到規(guī)定的穩(wěn)定值。
2). 復(fù)位(Reset Procedure)
-
復(fù)位過程用于將DDR3 SDRAM芯片恢復(fù)到已知的初始狀態(tài),確保所有內(nèi)部寄存器和狀態(tài)機都處于默認(rèn)狀態(tài)。
-
這一階段通常需要幾百納秒到幾微秒的時間。
操作:
-
內(nèi)存控制器發(fā)送復(fù)位命令(Reset Command)。
-
內(nèi)存芯片接收到復(fù)位命令后,內(nèi)部狀態(tài)機重置,所有寄存器和配置回到默認(rèn)狀態(tài)。
3). 初始化(Initialization)
-
初始化過程用于配置DDR3 SDRAM芯片的各種參數(shù),使其準(zhǔn)備好進行正常操作。
-
這一階段包括預(yù)置操作、模式寄存器設(shè)置(MRS)等步驟。
-
預(yù)置操作(Precharge All):將所有內(nèi)存行預(yù)置為未激活狀態(tài)。
-
操作:內(nèi)存控制器發(fā)送Precharge All命令,使所有內(nèi)存行處于未激活狀態(tài)。
-
模式寄存器設(shè)置(Mode Register Set, MRS)::配置DDR3 SDRAM的初始工作模式,包括時序參數(shù)、突發(fā)長度、自刷新周期等。
-
操作:內(nèi)存控制器發(fā)送MRS命令,配置內(nèi)存芯片的初始工作模式。
4). ZQ校準(zhǔn)(ZQ Calibration, ZQCL)
-
ZQ校準(zhǔn)用于確保DDR3 SDRAM芯片的輸出驅(qū)動器阻抗與標(biāo)準(zhǔn)阻抗匹配,減少信號反射和噪聲。
-
這一階段包括ZQ校準(zhǔn)長(ZQCL)和ZQ校準(zhǔn)短(ZQCS)兩種模式。
-
ZQ校準(zhǔn)長(ZQCL):通過外部240Ω標(biāo)準(zhǔn)電阻進行阻抗匹配校準(zhǔn)。
-
操作:內(nèi)存控制器發(fā)送ZQCL命令,啟動阻抗匹配校準(zhǔn)過程。內(nèi)存芯片通過外部240Ω標(biāo)準(zhǔn)電阻進行阻抗匹配,調(diào)整內(nèi)部驅(qū)動器的阻抗。
-
ZQ校準(zhǔn)短(ZQCS):用于快速重新校準(zhǔn)阻抗匹配。
-
操作:內(nèi)存控制器發(fā)送ZQCS命令,啟動快速阻抗匹配校準(zhǔn)過程。
5). 空閑狀態(tài)(Idle)
-
空閑狀態(tài)是指DDR3 SDRAM芯片在完成初始化和校準(zhǔn)后,等待接收新的命令或進行數(shù)據(jù)傳輸?shù)臓顟B(tài)。
-
在空閑狀態(tài)下,內(nèi)存芯片可以進行自刷新操作,以保持?jǐn)?shù)據(jù)的完整性。
-
動態(tài)配置更新
DDR3 SDRAM從空閑狀態(tài)(IDLE)到模式寄存器設(shè)置(MRS)、內(nèi)存保護寄存器(MPR)、寫入對齊(Write Leveling)再到空閑狀態(tài)(IDLE)的全流程。
IDLE->MRS、MPR、Write Leveling->IDLE
1). 模式寄存器設(shè)置(MRS):
-
模式寄存器設(shè)置(Mode Register Set, MRS)用于配置DDR3 SDRAM的初始工作模式,包括時序參數(shù)、突發(fā)長度、自刷新周期等。
-
這一步驟通常在初始化過程中多次執(zhí)行,以配置不同的模式寄存器。
-
具體步驟:
-
設(shè)置基本模式寄存器(MR0):配置基本的工作模式,如突發(fā)長度、CAS延遲等。
-
設(shè)置擴展模式寄存器(MR1):配置高級的工作模式,如溫度補償自刷新、動態(tài)刷新等。
-
設(shè)置其他模式寄存器(MR2, MR3):配置更高級的功能,如寫入恢復(fù)時間、片內(nèi)終結(jié)等。
2). 內(nèi)存保護寄存器(MPR)
-
內(nèi)存保護寄存器(Memory Protection Register, MPR)用于配置DDR3 SDRAM的內(nèi)存保護功能,如錯誤檢測和糾正(ECC)等。
-
這一步驟通常在初始化過程中執(zhí)行,以確保數(shù)據(jù)的完整性和安全性。
-
具體步驟:
-
配置MPR:配置內(nèi)存保護功能,如ECC。
3). 寫入校準(zhǔn)(Write Leveling)
-
寫入校準(zhǔn)(Write Leveling)是一種時序校準(zhǔn)技術(shù),用于優(yōu)化寫入操作的時序。通過動態(tài)調(diào)整DQS(數(shù)據(jù)選通信號)的延遲,確保DQS信號和CK(時鐘信號)的邊沿在DRAM引腳處精確對齊,從而減少時序偏差,提高系統(tǒng)的可靠性和性能。
-
具體步驟:
-
內(nèi)存控制器驗證校準(zhǔn)結(jié)果,確保DQS信號和CK信號的邊沿精確對齊。
-
調(diào)整后的延遲值被存儲在內(nèi)存芯片的寄存器中。
-
內(nèi)存芯片內(nèi)部的校準(zhǔn)電路通過比較訓(xùn)練模式數(shù)據(jù)的到達時間和預(yù)期時間,調(diào)整DQS信號的延遲。
-
內(nèi)存控制器發(fā)送訓(xùn)練模式數(shù)據(jù),用于校準(zhǔn)DQS信號的延遲。
-
內(nèi)存控制器發(fā)送MRS命令,啟動Write Leveling校準(zhǔn)過程。
-
啟動Write Leveling校準(zhǔn):
-
發(fā)送訓(xùn)練模式數(shù)據(jù):
-
調(diào)整DQS信號的延遲:
-
存儲校準(zhǔn)結(jié)果:
-
驗證校準(zhǔn)結(jié)果:
4). 返回空閑狀態(tài)(IDLE)
-
在完成MRS、MPR和Write Leveling校準(zhǔn)后,內(nèi)存控制器使內(nèi)存芯片返回空閑狀態(tài),等待新的命令或進行數(shù)據(jù)傳輸。
3.刷新和自刷新
刷新命令(Refresh Command)和自刷新操作(Self-Refresh Operation)是兩種不同的機制,用于確保存儲器中的數(shù)據(jù)保持完整性和可靠性。
IDLE->Refreshing->IDLE
IDLE->Self Refreshing->IDLE
1). Refresh
刷新命令(Refresh Command)是DDR3 SDRAM在正常操作期間用于維持?jǐn)?shù)據(jù)完整性的一種機制。由于DRAM的特性,它需要定期刷新以保持?jǐn)?shù)據(jù)不丟失。刷新命令是非持久性的,意味著每次刷新都需要顯式地發(fā)出。在刷新周期中,所有Bank必須處于預(yù)充電狀態(tài),并且必須滿足最小預(yù)充電時間tRP(min)。刷新周期的平均周期間隔為tREFI。
特點:
-
需要定期發(fā)出,以保持?jǐn)?shù)據(jù)不丟失。
-
刷新周期由內(nèi)部刷新控制器控制,不需要外部地址控制。
-
刷新命令的延遲(tRFC(min))必須在下一次有效命令之前滿足。
2). Self-Refresh
自刷新操作(Self-Refresh Operation)是一種特殊的刷新模式,允許DDR3 SDRAM在沒有外部時鐘信號的情況下保持?jǐn)?shù)據(jù)。在這種模式下,DRAM內(nèi)部的定時器負(fù)責(zé)刷新操作,這在系統(tǒng)其他部分需要關(guān)閉電源時非常有用。
特點:
-
允許在沒有外部時鐘信號的情況下刷新內(nèi)存。
-
進入自刷新模式需要通過特定的命令序列,包括預(yù)充電所有Bank、設(shè)置自刷新命令(SRE)等。
-
退出自刷新模式也需要特定的命令序列,并且可能需要等待一段時間以確保內(nèi)部刷新完成。
-
在自刷新模式下,除了CKE和RESET#之外的所有外部控制信號都是“不要關(guān)心”的狀態(tài)。
3). 兩種刷新對比
-
應(yīng)用場景: Refresh Command適用于DDR3 SDRAM的正常操作期間,而Self-Refresh Operation適用于系統(tǒng)需要關(guān)閉電源或其他部分需要暫停時。
-
控制方式: Refresh Command需要外部系統(tǒng)定期發(fā)出,而Self-Refresh Operation由DRAM內(nèi)部定時器控制。
-
電源需求: Refresh Command需要外部時鐘信號,而Self-Refresh Operation可以在沒有外部時鐘信號的情況下進行。
-
復(fù)雜性: Refresh Command相對簡單,只需定期發(fā)出即可;Self-Refresh Operation則涉及更復(fù)雜的命令序列和狀態(tài)管理。
在實際應(yīng)用中,選擇使用Refresh Command還是Self-Refresh Operation取決于具體的應(yīng)用場景和電源管理需求。例如,在需要低功耗模式的便攜設(shè)備中,Self-Refresh Operation可能更為合適,因為它允許系統(tǒng)在不完全關(guān)閉的情況下減少功耗。而在高性能計算應(yīng)用中,可能更傾向于使用Refresh Command以確保數(shù)據(jù)的實時刷新。
-
讀數(shù)據(jù)
在進入IDLE狀態(tài)后,就可以進行讀寫操作了。
IDLE->ACT->READ/READA->Precharge
1). 基本讀操作過程
-
激活命令(ACTIVE Command):
-
首先,需要通過ACTIVE命令激活目標(biāo)Bank,這涉及到提供BA(Bank Address)和ROW地址。
-
激活命令將選定的Bank和ROW置于活動狀態(tài),以便進行后續(xù)的讀或?qū)懖僮鳌?
-
讀命令(READ Command):
-
在Bank激活后,通過READ命令指定要讀取的列(COLUMN)地址。
-
讀命令將數(shù)據(jù)從指定的ROW和COLUMN中讀出,并準(zhǔn)備通過DQ(數(shù)據(jù))引腳輸出。
-
數(shù)據(jù)輸出:
-
讀取的數(shù)據(jù)通過DQ引腳輸出,并由DQS(數(shù)據(jù) strobe)信號進行同步。
-
數(shù)據(jù)輸出遵循特定的時序,包括讀 preamble、數(shù)據(jù)保持時間和postamble。
-
預(yù)充電命令(PRECHARGE Command):
-
讀操作完成后,需要通過PRECHARGE命令關(guān)閉當(dāng)前的Bank,以便進行下一次操作。
-
預(yù)充電命令確保所有數(shù)據(jù)傳輸完成,并準(zhǔn)備Bank進入下一次激活狀態(tài)。
2). 不同情況下的讀操作
實際情況中,讀開始的時候DDR很大可能不是處于IDLE狀態(tài),那么就需要等待其他操作處理完成,才能進行讀操作,這也會影響讀的延時。
正在進行Refresh時的讀操作:
-
如果在Refresh操作期間接收到READ命令,必須等待當(dāng)前的Refresh周期完成。
-
一旦Refresh周期完成,才能執(zhí)行READ命令,這可能會增加讀操作的延遲。
同一個Bank的連續(xù)讀操作:
-
如果連續(xù)讀取同一個Bank中的數(shù)據(jù),可以省略重復(fù)的激活步驟,直接使用READ命令。
-
這種情況下,可以利用自動預(yù)充電功能(Auto Precharge),在讀取一個數(shù)據(jù)塊后自動預(yù)充電Bank。
不同Bank之間切換的讀操作:
-
當(dāng)需要從一個Bank切換到另一個Bank進行讀操作時,必須先預(yù)充電當(dāng)前Bank,然后激活目標(biāo)Bank。
-
這種情況下,需要確保滿足Bank間切換所需的最小時間間隔,如tRAS(Active to Precharge Delay)。
突發(fā)長度(Burst Length)和突發(fā)類型(Burst Type):
-
讀操作可以配置不同的突發(fā)長度(如BL4, BL8)和突發(fā)類型(如Sequential, Interleave)。
-
突發(fā)長度和類型的選擇會影響數(shù)據(jù)的讀取順序和性能。
讀操作中的寫操作:
-
在讀操作期間,如果需要寫入數(shù)據(jù),必須等待當(dāng)前的讀操作完成。
-
寫操作可能需要等待特定的寫入恢復(fù)時間(tWR),以確保數(shù)據(jù)的完整性。
讀操作中的命令沖突:
-
如果在讀操作期間接收到其他命令(如REFRESH, PRECHARGE),必須根據(jù)命令優(yōu)先級和時序要求進行處理。
-
例如,REFRESH命令通常具有最高優(yōu)先級,必須立即執(zhí)行。
-
寫操作
進入IDLE狀態(tài)后就可以進行寫操作了。
IDLE->ACT->WRITE/WRITEA->Precharge
1). 基本寫操作過程
-
激活命令(ACTIVE Command):
-
首先,需要通過ACTIVE命令激活目標(biāo)Bank,這涉及到提供BA(Bank Address)和ROW地址。
-
激活命令將選定的Bank和ROW置于活動狀態(tài),以便進行后續(xù)的寫操作。
-
寫命令(WRITE Command):
-
在Bank激活后,通過WRITE命令指定要寫入的列(COLUMN)地址,并提供要寫入的數(shù)據(jù)。
-
寫命令將數(shù)據(jù)寫入到指定的ROW和COLUMN中。
-
數(shù)據(jù)輸入:
-
要寫入的數(shù)據(jù)通過DQ引腳輸入,并由DQS(數(shù)據(jù) strobe)信號進行同步。
-
數(shù)據(jù)輸入遵循特定的時序,包括寫 preamble、數(shù)據(jù)保持時間和postamble。
-
預(yù)充電命令(PRECHARGE Command):
-
寫操作完成后,需要通過PRECHARGE命令關(guān)閉當(dāng)前的Bank,以便進行下一次操作。
-
預(yù)充電命令確保所有數(shù)據(jù)傳輸完成,并準(zhǔn)備Bank進入下一次激活狀態(tài)。
2). 不同情況下的寫操作
同樣,實際情況中,寫開始的時候DDR很大可能不是處于IDLE狀態(tài),那么就需要等待其他操作處理完成,才能進行寫操作,這也會影響寫的延時。
正在進行Refresh時的寫操作:
-
如果在Refresh操作期間接收到WRITE命令,必須等待當(dāng)前的Refresh周期完成。
-
一旦Refresh周期完成,才能執(zhí)行WRITE命令,這可能會增加寫操作的延遲。
同一個Bank的連續(xù)寫操作:
-
如果連續(xù)寫入同一個Bank中的數(shù)據(jù),可以省略重復(fù)的激活步驟,直接使用WRITE命令。
-
這種情況下,可以利用自動預(yù)充電功能(Auto Precharge),在寫入一個數(shù)據(jù)塊后自動預(yù)充電Bank。
不同Bank之間切換的寫操作:
-
當(dāng)需要從一個Bank切換到另一個Bank進行寫操作時,必須先預(yù)充電當(dāng)前Bank,然后激活目標(biāo)Bank。
-
這種情況下,需要確保滿足Bank間切換所需的最小時間間隔,如tRAS(Active to Precharge Delay)。
突發(fā)長度(Burst Length)和突發(fā)類型(Burst Type):
-
寫操作可以配置不同的突發(fā)長度(如BL4, BL8)和突發(fā)類型(如Sequential, Interleave)。
-
突發(fā)長度和類型的選擇會影響數(shù)據(jù)的寫入順序和性能。
寫操作中的讀操作:
-
在寫操作期間,如果需要讀取數(shù)據(jù),必須等待當(dāng)前的寫操作完成。
-
讀操作可能需要等待特定的讀取恢復(fù)時間,以確保數(shù)據(jù)的完整性。
寫操作中的命令沖突:
-
如果在寫操作期間接收到其他命令(如REFRESH, PRECHARGE),必須根據(jù)命令優(yōu)先級和時序要求進行處理。
-
例如,REFRESH命令通常具有最高優(yōu)先級,必須立即執(zhí)行。
初始化、配置、刷新機制、數(shù)據(jù)傳輸這些就是DDR3的基本操作和所有使用DDR3的可能都操作。其他復(fù)雜的情況只是這些基本操作都組合。至于DDR4/DDR5甚至LPDDR4/5這些DDR,其操作也基本類似。所以先理解DDR3的基本操作,可以更容易理解以后復(fù)雜的操作和場景。
后紀(jì)
技術(shù)很重要,技術(shù)背后的思想更重要!
技術(shù)背后的某些思想就是你解決以后問題的鑰匙。我的文章可能一篇中知識點不太多,但是力求讓你能深入理解,為你進階打下基礎(chǔ)。如果有一點點收獲,也算是我對中國芯片行業(yè)的一點點貢獻吧。





