專家詳解: 內存工作原理及發展歷程 讀後重點總結理解

專家詳解:內存工作原理及發展歷程 http://memory.zol.com.cn/47/474952.html


內存基本存儲原理:

cpu先要從RAM中獲取數據,需要首先給地址總線傳遞數據的定位地址,在若干個時鐘週期之後,數據總線就會把數據傳送給CPU.當地址解碼器收到地址總線送來的地址數據後,它就會根據這個地址數據找到相對應的存儲單元,然後數據總線會將其中的數據傳遞給CPU.

上圖中如果CPU每次調用需要64bits的數據(數據總線爲64bits),那麼CPU會在一個時間中存取8個字節的數據,但是因爲每次還是存取一個1個字節的數據,所以64bits總線在這種使用中將不帶來任何優勢.


從’線’到’矩陣’

將RAM製作成一條線,或者是當作一個數組,在實際製造芯片的時候,尤其是大容量RAM(目前貌似有64GB的內存)的時候,這是在設計上無法實現的.因此我們可以將其排成陣列.在存儲1024bits的時候(尋址單位爲字節),那麼我們需要32*32的矩陣就可以實現.一個32*32的二維矩陣比1024bits的一維更緊湊.

在二維的數據存儲中,對於x86處理器,想要讀取的數據地址(一個22位二進制數字的地址編碼,11位行地址,11位列地址,尋址範圍爲4M,2的22次)在傳遞給地址總線後,通過RAM地址接口進行分離(信號分離器).行地址譯碼器首先確定行地址,列地址譯碼器會確認列地址,這樣可以確定唯一的數據位置,然後將其通過RAM數據接口傳遞到數據總線.實際上,RAM的內部存儲數據並不是正方形的(行比列少,便於刷新).

SRAM: 4-6晶體管實現,速度快,數據保存穩定,不會存在泄漏,但是成本昂貴,一般使用在CPU二級緩衝中.
DRAM: 1個電容器+一個晶體管,但是因爲存在泄漏,因此在64ms的週期內刷新充電,同時讀取數據是需要放電的,因此需要在某一刻充電.充放電帶來了延遲,同時放電電流太小需要信號放大器處理.


RAM的封裝技術

一個16K x 1bit SRAM芯片的針腳功能示意圖:

 

早期SRAM芯片採用了20線雙列直插封裝技術.擁有這麼多的針腳,是因爲:每一個地址信號都需要一根信號線,一根數據輸入線和一個數據輸出線,部分控制線,電源線.
A0-A13是地址輸入信號引腳,CS是芯片選擇引腳。在一個實際的系統中,一定具有很多片SRAM芯片,所以需要選擇究竟從那一片SRAM芯片中寫入或者讀取數據.WE是寫入啓用引腳.當SRAM得到一個地址之後,它需要知道進行什麼操作,究竟是寫入還是讀取,WE就是告訴SRAM要寫入數據.Vcc是供電引腳.Din是數據輸入引腳.Dout是數據輸出引腳.GND是接地引腳

Enable(OE):有的SRAM芯片中也有這個引腳,但是上面的圖中並沒有.這個引腳同WE引腳的功能是相對的,它是讓SRAM知道要進行讀取操作而不是寫入操作.從Dout引腳讀取1bit數據需要以下的步驟:
SRAM讀取操作:

1)通過地址總線把要讀取的bit的地址傳送到相應的讀取地址引腳(這個時候/WE引腳應該沒有激活,所以SRAM知道它不應該執行寫入操作).

2)激活/CS選擇該SRAM芯片.

3)激活/OE引腳讓SRAM知道是讀取操作.第三步之後,要讀取的數據就會從Dout引腳傳輸到數據總線.

SRAM寫入操作:

1)通過地址總線確定要寫入信息的位置(確定/OE引腳沒有被激活).

2)通過數據總線將要寫入的數據傳輸到Din引腳.

3)激活/CS引腳選擇SRAM芯片.

4)激活/WE引腳通知SRAM知道要盡心寫入操作.

經過上面的四個步驟之後,需要寫入的數據就已經放在了需要寫入的地方.

DRAM因爲存在數據刷新的過程,所以設計更加複雜.下面是DRAM芯片針腳的作用.

下圖是Intel的2188芯片 採用16K*1 DRAM 16線DIP封裝. 16K*1 指的是這款芯片可以存儲16*1024的字節數,可同時進行1字節的讀取或者寫入操作.

雖然該芯片只有7根地址引腳,但是通過採用多路技術,通過DRAM接口把地址一分爲二,然後利用兩個連續的時鐘傳輸地址數據,利用一半的針腳實現全部地址位的傳輸.

爲什麼需要減少地址引腳呢?因爲DRAM相比SRAM,因爲成本低,體積小,因此使用在內存中,內存容量大,因此需要的地址線也比較多,需要在芯片中增加相對應的針腳數,但是芯片的針腳是十分寶貴的資源,這樣做無疑會提高芯片的生產成本,所以需要採用多路複用技術.

採用多路複用技術使得讀寫過程變得更加複雜.
在上面的示意圖中,你可以看到在DRAM結構中相對於SRAM多了兩個部分:由/RAS (Row AddressStrobe:行地址脈衝選通器)引腳控制的行地址門閂線路(Row Address Latch)和由/CAS(Column Address Strobe:列地址脈衝選通器)引腳控制的列地址門閂線路(Column Address Latch)。

DRAM讀取過程:

1)通過地址總線將行地址傳輸到地址引腳。

2)/RAS引腳被激活,這樣行地址被傳送到行地址門閂線路中。

3)行地址解碼器根據接收到的數據選擇相應的行。

4)/WE引腳被確定不被激活,所以DRAM知道它不會進行寫入操作。

5)列地址通過地址總線傳輸到地址引腳。

6)/CAS引腳被激活,這樣列地址被傳送到列地址門閂線路中。

7)/CAS引腳同樣還具有/OE引腳的功能,所以這個時候Dout引腳知道需要向外輸出數據。

8)/RAS和/CAS失活,這樣就可以進行下一個週期的數據操作了。其實DRAM的寫入的過程和讀取過程是基本一樣的,所以如果你真的理解了上面的過程就能知道寫入過程了,所以這裏我就不贅述了。(只要把第4步改爲/WE引腳被激活就可以了)。

DRAM被設計爲有規律的讀取DRAM內的內容.優點如下:

1.僅僅使用/RSA激活每一行就可以達到全部刷新的目的.

2.DRAM控制器來控制刷新,這樣可以防止刷新操作干擾有規律的讀寫操作.因此DRAM芯片的行數量是比列數量多的.


尋址單元的實現和擴展(bank)

RAM單元只能存儲一個bit的數據,但是CPU存取和地址尋址的時候是根據一個尋址單元(8比特)來操作的,RAM如何實現CPU讀寫和尋址單元的實現呢?

最簡單的是我們需要8個1位的RAM基本存儲單元的芯片以並列的方式堆疊在一起,這8個芯片採用相同的地址.下圖只給出了4個.

通常這8顆1bit芯片是通過地址總線和數據總線在PCB(印刷電路板)上連接而成的,對於CPU來說它就是一顆8bit的RAM芯片,而不再是獨立的8個1 bit芯片。在上圖所示的地址總線位寬是22bit,這樣這個地址總線所能控制的存儲模塊的容量應該是2的22次=4194304bit,也就是4Mb * 8(4MB)的容量;數據總線的位寬是8bit,就是通過剛纔提到的8個1bit的基本存儲單元的Dout並聯在一起實現的--這樣也能夠滿足CPU的要求了。(對於這種存儲顆粒我們稱之爲4194304 x 8模塊或者4Mx8,注意這裏的“M”不是“MByte”而是“Mbit”)。爲了舉例說明,我們用一條TI(德儀公司)出品的TM4100GAD8 SIMM內存爲例來說明,因爲這種內存的構造相對比較簡單,便於大家理解。TM4100GAD8基於4M x 8模塊製造,容量4MB,採用30線SIMM封裝。如果前面我說的東西你看明白了,就應該知道這條內存採用了4Mx1 DRAM顆粒。下面的數據是我在TI官方網站上找到的(目前很少有公司的網站還提供自己以前產品的數據):構造:4194304 × 8。工作電壓:5-V。30線SIMM(Single In-Line Memory Module:SIMM)。採用8片4Mbit DRAM內存顆粒,塑料SOJs封裝。長刷新期16 ms(1024週期)。

在上面的示意圖中,A0–A10是地址輸入引腳。/CAS:行地址脈衝選通器引腳。DQ1–DQ8:數據輸入/數據輸出引腳。NC:空信號引腳。/RAS:列地址脈衝選通器引腳。VSS:接地引腳。/W:寫入啓用引腳。VCC 5V供電引腳。

上面的電路示意圖應該能夠讓我們更加清楚的理解這個問題,TM4100GAD8由8片4096x1bit芯片組成,VCC和VSS爲所有的芯片提供5v的電壓。每個芯片都具有/RAS、/CAS、/W引腳同內存相應的引腳連通。每個芯片都具有不同的數據輸出/輸出接口。這樣我們應該就能夠知道RAM是如何滿足CPU存取數據的需要的了。

上面實現8bit的讀取,但是在32bit和64bit的讀取中,這種方法是不夠的,我們需要擴展.這裏引入bank的概念.

這裏將4M*8當作一個bank,4個bank以類似並聯的方式相連,組成位寬爲32bit的bank,64bit的則需要8個bank,存儲數據時候,第一個bank存儲第一個字節,第二個bank存儲第二個字節,以此類似.每個bank容量爲4M字節.

通過兩種方式增加這類內存的容量,第一種增加每個bank的容量,第二個是增加bank的數量.
上面的內存用於486級別的電腦,奔騰系列的內存與486不同的.


SIMM和DIMM封裝

SIMM(single in-line memory module,單邊接觸內存模組)
因爲內存顆粒無法直接和計算機連接並且通訊的,同時因爲數據位傳輸位寬等方面的原因,所以內存廠商通過封裝的方式把他們組織到一起.
下圖中是30線DIMM和72線DIMM.

在DIMM內存中的顆粒採用DIP封裝(雙列直插封裝.PCBA的流程中有DIP).SIMM內存根據引腳分爲30線和72線.
SIMM中一般容量爲1,4,16MB的SIMM內存是單面.當容量的SIMM是雙面的.
一條72線SIMM內存的數據總線位寬是32bit,所以它的數據傳輸能力大大提高了.

DIMM是目前的內存主要封裝模式.比如SDRAM,DDR SDRAM, RDRAM,其中SDRAM具有168根引腳並且提供了64bit的數據尋址能力.現在高密度的DRAM可以有不只一個Din和Dout引腳,並且可以根據需有在DRAM芯片上製造4,8,16或64根數據引腳.

上圖上面的內存就是168線的SDRAM,而下面的內存是72線的SIMM。

如果一個DRAM芯片具有8個數據引腳,那麼當我們想實現一個4MB的內存,我們以前的方法是4M*1的8個芯片並連.但是現在就可以通過1M*8的4個芯片實現.減少了芯片的個數.4M的尋址空間需要11根地址線引腳複用地址數據.


FPM DRAM (現代內存已經不使用)

理解FPM DRAM和EDO DRAM對後面的延遲的理解有很好的幫助

FPM DRAM是優先於動態隨機存取存儲器(DRAM)的新形式,快速頁面模式的動態隨機存取存儲器(Fast Page Mode DRAM,FPM DRAM)是一種動態隨機存取存儲器。是一種在486時期被普遍應用的內存。有30線和72線、5V電壓、帶寬32bit、基本速度60ns以上。
頁面模式動態隨機存取存儲器可以直接訪問RAM的某一行而不必頻繁的重新指定這一行。當列地址控制器(CAS)信號變爲要讀取一系列鄰近的記憶單元時,行地址控制器(RAS)信號仍然保持有效。這樣減少了訪問時間並且降低了電能需求。FPM DRAM的典型時序是6-3-3-3.

之所以稱之爲快頁內存,因爲它以4字節突發模式傳送數據,這4個字節來自同一列或者說同一頁。如何理解這種讀取方式呢?FPM DRAM如果要突發4個字節的數據,它依然需要依次的讀取每一個字節的數據,比如它要讀取第一個字節的數據,這個時候的情況同前面介紹的DRAM讀取方式是一樣的(我們依然通過讀取下面的FPM讀取時序圖來了解它的工作方式):

1、首先行地址被傳送到行地址引腳,在/RAS引腳被激活之前,RAS處於預充電狀態,CAS也處於預充電狀態,當然/WE此時依然是高電平,FPM至少知道自己不會進行寫操作。

2、/RAS引腳被賦予低電平而被激活,行地址被送到行地址選通器,然後選擇正確的行送到傳感放大器,就在/RAS引腳被激活的同時,tRAC開始計時。

3、CAS一直處於預充電狀態,直到列地址被傳送到列地址引腳並且/CAS引腳得到一個低電平而被激活(tCRC時間開始計時),然後下面的事情我們也應該很清楚了,列地址被送到列地址選通器,然後需要讀取的數據位置被鎖定,這個時候Dout引腳被激活,第一組數據就被傳送到數據總線上。

4、對於原來介紹的DRAM,這個時候一個讀取週期就結束了,不過對於FPM則不同,在傳送第一組數據期間,CAS失活(RAS依然保持着激活狀態)並且進入預充電狀態,等待第二組列地址被傳送到列地址引腳,然後進行第二組數據的傳輸,如此周而復始直至4組數據全部找到並且傳輸完畢。

5、當第四組數據開始傳送的時候,RAS和CAS相繼失活進入到預充電狀態,這樣FPM的一個完整的讀取週期方告結束。FPM之所以能夠實現這樣的傳輸模式,就是因爲所需要讀取的4個字節的行地址是相同的但是列地址不同,所以它們不必爲了得到一個相同的列地址而去做重複的工作。

6、這樣的工作模式顯然相對於普通的DRAM模式節省了很多的時間,特別是節省了3次RAS預充電的時間和3個tRAC時間,從而進一步提高的效率。

從第4步不同,不同在於不用重複的激活RSA,故後面的只需要3個時鐘.6-3-3-3其中的6表示從最初狀態讀取第一組數據需要6個時鐘週期,而讀取另外三個數據僅僅需要3個時鐘週期就能達到目的了。需要特別指出的是,在上面的時序圖中,我們並沒有標註出 FPM DRAM進行第二個、第三個、第四個數據輸出的前進行新的列地址選通的時間,但是從上面的示意圖中我們可以看到Col.2同Data1和D2之間都沒有重疊,所以這三個數據的輸出是進行完畢一個再進行的另一個,因此再上一次數據傳輸完畢到下一次列地址傳輸之間還有一點小小的延遲。


EDO DRAM ( Extended Data Out DRAM:擴展數據輸出DRAM)現代內存已經不使用
EDO DRAN可以在輸出數據的同時進行下一個列地址選通.
下面通過EDO讀取時序圖來理解EDO DRAM讀取數據的過程.

1、RAS在結束上一次的讀取操作之後,進入預充電狀態,當接到讀取數據的請求之後,行地址首先通過地址總線傳輸到地址引腳,在這個期間CAS依然處於預充電狀態。

2、/RAS引腳被激活,列地址開始經過行地址選通電路和行地址解碼器進行行地址的選擇,就在這個同時tRAC週期開始,因爲是讀取操作/WE引腳一直沒有被激活,所以內存知道自己進行的是讀取操作而不是寫操作。

3、在CAS依然進行預充電的過程中,列地址被送到列地址選通電路選擇出來合適的地址,當/CAS被激活的同時tCAC週期開始,當tCAC結束的時候,需要讀取的數據將會通過數據引腳傳輸到數據總線。

4、從開始輸出第一組數據的時候,我們就可以體會到EDO同FPM之間的區別了:在tCAC週期結束之前,CAS失活並且開始了預充電,第二組列地址傳輸和選通也隨即開始,第一數據還沒有輸出完畢之前,下一組數據的tCAC週期就開始了--顯然這樣進一步的節省了時間。就在第二組數據輸出前,CAS再次失活爲第三組數據傳輸列地址做起了準備……

5、如此的設計使得EDO內存的性能比起FPM的性能提高了大約20-40%。

6、正是因爲EDO的速度比FPM快,所以它可以運行在更高的總線頻率上。所以很多的EDO RAM可以運行在66MHz的頻率上,並且一般標註爲5-2-2-2。


SDRAM 內存工作原理(不涉及硬件實現,just 簡單原理)
SIMM :我們需要把多個芯片放在一個bank或多個bank中滿足8bit,32bit或者64位bit數據總線的要求,初始DRAM因爲只有一個數據輸入引腳和數據輸出引腳.
DIMM :發展DRAM芯片引腳數量變多,有較多的數據輸入輸出引腳,因此一個4M*8的封裝DIMM就可以相當於SIMM的8個4M*1芯片,芯片數量減少.

SDRAM則可以實現在單個的DIMM中存在多個bank,在滿足數據總線的前提下進一步的提高數據總線的性能.

前面討論的DRAM讀取方式中,當一個讀取週期結束後,/RAS和/CAS都必須停止激活然後有一個短暫的預充電期才能進入到下一次的讀取週期中。但是一個具有兩個bank的SDRAM的模組中,其中一個bank在進行預充電的期間另一個bank卻可以被調用--這樣當你需要讀取已經預充電的bank的數據時,就無需等待而是可以直接調用了。爲了實現這個功能,SDRAM就需要增加對於多個bank的管理,這樣就可以實現控制其中的bank進行預充電,並且在需要使用的時候隨時調用了。這樣一個具有兩個bank的SDRAM一般會多一根叫做BA0的引腳,實現在兩個bank之間的選擇--一般的BA0是低電平表示Bank0被選擇,而BA0是高電平Bank1就會被選中。

可見,雖然SDRAM在基本的原理上比如基本存儲的結構都是基本一樣的,但是在整個內存架構的組織上是不同的,而且在存儲單元的控制上也是有着相當大的區別的。因爲異步DRAM同處理器和芯片的時鐘並沒有什麼關係,所以芯片組只能按照DRAM內存的時序要求“被動”的操作DRAM控制引腳。SDRAM因爲要同CPU和芯片組共享時鐘,所以芯片組可以主動的在每個時鐘的上升沿發給引腳控制命令。

異步DRAM的讀取過程:
異步DRAM的運行並不需要同處理器同頻,它的時序信號控制、尋址等操作基本上說是獨立控制的,也就是由內存芯片本身所控制.
1) 行地址通過地址總線傳輸到地址引腳。
2)/RAS引腳被激活,列地址就會被放入行地址選通電路( Row Address Latch:在文章的前面部分我們把它翻譯爲行地址門閂電路)。
3) 行地址解碼器( Row Address Decoder)選擇正確的行然後送到傳感放大器( sense amps)。4) /WE引腳此時不被激活,所以 DRAM知道它們不是進行寫操作。
5) 列地址通過地址總線傳輸到地址引腳。
6) /CAS引腳被激活,列地址就可以被送到列地址選通器( Column Address Latch)。
7) /CAS引腳也被當作輸出啓動信號( Output Enable),因爲一旦/CAS信號被放到傳感放大器,就因爲這時需要的數據已經找到,所以Dout針腳開始有效,數據可以從內存中傳輸到系統了。
8)/RAS和 /CAS引腳停止激活,等待下一個讀取命令

內存讀取的過程中,我們需要考慮兩種類型的延遲.
1.兩次讀操作之間的延遲.因爲DRAM的讀取操作包括電容器的充電和放電另外還包括把信號傳送出去的時間,所以在兩個讀取操作中間至少留出足夠的時間讓讓內存進行這些方面的操作。同時兩次讀之間的延遲包括RAS和 /CAS預充電延遲時間。在/RAS被激活並且失活之後,你必須給它足夠的時間爲下次激活做好準備.當一次讀取操作週期結束之後,我們必須讓/RAS和/CAS引腳都失活。實際上,在你讓它們失活之後,必須等待預充電過程結束之後才能開始下一個操作(或者還是讀取操作、或者是寫入操作、或者是刷新操作),如下圖.


2.內部的延遲包括從/RAS被激活後到數據總線出現數據,/CAS被激活到數據總線出現數據,即tRAC(行存取時間)和tCAC(列存取時間),如下圖(1).

圖(1) tRAC與tCAC

圖(2) DRAM讀寫時序圖

上面這張圖(2)詳細的介紹了DRAM讀寫數據的詳細流程.

1) 首先看上圖第一行,在預充電期間行地址通過地址總線傳輸到地址引腳,這個期間RAS未被激活,在第三行Address BUS中我們看到數據在這個期間正在行地址總線上,這個期間CAS也處於預充電狀態;
2) 依然看上圖第一行, /RAS引腳被激活(RAS Active,灰色的部分),行地址就會被放入行地址選通電路(第三行Address Bus中所示),這個期間CAS依然處於預充電狀態;在/RAS被激活的同時,tRAC(行存取時間)開始--如上圖最後一行Data Bus所示。
3) 在/RAS被激活以後,行地址解碼器( Row Address Decoder)選擇正確的行然後送到傳感放大器( sense amps)。
4) 在這個期間/WE引腳一直處於不激活的狀態,所以 DRAM知道它們不是進行寫操作--這個狀態將一直持續到開始執行寫操作才結束。
5) 列地址通過地址總線傳輸到地址引腳。
6) /CAS引腳被激活(如上圖第三行),列地址就可以被送到列地址選通器( Column Address Latch)。這個時候tCAC(列地址訪問時間)開始計時。
7) 在/CAS處於激活狀態期間的末尾,/RAS停止激活--也就大約在這個時間附近找到的數據被傳送到數據總線進行數據傳送(如圖data Bus),在數據總線進行數據傳輸的過程中,地址總線是處於空閒狀態的,它並不接受新的數據--在數據開始創送的同時tRAC和tCAC都結束了。
8)就在數據在數據總線上傳輸期間,/CAS引腳也被停止激活--就是得到一個高電平,從而開始進入到預充電期。RAS和CAS會同時處於預充電期,直到下次/RAS被激活進入到下一個讀取操作的週期

SIMM和DIMM中的潛伏期(latency)類型爲兩種: 訪問時間(access time)和週期時間(cycle time).
潛伏期的時間是很短的,只有幾納秒.
訪問時間: 即tRAC和tCAC
週期時間: 兩次讀取週期之間,即/RAS失活到預充電結束,/CAS失活到預充電結束的時間.

對於異步DRAM,訪問時間就是從(行地址到達行地址引腳時起)到(數據被傳輸到數據引腳的時間段).訪問時間爲60納秒的DIMM意味着當我們下達讀取數據的命令後,地址數據被送到地址引腳之後要等待60納米才能達到數據輸出引腳。
週期時間爲:在第一次讀完以後,到下一次操作開始之前的這段時間間隔.
我們平時說的DRAM內存多少納米指的是訪問時間.訪問時間越短,意味這內存工作頻率越高.內存頻率越高,意味這可以適應外頻更高的處理器.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章