處理器系統中可能包含多種類型的存儲部件,如Flash、SRAM、SDRAM、ROM以及用于提高系統性能的Cache等等。剛剛接觸芯片開發的工程師常常被各式各樣的存儲和存儲管理弄得暈頭轉向,因此本文簡單對ARM架構和基于ARM架構處理器系統中可能包含多種類型的存儲部件,如Flash、SRAM、SDRAM、ROM以及用于提高系統性能的Cache等等。剛剛接觸芯片開發的工程師常常被各式各樣的存儲和存儲管理弄得暈頭轉向,因此本文簡單對ARM架構和基于ARM架構的處理器上的內存及內存管理做一個簡單的匯總和整理。文章首先闡述了內存的分類,其次ARM920T為例描述了ARM芯片包含的存儲部件和存儲管理單元,最后簡單闡述了智能機中的存儲部件。
一,存儲部件的分類
1,RAM(Random Access Memory)-隨機存取存儲器
RAM在任何時候都可以被讀寫,通常作為操作系統或其他正在運行程序的臨時存儲介質(內存,掉電后RAM不能保留數據。RAM有SRAM、DRAM兩大類。
SRAM(Static RAM/SRAM)寫入的數據不會消失,直到下次寫入或掉電,是目前讀寫最快的存儲設備,價格昂貴,只用于要求苛刻的地方,如Cache。
DRAM(Dynamic RAM/DRAM)保留數據時間短,速度比SRAM慢,但快于其他任何ROM,比SRAM便宜很多,常用于計算機內存。DRAM種類很多,常見的有FPRAM/FastPage、EDORAM、RDRAM、SGRAM、SDRAM、DDR RAM等。
SDRAM(Synchronous DRAM)同步動態隨機存儲器,是一種改善了結構的增強型DRAM。SDRAM的接口相對復雜,需要相應的控制器支持,但由于容量大、價格便宜、訪問速度快,所以常用在對內存容量和處理速度要求高的應用場合,在這種場合中,相應的處理器(CPU)都自帶有SDRAM控制器。
DDR RAM(Date-Rate RAM)也稱作DDR SDRAM,是目前電腦中用得最多的內存,這種改進型的RAM和SDRAM是基本一樣的,但是它數據傳輸速率加倍了,一個時鐘內可以進行兩次數據書讀寫。
2,ROM(Read Only Memory)--只讀存儲器
ROM可在任何時候讀取,斷電后能保留數據,數據一但旦寫入只能用特殊方法更改或無法更改。因此ROM相當于PC機上的硬盤,用來存儲和保存數據。嵌入式系統中ROM常用來存放可執行文件映像。RAM和ROM相比,兩者的最大區別是RAM在斷電以后保存在上面的數據會自動消失,而ROM就不會。隨著ROM存儲介質發展,應用中經常提到的有ROM、PROM、EPROM、2PROM。
ROM:Read Only Memory,只讀存儲器。ROM中內容只能讀不能改,在工廠里通過特殊的方法將數據燒錄進去。
PROM:Programmable ROM,可編程ROM。可通過專用的編程器將數據寫入,但是只可寫一次,一旦寫入再無法修改。
EPROM:Erasable Programmable ROM,可擦除可編程ROM。芯片寫入要用專用的編程器,可重復擦除和寫入,擦除通過紫外線照射實現。
EEPROM:Electrically Erasable Programmable ROM,
電可擦除可編程ROM。價格高,寫入慢。但其寫入、擦除不需借助其它設備,電子信號即可實現。用廠商提供的專用刷新程序并利用一定的編程電壓就可以輕而易舉地改寫內容。手機軟件一般放在EEPROM中,我們打電話,有些最后撥打的號碼,暫時是存在SRAM中的,不是馬上寫入通過記錄(通話記錄保存在EEPROM中),因為當時有很重要工作(通話)要做,如果寫入,漫長的等待是讓用戶忍無可忍的。
3,FLASH存儲器(閃存)
FLASH結合了ROM和RAM的長處,不僅具備電子可擦出可編程(EEPROM)的性能,斷電也不會丟失數據。同時數據可以快速讀取,U盤和MP3以及現在的智能手機里用的就是這種存儲器。過去,嵌入式系統一直采用ROM(EPROM)作存儲設備,近年來Flash則將其全面代替,被用來存儲Bootloader、操作系統或者程序代碼。目前Flash主要有兩種:NOR Flash和Nand Flash 。
NOR Flash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內部的每一個字節。 NOR Flash的特點是芯片內執行(XIP, eXecute In Place),用戶可以直接運行裝載在NOR FLASH里面的代碼,不必再把代碼讀到系統RAM中。NOR Flash的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能,同時成本較高。
NAND Flash沒有采取內存的隨機讀取技術,它的讀取是以塊的形式來進行,通常一個塊大小為512個字節,Nand Flash比較廉價,用戶不能直接運行NAND Flash上的代碼。應用NAND的困難還在于flash的管理和需要特殊的系統接口,它使用復雜的I/O口來串行地存取數據,各個產品或廠商的方法可能各不相同。
Nand Flash一般采用兩種不同的類型。一種叫做SLC(Single Level Cell),單層單元閃存;第二種叫做MLC(Multi Level Cell),多層單元閃存。兩者的主要區別是SLC每一個單元儲存一位數據,而MLC通過使用大量的電壓等級,每一個單元儲存兩位數據,數據密度比較大。SLC成本較高,但性能優、能耗低、重復擦寫次數多。
嵌入式開發中,因為NOR Flash多用來存儲啟動代碼、操作系統等重要信息,而大容量的用NAND FLASH。
4,SD/MMC
MMC(MultiMedia Card)卡,是一種快閃存儲器卡標準。在1997年由西門子及SanDisk共同開發,技術基于東芝的NAND快閃記憶技術。SD卡(Secure Digital Memory Card)是一種為滿足安全性、容量、性能和使用環境等各方面的需求而設計的一種新型存儲器件,在MMC卡基礎上發展而來。SD/MMC的存儲介質就是NAND FLASH。
二,ARM架構上的內存和內存管理部件
嵌入式開發中常常使用多種類型的組合實現來降低成本、提高效率。如Rom+RAM+Nand Flash的組合,基本的引導代碼放在ROM中,系統加電即自動從Rom初始地址開始執行,而后分階段(一階段或兩階段)將bootloader代碼、RTOS和應用程序代碼復制至RAM中執行。程序代碼之類一定是放在一種可以掉電不失數據的存儲設備中,籠統的將之稱為ROM。傳統的嵌入式開發中由于代碼量和數據量很少,一般內部EEROM即夠用。后來由于代碼量、數據量太大,EERom存不下來,就出現了Flash。由于Flash不能直接與CPU交換數據或交換很慢,所以在程序運行后,需要將Flash內部的某一要運行的程序,“搬移”到能夠和處理器直接交換數據的RAM中去執行。當程序被搬運(也許只搬運了部分)到ram中后,就開始從ram的首地址開始運行程序。為了提高利用率,一般會將向量表之類的需要快速響應的部分放到ram中;當然若ram夠大,也可以將所有的代碼放到RAM中。芯片中,存儲部件間程序和數據的“搬移”、CPU core與主存間通信就是通過處理器的各種內存管理單元來實現。
芯片上所有的片內、片外存儲都統一管理,存在一個系統存儲器分配映射,其不僅是存儲器塊可用地址和I/O設備可使用地址的反映,也是系統中硬件存儲器和I/O設備描述的反映。它反映了不同存儲單元ROM、RAM、Flash和I/O設備等的存在性,每種存儲部件有各自的開始和結束地址;也反映了定位器對程序、數據、I/O操作的存儲器分配。不同的存儲單元之間存在著空間間隔以方便擴展,擴展時只需改動軟件程序即可。
如下圖是ARM920T的邏輯框圖
1,寄存器
對于寄存器,它不是ram,可以理解成ram,寄存器的速度是最快的,是處理器運算的臨時空間,內存的數據和信息都是經過它來參加CPU內邏輯運算單元或算術運算單元的。
2,Cache
高速緩存存儲器是一個硬件部件,SRAM,對用戶來說是透明的。Cache與主存以Cache Line為單位交換數據。Cache的地址映像和變換方法有三種:直接相聯、全相聯和組相聯映像。Cache與一些寫回、寫通技術結合來提高系統效率的同時保持Cache和主存數據的一致性。
在ARM920T有16K的數據Cache和16K的指令Cache,這兩個Cache是基本相同的,數據Cache多了一些寫回內存的機制,后面我們以數據Cache為例來介紹Cache的基本原理。我們已經知道,Cache中的存儲單位是Cache Line,ARM920T的一個Cache Line是32字節,因此16K的Cache由512條Cache Line組成。
多核心的架構下,每個處理器都會有自己的L1Cache,并共享一個L2 Cache。ARM采用CacheCoherence機制保證Cache的同步。
3,MMU(Memory Management Unit)- 內存管理單元
MMU負責虛擬地址到物理地址的映射,并提供硬件機制的內存訪問權限檢查。MMU使得每個用戶進程擁有自己獨立的地址空間,并通過內存訪問權限的檢查保護每個進程所用的內存不被其他進程破壞。
ARM CPU地址轉換涉及三種地址:虛擬地址(VA,Virtual Address)、變換后的虛擬地址(MVA,Modified Virtual Address)、物理地址(PA,Physical Address)。MMU沒有使能時,CPU核心、cache、MMU、外設等所有部件使用的都是物理地址。啟動MMU后,CPU核心對外發出虛擬地址VA,VA被轉換為MVA供cache、MMU使用,在MMU里MVA被轉換成PA,最后使用PA讀取實際設備。
從MVA到PA的轉換需要訪問多次內存,轉譯查找緩存(Translation Lookaside Buffers,TLB)用來改進CPU訪問內存的性能。由此,通過使用這樣一個高速、容量相對較小的存儲器來存儲近期用到的頁表條目(段、大頁、小頁、極小頁描述符),避免每次地址轉換都到主存中查找,這樣就大幅提高性能。這個存儲器用來幫助快速地進行地址轉換,成為當CPU發出一個虛擬地址時,MMU首先訪問TLB。如果TLB中含有能轉換這個虛擬地址的描述符,則直接利用此描述符進行地址轉換和權限檢查,否則MMU訪問頁表找到描述符后再進行地址轉換和權限檢查,并將這個描述符填入TLB中,下次再使用這個虛擬地址時就直接使用TLB用的描述符。
使用TLB需要保證TLB中的內容與頁表一致,在啟動MMU之前,頁表中的內容發生變化后,尤其要注意。一般的做法是在啟動MMU之前使整個TLB無效,改變頁表時,使所涉及的虛擬地址對應的TLB中條目無效。
4,協處理器CP15
在基于ARM的嵌入式系統中,存儲器常用協處理器CP15完成存儲單元的大部分管理工作。例如通過專用指令寫CP15控制寄存器相應位來使能和控制內存管理單元MMU和Cache。
5,Nand Flash controller和Flash
操作NAND Flash時,先傳輸命令,然后傳輸地址,最后讀寫數據,這個期間要檢查Flash的狀態。
NAND Flash的讀寫操作次序如下:
①設置NFCONF配置NAND Flash
②向NFCMD寄存器寫入命令
③向NFADDR寄存器寫入地址
④讀寫數據:通過寄存器NFSTAT檢測NAND Flash的狀態,在啟動某個操作后,應該檢測R/nB信號以確定該操作是否完成、是否成功。
Flash相當于PC的硬盤,用于永久存放數據,可以將部分引導程序、可執行映像存放在Flash中,在系統加電后通過Bootloader加載至RAM。
6,DMA(Direct Memory Access)- 直接存儲器存取
DMA用來提供在外設和存儲器之間或存儲器和存儲器之間的高速數據傳輸。無須CPU干預,數據可以通過DMA快速地移動,這就節省了CPU的資源。
7,ROM(內部Rom和外部Rom),用于存放系統啟動和初始化代碼、RTOS等。
8,RAM(分內部IRAM和外部RAM),相當于PC的主存,用于任務執行過程中的臨時數據、代碼存儲和堆棧。執行頻率高的代碼、數據存于IRAM。系統啟動后ROM中的影像端copy至RAM并執行。
9,I/O端口和設備地址空間:該地址由處理器根據硬件配置分配,包括控制/數據/狀態寄存器。
三,智能機應用處理器AP和無線路由器CP的存儲部件配置
下面兩幅圖是ARM提供的當前典型的ARM架構的無線modem和 應用處理器AP的邏輯示意圖
圖中的ROM、RAM組合用來實現系統代碼的存放和啟動、運行。另外一些應用場景中(如功能機)modem需要額外的存儲部件,即通過Static Memory Controller外接Flash等實現。
TCM是一個固定大小的RAM,緊密地耦合至處理器內核,提供與cache相當的性能,相比于cache的優點是,程序代碼可以精確地控制什么函數或代碼放在那兒(RAM里)。當然TCM永遠不會被踢出主存儲器,因此,他會有一個被用戶預設的性能,而不是象cache那樣是統計特性的性能提高。
AP示意圖中列出了當下流行的存儲部件和存儲控制器組合,實際上這些控制部件不一定同時存在于一顆AP上。當我們談到智能機的“內存”時,實質上指的往往是應用處理器的存儲配置。下文會簡述智能機中的存儲部件組合。
手機的Memory由兩大塊組成,俗稱RAM與ROM。RAM也叫運行內存,其大小決定手機后臺能運行多少程序;ROM的大小則決定手機中能安裝多少程序、放多少歌曲、電影、小說等。RAM則是上面提到的DRAM,對智能手機的性能影響最大、價格也貴,特別是目前新一代的LPDDR2的價格,同等容量時比電腦中采用的PC DDR3的價格貴一倍左右。今年底,下一代LPDDR3也將被一些高端平臺采用,價格將更昂貴。ROM實質上是Nand Flash閃存,用來永久存儲智能手機中的各種數據。而RAM與ROM如何結合、如何封裝則是目前手機廠商在選擇平臺時最為糾結的地方,因為涉及到PCB的布線和空間位置,不僅如此,還涉及到后面物流采購的可行性與價格的波動,因為不同形式的Memory價格波動也不一樣。目前主流的形式有MCP、eMCP、POP(Package on Package)以eMMC+LPDDR2的分商方式,手機采用哪一種形式往往是由手機選擇的主芯片平臺來決定,而容量則由手機廠商根據市場需求和自己的產品定義來決定。有些手機廠商在將其它配置都定義得較高,為了省成本選擇了512MB的RAM,這對用戶是一種不負責的態度。目前512MB的RAM與2GB的RAM價格差了十幾美元。
低端機一般是一顆主芯片(與AP集成的SoC)配一個Flash+DRAM。Flash與DRAM封一起,稱為ND MCP。這里Flash是NandFlash,一般采用的SLC目前主要的配置有兩種:一種是ND 4Gb+2Gb;另一種是ND4Gb+4Gb。前者也即廠商通俗所稱的512MB ROM+2RAM,目前價格約為4.2-4.5美元;后者也即廠商所報的512MB ROM+4RAM,目前報價約為7-7.5美元。現在主流低端智能機已采用第二種了。低端機的512MB ROM不能支持Android 4.0。
中端智能機是由一顆主芯片(AP與集成)配一個eMMC和一顆DRAM。所謂eMMC是集成了閃存控制器,eMMC=NAND Flash+閃存控制芯片+標準接口封裝,這樣的最大好處是BB/CPU主控IC不需要再面對不同廠商的閃存的兼容性問題,以及閃存技術不斷升級帶來的接口兼容性問題,當然,Flash與控制器集成還有很多好處,這里就不一一描述了,昌旭在去年曾寫過一文專門談eMMC的好處。并且,由于目前智能手機PCB上占位面積有限,三星等廠商將eMMC與DRAM封在一起,稱為eMCP。
今天主要談價格。目前的中端智能機(1500元-1999元)的主要配置也有兩種:一種是4GB eMMC+4Gb DRAM(注意,這時是大寫GB,且閃存采用了MLC)
最后,再看看蘋果三星這種高端配置的手機。這種手機一般采用與AP分離的方式,eMMC供與AP,上不再需要NOR Flash,而AP上還需要堆疊一顆DRAM(目前主要是LPDDR2)。所以,eMMC與DRAM也是分開的。eMMC的配置主流有16/32/64GB。
-
處理器
+關注
關注
68文章
19167瀏覽量
229153 -
ARM架構
+關注
關注
14文章
177瀏覽量
36290
發布評論請先 登錄
相關推薦
評論