常用存儲(chǔ)器介紹
21.1. 存儲(chǔ)器種類(lèi)
存儲(chǔ)器是計(jì)算機(jī)結(jié)構(gòu)的重要組成部分。存儲(chǔ)器是用來(lái)存儲(chǔ)程序代碼和數(shù)據(jù)的部件,有了存儲(chǔ)器計(jì)算機(jī)才具有記憶功能?;镜拇鎯?chǔ)器種類(lèi)見(jiàn) 圖21_1。
圖 21?1 基本存儲(chǔ)器種類(lèi)
存儲(chǔ)器按其存儲(chǔ)介質(zhì)特性主要分為“易失性存儲(chǔ)器”和“非易失性存儲(chǔ)器”兩大類(lèi)。其中的“易失/非易失”是指存儲(chǔ)器斷電后,它存儲(chǔ)的數(shù)據(jù)內(nèi)容是否會(huì)丟失的特性。由于一般易失性存儲(chǔ)器存取速度快,而非易失性存儲(chǔ)器可長(zhǎng)期保存數(shù)據(jù),它們都在計(jì)算機(jī)中占據(jù)著重要角色。在計(jì)算機(jī)中易失性存儲(chǔ)器最典型的代表是內(nèi)存,非易失性存儲(chǔ)器的代表則是硬盤(pán)。
21.2. RAM存儲(chǔ)器
RAM是“Random Access Memory”的縮寫(xiě),被譯為隨機(jī)存儲(chǔ)器。所謂“隨機(jī)存取”,指的是當(dāng)存儲(chǔ)器中的消息被讀取或?qū)懭霑r(shí),所需要的時(shí)間與這段信息所在的位置無(wú)關(guān)。這個(gè)詞的由來(lái)是因?yàn)樵缙谟?jì)算機(jī)曾使用磁鼓作為存儲(chǔ)器,磁鼓是順序讀寫(xiě)設(shè)備,而RAM可隨機(jī)讀取其內(nèi)部任意地址的數(shù)據(jù),時(shí)間都是相同的,因此得名。實(shí)際上現(xiàn)在RAM已經(jīng)專(zhuān)門(mén)用于指代作為計(jì)算機(jī)內(nèi)存的易失性半導(dǎo)體存儲(chǔ)器。
根據(jù)RAM的存儲(chǔ)機(jī)制,又分為動(dòng)態(tài)隨機(jī)存儲(chǔ)器DRAM(Dynamic RAM)以及靜態(tài)隨機(jī)存儲(chǔ)器SRAM(Static RAM)兩種。
21.2.1. DRAM
動(dòng)態(tài)隨機(jī)存儲(chǔ)器DRAM的存儲(chǔ)單元以電容的電荷來(lái)表示數(shù)據(jù),有電荷代表1,無(wú)電荷代表0,見(jiàn) 圖21_2。 但時(shí)間一長(zhǎng),代表1的電容會(huì)放電,代表0的電容會(huì)吸收電荷,因此它需要定期刷新操作,這就是“動(dòng)態(tài)(Dynamic)”一詞所形容的特性。刷新操作會(huì)對(duì)電容進(jìn)行檢查,若電量大于滿(mǎn)電量的1/2,則認(rèn)為其代表1,并把電容充滿(mǎn)電;若電量小于1/2,則認(rèn)為其代表0,并把電容放電,藉此來(lái)保證數(shù)據(jù)的正確性。
圖 21?2 DRAM存儲(chǔ)單元
21.2.1.1. SDRAM
根據(jù)DRAM的通訊方式,又分為同步和異步兩種,這兩種方式根據(jù)通訊時(shí)是否需要使用時(shí)鐘信號(hào)來(lái)區(qū)分。圖21_3 是一種利用時(shí)鐘進(jìn)行同步的通訊時(shí)序,它在時(shí)鐘的上升沿表示有效數(shù)據(jù)。
圖 21?3 同步通訊時(shí)序圖
由于使用時(shí)鐘同步的通訊速度更快,所以同步DRAM使用更為廣泛,這種DRAM被稱(chēng)為SDRAM(Synchronous DRAM)。
21.2.1.2. DDR SDRAM
為了進(jìn)一步提高SDRAM的通訊速度,人們?cè)O(shè)計(jì)了DDR SDRAM存儲(chǔ)器(Double Data Rate SDRAM)。 它的存儲(chǔ)特性與SDRAM沒(méi)有區(qū)別,但SDRAM只在上升沿表示有效數(shù)據(jù),在1個(gè)時(shí)鐘周期內(nèi),只能表示1個(gè)有數(shù)據(jù); 而DDR SDRAM在時(shí)鐘的上升沿及下降沿各表示一個(gè)數(shù)據(jù),也就是說(shuō)在1個(gè)時(shí)鐘周期內(nèi)可以表示2位數(shù)據(jù),在時(shí)鐘頻率同樣的情況下, 提高了一倍的速度。至于DDRII和DDRIII,它們的通訊方式并沒(méi)有區(qū)別,主要是通訊同步時(shí)鐘的頻率提高了。
當(dāng)前個(gè)人計(jì)算機(jī)常用的內(nèi)存條是DDRIII SDRAM存儲(chǔ)器,在一個(gè)內(nèi)存條上包含多個(gè)DDRIII SDRAM芯片。
21.2.2. SRAM
靜態(tài)隨機(jī)存儲(chǔ)器SRAM的存儲(chǔ)單元以鎖存器來(lái)存儲(chǔ)數(shù)據(jù),見(jiàn) 圖21_4。 這種電路結(jié)構(gòu)不需要定時(shí)刷新充電,就能保持狀態(tài)(當(dāng)然,如果斷電了,數(shù)據(jù)還是會(huì)丟失的),所以這種存儲(chǔ)器被稱(chēng)為“靜態(tài)(Static)”RAM。
圖 21?4 SRAM存儲(chǔ)單元
同樣地,SRAM根據(jù)其通訊方式也分為同步(SSRAM)和異步SRAM,相對(duì)來(lái)說(shuō),異步SRAM用得比較廣泛。
21.2.3. DRAM與SRAM的應(yīng)用場(chǎng)合
對(duì)比DRAM與SRAM的結(jié)構(gòu),可知DRAM的結(jié)構(gòu)簡(jiǎn)單得多,所以生產(chǎn)相同容量的存儲(chǔ)器,DRAM的成本要更低,且集成度更高。 而DRAM中的電容結(jié)構(gòu)則決定了它的存取速度不如SRAM,特性對(duì)比見(jiàn) 表21?1。
表 21?1 DRAM與SRAM對(duì)比
?
特性 | DRAM | SRAM |
存取速度 | 較慢 | 較快 |
集成度 | 較高 | 較低 |
生產(chǎn)成本 | 較低 | 較高 |
是否需要刷新 | 是 | 否 |
?
所以在實(shí)際應(yīng)用場(chǎng)合中,SRAM一般只用于CPU內(nèi)部的高速緩存(Cache),而外部擴(kuò)展的內(nèi)存一般使用DRAM。
21.3. 非易失性存儲(chǔ)器
非易失性存儲(chǔ)器種類(lèi)非常多,半導(dǎo)體類(lèi)的有ROM和FLASH,而其它的則包括光盤(pán)、軟盤(pán)及機(jī)械硬盤(pán)。
21.3.1. ROM存儲(chǔ)器
ROM是“Read Only Memory”的縮寫(xiě),意為只能讀的存儲(chǔ)器。由于技術(shù)的發(fā)展,后來(lái)設(shè)計(jì)出了可以方便寫(xiě)入數(shù)據(jù)的ROM, 而這個(gè)“Read Only Memory”的名稱(chēng)被沿用下來(lái)了,現(xiàn)在一般用于指代非易失性半導(dǎo)體存儲(chǔ)器, 包括后面介紹的FLASH存儲(chǔ)器,有些人也把它歸到ROM類(lèi)里邊。
21.3.1.1. MASK ROM
MASK(掩膜) ROM就是正宗的“Read Only Memory”,存儲(chǔ)在它內(nèi)部的數(shù)據(jù)是在出廠時(shí)使用特殊工藝固化的,生產(chǎn)后就不可修改,其主要優(yōu)勢(shì)是大批量生產(chǎn)時(shí)成本低。當(dāng)前在生產(chǎn)量大,數(shù)據(jù)不需要修改的場(chǎng)合,還有應(yīng)用。
21.3.1.2. OTPROM
OTPROM(One Time Programable ROM)是一次可編程存儲(chǔ)器。這種存儲(chǔ)器出廠時(shí)內(nèi)部并沒(méi)有資料,用戶(hù)可以使用專(zhuān)用的編程器將自己的資料寫(xiě)入,但只能寫(xiě)入一次,被寫(xiě)入過(guò)后,它的內(nèi)容也不可再修改。在NXP公司生產(chǎn)的控制器芯片中常使用OTPROM來(lái)存儲(chǔ)密鑰。
21.3.1.3. EPROM
EPROM(Erasable Programmable ROM)是可重復(fù)擦寫(xiě)的存儲(chǔ)器,它解決了PROM芯片只能寫(xiě)入一次的問(wèn)題。這種存儲(chǔ)器使用紫外線照射芯片內(nèi)部擦除數(shù)據(jù),擦除和寫(xiě)入都要專(zhuān)用的設(shè)備。現(xiàn)在這種存儲(chǔ)器基本淘汰,被EEPROM取代。
21.3.1.4. EEPROM
EEPROM(Electrically Erasable Programmable ROM)是電可擦除存儲(chǔ)器。EEPROM可以重復(fù)擦寫(xiě),它的擦除和寫(xiě)入都是直接使用電路控制,不需要再使用外部設(shè)備來(lái)擦寫(xiě)。而且可以按字節(jié)為單位修改數(shù)據(jù),無(wú)需整個(gè)芯片擦除?,F(xiàn)在主要使用的ROM芯片都是EEPROM。
21.3.2. FLASH存儲(chǔ)器
FLASH存儲(chǔ)器又稱(chēng)為閃存,它也是可重復(fù)擦寫(xiě)的儲(chǔ)器,部分書(shū)籍會(huì)把FLASH存儲(chǔ)器稱(chēng)為FLASH ROM,但它的容量一般比EEPROM大得多,且在擦除時(shí),一般以多個(gè)字節(jié)為單位。如有的FLASH存儲(chǔ)器以4096個(gè)字節(jié)為扇區(qū),最小的擦除單位為一個(gè)扇區(qū)。根據(jù)存儲(chǔ)單元電路的不同,F(xiàn)LASH存儲(chǔ)器又分為NOR FLASH和NAND FLASH,見(jiàn)表 21?2。
表 21?2 NOR FLASH 與NAND FLASH特性對(duì)比
?
特性 | NOR FLASH | NAND FLASH |
同容量存儲(chǔ)器成本 | 較貴 | 較便宜 |
集成度 | 較低 | 較高 |
介質(zhì)類(lèi)型 | 隨機(jī)存儲(chǔ) | 連續(xù)存儲(chǔ) |
地址線和數(shù)據(jù)線 | 獨(dú)立分開(kāi) | 共用 |
擦除單元 | 以“扇區(qū)/塊”擦除 | 以“扇區(qū)/塊”擦除 |
讀寫(xiě)單元 | 可以基于字節(jié)讀寫(xiě) | 必須以“塊”為單位讀寫(xiě) |
讀取速度 | 較高 | 較低 |
寫(xiě)入速度 | 較低 | 較高 |
壞塊 | 較少 | 較多 |
是否支持XIP | 支持 | 不支持 |
?
NOR與NAND的共性是在數(shù)據(jù)寫(xiě)入前都需要有擦除操作,而擦除操作一般是以“扇區(qū)/塊”為單位的。而NOR與NAND特性的差別,主要是由于其內(nèi)部“地址/數(shù)據(jù)線”是否分開(kāi)導(dǎo)致的。
由于NOR的地址線和數(shù)據(jù)線分開(kāi),它可以按“字節(jié)”讀寫(xiě)數(shù)據(jù),符合CPU的指令譯碼執(zhí)行要求,所以假如NOR上存儲(chǔ)了代碼指令,CPU給NOR一個(gè)地址,NOR就能向CPU返回一個(gè)數(shù)據(jù)讓CPU執(zhí)行,中間不需要額外的處理操作。
而由于NAND的數(shù)據(jù)和地址線共用,只能按“塊”來(lái)讀寫(xiě)數(shù)據(jù),假如NAND上存儲(chǔ)了代碼指令,CPU給NAND地址后,它無(wú)法直接返回該地址的數(shù)據(jù),所以不符合指令譯碼要求。表 21?2中的最后一項(xiàng)“是否支持XIP”描述的就是這種立即執(zhí)行的特性(eXecute In Place)。
若代碼存儲(chǔ)在NAND上,可以把它先加載到RAM存儲(chǔ)器上,再由CPU執(zhí)行。所以在功能上可以認(rèn)為NOR是一種斷電后數(shù)據(jù)不丟失的RAM,但它的擦除單位與RAM有區(qū)別,且讀寫(xiě)速度比RAM要慢得多。
另外,F(xiàn)LASH的擦除次數(shù)都是有限的(現(xiàn)在普遍是10萬(wàn)次左右),當(dāng)它的使用接近壽命的時(shí)候,可能會(huì)出現(xiàn)寫(xiě)操作失敗。由于NAND通常是整塊擦寫(xiě),塊內(nèi)有一位失效整個(gè)塊就會(huì)失效,這被稱(chēng)為壞塊,而且由于擦寫(xiě)過(guò)程復(fù)雜,從整體來(lái)說(shuō)NOR壽命較長(zhǎng)。由于可能存在壞塊,所以FLASH存儲(chǔ)器需要“探測(cè)/錯(cuò)誤更正(EDC/ECC)”算法來(lái)確保數(shù)據(jù)的正確性。
由于兩種FLASH存儲(chǔ)器特性的差異,NOR FLASH一般應(yīng)用在代碼存儲(chǔ)的場(chǎng)合,如嵌入式控制器內(nèi)部的程序存儲(chǔ)空間。而NAND FLASH一般應(yīng)用在大數(shù)據(jù)量存儲(chǔ)的場(chǎng)合,包括SD卡、U盤(pán)以及固態(tài)硬盤(pán)等,都是NAND FLASH類(lèi)型的。
在本教程中會(huì)對(duì)如何使用RAM、EEPROM、FLASH存儲(chǔ)器進(jìn)行實(shí)例講解。
評(píng)論