姓名:方瑞敏;學(xué)號20021210923座慰;學(xué)院;電子工程學(xué)院
轉(zhuǎn)自
https://mp.weixin.qq.com/s/1C3Mx8b3MSYh-pz-HHqExQ
【嵌牛導(dǎo)讀】本文介紹了超低功耗基準(zhǔn)測試——ULPMark Benchmark
【嵌牛鼻子】超低功耗,基準(zhǔn)測試
【嵌牛提問】什么是超低功耗基準(zhǔn)測試——ULPMark Benchmark
【嵌牛正文】
前言
說起嵌入式領(lǐng)域的一些基準(zhǔn)測試涌矢,大家可能更了解的是 Coremark Benchmark,也就是大家常說的 CPU (中央處理器)性能基準(zhǔn)測試快骗。ULPMark Benchmark 也和 Coremark 類似娜庇,ULPMark 即“Ultra-Low Power Mark” 超低功耗評分;二者都是由 EEMBC (嵌入式微處理器基準(zhǔn)測試聯(lián)盟)開發(fā)的一套用 C 語言編寫的方篮、易于移植的標(biāo)準(zhǔn)測試程序名秀。略有不同的是 Coremark 是專門為測試處理器核心性能而設(shè)計(jì)的,而 ULPMark 是為了評價一款 MCU 的低功耗性能而設(shè)計(jì)的藕溅。
在嵌入式領(lǐng)域中對一款芯片的評價一般來說都會非常關(guān)心兩個指標(biāo)匕得,一個就是性能,另一個就是功耗巾表。所以性能就看 Coremark 評分汁掠,低功耗就看 ULPMark 評分。Coremark 網(wǎng)上資料有很多集币,這里我就不做過多介紹了考阱,那么低功耗性能測試為什么是 ULPMark 呢?
0x01 為什么低功耗測評采用 ULPMark
首先鞠苟,ULPMark 的測試代碼與 Coremark 一樣乞榨,幾乎是一套與硬件無關(guān)的算法,是一套很標(biāo)準(zhǔn)化的測試偶妖,在不同的廠商的不同處理器上都可以運(yùn)行,且使用相同的電流測試板記錄電流數(shù)據(jù)趾访,所以說大家?guī)缀醵际窃谙嗤钠脚_下進(jìn)行測試的态秧,這樣在不同的處理器之間就具有可比性。
第二扼鞋,所有人發(fā)布的測試評分提交給 EEMBC 組織時申鱼,都需要提供完整的操作流程說明愤诱,及測試代碼包括測 bin 文件。所以在 EEMBC 官網(wǎng)上可以看到的評分(尤其是 EEMBC check 過捐友,打勾的評分)淫半,你拿對應(yīng)被測件,按照發(fā)布的流程使用對應(yīng)的 bin 文件匣砖,你幾乎都可以復(fù)現(xiàn)出廠商在 EEMBC 上發(fā)布的評分科吭。
其次,著名的低功耗芯片廠商幾乎都在使用 ULPMark 作為測試標(biāo)準(zhǔn)猴鲫,包括 Ambiq对人、Analog、TI拂共、Renesas牺弄、ST、On Semi宜狐、NXP 等著名的嵌入式芯片廠商势告。
最后, EEMBC 也是一個很可靠的組織抚恒,他們致力于開發(fā)基準(zhǔn)測試咱台,他們發(fā)布過很多的基準(zhǔn)測試,廣泛應(yīng)用于電信柑爸、網(wǎng)絡(luò)吵护、汽車電子、消費(fèi)電子等領(lǐng)域表鳍。
那么 ULPMark 怎么測馅而,都測些什么呢?
ULPMark 測試有什么
ULPMark 測試目前有三個部分譬圣,分別是 ULPMark-CoreProfile瓮恭、ULPMark-PeripheralProfile 和 ULPMark-CoreMark。
ULPMark 變體 測什么
ULPMark-CoreProfile 核心在深度睡眠模式下真正的能量消耗
ULPMark-PeripheralProfile 普通外圍設(shè)備的能量對深度睡眠的影響
ULPMark-CoreMark 活躍功耗厘熟,使用 CoreMark 作為工作負(fù)載
但在實(shí)際的測試對比中屯蹦,大家一般都比較關(guān)心 CoreProfile 和 PeripheralProfile 兩項(xiàng)評分,大多數(shù)情況下大家都是對比的 CoreProfile 的評分绳姨,簡寫 ULPMark-CP登澜。也就是在深度睡眠下整個芯片的能量消耗;因?yàn)樵诘凸牡膽?yīng)用場景下飘庄,該芯片設(shè)備可能是單電池供電脑蠕,需要運(yùn)行長達(dá) 10 年的時間,所以芯片設(shè)備絕大部分時間應(yīng)該都是處在深度睡眠的模式,偶爾喚醒處理部分任務(wù)谴仙。
因此迂求,ULPMark-CP 的測試就是類似于這樣的一個場景設(shè)計(jì)的。ULPMark-CP 基準(zhǔn)測試在長時間睡眠中運(yùn)行晃跺,然后短暫喚醒以執(zhí)行最少的處理揩局,從而模仿一個節(jié)能的邊緣節(jié)點(diǎn)。如下圖:
從上圖中可以看到 ULPMark-CP 測試中掀虎,主要測量的就是在睡眠狀態(tài)下的能量消耗凌盯,以及與活躍模式之間的切換,活躍模式時會運(yùn)行一組工作負(fù)載涩盾,整個測試是以一秒為周期運(yùn)行的十气,將工作負(fù)載與較長時間的不活動相結(jié)合交替運(yùn)行,從而使用芯片的低功耗模式春霍。
雖然基準(zhǔn)測試的活躍部分僅運(yùn)行了總運(yùn)行時間的約 3%,但它要求通過使用 “保留 RAM” 在深度睡眠期間保存數(shù)據(jù)叶眉。由于很少有休眠的邊緣節(jié)點(diǎn)在每個睡眠周期之后都清除它的 RAM址儒,因此保留 RAM ,減少 RAM 數(shù)據(jù)重新刷新的成本衅疙,才能體現(xiàn)睡眠模式的真正能量消耗莲趣。
所以 ULPMark-CP 的評分基本上就可以看出一顆芯片的低功耗應(yīng)用場景下的低功耗性能。
說了這么多饱溢,那 ULPMark-CP 都運(yùn)行了些什么呢喧伞?要想知道那就要看測試代碼了,但是 ULPMark 測試程序是需要授權(quán)的绩郎。不過 ULPMark 可以通過學(xué)校申請免費(fèi)的學(xué)術(shù)授權(quán)潘鲫,不過也只能是學(xué)術(shù)團(tuán)隊(duì)內(nèi)部使用。
所以代碼不宜直接公開肋杖,這里就簡述一下其功能溉仑。
休眠時當(dāng)然就是休眠了,那么在 Active 階段状植,主要執(zhí)行了以下操作:
會運(yùn)行兩次 Workload浊竟,每個 Workload 都包含以下幾個工作:
· 快速切換GPIO指示端口20次
· 運(yùn)行 24 次 16-bit 的濾波器運(yùn)算,并根據(jù)每次的運(yùn)算結(jié)果來設(shè)置狀態(tài)機(jī)
· 使用狀態(tài)機(jī)的輸出作為輸入來運(yùn)行 bin to LCD 轉(zhuǎn)換功能津畸,即模擬 LCD 顯示
· 在基于上一步選擇的字符串上運(yùn)行子字符串搜索
· 在搜索到的字符串上運(yùn)行字節(jié)拷貝
· 然后對上一步結(jié)果進(jìn)行一個小的冒泡排序
· 最后振定,根據(jù)輸入和先前的狀態(tài)對字符串的位進(jìn)行排列
· 執(zhí)行完就進(jìn)入休眠,等待下一次被喚醒肉拓,每一秒一次后频,無限重復(fù)。
ULPMark 如何使用
如果你申請到了 ULPMark 的學(xué)術(shù)授權(quán)版本帝簇,那么應(yīng)該怎么移植使用它呢徘郭?
通常你獲得的 ULPMark-CP 的代碼目錄應(yīng)該是這樣的靠益,如圖。也有可能我這個版本比較老残揉,和你新申請的可能會略有不同胧后。但我想大體上應(yīng)該是差不多的。
通常你只需要去修改 Platforms 下的文件抱环, porting 到你的芯片上即可壳快。一般情況下包括 系統(tǒng)時鐘的設(shè)置,Low Power 模式的設(shè)置镇草,相應(yīng) GPIO 引腳的設(shè)置眶痰,以及低功耗 RTC 的設(shè)置,當(dāng)然還包括 RTC 中斷的設(shè)置梯啤。將這些接口設(shè)置好基本上就完成了移植工作竖伯。然后將代碼編譯,燒寫進(jìn)芯片中因宇。軟件代碼準(zhǔn)備好了之后七婴,就是測量 ULPMark 測試代碼在芯片上運(yùn)行時產(chǎn)生的功耗了。那么如何測量呢察滑?
ULPMark 測量使用的板子
測量我們的芯片在低功耗模式下的實(shí)際功耗打厘,EEMBC 和 ST 合作,開發(fā)了一套標(biāo)準(zhǔn)的能量消耗監(jiān)測板 EMON (Energy Monitor LPM01A)贺辰,Energy Monitor 能量監(jiān)測板如下圖户盯,這塊板子的詳細(xì)信息可以在 ST 官網(wǎng)獲取到,這里也就不做過多介紹了饲化,鏈接:https://www.st.com/en/evaluation-tools/x-nucleo-lpm01a.html
通常情況下莽鸭,我們的被測板可能是不符合 Arduino Uno 和 Arduino Nano 接口的,所以我們一般直接使用 CN14 的基本插接口滓侍。被測板的所有供電都由 Energy Monitor 提供蒋川,將 EMON CN14 接口中的 Vout 和 GND 分別連接到 DUT (被測件) 的 VDD 和 GND 上即可。如下圖所示撩笆。
這里還需要在 ST 官網(wǎng)下載并安裝相應(yīng)的上位機(jī)軟件捺球,安裝完成后,在 PC 上啟動 STM32CubeMonitor-Power 軟件夕冲,打開窗口后如下圖所示氮兵。
點(diǎn)擊 TAKE CONTROL 連接能量監(jiān)測板,在窗口中設(shè)置好需要的采樣率歹鱼、時間泣栈、電流、電壓等參數(shù)后,點(diǎn)擊 START ACQUISITION 按鈕南片,就可以看到 DUT 運(yùn)行時對應(yīng)的電流消耗掺涛。點(diǎn)擊 ULP BENCH 標(biāo)簽欄后,同樣設(shè)置好需要的參數(shù)后疼进,點(diǎn)擊運(yùn)行薪缆,就可以直接獲得 ULPMark 評分,如下圖伞广,評分越高代表低功耗性能越好拣帽。
ULPMark 的評分是如何計(jì)算的?
那么 ULP Benchmark 的評分是如何計(jì)算的呢嚼锄?如果我們手上沒有 Energy Monitor 這個能量監(jiān)測板减拭,我們有沒有其他辦法計(jì)算出我們的低功耗性能?
ULP Benchmark 的計(jì)算公式是這樣的:
就是 1000 除以区丑,在 10 次 ULP 周期中取其中 5 次的能量均值拧粪,計(jì)算出得分,所以這個評分的單位就是 uJ/s 即 μ焦/秒沧侥。
所以根據(jù)這個公式既们,我們只要知道了我們芯片在單位時間內(nèi)的能量消耗,就可以計(jì)算我們的低功耗評分正什。那么如何知道消耗的能量呢,那當(dāng)然就是測量在單位時間內(nèi)号杏,額定電壓下的電流消耗值婴氮,這樣我們就可以計(jì)算了。雖然這樣說起來簡單盾致,但是要想精確的測量在睡眠模式下的電流是不容易的主经,因?yàn)橐话愕牡凸男酒谏疃人吣J较碌碾娏飨亩际且?nA 計(jì)算的,一般的電流源無法做到這么精確庭惜。但方法總是有的罩驻。
假設(shè)我們在 3V 的電壓下,測量到了相應(yīng)的電流消耗护赊,那么我們計(jì)算公式就可以這樣寫了惠遏。
當(dāng)然,這個地方的電流還是粗略的骏啰,如果你還想在更加精確的分析节吮,那么還應(yīng)該去把 Active Current 和 Sleep Current 分開計(jì)算,然后在計(jì)算總的能量消耗判耕。除此之外透绩,不同編譯器不同優(yōu)化選項(xiàng)編譯出的代碼對于電流的消耗也存在一些差異。
總結(jié)
好了,到這里關(guān)于 ULPMark 的介紹就基本完成了帚豪,相信通過本文的簡單介紹碳竟,你應(yīng)該對 ULPMark 有了一定的認(rèn)識,讓我們一起學(xué)習(xí)進(jìn)步狸臣,歡迎大家和我交流莹桅!感興趣的還可以看一下今天的第二條轉(zhuǎn)載,較為詳細(xì)的介紹了 IC 設(shè)計(jì)中常用的電源固棚、功耗管理相關(guān)的技術(shù)统翩。
貼一張目前 ULPMark-CP 目前的評分排行榜(前 25 名)