SDRAM/DDR是怎么尋址的?


SDRAM/DDR是怎么尋址的?

為了讀取特定單元格的數據,在尋址時要首先確定是哪一個bank,然后在這個選定的bank中進行行列的尋址。在實際工作中,bank的地址與相應的行地址是同時發出的,此時這個命令稱之為"行有效"或者“行激活”。在此之后,發送列地址尋址命令和具體的操作命令(讀或寫),這兩個命令也是同時發送的。行列地址是可以復用的,一般來說DDR芯片的地址線為A0~A15,低地址線會被行列復用。以K4B4G1646B 4Gbit 256MB x 16bit內存芯片為例,A0~A14用做行地址,A0~A9用做列地址,這款芯片同時含有B0~B2用來選擇bank。

在實際工作中,Bank地址與相應的行地址是同時發出的,此時這個命令稱之為“行激活”(Row Active)。在此之后,將發送列地址尋址命令與具體的操作命令(是讀還是寫),這兩個命令也是同時發出的,所以一般都會以“讀/寫命令”來表示列尋址。根據相關的標准,從行有效到讀/寫命令發出之間的間隔被定義為tRCD,即RAS to CAS Delay(RAS至CAS延遲,RAS就是行地址選通脈沖,CAS就是列地址選通脈沖),我們可以理解為行選通周期。tRCD是DDR的一個重要時序參數,廣義的tRCD以時鍾周期(tCK,Clock Time)數為單位,比如tRCD=3,就代表延遲周期為兩個時鍾周期,具體到確切的時間,則要根據時鍾頻率而定,DDR3-800,tRCD=3,代表30ns的延遲。 
 
圖中顯示的是tRCD=3 
接下來,相關的列地址被選中之后,將會觸發數據傳輸,但從存儲單元中輸出到真正出現在內存芯片的 I/O 接口之間還需要一定的時間(數據觸發本身就有延遲,而且還需要進行信號放大),這段時間就是非常著名的 CL

下面來看一個具體例子。
該例子中,用兩個16bit的DDR3內存拼成了一個32bit的DDR3.
每塊16bit DDR3的大小為512M Bytes.
看看硬件上連接,我們這兒只關心地址線和數據線,CS, CK, CKE, CAS, RAS等暫時不考慮。
第一片16bit DDR3的BA0, BA1, BA2連接到了CPU的BA0, BA1, BA2。
第二片16bit DDR3的BA0, BA1, BA2也連接到了CPU的BA0, BA1, BA2。
第一片16bit DDR3的A0~A14連接到了CPU的A0~A14。
第二片16bit DDR3的A0~A14連接到了CPU的A0~A14。
第一片16bit DDR3的D0~D15連接到了CPU的D0~D15。
第二片16bit DDR3的D0~D15連接到了CPU的D16~D31。

分析下該實例。
bank address有三個bit,所以單個16bit DDR3內部有8個bank.
表示行的有A0~A14,共15個bit,說明一個bank中有2^15個行。
表示列的有A0~A9,共10個bit,說明一個bank中有2^10個行。
來看看單塊16bit DDR3容量:
2^3*2^15*2^10=2^28=256M
我們的內存是512M,到這兒怎么變成256M了?被騙了?
呵呵,當然沒有。
忘了我們前面一直提到的16bit。
16bit是2個byte對吧。
訪問一個地址,內存認為是訪問16bit的數據,也就是兩個字節的數據。
256M個地址,也就是對應512M的數據了。
真相大白。賣內存的沒騙俺。

再來看看兩個16bit是如何組成一個32bit的。
有一個概念一定要清楚,這兒所說的兩個16bit組成一個32bit,指的是數據,與地址沒有關系。
我開始這一塊沒搞清楚,一直認為是兩個16bit的地址組成了一個32bit的地址。然后高位地址,地位地址,七七八八。。。
之后沒一點頭緒。
將16bit/32bit指的是數據寬度之后,就非常明了了。
每一塊16bit DDR3中有8個bank,2^15個row,2^10個column。也就是有256M個地址。
看前面的連線可知,兩塊16bit DDR3的BA0~BA2和D0~D14其實是並行連接到CPU。
也就是說,CPU其實認為只有一塊內存,訪問的時候按照BA0~BA2和D0~D14給出地址。
兩塊16bit DDR3都收到了該地址。
它們是怎么響應的呢?
兩塊內存都是16bit,它們收到地址之后,給出的反應是要么將給定地址上2個字節送到數據線上,要么是將數據線上的兩個字節寫入到指定的地址。
再看數據線的連接,第一片的D0~D15連接到了CPU的D0~D15,第二片的D0~D15連接到了CPU的D16~D31。
CPU認為自己訪問的是一塊32bit的內存,所以CPU每給出一個地址,將訪問4個字節的數據,讀取/寫入。
這4字節數據對應到CPU的D0~D31,又分別被連接到兩片內存的D0~D15,這樣一個32bit就被拆成了兩個16bit.
反過來,也就是兩個16bit組成了一個32bit.
CPU訪問的內存地址有256M個,每訪問一個地址,將訪問4個字節,這樣CPU能訪問的內存即為1G.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM