童话故事 — CPU的贴身护卫ITCM和ICache

 

“叮铃铃… 叮铃铃…”

“谁呀?”黛丝博士打开了户,”哇,高飞,你怎么来了?”

高飞狗:”好久不见,想来探视你,还打了若无限爱吃的纯黑巧克力。”

黛丝:”以往犹是布鲁托领在公来之,今天您独自上门,必定不怀好意。买了这么多巧克力,必是转变有外图吧?”

高飞狗:”你就说之啊话,咱俩一片长大的,怎么会无怀好意? 别有客图也真的。”

黛丝:”我哪怕清楚乃管事不登八宝殿! 说吧,又赶上什么困难的难题了。”

高飞狗:”是这样的,这简单年以Cortex-M7(以下简称CM7)为骨干的MCU越来越多,CPU周围新增了几乎种部件,例如ITCM和ICache,最新的STM32H743,ITCM容量高臻64KB,ICache容量高及16KB,我本着该效用一知半解,对那个用法一头雾水,你能不能够吃详细讲解一番?”

黛丝:”高飞,你什么时候换得起早贪黑了,居然研究由高大上的科技来了。”

高飞狗心想:”只要能将您就白富美将到手,再伟大上之困顿呢如不惜一切代价克服。”

黛丝:”ITCM和ICache还确确实实是殊时尚之东西,毕竟是新物,我研究的时光呢非长,谈不齐教,说错的地方还呼吁即指正。”

高飞狗:”你顶谦虚了!”

黛丝:”咱们要由实质上问题出发吧。”

黛丝:”以堆库空间啊例。堆栈空间及其存储的各种数码(含应用程序中的有着片变量),只有CPU才见面看,而且是一再造访。但是,在CM7出现以前,堆栈空间只能在SRAM中,而SRAM是共享资源,DMA可以看,其它总线Master也还可以拜。导致了以下问题:”

黛丝:”Q1:CPU要与任何总线Master争夺SRAM访问控制权,最无助的时段,CPU只发50%底时间可以拜SRAM,极大地降落了次性能。”

黛丝:”Q2:其它总线Master有或篡改堆栈空间上的数量,严重威胁应用程序的平安。”

高飞狗:”对对对,我就算有了这么的阅历。”

黛丝:”ITCM的面世,彻底解决了以上两单问题。ITCM就是CPU的后宫,归CPU专享、专用、私有、独占。我们管堆仓库空间布置在ITCM内,CPU就足以零等待、单周期、全速访问堆栈空间与高频用到的多寡对象,大大提升应用程序性能,且其中的数据未会见被其他总线Master篡改,大大提升了应用程序的安全性。”

高飞狗:”茅塞顿开!”

高飞狗:”除此之外,ITCM还有呀用?”

黛丝:”在千头万绪应用程序中,常常强频地、随机地发各种中断。发生中断时,就要读取中断向量表(IVT),然后跳反到中断服务程序(ISR)。在CM7出现前,CPU应本着搁浅存在以下几单头疼的问题:”

黛丝:”Q1:IVT与受暂停代码的大体地址去(简称空距)通常比远,需要消耗多只机械周期才能够读取中断向量。”

黛丝:”Q2:而ISR与IVT的空距通常也比较远,又待吃多独机器周期才能够超过反至ISR。”

黛丝:”于是,产生同样软暂停,要消耗多机周期才能够跨越反执行及ISR。”

黛丝:”Q3:ISR返回到被中止代码又使消耗成千上万只机器周期。”

黛丝:”执行同一不行ISR,花费在代码跳转上的年月相近不多。但是,高度频繁、随机产生的各种中断,将如CPU在程序跳反上吃极其巨大的辰。在错综复杂、实时性要求于高的下被,其代价还是特别可观之。”

黛丝:”ITCM的起,完美解决了上述3独问题。程序设计者可以人工地拿IVT和ISR安排在一如既往片连续地址空间内,在系统启动时用那全方位装ITCM中,由于CPU访问ITCM总是独自周期的,以上3个问题遭的顺序跳反均好独自周期就,大幅升级了ISR的实时性能。”

 

高飞狗:”我记得MCU内部通常都配起于适应实时加速器 (ART-Accelerator™),为什么还欲ITCM来开这项工作呢?”

黛丝:”在依次读取连续存放的下令时,ART- Accelerator有显著的涨价效果。而上述3独问题的情况,基本上是任意读取指令,也即是代码间的空距较远,ART- Accelerator的功能就算大打折扣,基本没什么提速作用,这多亏ART- Accelerator的短板,而ITCM的面世则大大提升了任性读取指令和多少的属性,补及了ART- Accelerator的短板。”

 

高飞狗:”我明白了。”

高飞狗:”亲爱的,我发觉,STM32H743的ITCM容量高臻64KB,除了缓存IVT、ISR、堆栈空间之外,把一切RTOS缓存进去吧从没问题。如此,CPU就好独占地、单周期看高频度用到的代码和数量,应用程序的属性提高幅度将凡不行想像的。”

黛丝:”你要十分懂事的! 比原先聪明多矣!”

高飞狗:”我了解怎么而拿ITCM的容量设计得这样老了。”

高飞狗:”CM7是32员中心,为何ITCM被规划呢64号宽度?”

黛丝:”虽然CM7的平头运算能力多吗32员,但为时有发生微量64位整数运算指令与大气64号对精度浮点数运算指令,传送64各类数据的求还是多之,而且许多限令需要平等赖传送多只32个数据,如下表所示,与32员总线宽度相比,64员之总线宽度可以节省50%底数额传送时间,性能提升是深惊人的。”

例子:一次传送64位宽度数据的指令

说明

LDRD R8, R9, [R3];

以R3为地址指针,将一个64位双字载入R8和R9

LDM R8, {R0-R3}

以R8为地址指针,读取4个32位数据到寄存器中

相当于传送2个64位双字

STM R1, {R3-R6,R11,R12}

以R1为地址指针,存储6个32位寄存器数据

相当于传送3个64位双字

PUSH {R4-R7};

将4个32位寄存器推入堆栈,相当于2个64位双字

64位双精度浮点数的读取和存储指令

不再列出具体指令

 

高飞狗:”听你开口了这样多,胜读多年书写。有接触累了咔嚓? 我让你泡杯咖啡,吃块巧克力如何?”

黛丝:”你倒反客为主了!还发吗问题,一气问了,我还要出去办事为。”

高飞狗心想:”还这样厉害,一丝咸聊的机遇还无为。”

高飞狗:”既然ITCM这么好,为什么还闹了只ICache,又生出什么用吧? 总有种植既生高飞,何生黛丝的痛感!”

黛丝:”巧言令色,看我莫蹈好你!”

黛丝:”这还得看一个稍稍例子,才会说得明。如下表所示。”

 

// 循环1亿次

while (…) {

function1(); // 函数地址在0x10000

function2(); // 函数地址在0x20000

function3(); // 函数地址在0x30000

}

 

黛丝:”这段小序来2单特点:

F1:3只函数顺序得到实施,在履行时间上是隔壁之,简称时距相邻。

F2:3单函数的大体地址去好远,简称空距很远。

 

以空距很远,前一个函数执行完毕后,跳反执行及下一个函数,至少用花费3单机器周期,循环的1糟糕实践费在跳转上的时光最少9个机械周期,循环的1亿次等施行相应的支出至少9亿只机械周期!

 

来了ICache之后,情况大不相同。

ICache的特色是活动地管常去相邻的代码尽可能集中存放于友好体内,而无论是这些代码的空距有差不多远,且CPU以单周期看ICache。”

 

黛丝:”以上述小循环也例,在推行function1()期间,ICache会把function1()尽可能缓存在友好体内,在执行了一不成巡回后,如果3单函数的总容量不超ICache的容量,那么3独函数的满代码都已经缓存在ICache体内。从循环的第2软施行起来,CPU只待访问ICache就好实行总体循环,不必还拜FLASH,所有指令的抱都是独自周期的。前一个函数执行了后,跳反执行到下一个函数,只待1个机器周期,循环的1亿不良实行费在函数跳反上的日仅需要3亿独机械周期!”

黛丝:”通常,函数function1/2/3()还见面调用其它众多函数,函数之间的跳转切换数量要远多于如齐所说。只要容量足够深,ICache还会见管给function1/2/3()调用的另外函数通通缓存到体内,由此要省的履时远远出乎如上所述。”

黛丝:”所以,ICache的优势是智能地、自动地用经常去相邻而空距很远之代码段放置于体内,CPU以单纯周期看这些代码,大大升级了次性能。”

黛丝:”而ITCM的优势是大妈提升了时距不相邻而空距相邻之代码段的实行性,且要人工地拿代码组织成为空距相邻。”

高飞狗:”ICache会不会见缓存ITCM中的代码?”

黛丝:”由于CPU能够为单独周期看ITCM中之全部内容,所以ITCM中之始末未必然缓存到ICache。在CPU硬件设计上即保证好即一点。所以,ICache中缓存的代码一定是ITCM之外的内容。”

高飞狗:”ITCM和ICache还确实各有所长。”

高飞狗:”你提了这般多,我来总结一下,你看对无对准。”

高飞狗:”结论1:ITCM既能缓存代码也会缓存数据,但要人工地管频繁执行之代码、IVT、ISR和仓库空间连通(空距相邻),人为地装入其中。从而使CPU以单独周期、独占方式访这些代码和数据,大幅升级应用程序的特性及安全性。”

高飞狗:”结论2:ICache只能缓存代码,但智能地、自动地以经常离相邻而空距很远的代码段放置于体内,CPU因仅周期看这些代码,大幅提升程序性能。”

高飞狗:”简而言之,ITCM和ICache是CPU的贴身护卫。”

黛丝:”概括得十分好。”

黛丝:”对于STM32H743,ITCM和ICache的总容量已高达80KB,如果程序设计者精心安排,使得80%的年华CPU是于就两边间实施顺序,应用程序的特性提升以会晤无限巨大。”

 

高飞狗:”ITCM是Instruction Tightly Coupled
Memory的缩写,似乎其中只能存放代码?”

黛丝:”你还好仔细的!ITCM也足以存放数据,例如堆栈空间。所以,这个名词的确有点词不达意。”

 

高飞狗:”对了,CM7核心还新增了DCache部件。最近做了一部分实验,涉及DMA传送,好像一启用DCache,数据读写及传递就起题目;只要禁用DCache,一切还健康。你可知无克让自己详细讲解一番?”

黛丝:”今天时不早了,我还得下干活,下次再说吧。”

高飞狗:”那我呼吁吃晚餐,聊表谢意!”

黛丝:”饭和衰落就不了,你再度无运动我便从跑了你!”

高飞狗:”这么厉害呀!那自己就是不客气了,先走一步了。”

“高飞的白鹭,黛丝的鹅,唐诗里生打,唐诗里有唱歌,唐诗是自家本着您的剖白…”

相关文章