小華的部落格: [我所知道的BIOS]->[DRAM Sizing] (1) 7

搜尋此網誌

網頁

星期一, 10月 08, 2007

[我所知道的BIOS]->[DRAM Sizing] (1) 7

現在要提到的是BIOS POST中一個重要的 task : DRAM sizing !
它主要的工作是:讓我們所插的記憶體可以正常且穩定的運作 !

[Q] 為什麼穩定的記憶體這麼重要 ?
=> 因為,有太多東西需要存放其上了,例如: BIOS code(之後在 shadow部分會提到), 開機之後所需要的 device drivers and OS,etc...假如記憶體不穩,在存取 memory時無法得到需要的資料,或是根本連 read or write都不行,那麼便會發現: 不是 system hang(maybe randomly) during POST ,或是進OS後 blue screen...

所以,"BIOS DRAM sizing不好" 是系統不穩的原因之一. (地基都不穩了,怎能奢求其上的房子可以堅固 ^_^ )

在介紹 DRAM sizing之前,先稍微簡單說明 DRAM 的相關知識.(若有不足或錯誤之處,請不吝指正...)

1. DRAM chip 可看做是 square array;基本的單位 is cell. 每一個 cell 是由數個電晶體組成(depends on cell width;記得是: 1 bit 由一個電晶體組成,可以記錄 0 and 1的資訊; 1 cell 可能含 n bits;讀取DRAM cell屬於破壞性的讀取,因此讀取的同時常伴隨著 "refresh" <- 與 SRAM不同)

2. 要存取 DRAM chip 中的資料,必須提供 row and column address;這兩個 address是有先後順序的;意即: row address先送,然後再送 column address to chip.
(呼應前面所言: square array,類似 x,y 定址) 最後 指到的 data 將被放到 data bus上,CPU會讀走

*若有空可以上網查: 為什麼DRAM chip所需的 pins 是減半(half)的 ^_^

3. DRAM controller 現在一般都做在 chipset 中,Ex. NB內(AMD K8 CPU則是將 memory controller做在CPU內 ,for better performance);其工作便是 interfacing DRAM chip;充作其他 devices(Ex. CPU,DMA controller...etc) 與 DRAM chip 之間的橋樑 !

Ex. In BIOS ,寫下列的 code 欲 "read", "記憶體", "位置8處"的資料:
xor ax, ax
mov es, ax
mov edi, 00000008h
mov al, BYTE PTR es:[edi]

[00000008h] 是 programmer所"知"的 linear address,但DRAM chip 只認得 MA0~MAx,BA0~BA1..etc訊號,如何溝通 ? => 靠 DRAM controller 來轉換 !!!

4. DRAM access time => 從 DRAM chip 接到 address signals 直到 valid data 出現在 data bus上的時間(assume "read" memory),稱之;也是DRAM chip的特性之一.

5. 現今常見的 DRAM is DDR/DDR2 SDRAM. 所謂的 "S"DRAM 指的是 Synchronous DRAM,即 DRAM operation 都是參考一個 clock執行的;即與它同步(synchronous). DDR 指得是 Double Data Rate,亦即在 clock 的 rising and falling edge都可以傳資料. 而DDR2指的是: DDR的 "第二代" ! (別想成 DDR2 = DDR x 2 !!! 雖然剛好有些數值是兩倍的關係...)

Ex. DDR2 533(or called PC2 4200) =>
1. "2" means DDR2
2. 533 is transfer rate( 每一秒可做 533筆資料 transfer )
3. 4200 means: 533筆資料/s * 每筆 8 bytes( => 64 bit width) ~= 4200MB/s


下一章將介紹 DRAM sizing 的 flow/information !

2 則留言:

匿名 提到...

可以說一下CPU issue 32bit address之後, DRAM controller怎麼去把他分成 Row, Column, Bank address & Chip select(Rank selection) (assume DDR3 BA0~BA2)...假設CPU issue 0xA000_FFFFh, 則Row address=?
Column address=? Bank address=? and which rank is asserted?

Thanks,

匿名 提到...

Hello, 小華:
不知您是否知道1樓提出的問題,由於目前小弟工作需要,也急需知道row, column, bank與linear address的關係,感謝您!!!!