作為一個FPGA開發者,之前對于DDR的使用,一直僅限于對廠商接口的使用,像無論是Xilinx還是Intel,在使用DDR時甚至IP配置參數都不需要了解,直接從老的工程里把IP拷貝過來就可以,而在使用DDR時只需要會使用AXI4/AvalonMm標準總線接口就行了?;炝诉@么多年,本著夠用即可,再往下稍微了解些。
個人總結,淺入淺出。讓我設計一個控制器那可是難為我了。
DDR——無非大的數組
對于DDR的理解,最初簡單的以為無非一個大的數組,我會接口使用就OK了。不管各種概念天花亂墜,其總歸最終還是要歸還到DDR顆粒芯片上來吧。我們常說DDR容量大小,某款DDR顆粒手冊上寫的規格容量如下圖所示:
看完之后一開始我只看懂了這個DDR顆粒手冊上寫的DDR容量是8Gb,剩下的我就能看懂的不多了~這也是為什么決定花點兒功夫好好了解下DDR的基礎知識。后面我們再來Review這張表。
這款芯片的512Mb x 16的引腳有這么幾個:
BG:1bit(GB0)
BA:2bit(BA0~BA1)
ROW:16 bit(A0~A15)
Column:10 bit(A0~A9)
DQ: 16 bit(DQ0~DQ1)
看完之后簡單總結一句話:對于DDR顆粒,Bank是讀寫地址動作的最小單元。像上面的512Mb x 16模式下,顆粒內部有兩個Bank Group,每個Bank Group內部有四個Bank,而每個Bank內部的“存儲矩陣(二維數組)”對應的行地址16 bit,列地址10 bit,每個存儲單元存儲16 bit數據。先不管對錯,這么算起來的話:
2**(1+2+10+16)*16=2**(33)=8Gb
容量是對上了,然而這看起來和上面的表格里的有些東西卻并對不上。
在上面的表格中,關于Configuration一行,512Mbx16意味著該DDR顆粒尋址能力為512Mb,每個地址對應16 bit。由于對于DDR4列地址的低三bit并不參與譯碼,故尋址范圍大小的計算方式為:
2**(1(BG)+2(BA)+16(COL)+(10-3)COL)=2**26=512 Mb
如果你在Quartus進行配置的話,也會發現給使用者的接口AvalonMm總線地址位寬也恰好為26 bit。
Page Size
按照上面文章里面的解釋,prefetch相當于在DRAM Core與外面的IO建立了8多條通道,而Burst Fetch Length則是對于DDR顆??梢栽谥付ㄐ校械刂泛罂蛇B續讀取在該行指定列地址之后的多個列地址對應的內容。DDR4 prefetch和burst fetch length一般均為8,以上面的512Mbx16則意味著當發起一個讀指令時,將會返回8x16=128 bit=16 Byte字節數據。
Page Size所定義的為一行ROW所對應的數據量大小,如前所屬,參與尋址的列地址位寬為7,每個cell對應16 bits,對應burst fetch length為8,故Page Size的計算方式為:
2**7*16*8=2*14 bits=16 Kb=2 KB顆粒堆疊
像上面的單個顆粒容量大小為8Gb。在FPGA使用里,DDR常見的配置有x64/x32這樣的模式。
如果在板卡上使用DDR顆粒,以x64的形式來組織板卡DDR架構,那就是這樣的結構。
x64模式下,用到4片DDR,4片DDR的地址總線共用,數據總線則分成四份連接到四路DDR上。故此當你在IP上發起64字節讀寫請求時每個DDR分別承擔了16 Byte字節的讀寫,恰好為一次Burst Length。
而當你如果要是能ECC時,則需要5片DDR:
此時第五個DDR 8bit專門用于存儲ECC校驗結果。在ECC模式下,x72bit模式下,若非64字節讀取/寫入,則需將數據先讀取出來再更新寫入,效率有一定的降低~
審核編輯:劉清
-
FPGA
+關注
關注
1626文章
21665瀏覽量
601808 -
控制器
+關注
關注
112文章
16197瀏覽量
177396 -
DDR
+關注
關注
11文章
711瀏覽量
65225 -
ECC
+關注
關注
0文章
97瀏覽量
20532
原文標題:FPGAer淺入淺出DDR——容量規格篇(一)
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論