ARM作为全球领先的IP供应商,凭借其核心优势,在移动设备时代,混的风生水起。而近年来随着设备转变的需求,ARM也针对性的做了提高,推出更适合的高效能产品。我们来盘点一下2017年不能错过ARM的三大技术:
1
获得Trust Zone加持的ARMv8-M
ARM TrustZone 是针对片上系统(SoC)设计的系统级安全技术,它基于硬件,内置于CPU和系统内核,为半导体芯片设计师设计设备安全性能(如可信根)量身打造。TrustZone可用于任何基于ARM Cortex®-A的系统,随着全新Cortex-M23和Cortex-M33处理器的发布与升级,Cortex-M也已经支持该技术。从尺寸最小的微控制器(搭载针对Cortex-M处理器优化的TrustZone技术),到高性能处理器(搭载针对Cortex-A处理器优化的TrustZone技术),设计师们终于可以从设计初始就着手打造出色的安全性能了。
TrustZone技术的核心理念是将可信资源与非可信资源在硬件上实现隔离。在处理器内部,软件只能安装于安全或非安全域其中一处;在两个域间切换则必须经过Cortex-A处理器的软件(后文称安全监视器)和Cortex-M处理器的硬件(核心逻辑)处理才能执行。这种将安全(可信)域和非安全(非可信)域隔离理念的实现不仅涉及CPU,还涵盖存储、片上总线系统、中断、周边设备接口和SoC上的软件。
TrustZone安全技术将非可信资源和可信资源隔离
2
针对ARMv8-M处理器的TrustZone技术
ARMv8-M架构将TrustZone技术拓展至Cortex-M级系统,实现了对所有成本点的安全防护。为Cortex-M度身设计的TrustZone技术可以保护固件和周边设备,并为安全启动、可信更新以及可信根执行实现隔离。该架构具备嵌入式解决方案应有的确定性实时响应能力。同时,因为安全与非安全域间的上下文切换在硬件中完成,所以更快实现转换及更高的电源效率。该架构无需安装任何安全监视器软件,因为处理器本身就能完成切换任务,不仅可以减少存储足迹,还能降低代码执行的动态功率。
在继续讨论编程之前,我们先介绍以下几个概念:
地址定义安全
新增执行状态
跨域调用
概念1:地址定义安全
第一个需要了解的概念是:地址定义安全,即每一个地址都与一个特定的安全状态相关。Cortex-M处理器采用全新引入的安全属性单元来检查地址的安全状态。根据整体SoC设计,系统级接口可以重写该属性。选择此状态后,该地址还会通过一个存储保护单元(视系统配置而定)。
地址定义安全图解
概念2:新增执行状态
第二个概念是“新增执行状态”。ARMv7-M和ARMv6-M架构定义了两种执行模式:管理者模式(handler mode)和线程模式(thread mode)。管理者模式是特权模式,可以接入SoC的所有资源;而线程模式则可以设定为特权或非特权两种。凭借TrustZone安全拓展技术,我们可以对处理器模式进行镜像处理,构造安全和非安全两种状态,每种状态都各自包含管理者模式和线程模式。安全状态和处理器模式是正交的,因此可形成4种状态和模式的组合。在安全的存储器中运行软件时,处理器自动设定为安全状态;反之,在非安全存储器中运行软件时,处理器自动设定为非安全状态。这种设计消除了本来用于管理状态切换的安全监控软件的必要性,从而实现减少存储足迹和功耗的目的。
新增正交态
概念3:跨域调用
ARMv8-M为实现Cortex-M的性能专门设计,具备确定性实时运行功能。换言之,只要遵守以预先设定的安全状态接入点为基础的特定规则,任何状态下的任何功能都可以直接调用其他状态下的任何其他功能。此外,每个状态都有一个独特的堆栈集和对应的堆栈指示器,用来保护安全域资产。由于无需使用API层管理调度,成本大幅减少。基于预先设定的接入点,调度可以直接读取被调函数。
跨域调用
应用案例简述
如下图表介绍了一个使用案例简述。该环境下,用户应用和I/O驱动都处于非安全状态,而系统的启动代码和通讯堆栈则处于安全状态。用户应用调度并转入通讯堆栈以传输、接收数据,而该堆栈将使用非安全状态的I/O驱动来完成界面上的数据传输和接收。
所有相似系统环境下,示例软件配置都可以得益于TrustZone技术的安全状态功能:
非安全应用不能接入安全资源,除非通过事先定义好的安全服务功能接入点
安全固件既可以接入安全存储,也可以进入非安全存储
安全和非安全代码可以用不同的定时器制定独立的时间进度
每根中断线都可以设置为安全或非安全。安全软件和非安全软件的中断向量表也可以分开。
尽管处理器硬件可以为安全软件提供核心保护,但安全软件依然需要谨慎的编写,才能确保整个系统的安全。以下是软件开发商在设计安全软件时必须牢记的三个内容:
使用最新的ARM C语言拓展(ACLE)技术
验证非可信指示
为异步非安全存储修改专门设计
建议1:使用最新的ARM C语言拓展技术
经过优化,ARMv8-M的TrustZone技术引入了全新指令,支持安全状态转换。软件开发商再也无需创建封装器来生成这些指令了,他们现在可以使用ARM C语言拓展功能(ACLE)中定义的全新编译器,让软件工具理解上述功能的安全使用,并生成所需的最佳代码。ACLE功能由多家编译器厂商实现并支持,代码非常便捷易用。
比如说,在创建可以从非安全状态调度的安全API时,应该使用一个名为“cmse_nonsecure_entry”的全新功能属性来做函数声明。安全状态调度功能使用结束时,处理器中的寄存器仍可能保留一些秘密信息。凭借正确的功能属性,编译器便可自动插入代码,清空R0-R3、R12和应用程序状态寄存器(APSR)中仍保留秘密信息的寄存器,但是寄存器将结果返还给非安全软件的情况除外。寄存器R4到R11有不同的处理方式,因为它们的内容在函数边界保持不变。如果它们的值在函数执行过程中改变,那么就必须在返还非安全调度功能之前改回原值。
建议2:验证非可信指标
有时候,非安全代码会提供错误的设计指示,试图接入安全存储。为了彻底杜绝这一可能,ARMv8-M引入了一个全新指令——测试目标(TT)指令。TT指令可以将一个地址的安全属性返还,安全软件即可由此判断该指示指向安全还是非安全地址。
为了提高指示检查效率,每个存储区都有一个安全配置定义的区域号。软件可以用区域号判断相邻的存储区是否具有类似的安全属性。
TT指令将来自地址值的安全属性和区域号(还有MPU的区域号)返还原软件。如果在存储段的起始和终止地址上使用TT指令,并确定两个地址都处于同一个区域号内时,软件便可迅速判断存储范围(如数据阵列或数据结构)是否完全位于非安全空间。
检查指示是否指向安全的区域边界
使用上述机制,凭借API调度进安全侧的安全代码即可判断,非安全软件区域发起的指示请求是否具备符合该API的安全属性。通过这种方法,我们可以阻止非安全软件在安全软件中使用API来读取或破坏安全信息。
建议3:为异步非安全存储修改专门设计
非安全中断服务程序可以修改正在被安全软件处理的非安全数据。因此,已经通过安全API验证的输入数据可以在经过验证之后被一个非安全的ISR更改。避免这种情况的一个方法就是在安全存储中为那份输入数据建立一个本地副本,并用安全副本进行处理(包括输入数据的验证)以避免非安全存储读取;无法创建该副本时(如在特定存储区域中处理大量数据),则可以选择另一种方法,即对安全属性单元进行编程,以确保该存储区域的安全。
确保整个系统的安全性并阻止安全数据泄漏至非安全侧,是安全软件开发商的责任。为实现这一目标,我们向安全软件开发商介绍TrustZone 技术3大关键理念与3个重要使用建议——保护调度函数寄存器数据的ACLE技术、验证指示的TT指令;最后一点开发商也必须牢记,非安全侧可能会通过干扰安全侧来修改数据。
3
拥有五大优势的Cortex-M33
Cortex-M33是首款采用TrustZone 安全技术和数字信号处理技术的ARMv8-M全功能实现处理器。该处理器可以支持大量灵活的配置选项,并在广泛应用中进行部署,此外还提供专用的协同处理器界面以支持经常需要加速和大量运算的运作。Cortex-M33是一款在性能、功耗、安全与生产力之间达到最佳平衡的处理器。
为了显著降低系统功耗,Cortex-M33处理器采用有序三阶管线技术。大部分指令在头两个阶段就能完成,而复杂的指令则需要3个阶段。此外,某些16位指令将采用双发射机制,以增强性能。处理器内核有两个AMBA 5 AHB5界面:C-AHB和S-AHB,完全对称,指令和数据提取性能不分伯仲。
在MPU、DSP、FPU、TrustZone、ETM、MTB、ITM、BPU、DWT和协同处理器界面功能中选择最佳组合方案,设计师即可迅速打造强大系统。在最低限度的控制系统中,NVIC可以被设定成只容纳一个外部中断;而在周边设备丰富的系统中,NVIC能够设定成可容纳至多480个外部中断,包含至多256个优先级。而对于那些依赖大量主动流程和线程以保持可靠运行的系统,设计师还可以增加MPU,用特权和非特权接入控制来强行隔离处理进程。如需更高级别的代码、数据和资源保护, TrustZone则是设计师的不二之选。
应用复杂度越来越高,片上调试和追踪技术的价值也日益凸显,对保障产品按期交付至关重要。Cortex-M33处理器的内置调试功能可以加速软件验证。设计师可以用JTAG端口或双插针串行调试端口来验证系统,还可以选择ETM或MTB进行出色的指令追踪,而BPU和DWT则可以允许在调试中使用断点和硬件观测点。
现在,让我们探讨一下Cortex-M33的五大特色:
1 为ARMv8-M 量身优化的TrustZone技术为整个系统的安全保驾护航
采用TrustZone技术的Cortex-M33处理器拥有两个安全状态及多种相关特色:
两种全新的正交状态
安全状态和非安全状态的全面利用,必将开启众多新机遇和新应用的大门。该系统使用的高价值专利固件可以在安全状态下运行。在安全状态下设置的监管员代码则可以在系统受到攻击或不可靠运行后将其恢复初始;而非安全侧则像以前一样向正在用Cortex-M开发软件的数百万开发者开放。
2 协同处理器界面,实现高扩展性
对某些应用而言,专用运算起到的作用可谓非同小可;但为了实现专用运算,这个全球最强大设计生态系统的所有优点必须完美保留,即允许设计师在开发工具、编译器、调试器、操作系统和中间件之间最大限度的进行选择。ARM生态系统可以帮助开发商节约时间和成本,进一步提高生产力。
Cortex-M33处理器包含一个可以选配、类似总线的专用界面,主要用于集成紧耦合加速器硬件。对需要频繁运算的操作而言,该界面可以帮助设计师用自定义的处理硬件提升通用运算能力。须着重指出的是,这样做并不会使整个生态系统分裂。该界面包含最多可用于8个协同处理器的控制和数据通路,发出的信号可显示处理器的特权状态和安全状态、指令类型、相关寄存器和操作字段。协同处理器通常会合理的在几个少数循环内完成,或在后台运行并在完成时自动停止。操作的细节和数据可以通过该界面与单指令同时传输,如有需要,还可插入等待状态。
3 用于任务隔离的存储保护单元(MPU)
设计师可以自行对选配的MPU编程,为每个安全状态和非安全状态提供多达16个区域。在多任务环境中,操作系统可以在任务情境切换时重新编程MPU,为每个任务定义存储访问许可。比如说,某个应用的某个任务只被允许访问某些应用数据和特定的周边设备,这种情况,MPU将保护所有其他的存储和周边设备,将讹误或未授权访问阻挡在外,有效提升系统可靠性。
存储区设置更简易
Cortex-M33存储保护架构的开发基于受保护的存储系统架构PMSAv8。最新版本搭载了针对各区域的基线与限值比较器,而非此前的二次方尺寸对齐模型。每个区域都有一个基线的初始地址、终止地址,以及访问许可和存储性质的设定值,因此在这一架构中,设计师设计MPU区域时再也无需顾虑将多个区域整合在一起的麻烦了。功能强化后,软件开发变得更加简单,客户的使用意愿提升,编程步骤也得以减少,并将进而降低情境转换次数。
4 DSP拓展
选配的整数DSP拓展可以为系统增加85个新指令。大多数情况下,DSP指令可将性能平均提升3倍,让所有以数字信号控制为中心的应用性能突飞猛进。
为帮助设计师加速软件开发,ARM将在CMSIS项目中提供免费的DSP库,包含整套过滤、转换和数学功能(如矩阵),并支持多种数据类型。CMSIS项目是开源的,其开发详情发布在github上。
5 单精度浮点单元
基于FPv5的选配单精度浮点拓展单元包括一份额外的16-入口 64位寄存器文件。该拓展新增45个与IEEE754-2008兼容的单精度浮点指令。使用浮点指令通常可将软件库平均性能提升10倍。FPU位于单独的电源域,负责在整个单元不使用的时候切断电源。
Cortex-M33是一款能在性能、功耗和安全之间实现最佳平衡的处理器。
嵌入式解决方案日益复杂,而它们带来的价值也不断凸显,当今设计师面临的挑战是在相冲突的设计要素之间找到最佳平衡。此外,片上系统包含的软件数量正在显著增加,但项目开发时间却不断缩短。为了用更短的时间交付合格的产品,保证性能,减少成本,我们必须踏出正确的第一步。
Cortex-M33应运而生,为了迈出正确的第一步量身打造,ARM将过往经验与现有的Cortex-M生态系统完美结合,实现了开发成本降低。得益于采用了多种低功耗技术的全新设计,首先降低的是系统功耗;对打造安全方案的用户,TrustZone技术则为其应用和宝贵的IP提供保驾护航的坚实基础。升级后的MPU和TrustZone共同提升系统的可靠性和保护能力。最后值得一提的是,我们永远不会停止追求生产力的脚步。TrustZone的设计初衷便是保证当前用户能够像从前一样,继续在非安全领域内开发。
Cortex-M33还强化了调试与追踪性能,使复杂代码的操作更便捷。与所有其它Cortex-M处理器一样,Cortex-M33的所有编程都可以在C语言环境下完成,包括全部异常处理程序。总而言之,上述功能诞生的目的都是为了帮助开发者提高生产力,在更短的时间内设计出更复杂的解决方案。
在定义并开发新一代处理器的过程中,许多芯片厂商成为了ARM的合作伙伴,并积极利用TrustZone安全技术设计芯片。ARM生态系统也将重点放在将工具和软件移植到Cortex-M33。尽管Cortex-M33已经在性能、功耗、安全和生产力之间取得了最佳平衡,但ARM及其合作伙伴将继续努力,为开发商提供更加出色的产品,帮助其挥展创意、实现远见,营造更连通、更智能、更安全的世界。
ARM Cortex-M23采用TrustZone技术,是尺寸最小、能效最高的处理器。小型嵌入式应用对芯片的安全性能有严格要求,基于ARMv8-M基线架构的Cortex-M23处理器则是最佳解决方案。同样地,它也拥有五大优势:
1. 为ARMv8-M量身打造的TrustZone技术:安全实现的基础
TrustZone技术为ARMv8-M度身优化,可以在每一台搭载Cortex-M23处理器的设备上以硬件形式实现可信软件和非可信软件强制隔离。因此,采用TrustZone,设计师只需一个处理器就可以设计嵌入式应用,此前则必须使用多个处理器才能在可信区域和非可信区域之间实现物理隔离。仅需Cortex-M23处理器,既可出色实现多项安全需求,如设备识别管理、高价值固件保护、软件认证、安全根等等。
采用TrustZone技术的Cortex-M23处理器具备以下两种安全状态:
安全状态 – 可以访问安全和非安全资源(存储、周边设备等)
非安全状态 – 只可访问非安全资源
两种安全状态下的代码执行转换和代码访问均由硬件监管,最大限度地降低转换管理成本并保证确定性——这也是所有Cortex-M处理器的标志性功能。
2. 紧凑二阶布线处理器
Cortex-M23是一款简单的二阶布线冯诺依曼处理器(Von Neumann processor),但却足以支持全套ARMv8-M基线指令集。熟悉Cortex-M0+的用户一定可以迅速指出Cortex-M23使能效最大化的众多相似特色:WFI(等待中断)/WFE(等待事件)和睡眠/深度睡眠模式、退出时睡眠、SysTIck定时器和选配的单循环IO等。
指令集共包含80条左右的拇指指令,其中大多数都是16位指令(为了尽可能提高代码的紧凑度),但仍有一些为了提升效率而设置的32位指令。Cortex-M23支持所有的ARMv6-M指令,以帮助设计师轻而易举地将代码从Cortex-M0和Cortex-M0+处理器转移至Cortex-M23。此外ARMv8-M基线指令集中还加入了多条新指令以提升条件运算、互斥访问、硬件划分运算和即时移动的效率。
3. 强化的调试纠错与追溯能力
仅凭一台高效安全的32位处理器,尚无法成功实现字段部署,软件开发的成本通常超过生产和硬件IP的总和。Cortex-M23引入更多可配置的硬件断点和数据观测点,对比其他ARMv6-M处理器,可以助设计师更轻松地实现软件开发与调试。除了Cortex-M0+ 处理器中也配置的微型跟踪缓冲器(MTB),Cortex-M23还包括选配的嵌入式跟踪宏单元(ETM)。有了这些选配功能,设计师可以自行判断,究竟选择更加丰富全面的指令追溯能力;还是性价比更高、更加精简的指令追溯能力。
4. 用于任务隔离的存储保护单元
Cortex-M23还包括选配存储保护单元(MPU),基于全新PMSAv8架构打造,设计师使用起来非常方便。它可以在安全和非安全状态的任何一个状态下最多“保护”16个区域。每个区域都有一个基础地址、结束地址、访问许可和存储属性设置。在多任务环境下,操作系统可以在任务情境切换的过程中重新编程MPU,定义每个任务的存储许可,比如允许应用任务访问全部或部分应用数据和特定的周边设备。通过保护许可之外的数据免遭污染,并阻止未授权来源访问许可之外的周边设备,该MPU可以显著提升系统可靠性。
更易设置的存储区域
Cortex-M23的存储保护架构采用基线和限值比较器,用以定义存储区域,而此前使用的是二次方尺寸对齐比较器。这项改进简化了软件研发的复杂程度,而且在某些情况下,当区域尺寸不是完美的二次方尺寸时,还能减少存储浪费。
5. 全新ARMv8-M基线指令
对比ARMv6-M,Cortex-M23加入了许多全新指令,但丝毫没有折损Cortex-M系列处理器的超高能效。大多数新指令(除用于安全拓展外)都继承自ARMv7-M的架构指令集,进一步拓展Cortex-M23的功能,并与Cortex-M0+ 处理器形成鲜明区分。
(1)安全拓展
ARMv8-M采用的TrustZone安全技术为基线指令集补充了全新指令,包括安全网关(SG)、非安全支路(BXNS、BLXNS)以及测试目标(TT)指令。欲知详情,请参阅Yiu撰写的《ARMv8-M 架构介绍》。
(2)仅执行代码生成
对仅执行(Execute-Only)代码存储区的支持也获得改善,新增加的即时移动指令(从ARMv7-M继承的MOV/MOVT)可以在仅执行代码中生成即时数据,让设计师仅凭2条指令便能生成32位值,且无需运行实际负载。
(3)代码优化
条件比较和支路指令(从ARMv7-M继承的CBNZ/CBZ)可以提高多项条件控制代码序列的性能。长偏移即时支路(从ARMv7-M继承的)可以将支路指向遥远的目标地址;硬件整数划分指令(从ARMv7-M继承的SDIV/UDIV)则可以减少除法运算的处理循环。
(4)排斥存取
Cortex-M23还从ARMv7-M继承了负载和储存的专用指令,提升Cortex-M23在多核系统中的一贯性,确保多个处理器以同样的机制处理信号。此外,为了对C11/C++11提供稳定支持,Cortex-M23还新增ARMv8-A(Thumb 32版本)的负载获取与储存释放指令,并包括这些指令的排斥存取变种。