深入淺出DDR系列(二)--DDR工作原理【轉】


轉自:https://blog.csdn.net/u012489236/article/details/107750942

學習完了DDR的基本組成和硬件結構原理之后,從整體上了解了DDR的特性和靜態圖,包括原理、管腳圖等。那么本章就要從動態的角度來分析時序結構,包括read/write的整個過程到數據返回發生了什么,其中包括以下內容

DDR是如何完成Read、Write 等的操作

DDR的基本命令

DDR的時序參數

DDR的性能分析

1. DRAM基本組成

 

 


對於DRAM,其主要由行和列組成,每一個bit中都是由類似右下圖的類晶體管的結構組成,對於sdram的數據,可以通過控制column和row就可以訪問sdram的隨機地址的內容。

讀取某一個bit的狀態,就是選中word line,那么圖示中的晶體管M1就會導通,通過bit line的sense就可以感知到這個時候電容Cs上的狀態,例如,現在如果這個bit的狀態為1,那么導通之后就會從bit line上得到1,反之也是同樣的道理。

向某一bit寫入1,首先通過row decoder選中word line,將會導致m1導通,那么bit line為1,會導致電容Cs充電,導致其電平為1,如果要寫入,那么bit line的電平 為0,將會導致電容Cs放電,致使此時的電平為0。

由上面可以看出一個位只能表示一個bit,那么我們想讀取多個位的時候,該怎么辦呢?那就出現了ddr中的bank的概念,由多個memory array就組成了一個bank,如下圖,一次可以讀取2bit/4bit/8bit的數據

 

 

 

由多個bank就可以組成一個memory device,如下圖,一個dram的芯片,由8個banks組成,而每個bank由4個memory array構成,而此時每個bank輸出4個bit的I/O bus,那么為什么會出現bank的概念呢?動態內存區別於靜態內存要定時刷新,每讀取一個狀態的時候,都需要重新充電。如果沒有采用bank,假設我們現在要讀取01-08地址的數據,當讀取01的地址后,要等這個bank自刷新后才能讀取02地址的值,而采用8個bank之后,沒有這類問題,例如我們讀取完01地址之后,那么讀取02,因為02與01的控制方式不同,所以對於這段時間01可以后台的完成自刷新,依次類推,那么就可以很好的解決動態內存需要刷新的問題。

 

 

 

上圖中,對於RANK、DIMM等在深入淺出DDR系列(一)–DDR原理篇中已經詳細介紹了。

2. DDR工作原理
了解了DDR的基本組成后,我們來看看DDR如何來完成一次的讀寫過程。如下圖所示,DRAM 的相關操作在內部大概可以分為以下的四個階段:

 

 

 

command transport and decode: 在這個階段,Host 端會通過 Command Bus 和 Address Bus 將具體的 Command 以及相應參數傳遞給 DRAM。DRAM 接收並解析 Command,接着驅動內部模塊進行相應的操作。其中會根據將addr bus上的數據解碼成對應的row address和通過bank control解碼后得到對應的bank,其次對應的column也會解碼得到對應的地址

in bank data movement: 在這個階段,第一階段發送需要讀取的 Column 的地址給 DRAM。然后 DRAM 再將 Active Command 所選中的 Row 中,DRAM 就將 Memory Array 中的數據從 DRAM Cells 中讀出到 Sense Amplifiers,或者將數據從 Sense Amplifiers 寫入到 DRAM Cells。

in device data movement: 這個階段中,數據將通過 IO 電路緩存到 Read Latchs 或者通過 IO 電路和 Write Drivers 更新到 Sense Amplifiers。

system data transport: 在這個階段,進行讀數據操作時,SDRAM 會將數據輸出到數據總線上,進行寫數據操作時,則是 Host 端的 Controller 將數據輸出到總線上。

​ 在上述的四個階段中,每個階段都會有一定的耗時,例如數據從 DRAM Cells 搬運到 Read Latchs 的操作需要一定的時間,因此在一個具體的操作需要按照一定時序進行。同時,由於內部的一些部件可能會被多個操作使用,例如讀數據和寫數據都需要用到部分 IO 電路,因此多個不同的操作通常不能同時進行,也需要遵守一定的時序。此外,某些操作會消耗很大的電流,為了滿足 SDRAM 設計上的功耗指標,可能會限制某一些操作的執行頻率。

3. DRAM基本命令
對於一款ddr,我們需要知道通過什么樣的方式來控制完成我們需要,我們來看看ddr的狀態,ddr的工作就是在這幾個狀態之間切換

 

 

 

在芯片上電后,完成初始化后,dram處於idle階段,上圖是需要進入各個階段的時候,應該需要進行那些基本的操作,對於ddr使用比較頻繁的幾個基本命令訪問方式如下

刷新模式:儲體中電容的數據有效是有時間限制的,所以為了保證數據的不丟失,所以要對ddr進行定時的刷新,SDRAM內部有一個行地址生成器(也稱刷新計數器)用來自動的依次生成行地址。由於刷新是針對一行中的所有存儲體進行。該模式是由Host主動控制DRAM完成刷新,存儲體中電容的數據有效保存期上限是64ms(毫秒,1/1000秒),也就是說每一行刷新的循環周期是64ms。
自我刷新模式:當系統進入低功耗模式,只需要發送一條 SRF指令,主要用於休眠模式低功耗狀態下的數據保存,比較常見的應用是STR(Suspend to RAM,休眠掛起於內存)。就進入了該模式,此時不再依靠系統時鍾工作,而是根據內部的時鍾進行刷新操作。期間除了CKE之外的所有外部信號都是無效的(無需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式並進入正常操作狀態
MRS模式(mode register set):模式寄存器中的數據控制着 DDR2 SDRAM的操作模式.它控制着 CAS 延遲, 突發長度, 突發順序, 測試模式, DLL復位, WR等各種選項,支持着 DDR2 SDRAM 的各種應用. 模式寄存器的默認值沒有被定義, 所以上電之后必須按規定的時序規范來設定模式寄存器的值。
EMRS 擴展模式寄存器:存儲着激活或禁止DLL的控制信息, 輸出驅動強度, ODT 值的選擇 和附加延遲等信息
預充電:對一行讀寫操作后,關閉現有工作行,准備打開新行的操作就是預充電。
讀過程:訪問操作開始ACT一個激活命令,主要是激活bank和rol,就等於選通了某一Bank的某一行,接着發送一個read指令,就可以通過數據總線將數據送出去了,然后就進行預充電,恢復到讀寫的狀態,預充電完成后,就恢復到idle狀態。
寫過程:與讀過程基本類似。
DRAM的基本命令是通過操作各種控制信號/地址信號的組合來完成,下表是DRAM的命令表

 

 

 

4. DDR的時序參數
4. 1. Row Active Command
在進行數據的讀寫前,Controller 需要先發送 Row Active Command,打開 DRAM Memory Array 中的指定的 Row。Row Active Command 的時序如下圖所示:

 

 

 

tRCD:RAS-to-CAS Delay(tRCD),內存行地址傳輸到列地址的延遲時間。
Row Active Command 通過地址總線指明需要打開某一個 Bank 的某一個 Row。DRAM 在接收到該 Command 后,會打開該 Row 的 Wordline,將其存儲的數據讀取到 Sense Amplifiers 中,這一時間定義為 tRCD(RCD for Row Address to Column Address Delay)。DRAM 在完成 Row Sense 階段后,Controller 就可以發送 Read 或 Write Command 進行數據的讀寫了。這也意味着,Controller 在發送 Row Active Command 后,需要等待 tRCD 時間才能接着發送 Read 或者 Write Command 進行數據的讀寫。

tRAS: Row Active Time,內存行地址選通延遲
由於 DRAM 的特性,Row 中的數據在被讀取到 Sense Amplifiers 后,需要進行 Restore 的操作。Restore 操作可以和數據的讀取同時進行,即在這個階段,Controller 可能發送了 Read Command 進行數據讀取。

DRAM 接收到 Row Active Command 到完成 Row Restore 操作所需要的時間定義為 tRAS(RAS for Row Address Strobe)。
Controller 在發出一個 Row Active Command 后,必須要等待 tRAS 時間后,才可以發起另一次的 Precharge 和 Row Access。

4.2 Column Read Command
Controller 發送 Row Active Command 並等待 tRCD 時間后,再發送 Column Write Command 進行數據寫入。 數據 Burst Length 為 8 時的 Column Write Command 時序如下圖所示:

 

 

 

tCWD/tCL/tCWL:內存CAS延遲時間
Column Write Command 通過地址總線 A[0:9] 指明需要寫入數據的 Column 的起始地址。Controller 在發送完 Write Command 后,需要等待 tCWD (CWD for Column Write Delay) 時間后,才可以發送待寫入的數據。tCWD 在一些描述中也稱為 tCWL(CWL for Column Write Latency)

tWR(WR for Write Recovery)
DRAM 接收完數據后,需要一定的時間將數據寫入到 DRAM Cells 中,這個時間定義為 tWR(WR for Write Recovery)。該值說明在一個激活的bank中完成有效的寫操作及預充電前,必須等待多少個時鍾周期。這段必須的時鍾周期用來確保在預充電發生前,寫緩沖中的數據可以被寫進內存單元中。同樣的,過低的tWD雖然提高了系統性能,但可能導致數據還未被正確寫入到內存單元中,就發生了預充電操作,會導致數據的丟失及損壞。

4.3 Precharge Command
要訪問 DRAM Cell 中的數據,需要先進行 Precharge 操作。相應地,在 Controller 發送 Row Active Command 訪問一個具體的 Row 前, Controller 需要發送 Precharge Command 對該 Row 所在的 Bank 進行 Precharge 操作。下面的時序圖描述了 Controller 訪問一個 Row 后,執行 Precharge,然后再訪問另一個 Row 的流程。

 

 

 

DRAM 執行 Precharge Command 所需要的時間定義為 tRP(RP for Row Precharge)。Controller 在發送一個 Row Active Command 后,需要等待 tRC(RC for Row Cycle)時間后,才能發送第二個 Row Active Command 進行另一個 Row 的訪問。

從時序圖上我們可以看到,tRC = tRAS + tRP,tRC 時間決定了訪問 DRAM 不同 Row 的性能。在實際的產品中,通常會通過降低 tRC 耗時或者在一個 Row Cycle 執行盡可能多數據讀寫等方式來優化性能。

4.4 Row Refresh Command
一般情況下,為了保證 DRAM 數據的有效性,Controller 每隔 tREFI(REFI for Refresh Interval) 時間就需要發送一個 Row Refresh Command 給 DRAM,進行 Row 刷新操作。DRAM 在接收到 Row Refresh Command 后,會根據內部 Refresh Counter 的值,對所有 Bank 的一個或者多個 Row 進行刷新操作。

DRAM 刷新的操作與 Active + Precharge Command 組合類似,差別在於 Refresh Command 是對 DRAM 所有 Bank 同時進行操作的。下圖為 DRAM Row Refresh Command 的時序圖:

 

 

 

DRAM 完成刷新操作所需的時間定義為 tRFC(RFC for Refresh Cycle)。

tRFC 包含兩個部分的時間,一是完成刷新操作所需要的時間,由於 DRAM Refresh 是同時對所有 Bank 進行的,刷新操作會比單個 Row 的 Active + Precharge 操作需要更長的時間;tRFC 的另一部分時間則是為了降低平均功耗而引入的延時,DRAM Refresh 操作所消耗的電流會比單個 Row 的 Active + Precharge 操作要大的多,tRFC 中引入額外的時延可以限制 Refresh 操作的頻率。

4.5 Read Cycle
一個完整的 Burst Length 的 Read Cycle 如下圖所示:

 

 

 

下面是DDR常見的一些參數及定義如下:

參數 說明 功能
tMRD Mode Register Delay 表示在進行初始化時,從LOAD MODE REGISTER命令發出到可以執行ACTIVE/REFRESH命令的時間
tRP Row Precharge Time 表示行預充時間,用來設定在另一行能被激活之前,現有的工作行需要充電時間
tRCD RAS to CAS delay 行尋址到列地址的延時時間
tCL CAS Latency 表示內存讀寫操作前列地址的潛伏時間
tWR Write Recovery TIme 表示寫恢復延時,指在一個激活bank中完成有效寫操作及預充電前,必須等待的時鍾周瓊
tRAS Row Active TIme 表示從內存行有效命令發出至預充電命令發出之間的最短時間
tWTR 表示讀到寫延時,在最后一次有效寫操作和下一次讀操作之間必須等待的時間
tREF Row refresh time 表示行刷新所需要時間
上述的 DRAM Timing 中的一部分參數可以編程設定,例如 tCAS、tAL、Burst Length 等。這些參數通常是在 Host 初始化時,通過 Controller 發起 Load Mode Register Command 寫入到 DRAM 的 Mode Register 中。DRAM 完成初始化后,就會按照設定的參數運行。

5. 性能分析
在學習完DDR的基本操作和時序參數之后,我們就看看性能的影響。當頻率和位寬固定后,帶寬也就不可更改,但是在內存的工作周期內,不可能總處於數據傳輸的狀態,因為要有命令、尋址等必要的過程。那么這些操作占用的時間越短,內存工作的效率就越高,性能也就越好。

對於我們來說,最好的方法是提高頻率,但是提高頻率會受多方面的影響,還有什么辦法提高內存訪問采取速度。

多通道: 現代內存控制器從北橋移入CPU內部,而內存控制器都可以同時操作多個通道。比如現在的筆記本開始支持雙通道、三通道,如果數據分布在不同通道的內存條上,內存控制器就可以不用管上面的這些延遲時序,同時可以讀取它們,速度可以增加兩倍,甚至三倍。
交織方式(Interleaving): 同一塊內存分布到不同的通道中去,這樣無論Cache命中與否都可以同時存取,多通道的技術才能發揮更大的用處
超頻內存: 也就是提升DDR的頻率來增加速度
6. 總結
對於DDR的讀寫以及一些時序參數的原理性知識后,下一章就進入到DDR的驅動調式篇,主要是對於一款控制器,我們該如何去調試DDR。其實對於DDR的調式,主要的讀寫的控制,都是由DDR的控制器完成了,我們主要是通過MRS模式/EMRS模式來完成對於DDR參數的配置,而對於MRS模式的使用,已經集成到DDR控制器中完成了,我們只需要根據控制器手冊配置相應的寄存器就可以完成對於DDR調試。

7. 參考文檔
DRAM Memory-Access Protocol
DRAM Timing
DDR2_SDRAM操作時序
————————————————
版權聲明:本文為CSDN博主「奇小葩」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012489236/article/details/107750942


免責聲明!

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



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