基于FPGA的汽车ECU设计充分符合AUTOSAR和ISO 26262标准
2016-05-26
汽车产业利用可重配置硬件技术,可灵活地综合车载功能。
当今的汽车制造商正在把越来越多的高级功能添加到汽车电子控制单元 (ECU)中,以改善驾驶体验,增强安全性,当然还期望超过同类竞争产品的销量。在这种情况下,汽车开放系统架构 (AUTOSAR) 计划和功能安全国际标准 ISO26262 正在快速成为汽车 ECU 设计的技术和架构基础。
为了满足新车型日益提高的功能需求,汽车电子产品的密度不断增大,FPGA 厂商也正在不断推出更大型的器件。这些器件能够集成所有的应用,而且与前代器件相比,功耗更低,价格更具竞争力。这种趋势意味着可重配置计算技术在汽车产业将会得到进一步推广和应用。
我们推出了一种具有开创性的方法,即使用可编程 FPGA 器件而非基于 MCU 的平台作为 ECU 的基础,设计出一款能够同时满足 AUTOSAR 和 ISO 26262 标准的汽车 ECU。我们的设计方法对可重配置硬件的关键特性,比如并行性、可定制性、灵活性、冗余性和多功能性进行了充分的探索。在概念设计完成后,我们希望在原型中实现设计。为此,赛灵思 Zynq?-7000 可扩展处理平台成为了理想选择。该款 FPGA平台将 ARM? 双核 Cortex?-A9 MPCore 硬处理器和具备动态部分可重配置功能的 28 nm 赛灵思 7 系列可编程逻辑器件完美结合在一起,不但可充分满足所需要求,而且还配备有 CAN 和以太网等车载网络常用的片上通信控制器。
新兴应用
目前汽车计算能力借助通过通信网络互连的ECU来分配。在未来几年内,由于机动车辆中新应用的兴起,这样的计算能力有望进一步提高。这些新应用包括安全和驾驶员辅助功能、车辆间通信功能、舒适性和控制功能、车载娱乐功能以及为数众多的混合动力电动技术。毫无疑义,车辆电子设备的数量预计还会增加。根据分析人员的预测,汽车应用半导体市场的规模将在未来五年内以 8% 的年均复合增长率 (CAGR) 增长。其中增长最快的细分市场之一涉及到微控制器 (MCU) 和可编程逻辑器件,比如现场可编程门阵列 (FPGA)。
在车载功能的数量和先进性与日俱增的同时,设计和管理这些系统变得日趋复杂,汽车制造商认为有必要采取有效方式来解决这一难题。其结果就是当今 AUTOSAR 和 ISO 26262 两大标准都在影响着实际汽车 ECU 软硬件系统的架构、设计和部署方式(见侧边栏)。
2003 年由多家汽车制造商共同制定的 AUTOSAR 标准旨在为分布于车辆中的 ECU 定义标准的系统软件架构。而 ISO 26262 标准的目的则以功能安全性为中心,实质上是以避免或检测并处理故障为目的,从而减轻故障影响并防止出现对任何既有的系统安全目标的违反行为。随着全新的安全关键功能(比如驾驶员辅助或动态控制)的推出,功能安全性已经成为汽车开发中的关键问题之一。ISO 26262 标准于 2011 年批准生效,可为软硬件的安全开发提供支持。
因此,整个ECU 的设计和开发流程由需要系统性进程的标准进行管理。我们的工作就是设计一款高性价比嵌入式计算平台,采用可重配置硬件技术实现优化的系统架构。
系统架构
AUTOSAR 和 ISO 26262 标准主要从软件开发的角度着眼,面向的是基于微控制器单元的计算平台。但是,硬件/软件联合设计和可重配置计算技术的应用可为这个领域带来众多优势。虽然标准的 MCU 往往是汽车 ECU 硬件平台的最佳选择,但随着新型 FPGA成本的不断降低,加上部分 FPGA 产品内部集成有硬核处理器,使得 FPGA 器件也成为这个市场中值得广泛应用的理想解决方案。此外,汽车中不断集成新的嵌入式功能的趋势也提出了对并行计算架构的需求。这在当今的车载信息娱乐领域尤为明显,在这种领域中高速数字信号处理正在敞开大门迎接 FPGA 技术。像赛灵思这样的可编程逻辑供应商和像 MathWorks 这样的 EDA 工具厂商已对这个领域表现出明显的兴趣。
为了在汽车应用中发挥可重配置硬件的全部优势,我们将以关于部署最终用户功能的汽车计算网络中最为重要的 ECU 之一——“车身控制器模块”为重点,通过使用案例展现这种技术的潜力。该ECU也称为“车身域控制器”,负责综合和控制车辆中主要的电子车身功能,比如挡风玻璃雨刷/喷水系统、车灯、摇窗器、引擎点火/熄火、车外后视镜和中控锁。我们的目标是在FPGA平台上设计出一款配备有安全关键功能且符合 AUTOSAR 的 ECU 系统。
实际情景
如果汽车制造商要想经济高效地管理日益复杂的车辆功能,经 AUTOSAR 提倡的 ECU 系统架构的标准化则是必由之路。它能够实现分布在 ECU 中的各项功能的高度集成和软件组件的重复使用。AUTOSAR 的主要目的是定义一个统一的 ECU 架构,让硬件与软件分离。这样 AUTOSAR 通过定义硬件无关的接口,可提高软件的重复使用。换句话说,如果按照 AUTOSAR 标准编写的软件组件,只要正确集成到符合 AUTOSAR 标准的运行环境中,就能够在任何厂商的微控制器上运行。
这项功能给汽车制造商带来了更高的灵活性。由于 AUTOSAR 标准内在的即插即用特性,汽车制造商可以在整个汽车平台上以透明的方式更换不同供应商开发的相同软件模块的各个版本,且不会给汽车中其余功能的发挥造成负面效果。最终硬件和软件实现彼此高度独立。这种分离是通过标准软件的 API 将抽象层互联实现的。图 1 是 AUTOSAR 定义的功能层的分解图。
图1 从 MCU 到应用层的 AUTOSAR 分层模型
底部以黑色表示的是硬件层或物理层,由 MCU 自身(即 CPU 和与其相连的部分标准外设)构成。微控制器之上是基础软件(BSW),分为三层:粉色的微控制器抽象层 (MCAL)、绿色的 ECU 抽象层 (ECUAL) 和复杂驱动程序、紫色的服务层(SRV)。这三层经组织形成了多个列或协议栈(存储器、通信、输入/输出等)。
紧贴硬件组件的是微控制器抽象层。正如其名所示,该层是 MCU 的抽象。该层的目的是提供一个硬件独立的 API,负责处理微控制器中的硬件外设。微控制器抽象层的上一层是 ECU 抽象层,负责抽象 ECU 开发板上的其他智能器件,一般直接与MCU接触(例如,系统电压调节器、智能交换控制器、可配置通信收发器等)。接下来的第三层是服务层。该层基本具有硬件独立性,其作用是处理所需的不同类型的背景服务。例如网路服务,系统看门狗的 NVRAM 处理或管理。通过这三层,AUTOSAR 定义了一套基础软件功能。这套软件功能在特定的硬件平台下支持着汽车 ECU 各高级抽象层的所有功能。
第四层是运行环境 (RTE),为应用软件提供通信服务。它由可从上面的 BSW 层和应用层 (APP)共同访问的一套信号(发送器/接收器端口)和服务(客户端和服务器端口)构成。该 RTE 从基础软件中抽象出应用,明确地勾勒出将通用的可交换软件代码 (APP))与特定的硬件相关代码 (BSW) 分离的软件协议栈架构。换句话说,RTE可将软件应用与硬件平台分离。因此运行在 RTE 上的所有软件模块都具有平台无关性。
在 RTE 之上,通过应用层,软件架构方式从分层变为以组件为基础。功能主要封装在软件组件 (SWC) 中。因此,完成 AUTOSAR 软件组件接口的标准化是支持各项功能跨不同车辆平台的ECU实现可扩展性和可移植性的中心环节。除复杂驱动程序外,AUTOSAR 标准明确地规定了这些组件的 API 及特性。SWC 仅通过运行环境与其他模块(ECU 间或内部)通信。
随着 ECU 不断集成越来越多的功能,FPGA 器件成为了单核或多核MCU 的明智替代。通过从总体上把握 AUTOSAR 的不同层次,可以预见设计人员将这种架构部署在可编程逻辑中所能带来的优势。下文将更深入地介绍我们的设计如何实现基于定制静态硬件(基于闪存或SRAM 的 FPGA 技术)的解决方案,然后将这种方法延伸为为一种运行时可重配置的硬件实现方案(基于 SRAM 的部分可重配置 FPGA)。
基于 FPGA 静态硬件的 ECU 设计
AUTOSAR 架构非常适合由 CPU、存储器和可编程逻辑组成的嵌入式系统。ECU 平台需要一个 CPU 或主机处理器来管理应用并处理分布在应用层的软件组件中的不同功能。同时,MCU 层和部分基础软件层可以在可编程逻辑结构中的硬件中综合。因此,除了能够实现与 CPU 相连的标准外设,其它定制外设和协处理器也能够在硬件中并存,并在软件中完全或部分地加以管理。
另外从功能安全的角度来看,专用协处理器或内核处理器也非常适用,因为用它们实现功能可让硬件从源头避免干扰,即便要求冗余性,也能给系统设计带来高灵活性。另外,居于中间的 RTE 层可以在分布于 FPGA 中的 RAM 模块中,或者在嵌入在器件逻辑单元中的触发器中以及外部存储器中综合。而且,RTE 信号接口经简单设计就能够同时进行读写操作(通过单端口存储器)或限制架构仅进行读操作或者写操作(通过配有两个独立读写端口的单个双端口存储器),以防范干扰,比如 AUTOSAR 所定义的彼此对应的发送器和接收器软件端口。
图2 将 AUTOSAR ECU 架构移植到 FPGA 平台上
建议将基于 MCU 的 AUTOSAR ECU 架构移植到可扩展处理平台 (EPP) 或者 FPGA 器件上,并在各层中确保清晰的系统分区,如图 2 所示。位于 RTE 层以下的有操作系统 (OS)、存储器协议栈、通信协议栈、I/O 协议栈等。位于 RTE 层以上的是软件组件,它们用于实现应用并通过 AUTOSAR 接口与 RTE 进行通信。
由于 AUTOSAR 架构内在的复杂性,需要功能强大的嵌入式计算平台才能进行部署。如今,典型的 ECU 设计基于运行在 MCU 平台上的 32 位单核处理器。但是单核越来越难以提供所需的全部计算能力。而使用多核 CPU 需要通过多处理器总线和仲裁机制共享程序/数据存储器,往往会导致高度复杂的解决方案,造成性能劣化。
作为这种方案的替代,我们提出了一种基于可编程逻辑的设计。这种设计只采用一个单核处理器来发挥主机 CPU 的作用,但配有更智能的外设、协处理器乃至从处理器。所有这些计算单元都可以在 FPGA 架构中例化为新的软核处理器,比如赛灵思 PicoBlazeTM 和 MicroBlazeTM,从 FPGA 的专用 RAM 模块运行自己的代码(各个软核处理器均分别配有专用程序存储器),此外,也可例化为定制的硬件加速器。两种方式的拓扑架构均由一个主机 CPU 和分担 部分CPU 任务的智能外设构成,从而可降低系统复杂性。这样,主机 CPU 负责管理软件中的整个应用层,而定制外设则负责管理 BSW 层,这两者以并行的方式彼此独立地自动运行。此外,这种外设设计的方法的优点还在于能够让主机 CPU 的软件执行更加线性化,即外设不会通过中断服务程序产生过多的请求 CPU 关注的中断。图 3 显示了这种系统的方框图及其对应为 FPGA 器件中综合的功能单元的组件细分情况。
图3 在 FPGA 中部署的汽车 ECU 方框图
FPGA 方法能够实现与多处理器平台相媲美的系统性能,且和单核处理器一样简单易用,这主要归功于采用了可与主机处理器并行处理的功能强大的、自动化定制协处理器。
这种方法能够实现与多处理器平台相媲美的系统性能,而且就软件开发和维护而言,和单核处理器一样简单易行。通过使用专用硬件构建可与主机处理器并行处理的功能更强大的自动化定制协处理器,就可实现这种最佳平衡。
从概念上来说,可以通过将这些系统架构用 RTE 接口划分为顶层和底层两个彼此独立的主要层次来要简化设计。顶层相当于 AUTOSAR 的应用层,由负责管理车辆中最终用户功能的软件组件构成。而底层则由硬件和基础软件乃至 RTE 链路构成。应用层从数值上来说,可代表约 90% 的车载高级功能,而且所有 RTE 以上的源代码都可重复利用。
同时,底层包含能够赋予顶层灵活性和多用性的全部功能。这即是说,底层可完成特定硬件平台上所有可重用功能的定制化。这样,顶层从本质上说是通过以有限状态机 (FSM) 形态实现的算法来实现对某些车辆负载、传感器和制动器的控制的一套软件功能。这些算法由 CPU 循环执行,并在操作系统控制的软件任务中调度。
底层还负责实现 CPU 连接的所有标准外设的驱动程序,例如 A/D 转换器、PWM 控制器、定时器或者存储器控制器,从而让顶层的抽象具备可行性。底层负责管理那些需要得到实时响应的事件。在这方面可编程逻辑能够起到一定的作用。其构想为:让主机 CPU 将应用当作一个简单的免受通常硬件造成的外部事件影响的软件功能序列来处理,但要定期读或写 RTE 信号,让 FSM 进行相应的调整。底层对硬件事件进行隐藏与管理,然后在 RTE 中对其进行预处理并更新特定信号,或作为结果,根据自身具体任务安排实时地执行特定的行动。
将定制硬件控制器连接至系统 CPU 可以最大限度地降低对共享资源的需求,只要这些控制器能够自动运行。从操作系统的角度来看,这样做有助于降低系统的复杂性(避免仲裁、时延、重试机制等)。
采用专用硬件的另一项优势在于可以更简便地实现一般在软件中通过多线程才能实现的某些功能,因为硬件较软件内在更具并行性。另外,这种灵活的硬件能够采用并行和流水线硬件设计,将算法计算强度高的部分进行硬连接,而不是采用冯·诺伊曼 (Von Neumann) 计算机所采用的序列软件方法,从而减少执行时间。
用户可以将在 MCU 和 BSW 层中综合的外设和硬件协处理器设置成高智能化水平,以释放 CPU 时间,从而简化车载 ECU 的软件。
随着 ECU 平台日趋复杂化,系统所需的 I/O 线路数也在不断增加。在这方面 FPGA 较微控制器有明显的优势,因为 FPGA一般能够提供多得多的用户引脚数。这一点一般与基于 MCU 的 ECU 有关,因为这种 ECU 需要采用执行并-串数据转换的外部芯片(比如数字移位寄存器或模拟多路复用器)来扩展 ECU 的输入和输出。采用 FPGA 可以绕开这些外部组件,进而缩减材料清单成本以及电子开发板的 PCB尺寸。
先进的 FPGA 器件已经集成有模数转换器。这个特性对汽车设计意义重大,因为许多 ECU使用模拟信号(比如电池电压)来实现所需的部分功能。在可编程逻辑器件中集成模数转换器为 FPGA 开辟了新的应用领域。
与 MCU 类似,FPGA 也提供远程更新功能。但在这里需要提醒的是,下载到 FPGA 中的位流不仅涉及到软件代码,而且与硬件电路也息息相关。这意味着就算产品已经进入量产阶段,仍然可以通过系统更新或升级来修改硬件设计。汽车产业非常欣赏这种灵活性,因为它能够在产品发布后修改缺陷(软/硬件均可)。
在任何嵌入有符合 ISO 26262安全相关要求的功能的 ECU 中,涉及该实现方案的软硬件必须根据其分类满足一定程度的保护要求。从软件的角度讲,它必须体现出抗干扰能力,即运行在 ECU 中的非安全相关代码一定不能危及同一 ECU 中安全相关类的代码的运行。这种隔离是保证安全相关功能与非安全相关功能在同一处理器上正确并行运行所必须的。一般来说,在可编程逻辑中管理这些指标比在 MCU 中具有更大的灵活性。
对于面向功能安全的存储器保护策略,有必要确保只能授权的安全软件组件有权对特定安全相关信号进行写入存取。在 MCU 器件环境中,存储器分区提供了一种故障约束机制,能够将软件应用彼此分离,避免其间发生数据错误。可编程逻辑很有可能实现一种更有效的自我保护机制。可编程逻辑可以通过专用的单个双端口存储器来管理与安全信号相关的 RTE 缓存,这样数据从写端口写入,从读端口读取。采用这种方法,可以采用专用的硬件控制器给写入或读取这些来自软件侧的信号设置不同的约束条件。这种方法也可以采用寄存器来实现。
能够在 ECU 系统中导入定制硬件解决方案是 FPGA 的一大优势,特别是对安全相关的功能而言。具体而言,对 I/O 引脚和 GPIO 控制器,在安全功能中涉及的引脚布局可以组合成定制的 I/O 端口,仅供 ECU 中的安全组件访问,与器件的其余引脚分离。这是将系统的安全相关引脚与非安全相关引脚分开的理想办法,从设计上避免了干扰的发生。任何对非安全引脚的访问都不会破坏安全引脚的状态,因为安全引脚只受安全相关代码的管理。这种构思的具体描述见图 4。
图4 软/硬件联合设计的安全架构,可将安全相关端口和非安全相关端口隔离开来,以保证无干扰
另外,还能够根据应用或处理该应用的软件组件的需求定制每个 GPIO 端口的大小,从而避免将 GPIO 端口转换为不同应用共享的物理资源,如MCU端口的情况。用这种方法,FPGA中每一个由不同软件组件(比如车窗升降器、雨刷、外后视镜等)管理的应用都能够将自己特定的端口映射到系统存储映射中特定的寄存器。这在 MCU 平台上无法做到,因为 MCU的端口有固定尺寸(一般为8、16 或 32 位宽)且按字长寻址,而非按位寻址。因此在采用 MCU 的情况下,这种控制寄存器在程序执行的时候变成了有多个 SWC 访问的共享资源。
我们可以把用于 GPIO 控制器的策略扩展用于其它标准外设。这样 AUTOSAR 借助 SWC 概念在顶层提倡的功能分区和隔离思路也可以在可编程硬件的帮助下推广运用到较低层的资源上。这种技术如果采用基于标准 MCU 器件的静态硬件解决方案是无法实现的。
我们上文介绍的用于 MCU 标准外设的隔离策略也可以用于安全功能的各个通道或数据路径。这一特性尤其适用于按 ISO 26262 标准的 ASIL 分级组织的精细分类安全目标(见侧边栏)。此项功能可用于将各个通道或者数据路径分解成较低 ASIL 级别的冗余分区,这样每一个通道或路径都以冗余方式运行,后续根据各自的新级别予以实现。这种基于冗余的安全策略是选择可编程逻辑的又一理由,因为可编程逻辑能够在同一器件中多次例化多个相同、独立的处理引擎。另外,满足某个 ASIL 级别的要求用架构方法(硬件)往往比用抽象软件能够更轻松明晰地证明,特别是像抗干扰这样的功能。C 编程语言中的栈溢出或是数据指针处理不当可能会给系统带来出乎意料的安全性问题。
这种基于冗余的安全策略是选择可编程逻辑的又一理由,因为可编程逻辑能够在同一器件中多次例化多个相同、独立的处理引擎。
可编程逻辑的灵活性及其对功能安全的适用性还带来另一项设计优势,就是可以采用三模冗
余 (TMR) 策略。这是航空航天应用中用于缓解单粒子翻转 (SEU) 风险的常见方法。这种缓解方案由三个相同逻辑电路构成,并行执行相同的任务,对应的输出由一个多数表决电路进行比较。采用硬件实现这种策略效率很高。
另外,在这个高度关注成本和功耗的市场上,赛灵思 Zynq-7000 EPP等一些可编程逻辑器件能够支持多项降低系统总体功耗的功能,其中的部分功能是从 MCU 继承而来。像处理系统的仅加电模式、休眠模式和外设独立时钟域这样的功能能够大幅降低器件待机期间的动态功耗。
某些可编程逻辑器件在结构中配备有硬核处理器,便于设计人员第一步先用软件开发整个系统功能,就像他们寻常在 MCU 平台上所做的一样,随后逐步地在设计中增加硬件,将部分设计移植到可编程逻辑资源。这种方法能够让设计人员为解决方案开发出不同的版本,而且与纯软件方法相比,能够实现在定制硬件中综合部分功能的优势。
在运行时可重配置硬件上进行 ECU 设计
在探讨完毕借助可编程逻辑在静态硬件和软件上实现 ECU 的优势后,我们接下来探讨采用基于 SRAM 并具备运行时部分可重配置功能的 FPGA 设计 ECU。部分可重配置技术能够为汽车设计人员提供更多优势。
事实上,其中的一大优势是如果 FPGA 包含有不必在启动时(如在 ECU 唤醒或加电)配置的部分可重配置区域,可以缩短系统启动时间。不支持动态部分可重配置的 FPGA在加电时需要配置所有的 FPGA 资源,但运行时可重配置 FPGA 只需下载部分位流进行部分重配置。
由于当今先进的 FPGA 器件具有巨大的容量,故在加电时下载完整的位流会引起可观的配置时间开销。运行时部分可重配置技术能够显著地缩短这种配置时延。在那种情况下,有可能在加电时只配置一个最起码的子系统(即引导载入程序和立即需要的部分系统应用),让系统其余部分保持待机状态,直到有必要初始化为止。如果系统在加电或唤醒时需要快速响应,可将这种启动工作划分为两个阶段,以加快初始化过程。为此,可将系统架构分解为一个静态域和一个或者多个部分可重配置域 (PRR)。静态域涵盖负责执行启动过程的系统(一般来说是主机 CPU),以及可重配置引擎和通往位流库的数据链路。由特定部分位流描述的其他域可按应用需求,随后下载。
另外,如果禁用 PRR 域,则可以让器件的功耗与禁用区域部分成比例降低。在使用汽车电池供电的 ECU 中,节能模式尤为重要。为此,在车辆未使用时(即处于休眠模式时),车载 ECU 可使用低功耗模式,以让 ECU 功耗保持最低。同样,可以在不需要的时候使用空白位流禁用 FPGA 的部分区域,减少逻辑活动,从而降低动态功耗。
在采用运行时可重配置逻辑的系统中,汽车设计人员还可使用一种从航空航天应用中借鉴来的重配置技术。重配置(configuration scrubbing) 可以将系统从因单粒子翻转 (SEU)和电磁干扰造成的 SRAM 故障中恢复过来。定期重新配置硬件外设可保证系统在出现故障时自我修复。另外,这样也可以将故障的最大时长限制在重配置时间间隔内。这种技术也通常运用在软件中,作为一种常见的抗干扰保护措施,例如 MCU 外设的定期重配置。
另一项运行时部分重配置技术的灵活性带来的有前景的功能是在 FPGA 资源的某个特定二维位置出现永久性或不可修复的电路故障,比如影响到特定逻辑单元或 RAM 模块时,可通过功能重定位实现故障修复。一旦发现有硬件或软件故障出现,可以在运行中将所需的功能自动重定位到同一 ECU 中的可编程逻辑器件的其他部分。虽然这个构思是可行的,但这项功能还没有得到当今的自动化工具的完全支持。
适用于汽车产业的运行时可重配置计算技术最强大的特性无疑是共享的硬件资源上功能的实时时分复用。可以对由 ECU 中的相同计算资源处理的功能性应用进行时间共享,如果应用间相互独立(例如,当车辆向前直行驶时使用行车道偏离预警功能,倒车时,则切换到后视摄像头视图或停车辅助应用)。这种设计思路可以帮助降低此类嵌入式系统的成本和复杂性,释放空间,减轻车身重量。
这种设计思路还可用于实现特定算法在不断变化的环境条件或者外部条件中的自适应性。例如,给定的引擎控制算法可通过部分可重配置自主调整部分硬件模块,以在任何运行温度下或电池电压下实现理想的运行。同样的理念对通信系统也适用,比如可以设计某种加密控制器,能够在运行中运用特定的参数函数制定专门的安全等级。另如,可以设计某种 ECC 加密器/解密器 IP,用于在高噪声通信信道中检测和修改数据传输错误,能够根据感应到的信噪比动态适应其硬件架构。