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