功耗是邊緣人工智能 (AI) 應用的關(guān)鍵因素,其中整個系統(tǒng)由小型電池供電,預計無需充電或更換電池即可運行數(shù)月。MAX78002超低功耗AI微控制器專為物聯(lián)網(wǎng)邊緣的此類應用而設(shè)計。本文介紹了各種選項,使用戶能夠在MAX78002上開發(fā)功耗優(yōu)化應用,并給出了基準測試示例。
介紹
MAX78002是一款先進的片上系統(tǒng),具有帶FPU CPU的Arm Cortex-M4和超低功耗深度神經(jīng)網(wǎng)絡(luò)加速器。這種架構(gòu)能夠在能源受限的環(huán)境中開發(fā)非常節(jié)能的 AI 應用程序。MAX78002提供多種選項和工作模式,用于創(chuàng)建低功耗應用。以下部分概述了這些選項,包括MAX78002評估板的實際示例和實際測量結(jié)果。有關(guān)詳細信息,請參閱??[5].
MAX78002
MAX78002是MAX78000的后續(xù)產(chǎn)品,在新一代人工智能(AI)微控制器中具有額外的計算能力和存儲器,能夠以超低功耗和物聯(lián)網(wǎng)(IoT)邊緣執(zhí)行神經(jīng)網(wǎng)絡(luò)。該產(chǎn)品將最節(jié)能的AI處理與ADI公司久經(jīng)考驗的超低功耗微控制器相結(jié)合。基于硬件的卷積神經(jīng)網(wǎng)絡(luò) (CNN) 加速器使電池供電的應用程序能夠執(zhí)行 AI 推理,同時僅消耗微焦耳的能量。MAX78002具有帶浮點單元(FPU)微控制器的Arm Cortex-M4,可實現(xiàn)高效的系統(tǒng)控制和超低功耗深度神經(jīng)網(wǎng)絡(luò)加速器。還集成了一個RISC-V內(nèi)核,可以執(zhí)行應用和控制代碼以及驅(qū)動CNN加速器。圖1所示為MAX78002的頂層架構(gòu)。
圖1.MAX78002的架構(gòu)
MAX78002評估板(EV kit)為利用器件功能構(gòu)建新一代AI產(chǎn)品提供了一個平臺。它具有板載硬件,如數(shù)字麥克風、串行端口、數(shù)字視頻端口 (DVP) 和攝像頭串行接口 (CSI) 攝像頭模塊支持,以及 3.5 英寸觸摸彩色薄膜晶體管 (TFT) 顯示屏[2].它還包括用于監(jiān)控和顯示輔助TFT顯示器上的功率電平的電路。The MAX34417[3]監(jiān)測MAX78002的電壓和電流,并向MAX32625報告累積功率,MAX2用作功率數(shù)據(jù)處理器,同時控制功率顯示,如圖<>所示。
圖2.電源監(jiān)視器。
電源監(jiān)視器以兩種模式運行;瞬時,顯示平均功率、電源電流和電壓,以及窗口能量累積,根據(jù)觸發(fā)事件測量 CNN 功率或系統(tǒng)總功率。瞬時測量通常用于快速、粗略地估計功率水平。窗口測量非常適合測量用戶定義的開始實例和完整實例之間的累積能量。這些事件由MAX78002(P1.6和P1.7)的兩個通用輸入/輸出(GPIO)切換觸發(fā),這些輸入/輸出連接到MAX32625電源數(shù)據(jù)處理器。有關(guān)使用電源監(jiān)視器的詳細信息,請參閱[4].
選擇了一個大型和小型模型示例來執(zhí)行本文檔中的大多數(shù)測量:
cifar-100-mobilenet-v2-0.75:MobileNetV73類型架構(gòu)的2層實現(xiàn),具有1.34M權(quán)重(權(quán)重內(nèi)存容量的56%)用于圖像分類。
kws20_v3_1:用于關(guān)鍵字發(fā)現(xiàn)的 9 層 148K 權(quán)重(權(quán)重內(nèi)存容量的 6%)網(wǎng)絡(luò)。
此外,本文檔末尾還提供了所有已發(fā)布的 SDK 示例的 CNN 功率測量的表格快照,以供參考。
注:本應用筆記中的測量結(jié)果基于MAX78002評估板上的示例代碼。用戶平臺和特定應用程序的實際結(jié)果可能會有所不同?;鶞适纠哪芰?功率測量值在3個不同評估板的樣本集上觀察到±8.<>%的變化。
MAX78002評估板跳線設(shè)置,用于功率測量
為了使用功率監(jiān)測器測量不同工作模式下的功耗,MAX78002評估板跳線設(shè)置如表1和圖3所示。
跳線 | 設(shè)置 | 描述 |
---|---|---|
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評估板跳線設(shè)置,用于功率測量
MAX78002時鐘和工作模式
MAX78002支持不同的時鐘源和低功耗工作模式,可聯(lián)合配置以實現(xiàn)優(yōu)化的功耗和性能。本應用筆記簡要介紹了每種模式,以指導讀者根據(jù)所需應用設(shè)置模式。有關(guān)更詳細的說明,請參閱[5].
時鐘
MAX78000包括多個可配置時鐘,供不同外設(shè)使用。根據(jù)需要配置時鐘源,以選擇性能和電源效率的組合。所選系統(tǒng)振蕩器(SYS_OSC)是大多數(shù)內(nèi)部模塊的時鐘源。以下振蕩器源可用,可以選擇SYS_OSC:
內(nèi)部初級振蕩器 (IPO) – 120MHz:
IPO是速度最快的頻率振蕩器,消耗的功率最大。當進入低功耗模式(LPM)時,該振蕩器可以關(guān)斷。
內(nèi)部次級振蕩器 (ISO) – 60MHz:
這是一個低功耗內(nèi)部次級振蕩器,是SYS_OSC的上電復位 (PoR) 默認值。
內(nèi)部納米環(huán)形振蕩器 (INRO) – 8kHz 至 30kHz:
INRO是一款超低功耗內(nèi)部振蕩器,可以選擇作為SYS_OSC并始終使能。頻率可配置為 8kHz、16kHz 或 30kHz(默認)。
內(nèi)部波特率振蕩器 (IBRO) – 7.3728MHz:
這是一個功耗非常低的內(nèi)部振蕩器,可以選擇作為SYS_OSC。該時鐘可以選擇用作UART的專用波特率時鐘。
內(nèi)部鎖相環(huán) (IPLL) - 100MHz/200MHz:
IPLL 采用外部 25MHz 晶體工作,提供可用作系統(tǒng)時鐘的 100MHz 振蕩器以及用于 CNN 時鐘的 200MHz 時鐘。請注意,當 CNN 時鐘高于 50MHz 時,請使用流水線(在合成工具中默認啟用)。
外部基振 (EBO) – 25MHz:
它是一個可用的外部振蕩器,可以選擇作為SYS_OSC。它還用于IPLL,并可用于ADC時鐘。
外部實時時鐘振蕩器 (ERTCO) – 32KHz:
這是一個功耗極低的內(nèi)部振蕩器,是實時時鐘(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包括多種工作模式以優(yōu)化性能和功耗,如MAX78000。有關(guān)操作模式的更多信息,請查看 中的 操作模式 部分[6].
操作模式 | 振蕩器 | 系統(tǒng) 公羊 | CNN Quadrants | CNN RAM | 外設(shè) | 應用程序接口 |
---|---|---|---|---|---|---|
Active | 全部可用 | 可用 | 活動,可配置 | 活動,可配置 | 可用 | |
Sleep | 全部可用 | 可用 | 活動,可配置 | 活動,可配置 | 可用 | MXC_LP_EnterSleepMode() |
LPM |
ISO, IPO, ERTCO, INRO IBRO (默認) |
0,1:保留期 2,3:可用 |
活動,可配置 | 活動,可配置 | 可用 | MXC_LP_EnterLowPowerMode() |
UPM |
IBRO, ERTCO, INRO |
保留 | 可選關(guān)閉 | 可選擇保留 |
保留, LPUART0, LPTMR0-1 LPWDT0, LPCOMP0-3, GPIO, WUT, RTC 可用 |
MXC_LP_EnterMicroPowerMode() |
待機 | ERTCO | 保留 | 關(guān)閉 | 可選擇保留 |
保留、WUT、RTC、 COMP0、GPIO 可用 |
MXC_LP_EnterStandbyMode() |
備份 | ERCO | 的保留 | 關(guān)閉 | 可選擇保留 |
關(guān)閉、WUT、RTC、 COMP0、GPIO 可用 |
MXC_LP_EnterBackupMode() |
關(guān) | 關(guān)閉 | 關(guān)閉 | 關(guān)閉 | 關(guān)閉 |
關(guān)閉, 可配置 P3.0/1 |
MXC_LP_EnterPowerDownMode() |
VCOREA 電源電壓
VCOREA 的標稱電源電壓為 1.1V,這為使用該架構(gòu)支持的上限范圍的大型計算密集型模型操作 CNN 提供了足夠的裕量。MAX78002評估板出廠時提供VCOREA穩(wěn)壓至1.1V。最小CNN輸入電源(VCNNXRAM和VCNNX)為0.99V [1],應與VCOREA相同。通常,可以將VCOREA降低到1V,以實現(xiàn)約15%的節(jié)能。但是,1V 工作電壓取決于 CNN 型號和工作條件。仔細測試功能,以確保特定用例的正確操作。在本文檔中,在VCOREA = 1.1V和1V的情況下進行了幾次測量,以突出差異。
在MAX78002評估板上,V科里亞設(shè)置為 1.1V (R15 = 21KΩ in[2]) 默認情況下。要將其更改為1V,請將R15修改為14.7KΩ。
不同操作模式下的功耗
在開發(fā)應用時,將MAX78002切換到不同的工作模式,并相應地安排任務以節(jié)省功耗。圖4顯示了不同模式下的功耗?;顒庸β屎退吖β适褂肐SO振蕩器在60MHz下測量。其他低功耗模式在休眠期間采用 ERTCO (32kHz)(API 默認值)。GPIO 設(shè)置為輸入。UPM、待機、備份和斷電模式下的功耗低于要測量的電源監(jiān)視器的精度范圍。
圖4.不同運行模式下的功耗。
還測試了啟動時間(定義為從上電到開始執(zhí)行主代碼的時間)和喚醒時間(圖5)。喚醒時間和啟動時間使用默認上電時鐘(ISO 在 60MHz)測量。
圖5.不同頻率的啟動和喚醒時間。
喚醒配置
在活動模式以外的操作模式下,將喚醒源配置為重新進入活動模式。LPM 模式在推理過程中經(jīng)常使用。推理完成后,CNN 會根據(jù)需要喚醒 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
美國有線電視新聞網(wǎng)電源
人工智能應用程序的核心是由CNN加速器執(zhí)行的推理。根據(jù)應用程序的不同,推理可以連續(xù)地對傳入的數(shù)據(jù)進行,也可以按特定的時間間隔定期進行。加載內(nèi)核(權(quán)重)通常完成一次,并保留在CNN內(nèi)存中。但是,根據(jù)應用和占空比,選擇在每次運行推理之前重新加載權(quán)重。
CNN 功耗分三個階段測量:
加載權(quán)重:在活動模式下將權(quán)重加載到 CNN 內(nèi)存中發(fā)生一次。
加載輸入數(shù)據(jù):每次有新的推理時。
推理:對輸入數(shù)據(jù)進行操作并生成結(jié)果。
CNN 時鐘源和頻率
默認情況下,IPLL 時鐘由合成工具啟用并用作 200MHz 的 CNN 時鐘源。為了在加載權(quán)重和數(shù)據(jù)輸入期間節(jié)省能量,時鐘在加載之前降低到 50MHz(除以 4),并在推理開始之前設(shè)置回 200MHz(除以 1)。
綜合工具中提供了以下命令行選項來控制時鐘源、時鐘頻率和管道:
[--no-pll]:它使用 IPO 作為時鐘源。IPO 時鐘為 120MHz,內(nèi)部固定分頻 2,為 CNN 生成 60MHz 時鐘。在此模式下,CNN 時鐘分頻器設(shè)置為 1 以進行加載和推理。
請注意,默認情況下使用此選項啟用管道,即使時鐘 div 也設(shè)置為 4 或更高。這會導致不必要的過度功耗,因為流水線僅適用于高于50MHz的CNN時鐘。
如果管道也被禁用 [--no-pipeline],則在沒有管道的情況下使用 IPO 時,它將 CNN 時鐘分頻器設(shè)置為 2 (30MHz) 作為允許的最高 CNN 時鐘頻率。在這種情況下,選擇相同的時鐘分頻器來加載輸入和權(quán)重以及推理。
[--no-pipeline]:禁用 CNN 管道的使用。IPLL 仍被選為時鐘源。但是,它將時鐘頻率調(diào)整為 50MHz(除以 4)以進行加載和推理。
[--max-speed]:它使用最大速度 (200MHz) 進行加載和 IPLL 推理。
[--clock-div k]:此選項設(shè)置 CNN 時鐘分頻器 k(k 可以是 1,2,4,8,16)進行推理。用于加載權(quán)重和輸入的時鐘分頻器保持在 4。請注意,如果推理分頻器設(shè)置為 4 或更高,則不再需要管道,應顯式禁用該管道以節(jié)省功耗。
改變時鐘源和頻率對加載重量和輸入數(shù)據(jù)的能量和時間的影響如圖6至圖9所示,對于V??评飦? 1.1V 和 V科里亞= 1V。在兩個測試基準(cifar-100-mobilenet-v2-0.75和KWS20-v3-1)上觀察到相似的能量分布。
圖6.加載為具有不同時鐘源和頻率的移動網(wǎng)絡(luò)加權(quán)能量和時間。
圖7.輸入具有不同時鐘源和頻率的移動網(wǎng)絡(luò)的加載能量和時間。
圖8.加載為具有不同時鐘源和頻率的移動網(wǎng)絡(luò)加權(quán)能量和時間。
圖9.輸入具有不同時鐘源和頻率的KWS20的加載能量和時間。
如圖所示,使用帶有等于2(30MHz)的CNN時鐘分頻器的IPO可提供最低的加載能量,同時增加加載時間。根據(jù)應用程序,為加載權(quán)重選擇不同的配置,加載權(quán)重發(fā)生一次(如果保留權(quán)重),以及加載輸入,在每次推理之前執(zhí)行。
美國有線電視新聞網(wǎng)管道
當使用 IPLL 時鐘在最短的時間內(nèi)生成推理結(jié)果時,CNN 可以以高達 200MHz 的頻率運行。權(quán)衡是較高時鐘頻率下的功耗。MAX78002中,當CNN時鐘設(shè)置為高于50MHz時,使能CNN流水線。啟用 CNN 流水線會增加推理功耗,建議僅對 50MHz 以上的 CNN 頻率使用。合成工具默認啟用 CNN 流水線,并使用 200MHz 的 IPLL 時鐘作為 CNN 時鐘源。如前所述選擇選項 [--no-pipeline] 以禁用高達 50MHz 的 CNN 操作的管道。
圖10和圖11顯示了時鐘源和頻率對V的推理能量和時間的影響科里亞= 1.1V 和 V科里亞= 1V。僅當選擇 100MHz 或更高的 IPLL 時鐘時,才會啟用流水線。通常,在最高時鐘(200MHz)下使用IPLL會產(chǎn)生最低的能量和最快的執(zhí)行速度。
圖 10.具有不同時鐘源和頻率的移動網(wǎng)絡(luò)的推理能量和時間。
圖 11.具有不同時鐘源和頻率的KWS20的推理能量和時間。
在 CNN 內(nèi)存中保留權(quán)重
四個 CNN RAM(CNN 權(quán)重存儲)中的每一個都可以配置為在 UPM、備份或備用(默認情況下不保留)的情況下保留權(quán)重。無論 CNN 保留設(shè)置如何,CNN 配置寄存器在任何這些節(jié)能模式(SLEEP 和 LPM 除外)中都會丟失,并且必須重新加載。
以下代碼片段顯示了如何為 UPM、備份或待機啟用 CNN RAM 保留。配置 CNN 內(nèi)存保留后,將保持權(quán)重。對于每個活動周期,僅重新加載偏差和 CNN 配置,并對新的輸入數(shù)據(jù)執(zhí)行新的推理。圖12顯示了有或沒有CNN內(nèi)存保留的不同模式下的功耗。還報告了禁用 CNN 時鐘的效果。
圖 12.CNN內(nèi)存保持能力。
對于某些低占空比應用,選擇在每個活動周期中重新加載重量,以進一步降低睡眠期間的功耗。在這種情況下,請考慮用于重復重新加載權(quán)重的額外功率的影響(如大型和小型網(wǎng)絡(luò)示例的圖 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
}
開發(fā)工具包示例的測量結(jié)果
MAX78002 SDK示例通過頻率合成工具中的選項--energy進行再生。此選項添加代碼以切換路由到電源監(jiān)視器電路的 GPIO,以啟用 CNN 功率模式下的功率測量。表 4 顯示了加載權(quán)重、加載輸入和推理的結(jié)果。五世科里亞在此實驗中設(shè)置為 1V。其他配置是默認配置。
表 4.多個 SDK 示例的測量結(jié)果
總結(jié)
本應用筆記介紹了MAX78002支持的一些功耗優(yōu)化技術(shù),用于創(chuàng)建低功耗應用和測量結(jié)果。以下摘要重點介紹了改善功耗的一般建議:
對于推理能量來說,速度越快通常越好。使用更高的時鐘速率(例如,200MHz的IPLL)可以加快執(zhí)行速度,并減少恒定靜態(tài)功耗的影響,從而改善整體功耗。
CNN 時鐘源和分頻器在加載和推理期間可能不同。在30MHz的IPO下,加載數(shù)據(jù)和權(quán)重的能耗最低。代價是加載時間增加。
在沒有活動時利用 UPM、備份和備用。當 ARM Cortex M4 可以休眠,而關(guān)鍵外設(shè)繼續(xù)運行時,請考慮 LPM。
如果活動的占空比不是很低,請加載內(nèi)核(權(quán)重)一次并將其保留在內(nèi)存中,以避免在 UPM、備份和待機模式下重新加載能量。否則,請考慮在每個活動周期中重新加載重量的能量。有關(guān) CNN 內(nèi)存保留能量,請參見圖 12。
確保在 CNN 處理完成后關(guān)閉 CNN 時鐘,并在下一個活動期間再次訪問 CNN 之前將其打開。
盡可能將VCOREA從1.1V降至1V,以降低功耗。請謹慎使用,以確保 CNN 在目標應用條件下正常運行。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7844瀏覽量
153363 -
人工智能
+關(guān)注
關(guān)注
1804文章
48449瀏覽量
244990 -
電池
+關(guān)注
關(guān)注
84文章
10884瀏覽量
133362
發(fā)布評論請先 登錄
相關(guān)推薦
芯品#MAX78002 新型AI MCU,能夠使神經(jīng)網(wǎng)絡(luò)以超低功耗運行

使用 ADI 的 MAX78002 MCU 開發(fā)邊緣 AI 應用

【MAX32660試用申請】Maxim MAX32660 低功耗Arm Cortex-M4 FPU SOC開發(fā)板試用
嵌入式DSP設(shè)計中的功耗優(yōu)化怎么處理
為什么要優(yōu)化FPGA功耗?
RTL功耗優(yōu)化

在MAX78000上開發(fā)功耗優(yōu)化應用

ADI超低功耗人工智能(AI)MCU MAX78002介紹
MAX78002人工智能微控制器特性亮點概述

ARM開發(fā)板的功耗分析與優(yōu)化
SEGGER為ADI超低功耗微控制器提供SystemView軟件分析工具
用 ADI 的 MAX78002 MCU 開發(fā)邊緣人工智能應用

評論