轉自:http://www.4k8k.xyz/article/u011729865/115326708
文章目錄
文檔推薦
- ddr3/4等協議eetop.cn_JESD79-3F.pdf
- 【理解SDRAM顆粒的入門中文手冊,強烈推薦】eetop.cn_高手進階,終極內存技術指南——完整.pdf
- 【理解DRAM電路結構和時序參數】https://linux.codingbelief.com/zh/memory/dram/dram_storage_cell.html
DDR顆粒的電路圖來源
可以去網站搜索鎂光DDR4 SDRAM關鍵詞。
找出micron DDR4 SDRAM datasheet.pdf ,點擊相關鏈接
上面網址資料應該更全,但是速度太慢。下面網址速度更快:https://pdf.ic37.com/
網上很多圖非常不清楚,下面給一張DDR3和DDR4的高清圖。
DDR3 SDRAM電路結構高清圖

DDR4 SDRAM電路結構高清圖

DDR3-1866控制器/PHY/顆粒之間的帶寬關系
舉例,DDR3-1866,意味着芯片與顆粒之間的傳輸速率是1866bps(單指一根DDR數據信號線,一般DDR3芯片引腳是32bit),
芯片PHY的DDR管腳信號線對應的時鍾頻率是1866/2=933MHz,因為上下邊沿采樣原理。
假設芯片接口,DDR數據位寬支持32bit,那么,
控制器如果是128bit數據位寬,那么時鍾頻率是=(1866*32)/ 128 = 466MHz。
channel > DIMM > rank > chip > bank > row/column
channel (對應多個DDR控制器)> DIMM(內存插槽) > rank(一次訪問位寬決定,也成物理bank) > chip(1個chip大多是4bit/8bit/16bit等,組成一個rank,配合完成一次訪問的位寬要求。這就是顆粒) > bank(顆粒里的logic-bank,DDR3一般對應8個bank存儲體) > row/column
DDR頁和行的概念理解
- DDR logic bank的row就是行,對應行地址選中等。
- DDR頁的概念,是針對刷新或者訪問來說的,舉例,一個rank可能有4個chip組成,一個chip里可能有8個bank,每一個bank有N個行。頁指的是一個rank里每個chip,所有bank的一個行地址;注意不是一行,是多行,行數是chip數目*bank數目。
- 所以,DDR頁,可以講為一個rank里每個chip的行地址
- (ps:在一個rank里,每個chip的地址是相同的。因為多個chip組成一個總數據位寬。DDR接口的cs信號,雖然叫chip select,其實是rank(一組chip)的 select)。
- DDR頁的概念,后續會講到頁命中、頁miss等,跟cache page原理一樣。
DDR3 8Bit數據預取技術的理解
參考文章:
土老冒談硬件 深度解析DDR3內存新特性
- SDRAM最開始是時鍾下降沿采樣,數據傳輸速率和頻率是1:1關系,即一個周期可傳輸1bit數據;
- DDR1,采用時鍾雙邊沿采樣,即上升沿、下降沿都采樣。一個時鍾周期可傳輸2bit數據,這個時候,就叫預取2bit技術了(因為一拍需要預取2bit數據)。可知預取2bit技術的基礎,就是雙邊沿采樣。
- DDR2,預取4bit。
- DDR3,預取8bit。舉例,DDR3-800內存的存儲核心頻率其實僅有100MHz,其輸入/輸出時鍾頻率為400MHz,利用雙邊沿采樣技術,有效數據傳輸頻率則為800MHz。
預取bit的意思,我理解就是一個時鍾周期時間內,從DDR存儲cell能夠做到取出多少bit數據。如果一次預取16bit,DDR傳輸速率就又翻倍了。
一般,協議里稱為8n prefetch。這個n,我理解就是DQ位寬。所以一個DDR3 16bit SDRAM內存顆粒,其一次讀寫訪問的數據量是8*16=128bit。
DDR burst相關概念
BL,是burst length。對應預取bit數目,DDR3對應的BL是8
BC,是burst chop,中文理解是burst剁開切開,是為了兼容DDR2的burst length為4的情況。DDR3兼容DDR2時,8個burst,只保留前面4個burst有意義,后面4個burst內容無異議被mask掉。
DDR SDRAM的時序參數和讀寫訪問過程
鏈接文章的時序講解,圖和文字很生動。時序參數和讀寫訪問過程,結合在一起描述的。
https://linux.codingbelief.com/zh/memory/dram/dram_timing.html?q=#additive-latency
DDR2-800內存的標准時序:5-5-5-18,
DDR3-800內存的標准時序則達到了6-6-6-15
DDR3-1066為7-7-7-20
DDR3-1333更是達到了9-9-9-25
這4個數字的含義依次為:CAS Latency(簡稱CL值)內存CAS延遲時間,這也是內存最重要的參數之一,一般來說內存廠商都會將CL值印在產品標簽上。
第二個數字是RAS-to-CAS Delay(tRCD),代表內存行地址傳輸到列地址的延遲時間。第三個則是Row-precharge
Delay(tRP),代表內存行地址選通脈沖預充電時間。第四個數字則是Row-active Delay(tRAS),代表內存行地址選通延遲。
除了這四個以外,在AMD K8處理器平台和部分非Intel設計的對應Intel芯片組上,如NVIDIA nForce 680i SLI芯片組上,還支持內存的CMD 1T/2T Timing調節,CMD調節對內存的性能影響也很大,其重要性可以和CL相比。
這些參數越低,代表延遲越小。但是系統出了DDR3芯片之外,還有顆粒、PCB板等,需要綜合考慮,DDR3延遲不一定比DDR2慢。
一、影響性能的主要時序參數
所謂的影響性能是並不是指SDRAM的帶寬,頻率與位寬固定后,帶寬也就不可更改了。但這是理想的情況,在內存的工作周期內,不可能總處於數據傳輸的狀態,因為要有命令、尋址等必要的過程。但這些操作占用的時間越短,內存工作的效率越高,性能也就越好。
非數據傳輸時間的主要組成部分就是各種延遲與潛伏期。通過上文的講述,大家應該很明顯看出有三個參數對內存的性能影響至關重要,它們是tRCD、CL和tRP。每條正規的內存模組都會在標識上注明這三個參數值,可見它們對性能的敏感性。
以內存最主要的操作——讀取為例。tRCD決定了行尋址(有效)至列尋址(讀/寫命令)之間的間隔,CL決定了列尋址到數據進行真正被讀取所花費的時間,tRP則決定了相同L-Bank中不同工作行轉換的速度。現在可以想象一下讀取時可能遇到的幾種情況(分析寫入操作時不用考慮CL即可):
1、要尋址的行與L-Bank是空閑的。也就是說該L-Bank的所有行是關閉的,此時可直接發送行有效命令,數據讀取前的總耗時為tRCD+CL,這種情況我們稱之為頁命中(PH,Page Hit)。
2、要尋址的行正好是前一個操作的工作行,也就是說要尋址的行已經處於選通有效狀態,此時可直接發送列尋址命令,數據讀取前的總耗時僅為CL,這就是所謂的背靠背(Back to Back)尋址,我們稱之為頁快速命中(PFH,Page Fast Hit)或頁直接命中(PDH,Page Direct Hit)。
3、要尋址的行所在的L-Bank中已經有一個行處於活動狀態(未關閉),這種現象就被稱作尋址沖突,此時就必須要進行預充電來關閉工作行,再對新行發送行有效命令。結果,總耗時就是tRP+tRCD+CL,這種情況我們稱之為頁錯失(PM,Page Miss)。
顯然,PFH是最理想的尋址情況,PM則是最糟糕的尋址情況。上述三種情況發生的機率各自簡稱為PHR——PH Rate、PFHR——PFH Rate、PMR——PM Rate。因此,系統設計人員(包括內存與北橋芯片)都盡量想提高PHR與PFHR,同時減少PMR,以達到提高內存工作效率的目的。
計算DDR容量的方法

由圖可以歸納出:
- bank有8個;對應BA[2:0];
- 行地址有15bit;列地址有10-3=7bit(其中低3bit不會用於列尋址);
- 每個bank的數據量
每個bank的數據量 =行列單元存儲bit數=2^15 * 2^7 * 128bit=512Mbit
【這個128bit是怎么搞的,最開始理解一個存儲cell的容量,就是數據信號線位寬16bit。這里DDR3是指預取8bit技術,8*16bit=128bit,一個地址對應8個預取pre-fetch的16bit數據。可以這樣理解,DQ數據線寬是16bit,每一根DQ數據信號線,支持預取8次。】

4. 所以,內存顆粒的容量= 8 * 512bit = 4Gbit=512MB,根據DDR數據信號線位寬,描述上圖產品的規格,即256 * 16bit。
DDR控制器架構
DDR控制器功能簡介
- 對DDR存儲顆粒進行初始化;
- AXI等總線簡單讀寫,和 DDR存儲顆粒復雜的讀寫時序,做相互轉換。讓DDR IP使用者,可以像操作RAM一樣操作DDR。
- 控制器要產生DDR顆粒需要的周期性的刷新指令,不需要用戶的干預。
- DDR控制器接收的請求,一般沒有順序性,訪問DDR顆粒的數據傳輸中,存在大量非數據的傳輸,即保證DDR顆粒時序的命令配置信息傳輸。會導致DDR帶寬利用率低。因此,出現指令調度和重排序設計。
圖摘自《DDR3存儲控制器的設計與實現_彭陳.caj》
一些理解點:
- DDR控制器負責配置遠程DDR顆粒的命令過程;穿插在數據傳輸里;占用一部分帶寬;
- DDR控制器,輸入是SOC總線讀寫請求;輸出是DFI接口請求(圖中稱為配置請求,或者存儲請求)。其中DFI接口通過PHY連接芯片外的DDR顆粒。
- DDR控制器需要訪問調度,主要是因為顆粒是多bank的,跨bank的訪問請求,會增加latency,減少帶寬有效數據傳輸效率。
- 當前參與項目的DDR控制器,接收的SOC總線讀寫請求接口,會有多個。因為SOC總線用的NOC架構,有打包解包過程,對latency影響較大。如有latency性能要求,則需要直接在DDR控制器里進行類似數據總線的請求調度。
DDR自動刷新和自刷新,以及與預充電的關系
DDR的最小存儲單元電路形式是電容,是通過充放電,實現0,1值存儲。
如果長時間維持1值,會因為電路漏電特性,把電容里的電荷釋放掉。
所以出現自動刷新概念,把DDR里的數據再次充電刷新一次,目的是保留DDR存儲值。
根據協議定義,可知bank里的一行最大自動刷新間隔是7.8us;一個bank最大自動刷新間隔是64ms。由此,常見設計,一個bank的行數是8192。因為協議推導出的最大bank行數=64ms/7.8us=8205。
也就是說,DDR控制器需要每次7.8us時,做一次自動刷新的指令。
self-refresh和auto-refresh的區別,個人理解。
- 自動刷新是指控制器必須參與發起每一個自動刷新請求。適合正常工作的時候,由控制器來主導刷新操作。
- 自刷新是指控制器只發起刷新開始和結束兩個請求。適合休眠,DRAM顆粒自己負責刷新操作。
- 自動刷新和自刷新,接口指令是類似的,除了CKE為低表明自刷新開始。
預充電和刷新,都是為了保持電荷存儲,做出的電路重寫動作。
- 預充電是針對一個bank或者所有bank的一行的操作;是伴隨讀寫命令操作之后執行的。
- 刷新是同時對所有bank的所有行操作。
DDR 擾碼解碼:obfuscation Scamble.
意義是對DDR數據進行加密。
一個實踐的方法是芯片TRNG產生偽隨機數,然后跟真實數據XOR實現。
ZQC和ODT意義
- DDR3新增管腳ZQ,接高精度240歐姆。意義是提供精准電阻參考,該電阻對芯片內溫度不敏感。ZQC,就暗示ZQ電阻的calibration校准。
- ODT,是利用ZQ電阻值,實現精確的阻抗匹配。保證DDR PHY + PCB走線 + DDR SDRAM這一個系統數據通路的信號完整性,比如解決信號反射問題等。具體詳見:《聊一聊DDR3中的ODT(On-die termination)》
- 總之,ZQC和ODT一起,在不同溫度下,解決信號的完整性問題。
另外,關於ZQ校准,有兩個命令:ZQCL (ZQ CALIBRATION LONG )和ZQ CALIBRATION SHORT (ZQCS)
- ZQCL主要用於系統上電初始化和器件復位,一次完整的ZQCL需要512個時鍾周期,在隨后(初始化和復位之后),校准一次的時間要減少到256周期。
- ZQCS在正常操作時跟蹤連續的電壓和溫度變化,ZQCS需要64個時鍾周期。
Write Leveling是什么?
Write Leveling的功能是調整DRAM顆粒端DQS信號和CLK信號邊沿對齊。
只有使用了fly-by的情況下需使能write leveling。
所謂的fly-by 布線,指地址、命令和時鍾(下圖黃色單詞看不清楚,是clk/addr/command的意思)的布線依次經過每一顆DDR memory芯片。而dq和dqs作了點到點的連接。VTT表示這些信號都接了ODT端接電阻。fly-by 結構相對於T布線,有助於降低同步切換噪聲(Simultaneous Switching Noise)。
備注:下圖是T型布線。
