童话故事 — 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,一切还健康。你能够免可知为自家详细讲解一番?”

黛丝:”今天光阴不早了,我还得出去办事,下次再说吧。”

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

黛丝:”饭和萎缩就非了,你更无倒自己哪怕从跑了您!”

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

“高飞的白鹭,黛丝的鹅,唐诗里生描绘,唐诗里有唱,唐诗是自本着您的表白…”

发表评论

电子邮件地址不会被公开。 必填项已用*标注