學習DDR有一段時間了,期間看了好多的資料(部分公司的培訓資料、幾十篇的博文,Micron的Datasheet,JESD79規(guī)范等)。但是有一個問題,想了好久(很多資料都沒有說明白),至今才算搞明白,所以寫一篇文章和大家分享一下。
如題,接下來要討論的主要是關于Prefetch和Burst相關的內容。
1、Prefetch介紹
首先,簡單介紹一下Prefetch技術。所謂prefetch,就是預加載,這是DDR時代提出的技術。在SDR中,并沒有這一技術,所以其每一個cell的存儲容量等于DQ的寬度(芯片數據IO位寬)?!娟P于什么是cell(存儲單元,可以去看一下,我之前的博文:http://blog.chinaaet.com/justlxy/p/5100051913)】
進入DDR時代之后,就有了prefetch技術,DDR是兩位預?。?-bit Prefetch),有的公司則貼切的稱之為2-n Prefetch(n代表芯片位寬)。DDR2是四位預取(4-bit Prefetch),DDR3和DDR4都是八位預?。?-bit Prefetch)。而8-bit Prefetch可以使得內核時鐘是DDR時鐘的四分之一,這也是Prefetch的根本意義所在。
補充說明:芯片位寬的另一種說法是配置模式(Configuration),在DDR3時代,一般有x4,x8,x16。
下面以DDR3為例,下圖是個簡單 一個簡單Read預取示意圖,Write可以看做是 個逆向過程。
當DDR3 為x8 Configuration時,一個Cell的容量為8x8bits,即8個字節(jié)。換一句話說,在指定bank、row地址和col地址之后,可以往該地址內寫入(或讀?。? Bytes。
2、如何計算DDR3 SDRAM的容量
以Mircon的某型號DDR3 SDRAM為例:
以圖中紅色部分的內容作為分析案例(8個bank,x8的Configuration):
計算方式一(錯誤):
64K*8*1K*8(Row Addressing * Bank Addressing * Column Addressing * x8 Configuration)= 4Gb(512 Megx8)。
大部分材料給出的都是這種錯誤的計算方法,誤導了很多的初學者。這種計算方法咋一看好像是對的。但是,仔細推敲一下,便可以發(fā)現,按照計算方式一的邏輯,則認為每一個Cell的容量是1bit*8(x8 Configuration),即8bit。這與我們在第一部分所討論的結果(一個Cell的容量為64bits,x8 Configuration下)不符。
當然,從某種角度來說,計算方式一也是正確的,因為分離出的Column Address的位數實際上是和prefetch對應的。比如DDR3 8-bit Prefetch對3bits的Column Address,DDR2 4-bit Prefetch對應的是2bits的Column Address。只是如果直接按照計算方式一來計算的話,對于初次接觸DDR的人來說,理解起來存在一定的困難,這也是我寫這一篇博文的原因。
下面給出正確的計算方式,并說明原因。
計算方式二(正確):
64K*8*(1K/8)*8*8(Row Addressing * Bank Addressing * (Column Addressing / 8) * x8 Configuration * 8-bit Prefetch)= 4Gb(512 Megx8)。
很多人都會問,為什么要把列地址尋址(Column Addressing)除以8呢?似乎計算方式二看起來更加不合理。接下來,我們先來回顧一下DDR3 SDRAM的結構框圖(還是以Mircon的某型號為例):
大圖可能看的不太清楚,下面來幾個特寫:
沒錯!你沒有看錯!10bit的Column Address的尋址能力只有128?。?!剛好差了8倍(這就是我們在計算方式二中將Column Addressing除以8的原因)!
那么問題又來了,為什么Column Address的尋址能力只有128呢?莫急,請繼續(xù)看下圖:
在上圖中,可以清晰地發(fā)現,10bits的Column Address只有7bits用于列地址譯碼!列地址0,1,2并沒有用?。?!
那么,問題又來了!……
列地址0,1,2,這3bits被用于什么功能了?或者是Mircon的設計者腦殘,故意浪費了這三個bits?顯然不是。
在JESD79-3規(guī)范中有如下的這個表格:
可以發(fā)現,Column Address的A2,A1,A0三位被用于Burst Order功能,并且A3也被用于Burst Type功能。由于一般情況,我們采用的都是順序讀寫模式(即{A2,A1,A0}={0,0,0}),所以此時的A3的取值并無直接影響。
那么,問題又來了!……
Burst又是什么鬼呢?且看第三部分。
3、DDR中的Burst Length
Burst Lengths,簡稱BL,指突發(fā)長度,突發(fā)是指在同一行中相鄰的存儲單元連續(xù)進行數據傳輸的方式,連續(xù)傳輸所涉及到存儲單元(列)的數量就是突發(fā)長度(SDRAM),在DDR SDRAM中指連續(xù)傳輸的周期數。上一部分講到的Burst Type和Burst Order實際上就是關于Burst Length的讀寫順序的配置。
在DDR3 SDRAM時代,內部配置采用了8n prefetch(預取)來實現高速讀寫.這也導致了DDR3的Burst Length一般都是8。當然也有Bursth ength為4的設置(BC4),是指另外4筆數據是不被傳輸的或者被認為無效而已。
在DDR2時代,內部配置采用的是4n prefetch,Burst length有4和8兩種,對于BL=8的讀寫操作,會出現兩次4n Prefetch的動作。
上圖是JESD79-3規(guī)范中給出的DDR3 SDRAM的Command Truth Table??梢钥吹?,讀取和寫入都有三種基本模式(Fixed BL8 or BC4,BC4 on the fly,BL8 on the fly)。這一部分的內容,在我之前的博文中有所提及,此處不再詳細介紹。
-
存儲
+關注
關注
13文章
4324瀏覽量
85938 -
DDR
+關注
關注
11文章
712瀏覽量
65387 -
Burst
+關注
關注
1文章
6瀏覽量
10127
原文標題:【博文連載】DDR掃盲——關于prefetch與Burst的深入討論
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論