ARMが発表した新しい安全性を高めた次世代CPUコア「Cortex-R52」は、冗長構成をとりやすくしたCPUコアである。これまでクルマの安全といえば、ISO26262規格や、ASIL-A/B/C/Dなどの規格が話題となっていた。しかし、実際にはほとんど話題に上らなかった冗長構成で安全性を確保してきた。Cortex-R52は、ARMが自身のコミュニティブログで語っているように、「自律走行車を実現する最先端の機能安全プロセッサ(New ARM Cortex-R52 enables autonomous systems with the highest functional safety standards)」と表現されている。
ARMはクルマの安全性を2つの要素、すなわちランダムエラーとシステム的な故障からなると考え、この両方に対処しようというCPUコアが今回のCortex-R52の考え方だ(図1)。ISO26262やASIL-A/B/C/Dという規格は、システム的な故障を防ぐための安全基準である。これらに準拠したプロセッサやECU(電子制御ユニット)はシステム的な故障には対策ができているといえる。しかし、実際にクルマを走行させている時にエンジンやあるいは隣接レーンのトラックのエンジンなどのノイズによって、ECUというコンピュータが正常に働かなくなる恐れがある。これがランダムエラーだ。
常にコストと戦っているトヨタ自動車でさえ、ミッションクリティカルなブレーキなどの機能では、ECUを二重化しているという。ECUを2台設けることはその部分のコストが2倍になることだ。コストがかかっても安全を優先してきた。
今回ARMが開発したCortex-R52は、従来のCortex-R5の冗長構成をさらにデュアルプロセッサ構成にしつつ高速化を図ることでクルマメーカーにとってのコストダウンにつなげる、というメリットがある。図2にその基本的なコンセプトを示しているが、安全規格に準拠したタスクAおよびBのアプリケーションは分離されており、リアルタイムOS(RTOS)上でいずれも走る。タスクA、B共に同じ種類のプロセッサコアをデュアルで用いて実現する。デュアルコアを用いて、2つのCPUコアに同期をとりながら同じ仕事をさせ、その処理結果が同じだった場合のみ実行する、という冗長構成を採っている。この冗長構成を「デュアルコア・ロックステップ」と呼んでいる。
2つのCPUコアを管理・判断するのがハイパーバイザであり、モニターは、動作を見ている。ハイパーバイザは、ソフトウェアの分離を管理し、タスクの分離を容易にしている。
従来のCortex-R5は、タスクAとBをハイパーバイザとモニターで監視していたが、R52ではタスクCとDも活用して、並列動作を行い、動作速度を上げることができる。各タスクというアプリケーションは互いに分離されており、リアルタイムの仮想化技術を使っている。さらに、RTOSを異なる2つに分けて、タスクA/Bと、タスクC/Dのグループがそれぞれ違う処理を実行するという仮想化も行うことができる。クワッドコアの冗長構成であるため、冗長構成を仮想化によって2つ取ることができるようになる。ただし、これらは、顧客のパートナーの要求によってARM側が構成を変えるとしている。
ARMは、従来のデュアルコアの冗長構成Cortex-R5と、今回のクワッドコアの冗長構成Cortex-R52との性能比較を行っている(図3)。
従来のCortex-R5では、デュアルコア・ロックステップの冗長構成だったが、デュアルコア1対だけだったために1つのジョブしかできなかった。Cortex-R52はこの冗長構成のデュアルコアを2つ備えた並列プロセッサ動作も可能であるため、性能はR5よりも向上している(図3)。ベンチマーク性能はR5の最大1.36倍、割り込みが2倍、コンテキストスイッチが14倍向上している。コンテキストスイッチとは、複数の処理を1つのCPUで共有できるようにするためにCPUの状態を保存したり復元したりする機能。マルチタスクや割り込み機能には欠かせない。
Cortex-R52の機能安全はこれだけではない。自動車の安全規格ISO26262に準拠し、冗長構成を活用して安全基準の最高峰(自動運転可能レベル)のASIL Dにも対応できる。加えて、バス配線の保護機能もある。これはメモリのECC(誤り検出・訂正機能)をバス配線にも拡張し、正しいデータが送受信されるようにデータを保護する機能。ECCでは1ビットエラーおよび2ビットエラーにも対応するという。
ARMはこのCortex-R52およびCortex-A、Cortex-Mシリーズをそれぞれ組み合わせた自律走行車の基本システムを提案している。今回の安全性を重視したCortex-Rはリアルタイム性を実現しやすいコア製品シリーズ、Cortex-Aは演算を優先するマルチコアシステム向け製品シリーズ、Cortex-Mはマイコン用など制御を重視した製品シリーズである。これをうまく組み合わせると、自律走行車ができるとして、図4のブロック図で説明している。
自律走行では、まずいろいろなセンサからの信号情報(Sense)を集めるが、ここでは制御用のCortex-Mを使う。カメラやレーダー、LIDARなどのセンサからの信号を整理した後、その信号の意味を理解し、クルマの周囲にある物体をクルマなのか人なのか自転車なのか、などを認識(Perceive)する。ここでは演算リッチなCortex-AやGPU「Mali」を使う。その結果を受け、ブレーキをかけるのかハンドルを回すのかをリアルタイムで判断し決める(Decide)。これにCortex-Rを使う。そして、ブレーキをかける場合にはブレーキパッドを動かすためのモータを駆動するのがアクチュエータ(Actuate)であり、この制御用にはCortex-Mシリーズあるいはリアルタイム性(数ミリ秒以下)を重視する場合はCortex-Rシリーズを使う。
Cortex-R52は、従来のR5よりもリアルタイムで判断とアクチュエータの動作を実行できる。リアルタイム性を重視するパワートレインやシャシーに使う場合には、同じ種類のプロセッサコアを4個用い、並列動作の冗長構成によって、より早くより安全に動作する方式を使えばよい。図3で示したように、R5よりも性能が高いわけだから、よりリアルタイム性が要求される応用にはR52が適している。
図4の自律走行車を実現する場合には、センサ+Cortex-Mシリーズを用い、マルチコアCortex-Aシリーズで認識し、Cortex-R52で判断とアクチュエータ制御を行えば図5のようになる。演算性能を重視する認識作業には、Cortex-Aシリーズをマルチコアで使って高速演算を行い、リアルタイムで判断とアクチュエータを行う作業では安全設計のCortex-R52で行う、というヘテロプロセッサコアのSoCをARMは提案している。
ARMは、ミッションクリティカルな応用に向けたCortex-R52をクルマ用に提案しているが、工業用でも冗長構成が必要なシステムにも適用できるとみている。その一例として、絶対に間違いが許されない投薬管理システムにも応用できるとしている。