功耗是邊緣人工智能 (AI) 應用的關鍵因素,其中整個系統由小型電池供電,預計無需充電或更換電池即可運行數月。MAX78002超低功耗AI微控制器專為物聯網邊緣的此類應用而設計。本文介紹了各種選項,使用戶能夠在MAX78002上開發功耗優化應用,并給出了基準測試示例。
介紹
MAX78002是一款先進的片上系統,具有帶FPU CPU的Arm Cortex-M4和超低功耗深度神經網絡加速器。這種架構能夠在能源受限的環境中開發非常節能的 AI 應用程序。MAX78002提供多種選項和工作模式,用于創建低功耗應用。以下部分概述了這些選項,包括MAX78002評估板的實際示例和實際測量結果。有關詳細信息,請參閱??[5].
MAX78002
MAX78002是MAX78000的后續產品,在新一代人工智能(AI)微控制器中具有額外的計算能力和存儲器,能夠以超低功耗和物聯網(IoT)邊緣執行神經網絡。該產品將最節能的AI處理與ADI公司久經考驗的超低功耗微控制器相結合。基于硬件的卷積神經網絡 (CNN) 加速器使電池供電的應用程序能夠執行 AI 推理,同時僅消耗微焦耳的能量。MAX78002具有帶浮點單元(FPU)微控制器的Arm Cortex-M4,可實現高效的系統控制和超低功耗深度神經網絡加速器。還集成了一個RISC-V內核,可以執行應用和控制代碼以及驅動CNN加速器。圖1所示為MAX78002的頂層架構。
圖1.MAX78002的架構
MAX78002評估板(EV kit)為利用器件功能構建新一代AI產品提供了一個平臺。它具有板載硬件,如數字麥克風、串行端口、數字視頻端口 (DVP) 和攝像頭串行接口 (CSI) 攝像頭模塊支持,以及 3.5 英寸觸摸彩色薄膜晶體管 (TFT) 顯示屏[2].它還包括用于監控和顯示輔助TFT顯示器上的功率電平的電路。The MAX34417[3]監測MAX78002的電壓和電流,并向MAX32625報告累積功率,MAX2用作功率數據處理器,同時控制功率顯示,如圖<>所示。
圖2.電源監視器。
電源監視器以兩種模式運行;瞬時,顯示平均功率、電源電流和電壓,以及窗口能量累積,根據觸發事件測量 CNN 功率或系統總功率。瞬時測量通常用于快速、粗略地估計功率水平。窗口測量非常適合測量用戶定義的開始實例和完整實例之間的累積能量。這些事件由MAX78002(P1.6和P1.7)的兩個通用輸入/輸出(GPIO)切換觸發,這些輸入/輸出連接到MAX32625電源數據處理器。有關使用電源監視器的詳細信息,請參閱[4].
選擇了一個大型和小型模型示例來執行本文檔中的大多數測量:
cifar-100-mobilenet-v2-0.75:MobileNetV73類型架構的2層實現,具有1.34M權重(權重內存容量的56%)用于圖像分類。
kws20_v3_1:用于關鍵字發現的 9 層 148K 權重(權重內存容量的 6%)網絡。
此外,本文檔末尾還提供了所有已發布的 SDK 示例的 CNN 功率測量的表格快照,以供參考。
注:本應用筆記中的測量結果基于MAX78002評估板上的示例代碼。用戶平臺和特定應用程序的實際結果可能會有所不同。基準示例的能量/功率測量值在3個不同評估板的樣本集上觀察到±8.<>%的變化。
MAX78002評估板跳線設置,用于功率測量
為了使用功率監測器測量不同工作模式下的功耗,MAX78002評估板跳線設置如表1和圖3所示。
跳線 | 設置 | 描述 |
---|---|---|
JP1 | IN | 3V3 MON |
JP2 | OUT | 3V3 SW PM BYPASS |
JP3 | IN | CNN MON |
JP4 | OUT | VCOREA PM BYPASS |
JP5 | OUT | VCOREB- PM BYPASS |
JP6 | OUT | VREGO_A PM BYPASS |
JP7 | IN | VBAT |
JP8 | IN | VREGI |
JP9 | BOTTOM | VREGI - 3V3PM |
JP10 | LEFT | VDDIOH - 3V3PM |
JP11 | IN | VDDA |
JP12 | IN | VDDIO |
JP13 | IN | VCOREB |
JP14 | IN | VCOREA |
JP29 | BOTTOM | VDDB PWR SEL |
JP34 | RIGHT | I2S VDD |
圖3.MAX78002評估板跳線設置,用于功率測量
MAX78002時鐘和工作模式
MAX78002支持不同的時鐘源和低功耗工作模式,可聯合配置以實現優化的功耗和性能。本應用筆記簡要介紹了每種模式,以指導讀者根據所需應用設置模式。有關更詳細的說明,請參閱[5].
時鐘
MAX78000包括多個可配置時鐘,供不同外設使用。根據需要配置時鐘源,以選擇性能和電源效率的組合。所選系統振蕩器(SYS_OSC)是大多數內部模塊的時鐘源。以下振蕩器源可用,可以選擇SYS_OSC:
內部初級振蕩器 (IPO) – 120MHz:
IPO是速度最快的頻率振蕩器,消耗的功率最大。當進入低功耗模式(LPM)時,該振蕩器可以關斷。
內部次級振蕩器 (ISO) – 60MHz:
這是一個低功耗內部次級振蕩器,是SYS_OSC的上電復位 (PoR) 默認值。
內部納米環形振蕩器 (INRO) – 8kHz 至 30kHz:
INRO是一款超低功耗內部振蕩器,可以選擇作為SYS_OSC并始終使能。頻率可配置為 8kHz、16kHz 或 30kHz(默認)。
內部波特率振蕩器 (IBRO) – 7.3728MHz:
這是一個功耗非常低的內部振蕩器,可以選擇作為SYS_OSC。該時鐘可以選擇用作UART的專用波特率時鐘。
內部鎖相環 (IPLL) - 100MHz/200MHz:
IPLL 采用外部 25MHz 晶體工作,提供可用作系統時鐘的 100MHz 振蕩器以及用于 CNN 時鐘的 200MHz 時鐘。請注意,當 CNN 時鐘高于 50MHz 時,請使用流水線(在合成工具中默認啟用)。
外部基振 (EBO) – 25MHz:
它是一個可用的外部振蕩器,可以選擇作為SYS_OSC。它還用于IPLL,并可用于ADC時鐘。
外部實時時鐘振蕩器 (ERTCO) – 32KHz:
這是一個功耗極低的內部振蕩器,是實時時鐘(RTC)的默認時鐘,也可以選擇為SYS_OSC。
外部時鐘 (EXT_CLK) – 高達 80MHz:
一個高達80MHz的外部時鐘可用作SYS_OSC。
應用程序接口 | 描述 |
---|---|
int MXC_SYS_ClockSourceEnable (mxc_sys_system_clock_t clock) |
Enables a clock source without selecting it; the following sources are available: MXC_SYS_CLOCK_IPO MXC_SYS_CLOCK_IBRO MXC_SYS_CLOCK_ISO MXC_SYS_CLOCK_IPLL MXC_SYS_CLOCK_EBO MXC_SYS_CLOCK_INRO MXC_SYS_CLOCK_ERTCO MXC_SYS_CLOCK_EXTCLK |
int MXC_SYS_Clock_Select (mxc_sys_system_clock_t clock) | Selects the clock source to be used for SYS_CLK. See [6] for the complete list. |
void SystemCoreClockUpdate(void) | Updates the system core clock according to the selected clock source. |
void MXC_SYS_ClockEnable (mxc_sys_periph_clock_t clock) | Enables peripheral clocks. See [6] for the complete list. |
void MXC_SYS_ClockDisable (mxc_sys_periph_clock_t clock) | Disables peripheral clocks. See [6] for more information. |
操作模式
如表3所示,MAX78002包括多種工作模式以優化性能和功耗,如MAX78000。有關操作模式的更多信息,請查看 中的 操作模式 部分[6].
操作模式 | 振蕩器 | 系統 公羊 | CNN Quadrants | CNN RAM | 外設 | 應用程序接口 |
---|---|---|---|---|---|---|
Active | 全部可用 | 可用 | 活動,可配置 | 活動,可配置 | 可用 | |
Sleep | 全部可用 | 可用 | 活動,可配置 | 活動,可配置 | 可用 | MXC_LP_EnterSleepMode() |
LPM |
ISO, IPO, ERTCO, INRO IBRO (默認) |
0,1:保留期 2,3:可用 |
活動,可配置 | 活動,可配置 | 可用 | MXC_LP_EnterLowPowerMode() |
UPM |
IBRO, ERTCO, INRO |
保留 | 可選關閉 | 可選擇保留 |
保留, LPUART0, LPTMR0-1 LPWDT0, LPCOMP0-3, GPIO, WUT, RTC 可用 |
MXC_LP_EnterMicroPowerMode() |
待機 | ERTCO | 保留 | 關閉 | 可選擇保留 |
保留、WUT、RTC、 COMP0、GPIO 可用 |
MXC_LP_EnterStandbyMode() |
備份 | ERCO | 的保留 | 關閉 | 可選擇保留 |
關閉、WUT、RTC、 COMP0、GPIO 可用 |
MXC_LP_EnterBackupMode() |
關 | 關閉 | 關閉 | 關閉 | 關閉 |
關閉, 可配置 P3.0/1 |
MXC_LP_EnterPowerDownMode() |
VCOREA 電源電壓
VCOREA 的標稱電源電壓為 1.1V,這為使用該架構支持的上限范圍的大型計算密集型模型操作 CNN 提供了足夠的裕量。MAX78002評估板出廠時提供VCOREA穩壓至1.1V。最小CNN輸入電源(VCNNXRAM和VCNNX)為0.99V [1],應與VCOREA相同。通常,可以將VCOREA降低到1V,以實現約15%的節能。但是,1V 工作電壓取決于 CNN 型號和工作條件。仔細測試功能,以確保特定用例的正確操作。在本文檔中,在VCOREA = 1.1V和1V的情況下進行了幾次測量,以突出差異。
在MAX78002評估板上,V科里亞設置為 1.1V (R15 = 21KΩ in[2]) 默認情況下。要將其更改為1V,請將R15修改為14.7KΩ。
不同操作模式下的功耗
在開發應用時,將MAX78002切換到不同的工作模式,并相應地安排任務以節省功耗。圖4顯示了不同模式下的功耗。活動功率和睡眠功率使用ISO振蕩器在60MHz下測量。其他低功耗模式在休眠期間采用 ERTCO (32kHz)(API 默認值)。GPIO 設置為輸入。UPM、待機、備份和斷電模式下的功耗低于要測量的電源監視器的精度范圍。
圖4.不同運行模式下的功耗。
還測試了啟動時間(定義為從上電到開始執行主代碼的時間)和喚醒時間(圖5)。喚醒時間和啟動時間使用默認上電時鐘(ISO 在 60MHz)測量。
圖5.不同頻率的啟動和喚醒時間。
喚醒配置
在活動模式以外的操作模式下,將喚醒源配置為重新進入活動模式。LPM 模式在推理過程中經常使用。推理完成后,CNN 會根據需要喚醒 Arm 或 RISC-V。以下代碼片段顯示了該序列:
Example of Arm wakeup from LPM by CNN: load_input(); // Load data input cnn_start(); // Run inference // ARM goes to LPM and waits for CNN interrupt to wakeup SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; // SLEEPDEEP=0 while (cnn_time == 0) __WFI(); // Wait for CNN Example of RISC-V wakeup from by CNN: load_input(); // Load data input cnn_start(); // Run inference // RISC-V sleeps and waits for CNN interrupt to wakeup while (cnn_time == 0) asm volatile("wfi"); // Wait for CNN
美國有線電視新聞網電源
人工智能應用程序的核心是由CNN加速器執行的推理。根據應用程序的不同,推理可以連續地對傳入的數據進行,也可以按特定的時間間隔定期進行。加載內核(權重)通常完成一次,并保留在CNN內存中。但是,根據應用和占空比,選擇在每次運行推理之前重新加載權重。
CNN 功耗分三個階段測量:
加載權重:在活動模式下將權重加載到 CNN 內存中發生一次。
加載輸入數據:每次有新的推理時。
推理:對輸入數據進行操作并生成結果。
CNN 時鐘源和頻率
默認情況下,IPLL 時鐘由合成工具啟用并用作 200MHz 的 CNN 時鐘源。為了在加載權重和數據輸入期間節省能量,時鐘在加載之前降低到 50MHz(除以 4),并在推理開始之前設置回 200MHz(除以 1)。
綜合工具中提供了以下命令行選項來控制時鐘源、時鐘頻率和管道:
[--no-pll]:它使用 IPO 作為時鐘源。IPO 時鐘為 120MHz,內部固定分頻 2,為 CNN 生成 60MHz 時鐘。在此模式下,CNN 時鐘分頻器設置為 1 以進行加載和推理。
請注意,默認情況下使用此選項啟用管道,即使時鐘 div 也設置為 4 或更高。這會導致不必要的過度功耗,因為流水線僅適用于高于50MHz的CNN時鐘。
如果管道也被禁用 [--no-pipeline],則在沒有管道的情況下使用 IPO 時,它將 CNN 時鐘分頻器設置為 2 (30MHz) 作為允許的最高 CNN 時鐘頻率。在這種情況下,選擇相同的時鐘分頻器來加載輸入和權重以及推理。
[--no-pipeline]:禁用 CNN 管道的使用。IPLL 仍被選為時鐘源。但是,它將時鐘頻率調整為 50MHz(除以 4)以進行加載和推理。
[--max-speed]:它使用最大速度 (200MHz) 進行加載和 IPLL 推理。
[--clock-div k]:此選項設置 CNN 時鐘分頻器 k(k 可以是 1,2,4,8,16)進行推理。用于加載權重和輸入的時鐘分頻器保持在 4。請注意,如果推理分頻器設置為 4 或更高,則不再需要管道,應顯式禁用該管道以節省功耗。
改變時鐘源和頻率對加載重量和輸入數據的能量和時間的影響如圖6至圖9所示,對于V。科里亞= 1.1V 和 V科里亞= 1V。在兩個測試基準(cifar-100-mobilenet-v2-0.75和KWS20-v3-1)上觀察到相似的能量分布。
圖6.加載為具有不同時鐘源和頻率的移動網絡加權能量和時間。
圖7.輸入具有不同時鐘源和頻率的移動網絡的加載能量和時間。
圖8.加載為具有不同時鐘源和頻率的移動網絡加權能量和時間。
圖9.輸入具有不同時鐘源和頻率的KWS20的加載能量和時間。
如圖所示,使用帶有等于2(30MHz)的CNN時鐘分頻器的IPO可提供最低的加載能量,同時增加加載時間。根據應用程序,為加載權重選擇不同的配置,加載權重發生一次(如果保留權重),以及加載輸入,在每次推理之前執行。
美國有線電視新聞網管道
當使用 IPLL 時鐘在最短的時間內生成推理結果時,CNN 可以以高達 200MHz 的頻率運行。權衡是較高時鐘頻率下的功耗。MAX78002中,當CNN時鐘設置為高于50MHz時,使能CNN流水線。啟用 CNN 流水線會增加推理功耗,建議僅對 50MHz 以上的 CNN 頻率使用。合成工具默認啟用 CNN 流水線,并使用 200MHz 的 IPLL 時鐘作為 CNN 時鐘源。如前所述選擇選項 [--no-pipeline] 以禁用高達 50MHz 的 CNN 操作的管道。
圖10和圖11顯示了時鐘源和頻率對V的推理能量和時間的影響科里亞= 1.1V 和 V科里亞= 1V。僅當選擇 100MHz 或更高的 IPLL 時鐘時,才會啟用流水線。通常,在最高時鐘(200MHz)下使用IPLL會產生最低的能量和最快的執行速度。
圖 10.具有不同時鐘源和頻率的移動網絡的推理能量和時間。
圖 11.具有不同時鐘源和頻率的KWS20的推理能量和時間。
在 CNN 內存中保留權重
四個 CNN RAM(CNN 權重存儲)中的每一個都可以配置為在 UPM、備份或備用(默認情況下不保留)的情況下保留權重。無論 CNN 保留設置如何,CNN 配置寄存器在任何這些節能模式(SLEEP 和 LPM 除外)中都會丟失,并且必須重新加載。
以下代碼片段顯示了如何為 UPM、備份或待機啟用 CNN RAM 保留。配置 CNN 內存保留后,將保持權重。對于每個活動周期,僅重新加載偏差和 CNN 配置,并對新的輸入數據執行新的推理。圖12顯示了有或沒有CNN內存保留的不同模式下的功耗。還報告了禁用 CNN 時鐘的效果。
圖 12.CNN內存保持能力。
對于某些低占空比應用,選擇在每個活動周期中重新加載重量,以進一步降低睡眠期間的功耗。在這種情況下,請考慮用于重復重新加載權重的額外功率的影響(如大型和小型網絡示例的圖 6)。
Example: Loading weights and configuring CNN with CNN Mask RAMs retention
// Load kernels once
cnn_init(); // Bring state machine into initial state
cnn_load_weights(); // Load kernels
cnn_load_bias(); //
cnn_configure(); // Configure state machine
// Enable source of waking up, e.g. push button
PB_RegisterCallback(0, buttonHandler);
…
while(1){
// Disable CNN
cnn_disable();
// CNN Retention on:
MXC_GCFR->reg2 = 0xf0 << MXC_F_GCFR_REG2_CNNX16_0_DATA_RET_EN_POS;
// Go to sleep, e.g. Micro Power.
MXC_LP_EnterMicroPowerMode();
// Waking up after interrupt, e.g. push button – CNN memory is retained for kernels.
// bias & configuration are not retained.
// Enable CNN, set the clock source and CNN clock divider,
// To save power for loading, divider can be set to 4
cnn_enable(MXC_S_GCR_PCLKDIV_CNNCLKSEL_IPLL,
MXC_S_GCR_PCLKDIV_CNNCLKDIV_DIV4);
cnn_init(); // Bring state machine into consistent state
cnn_load_bias();
cnn_configure(); // Configure state machine
// Load input data
load_input();
// Change CNN clock divider before inference if needed
// CNN clock: PLL (200 MHz) div 1
MXC_GCR->pclkdiv = (MXC_GCR->pclkdiv & ~(MXC_F_GCR_PCLKDIV_CNNCLKDIV |
MXC_F_GCR_PCLKDIV_CNNCLKSEL)) |
MXC_S_GCR_PCLKDIV_CNNCLKDIV_DIV1 |
MXC_S_GCR_PCLKDIV_CNNCLKSEL_IPLL;
cnn_start(); // Run inference
SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; // SLEEPDEEP=0
__WFI(); // Wait for CNN Interrupt to wake for sleep
}
開發工具包示例的測量結果
MAX78002 SDK示例通過頻率合成工具中的選項--energy進行再生。此選項添加代碼以切換路由到電源監視器電路的 GPIO,以啟用 CNN 功率模式下的功率測量。表 4 顯示了加載權重、加載輸入和推理的結果。五世科里亞在此實驗中設置為 1V。其他配置是默認配置。
表 4.多個 SDK 示例的測量結果
總結
本應用筆記介紹了MAX78002支持的一些功耗優化技術,用于創建低功耗應用和測量結果。以下摘要重點介紹了改善功耗的一般建議:
對于推理能量來說,速度越快通常越好。使用更高的時鐘速率(例如,200MHz的IPLL)可以加快執行速度,并減少恒定靜態功耗的影響,從而改善整體功耗。
CNN 時鐘源和分頻器在加載和推理期間可能不同。在30MHz的IPO下,加載數據和權重的能耗最低。代價是加載時間增加。
在沒有活動時利用 UPM、備份和備用。當 ARM Cortex M4 可以休眠,而關鍵外設繼續運行時,請考慮 LPM。
如果活動的占空比不是很低,請加載內核(權重)一次并將其保留在內存中,以避免在 UPM、備份和待機模式下重新加載能量。否則,請考慮在每個活動周期中重新加載重量的能量。有關 CNN 內存保留能量,請參見圖 12。
確保在 CNN 處理完成后關閉 CNN 時鐘,并在下一個活動期間再次訪問 CNN 之前將其打開。
盡可能將VCOREA從1.1V降至1V,以降低功耗。請謹慎使用,以確保 CNN 在目標應用條件下正常運行。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
人工智能
+關注
關注
1791文章
47183瀏覽量
238253 -
電池
+關注
關注
84文章
10560瀏覽量
129470
發布評論請先 登錄
相關推薦
評論