閃存現在完全主導著微控制器 (MCU),但隨著處理器升級到 32 位架構并且外設變得更加強大,存儲器考慮變得更加復雜。很容易忘記外設中的內存,這些外設使 MCU 更像是一個包含高級電機控制、圖形用戶界面 (GUI) 和網絡的片上系統 (SoC)。
盡管如此,Flash 和其他存儲器類型的細節仍值得關注,以確保所選 MCU 具有符合系統需求的存儲器。在 MCU 中以更高速度快速使用 ARM? Cortex?-M 處理器架構也需要更仔細地檢查內存支持。供應商對其片上存儲器選項采取不同的方法,這可能會影響選擇哪個 MCU 的平衡。
如今,在更大的 MCU 上可以使用多達 1 兆字節的閃存。隨著 MCU 發現新應用并具有新功能,程序存儲、數據表和暫存器 RAM 的比例發生了變化。高端 MCU 可能使用高級語言 (HLL) 進行編程,運行實時操作系統 (RTOS),并使用現成的堆棧和軟件包。這些因素中的每一個都會影響內存需求和使用。
通常用于 MCU 的閃存的訪問時間可以跟上 25 到 50 MHz 的處理器時鐘。當高性能處理器內核的時鐘頻率超過 200 MHz 時,可能會有一個巨大的差距來填補耗時耗電的等待狀態。多個片上總線和特殊的路由機制對于緩解一些繁忙的微控制器中的流量問題非常有益。
ARM 處理器內核架構由于其緊湊的 Thumb2? 指令而具有非常好的代碼密度,該指令僅需要 16 位來存儲指令,而不是預期的 32 位。ARM Cortex-M0、Cortex-M3 和 Cortex-M4 內核在眾多供應商的微控制器中都很流行,這里將研究一些內存選擇。
NXP Semiconductors LPC4000 – 實時輔助數據處理
NXP Semiconductors自從很久以前將 ARM7TDMI? 內核用于 MCU 以來,它就在基于 ARM 的微控制器上取得了成功。恩智浦在 Cortex-M 內核推出后迅速將其添加到其產品組合中,并且一直是將 Cortex-M3、Cortex-M0 和 Cortex-M4 集成到一端高速的 MCU 中的領導者之一,同時將價格推低至另一個。恩智浦是最早使用超寬閃存組織來緩沖后續內存位置以確保無延遲可用性的公司之一。
恩智浦最新的 MCU 系列LPC4000(參見圖 1),它之所以有趣有幾個原因,例如包含 Cortex-M4——它具有數字信號處理 (DSP)、單指令多數據 (SIMD) 和可選的浮點指令——以及作為每個單獨的 Cortex-M0 處理器內核。為了保持 Cortex-M4 足夠快的供電速度并保持低功耗,恩智浦將片上閃存擴展至 256 位寬,是業內最寬的。
圖 1:NXP LPC4000 架構(由 NXP 提供)。
NXP 使用一個相當簡單的緩沖系統來保存 32 行最近的閃存訪問,使最近獲取的指令立即可用。與使用更奇特的方案相比,這提供了更一致的執行性能。一些緩存替換算法可以針對編譯器生成的代碼工作,并且可能更難以模擬和調試。NXP 發現他們的閃存執行可以在 RAM 的 5% 范圍內運行,在當前 90 nm 工藝中運行速度高達 150 MHz。
兩個閃存組提供隔離和分區,當應用程序繼續從另一組運行時重新刷新一個組時也提供絕對的信心。
LPC4000 具有高達 1 MB 的閃存和高達 264 KB 的片上 SRAM——程序與數據存儲器的比例為 4:1。如果需要,可以在零等待狀態下直接從大部分 RAM 執行指令——非常適合最快的確定性實時處理,而無需擔心代碼在細粒度級別上反彈??梢允褂酶鞣N SRAM 塊,因此不同的例程和輸入/輸出 (I/O) 不會爭奪總線時間。
LPC4000 可以很容易地使用廉價的外部閃存來擴展程序空間、將首先復制到 SRAM 中以實現最快執行的代碼,甚至是用于顯示屏幕的大型圖形圖像?,F成的帶有串行外圍接口(SPI)端口的Flash,包括quad-SPI Flash,實際上可以直接映射到處理器的正常存儲空間中,程序員不必考慮它是片上的還是連接的串行芯片外。SPI Flash 接口 (SPIFI) 為外部 Flash 提供了四個通道,并允許 Flash 中的圖像以高達 40 MBps 的速度直接 DMA 到 LCD 控制器。
Cortex-M0 擁有自己的 8 KB 程序內存,并通過共享內存將消息傳遞給更大的兄弟 Cortex-M4。
該系列 MCU 還包括 32 KB ROM,其中包含軟件驅動程序、啟動代碼和其他方便的代碼位,以使系統設計人員不必編寫此代碼,而將更多寶貴的閃存留給更多特定于應用的例程。ROM 執行的速度和功率效率自然也優于 Flash。一些 MCU 提供了執行可靠的固定時間除法運算的庫。
恩智浦早期版本的 ARM Cortex MCU 可能在更大的 180 nm 或 140 nm 工藝節點上,并且大多數使用 128 位寬的閃存,而不是剛剛描述的 256 位架構。所有閃存都是由 NXP 專門為 MCU 開發的,它具有內置的單錯誤糾正/雙錯誤檢測和日志記錄,以實現更好的閃存完整性和監控。恩智浦擁有廣泛的基于 ARM 的 MCU,其中包含 Cortex-M0、Cortex-M3 和 Cortex-M4,最小的只有 16 引腳封裝,并以 8 位 MCU 的價格出售。
STMicroelectronics STM32 – 快速、巧妙的記憶
STMicroelectronics
是另一家在將較早的 ARM7? 和 ARM9? 內核用于 32 位 MCU 之后,很快通過其 STM32 產品線在微控制器中采用 ARM Cortex-M3 的公司。STMicroelectronics 最新的 STM32F4 系列(參見圖 2)可以在 90 nm 工藝中將 Cortex-M4 推至 168 MHz,同時提供高達 1 MB 的閃存和 192 KB 的片上 RAM。
圖 2:STMicroelectronics STM32F4 架構(由 STMicroelectronics 提供)。
為了獲得這種性能,意法半導體開發了自適應實時內存加速器 (ART Accelerator?)。這是一個類似微處理器系統的高速緩存控制器,專為滿足從閃存執行的程序的需要而設計。閃存由 128 位組成,因此單次讀取包含 4 條 32 位指令,而 Thumb2 指令可以是 6 到 8 條實際指令。
ART 加速器使用一個預取隊列和一個 64 條目的分支緩存來減輕由于分支、子程序調用,甚至可能是系統調用或中斷而導致的指令流變化的延遲。如果重定向的程序計數器想要一個最近獲取的位置,則目標可能仍駐留在分支緩存中,在這種情況下,它可以立即加載到預取隊列中執行,從而節省周期。片上邏輯的更智能(自適應)緩存管理應該比更簡單的方法產生更積極的結果(更高的比特率)。
為了緩解閃存在數據訪問(例如數據查找表或圖像數據)時的停頓,ART 加速器具有 8 個 128 位緩沖區。Locality-of-reference 對數據來說是很差的,但是可以通過基于對它在程序中的使用的詳細理解巧妙地安排數據來改進它。這類似于匯編中的手動編碼。
STMicroelectronics 發現閃存執行速度高達 168 MHz,而零等待狀態存儲器的執行速度僅為 2.5%。它吹捧CoreMark? 基準作為其效率和速度的證明,盡管編譯器的有效性和設置也會影響這些結果。首先,一個 168 MHz 的STM32F4?MCU 執行例程的速度比同類中的任何其他 MCU 都要快得多,并且在頻率上表現出線性。其次,“Coremarks/MHz”(每個時鐘周期完成的有效功)是最高的之一。
STM32F4 上的實時時鐘模塊包括一個 4 KB 電池供電 SRAM,用于在極低功耗條件下保存變量和狀態信息。更獨特的是,528 字節的一次性可編程 ROM 可用于序列號、MAC 地址、加密密鑰、校準設置以及存儲每個出廠設備獨有的其他數據。
STMicroelectronics 還利用 7 級 ARM 高速總線 (AHB) 矩陣,允許在 ARM 處理器等主設備、通用 DMA、與 USB 或網絡控制器相關的 DMA 以及眾多外設和存儲器等從設備之間同時傳輸數據。
STMicroelectronics 擁有眾多 ARM Cortex-M0 和原始 Cortex-M3 的 MCU 配置,從低成本、輕負載的控制器到具有復雜外設的快速時鐘設備。他們還有一條低功率線。STMicroelectronics 聲稱在基于 Cortex-M 的 MCU 的累計出貨量中占有 45% 的市場份額,因此其中許多產品已被使用。
Freescale Semiconductor Kinetis – 靈活的內存
Freescale Semiconductor 的
基于 ARM 處理器的主要微控制器需要一段時間才能起步,盡管它已經銷售了數十年基于 Power Architecture? 及其專有 ColdFire? 架構的 32 位 MCU。飛思卡爾在 ARM Cortex-M4 內核及其增強功能上迅速躍升,其新的 Kinetis? 產品系列得到了很好的補充(參見圖 3)。
圖 3:飛思卡爾 Kinetis 架構(由飛思卡爾提供)。
從較小的 K10 到今天的全口徑 K70,片上閃存的大小從 32 KB 到 1 MB,根據芯片的不同,其寬度從 32 位到 128 位不等。閃存在 90 nm 工藝節點上制造,響應電壓約為 30 ns,但 Kinetis MCU 運行速度高達 100 MHz,有望實現雙倍速度。飛思卡爾的薄膜存儲 (TFS) 閃存可以在低至 1.71 伏的電壓下讀取、擦除和寫入,這很好,因為它在兩個幾乎用完的 1.5 伏 AA 電池的限制內(一旦它們達到 0.9 伏,它們就會迅速退化)。
Kinetis MCU
有自己的指令和數據緩存來幫助克服閃存讀取延遲,并且它們還可以尋址片外存儲器。這足夠有效,以至于 Kinetis MCU 在 Kinetis 的額定速度下看起來與其他 MCU 一樣高效。內存保護單元幫助操作系統防止一個任務的程序進入另一個任務的內存空間。
主閃存輔以飛思卡爾稱之為 FlexMemory 的東西,這是一種特殊的閃存,也可以作為 E2PROM 運行。程序員決定將多少用作程序閃存,其余用作 E2 - 最多 16 KB。作為 E2 運行的部分會自動使用執行磨損均衡和寫入算法的特殊邏輯,以獲得 100 萬次甚至可能高達 1000 萬次的耐用周期,因為更多的 FlexFlash 是專用的。
與其他一些供應商的情況一樣,飛思卡爾利用交叉開關讓總線主控器同時訪問主閃存、FlexFlash、SRAM 和各種外圍設備,以保持數據以最佳方式移動。
Texas Instruments Stellaris – 包含固件
Stellaris? 微控制器是第一批使用新 ARM Cortex-M3 架構的產品,當時它們由主要合作伙伴 Luminary Micro 開發,現在歸德州儀器所有。Stellaris 擁有豐富的 MCU 集合,服務于從電機控制到網絡和用戶界面的應用。
德州儀器 MCU 以適中的 80 MHz 速度運行,具有高達 512 KB 的錯誤檢查閃存、高達 96 KB 的數據 RAM,有些還擁有自己的 2 KB 片上傳統 E2PROM。Stellaris 的閃存可以執行高達 50 MHz 的單周期讀取,在此頻率以上,預取緩沖器的作用通過每次讀取讀取 64 位并使用推測分支來最大限度地減少延遲。
雖然現在 ROM 在大多數 MCU 上似乎已經消失了,但許多Stellaris LM3S和基于 Cortex-M4 的 LM4F MCU(參見圖 4)特別使用緊湊型 ROM 來存儲可能被所有應用程序使用的一些基本且經常訪問的代碼。這些驅動程序和例程稱為 StellarisWare?,由外圍驅動程序庫、引導加載程序和向量表、搶先式實時調度程序 SafeRTOS?、循環冗余校驗 (CRC) 錯誤檢測操作和用于高級加密的密碼表組成標準 (AES) 函數。將這些有用的功能和數據放入快速、廉價的 ROM(在適當的情況下)可以釋放大量閃存,這些閃存可以更好地用于增強終端設備的自定義代碼。
圖 4:德州儀器 Stellaris LM4F 架構(德州儀器提供)。
記住您的應用程序——內存可能使您受益
每個應用程序的需求都不同,在選擇微控制器時需要考慮許多因素。此處回顧了來自各種供應商的與高端 MCU 相關的許多閃存、SRAM、ROM 和特殊存儲器功能。雖然沒有一個部件可能具有完全適合您的應用程序的理想特性,但許多內存選項現在應該更加清晰。
評論
查看更多