从动态的角度分析DDR的时序结构
從整體上了解了DDR的特性和靜態(tài)圖,包括原理、管腳圖等。那么本章就要從動(dòng)態(tài)的角度來分析時(shí)序結(jié)構(gòu),包括read/write的整個(gè)過程到數(shù)據(jù)返回發(fā)生了什么。
一,DRAM基本組成
對(duì)于DRAM,其主要由行和列組成,每一個(gè)bit中都是由類似右下圖的類晶體管的結(jié)構(gòu)組成,對(duì)于sdram的數(shù)據(jù),可以通過控制column和row就可以訪問sdram的隨機(jī)地址的內(nèi)容。
讀取某一個(gè)bit的狀態(tài),就是選中word line,那么圖示中的晶體管M1就會(huì)導(dǎo)通,通過bit line的sense就可以感知到這個(gè)時(shí)候電容Cs上的狀態(tài),例如,現(xiàn)在如果這個(gè)bit的狀態(tài)為1,那么導(dǎo)通之后就會(huì)從bit line上得到1,反之也是同樣的道理。
向某一bit寫入1,首先通過row decoder選中word line,將會(huì)導(dǎo)致m1導(dǎo)通,那么bit line為1,會(huì)導(dǎo)致電容Cs充電,導(dǎo)致其電平為1,如果要寫入,那么bit line的電瓶 為0,將會(huì)導(dǎo)致電容Cs放電,致使此時(shí)的電平為0。
由上面可以看出一個(gè)位只能表示一個(gè)bit,那么我們想讀取多個(gè)位的時(shí)候,該怎么辦呢?那就出現(xiàn)了ddr中的bank的概念,由多個(gè)memory array就組成了一個(gè)bank,如下圖,一次可以讀取2bit/4bit/8bit的數(shù)據(jù)
一個(gè)多個(gè)bank就可以組成一個(gè)memory device,如下圖,一個(gè)dram的芯片,由8個(gè)banks組成,而每個(gè)bank由4個(gè)memory array構(gòu)成,而此時(shí)每個(gè)bank輸出4個(gè)bit的I/O bus,那么為什么會(huì)出現(xiàn)bank的概念呢?動(dòng)態(tài)內(nèi)存區(qū)別于靜態(tài)內(nèi)存要定時(shí)刷新,每讀取一個(gè)狀態(tài)的時(shí)候,都需要重新充電。如果沒有采用bank,假設(shè)我們現(xiàn)在要讀取01-08地址的數(shù)據(jù),當(dāng)讀取01的地址后,要等這個(gè)bank自刷新后才能讀取02地址的值,而采用8個(gè)bank之后,沒有這類問題,例如我們讀取完01地址之后,那么讀取02,因?yàn)?2與01的控制方式不同,所以對(duì)于這段時(shí)間01可以后臺(tái)的完成自刷新,依次類推,那么就可以很好的解決動(dòng)態(tài)內(nèi)存需要刷新的問題。
二,DDR工作原理
了解了DDR的基本組成后,我們來看看DDR如何來完成一次的讀寫過程。如下圖所示,DRAM 相關(guān)操作在內(nèi)部大概可以分為以下的四個(gè)階段:
command transport and decode: 在這個(gè)階段,Host 端會(huì)通過 Command Bus 和 Address Bus 將具體的 Command 以及相應(yīng)參數(shù)傳遞給 DRAM。DRAM 接收并解析 Command,接著驅(qū)動(dòng)內(nèi)部模塊進(jìn)行相應(yīng)的操作。其中會(huì)根據(jù)將addr bus上的數(shù)據(jù)解碼成對(duì)應(yīng)的row address和通過bank control解碼后得到對(duì)應(yīng)的bank,其次對(duì)應(yīng)的column也會(huì)解碼得到對(duì)應(yīng)的地址
in bank data movement: 在這個(gè)階段,第一階段發(fā)送需要讀取的信息 Column 的地址給 DRAM。然后 DRAM 再將 Active Command 所選中的 Row 中,DRAM 就將 Memory Array 中的數(shù)據(jù)從 DRAM Cells 中讀出到 Sense Amplifiers,或者將數(shù)據(jù)從 Sense Amplifiers 寫入到 DRAM Cells。
in device data movement: 這個(gè)階段中,數(shù)據(jù)將通過 IO 電路緩存到 Read Latchs 或者通過 IO 電路和 Write Drivers 更新到 Sense Amplifiers。
system data transport: 在這個(gè)階段,進(jìn)行讀數(shù)據(jù)操作時(shí),SDRAM 會(huì)將數(shù)據(jù)輸出到數(shù)據(jù)總線上,進(jìn)行寫數(shù)據(jù)操作時(shí),則是 Host 端的 Controller 將數(shù)據(jù)輸出到總線上。
在上述的四個(gè)階段中,每個(gè)階段都會(huì)有一定的耗時(shí),例如數(shù)據(jù)從 DRAM Cells 搬運(yùn)到 Read Latchs 的操作需要一定的時(shí)間,因此在一個(gè)具體的操作需要按照一定時(shí)序進(jìn)行。同時(shí),由于內(nèi)部的一些部件可能會(huì)被多個(gè)操作人員使用,例如讀數(shù)據(jù)和寫數(shù)據(jù)都需要用到部分 IO 電路,因此多個(gè)不同的操作通常不能同時(shí)進(jìn)行,也需要遵守一定的時(shí)序。此外,某些操作會(huì)消耗很大的電流,為了滿足 SDRAM 設(shè)計(jì)上的功耗指標(biāo),可能會(huì)限制某一些操作的執(zhí)行頻率。
在芯片上電后,完成初始化后,dram處于idle階段,上圖是需要進(jìn)入各個(gè)階段的時(shí)候,應(yīng)該需要進(jìn)行那些基本的操作,對(duì)于ddr使用比較頻繁的幾個(gè)基本命令訪問方式如下:
刷新模式:儲(chǔ)體中電容的數(shù)據(jù)有效是有時(shí)間限制的,所以為了保證數(shù)據(jù)的不丟失,所以要對(duì)ddr進(jìn)行定時(shí)的刷新,SDRAM內(nèi)部有一個(gè)行地址生成器(也稱刷新計(jì)數(shù)器)用來自動(dòng)的依次生成行地址。由于刷新是針對(duì)一行中的所有存儲(chǔ)體進(jìn)行。該模式是由Host主動(dòng)控制DRAM完成刷新,存儲(chǔ)體中電容的數(shù)據(jù)有效保存期上限是64ms(毫秒,1/1000秒),也就是說每一行刷新的循環(huán)周期是64ms。
自我刷新模式:當(dāng)系統(tǒng)進(jìn)入低功耗模式,只需要發(fā)送一條信息 SRF指令,主要用于休眠模式低功耗狀態(tài)下的數(shù)據(jù)保存,比較常見的應(yīng)用是STR(Suspend to RAM,休眠掛起于內(nèi)存)。就進(jìn)入了該模式,此時(shí)不再依靠系統(tǒng)時(shí)鐘工作,而是根據(jù)內(nèi)部的時(shí)鐘進(jìn)行刷新操作。期間除了CKE之外的所有外部信號(hào)都是無效的(無需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并進(jìn)入正常操作狀態(tài)
MRS模式(mode register set):模式寄存器中的數(shù)據(jù)控制者 DDR2 SDRAM的操作模式.它控制著 CAS 延遲, 突發(fā)長度, 突發(fā)順序, 測試模式, DLL復(fù)位, WR等各種選項(xiàng),支持著 DDR2 SDRAM 的各種應(yīng)用. 模式寄存器的默認(rèn)值沒有被定義, 所以上電之后必須按規(guī)定的時(shí)序規(guī)范來設(shè)定模式寄存器的值。
EMRS 擴(kuò)展模式寄存器:存儲(chǔ)著激活或禁止DLL的控制信息, 輸出驅(qū)動(dòng)強(qiáng)度, ODT 值得選擇 和附加延遲等信息
預(yù)充電:對(duì)一行讀寫操作后,關(guān)閉現(xiàn)有工作行,準(zhǔn)備打開新行的操作就是預(yù)充電。
讀過程:訪問操作開始ACT一個(gè)激活命令,主要是激活bank和rol,就等于選通了某一Bank的某一行,接著發(fā)送一個(gè)read指令,就可以通過數(shù)據(jù)總線將數(shù)據(jù)送出去了,然后就進(jìn)行預(yù)充電,恢復(fù)到讀寫的狀態(tài),預(yù)充電完成后,就恢復(fù)到idle狀態(tài)。
寫過程:與讀過程基本類似。
內(nèi)核資料直通車:最新Linux內(nèi)核源碼資料文檔+視頻資料
學(xué)習(xí)直通車:Linux內(nèi)核源碼/內(nèi)存調(diào)優(yōu)/文件系統(tǒng)/進(jìn)程管理/設(shè)備驅(qū)動(dòng)/網(wǎng)絡(luò)協(xié)議棧
DRAM的基本命令是通過操作各種控制信號(hào)/地址信號(hào)的組合來完成,下表是DRAM的命令表
四,DDR的時(shí)序參數(shù)
4. 1. Row Active Command
在進(jìn)行數(shù)據(jù)的讀寫前,Controller 需要先發(fā)送 Row Active Command,打開 DRAM Memory Array 中的指定的 Row。Row Active Command 的時(shí)序如下圖所示:
tRCD:RAS-to-CAS Delay(tRCD),內(nèi)存行地址傳輸?shù)搅械刂返难舆t時(shí)間。
Row Active Command 通過地址總線指明需要打開某一個(gè) Bank 的某一個(gè) Row。DRAM 在接收到該 Command 后,會(huì)打開該 Row 的 Wordline,將其存儲(chǔ)的數(shù)據(jù)讀取到 Sense Amplifiers 中,這一時(shí)間定義為 tRCD(RCD for Row Address to Column Address Delay)。DRAM 在完成 Row Sense 階段后,Controller 就可以發(fā)送 Read 或 Write Command 進(jìn)行數(shù)據(jù)的讀寫了。這也意味著,Controller 在發(fā)送 Row Active Command 后,需要等待 tRCD 時(shí)間才能接著發(fā)送 Read 或者 Write Command 進(jìn)行數(shù)據(jù)的讀寫。
tRAS: Row Active Time,內(nèi)存行地址選通延遲
由于 DRAM 的特性,Row 中的數(shù)據(jù)在被讀取到 Sense Amplifiers 后,需要進(jìn)行 Restore 的操作。Restore 操作可以和數(shù)據(jù)的讀取同時(shí)進(jìn)行,即在這個(gè)階段,Controller 可能發(fā)送了 Read Command 進(jìn)行數(shù)據(jù)讀取。
DRAM 接收到 Row Active Command 到完成 Row Restore 操作所需要的時(shí)間定義為 tRAS(RAS for Row Address Strobe)。
Controller 在發(fā)出一個(gè) Row Active Command 后,必須要等待 tRAS 時(shí)間后,才可以發(fā)起另一次的 Precharge 和 Row Access。
4.2 Column Read Command
Controller 發(fā)送 Row Active Command 并等待 tRCD 時(shí)間后,再發(fā)送 Column Write Command 進(jìn)行數(shù)據(jù)寫入。 數(shù)據(jù) Burst Length 為 8 時(shí)的 Column Write Command 時(shí)序如下圖所示:
tCWD/tCL/tCWL:內(nèi)存CAS延遲時(shí)間
Column Write Command 通過地址總線 A[0:9] 指明需要寫入數(shù)據(jù)的 Column 的起始地址。Controller 在發(fā)送完 Write Command 后,需要等待 tCWD (CWD for Column Write Delay) 時(shí)間后,才可以發(fā)送待寫入的數(shù)據(jù)。tCWD 在一些描述中也稱為 tCWL(CWL for Column Write Latency)
tWR(WR for Write Recovery)
DRAM 接收完數(shù)據(jù)后,需要一定的時(shí)間將數(shù)據(jù)寫入到 DRAM Cells 中,這個(gè)時(shí)間定義為 tWR(WR for Write Recovery)。該值說明在一個(gè)激活的bank中完成有效的寫操作及預(yù)充電前,必須等待多少個(gè)時(shí)鐘周期。這段必須的時(shí)鐘周期用來確保在預(yù)充電發(fā)生前,寫緩沖中的數(shù)據(jù)可以被寫進(jìn)內(nèi)存單元中。同樣的,過低的tWD雖然提高了系統(tǒng)性能,但可能導(dǎo)致數(shù)據(jù)還未被正確寫入到內(nèi)存單元中,就發(fā)生了預(yù)充電操作,會(huì)導(dǎo)致數(shù)據(jù)的丟失及損壞。
4.3 Precharge Command
要訪問 DRAM Cell 中的數(shù)據(jù),需要先進(jìn)行 Precharge 操作。相應(yīng)地,在 Controller 發(fā)送 Row Active Command 訪問一個(gè)具體的 Row 前, Controller 需要發(fā)送 Precharge Command 對(duì)該 Row 所在的 Bank 進(jìn)行 Precharge 操作。下面的時(shí)序圖描述了 Controller 訪問一個(gè) Row 后,執(zhí)行 Precharge,然后再訪問另一個(gè) Row 的流程。
DRAM 執(zhí)行 Precharge Command 所需要的時(shí)間定義為 tRP(RP for Row Precharge)。Controller 在發(fā)送一個(gè) Row Active Command 后,需要等待 tRC(RC for Row Cycle)時(shí)間后,才能發(fā)送第二個(gè) Row Active Command 進(jìn)行另一個(gè) Row 的訪問。
從時(shí)序圖上我們可以看到,tRC = tRAS + tRP,tRC 時(shí)間決定了訪問 DRAM 不同 Row 的性能。在實(shí)際的產(chǎn)品中,通常會(huì)通過降低 tRC 耗時(shí)或者在一個(gè) Row Cycle 執(zhí)行盡可能多數(shù)據(jù)讀寫等方式來優(yōu)化性能。
4.4 Row Refresh Command
一般情況下,為了保證 DRAM 數(shù)據(jù)的有效性,Controller 每隔 tREFI(REFI for Refresh Interval) 時(shí)間就需要發(fā)送一個(gè) Row Refresh Command 給 DRAM,進(jìn)行 Row 刷新操作。DRAM 在接收到 Row Refresh Command 后,會(huì)根據(jù)內(nèi)部 Refresh Counter 的值,對(duì)所有 Bank 的一個(gè)或者多個(gè) Row 進(jìn)行刷新操作。
DRAM 刷新的操作與 Active + Precharge Command 組合類似,差別在于 Refresh Command 是對(duì) DRAM 所有 Bank 同時(shí)進(jìn)行操作的。下圖為 DRAM Row Refresh Command 的時(shí)序圖:
DRAM 完成刷新操作所需的時(shí)間定義為 tRFC(RFC for Refresh Cycle)。
tRFC 包含兩個(gè)部分的時(shí)間,一是完成刷新操作所需要的時(shí)間,由于 DRAM Refresh 是同時(shí)對(duì)所有 Bank 進(jìn)行的,刷新操作會(huì)比單個(gè) Row 的 Active + Precharge 操作需要更長的時(shí)間;tRFC 的另一部分時(shí)間則是為了降低平均功耗而引入的延時(shí),DRAM Refresh 操作所消耗的電流會(huì)比單個(gè) Row 的 Active + Precharge 操作要大的多,tRFC 中引入額外的時(shí)延可以限制 Refresh 操作的頻率。
4.5 Read Cycle
一個(gè)完整的 Burst Length 的 Read Cycle 如下圖所示:
下面是DDR常見的一些參數(shù)及定義如下:
tMRD Mode Register Delay 表示在進(jìn)行初始化時(shí),從LOAD MODE REGISTER命令發(fā)出到可以執(zhí)行ACTIVE/REFRESH命令的時(shí)間
tRP Row Precharge Time 表示行預(yù)充時(shí)間,用來設(shè)定在另一行能被激活之前,現(xiàn)有的工作行需要充電時(shí)間
tRCD RAS to CAS delay 行尋址到列地址的延時(shí)時(shí)間
tCL CAS Latency 表示內(nèi)存讀寫操作前列地址的潛伏時(shí)間
tWR Write Recovery TIme 表示寫恢復(fù)延時(shí),指在一個(gè)激活bank中完成有效寫操作及預(yù)充電前,必須等待的時(shí)鐘周瓊
tRAS Row Active TIme 表示從內(nèi)存行有效命令發(fā)出至預(yù)充電命令發(fā)出之間的最短時(shí)間
tWTR 表示讀到寫延時(shí),在最后一次有效寫操作和下一次讀操作之間必須等待的時(shí)間
tREF Row refresh time 表示行刷新所需要時(shí)間
上述的 DRAM Timing 中的一部分參數(shù)可以編程設(shè)定,例如 tCAS、tAL、Burst Length 等。這些參數(shù)通常是在 Host 初始化時(shí),通過 Controller 發(fā)起 Load Mode Register Command 寫入到 DRAM 的 Mode Register 中。DRAM 完成初始化后,就會(huì)按照設(shè)定的參數(shù)運(yùn)行。
五. 性能分析
在學(xué)習(xí)完DDR的基本操作和時(shí)序參數(shù)之后,我們就看看性能的影響。當(dāng)頻率和位寬固定后,帶寬也就不可更改,但是在內(nèi)存的工作周期內(nèi),不可能總處于數(shù)據(jù)傳輸?shù)臓顟B(tài),因?yàn)橐忻睢ぶ返缺匾倪^程。那么這些操作占用的時(shí)間越短,內(nèi)存工作的效率就越高,性能也就越好。
對(duì)于我們來說,最好的方法是提高頻率,但是提高頻率會(huì)受多方面的影響,還有什么辦法提高內(nèi)存訪問的速度。
多通道: 現(xiàn)代內(nèi)存控制器從北橋移入CPU內(nèi)部,而內(nèi)存控制器都可以同時(shí)操作多個(gè)通道。比如現(xiàn)在的筆記本開始支持雙通道、三通道,如果數(shù)據(jù)分布在不同通道的內(nèi)存條上,內(nèi)存控制器就可以不用管上面的這些延遲時(shí)序,同時(shí)可以讀取它們,速度可以增加兩倍,甚至三倍。
交織方式(Interleaving): 同一塊內(nèi)存分布到不同的通道中去,這樣無論Cache命中與否都可以同時(shí)存取,多通道的技術(shù)才能發(fā)揮更大的用處
超頻內(nèi)存: 也就是提升DDR的頻率來增加速度
六,總結(jié)
對(duì)于DDR的讀寫以及一些時(shí)序參數(shù)的原理性知識(shí)后,下一章就進(jìn)入到DDR的驅(qū)動(dòng)調(diào)式篇,主要是對(duì)于一款控制器,我們?cè)撊绾稳フ{(diào)試DDR。其實(shí)對(duì)于DDR的調(diào)式,主要的讀寫的控制,都是由DDR的控制器完成了,我們主要是通過MRS模式/EMRS模式來完成對(duì)于DDR參數(shù)的配置,而對(duì)于MRS模式的使用,已經(jīng)集成到DDR控制器中完成了,我們只需要根據(jù)控制器手冊(cè)配置相應(yīng)的寄存器就可以完成對(duì)于DDR調(diào)試。
總結(jié)
以上是生活随笔為你收集整理的从动态的角度分析DDR的时序结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正大国际:为什么资深交易者更倾向于裸K?
- 下一篇: FM原理详细介绍(写得很好)