為什么2440與SDRAM地址線錯兩位相連?
為什么2440與SDRAM地址線錯兩位相連?
網上說,錯兩位是為了32位對齊(地址為8位數(shù)據(jù)地址,2440位寬為32,錯兩位,一次跳4byte)。
下面是聽南方大哥的教程時記錄的:
由于兩個內存合起來“數(shù)據(jù)位寬”是32位。32時,地址總線的地址LADDR0和LADDR1不需要使用。
內存是32位數(shù)據(jù)寬度,2440的 LADDR0和LADDR1就不用接,從LARRD2開始接到內存的A0一直往下接。 內存是16位數(shù)據(jù)寬度,2440的LADDR0不用接,從LADDR1開始接到內存的A0一直往下接。 內存是8位數(shù)據(jù)寬度,2440就從LADDR0開如接到8位位寬的內存的A0一直往下接。
原因:2440的地址單位是“字節(jié)”。如果內存芯片位寬是32位(即讀或寫內存一次都是得到4字節(jié)),這時CPU發(fā)出0,1,2,3這4個地址,都是訪問到這個內存芯片的同一個單元,返回則都是返回同一個4字節(jié)的數(shù)據(jù)(CPU訪問內存某些地址上的數(shù)據(jù),訪問內存上某地址后取到地址上的數(shù)據(jù))。這樣CPU發(fā)出的0,1,2,3這4個地址就對應了內存上的同一塊。 CPU發(fā)出0~3這4個地址去訪問內存中數(shù)據(jù),而內存只能夠以32位來訪問,返回的永遠是4字節(jié),接收的也永遠是4字節(jié)。這樣對于CPU發(fā)出的0~3這4個地址,都是返回4個字節(jié)給CPU。而CPU如何處理返回的數(shù)據(jù)則是CPU 的事情,假如CPU其實只是想要返回4字節(jié)中的1個字節(jié),則這就要CPU內部的存儲管理器去把返回4字節(jié)中想要的1字節(jié)挑出來。那去“硬件連線”上來看就是把0,1這兩個地址(LADDR0-1)忽略掉,因為不管LADDR0和 LADDR1如何變化,訪問到32位位寬內存的都是同一個地址,起作用的都是LADDR2之后的地址。 只是我不知道如何計算,這里 忽略 LADDR0-1,是如何計算出來的?
回復:為什么2440與SDRAM地址線錯兩位相連?
你把一個地址代進去試試看,比如CPU發(fā)出0X10000、0X10001這兩個地址,ADDR1、ADDR0分別為00、01,但是由于ADDR0、ADDR1不接到外部的芯片上,所以訪問到的都是芯片上第(0x10000 >> 2)個單元