FPGA ——DDR基础概念详解
目錄
DDR基礎(chǔ)知識(shí)
DDR存儲(chǔ)機(jī)制
?DDR3詳解
DDR3型號(hào)
DDR3引腳
DDR操作
DDR讀操作
DDR寫(xiě)操作
DDR基礎(chǔ)知識(shí)
?????? DDR=Double Data Rate雙倍速率,DDR SDRAM=雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,人們習(xí)慣稱(chēng)為DDR,其中,SDRAM 是Synchronous Dynamic Random Access Memory的縮寫(xiě),即同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器。而DDR SDRAM是Double Data Rate SDRAM的縮寫(xiě),是雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器的意思。
?????????SDR SDRAM采用單端(Single-Ended)時(shí)鐘信號(hào), 在一個(gè)時(shí)鐘周期內(nèi)只傳輸一次數(shù)據(jù);而 DDR由于工作頻率比較快,采用可降低干擾的差分時(shí)鐘信號(hào)作為同步時(shí)鐘。在一個(gè)時(shí)鐘周期內(nèi)可以傳輸兩次數(shù)據(jù),它能夠在的DQS上升沿和和下降沿各傳輸一次數(shù)據(jù)。
相對(duì)比于DDR,DDR2的時(shí)鐘加速,是DDR的兩倍,DDR3的時(shí)鐘是DDR的四倍
DDR存儲(chǔ)機(jī)制
DDR3的內(nèi)部是一個(gè)存儲(chǔ)陣列,將數(shù)據(jù)“填”進(jìn)去,你可以它想象成一張表格。和表格的檢索原理一樣,先指定一個(gè)行(Row),再指定一個(gè)列(Column),我們就可以準(zhǔn)確地找到所需要的單元格,這就是內(nèi)存芯片尋址的基本原理。對(duì)于內(nèi)存,這個(gè)單元格可稱(chēng)為存儲(chǔ)單元,那么這個(gè)表格(存儲(chǔ)陣列)就是邏輯Bank(Logical Bank,下面簡(jiǎn)稱(chēng)Bank)。
?DDR內(nèi)部Bank示意圖,這是一個(gè)NXN的陣列,B代表Bank地址編號(hào),C代表列地址編號(hào),R代表行地址編號(hào)。如果尋址命令是B1、R2、C6,就能確定地址是圖中紅格的位置。
目前DDR3內(nèi)存芯片基本上都是8個(gè)Bank設(shè)計(jì),也就是說(shuō)一共有8個(gè)這樣的“表格”。
尋址的流程也就是先指定Bank地址,再指定行地址,然后指列地址最終的確尋址單元。
1.??? 控制器單元:包括輸入命令解析,模式配置&控制部分;
2.??? 行地址選通單元:行激活通過(guò)此處操作;
3.??? Bank控制邏輯:行/列地址解碼用到bank選通
4.??? 列地址選擇單元,讀寫(xiě)操作同時(shí)在打開(kāi)列地址的時(shí)候送到1;
5.??? 內(nèi)部存儲(chǔ)陣列,此處分8個(gè)bank,以4g8bit的顆粒為例;每個(gè)bank分65536行,128列,每個(gè)cell存儲(chǔ)8*bl的數(shù)據(jù)寬度;
6.??? 讀寫(xiě)數(shù)據(jù)緩存及接口驅(qū)動(dòng);dq數(shù)據(jù)在此變換位寬后內(nèi)外交互;
7.??? 鎖存與控制邏輯:刷新與預(yù)充電用到該模塊。
?DDR3詳解
DDR3型號(hào)
DDR3有上圖的三種型號(hào)?
MT為公司,41J為型號(hào),xxM為容量單位是bit,之后的數(shù)字為數(shù)據(jù)位寬即數(shù)據(jù)的管腳個(gè)數(shù)
如256M8,是256M bit 的容量,8位位寬(對(duì)外數(shù)據(jù)管腳為8)?
DDR3引腳
| 名稱(chēng) | 輸入/輸出 | 描述 |
| A[14:13], A12/BC#, A11, A10/AP, A[9:0] | in | 地址輸入:為 ACTIVATE 命令提供行地址, 為 READ/WRITE 命令提供列地址和自動(dòng)預(yù)充電位 (A10) |
| BA[2:0] | in | Bank地址輸入 |
| CK, CK# | in | 差分時(shí)鐘 |
| CKE | in | 時(shí)鐘使能 |
| CS# | in | 片選 |
| DM | in | 輸入數(shù)據(jù)屏蔽:DM是寫(xiě)數(shù)據(jù)的輸入屏蔽信號(hào)。 在寫(xiě)訪問(wèn)期間,當(dāng) DM 與輸入數(shù)據(jù)一起被采樣為高電平時(shí)輸入數(shù)據(jù)被屏蔽 |
| ODT | in | 片上端接:ODT 啟用(注冊(cè)為高電平)和禁用(注冊(cè)為低電平)DDR3 SDRAM 內(nèi)部的端接電阻。 |
| RAS#, CAS#, WE# | in | 行使能,列使能,寫(xiě)使能 |
| DQ[3:0] | I/O | 數(shù)據(jù)輸入/輸出:x4 配置的雙向數(shù)據(jù)總線 |
| DQ[7:0] | I/O | 數(shù)據(jù)輸入/輸出:x8 配置的雙向數(shù)據(jù)總線 |
| DQS, DQS # | I/O | 數(shù)據(jù)選通:輸出讀取數(shù)據(jù),與讀取數(shù)據(jù)邊緣對(duì)齊。 輸入與寫(xiě)入數(shù)據(jù),居中對(duì)齊寫(xiě)入數(shù)據(jù)。 |
| TDQS, TDQS# | out | 終止數(shù)據(jù)選通 |
DDR3控制命令表:
?
?DDR3 mode寄存器設(shè)置圖:
?由于SDRAM的尋址具體獨(dú)占性,所以在進(jìn)行完讀寫(xiě)操作后,如果要對(duì)同一L-Bank的另一行進(jìn)行尋址,就要將原來(lái)有效(工作)的行關(guān)閉,重新發(fā)送行/列地址。L-Bank關(guān)閉現(xiàn)有工作行,準(zhǔn)備打開(kāi)新行的操作就是預(yù)充電(Precharge)。預(yù)充電可以通過(guò)命令控制,也可以通過(guò)輔助設(shè)定讓芯片在每次讀寫(xiě)操作之后自動(dòng)進(jìn)行預(yù)充電。實(shí)際上,預(yù)充電是一種對(duì)工作行中所有存儲(chǔ)體進(jìn)行數(shù)據(jù)重寫(xiě),并對(duì)行地址進(jìn)行復(fù)位,之所以稱(chēng)為DRAM,就是因?yàn)樗粩噙M(jìn)行刷新(Refresh)才能保留住數(shù)據(jù),因此它是DRAM最重要的操作。
刷新操作與預(yù)充電中重寫(xiě)的操作一樣。但為什么有預(yù)充電操作還要進(jìn)行刷新呢?因?yàn)轭A(yù)充電是對(duì)一個(gè)或所有L-Bank中的工作行操作,并且是不定期的,而刷新則是有固定的周期,依次對(duì)所有行進(jìn)行操作,以保留那些久久沒(méi)經(jīng)歷重寫(xiě)的存儲(chǔ)體中的數(shù)據(jù)。但與所有L-Bank預(yù)充電不同的是,這里的行是指所有L-Bank中地址相同的行,而預(yù)充電中各L-Bank中的工作行地址并不是一定是相同的。
在實(shí)際工作中,Bank地址與相應(yīng)的行地址是同時(shí)發(fā)出的,此時(shí)這個(gè)命令稱(chēng)之為“行激活”(Row Active)。在此之后,將發(fā)送列地址尋址命令與具體的操作命令(是讀還是寫(xiě)),這兩個(gè)命令也是同時(shí)發(fā)出的,所以一般都會(huì)以“讀/寫(xiě)命令”來(lái)表示列尋址。根據(jù)相關(guān)的標(biāo)準(zhǔn),從行有效到讀/寫(xiě)命令發(fā)出之間的間隔被定義為tRCD,即RAS to CAS Delay(RAS至CAS延遲,RAS就是行地址選通脈沖,CAS就是列地址選通脈沖),我們可以理解為行選通周期。tRCD是DDR的一個(gè)重要時(shí)序參數(shù),廣義的tRCD以時(shí)鐘周期(tCK,Clock Time)數(shù)為單位,比如tRCD=3,就代表延遲周期為兩個(gè)時(shí)鐘周期,具體到確切的時(shí)間,則要根據(jù)時(shí)鐘頻率而定,DDR3-800,tRCD=3,代表30ns的延遲。
?
?接下來(lái),相關(guān)的列地址被選中之后,將會(huì)觸發(fā)數(shù)據(jù)傳輸,但從存儲(chǔ)單元中輸出到真正出現(xiàn)在內(nèi)存芯片的 I/O 接口之間還需要一定的時(shí)間(數(shù)據(jù)觸發(fā)本身就有延遲,而且還需要進(jìn)行信號(hào)放大),這段時(shí)間就是非常著名的 CL(CAS Latency,列地址脈沖選通潛伏期)。CL 的數(shù)值與 tRCD 一樣,以時(shí)鐘周期數(shù)表示。如 DDR3-800,時(shí)鐘頻率為 100MHz,時(shí)鐘周期為 10ns,如果 CL=2 就意味著 20ns 的潛伏期。不過(guò)CL只是針對(duì)讀取操作。
?
??由于芯片體積的原因,存儲(chǔ)單元中的電容容量很小,所以信號(hào)要經(jīng)過(guò)放大來(lái)保證其有效的識(shí)別性,這個(gè)放大/驅(qū)動(dòng)工作由S-AMP負(fù)責(zé),一個(gè)存儲(chǔ)體對(duì)應(yīng)一個(gè)S- AMP通道。但它要有一個(gè)準(zhǔn)備時(shí)間才能保證信號(hào)的發(fā)送強(qiáng)度(事前還要進(jìn)行電壓比較以進(jìn)行邏輯電平的判斷),因此從數(shù)據(jù)I/O總線上有數(shù)據(jù)輸出之前的一個(gè)時(shí)鐘上升沿開(kāi)始,數(shù)據(jù)即已傳向S-AMP,也就是說(shuō)此時(shí)數(shù)據(jù)已經(jīng)被觸發(fā),經(jīng)過(guò)一定的驅(qū)動(dòng)時(shí)間最終傳向數(shù)據(jù)I/O總線進(jìn)行輸出,這段時(shí)間我們稱(chēng)之為 tAC(Access Time from CLK,時(shí)鐘觸發(fā)后的訪問(wèn)時(shí)間)。
突發(fā)(Burst)是指在同一行中相鄰的存儲(chǔ)單元連續(xù)進(jìn)行數(shù)據(jù)傳輸?shù)姆绞?#xff0c;連續(xù)傳輸?shù)闹芷跀?shù)就是突發(fā)長(zhǎng)度(Burst Lengths,簡(jiǎn)稱(chēng)BL)。
?
?在進(jìn)行突發(fā)傳輸時(shí),只要指定起始列地址與突發(fā)長(zhǎng)度,內(nèi)存就會(huì)依次地自動(dòng)對(duì)后面相應(yīng)數(shù)量的存儲(chǔ)單元進(jìn)行讀/寫(xiě)操作而不再需要控制器連續(xù)地提供列地址。這樣,除了第一筆數(shù)據(jù)的傳輸需要若干個(gè)周期(主要是之前的延遲,一般的是tRCD+CL)外,其后每個(gè)數(shù)據(jù)只需一個(gè)周期的即可獲得。
突發(fā)連續(xù)讀取模式:只要指定起始列地址與突發(fā)長(zhǎng)度,后續(xù)的尋址與數(shù)據(jù)的讀取自動(dòng)進(jìn)行,而只要控制好兩段突發(fā)讀取命令的間隔周期(與BL相同)即可做到連續(xù)的突發(fā)傳輸。
談到了突發(fā)長(zhǎng)度時(shí)。如果BL=4,那么也就是說(shuō)一次就傳送4×64bit的數(shù)據(jù)。但是,如果其中的第二筆數(shù)據(jù)是不需要的,怎么辦?還都傳輸嗎?為了屏蔽不需要的數(shù)據(jù),人們采用了數(shù)據(jù)掩碼(Data I/O Mask,簡(jiǎn)稱(chēng)DQM)技術(shù)。通過(guò)DQM,內(nèi)存可以控制I/O端口取消哪些輸出或輸入的數(shù)據(jù)。這里需要強(qiáng)調(diào)的是,在讀取時(shí),被屏蔽的數(shù)據(jù)仍然會(huì)從存儲(chǔ)體傳出,只是在“掩碼邏輯單元”處被屏蔽。DQM由北橋控制,為了精確屏蔽一個(gè)P-Bank位寬中的每個(gè)字節(jié),每個(gè)DIMM有8個(gè)DQM 信號(hào)線,每個(gè)信號(hào)針對(duì)一個(gè)字節(jié)。這樣,對(duì)于4bit位寬芯片,兩個(gè)芯片共用一個(gè)DQM信號(hào)線,對(duì)于8bit位寬芯片,一個(gè)芯片占用一個(gè)DQM信號(hào),而對(duì)于 16bit位寬芯片,則需要兩個(gè)DQM引腳。
在數(shù)據(jù)讀取完之后,為了騰出讀出放大器以供同一Bank內(nèi)其他行的尋址并傳輸數(shù)據(jù),內(nèi)存芯片將進(jìn)行預(yù)充電的操作來(lái)關(guān)閉當(dāng)前工作行。從開(kāi)始關(guān)閉現(xiàn)有的工作行,到可以打開(kāi)新的工作行之間的間隔就是tRP(Row Precharge command Period,行預(yù)充電有效周期),單位也是時(shí)鐘周期數(shù)。
差分時(shí)鐘是DDR的一個(gè)必要設(shè)計(jì),但CK#的作用,并不能理解為第二個(gè)觸發(fā)時(shí)鐘(你可以在講述DDR原理時(shí)簡(jiǎn)單地這么比喻),而是起到觸發(fā)時(shí)鐘校準(zhǔn)的作用。
?由于數(shù)據(jù)是在CK的上下沿觸發(fā),造成傳輸周期縮短了一半,因此必須要保證傳輸周期的穩(wěn)定以確保數(shù)據(jù)的正確傳輸,這就要求CK的上下沿間距要有精確的控制。但因?yàn)闇囟取㈦娮栊阅艿母淖兊仍?#xff0c;CK上下沿間距可能發(fā)生變化,此時(shí)與其反相的CK#就起到糾正的作用(CK上升快下降慢,CK# 則是上升慢下降快)。而由于上下沿觸發(fā)的原因,也使CL=1.5和2.5成為可能,并容易實(shí)現(xiàn)。與CK反相的CK#保證了觸發(fā)時(shí)機(jī)的準(zhǔn)確性。
2、數(shù)據(jù)選取脈沖(DQS)
DQS 是DDR中的重要功能,它的功能主要用來(lái)在一個(gè)時(shí)鐘周期內(nèi)準(zhǔn)確的區(qū)分出每個(gè)傳輸周期,并便于接收方準(zhǔn)確接收數(shù)據(jù)。每一顆芯片都有一個(gè)DQS信號(hào)線,它是雙向的,在寫(xiě)入時(shí)它用來(lái)傳送由北橋發(fā)來(lái)的DQS信號(hào),讀取時(shí),則由芯片生成DQS向北橋發(fā)送。完全可以說(shuō),它就是數(shù)據(jù)的同步信號(hào)。
在讀取時(shí),DQS與數(shù)據(jù)信號(hào)同時(shí)生成(也是在CK與CK#的交叉點(diǎn))。而DDR內(nèi)存中的CL也就是從CAS發(fā)出到DQS生成的間隔,DQS生成時(shí),芯片內(nèi)部的預(yù)取已經(jīng)完畢了,由于預(yù)取的原因,實(shí)際的數(shù)據(jù)傳出可能會(huì)提前于DQS發(fā)生(數(shù)據(jù)提前于DQS傳出)。由于是并行傳輸,DDR內(nèi)存對(duì)tAC也有一定的要求,對(duì)于DDR266,tAC的允許范圍是±0.75ns,對(duì)于DDR333,則是±0.7ns,有關(guān)它們的時(shí)序圖示見(jiàn)前文,其中CL里包含了一段DQS 的導(dǎo)入期。
?
?在寫(xiě)入時(shí),以DQS的高/低電平期中部為數(shù)據(jù)周期分割點(diǎn),而不是上/下沿,但數(shù)據(jù)的接收觸發(fā)仍為DQS的上/下沿
DDR操作
?????? 啟動(dòng):上電->解復(fù)位->初始化->ZQCL-> LEVELING->IDLE(ready)
?????? 讀:IDLE->行激活->讀數(shù)據(jù)(1次或多次突發(fā))->預(yù)充電->IDLE
?????? 寫(xiě):IDLE->行激活->寫(xiě)數(shù)據(jù)(1次或多次突發(fā))->預(yù)充電->IDLE
?????? 刷新:IDLE->REF->IDLE
?????? 自刷新的進(jìn)入與退出:IDLE->SFR->IDLE
?????? 定期校正:IDLE->ZQCS->IDLE,一般外部溫度或電壓改變時(shí)操作
?????? 動(dòng)態(tài)更改配置:IDLE->MRS/MPR->IDLE
DDR讀操作
???????? ddr發(fā)起一次讀的過(guò)程包含一系列命令有:
1.??? 操作開(kāi)始于Active命令——Active命令同時(shí)并發(fā)含帶地址位,以選擇Bank和Row地址(BA0-BA2選擇BANK、A0-A15選擇Row)。用于打開(kāi)一個(gè)工作行。
2.??? 隨后是一個(gè)Read命令——Read命令并發(fā)含帶突發(fā)操作的起始Column地址和bank號(hào),打開(kāi)對(duì)應(yīng)gating的列;
3.??? 數(shù)據(jù)經(jīng)過(guò)特定的延時(shí)(CL+AL,后面詳細(xì)介紹);將數(shù)據(jù)傳出IO;
4.??? 完成數(shù)據(jù)傳出后,需將當(dāng)前cache的數(shù)據(jù)刷回存儲(chǔ)整列并關(guān)閉當(dāng)前工作行(攜帶命令和BA信息);【是否發(fā)布自動(dòng)預(yù)充電命令(通過(guò)A10)】
DDR寫(xiě)操作
??????? ddr發(fā)起一次寫(xiě)操作與讀類(lèi)似,除寫(xiě)數(shù)據(jù),其他步驟參照讀。
1.??? 和讀操作一樣。
2.??? 隨后是一個(gè)write命令——Read命令并發(fā)含帶突發(fā)操作的起始Column地址和bank號(hào),打開(kāi)對(duì)應(yīng)gating的列;
3.??? 經(jīng)過(guò)特定的延時(shí)(CWL+AL,后面詳細(xì)介紹);數(shù)據(jù)從IO寫(xiě)入io gating;這之間又有一個(gè)延時(shí)tWR。
4.??? 完成數(shù)據(jù)寫(xiě)入后,預(yù)充電的操作和讀一樣。
總結(jié)
以上是生活随笔為你收集整理的FPGA ——DDR基础概念详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mybatis使用map插入数据和Myb
- 下一篇: 高恪一键管控之封杀随身wifi与电视盒子