SDRAM小結
1,SDRAM的地址線,
在我們一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址線,然后可以算出尋址空間,比如有11根地址線,那尋址空間就是2的11次方減1。但是SDRAM是分列地址和行地址的,行、列地址線是復用的,所以有時候我們看到說尋址空間有多大多大,但是看看地址線怎么就那么幾根啊,呵呵。SDRAM一般還有2根BANK的線,分成4個BANK,在有的處理器的SDRAM控制模塊中,這兩根線可能映射到地址線的某兩根去。一般芯片常按照以下方式寫芯片的配置,比如4Meg x 4 x 16,那這個芯片就是256Mbits。其中16指數(shù)據(jù)線是16根,中間一個4是只分4個BANK, 每個BANK是4Meg。
2,SDRAM的初始化
SDRAM上電后使用前必須要經(jīng)過一段初始化操作才可以使用。這個操作過程是標準的過程。這個過程如下
A: precharge
B: auto-refresh
C: Load Mode Register
D: Normal Read/Write
在上電后輸入初始化命令值錢,最少要100us延遲(這個其實很容易滿足,呵呵)。
在輸入precharge命令后,因為必須是對所有BANK進行Precharge,所以A10這個管腳要設置成高,因此在Precharge后面要做一個讀的操作,這個操作最主要的是在SDRAM的尋址空間里設置的地址必須是A10是高的。
在輸入Auto-refresh命令后,一般要跟幾句空操作或者讀什么之類的,反正要達到延遲的目的,以使得SDRAM有時間來完成refresh。
之后就是要設置SDRAM的模式寄存器,這個寄存器里一般設置了burst長度,CAS,burst類型,操作模式,還有是設置SDRAM是工作在單個讀寫操作還是burst操作下。而這個寄存器的設置也是通過地址線來設置的,所以在發(fā)出Load Mode Register命令后要做一個操作可是使得在SDRAM的地址線上出線的值就是你要設置的值。這里很有必要提醒的一下的是,這個操作是8位的操作,切記切記。
設置完模式寄存器后就進入正常操作模式。
實際上具體的操作要跟選用的處理器的SDRAM控制模塊相結合來設置。對于這些初始化命令比較直觀的理解就是拿邏輯分析儀來分析。
在這里需要提醒一下CAS這個參數(shù)很重要。還有SDRAM必須要刷新的,因此刷新頻率可以按照手冊算出來的,但是設置的高一點也是可以的。常常SDRAM都有工作頻率,但是也可以工作在低一點的頻率上,比如PC133的,你工作到100也是可以的,設置基本不需要修改。
3,其他
我們有時候看到有的原理圖上數(shù)據(jù)線有倒過來接的,其實這個無所謂的,反過接,寫進去的就是反的,但是讀出又反了一下,反反兩次正好沒反。
延伸一下到DDR,其實DDR就是SDRAM外面加了一個烏龜殼。因此初始化是一樣的。當然DDR一是多了一個把時鐘頻率反相的時鐘,因此有2個相位差180度的時鐘。這兩個一般都是用同一個時鐘源產(chǎn)生,一致性會比較好。還有多了2個DQS,這個也是一個時序要求,一般CPU的控制模塊都有設置好了。如果你使用的CPU不含有控制模塊,那用FPGA去做一個控制模塊的話,那就要好好研究時序了。
在有些處理器的控制模塊中,由于EMI的設置,地址線映射關系復雜,因此推算會比較麻煩,一般如果沒有什么映射的話,還是很容易操作的
4.內(nèi)存芯片的邏輯BANK
在芯片的內(nèi)部,內(nèi)存的數(shù)據(jù)是以位(bit)為單位寫入一張大的矩陣中,每個單元我們稱為CELL,只要指定一個行(Row),再指定一個列(Column),就可以準確地定位到某個CELL,這就是內(nèi)存芯片尋址的基本原理。這個陣列我們就稱為內(nèi)存芯片的BANK,也稱之為邏輯BANK(LogicalBANK)。由于工藝上的原因,這個陣列不可能做得太大,所以一般內(nèi)存芯片中都是將內(nèi)存容量分成幾個陣列來制造,也就是說存在內(nèi)存芯片中存在多個邏輯BANK,隨著芯片容量的不斷增加,邏輯BANK數(shù)量也在不斷增加,目前從32MB到1GB的芯片基本都是4個,只有早期的16Mbit和32Mbit的芯片采用的還是2個邏輯BANK的設計,譬如三星的兩種16MB芯片:K4S161622D (512K x 16Bit x 2BANK)和K4S160822DT(1M x 8Bit x 2BANK)。芯片組本身設計時在一個時鐘周期內(nèi)只允許對一個邏輯BANK進行操作(實際上芯片的位寬就是邏輯BANK的位寬),而不是芯片組對內(nèi)存芯片內(nèi)所有邏輯BANK同時操作。邏輯BANK的地址線是通用的,只要再有一個邏輯BANK編號加以區(qū)別就可以了(BANK0到BANK3)。但是這個芯片的位寬決定了一次能從它那里讀出多少數(shù)據(jù),并不是內(nèi)存芯片里所有單元的數(shù)據(jù)一次全部能夠讀出
每個邏輯BANK有8M個單元格(CELL),一些廠商(比如現(xiàn)代/三星)就把每個邏輯BANK的單元格數(shù)稱為數(shù)據(jù)深度(DataDepth),每個單元由8bit組成,那么一個邏輯BANK的總?cè)萘烤褪?4Mbit(8M×8bit),4個邏輯BANK就是256Mbit,因此這顆芯片的總?cè)萘烤褪?56Mbit(32MB)。
內(nèi)存芯片的容量是一般以bit為單位的。比如說32Mbit的芯片,就是說它的容量是32Mb(b=bit=位),注意位(bit)與字節(jié)(Byte)區(qū)別,這個芯片換算成字節(jié)就是4MB(B=Byte=字節(jié)=8個bit),一般內(nèi)存芯片廠家在芯片上是標明容量的,我們可以芯片上的標識知道,這個芯片有幾個邏輯BANK,每個邏輯bank的位寬是多少,每個邏輯BANK內(nèi)有多少單元格(CELL),比如64MB和128MB內(nèi)存條常用的64Mbit的芯片就有如下三種結構形式:
?、?6 Meg x 4 (4 Meg x4 x 4 banks) [16M╳4]
?、? Meg x 8 (2 Meg x 8 x 4 banks) [8M╳8]
③4 Meg x 16 (1 Meg x 16 x 4 banks) [4M╳16]
表示方法是:每個邏輯BANK的單元格數(shù)×邏輯BANK數(shù)量×每個單元格的位數(shù)(芯片的位寬)。芯片邏輯BANK位寬目前的工藝水平只能最多做到16位,因此大家看到幾乎所有的芯片邏輯BANK位寬只可能4/8/16三者之一。以前16Mbit的芯片基本采用的單個芯片兩個邏輯BANK,但是到了64Mbit基本就都是4個邏輯BANK設計了