內存條的組成、編址、尋址和讀寫方式


一、組成

這是一個2GB的DDR3內存條,我們可以看到,內存條的物理組成:金手指、存儲芯片、還有各種控制電路和元器件,還有就 PCB板。我們今天要談的組成不是這些,而是它作為一個數據容器的組成:

  • Rank
    CPU與內存之間的接口位寬是64bit,也就意味着CPU在一個時鍾周期內會向內存發送或從內存讀取64bit的數據。可是,單個內存顆粒的位寬僅有4bit、8bit或16bit,個別也有32bit的。因此,必須把多個顆粒並聯起來,組成一個位寬為64bit的數據集合,才可以和CPU互連。生產商把64bit集合稱為一個物理BANK(Physical BANK),簡寫為P-BANK。為了和邏輯BANK相區分,也經常把P-BANK稱為RANK或Physical RANK,把L-BANK則簡稱為BANK。如果每個內存顆粒的位寬是8bit,應該由8個顆粒並聯起來,組成一個RANK(64bit);同理,如果顆粒的位寬是16bit,應該由4個顆粒組成一個RANK。由此可知:Rank其實就是一組內存顆粒位寬的集合,也可以叫Chips,在PCB上,往往把一面上的內存顆粒組成一個Rank,另一面是另外一個Rank(假若有的話),這樣也可以將Rank理解內存條的Side(面)。具體說,當顆粒位寬×顆粒 數=64bits時,這個模組就是有一個RANK。為了保證和CPU的溝通,一個模組至少要有一個RANK。但是,為了保證有一定的內存容量,目前,DDR2內存,經常是采用一個模組兩個RANK的架構。“模組構成”中的“R”“RANK”的意思。“2R”是說組成模組的RANK數(Number of ranks of memory installed)是2個。有“1R”和“2R”兩種;“模組構成”中的“×8”是顆粒的位寬(bit width),有×4、×8和×16三種.
  • Chip(Memory)
    存儲芯片,又叫內存顆粒。真正提供存儲的器件。
  • Bank
    Chip里包含多個Bank。一個Bank就是一個存儲矩陣庫。由Chip的BA線的位寬決定個數。

     

  • Cell
    存儲單元,可以保存1bit的數據,Bank由很多的Cell組成,由行列來確定一個Cell。

     

 Rank指的是連接到同一個cs(Chip Select,片選)的所有內存顆粒chips,內存控制器能夠對同一個rank的所有chips同時進行讀寫操作,而在同一個rankchip也分享同樣的控制信號。rank1和rank2共享同一組addr/command信號線,利用cs片選線選擇欲讀取或是寫入的那一組,之后將存儲內容經由MUX多路器送出。bank再往下分就是實際存儲單位元的電路,一般來說橫向選擇排數的線路稱為row(row enable, row select, word line),縱向負責傳送信號的線路稱為column(bitline),每組bank的下方還會有個row buffer(sense amplifer),負責將讀出的row內容暫存。

 

二、編址

前面我們知道了DRAM顆粒以及內存模塊是如何擴展字長和容量的。一個內存可能是8位,也可能是64位,容量可能是1M,也可能是1G。那么內存是如何編地的呢?和地址總線,計算機字長之間又有什么關系呢?內存條容量的大小和它芯片擴展方式有關。比如我們內存模塊是采用 16M*8bit的內存顆粒,那么我們使用4個顆粒進行位擴展,成為16M*32bit,使用4個顆粒進行字容量擴展變為64M*32bit。那么我們內存模塊使用了16個內存顆粒,實際大小是256MB。

 我們需要對這個256M的內存進行編址以便CPU能夠使用它,通常我們多種編址方式:

  1. 按字編址:    對於這個256M內存來說,它的尋址范圍是64M,而每個內存地址可以存儲32bit數據。
  2. 按半字編址:對於這個256M內存來說,它的尋址范圍是128M,而每個內存地址可以存儲16bit數據。
  3. 按字節編址:對於這個256M內存來說,它的尋址范圍是256M,而每個內存地址可以存儲8bit數據。

對於我們現在的計算機來說,主要都是采用按字節編址的方式。所以我們可以把內存簡單的看成一個線性數組,數組每個元素的大小為8bit,我們稱為一個存儲單元,對這些存儲單元我們從0x00000000開始沿着Rank的訪問編址,每8個Cell加1,這樣數組里的每個元素都由地址,超過一個Rank的,從上一個Rank的最后一個Cell的地址加1作為基地址。這一點很重要, 這也是為什么對於32位計算機來說,能使用的最多容量的內存為4GB。

 

三、尋址

當CPU通過地址總線傳過來一個物理地址時,內存條是如何尋找到一個Cell的呢。我們首先要看內存條是如何根CPU連接的。

在看看DDR3 128*64bit*16的地址線情況

根據連接情況和組成情況,當物理地址從MMU單元出來時,CPU會把需要訪問的地址當做一個數據給內存控制器,如果不是集成在CPU內部,那么通過DMI總線(CPU鏈接北橋的總線)傳送給北橋,當然這個是會加上一些標識以方便北橋識別,這個數據是需要訪問的內存地址, 當北橋(內存控制器)收到這個地址后,通過集成在控制器中的"邏輯映射", 內存控制器就知道這個地址對應了了那個rank(p-bank),那個L-bank,L-bank中的那個row地址,L-bank中的那個Column地址,及確定了那個CS#信號有效(選擇rank),那組bank#信號有效(選擇L-bank),  然后北橋在遵從SPD設定的內存的時序下按照固定的時序發送CS#信號 bank#信號 row address column address 特殊狀態下還會有DQM信號 BL信號等等。也就是說從內存控制器出來,然后是選擇DIMM,根據片選到Rank,在到Bank,然后在Chip的地址解碼器里輸出行地址和列地址,定位到Cell。其實這也就是說物理地址要包含行地址、列地址,bank地址、rank信息等。根據上面的表,物理地址可能的構成如下:

四、讀寫方式

讀取時首先內存控制器將1組位址現傳到內存上,控制器跟着傳送控制信號;如果是多rank的情況,CS也會送到對應信號選擇的目標rank上。接着由於每個rank是由多個chip組成,每個chip僅負責部分的資料讀取,chip接收到位址信號后,將位址放入內部的row/column解碼器找出對應的bank位址(每家廠商每款產品內部的bank組合可能不同,因此相應地也會略有不同),接着開啟row線,同一排row的內部內容就會流到row buffer內部,row buffer判斷信號為0或是1之后就輸出存儲內容。

寫入時除了位址資料以外,還會傳送欲寫入的內容至芯片內部的input buffer,同樣的也是按照row/column解碼器找出對應位址之后寫入。

 


免責聲明!

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



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