功耗是边缘人工智能 (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文章
7487浏览量
151042 -
人工智能
+关注
关注
1791文章
46845浏览量
237533 -
电池
+关注
关注
84文章
10457浏览量
128994
发布评论请先 登录
相关推荐
评论