您的位置:首页 >智能硬件 >

环球新动态:Armv8.1-M架构介绍

2022-06-30 05:52:46    来源:Arm


(资料图片仅供参考)

Armv8.1-M架构是针对现行的Armv8-M架构的强化版本。它带来许多新功能,包括供信号处理与机器学习应用的M- 设定档向量延伸(MVE)。针对Arm Cortex-M系列推出的MVE (M-Profile Vector Extension),则称为Arm Helium技术。本白皮书针对包括Helium在内的Arm8.1-M架构许多强化处,提供综述。Armv8.1-M架构是什么?Armv8.1-M是Armv8-M 架构的延伸,包括下列许多功能:◆名称为Helium的全新向量延伸指令集◆针对回路与分支的额外指令集强化 (低负担分支延伸) 半精度浮点支援的指令◆针对浮点单元(FPU) TrustZone 管理的指令集强化记忆体保护装置(MPU)内全新的记忆属性◆除错的强化,包括效能监视单元(PMU)、非特权除错延伸,以及专注在信号处理与应用开发的额外除错支援◆可靠性、可用性与可服务性(RAS)的延伸最后,此架构针对不可预测案例的规格,也已经完成清理。M-Profile Vector Extension (MVE)是一个可以带来更高信号处理能力的任选的架构延伸。供Arm Cortex-M处理器使用的MVE,则称为Helium。Helium:MVE是一个可以带来更高信号处理能力的任选的架构延伸。供Arm Cortex-M处理器使用的MVE,则称为Helium。Neon是针对A系列处理器的架构延伸,包括Arm Cortex-A与Neoverse,它可以赋予高效能的先进SIMD技术。

Helium与Neon虽然有类似之处,但Helium是从最基础重新展开的新设计,可以为小型处理 器带来高效的信号处理效能。它提供许多新的架构功能,可以强化嵌入式使用案例的计算效能,原因是它针对区域与电力进行优化,可为M系列架构带来Neon的能力(针对Cortex-A的SIMD指令)。

Helium 与Neon在下列领域相当类似:◆128-位元向量大小◆使用浮点单元中的暂存器,成为向量暂存器

◆Helium 与Neon都可以使用某些向量处理指令

不过,Helium 与Neon仍有许多不同的关键处:◆Helium设计上用来将所有可用之硬体的使用极大化,且与Neon相比,使用较少的向量暂存器◆某些Helium的运作同时利用向量暂存器,以及纯量暂存器库中的暂存器◆与Neon相比,Helium支援更多的资料类型

◆Helium 支援许多新功能,如回路预测、巷道预测、复杂数学与分散-集中记忆存取

Helium 新增超过150个新的纯量与向量指令。从架构上来看,同时也有许多的实施选项:◆省略Helium选项 – 具备任选纯量FPU (双倍精度支援性也可任选)的Armv8.1-M整数核心◆只支援向量整数的Helium,并具有任选的纯量FPU (双倍精度支援性也可任选)◆具有向量整数+浮点(支援向量单倍精度与半精度)的Helium,并具备纯量FPU(双倍精度支援性也可任选)有鉴于Helium涵盖的指令数量极为庞大,这份档案里不可能全部交代。以下是除了向量处理能力以外的一些精华部份:◆交错与去交错载入与储存指令(VLD2/VST2 的跨步为2;VLD4/VST4 的跨步则为4)◆向量集中载入与向量分散储存–向量暂存器中的元件记忆体存取,且向量中每个元件都 有定址位移,并使用另一个向量暂存器的元件加以定义。这可以让软体应付任意的记忆体存取型样,并可用来模仿常使用在信号处理、诸如循环定址等特别的定址模式。它也可以在各种资料处理任务中,协助加速阵列资料元件的非顺序存取。◆向量复合值处理支援整数(8位元、16位元与 32位元) 与浮点(32位元) – 例如 VCADD、VCMUL、VCMLA 指令。◆巷道预测– 这部份将在后面谈到◆位元整数支援–这部份将在后面谈到为了降低处理器的面积与耗电,系统会再度使用FPU中的暂存库来进行向量处理:

Helium的整数支援,可以让8位元、16位元与32位元的定点资料计算效率更高。 16与32位元 定点格式,在传统信号处理应用中使用相当广泛,譬如音效处理。 8位元的定点格式对于机器学习处理可能相当重要,例如神经网路计算,以及影像处理。Armv8.1-M处理器结合Helium与新型的低负担分支延伸后,信号处理的效能与使用Armv7-M 与Armv8.0-M内的传统SIMD指令集相比,好上好几倍,同时可以让处理器尺寸不致于过大,同时保有优异的能源效率。Helium 可以让Arm Cortex-M 处理器解决下列(但不局限于)计算上的挑战:◆音响设备◆感测器集线器(感测器融合)、情境集线器(环境感测)以及穿戴式装置◆关键字萃取及语音命令控制◆电力电子学与控制 (信号处理)◆通讯(如窄频物联网)◆静止图像处理(如相机)有了Helium许多之前使用带有专属DSP的Cortex-M处理器的应用,就可以将两套处理器系统整并成单一处理器。有了Helium,许多之前使用带有专属DSP的Cortex-M 处理器的应用,就可以将两套处理器系统整并成单一处理器。这样做有许多优点:◆简化软体开发--仅需要单一的工具链与单一架构,降低两套处理器系统间沟通的软体负担。◆降低晶片设计的复杂性-仅需单一记忆体系统,因此可以带来更快的单晶片系统设计周期,并降低成本。也有可能取代嵌入式系统中,某些旧有的分立DSP产品:◆Cortex-M处理器具有众多各式各样功能,与许多旧有DSP相比,可以用更高的效能执行一般非DSP的工作负荷。◆Cortex-M处理器的高程式码密度,让替换此类DSP时,可以降低系统成本。Helium 功能– 巷道预测:Helium包括MVE功能,可为向量中的每个巷道提供条件式执行。此一优化的机制,称为巷道 预测。为了要开启此一功能,必需加入称为向量预测状态与控制暂存器(VPR)的新型、特殊用途暂存器,以便为每个巷道保持原有条件。此一暂存器内部的预测条件,会透过如向量比较(VCMP)等向量运作,进行更新。在设定完成条件旗标后,向量预测 (VPT)/向量预测集 (VPST) 指令可在次序列向量指令内,为每个巷道设定条件式执行(向量预测块最高达4个指令,类似IF-THEN指令块)。VPR的状态会使用位于延伸异常堆叠框内的一个保留字,以异常事件自动进行储存与复原。Helium 功能–大整数支援:为了发挥128位元向量暂存器的最大功能,Helium同时也导入以MVE定义的大整数处理指令(VADC、VSBC 与VSHLC),它们可以与128位元、或更高的整数资料类型,一起链接运作。低负担分支延伸:为了让信号处理效率更高,Armv8.1-M导入低负担回路与额外的分支指令。简单的回路结构从WLS(while-loop-start)指令开始,它会规定回路数与branch back位址,而此回路结构在回路结束(LE)指令出现时结束。

回路第一次执行时,WLS与LE指令都会执行,而回路位址则快取在处理器内,至于次顺序回路叠代则不必再次执行这两个指令。回路计数由链接暂存器(LR/r14)与回路出口处理,同时 回路计数器则达到零。倘若在低负担回路期出现中断,此回路的位址快取将会清除掉,而LE指令则在完成中断服务常式(ISR)回来后,重新执行。把处理精度由单倍精度改为半精度后,处理器利用Helium技术,在同样期间内可以处理两倍的资料量。除了while-loop-start(WLS),另外还有类似的do-loop-start(DLS)指令。 do-loop总会执行回路本体的第一个叠代,但while-loop在条件没有被满足时,会在第一个叠代前跳至回路的最后。另外还有一个可以带来回路尾预测的低负担回路指令(WLSTP与DLSTP)-倘若资料处理任务需要在N要件上执行,而N不是向量巷道宽度的倍数(例如,倘若要处理的元件是32位元,Helium每个向量指令可以处理四个巷道的元件),那么回路尾预测会让最后的回路叠代, 用条件式执行机制处理剩下的元件,而不会处理其它东西。使用WLSTP/DLSTP时,具备尾预测的回路结束(LETP),必须用来标示此回路的结束。WLSTP与DLSTP要标示处理中向量元件的大小时,必须要有尾置,且LR里的值包含要处理元件的数量,而不是回路的数量。如果必要的话,一个称为清除尾预测回路(LCTP)的额外指令,可以让带尾预测的低负担回路提早终止。不管Helium有无落实,WLD、DLS与LE指令都可用。回路尾预测指令(WLSTP、DLSTP与 LETP) 都需要Helium这个选项。另外还有导入Armv8.1-M架构的额外分支微量指令,它们可以利用低负担回路导入的硬体,以便赋予更佳的分支效能。其它Armv8.1-M 主线延伸强化:Armv8.1-M 导入许多条件式的执行指令:◆CINC–条件式增量◆CINV– 条件式反转◆CNEG–条件式否定◆CSEL–条件式选择◆CSET–条件式地将暂存器设为1◆CSETM–条件式地将暂存器中的所有位元数设为1◆CSINC–条件式选择/增量◆CSINV–条件式选择/按位元反转◆CSNEG –条件式选择/否定Armv8.1-M 也新增加:◆64位元算数与逻辑移位指令 (ASRL、LSLL、LSRL + 饱合/ 带舍入 变体),这些指令中某些的平分变体也可用◆带正负与无符号舍入/32位元与64位元资料的饱合移位指令◆这些唯有当Helium落实时,才可用。浮点处理强化:

正如同Armv8.0-M架构,Armv8.1-M支援任选纯量单倍精度(32位元)与双倍精度(64位元)浮 点计算(支援所有FPv5指令)。此外,Armv8.1-M也支援:◆任选纯量半精度(16位元) 浮点◆任选向量半精度 (16位元) 浮点 (Helium的一部份)◆任选向量单倍精度 (32位元) 浮点(Helium的一部份)半精度浮点支援,对于关键字萃取与语音命令控制应用的音讯预处理,相当有帮助。在这些应用中,音讯不需要很高的解析度,但却非常需要良好的动态范围支援。把处理精度由单倍精度改为半精度后,处理器利用Helium技术,在同样期间内可以处理两倍的资料量。使用半精度浮点格式,也可以帮助减少资料所需的记忆体大小需求(例如:过滤器系数)。安全相关的强化– FPU 上下文保存/复原:Armv8.0-M导入TrustZone安全延伸,可以让新世代的保全解决方案在低成本、低电力嵌入式系统上,利用Cortex-M处理器实施。 Armv8-M的TrustZone最关键的特性之一,就是它可以允许安全软体(受保护的环境)与非安全软体(一般环境)彼此间进行高效、直接的函数呼叫,而Armv8.1-M则持续在此一领域增加更多的强化。为了支援Armv8-M使用的TrustZone,Arm C语言延伸(ACLE)为需要的各种C语言编译器功能进行定义,也就是Cortex-M安全延伸。需求之一,就是当非安全软体呼叫安全API时,安全的函数结尾(安全API结尾插入C语言编译器的编码)需要清除浮点数控制与状态暂存器(FPSCR) 里的内容,以避免资料外泄至非安全方。这对安全固然很好,但对于非安全软体也可能带来问题,特别是有关ABI相容性-FPU组态的可能改变(例如:舍入模式组态)。Armv8.1-M则增加了此一指令集的强化,以允许安全API导言的非安全FPSCR状态(FPCXT_ NS)的上下文保存,以及结尾的上下文复原。强化的指令,包括FPU记忆体存取指令 (VLDR与VSTR)以及FPU暂存器存取指令(VMRS与VMSR)。要利用此一新功能,必须更新A与C语言的 编译器。也因此,Armv8.1-M为了清除暂存库(CLRM与VSCCLRM)里的上下文,也增加了新的 指令。安全相关的强化– MPU的Privileged eXecute Never (PXN) 属性:另一个安全强化,则位于记忆体保护装置(MPU)里面-一个名为特权永不执行(PXN)的新MPU 区域属性。倘若MPU区域拥有PXN属性集,且处理器试图执行里面带有特权层级的程式码, 记忆体管理故障例外则会被触发,而MemManage Fault状态暂存器里的IACCVIOL位元数, 也会设成1。PXN的属性位元,在MPU_RLAR (区域限制位址暂存器)以及其别名暂存器的第四位元内。保全与非保全MPU都可取用,且此一位元之前在Armv8.0-M环境中,被固定为0。 .PXN的属性位元,在MPU_RLAR(区域限制位址暂存器)以及其别名暂存器的第四位元内。安 全的与非安全的MPU都可取用,且此一位元之前在Armv8.0-M环境中,被固定为0。对于具有各软体商提供之安全韧体元件、并拥有TrustZone功能的系统,这个功能特别有用。在那些案例中,部份的安全韧体元件可能不能完全信任,且必须限制成只能非特权执行。倘若如此系统实施Armv8.0-M,非特权软体元件必须不能被允许拥有可以从非安全状态呼叫出来的自己的安全入口点,因为这些软体元件如果从非安全处置器模式直接呼叫出来,会在特权状态下执行。也因此,入口点必须进行安全检查且分开实施,但这也会增加软体的负担。有了在Armv8.1-M环境下可用的PXN属性,这些非特权软体元件都会有自己的安全API入口点, 而且只有当API被非安全处置器呼叫,MemManage讹误例外处置器才会拦截,并将处理器切 换至非特权状态,以便让保全的API可被执行。安全相关的强化 – 非特权除错延伸:对于具有第三方提供的安全软体库的系统,有些情况下软体开发人员可能必须针对非特权软体库进行除错,但他可能并未取得其它安全韧体元件商的充份信任。在Armv8.0-M环境中,倘若安全除错功能开启,软体开发人员不管是特权或非特权软体,都拥有完整的除错存取,但在这个案例中,这却是我们不想要的。尽管限制除错存取是可能的(安全的特权软体, 可以使用具有如CoreSight SDC-600等沟通管道除错监视器,以便对安全的非特权人员提供有限的除错存取,而毋需透过除错存取埠来提供完整的安全除错存取),但这需要更多的软体负担。Armv8.1-M透过非特权的除错延伸,提供全新的除错赋能机制模式。当安全除错功能关闭后, 安全的特权软体可透过除错鉴别控制暂存器(DAUTHCTRL),允许非特权的除错延伸。在应对数个安全韧体库时,对应安全世界(例如:PSA中的安全的分区管理员)上下文交换的安全特权软体,在不同的上下文切换时,应该针对DAUTHCTRL暂存器进行程式撰写。例如,在下列的图表中,软体开发人员针对所有的非安全软体与X程式库(两者皆为安全但非特权),拥有除错存取权。处理器在运行此软体时,停机要求是可以被接受的,但在运行程式库管理员或Y及Z程式库时则不行。

当处理器正在运行并具有非特权的除错延伸,当前的安全状态(除了处理器内部某些除错元件)的记忆体除错存取会被阻挡下来;但当非特权的除错功能开启,且处理器于非特权状态下 停机时(DAUTHCTRL的UIDEN位元设为1),存取则会被允许。当非特权除错于当下状态下使 用时,除错存取也会与该状态中的MPU许可进行交互检查。根据图表中的范例:◆软体开发人员可以存取非安全的记忆体,并在处理器处于非安全状态下,中止其运行。◆唯有当处理器在运行X程式库(DAUTHCTRL由上下文交换的程式库管理员设定组态)时,◆软体开发人员才可以中止处理器,并且可以存取可透过X程式库存取的记忆空间 (许可则依据安全MPU)。对于安全与非安全世界(DAUTHCTRL内UIDEN与UIDAPEN的位元,则在两个保全状态间排成一行),非特权的除错延伸都可用。若要支援非特权除错,除错工具与程式库管理员必须进行更新。不过,非特权除错是除错架构的延伸,且既有的除错功能(当旧有的鉴别控制信号已打开),并不受影响。除错强化 – 效能监视单元 (PMU):在Armv8.1-M环境下,资料监视点与追踪(DWT)获得延伸,以便支援效能监视单元(PMU)功 能,这跟在Cortex-A处理器上出现的情况一样。这可以允许先进的设定表示功能,包括分析快取命中/未中的能力。之前的设定表示功能仍然可用,但若要让软体开发人员可以发挥架构的最大功能,除错器需要进行更新。请注意,PMU使用与DWT分离、且不同的位址空间,不过设定表示计数器虽然实体上相同(位 址别名),但除错工具不能同时使用PMU与旧有的DWT的设定表示。除错强化 – 信号处理应用功能:Armv8.1-M同时也包括数个除错架构的强化,更进一步强化信号处理应用的除错效率。这些包括:◆带有位元遮罩的资料监视点,以便进行价值匹配。对于侦测信号范围,特别有用。◆带有计数器的断点–断点只有在到达特定的某些计数值后才会触发(停止)。当数位滤波器稳定后,这对于想要停止处理器,可能特别有用。信赖度、可用性与可服务性(RAS)的延伸:RAS延伸在Armv8-A架构下的Cortex-A处理器上已经推出。 RAS是一套系统可靠性的三个面向:◆可靠性、正确服务的持续◆可用性、正确服务的备妥状态◆可服务性、可进行修改与维修的能力。 RAS的延伸需求,原本来自伺服器/企业应用–RAS 技术降低非计划中断,原因是:◎在造成应用或系统失效前,暂态误差可被检测出来,并进行改正◎可找出故障的元件,并进行替换◎故障可以事前预测,以便在计划性保养时进行更换Cortex-M处理器虽然大多部署于嵌入式与汽车等应用,但汽车与工业使用的功能性安全需求,也让RAS成为次世代Cortex-M处理器顺理成章的选择,而RAS的许多技术也在功能性安全层面上有所裨益。对于与Armv8.1-M一起设计的处理器,RAS延伸则涵盖:◆增加了错误同步屏障(ESB)指令◆错误报告暂存器 (例如:Error Corrected Code快取的错误)◆汇流排介面强化,例如汇流排转移完整性检查的同位或错误校正码(ECC)信号,以及汇流排介面的毒化信号Armv8.1-M同时也包括数个错架构的强化,更进一步强化信号处理应用的除错效率。毒化信号对于嵌入式处理器,是全新的功能。其中之一共用的使用案例,就是处理资料快取中的毁坏资料:1.快取列毁损(例如:因为电压不稳定)。倘若错误超过一个位元,当位于毁损快取列的资料正在使用时,ECC将无法修正错误。

2.稍后,快取列出现移出,这会冲洗掉已毁损的资料。 ECC错误在此阶段会被侦测出,并触发汇流排上的毒化侧频带信号出现判断提示。此毒化状态将保存在记忆体系统中。在这个阶段,故障例外不会发生。

3.当资料(带有毒化状态)被处理器读取(可能是另一个处理器,或是系统上不同的汇流排主 控器),此毒化资讯会跟着传送,并在处理器上触发一个错误例外。

此一方式,有好几个优点:◆倘若毁损的资料没有被任何汇流排主控器使用(例如:随后被其它资料覆写),就没有必要触发错误例外。◆当资料正在使用、且与遭受影响的应用出现同步,错误例外则会被触发,倘若毒化信号不可用,此例外必须在快取列移出时触发,且处理器可运行完全不相关的应用,这会让判断哪一个应用受到影响,变得相当困难。RAS延伸的使用,同时也可以在Cortex-M与Cortex-A处理器之间,带来更佳的一致性;这对于必须应付具有Cortex-A 与Cortex-M等异质多处理器系统的错误情况的软体,是一个优点。软体迁移至Armv8.1-M:Armv8.1-M 处理器保有Arm Cortex-M 处理器之前具有的关键特性,包括:◆使用简单◆快速且确定性的中断回应时间◆针对低耗电嵌入式应用完成优化既有的Armv8-M软体也可以在Armv8.1-M上运作,这让软体迁移相当简便。就跟Armv8.0-M一样,Armv8.1-M支援TrustZone安全延伸,可以解决已连接之产品如物联网装置的安全需求。为了要利用这些新功能,需要各种相关的软体更新:◆C语言编译器–编译器(与binutils)需要进行更新,以便支援新的指令。 Arm C语言延伸 (ACLE)需要为新的指令导入新的内在函数。保全API的导言与结尾,也应该加以强化,以便非保全FPCXT的保存与复原。编译器贩售商也可增加先进优化,以便利用低负担回路、新指令,并对可以运行Helium的系统提供自动向量化的潜在支援。◆除错工具–除错器需要进行更新,以支援新功能,以及新的架构暂存器(例如VPR)。◆RTOS–为了利用如新的MPU属性等新的安全功能,作业系统需要进行更新。倘若装置需要非特权除错,我们同时也必须进行额外的更新,以便支援此一功能。◆供Armv8-M使用的Arm信赖韧体–这需要进行更新,以便支援新的PXN MPU属性与非特权除错延伸。◆应用程式码–新的CMSIS-CORE与CMSIS-DSP程式库将可取用。强化的CMSIS-DSP程式 库将利用Helium指令集,提供显著的效能提升。

总结Helium生态系统具有广泛的可用工具与软体程式库,可以带来快速且低风险的开发。AArmv8.1-M包括许多新的强化与优点。对于Armv8.1-M最重大的新增点,是M系列向量延伸(MVE)。 Helium是供Arm Cortex-M系列使用的M系列向量延伸,它可以为小型、嵌入式应用带来高效的信号处理与机器学习。它可以让原本需要两个处理器的情况,整并成只需一个单一晶片系统,并降低复杂性与成本。Armv8.1-M包含其它对指令集、除错功能的强化,并提升嵌入式系统的可靠性。此外,此架构具有内建TrustZone安全,设计上符合平台安全架构 (PSA)规格。Helium生态系统具有广泛的可用工具与软体程式库,可以带来快速且低风险的开发。

关键词: 信号处理 开发人员 机器学习

相关阅读

精彩推送