我們將介紹:
DDR x4 x8 x16 chip width
DDR bank &?rank
DDR bankgroup
DDR Prefetch
DDR Page Size
DDR?Row Buffer
DDR Bank Interleaving
DDR Cell & Command Sequence
DDR x4 x8 x16
x4 x8 x16 指的上圖黑色的chip輸出的位寬,正常的DDR bus width 需要64bit,所以
chip width | x4 | x8 | x16 |
黑色chip數(shù)量 | 16 | 8 | 4 |
上圖是最常見(jiàn)的x8,也就有8個(gè)黑色的chip顆粒。x16的性能和x8的性能相比怎么樣呢?
更差,因?yàn)閤16的bankgroup更少。
DDR4 x8 ?4 bankgroup
圖自 https://www.micron.com/-/media/client/global/documents/products/data-sheet/dram/ddr4/8gb_ddr4_sdram.pdf
DDR4 x16 ?2 bankgroup
DDR bank rank
DDR 正面就是一個(gè)rank,背面如果也有顆粒,那就又是一個(gè)rank。實(shí)物圖中的8個(gè)顆粒組成了一個(gè)rank。
其中的一個(gè)顆粒的架構(gòu)圖如上面兩個(gè)圖所示,內(nèi)部分成bankgroup,bankgroup內(nèi)又分成bank。
我們每次發(fā)送的讀寫(xiě)命令都是操作的各個(gè)顆粒里面同一個(gè)位置的bank。比如chip0的bank3,chip1的bank3,chip2的bank3…
DDR bankgroup
DDR的bankgroup可以理解為是將顆粒分成了group進(jìn)行操作,也可以抽象成是把黑色顆粒chip內(nèi)又獨(dú)立成了各個(gè)單獨(dú)的小顆粒,即各個(gè)bankgroup。
增加bank的數(shù)量就意味著可以增加各個(gè)bank之間pipeline操作,因此bank數(shù)量越多,吞吐率越大。
為什么有bankgroup?
解決這個(gè)問(wèn)題我們先要理解prefetch。
DDR每更新一代,外面管腳pin的傳輸速度都翻倍。但是其實(shí)DDR內(nèi)部真正memory的速度和latency是沒(méi)有變化的,DDR通過(guò)預(yù)取完成這個(gè)假象。
DDR3 x8的預(yù)取的本質(zhì):
x8即每個(gè)顆粒輸出8bit,DDR內(nèi)部慢速的memory通過(guò)每次輸出64bit,在外部快速的pin管腳上連續(xù)輸出,即可以得到8倍頻。
如果xW W為每個(gè)顆粒的位寬,DDR memory和外部管腳的速度相差為M,那么每個(gè)顆粒預(yù)取WxN bit。
截自 1 Gig x 8的圖,右側(cè)的64即為預(yù)取的64bit。
?
DDR N | DDR | DDR2 | DDR3 | DDR4 | DDR5 |
Prefetch | 2 | 4 | 8 | 8 | 16 |
?
8倍頻的DDR3的Prefetch 8,bus width 64bit,正好對(duì)應(yīng)64B。
16倍頻的DDR4如果繼續(xù)prefetch16,那么就會(huì)對(duì)應(yīng)128B,與cacheline的64byte對(duì)應(yīng)不上,因此DDR4采用了上文說(shuō)的bankgroup,在不同的bankgroup間切換輸出,來(lái)避免連續(xù)的輸出128Byte。
32倍頻的DDR5 prefetch16,難道就不會(huì)有輸出128B的問(wèn)題了嗎?
確實(shí)沒(méi)有這個(gè)問(wèn)題。如果想要繼續(xù)使用bankgroup的方法,在多個(gè)bankgroup之間切換,也很難做到。因此DDR5的64bit bus切成了兩半,32bit x 16 仍然是64B。
實(shí)際上64bit額外還有ECC bit,不過(guò)我們不必理解。
DDR Page Size
DDR Page Size實(shí)際上是每次激活DDR時(shí),輸出到row buffer中的數(shù)據(jù)大小,具體的計(jì)算方式是2^column_width * chip_width / 8 Byte.
如果DDR的column address 10 bit, 那么chip_width是4的 page size對(duì)應(yīng)512B,chip_width是8的 page size對(duì)應(yīng)1KB。
DDR Row Buffer
每次activation激活命令發(fā)送到DDR時(shí),將DDR的一整行輸出到row buffer中,如上圖所示。row buffer中的一小部分當(dāng)前請(qǐng)求的被預(yù)取的數(shù)據(jù)被輸出到外部。 如果我們下一次需要讀取另一行,那么就需要先寫(xiě)回這一行,然后precharge bit line,再去打開(kāi)新的一行,這樣代價(jià)還是挺大的。
所以比較理想的情況是繼續(xù)讀取當(dāng)前這一行的下一個(gè)部分?jǐn)?shù)據(jù),這樣不需要寫(xiě)回,可以持續(xù)的從row buffer中讀取。
圖自https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6853217
上圖中,row size即page size為2KB,本次預(yù)取chip3中的128b,如果下一次能繼續(xù)讀取后面的128b,那么只需要發(fā)送一個(gè)command命令就可以了。
我們借著這張圖回顧一下上面介紹過(guò)的內(nèi)容:
每個(gè)chip位寬16bit,需要4個(gè)chip組成64bit
外部時(shí)鐘800Mhz,因?yàn)镈DR double rate傳輸,所以實(shí)際上是1600Mhz,內(nèi)部時(shí)鐘200Mhz,時(shí)鐘相差8倍。所以我們每次需要預(yù)取16x8=128bit.
注意看上圖中的每個(gè)chip都有一個(gè)紅色的橫條,也就是每次讀取的時(shí)候都是不同chip的同一個(gè)位置的bank被讀取。
那么為什么Chip3中的不同的bank的紅色橫條的位置不一樣?
DDR Bank Interleaving
DDR 同一個(gè)bank內(nèi)不同的row之間切換需要上文說(shuō)的 restore寫(xiě)回和precharge。
但是不同bank之間,共享命令地址數(shù)據(jù)總線,但是內(nèi)部的memory是獨(dú)立的,所以我們可以訪問(wèn)bank0的第1行之后,訪問(wèn)bank1的第7行,再訪問(wèn)bank3的第2行,bank之間的pipeline輸出,最大程度的利用數(shù)據(jù)總線。
如下圖所示,
DDR Cell & Command Sequence
上文說(shuō)的DDR需要寫(xiě)回,是因?yàn)镈DR是電容組成,存在泄露,除了寫(xiě)回,也需要定期刷新。上圖中的Cs存儲(chǔ)真正的memory。為了簡(jiǎn)單,我們將電壓理解成0/1 V.
圖自https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7446096
上一次操作結(jié)束后,會(huì)對(duì)DRAM precharge,將Cbl charge到0.5v的電位。
我們?nèi)绻l(fā)起讀命令,activation操作,會(huì)激活一行,即拉高WL線,這時(shí)Cs的電位0/1 V和Cbl0.5v的電壓會(huì)發(fā)生charge sharing
Sensing階段會(huì)將電壓差經(jīng)過(guò)sense amplifier 存儲(chǔ)這一行的數(shù)據(jù)到row buffer中
Read 命令會(huì)從row buffer中,預(yù)取對(duì)應(yīng)長(zhǎng)度的數(shù)據(jù),輸出到外側(cè)
在sense amplifier 完成工作后,會(huì)將Vdd的電壓充至1V,即為restore,此時(shí)被破壞了的數(shù)據(jù)得到了恢復(fù)
斷開(kāi)wordline,充電bitline至0.5v,即為precharge操作。
簡(jiǎn)單的說(shuō)
Activate 激活對(duì)應(yīng)行 word line,數(shù)據(jù)輸出到row buffer
Read 列命令對(duì)應(yīng)從row buffer中讀取數(shù)據(jù)
Precharge命令恢復(fù)bitline至一半電壓
審核編輯:湯梓紅
評(píng)論