通过FPGA设计安全的高级辅助驾驶系统
2015-08-27
随着道路上汽车数量的增加,我们需要更多的技术来进一步减少交通事故。过去几年,基于雷达和摄像机的新系统功能的出现使驾驶更加安全。很多高级辅 助驾驶系统(ADAS)应用,如自动巡航控制、道路偏离报警、交通信号标志识别等,已经成为车辆上非常方便的功能,但对车辆行为没有影响或影响很小。然 而,现在这些技术开始在车辆控制中扮演积极主动的角色,如车道辅助保持(LKA)或自动紧急刹车(AEB)等,以帮助实现减少交通事故的既定目标。这带来 的挑战是,当系统出现故障时,必须确保系统不会对车辆和环境造成更大的损害。
本文以单前端摄像机系统为例,对其进行深入分析,介绍它如何通过使用AlteraCycloneVSoC确定关键数据流。在现有的诊断机制下,如何找到故障;并提供一些诊断实例,通过灵活的可编程FPGA,在系统级实现诊断。与使用通用微处理器、数字信号处理(DSP)和其他平台相比,在某些情况下,针对实际应用使用定制诊断方法可以提高应用性能。
ADAS应用中的FPGA
上文提到的很多应用都有相对较高的计算需求,需要从雷达或视频图像中提取特征信号,确定目标及其踪迹。这通常要求高性能多核CPU体系结构。这些CPU能够灵活地对特殊事件重新编程,但缺点是效率较低,因为有些功能并非必需或很少使用。
功耗是需重点关注的另一因素。很多系统位于后视镜前面的挡风玻璃下面,直接暴露在阳光下,或位于散热器前保险杠中,因此无法高效地散热。当使用高频运行 的多核通用CPU体系结构时,很难满足性能和功耗要求。使用FPGA可同时解决这些问题。FPGA的功耗通常比标准逻辑高,但与通用计算体系结构相比,高 效的定制实现某一算法实际上降低了功耗。FPGA的另一优点是,当实现流处理算法后,可以避免在内部和外部存储器之间传送数据。若使用外部DDR存储器进 行数据处理,实际功耗会非常大。
就性能而言,流处理也降低了某些应用中遇到外部存储器带宽问题的风险。FPGA内在的可编程特性带来了 通用计算体系结构所具有的某些优势。它甚至支持系列产品的在现场更新,实现在系统编程。在某些情况下,基于FPGA开发,要比基于CPU的高性能芯片体系 结构容易得多。由于SoC越来越多,因此,FPGA能够很好地结合这两种体系结构,例如AlteraCycloneVSoC系列,它在一个芯片上集成了通 用CPU系统和FPGA架构。CycloneVSoC实现了两个ARMCortex-A9CPU,支持通用微控制器和处理器常用的很多外设。
性能安全
与目前市场上的其他解决方案相比,FPGA更加容易满足应用的功能安全需求。ADAS需要满足特殊的功能安全要求。2011年,发布了载重3.5吨以上 的ISO26262标准,以降低系统出现故障后造成危险状态的风险。这一标准要求实现严密的设计过程,在应用执行过程中探测随机硬件故障,以减少系统性故 障。它涉及到一个系统及多个系统的分析和开发,列出了系统中使用的每一硬件组件的指南(包括这些硬件组件上运行的软件),设定了产品整个安全生命周期中的 要求。
应用开发人员定义了专门的安全目标,针对每一目标分配了相应的汽车安全完整性等级(ASIL)。对于应用中最高级别的ASIL,通常定义了每一组件从开发直至工作到寿命终了时应满足的要求。图1显示了ASlL目前的范围,来自ADAS需要遵守的客户需求。
图1ADASASlL市场需求
ASIL-B是市场上的最低级别,而某些应用则要求采用ASIL-D以支持某些功能。越来越多的ASIL有更严格的要求。在某些具体实现中,组件的通用 ASIL或者条目(系统)等级都会带来不必要的复杂度,对开发成本和进度有影响。建议应详细地了解应用需求。这一般通过分析系统概念,并从中得出安全概念 和要求来实现。还可以把应用分成几种不同的步骤,具有不同的ASIL,更容易实现,效率更高。
ADAS单前端摄像机应用系统概念
本文举例的前端摄像机应用使用了ADAS中常见的一个图像传感器。图2显示了系统的整体框图。
图2高级单前端摄像机ADAS
一个图像传感器连接至图像处理器,即AlteraCycloneVSoC。信号处理链和数据流被分成4部分:
◆通过把图像变换成更实用的表示,在像素级上进行底层处理。
◆对行图像或者块图像进行中间级处理,使用相应的算法,例如Sobcl滤波器或者Canny边沿探测算法等,提取出边沿等特征。
◆进行高级处理,提取出每一帧的数据,探测目标并分类。
◆跟踪识别出的目标,决定在危险环境下是否需要采取措施,例如刹车或者换挡电子控制单元(ECU)等会要求与微控制器进行通信。
在FPGA上能够非常高效地实现底层和中间级处理,但用户也可以在CycloneVSoC硬核处理器系统(HPS)的Cortex-A9处理器等CPU 上实现某些中间级处理。高级处理主要是控制代码,可以映射到HPS中的一个或两个Cortex-A9上。处理链的最后一步是目标跟踪和判决,可以在外部微 控制器上完成这一步。
在整个处理过程中,每一步将输入数据进行简化得到更有意义的数据,数据减少意味着提高了安全临界。因此,底层实现 可以分成质量管理(QM)或底层ASIL(如ASIL-A)。这样的原因是,一个像素期间引入的故障对后续算法性能的影响很小,可以忽略。在这个例子中, 假设中间级处理符合ASIL-A或者ASIL-B,识别目标并进行分类的高级处理应符合ASIL-B。对目标进行分类后,生成目标表,提供给微控制器,进 行目标跟踪和判决。这是信号链最关键的部分,我们假设它应该符合ASIL-D,这对汽车的行力有直接影响。
组件应用功能
图3显示了单前端摄像机系统实例的总体结构图。由一个外部电源管理电路为CycloneVSoC提供电源。当供电电压不在额定工作范围内时,单独的电压 监控功能会产生复位。外部非易失存储器连接至四路串行外设(quadSPI)模块,用于系统启动过程中装入应用程序并配置FPGA。执行应用代码,存储数 据和图像帧时,我们使用DDR存储器。通过SPI连接外部微控制器,进行目标探测和最终判决,通过CAN总线接口与汽车基础结构的其他部分进行通信。
图3单前端摄像机系统实例
图4CycloneVSoC模块视图
图4显示了单前端摄像机应用中的图像处理器模块。由于具体实现各不相同,因此,并没有详细介绍FPGA的具体执行过程,但是对于在更高抽象级别上介绍不同分析步骤这样的目的来说已经足够了。
图像传感器配置
假设由HPS系统对传感器进行配置。图5显示了图像传感器配置涉及的模块。一 个或者两个Cortex-A9CPU执行代码,数据通过I2C模块从DDR存储器传送至传感器。DDR存储器和L2高速缓存的单错误纠正双错误探测 (SECDED)纠错码(ECC)功能保护相关的存储器。奇偶校验功能保护CPU的L1高速缓存。这包括TAGRAM,以及全局历史缓冲和分支预测单元的 分支目标访问高速缓存。传感器配置相关的逻辑(CPU、L3互联、I2C等等)只能使用一次,没有特殊的诊断。要探测可能出现的故障时,可以采用写入和回 读方法。例如,CPU0向传感器写入配置数据,CPU1将其回读。后续进行写入数据和回读数据对比,能够探测到写会话过程中引入故障。一个CPU写数据, 另一个CPU读回数据,这样做的优点是能够探测到其中一个CPU中的永久故障。只有一个CPU用于写读会话时,可以采用各种软件来探测永久故障。但是,由 于需要对CPU内部功能进行详细的分析,增加了软件的复杂度,因此,这实现起来难度很大。
图5图像传感器配置涉及的模块
汽车中使用的某些传感器支持在每一图像帧的辅助扫描线中传送某些配置寄存器数据。通过这一功能,可以检查每一帧的传感器设置,不需要通过I2C接口来读取寄存器。不需要CPU开销,传送帧数据时就可以在FPGA中实现这种检查。
上面所有的配置寄存器测试的优点是,不仅覆盖了CycloneVSoC故障,而且还有传感器外部接口或者传感器内部带来的故障。某些应用会使用更复杂的 处理器体系结构,在总线上进行内部诊断。但是内置诊断机制不一定覆盖I2C模块中的故障和外部故障,仍然需要考虑这些故障,采用与前面讨论的相似的机制。 在这一场景中,增加的处理器诊断功能带来的优势有限。
底层图像处理
图6显示了图 像处理级涉及到的模块。在很多情况下,图像传感器通过并行视频接口连接至图像处理器。对于CycloneVSoC应用,可以例化Altcra视频和图像处 理套装的视频端口,用于接收来自传感器的数据。然后,将这些数据传送至图像预处理模块。数据处理完成后,被写入到DDR存储器中。
图6底层图像处理级涉及到的模块
大部分图像传感器含有传送定义好的测试帧的功能,不需要传送正常的图像数据。定义好输入数据后,也就定义了图像处理模块的输出数据。然后进行后续测试。 例如,通过对输出数据进行循环冗余校验(CRC),找到系统中出现的任何永久故障。这种测试覆盖了整个数据通路中的永久故障。它支持对外部连接问题进行测 试,测试视频端口和图像处理模块中的问题,以及DDR存储器数据传输过程中出现的问题。检查永久故障的另一方法是在FPGA架构中实现测试码型发生器,可 以将其复用到视频端口的输入通路上。定义好的测试码型覆盖了整个通路中的很多故障。
某些图像传感器还具有在每一帧中传送帧计数器等其他 功能。这一功能有助于探测帧间隙,或者像素时钟、帧同步问题等。除此之外,视频端口实现了每一行像素数以及行数计数器功能。如果计数器与设置好的数值不一 致,则产生一个中断。这也可以用于探测像素时钟,以及垂直和水平同步问题。
还应该探测到FPGA中一个模块传输数据时数据的变化。前面提到的测试码型或者测试帧方法涵盖了大部分永久故障,但是,探测不到瞬时故障。实现各种 图像流水线时,会出现瞬时故障。使用AlteraAvalon流协议在模块之间传输数据时,可能会例化两个不同的接口,保证瞬时故障对两个通路中的数据传 输有不同的影响。不同图像流水实例见图7。
图7不同图像流水实例
在很多设计中,也需要使用存储器缓冲来临时存储数据。对于这种情况,也可以例化奇偶校验或者SECDEDECC,这是因为FPGA架构中的用户存储器已经为具体实现提供了所需的奇偶校验位。
数据最终被写入到DDR存储器之后,在传输时,应随时计算数据的校验和。可以针对每一帧或者帧中的每一行来完成这一工作。在大部分情况下,由于后面的中 间级处理可以按行或者模块来读取数据,很容易检查这些数据,因此,可以按行来进行这一工作。Altera提供了CRC引擎,可以在用户设计的不同部分来例 化它,产生流数据CRC校验和。在牛成的数据上附加校验和也能够覆盖F2H桥接和DDR控制器中可能出现的故障。然后由SECDEDECC以及校验和来保 护DDR中的数据。需要考虑的另一种故障是数据地址可能会改变。为避免覆写其他关键的应用数据,DDR存储器控制器实现了存储器保护功能,可以定义20种 不同的存储器区,它们有不同的访问权限,而主机可以访问某些特定的区域。
中间级图像处理
只查看图像中关注的特征,减少了生成数据。数据减少后,由于故障会导致后续处理步骤中丢失目标,因此,丢失特征的风险增大了,也增大了应用程序出现错误的风险。图8显示了中间级图像处理涉及的模块。
图8中间级图像处理涉及的模块
需要读回前面图像预处理级产生的数据以及存储在外部DDR存储器中的数据,以便进行各种图像处理。由于前面的数据附加了CRC校验和,因此,可以再次对其进行检查,查看数据存储在外部存储器期间是否被修改,或者传送至FPGA时是否被修改。
最好在这一处理级实现一些存储器缓冲,以便临时存储数据。可以再次针对这些存储器例化奇偶校验或SECDEDECC,实现相对较高的诊断覆盖。
探测逻辑本身的故障吋,可以把两个相同的逻辑模块放到一起,锁定它们。为能够对常见的故障进行探测,可以针对它们使用不同的时钟网络,或者运行一个具有两周期时钟延时的逻辑模块。对两个模块的输出进行连续对比,能够探测到一个模块中出现的故障。
在这一中间处理级产生了新数据后,需要再次写入外部DDR存储器。与前面的步骤相同,可以对新数据计算校验和,将这一校验和写入到存储器中。DDR存储器控制器中的存储器保护功能会探测地址故障,避免覆写其他关键的应用数据。
高级图像处理
高级图像处理阶段包括目标探测和目标分类。从软件术语的角度来讲,这一级主要是控制代码,因此,非常适合在CPU上运行。在我们的应用实例中,可以在HPS中开发这类功能。图9显示了高级图像处理涉及到的模块。
虽然实现了两个CPU,但是并没有运行在锁定模式下,即在程序执行过程中,一个CPU进行检查,另一个自动探测故障。如果一个执行安全关键代码或者 数据的CPU出现了故障,那么,应用程序应保证对计算结果进行检查。这可以通过在相同的CPU或者另一个CPU上冗余执行代码来完成。如果一个CPU出现 了永久故障,在一个CPU上相同的代码执行了两遍,那么,CPU中的故障可能会产生两次错误的结果,从而不会被探测到。可以通过实现两种不同的程序来避免 这一问题,但是,其缺点是增加了开发工作量,针对同一程序开发两种不同的版本。另一种选择是在第二个CPU上运行冗余计算。一个CPU中的永久故障不会影 响另一个CPU,因此,只要故障不是在共享资源中,那么,不需要运行不同的软件就能够探测到错误执行。运行算法两次,然后对比结果,也可以探测到瞬时故 障。对于软件在两个CPU上执行的情况,很有可能相同的代码并没有在两个CPU的同一周期中执行,因此,进行计算然后对比冗余执行的输出即可发现故障。在 不同的时间执行代码的优点是能够有效地测出常见的故障。
图9高级图像处理涉及到的模块
正如前面所提到的,由SECDEDECC或者奇偶校验功能来保护处理过程所涉及到的存储器。
而在L3互联、DDR存储器控制器、片内RAM控制器的其他逻辑中还可能会出现故障。对于较大的数据,可以采用CRC校验和来保护数据不会被修改。为中 间级处理模块生成的数据建立了校验和后,可以在用于后面的操作之前对其进行检查。对于较小的数据,存储这些数据,读回就可以确定传输是否正确。对于读取用 于处理的数据,可以读两遍,在使用之前进行对比。当数据规模有限时这不会产生太大的处理开销,但是能够很好地测出故障。
用于探测故障的其他特性包括每一Cortex-A9处理器中的存储器管理单元(MMU)、DDR存储器控制器中的存储器保护特性,以及看门狗定时器。
结论
ADAS是确保越来越拥挤的道路更加安全的下一波创新。这些系统的性能需求给现有以及未来的标准商用货架(COTS)产品带来了挑战,而可编程FPGA 在这方面有很大的优势。实现定制码型发生器或者定制看门狗定时器等专用诊断功能,能够提高对系统的诊断覆盖范围,而这些功能很难在标准产品上实现。流处理 是图像处理的第一步,减少了存储器读写操作,因此,能够减少故障的发生,降低功耗,提高应用性能。很多COTS产品在设计时并没有体现功能安全,使用具有 功能安全的平台和开发环境,与擅长功能安全的合作伙伴合作,都有利于系统的整体实现。