<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          深入淺出:再談DDR內(nèi)存技術(shù)原理

          共 6978字,需瀏覽 14分鐘

           ·

          2022-02-17 12:28



          在第一篇“深入淺出:全面解讀DDR內(nèi)存原理”學(xué)習(xí)了DDR的基本組成和硬件結(jié)構(gòu)原理,從整體上了解了DDR的特性和靜態(tài)圖,包括原理、管腳圖等。


          那么,今天就要從動(dòng)態(tài)的角度來(lái)分析時(shí)序結(jié)構(gòu),包括read/write的整個(gè)過(guò)程到數(shù)據(jù)返回發(fā)生了什么,其中包括以下內(nèi)容:


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

          ?·DDR的基本命令

          ?·DDR的時(shí)序參數(shù)

          ?·DDR的性能分析


          下載鏈接:

          藍(lán)光全產(chǎn)業(yè)鏈布局,掌握核心技術(shù)

          光存儲(chǔ)技術(shù)發(fā)展現(xiàn)狀及展望

          中國(guó)存儲(chǔ)器芯片行業(yè)概覽



          1



          DRAM基本組成



          對(duì)于DRAM,其主要由行和列組成,每一個(gè)bit中都是由類似右下圖的類晶體管的結(jié)構(gòu)組成,對(duì)于sdram的數(shù)據(jù),可以通過(guò)控制column和row就可以訪問(wèn)sdram的隨機(jī)地址的內(nèi)容。


          ?·讀取某一個(gè)bit的狀態(tài),就是選中word line,那么圖示中的晶體管M1就會(huì)導(dǎo)通,通過(guò)bit line的sense就可以感知到這個(gè)時(shí)候電容Cs上的狀態(tài),例如,現(xiàn)在如果這個(gè)bit的狀態(tài)為1,那么導(dǎo)通之后就會(huì)從bit line上得到1,反之也是同樣的道理。


          ?·向某一bit寫(xiě)入1,首先通過(guò)row decoder選中word line,將會(huì)導(dǎo)致m1導(dǎo)通,那么bit line為1,會(huì)導(dǎo)致電容Cs充電,導(dǎo)致其電平為1,如果要寫(xiě)入,那么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è)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í)候,都需要重新充電。如果沒(méi)有采用bank,假設(shè)我們現(xiàn)在要讀取01-08地址的數(shù)據(jù),當(dāng)讀取01的地址后,要等這個(gè)bank自刷新后才能讀取02地址的值,而采用8個(gè)bank之后,沒(méi)有這類問(wèn)題,例如我們讀取完01地址之后,那么讀取02,因?yàn)?2與01的控制方式不同,所以對(duì)于這段時(shí)間01可以后臺(tái)的完成自刷新,依次類推,那么就可以很好的解決動(dòng)態(tài)內(nèi)存需要刷新的問(wèn)題。



          上圖中,對(duì)于RANK、DIMM等在深入淺出DDR系列(1)——DDR原理篇中已經(jīng)詳細(xì)介紹了。



          2



          DDR工作原理


          了解了DDR的基本組成后,我們來(lái)看看DDR如何來(lái)完成一次的讀寫(xiě)過(guò)程。如下圖所示,DRAM 的相關(guān)操作在內(nèi)部大概可以分為以下的四個(gè)階段:



          ·command transport and decode: 在這個(gè)階段,Host 端會(huì)通過(guò) 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和通過(guò)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 寫(xiě)入到 DRAM Cells。


          ·in device data movement: 這個(gè)階段中,數(shù)據(jù)將通過(guò) IO 電路緩存到 Read Latchs 或者通過(guò) IO 電路和 Write Drivers 更新到 Sense Amplifiers。


          ·system data transport: 在這個(gè)階段,進(jìn)行讀數(shù)據(jù)操作時(shí),SDRAM 會(huì)將數(shù)據(jù)輸出到數(shù)據(jù)總線上,進(jìn)行寫(xiě)數(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ù)和寫(xiě)數(shù)據(jù)都需要用到部分 IO 電路,因此多個(gè)不同的操作通常不能同時(shí)進(jìn)行,也需要遵守一定的時(shí)序。此外,某些操作會(huì)消耗很大的電流,為了滿足 SDRAM 設(shè)計(jì)上的功耗指標(biāo),可能會(huì)限制某一些操作的執(zhí)行頻率。



          3



          DRAM基本命令


          對(duì)于一款ddr,我們需要知道通過(guò)什么樣的方式來(lái)控制完成我們需要,我們來(lái)看看ddr的狀態(tài),ddr的工作就是在這幾個(gè)狀態(tài)之間切換:



          在芯片上電后,完成初始化后,dram處于idle階段,上圖是需要進(jìn)入各個(gè)階段的時(shí)候,應(yīng)該需要進(jìn)行那些基本的操作,對(duì)于ddr使用比較頻繁的幾個(gè)基本命令訪問(wèn)方式如下


          ·刷新模式:儲(chǔ)體中電容的數(shù)據(jù)有效是有時(shí)間限制的,所以為了保證數(shù)據(jù)的不丟失,所以要對(duì)ddr進(jìn)行定時(shí)的刷新,SDRAM內(nèi)部有一個(gè)行地址生成器(也稱刷新計(jì)數(shù)器)用來(lái)自動(dòng)的依次生成行地址。由于刷新是針對(duì)一行中的所有存儲(chǔ)體進(jìn)行。該模式是由Host主動(dòng)控制DRAM完成刷新,存儲(chǔ)體中電容的數(shù)據(jù)有效保存期上限是64ms(毫秒,1/1000秒),也就是說(shuō)每一行刷新的循環(huán)周期是64ms。


          ·自我刷新模式:當(dāng)系統(tǒng)進(jìn)入低功耗模式,只需要發(fā)送一條 SRF指令,主要用于休眠模式低功耗狀態(tài)下的數(shù)據(jù)保存,比較常見(jiàn)的應(yīng)用是STR(Suspend to RAM,休眠掛起于內(nèi)存)。就進(jìn)入了該模式,此時(shí)不再依靠系統(tǒng)時(shí)鐘工作,而是根據(jù)內(nèi)部的時(shí)鐘進(jìn)行刷新操作。期間除了CKE之外的所有外部信號(hào)都是無(wú)效的(無(wú)需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式并進(jìn)入正常操作狀態(tài)。


          ·MRS模式(mode register set):模式寄存器中的數(shù)據(jù)控制著 DDR2 SDRAM的操作模式.它控制著 CAS 延遲, 突發(fā)長(zhǎng)度, 突發(fā)順序, 測(cè)試模式, DLL復(fù)位, WR等各種選項(xiàng),支持著 DDR2 SDRAM 的各種應(yīng)用. 模式寄存器的默認(rèn)值沒(méi)有被定義, 所以上電之后必須按規(guī)定的時(shí)序規(guī)范來(lái)設(shè)定模式寄存器的值。


          ·EMRS 擴(kuò)展模式寄存器:存儲(chǔ)著激活或禁止DLL的控制信息, 輸出驅(qū)動(dòng)強(qiáng)度, ODT 值的選擇 和附加延遲等信息。


          ·預(yù)充電:對(duì)一行讀寫(xiě)操作后,關(guān)閉現(xiàn)有工作行,準(zhǔn)備打開(kāi)新行的操作就是預(yù)充電。


          ·讀過(guò)程:訪問(wèn)操作開(kāi)始ACT一個(gè)激活命令,主要是激活bank和rol,就等于選通了某一Bank的某一行,接著發(fā)送一個(gè)read指令,就可以通過(guò)數(shù)據(jù)總線將數(shù)據(jù)送出去了,然后就進(jìn)行預(yù)充電,恢復(fù)到讀寫(xiě)的狀態(tài),預(yù)充電完成后,就恢復(fù)到idle狀態(tài)。


          ·寫(xiě)過(guò)程:與讀過(guò)程基本類似。


          DRAM的基本命令是通過(guò)操作各種控制信號(hào)/地址信號(hào)的組合來(lái)完成,下表是DRAM的命令表:




          4



          DDR的時(shí)序參數(shù)


          4.1 Row Active Command


          在進(jìn)行數(shù)據(jù)的讀寫(xiě)前,Controller 需要先發(fā)送 Row Active Command,打開(kāi) DRAM Memory Array 中的指定的 Row。Row Active Command 的時(shí)序如下圖所示:



          tRCD:RAS-to-CAS Delay(tRCD),內(nèi)存行地址傳輸?shù)搅械刂返难舆t時(shí)間。


          Row Active Command 通過(guò)地址總線指明需要打開(kāi)某一個(gè) Bank 的某一個(gè) Row。DRAM 在接收到該 Command 后,會(huì)打開(kāi)該 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ù)的讀寫(xiě)了。這也意味著,Controller 在發(fā)送 Row Active Command 后,需要等待 tRCD 時(shí)間才能接著發(fā)送 Read 或者 Write Command 進(jìn)行數(shù)據(jù)的讀寫(xiě)。


          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ù)寫(xiě)入。數(shù)據(jù) Burst Length 為 8 時(shí)的 Column Write Command 時(shí)序如下圖所示:



          tCWD/tCL/tCWL:內(nèi)存CAS延遲時(shí)間


          Column Write Command 通過(guò)地址總線 A[0:9] 指明需要寫(xiě)入數(shù)據(jù)的 Column 的起始地址。Controller 在發(fā)送完 Write Command 后,需要等待 tCWD (CWD for Column Write Delay) 時(shí)間后,才可以發(fā)送待寫(xiě)入的數(shù)據(jù)。tCWD 在一些描述中也稱為 tCWL(CWL for Column Write Latency)


          tWR(WR for Write Recovery)


          DRAM 接收完數(shù)據(jù)后,需要一定的時(shí)間將數(shù)據(jù)寫(xiě)入到 DRAM Cells 中,這個(gè)時(shí)間定義為 tWR(WR for Write Recovery)。該值說(shuō)明在一個(gè)激活的bank中完成有效的寫(xiě)操作及預(yù)充電前,必須等待多少個(gè)時(shí)鐘周期。這段必須的時(shí)鐘周期用來(lái)確保在預(yù)充電發(fā)生前,寫(xiě)緩沖中的數(shù)據(jù)可以被寫(xiě)進(jìn)內(nèi)存單元中。同樣的,過(guò)低的tWD雖然提高了系統(tǒng)性能,但可能導(dǎo)致數(shù)據(jù)還未被正確寫(xiě)入到內(nèi)存單元中,就發(fā)生了預(yù)充電操作,會(huì)導(dǎo)致數(shù)據(jù)的丟失及損壞。


          4.3 Precharge Command


          要訪問(wèn) DRAM Cell 中的數(shù)據(jù),需要先進(jìn)行 Precharge 操作。相應(yīng)地,在 Controller 發(fā)送 Row Active Command 訪問(wèn)一個(gè)具體的 Row 前, Controller 需要發(fā)送 Precharge Command 對(duì)該 Row 所在的 Bank 進(jìn)行 Precharge 操作。下面的時(shí)序圖描述了 Controller 訪問(wèn)一個(gè) Row 后,執(zhí)行 Precharge,然后再訪問(wèn)另一個(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 的訪問(wèn)。


          從時(shí)序圖上我們可以看到,tRC = tRAS + tRP,tRC 時(shí)間決定了訪問(wèn) DRAM 不同 Row 的性能。在實(shí)際的產(chǎn)品中,通常會(huì)通過(guò)降低 tRC 耗時(shí)或者在一個(gè) Row Cycle 執(zhí)行盡可能多數(shù)據(jù)讀寫(xiě)等方式來(lái)優(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 操作需要更長(zhǎng)的時(shí)間;tRFC 的另一部分時(shí)間則是為了降低平均功耗而引入的延時(shí),DRAM Refresh 操作所消耗的電流會(huì)比單個(gè) Row 的 Active + Precharge 操作要大的多,tRFC 中引入額外的時(shí)延可以限制 Refresh 操作的頻率。


          4.5 Read Cycle


          一個(gè)完整的 Burst Length 的 Read Cycle 如下圖所示:



          下面是DDR常見(jiàn)的一些參數(shù)及定義如下:



          上述的 DRAM Timing 中的一部分參數(shù)可以編程設(shè)定,例如 tCAS、tAL、Burst Length 等。這些參數(shù)通常是在 Host 初始化時(shí),通過(guò) Controller 發(fā)起 Load Mode Register Command 寫(xiě)入到 DRAM 的 Mode Register 中。DRAM 完成初始化后,就會(huì)按照設(shè)定的參數(shù)運(yùn)行。



          5



          性能分析


          在學(xué)習(xí)完DDR的基本操作和時(shí)序參數(shù)之后,我們就看看性能的影響。當(dāng)頻率和位寬固定后,帶寬也就不可更改,但是在內(nèi)存的工作周期內(nèi),不可能總處于數(shù)據(jù)傳輸?shù)臓顟B(tài),因?yàn)橐忻睢ぶ返缺匾倪^(guò)程。那么這些操作占用的時(shí)間越短,內(nèi)存工作的效率就越高,性能也就越好。


          對(duì)于我們來(lái)說(shuō),最好的方法是提高頻率,但是提高頻率會(huì)受多方面的影響,還有什么辦法提高內(nèi)存訪問(wèn)采取速度。


          ·多通道: 現(xiàn)代內(nèi)存控制器從北橋移入CPU內(nèi)部,而內(nèi)存控制器都可以同時(shí)操作多個(gè)通道。比如現(xiàn)在的筆記本開(kāi)始支持雙通道、三通道,如果數(shù)據(jù)分布在不同通道的內(nèi)存條上,內(nèi)存控制器就可以不用管上面的這些延遲時(shí)序,同時(shí)可以讀取它們,速度可以增加兩倍,甚至三倍。


          ·交織方式(Interleaving): 同一塊內(nèi)存分布到不同的通道中去,這樣無(wú)論Cache命中與否都可以同時(shí)存取,多通道的技術(shù)才能發(fā)揮更大的用處。


          ·超頻內(nèi)存: 也就是提升DDR的頻率來(lái)增加速度



          6



          總結(jié)


          對(duì)于DDR的讀寫(xiě)以及一些時(shí)序參數(shù)的原理性知識(shí)后,下一步就進(jìn)入到DDR的驅(qū)動(dòng)調(diào)式,主要是對(duì)于一款控制器,我們?cè)撊绾稳フ{(diào)試DDR。其實(shí)對(duì)于DDR的調(diào)試,主要的讀寫(xiě)的控制,都是由DDR的控制器完成了,我們主要是通過(guò)MRS模式/EMRS模式來(lái)完成對(duì)于DDR參數(shù)的配置,而對(duì)于MRS模式的使用,已經(jīng)集成到DDR控制器中完成了,我們只需要根據(jù)控制器手冊(cè)配置相應(yīng)的寄存器就可以完成對(duì)于DDR調(diào)試。



          7



          參考文檔


          DRAM Memory-Access Protocol

          DRAM Timing

          DDR2_SDRAM操作時(shí)序


          本文轉(zhuǎn)自:https://blog.csdn.net/u012489236


          下載鏈接:

          計(jì)算機(jī)網(wǎng)絡(luò)模型

          藍(lán)光全產(chǎn)業(yè)鏈布局,掌握核心技術(shù)

          光存儲(chǔ)技術(shù)發(fā)展現(xiàn)狀及展望

          中國(guó)存儲(chǔ)器芯片行業(yè)概覽

          相關(guān)鏈接:
          云計(jì)算研究報(bào)告
          RDMA技術(shù)原理白皮書(shū)
          NVMe存儲(chǔ)基于SPDK加速I/O性能

          Docker容器基礎(chǔ)介紹


          來(lái)源:全棧云技術(shù)架構(gòu)


          ???????????????? ?END ?????????????????


          轉(zhuǎn)載申明:轉(zhuǎn)載本號(hào)文章請(qǐng)注明作者來(lái)源,本號(hào)發(fā)布文章若存在版權(quán)等問(wèn)題,請(qǐng)留言聯(lián)系處理,謝謝。


          推薦閱讀

          更多架構(gòu)相關(guān)技術(shù)知識(shí)總結(jié)請(qǐng)參考“架構(gòu)師全店鋪技術(shù)資料打包”相關(guān)電子書(shū)(37本技術(shù)資料打包匯總詳情可通過(guò)“閱讀原文”獲取)。

          全店內(nèi)容持續(xù)更新,現(xiàn)下單“全店鋪技術(shù)資料打包(全)”,后續(xù)可享全店內(nèi)容更新“免費(fèi)”贈(zèng)閱,價(jià)格僅收198元(原總價(jià)350元)。



          溫馨提示:

          掃描二維碼關(guān)注公眾號(hào),點(diǎn)擊閱讀原文鏈接獲取架構(gòu)師技術(shù)全店資料打包匯總(全)電子書(shū)資料詳情


          瀏覽 92
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久天天躁 | 欧美高潮AAAAAA片 | 日韩一级aV毛片 | 久久久天堂国产精品女人 | 国产喷潮 |