靜態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(SRAM)
靜態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(Static Random-Access Memory)是隨機(jī)訪問(wèn)存儲(chǔ)器的一種。
所謂的“靜態(tài)”,是指這種存儲(chǔ)器只要保持通電,里面儲(chǔ)存的數(shù)據(jù)就可以恒常保持。相對(duì)之下,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM芯片)里面所儲(chǔ)存的數(shù)據(jù)就需要周期性地更新。當(dāng)電力供應(yīng)停止時(shí),SRAM儲(chǔ)存的數(shù)據(jù)還是會(huì)消失(被稱(chēng)為volatile memory),這與在斷電后還能儲(chǔ)存資料的ROM或閃存是不同的。SRAM由存儲(chǔ)矩陣、地址譯碼器和讀/寫(xiě)控制電路組成,容量的擴(kuò)展有兩個(gè)方面:位數(shù)的擴(kuò)展用芯片的并聯(lián),字?jǐn)?shù)的擴(kuò)展可用外加譯碼器控制芯片的片選輸入端。SRAM中的每一bit儲(chǔ)存在由4個(gè)場(chǎng)效應(yīng)管(M1, M2, M3, M4)構(gòu)成兩個(gè)交叉耦合的反相器中。另外兩個(gè)場(chǎng)效應(yīng)管(M5, M6)是儲(chǔ)存基本單元到用于讀寫(xiě)的位線(Bit Line)的控制開(kāi)關(guān)。
除了6管的SRAM,其他SRAM還有8管、10管甚至每個(gè)位元使用更多的晶體管的實(shí)現(xiàn)。這可用于實(shí)現(xiàn)多端口(port)的讀寫(xiě)訪問(wèn),如顯存或者寄存器堆的多口SRAM電路的實(shí)現(xiàn)。一般說(shuō)來(lái),每個(gè)基本單元用的晶體管數(shù)量越少,其占用面積就越小。由于硅芯片(silicon wafer)的生產(chǎn)成本是相對(duì)固定的,因此SRAM基本單元的面積越小,在硅芯片上就可以制造更多的位元存儲(chǔ),每位元存儲(chǔ)的成本就越低。內(nèi)存基本單元使用少于6個(gè)晶體管是可能的,如3管甚至單管,但單管儲(chǔ)存單元是DRAM,不是SRAM。
SRAM功耗取決于它的訪問(wèn)頻率。如果用高頻率訪問(wèn)SRAM,其功耗比得上DRAM。有的SRAM在全帶寬時(shí)功耗達(dá)到幾個(gè)瓦特量級(jí)。另一方面,SRAM如果用于溫和的時(shí)鐘頻率的微處理器,其功耗將非常小,在空閑狀態(tài)時(shí)功耗可以忽略不計(jì)—幾個(gè)微瓦特級(jí)別。SRAM比較常見(jiàn)的應(yīng)用是作為微控制器的RAM或者cache(32bytes到128kb)。
SRAM結(jié)構(gòu)圖
corecells array:存儲(chǔ)單元陣列
decode:行列地址譯碼器
Sense Amplifier:靈敏放大器
conntrol circuit:控制電路
FFIO:緩沖/驅(qū)動(dòng)電路
為什么要將存儲(chǔ)單元陣列排成矩陣形式?
在SRAM 中,排成矩陣形式的存儲(chǔ)單元陣列的周?chē)亲g碼器和與外部信號(hào)的接口電路。存儲(chǔ)單元陣列通常採(cǎi)用正方形或矩陣的形式,以降低整個(gè)芯片面積并有利于數(shù)據(jù)的存取。以一個(gè)存儲(chǔ)容量為4K位的SRAM為例,共需12條地址線來(lái)保證每個(gè)存儲(chǔ)單元都能被選中(212 =-4096)。假設(shè)存儲(chǔ)單元陣列被排列成僅僅包括一列的長(zhǎng)條形,則須要一個(gè)12/4K位的譯碼器。但假設(shè)排列成包括64行和64列的正方形,這時(shí)則僅僅需一個(gè)6/64位的行譯碼器和一個(gè)6/64位的列譯碼器。行、列譯碼器可分別排列在存儲(chǔ)單元陣列的兩邊,64行和64列共同擁有4096個(gè)交叉點(diǎn)。每個(gè)點(diǎn)就相應(yīng)一個(gè)存儲(chǔ)位。
因此,將存儲(chǔ)單元排列成正方形比排列成一列的長(zhǎng)條形要大大地降低整個(gè)芯片地面積。存儲(chǔ)單元排列成長(zhǎng)條形除了形狀神秘和面積大以外,另一個(gè)缺點(diǎn),那就是排在列的上部的存儲(chǔ)單元與數(shù)據(jù)輸入/輸出端的連線就會(huì)變得非常長(zhǎng),特別是對(duì)于容量比較大得存儲(chǔ)器來(lái)說(shuō)。情況就更為嚴(yán)重,而連線的延遲至少是與它的長(zhǎng)度成線性關(guān)系。連線越長(zhǎng),線上的延遲就越大。所以就會(huì)導(dǎo)致讀寫(xiě)速度的降低和不同存儲(chǔ)單元連線延遲的不一致性,這些都是在設(shè)計(jì)中須要避免的。
SRAM基本單元結(jié)構(gòu)
SRAM的存儲(chǔ)原理
從RAM的存儲(chǔ)原理講起
RAM基本的作用就是存儲(chǔ)代碼和數(shù)據(jù)供CPU在須要的時(shí)候調(diào)用??墒沁@些數(shù)據(jù)并非像用袋子盛米那么簡(jiǎn)單。更像是 圖書(shū)館中用有格子的書(shū)架存放書(shū)籍一樣。不但要放進(jìn)去還要可以在須要的時(shí)候準(zhǔn)確的調(diào)用出來(lái)。盡管都是書(shū)可是每本書(shū)是不同的。
對(duì)于RAM等存儲(chǔ)器來(lái)說(shuō)也是一樣的,盡管存儲(chǔ)的都是代表0和1的代碼,可是不同的組合就是不同的數(shù)據(jù)。讓我們又一次回到書(shū)和書(shū)架上來(lái),假設(shè)有一個(gè)書(shū)架上有10行和10列格子(每行和每列都有0-9的編號(hào)),有100本書(shū)要存放在里面,那么我們使用一個(gè)行的編號(hào)+一個(gè)列的編號(hào)就能確定某一本書(shū)的位置。假設(shè)已知這本書(shū)的編號(hào)87,那么我們首先鎖定第8行。然后找到第7列就能準(zhǔn)確的找到這本書(shū)了。
在RAM存儲(chǔ)器中也是利用了相似的原理。
如今讓我們回到RAM存儲(chǔ)器上,對(duì)于RAM存儲(chǔ)器而言數(shù)據(jù)總線是用來(lái)傳入數(shù)據(jù)或者傳出數(shù)據(jù)的。
由于存儲(chǔ)器中的存儲(chǔ)空間是假設(shè)前面提到的存放圖書(shū)的書(shū)架一樣通過(guò)一定的規(guī)則定義的,所以我們能夠通過(guò)這個(gè)規(guī)則來(lái)把數(shù)據(jù)存放到存儲(chǔ)器上相應(yīng)的位置。而進(jìn)行這樣的定位的工作就要依靠地址總線來(lái)實(shí)現(xiàn)了。
對(duì)于CPU來(lái)說(shuō)。RAM就象是一條長(zhǎng)長(zhǎng)的有非常多空格的細(xì)線。每一個(gè)空格都有一個(gè)唯一的地址與之相相應(yīng)。
假設(shè)CPU想要從RAM中調(diào)用數(shù)據(jù),它首先須要給地址總線發(fā)送地址數(shù)據(jù)定位要存取的數(shù)據(jù),然后等待若干個(gè)時(shí)鐘周期之后,數(shù)據(jù)總線就會(huì)把傳輸數(shù)據(jù)給CPU。
以下的示意圖能夠幫助我們非常好的理解這個(gè)過(guò)程。
上圖中的小圓點(diǎn)代表RAM中的存儲(chǔ)空間,每個(gè)都有一個(gè)唯一的地址線同它相連。
當(dāng)?shù)刂方獯a器接收到地址總線送來(lái)的地址數(shù)據(jù)之后。它會(huì)依據(jù)這個(gè)數(shù)據(jù)定位CPU想要調(diào)用的數(shù)據(jù)所在的位置,然后數(shù)據(jù)總線就會(huì)把當(dāng)中的數(shù)據(jù)傳送到CPU。
上面所列舉的樣例中CPU在一行數(shù)據(jù)中每次僅僅是存取一個(gè)字節(jié)的數(shù)據(jù)??墒窃诂F(xiàn)實(shí)世界中是不同的。通常CPU每次須要調(diào)用32bit或者是64bit的數(shù)據(jù)(這是依據(jù)不同計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)總線的位寬所決定的)。假設(shè)數(shù)據(jù)總線是64bit的話,CPU就會(huì)在一個(gè)時(shí)間中存取8個(gè)字節(jié)的數(shù)據(jù)。
從“線”到“矩陣”
假設(shè)RAM對(duì)于CPU來(lái)說(shuō)不過(guò)一條“線”的話。還不能體現(xiàn)實(shí)際的執(zhí)行情況。由于假設(shè)實(shí)際情況真的是這種話,在實(shí)際制造芯片的時(shí)候,會(huì)有非常多實(shí)際的困難。特別是在須要設(shè)計(jì)大容量的RAM的時(shí)候。
所以。一種更好的可以減少成本的方法是讓存儲(chǔ)信息的“空格”排列為非常多行--每一個(gè)“空格”相應(yīng)一個(gè)bit存儲(chǔ)的位置。這樣。假設(shè)要存儲(chǔ)1024bits(2^10)數(shù)據(jù),那么你只要使用32x32(2^5*2^5=2^10)的矩陣就行達(dá)到這個(gè)目的了。非常明顯。一個(gè)32x32的矩陣比一個(gè)1024bit的行設(shè)備更緊湊。實(shí)現(xiàn)起來(lái)也更加easy。請(qǐng)看下圖:
知道了RAM的基本結(jié)構(gòu)是什么樣子的。我們就以下談?wù)劗?dāng)存儲(chǔ)字節(jié)的過(guò)程是如何的:上面的示意圖顯示的也不過(guò)最簡(jiǎn)單狀態(tài)下的情況,也就是當(dāng)內(nèi)存條上只唯獨(dú)一個(gè)RAM芯片的情況。對(duì)于X86處理器。它通過(guò)地址總線發(fā)出一個(gè)具有22位二進(jìn)制數(shù)字的地址編碼--當(dāng)中11位是行地址,另外11位是列地址,這是通過(guò)RAM地址接口進(jìn)行分離的。行地址解碼器(row decoder)將會(huì)首先確定行地址,然后列地址解碼器(column decoder)將會(huì)確定列地址,這樣就能確定唯一的存儲(chǔ)數(shù)據(jù)的位置,然后該數(shù)據(jù)就會(huì)通過(guò)RAM數(shù)據(jù)接口將數(shù)據(jù)傳到數(shù)據(jù)總線。另外,須要注意的是,RAM內(nèi)部存儲(chǔ)信息的矩陣并非一個(gè)正方形的,也就是行和列的數(shù)目不是同樣的--行的數(shù)目比列的數(shù)目少(DRAM)。
SRAM的存儲(chǔ)原理
以下的示意圖粗略的概括了一個(gè)主要的SRAM芯片是怎樣工作的。SRAM是“static RAM(靜態(tài)隨機(jī)存儲(chǔ)器)”的簡(jiǎn)稱(chēng),之所以這樣命名是由于當(dāng)數(shù)據(jù)被存入當(dāng)中后不會(huì)消失(同DRAM動(dòng)態(tài)隨機(jī)存儲(chǔ)器是不同,DRAM必須在一定的時(shí)間內(nèi)不停的刷新才干保持當(dāng)中存儲(chǔ)的數(shù)據(jù))。
一個(gè)SRAM單元通常由4-6僅僅晶體管組成,當(dāng)這個(gè)SRAM單元被賦予0或者1的狀態(tài)之后,它會(huì)保持這個(gè)狀態(tài)直到下次被賦予新的狀態(tài)或者斷電之后才會(huì)更改或者消失。
SRAM的速度相對(duì)照較快。并且比較省電??墒谴鎯?chǔ)1bit的信息須要4-6僅僅晶體管制造成本太高了(DRAM僅僅要1僅僅晶體管就能夠?qū)崿F(xiàn))。
一個(gè)SRAM單元——4-6僅僅晶體管——存儲(chǔ)1bit的信息
SRAM的讀取與存儲(chǔ)操作流程
從Dout引腳讀取1bit數(shù)據(jù)須要下面的步驟:
1)通過(guò)地址總線把要讀取的bit的地址傳送到對(duì)應(yīng)的讀取地址引腳(這個(gè)時(shí)候/WE引腳應(yīng)該沒(méi)有激活,所以SRAM知道它不應(yīng)該運(yùn)行寫(xiě)入操作)。
2)激活/CS選擇該SRAM芯片。
3)激活/OE引腳讓SRAM知道是讀取操作。
第三步之后,要讀取的數(shù)據(jù)就會(huì)從DOut引腳傳輸?shù)綌?shù)據(jù)總線。
怎么過(guò)程很的簡(jiǎn)單吧?相同。寫(xiě)入1bit數(shù)據(jù)的過(guò)程也是很的簡(jiǎn)單的。
從Dout引腳存儲(chǔ)1bit數(shù)據(jù)須要下面的步驟:
1)通過(guò)地址總線確定要寫(xiě)入信息的位置(確定/OE引腳沒(méi)有被激活)。
2)通過(guò)數(shù)據(jù)總線將要寫(xiě)入的傳輸數(shù)據(jù)到Dout引腳。
3)激活/CS引腳選擇SRAM芯片。
4)激活/WE引腳通知SRAM知道要進(jìn)行寫(xiě)入操作。
經(jīng)過(guò)上面的四個(gè)步驟之后,須要寫(xiě)入的數(shù)據(jù)就已經(jīng)放在了須要寫(xiě)入的地方。
動(dòng)態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(DRAM)
動(dòng)態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(Dynamic Random Access Memory)是一種半導(dǎo)體存儲(chǔ)器,主要的作用原理是利用電容內(nèi)存儲(chǔ)電荷的多寡來(lái)代表一個(gè)二進(jìn)制比特(bit)是1還是0。
由于在現(xiàn)實(shí)中電容會(huì)有漏電的現(xiàn)象,導(dǎo)致電位差不足而使記憶消失,因此除非電容經(jīng)常周期性地充電,否則無(wú)法確保記憶長(zhǎng)存。由于這種需要定時(shí)刷新的特性,因此被稱(chēng)為“動(dòng)態(tài)”存儲(chǔ)器。
相對(duì)來(lái)說(shuō),“靜態(tài)”存儲(chǔ)器(SRAM)只要存入數(shù)據(jù)后,縱使不刷新也不會(huì)丟失記憶。與SRAM相比,DRAM的優(yōu)勢(shì)在于結(jié)構(gòu)簡(jiǎn)單——每一個(gè)比特的數(shù)據(jù)都只需一個(gè)電容跟一個(gè)晶體管來(lái)處理。DRAM通常以一個(gè)電容和一個(gè)晶體管為一個(gè)單元排成二維矩陣,圖2所示是一個(gè)4×4的矩陣,現(xiàn)代的DRAM通常長(zhǎng)和寬都在幾千個(gè)。相比之下,在SRAM上一個(gè)比特通常需要六個(gè)晶體管。正因此緣故,DRAM擁有非常高的密度,單位體積的容量較高,因此成本較低。DRAM也有缺點(diǎn),DRAM也有訪問(wèn)速度較慢,耗電量較大的缺點(diǎn)。與大部分的隨機(jī)存取存儲(chǔ)器(RAM)一樣,由于存在DRAM中的數(shù)據(jù)會(huì)在電力切斷以后很快消失,因此它屬于一種易失性存儲(chǔ)器(volatile memory)設(shè)備。
SRAM的基本單元電路是由6個(gè)MOS管構(gòu)成,而DRAM的基本單元電路是由1個(gè)MOS管構(gòu)成,若存儲(chǔ)器有4000個(gè)存儲(chǔ)單元,則SRAM需要24000個(gè)MOS管,而DRAM則需要4000個(gè)MOS管,由此得出SRAM的芯片引腳自然就多,功耗大,價(jià)格貴,速度快,因?yàn)镸OS管多,散熱大,所以集成度低。因?yàn)镾RAM的基本單元電路的存儲(chǔ)原理是觸發(fā)器,只要不掉電,就很穩(wěn)定,所以就不需要刷新,而DRAM的基本單元電路的存儲(chǔ)原理是電容,電容會(huì)漏電,要保持原狀態(tài),就需要每隔一段時(shí)間刷新。
這個(gè)時(shí)間通常分為刷新周期。常用的刷新方法有以下三種:
(1)集中刷新:在一個(gè)刷新周期內(nèi),利用一段固定的時(shí)間,依次對(duì)存儲(chǔ)器的所有行逐一再生,在此期間停止對(duì)存儲(chǔ)器的讀寫(xiě)操作,這段時(shí)間成為“死時(shí)間”,又叫訪存的“死區(qū)”。顯然這種方法可以讓讀寫(xiě)操作不受刷新工作的影響,但是在死區(qū)不能訪問(wèn)存儲(chǔ)器,CPU只能干等著。
(2)分散刷新:把對(duì)每一行的刷新分散到各個(gè)工作周期中去。比較生動(dòng)地解釋就是,原來(lái)我的工作只有存取,現(xiàn)在我的工作多了一個(gè),就是在存取完之后順便再“打掃”一行。這樣,一個(gè)存儲(chǔ)器的系統(tǒng)工作周期分為兩部分,前半部分有用正常讀、寫(xiě)或保持,后半部分用于刷新某一行。這種方法不存在死區(qū),但是增加了系統(tǒng)的存取周期,如果原來(lái)存取周期只有0.5us,現(xiàn)在變成了1us,增加的0.5us要刷新一行。
(3)異步刷新:前兩種方法的結(jié)合,它可以縮短死時(shí)間,又充分利用最大刷新間隔為2ms的特點(diǎn)。做法是將刷新周期除以行數(shù),得到每?jī)纱嗡⑿轮g的時(shí)間間隔t,邏輯電路每過(guò)t就產(chǎn)生一次刷新請(qǐng)求。這樣就避免了使CPU等待過(guò)長(zhǎng)時(shí)間,還減少了刷新次數(shù),提高了工作效率。
為什么DRAM需要不斷的刷新?
DRAM的數(shù)據(jù)實(shí)際上是存在電容里的。而電容放久了,內(nèi)部的電荷就會(huì)越來(lái)越少,對(duì)外就形成不了電位的變化。而且當(dāng)對(duì)DRAM進(jìn)行讀操作的時(shí)候需要將電容與外界形成回路,通過(guò)檢查是否有電荷流進(jìn)或流出來(lái)判斷該bit是1還是0。所以無(wú)論怎樣,在讀操作中都破壞了原來(lái)的數(shù)據(jù)。所以在讀操作結(jié)束后需要將數(shù)據(jù)寫(xiě)回DRAM中。在整個(gè)讀或者寫(xiě)操作的周期中,計(jì)算機(jī)都會(huì)進(jìn)行DRAM的刷新,通常是刷新的周期是4ms-64ms。
DRAM基本單元結(jié)構(gòu)
DRAM的結(jié)構(gòu)
數(shù)據(jù)SRAM需要4-6個(gè)晶體管但是DRAM 僅僅需要1個(gè)晶體管,那么這樣同樣容量的SRAM 的體積比DRAM大至少4倍。這樣就意味著你沒(méi)有足夠空間安放同樣數(shù)量的引腳(因?yàn)獒樐_并沒(méi)有因此減少4倍)。當(dāng)然為了安裝同樣數(shù)量的針腳,也可以把芯片的體積加大,但是這樣就提高芯片的生產(chǎn)成本和功耗,所以減少針腳數(shù)目也是必要的,對(duì)于現(xiàn)在的大容量DRAM 芯片,多路尋址技術(shù)已經(jīng)是必不可少的了。
當(dāng)然多路尋址技術(shù)也使得讀寫(xiě)的過(guò)程更加復(fù)雜了,這樣在設(shè)計(jì)的時(shí)候不僅僅DRAM 芯片更加復(fù)雜了,DRAM 接口也要更加復(fù)雜,在我們介紹DRAM 讀寫(xiě)過(guò)程之前,請(qǐng)大家看一張DRAM 芯片內(nèi)部結(jié)構(gòu)示意圖:
在上面的示意圖中,你可以看到在DRAM結(jié)構(gòu)中相對(duì)于SRAM多了兩個(gè)部分:由/RAS(Row Address Strobe:行地址脈沖選通器)引腳控制的行地址門(mén)閂線路(Row Address Latch)和由/CAS(Column Address Strobe:列地址脈沖選通器)引腳控制的列地址門(mén)閂線路(ColumnAddress Latch)。