大多數現今的嵌入式系統都依賴晶片上(on-chip)快閃記憶體或SRAM作為程式記憶體(韌體)。 然而,這些記憶體的成本和功耗通常都很高,並且程式大小還會受到晶片上建置記憶體容量的限制——這是一種可望能克服上述挑戰的方法。

為嵌入式應用選擇最佳的快閃記憶體

長期以來,嵌入式快閃記憶體一直是微控制器(MCU)的重要基礎,因為MCU會利用一個或多個用來儲存韌體和其他常數的NVM陣列來增強其晶片上揮發性記憶體陣列。要實現這一點,需要透過大量額外的製造步驟,才能使基本的CMOS製程增加NVM單元。過去,增加這些製造步驟的成本很低,但隨著CMOS技術的進步,把標準CMOS製程轉變為支援NVM製程變得越來越複雜和昂貴。事實上,雖然目前量產中的最先進CMOS製程為10奈米以下,但支援嵌入式快閃記憶體的CMOS製程仍停留在40奈米,較先進製程處落後多個世代。

結果是,儘管MCU供應商可以用更快、較不昂貴、且更低功率的製程技術來建構產品,但嵌入式NVM使他們無法這樣做。即使他們選擇了支援嵌入式NVM較成熟的製程,但支援快閃記憶體和不支援快閃記憶體製程之間的價格差距也可能超過40%。此外,在MCU中採用特定容量的NVM可能對某一種應用適用,但對其他應用卻不是如此。

儘管有這些挑戰,嵌入式NVM仍將長期成為MCU的主流。對於可以採用成熟CMOS製程的較小型設計來說,利用嵌入式快閃記憶體仍是最有效的解決方案。但是,更高效能、更低功率的MCU則需要替代的解決方案。

替代嵌入式快閃記憶體的一種方法是採用晶片上SRAM陣列,並由外部的序列快閃記憶體來備份。啟動時,外部快閃記憶體中的內容會被複製到晶片上SRAM,然後MCU再開始從SRAM執行。此解決方案的最大優點是,SRAM能以最先進的CMOS製程來製造,無需更改製程。但是,此解決方案需要兩個韌體副本——一個在外部快閃記憶體,另一個在SRAM。在先進製程節點,大容量晶片上SRAM陣列非常昂貴。而且,由於SRAM會漏電流,因此系統在斷電模式時需將其關閉,所以每次MCU喚醒時都需要重覆耗電、耗時的複製作業。最後,與嵌入式快閃記憶體的情況一樣,特定MCU中的SRAM容量是固定的,對於特定應用的需求,此容量可能太大或不足。

MCU供應商正在研究新的記憶體架構,以滿足新興智慧物聯網(IoT)邊緣裝置的效能和功率要求。原地執行(XiP)正在成為更高效能、更低功率系統的首選解決方案。透過XiP,MCU能採用標準的CMOS製程技術,只有外部快閃記憶體陣列需要特殊的NVM製程。MCU增加了一個指令快取,用來保存常用的程式碼片段。只要當處理器無法在快取中找到所需的指令時(快取錯失,cache miss),MCU就會啟動對外部快閃記憶體的存取,把錯失的指令帶回來並將其儲存在快取中。隨著新的JEDEC xSPI協定(JESD 251)的發佈,快閃記憶體介面速度可達200MHz,採雙數據速率(DDR),以8位元寬的數據路徑進行切換。

20190910NT42P1 圖1 常見的MCU記憶體架構。

恩智浦(NXP Semiconductors)和意法半導體(STMicroelectronics;ST)都可提供使用外部快閃記憶體來支援XiP運作的MCU。ST的STM32L4 +和STM32L5分別是基於Arm Cortex-M4和M33核心的中階MCU,而高階的恩智浦 i.MX RT1050和RT10xx系列的其他成員則建置了具有32KB指令快取的600MHZ雙指令執行(dual-issue)Cortex-M7核心;恩智浦還透過其基於M4的中階Kinetis K8x產品和最近推出的RT600(基於Arm Cortex-M33的MCU)來支援XiP。ST MCU和Kinetis K8x結合建置了晶片上快閃記憶體和XiP支援;RT600和RT10xx產品的設計並沒有晶片上快閃記憶體,使其能擁有非常具競爭力的價格。

在為XiP選用外部快閃記憶體時,首先要問的問題是,韌體中的哪些部分將以XiP模式執行。有些設計人員選擇混合方式,把攸關程式效能的部分保留在晶片上(在ROM、快閃記憶體或SRAM中),並把外部快閃記憶體以XiP模式使用,以擴展系統。

關於這點的問題是:

(a)是否所有或部分的程式會從晶片上ROM、快閃記憶體或SRAM執行?如果是,要採用哪一種記憶體類型?

(b)是否所有或部分的程式會以XiP方式直接從外部快閃記憶體執行?

如果(a)的答案是SRAM,那麼SoC外部需要快閃記憶體才能在啟動時加載程式。設計人員可以選擇Adesto Phoenix(標準快閃記憶體)、Fusion(針對電池操作最佳化的快閃記憶體)或EcoXiP(針對XiP最佳化的Octal快閃記憶體)。對於成本敏感且資料傳輸量(throughput)要求不高的應用,適合選擇Phoenix;Fusion則適用於功率限制非常嚴格的應用。如果客戶在XiP模式下也要求高效能,或是需要Octal快閃記憶體的資料傳輸量來實現非常快速的啟動或頻繁的資料讀取操作,就應考慮Adesto的EcoXiP——例如人工智慧(AI)推理引擎的使用案例。

假設(b)的答案是肯定的(至少部分韌體需要XiP),那麼接下是要釐清需要多少效能。由於採用高速Octal DDR介面,EcoXiP可提供4倍於標準快閃記憶體的資料傳輸量。此外,wrap-and-continue命令還能進一步提高可達到的資料傳輸量。接下來,還有一些問題要問:

(a)SoC是否包含指令快取(若沒有指令快取,XiP效能將非常低;但EcoXiP相較於Quad元件的優勢將更顯著)?

(b)CPU的運作頻率是多少,序列周邊介面(SPI)匯流排的頻率是多少?

(c)當以XiP執行時,需要何種等級的效能?

(d)裝置是否需要現場軟體更新(通常稱為空中下載(OTA)更新)?

(c)的答案至關重要。在低頻率以及對XiP效能要求不高的情況下,直接從標準的Quad SPI快閃記憶體執行是非常可行的。但是,即使指令快取中的錯失比例非常小,與執行EcoXiP相比,從Quad元件執行僅能提供約50%的CPU效能。

請注意,如果(d)的答案是肯定的,那麼如果建構SoC時沒有其他的程式碼儲存記憶體(僅依賴於XiP),EcoXiP的讀寫能力將使OTA更新變得更為容易。市面上有其他不具備讀寫能力的OTA更新解決方案,但它們都是SRAM密集型,而且需要複雜的韌體。

Quad(四路)與Octal(八路)SPI比較

大多數設計人員通常會為其XiP系統選擇四路SPI記憶體,因為它是成本最低的選擇。但是,取決於特定應用,設計人員使用Quad元件可能無法滿足其效能要求。

他們可以透過軟體最佳化來解決這個問題,但是這些更改通常需要軟體團隊花費數週甚至數月來最佳化設計,即便如此,最佳化仍然可能還不夠。最終可能需要從設計中取消一些特性。另一個選項是,提高處理器的時脈速度以達到所需的效能,但此做法的效益有限,而且可能會增加系統耗電,使得需要加大電池容量,成本也因此提高。當然,有些設計已經讓處理器以最高的時脈速度運行,在此情況下,可能需要升級到更快、更昂貴的處理器。

設計人員應該考慮的一個選項是從Quad SPI元件轉向Octal SPI元件來進行設計。雖然此舉不會對所有應用帶來明顯差異,但對有些應用的效益會很顯著。尤其是對快閃記憶體效能敏感的應用,此優勢特別凸顯。

預測此情況的簡單方法是查看SPI匯流排上的流量。如果應用主要是在快取之外執行,那麼你不會在匯流排上看到很多交易。當你開始在匯流排上看到很多流量/高利用率,這就是更依賴快閃記憶體的時候了。如果匯流排的利用率很高,那麼切換到像Adesto的EcoXiP這樣的Octal元件的效益是非常顯著的。最終,這可以轉化為顯著的能源和成本節省。

我們利用邏輯分析儀來測量Quad模式下的SPI匯流排利用率,以了解它在切換到Octal元件時與系統加速的關聯性。執行CoreMark基準測試,透過以固定間隔清除快取內容(快取失效,cache invalidation)以在匯流排上生成更多/更少的流量。這些快取失效旨在模擬即時系統的情境,其中會經常發生任務切換和中斷。透過持續縮短間隔,我們可使匯流排上的流量增加。

可以看到在某些領域,Quad和Octal之間的效能差異不大,但隨後會向上提高。在這時候,就需考慮改用Octal元件。當應用出現60%或以上的SPI匯流排利用率時,便能看到此效益。

20190910NT42P2 圖2 在XiP模式下使用Quad和Octal元件的系統效能。

20190910NT42P3 圖3 Octal相較於Quad的效能優勢,與Quad模式下SPI匯流排的利用率有關。

功率是許多系統的重要考慮因素。我們希望確保,透過使用Octal 元件獲得的額外效能不會帶來更高的系統級功耗。我們使用相同的設置來測量恩智浦i.MX RT1050 MCU以XiP模式執行時的功率,使用了以固定間隔注入快取失效的相同技巧,並測量了MCU和快閃記憶體的功率。如圖4所示,在我們測試的所有情境中,Octal EcoXiP比傳統的Quad元件更省電。在每種情況下,EcoXiP可提供更高的CoreMark/mW數值。值得注意的是,EcoXiP的功率優勢會隨著更嚴苛的工作負載而增加,這些工作負載具有更多的快取錯失,因此會導致SPI匯流排上的更多流量。

20190910NT42P4 圖4 在XiP模式下使用Quad和Octal元件的系統功率效率。

如果你正在使用像NXP i.MX RT1050這類的元件,可以輕鬆地將Quad元件更換為Octal元件,因為該晶片經過精心設計,可同時支援兩種類型的元件。