※本記事はInterface誌2023年4月号に掲載されたものの原稿版になります

安心・安全なプロセッサ

自分で異常を見つけて安全に動作するプロセッサをつくる方法について紹介します。
現在の車は様々なコンピュータにより走る・曲がる・止まるが制御されています。もし運転中にこれらのコンピュータに故障が起きた場合、運転手や周りの歩行者の命を脅かす事故に発展する可能性があります。このような車に搭載するコンピュータには、故障が起きにくいこと(高い信頼性)と故障が起きても人に被害が起きないこと(機能安全)が求められます。今回は、故障が起きた後も人に被害が及ばないコンピュータに使われるプロセッサやその上で動くソフトウエアの設計について紹介します。

 

機能安全って何?

人命に影響を及ぼす可能性のあるコンピュータに必要な機能安全について簡単に紹介します。機能安全という言葉の正確な定義を話し始めると難しくなってしまうので、ここではコンピュータが動作中に何かしらの故障が発生しても人に被害が及ばないように工夫することと覚えておいてください。コンピュータを構成するハードウエアとソフトウエアに何かしらの故障が起きた時(ここではソフトウエアのバグも故障と呼ぶことにします)、「故障を検出して安全な状態にする工夫=安全機構」で検出して車を「安全な状態」にしなければなりません。図1に挙げた電動パワーステアリングシステムのコンピュータを例にこの仕組みについて見ていきましょう。

このシステムでは運転手のステアリング操作量と現在のモーターのアシスト量を元に、次のモーターのアシスト量を計算します(実際はこの他に車速やその他様々な車の状態を元に制御しますが、ここでは話を簡単にします)。動作中にコンピュータ内部に故障が発生した場合、最悪のケースではステアリングが勝手にくるくる回るセルフステア状態や全く操作がきかなくなるステアリングロック状態になってしまう可能性があります。こうなると人命に影響のある大事故につながってしまいます。そこで、コンピュータ(正確にはセンサーやモーターなど関係する部品全部)のハードウエア故障やハードウエアまたはソフトウエアのバグに起因する故障(動作異常)が起きた場合、安全機構によって、それらを検出し、モーターのアシスト動作を停止して(ステアリング操作は重くなりますが)運転手が車を安全に停車(もしくは運転を継続)させることができるようにします。

図1:電動パワーステアリングシステム概略図

 

ASILとは?

もう少し機能安全についての話をします。自動車の機能安全規格であるISO 26262では、システムの故障が人命に及ぼすリスクの大きさによってASIL(Automotive Safety Integrity Level)が A、B、C、Dの4段階定義されています。Dが最もリスクの高いことを示し、C→B→Aの順にリスクが小さくなっていきます。車の中のシステムに割り当てられるASILの例を表1に示します。走る・曲がる・止まるに関係するシステムは故障したときに人命にかかわるリスクが高いため、高いリスクを示すASIL DやCが割当られています。表2に各ASILが要求するハードウエア故障を検出するカバレッジ意味する指標を示します。

表1:車載システムにおけるASIL割当例

表2:各ASILが要求するハードウエア故障を検出率の指標

ここでは各指標の細かな説明は省きますが、ご覧のようにASIL DやCが割当られたシステムでは、動作中に非常に高い確率で故障を検出することが求められます。

 

プロセッサの安全機構の例

 図2にプロセッサのロジックのハードウエア故障診断に用いられる安全機構を4つ紹介します。

①デュアルコアロックステップ診断
 2つのプロセッサコアで同じプログラムを実行し結果を比較します。診断カバレッジが高く、診断時間も短いのが特長です。

②ハードウエアLBIST(Logic Built-in Self Test)診断
 専用のテスト回路からテストパタンを入力し結果を期待値と比較します。比較的高いカバレッジが期待できますが、診断にはプロセッサを一旦停止する必要があります。

③ソフトウエア診断
 診断用のソフトウエアを実行し結果を期待値と比較します。ソフトウエアで診断内容を追加できる柔軟性はありますが、観測性の悪い回路だとカバレッジを上げるのが難しくなります。

④チャレンジ・レスポンス診断
 演算処理問題の実行を要求(チャレンジ)し、返ってきた結果の期待値比較をします。導入が容易なので昔から様々な回路の診断に使われていますが、高いカバレッジは期待できません。

このようにプロセッサだけでも色々な特長の安全機構があります。次では、どんなことに気を付けて安全機構の設計を行えばよいかについて考えてみましょう。

図2:プロセッサの安全機構

 

安全機構の設計のポイント

コンピュータの主な構成部品であるSoC(搭載されるプロセッサ含む)を評価する指標としてPPA(Power:電力、Performance:処理性能、Area:面積)が良く使われます。SoCやプロセッサ設計者はターゲットアプリケーションにとって最適なPPAとなるよう設計します。しかし、ハードウエア故障を検出する安全機構を搭載することは、PPAに悪化させるため、安全機構の設計では、PPAへの影響が許容範囲かどうかを評価しながら進めていくことが大切です。

 

表3に各プロセッサの安全機構のPPA+開発コストへの影響をまとめました。これを元に以下2つのユースケースでどの安全機構を適用すればよいか考察してみましょう。

  • ユースケース1
    ・数ミリ秒間隔で制御や診断、ASIL D要求
    ・ミドルレンジのプロセッサコアを搭載

消費電力とチップコストへの影響を許容して、高い診断カバレッジとリアルタイム性能への影響の少ない①デュアルコアロックステップ機構を使うのがよいでしょう。

  • ユースケース2
    ・数百ミリ秒間隔で制御や診断、ASIL B要求
    ・ハイエンドなプロセッサコアを複数搭載

規模の大きなハイエンドプロセッサをロックステップ構成にすると、消費電力やチップコストへの影響が大きいため、アプリケーションタスクの空き時間にハードウエアLBISTやソフトウエアで診断を行うのがよいでしょう。

表3:プロセッサの安全機構の影響分析

 

マルチコアプロセッサの診断

図3に4コアマルチプロセッサをハードウエアLBISTで診断する場合のタイミングチャートを示します。ハードウエアLBISTを実行するには実行中のプログラムのコンテキストを保存してリセットし、テストを実行、完了後にコンテキストを復帰させ処理を再開します。各コアに動的にタスク割当てを行っている場合は4コアすべてを停止し、診断を行います。各コアに固定でタスク割付している場合は、コアごとに診断することも可能です。ただし、いずれにせよ診断時間のオーバーヘッドを含めてデッドラインが守れるか?停止中の割込み処理が遅れても大丈夫か?などの影響を評価しながら慎重に設計を進めなければなりません。大規模アプリケーションで多くのタスクがある場合、このタスクスケジューリング設計が重要になります。

図3:4コアマルチプロセッサの診断タイミングチャート

 

構成変更可能な柔軟な安全機構

半導体製造プロセスの微細化によりSoCの開発費は増加の一途を辿っています。複数のシステム要件に対応できるよう汎用性を高めることがSoC設計では重要となります。このため、SoCとそれに搭載されるプロセッサの安全機構も様々なユースケースやASILに対応できる柔軟性がより求められてきます。図4に示す4コアマルチプロセッサのように、実行するタスクの要件(制御周期やASILなど)によって安全機構の構成をソフトウエアで変更できれば、様々なシステムで使うことが可能になります。

図4:構成変更可能なプロセッサの安全機構

 

安全にソフトウエアを実行するために

最後に安全にソフトウエアを実行するために必要なことをご紹介します。図5のように一般的なアプリケーションでは、ASILがついた安全関連タスクと通常タスクが共存しています。この場合、通常タスクのバグによる誤動作がASILタスク実行に干渉することを防がなければなりません。このためにプロセッサのメモリ保護機能やハイパーバイザモード、各種タイマを使って、ASILタスクと通常タスクを空間的や時間的に分離します。これらのタスク間で情報をやり取りする場合は通信データを検証できる仕組み(CRCやハッシュ値)を入れる必要があります。

図5:通常タスクからの干渉を防ぐ仕組み

 

さいごに

今回人命にかかわるシステムに必要な機能安全という技術の概要とそこで使われる安全なプロセッサ設計に必要なことをご紹介しました。

身近な色々な機器が、これからさらにより高度なコンピュータ制御に置き換わっていくことになります。これらの機器の安全性を根本で支える安心・安全なプロセッサの普及が望まれています。

本記事によって読者の皆さんが、機能安全と安心・安全なプロセッサ設計に興味を持って頂けると幸いです。

*****
まるめ・けい
*****