天天看點

DRAM 記憶體結構

作者:直爽東北人在廣東

工作心得體會

---DRAM的記憶體結構學習

日常研發工作中,如果遇到平台切換經常會遇到底層的移植,作為一名終端工程師會不可避免的遇到比如底層驅動、uboot移植等的開發過程,之前的研發工作一直圍繞在應用業務邏輯層面,相比較與單純的裸機開發,終端帶作業系統的裝置軟體移植涉及的方面相當之多,從對編譯建構本身的流程了解,到常用buildroot建構體系架構的掌握,再到系統的多級引導啟動,甚至到對硬體時序如dram的精準掌控,這些困難讓自己對于linux作業系統下的移植工作一直有望而生畏的情緒。但不積跬步無以至千裡,沒有開始就永遠沒有成功的可能,看似深奧複雜的理論終歸到底是為了我們更好認識世界,是以經曆一番心理建設後,開始逐漸學習相應知識,并有一定的心得體會,在此分享大家,以便共同進步。

大家可能都沒有太關注到的dram時序原理,uboot的一個重要用途就是進行記憶體的初始化,然後将核心搬移到dram中進行運作,是以在uboot中做dram初始化控制就是必須了解掌握的内容。說實話,關于dram的介紹資料是比較少的,初學者看到datasheet也大都如看天書一般,很多基礎的概念都不了解,這樣是無法進行後續的uboot移植工作的。

Dram的組成結構,嵌入式中dram的組成結構和pc機器中的類似。Dram中最小的實體存儲機關是一個電容,充電辨別1,放電後辨別0。由若幹微小的電容構成的矩陣稱之為memory array。Array 外接行解碼器、列解碼器、感應放大器,以及最終的資料緩存。當讀取記憶體時候,位址信号被解碼器解碼,導緻行(world line)選通,此時電容記憶體儲的0/1資料被存儲到行緩存中,随後列位址被解碼,最終确定哪一位被讀取,是以一個位址隻能從一個array單元中擷取一個bit位。Array結構的示意圖如下:

DRAM 記憶體結構

Array結構示意圖

當多個array并聯(位址線共用,資料緩存單獨)在一起後就可以實作一個位址讀取8bits,也就是一個位元組的資料,這樣就出現了bank的概念。Bank的示意圖如下:

DRAM 記憶體結構

Bank邏輯示意圖

Bank的x2,x4,x8種類的,x8比較常見,也就是上面所說的一次可讀取一個位元組的存儲結構。多個bank組合構成一個memory device,pc機記憶體插槽上的記憶體條上有一塊一塊的晶片就是一個memory device(後簡稱MD),多個MD則構成一個rank。至此一個完整的記憶體結構節可以按照下圖進行描述。由示意圖中可看出,多個bank共用I/Os,内部的位址線互相獨立,在mux的作用下,MemoryDevice 公用位址線,控制總線,一個MD可讀取出一個位元組。是以當發送位址後,每個memoryDevice都有效,都會有一個位元組(8I/O為例)輸出。值得注意的是,memoryDevice中bank的選通同樣是有控制信号的。

DRAM 記憶體結構

Rank結構示意圖

DRAM 記憶體結構

記憶體整體結構示意圖

記憶體插條上由多個memory device 排列構成一個rank,記憶體插條又分單面rank和雙面rank,rank上的device位址線、控制線共用,資料線互相獨立,這樣由圖中的示例就可以看出接在memory controller上的rank可以一次被讀取4*8=32bits=4bytes。而多個rank之間的邏輯也是位址線、控制線共用,由片選決定讀取哪個rank中的資料。

繼續閱讀