SDRAM
SDRAM:Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器,同步是指內(nèi)存工作需要同步時鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準;動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機是指數(shù)據(jù)不是線性依次存儲,而是自由指定地址進行數(shù)據(jù)讀寫。
所謂的影響性能是并不是指SDRAM的帶寬,頻率與位寬固定后,帶寬也就不可更改了。但這是理想的情況,在內(nèi)存的工作周期內(nèi),不可能總處于數(shù)據(jù)傳輸?shù)臓顟B(tài),因為要有命令、尋址等必要的過程。但這些操作占用的時間越短,內(nèi)存工作的效率越高,性能也就越好。
非數(shù)據(jù)傳輸時間的主要組成部分就是各種延遲與潛伏期。通過上文的講述,大家應(yīng)該很明顯看出有三個參數(shù)對內(nèi)存的性能影響至關(guān)重要,它們是tRCD、CL和tRP。每條正規(guī)的內(nèi)存模組都會在標識上注明這三個參數(shù)值,可見它們對性能的敏感性。
以內(nèi)存最主要的操作——讀取為例。tRCD決定了行尋址(有效)至列尋址(讀/寫命令)之間的間隔,CL決定了列尋址到數(shù)據(jù)進行真正被讀取所花費的時間,tRP則決定了相同L-Bank中不同工作行轉(zhuǎn)換的速度?,F(xiàn)在可以想象一下讀取時可能遇到的幾種情況(分析寫入操作時不用考慮CL即可):
1.要尋址的行與L-Bank是空閑的。也就是說該L-Bank的所有行是關(guān)閉的,此時可直接發(fā)送行有效命令,數(shù)據(jù)讀取前的總耗時為tRCD+CL,這種情況我們稱之為頁命中(PH,Page Hit)。
2.要尋址的行正好是前一個操作的工作行,也就是說要尋址的行已經(jīng)處于選通有效狀態(tài),此時可直接發(fā)送列尋址命令,數(shù)據(jù)讀取前的總耗時僅為CL,這就是所謂的背靠背(Back to Back)尋址,我們稱之為頁快速命中(PFH,Page Fast Hit)或頁直接命中(PDH,Page Direct Hit)。
3.要尋址的行所在的L-Bank中已經(jīng)有一個行處于活動狀態(tài)(未關(guān)閉),這種現(xiàn)象就被稱作尋址沖突,此時就必須要進行預(yù)充電來關(guān)閉工作行,再對新行發(fā)送行有效命令。結(jié)果,總耗時就是tRP+tRCD+CL,這種情況我們稱之為頁錯失(PM,Page Miss)。
顯然,PFH是最理想的尋址情況,PM則是最糟糕的尋址情況。上述三種情況發(fā)生的機率各自簡稱為PHR——PH Rate、PFHR——PFH Rate、PMR——PM Rate。因此,系統(tǒng)設(shè)計人員(包括內(nèi)存與北橋芯片)都盡量想提高PHR與PFHR,同時減少PMR,以達到提高內(nèi)存工作效率的目的。
SDRAM 基本知識
SDRAM只有一組地址線,一組數(shù)據(jù)線,其中地址線分為行地址和列地址,它通過RAS行地址鎖存器和CAS列地址鎖存器來實現(xiàn)行列。很多人可能會跟我一樣,算一下它的容量不符合自己板子,下面就是計算容量的公式。這也是公司比較正規(guī)的表示方法:
2,097,152-WORDS X 4BANKS X 16-Bits
4,194,304-WORDS X 4BANKS X 8-Bits
8,388,608-WORDS X 4BANKS X 4-Bits
SDRAM即同步動態(tài)RAM :所有輸入信號均在時鐘上升沿被采樣,需要動態(tài)刷新保持數(shù)據(jù)
1、重要的連接信號:
a、 RAS:行地址鎖存
b、 CAS:列地址鎖存
c、 WE:寫使能
d、 DQ0-DQ15:數(shù)據(jù)總線
e、 DQML、DQMH:數(shù)據(jù)I/O屏蔽,讀模式下屏蔽輸出緩沖,寫模式下屏蔽輸入緩沖,DQML控制DQ0-DQ7,DQMH控制DQ8—DQ15
f、 A10連接自動放電
2、擴展方式:
使用雙片級聯(lián),將16位數(shù)據(jù)線擴展為32位,從而與32位CPU匹配,優(yōu)化SDRAM性能。擴展后一個地址對應(yīng)32位,從而一個地址單元以4Byte進行數(shù)據(jù)訪問時,內(nèi)存會忽略A0和A1,故SDRAM的A0接CPU數(shù)據(jù)線的A2。如果需要訪問地址偏移為01的單個字節(jié),通過DQML和DQMH信號進行幫助。
3、SDRAM的burst mode:一種利用內(nèi)部列地址發(fā)生器來工作的高速讀寫模式,只要設(shè)置最開始的列地址,后面的地址就可以通過內(nèi)部的列地址發(fā)生器來自動生成。
4、SDRAM的初始化:
SDRAM上電后使用前必須要經(jīng)過一段初始化操作才可以使用。這個操作過程是標準的過程。這個過程如下:
a、 放電(precharge):關(guān)閉存儲單元,使存儲單元無效。
b、 自動刷新(auto-refresh)
c、 加載模式寄存器(Load Mode Register)
d、 正常讀寫
在輸入precharge命令后,因為必須是對所有BANK進行Precharge,所以A10這個管腳要設(shè)置成高,因此在Precharge后面要做一個讀的操作,這個操作最主要的是在SDRAM的尋址空間里設(shè)置的地址必須是A10是高的。在輸入Auto-refresh命令后,一般要跟幾句空操作或者讀什么之類的,反正要達到延遲的目的,以使得SDRAM有時間來完成refresh。之后就是要設(shè)置SDRAM的模式寄存器,這個寄存器里一般設(shè)置了burst長度,CAS,burst類型,操作模式,還有是設(shè)置SDRAM是工作在單個讀寫操作還是burst操作下。而這個寄存器的設(shè)置也是通過地址線來設(shè)置的,所以在發(fā)出Load Mode Register命令后要做一個操作可是使得在SDRAM的地址線上出線的值就是你要設(shè)置的值。這里很有必要提醒的一下的是,這個操作是8位的操作。設(shè)置完模式寄存器后就進入正常操作模式。
5、基本的讀寫操作:
SDRAM的基本讀操作需要控制線和地址線相配合地發(fā)出一系列命令來完成。先發(fā)出BANK激活命令(ACTIVE),并鎖存相應(yīng)的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大于tRCD(SDRAM的RAS到CAS的延遲指標)時間后,發(fā)出讀命令字。CL(CAS延遲值)個工作時鐘后,讀出數(shù)據(jù)依次出現(xiàn)在數(shù)據(jù)總線上。
在讀操作的最后,要向SDRAM發(fā)出預(yù)充電(PRECHARGE)命令,以關(guān)閉已經(jīng)激活的頁。等待tRP時間(PRECHARGE)命令,以關(guān)閉已經(jīng)激活的頁。等待tRP時間(PRECHAREG命令后,相隔tRP時間,才可再次訪問該行)后,可以開始下一次的讀、寫操作。SDRAM的讀操作只有突發(fā)模式(Burst Mode),突發(fā)長度為1、2、4、8可選。SDRAM的基本寫操作也需要控制線和地址線相配合地發(fā)出一系列命令來完成。先發(fā)出BANK激活命令(ACTIVE),并鎖存相應(yīng)的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。
BANK激活命令后必須等待大于tRCD的時間后,發(fā)出寫命令字。寫命令可以立即寫入,需寫入數(shù)據(jù)依次送到DQ(數(shù)據(jù)線)上。在最后一個數(shù)據(jù)寫入后延遲tWR時間。發(fā)出預(yù)充電命令,關(guān)閉已經(jīng)激活的頁。等待tRP時間后,可以展開下一次操作。寫操作可以有突發(fā)寫和非突發(fā)寫兩種。突發(fā)長度同讀操作。
?。?/p>
6、AT91sam9260 SDRAM
型號MT48LC16M16A2,為4MB*4*16bit=32MB,采用雙片級聯(lián)構(gòu)成32位64MB的SDRAM。SDRAM采用地址信號線復(fù)用。行尋址使用A0-A12,尋址范圍8K字節(jié);列尋址使用A0-A8,尋址范圍512字節(jié);bank尋址使用BA0-BA1,尋址四個bank。使用額外的四根信號線連接兩片SDRAM的BA[1:0]。
AT91SAM9260使用SDRAMC初始化SDRAM初始化順序如下:
a、 設(shè)置配置寄存器SDRAMC_CR,填入寄存器中的值單位均為時鐘周期:
NC: Number of Column Bits,9
NR: Number of Row Bits,13
NB: Number of banks,4
CAS: CAS Latency,2-3
DBW:數(shù)據(jù)位寬32位
tWR:Write Recover Time,14ns
tRC: Row Cycle Delay, 默認值7
tRP: Row Precharge Delay,默認值3
tRCD:Row To Column Delay,15-20ns
tRAS:Active To Precharge Delay,37-44ns
tXSR:Exit Self Refresh To Active Delay,67-75ns
b、 在存儲設(shè)備寄存器(SDRAMC_MDR)中設(shè)置存儲類型為SDRAM
c、 提供200us的延遲
d、 向SDRAM設(shè)備發(fā)出NOP命令:設(shè)置SDRAM 模式寄存器中設(shè)置模式為1,向SDRAM任意地址執(zhí)行寫操作。
e、 向SDRAM設(shè)備發(fā)出放電命令:設(shè)置SDRAM 模式寄存器中設(shè)置模式為2,向SDRAM任意地址執(zhí)行寫操作。
f、 提供8個自動刷新周期:設(shè)置SDRAM 模式寄存器中設(shè)置模式為4,向SDRAM任意地址執(zhí)行寫操作。
g、 發(fā)出模式寄存器設(shè)置周期,配置SDRAM模式寄存器參數(shù),尤其是CAS Latency和burst length。程序必須設(shè)置模式寄存器為模式3,對SDRAM執(zhí)行寫訪問,地址中BA[1:0]必須為0
h、 進入正常模式:設(shè)置SDRAM 模式寄存器中設(shè)置模式為0,向SDRAM任意地址執(zhí)行寫操作。
在SDRAMC Rfresh Timer寄存器的count字段中寫入刷新率,刷新率為刷新周期間的延遲,自動刷新周期7.81us*100MHz=781
SDRAM(Synchronous DRAM),因為Synchronous,所以所有信號都是和時鐘信號同步。可以把SDRAM看成是EXCEL電子表格,通過行地址和列地址就唯一的鎖定了一個單元格的內(nèi)容,一般的SDRAM都有2個或者兩個以上的Bank,就像一個EXCEL文檔有2個或者兩個以上的sheet,每個sheet又由行號和列號鎖定單元格內(nèi)容。
在實際工作中,bank地址和行地址一起發(fā)出,這個命令叫做行激活(Row Active),此后列地址和操作指令(讀或?qū)懀┮惨黄鸢l(fā)出,這兩組信號之間有個延遲。根據(jù)行業(yè)標準,定義此時間為從行有效到讀/寫命令發(fā)出之間的間隔tRCD,即RAS to CAS Delay(RAS至CAS延遲,RAS就是行地址選通脈沖,CAS就是列地址選通脈沖)。這是SDRAM一個很重要時序參數(shù),Uboot初始化時候要配置。在列地址被選中后,數(shù)據(jù)傳輸過程被觸發(fā),但在這之前有個數(shù)據(jù)準備時間,即CL(CAS Latency),它也是一個重要的SDRAM參數(shù),但該時間只是針對讀操作,寫操作沒有這一時延。
SDRAM的數(shù)據(jù)傳輸基本上都是連續(xù)的,所以SDRAM中有突發(fā)傳輸?shù)母拍睿话l(fā)(Burst)是指在同一行中相鄰的存儲單元連續(xù)進行數(shù)據(jù)傳輸?shù)姆绞?,連續(xù)傳輸?shù)闹芷跀?shù)就是突發(fā)長度(Burst Lengths,簡稱BL),在初始化之前要通過寄存器定義。 在進行突發(fā)傳輸時,只要指定起始列地址與突發(fā)長度,SDRAM就會依次地自動對后面相應(yīng)數(shù)量的存儲單元進行讀/寫操作而不再需要控制器連續(xù)地提供列地址這樣,除了第一筆數(shù)據(jù)的傳輸需要若干個周期(主要是之前的延遲,一般的是tRCD+CL)外,其后每個數(shù)據(jù)只需一個周期的即可獲得。
在數(shù)據(jù)讀取完之后,為了騰出讀出放大器以供同一L-Bank內(nèi)其他行的尋址并傳輸數(shù)據(jù),SDRAM芯片將進行預(yù)充電(precharge)的操作來關(guān)閉當前工作行。從開始關(guān)閉現(xiàn)有的工作行,到可以打開新的工作行之間的間隔就是tRP(Row Precharge command Period,行預(yù)充電有效周期)。
大家可以計算一下,三個規(guī)格的容量都是128M,大家可以參照一下。(因為行列復(fù)用,所以地址線的數(shù)目一般是算雙倍)
評論
查看更多