(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-17
(45)【発行日】2022-03-28
(54)【発明の名称】半導体装置、制御システムおよび半導体装置の制御方法
(51)【国際特許分類】
G06F 15/167 20060101AFI20220318BHJP
G06F 11/18 20060101ALI20220318BHJP
【FI】
G06F15/167 615A
G06F11/18 640
(21)【出願番号】P 2018123381
(22)【出願日】2018-06-28
【審査請求日】2020-11-11
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】早川 雄貴
(72)【発明者】
【氏名】加谷 俊之
(72)【発明者】
【氏名】芝原 真一
【審査官】井上 宏一
(56)【参考文献】
【文献】国際公開第2016/169856(WO,A1)
【文献】特表2009-505177(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/16-15/177
G06F 11/16-11/20
(57)【特許請求の範囲】
【請求項1】
半導体装置であって、
キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1および第2のプロセッサと、
メモリと、
前記メモリに接続され、アドレスプロテクト機能を有するアービタと、
前記アービタに接続されたバスと、
前記第1のプロセッサと前記バスとに接続され、前記第1のプロセッサによる前記第2のプロセッサのキャッシュへのスヌープ動作を制御するための第1のスヌープ制御回路と、
前記第2のプロセッサと前記バスとに接続され、前記第2のプロセッサによる前記第1のプロセッサのキャッシュへのスヌープ動作を制御するための第2のスヌープ制御回路と、
前記ソフトウェアロックステップと前記通常動作とを切り替えるための制御装置とを備え、
前記制御装置は、
前記通常動作が実行される場合に、前記第1のスヌープ制御回路および前記第2のスヌープ制御回路に対して、各前記スヌープ動作を許可し、
前記ソフトウェアロックステップが実行される場合に、前記第1のスヌープ制御回路および前記第2のスヌープ制御回路に対して、各前記スヌープ動作を禁止し、
前記第1のプロセッサは、
前記ソフトウェアロックステップのための第1のソフトウェアを実行し、
前記第1のプロセッサのために前記メモリに確保された第1の領域に、前記第1のソフトウェアの実行結果を書き込み、
前記第2のプロセッサは、
前記ソフトウェアロックステップのための第2のソフトウェアを実行し、
前記第1の領域と異なる第2の領域に、前記第2のソフトウェアの実行結果を書き込み、
前記半導体装置は、前記第1の領域に書き込まれた実行結果と、前記第2の領域に書き込まれた実行結果とを比較する比較器をさらに備える、半導体装置。
【請求項2】
前記第1のスヌープ制御回路または前記第2のスヌープ制御回路は、所定の条件を満たさない異常なスヌープ動作を禁止し、
前記アービタは、前記制御装置によってアクセス可能なメモリ領域に対する前記第1のプロセッサまたは前記第2のプロセッサによるアクセスを禁止する、請求項1に記載の半導体装置。
【請求項3】
前記アービタに接続された第1の処理部および第2の処理部をさらに備え、
前記第1の処理部
は、前記ソフトウェアロックステップのための
処理を実行
し、
前記第1のソフトウェアを実行することは、前記
第1の処理部による処理の結果
を用いて前記第1のソフトウェアを実行するこ
とを含み、
前記第2の処理部
は、前記ソフトウェアロックステップのための
処理を実行し
、
前記第2のソフトウェアを実行することは、前記
第2の処理部による処理の結果
を用いて前記第2のソフトウェアを実行するこ
とを含む、請求項1に記載の半導体装置。
【請求項4】
前記第1のプロセッサは、前記第1のソフトウェアの実行結果に基づいてCRC(Cyclic Redundancy Code)を生成するように構成されており、
前記制御装置は、
前記第2のソフトウェアの実行結果に基づいてCRCを生成し、
前記第1のプロセッサによって生成されたCRCと、前記制御装置によって生成されたCRCとを比較するように構成されている、請求項1に記載の半導体装置。
【請求項5】
前記比較器は、前記アービタに含まれており、前記メモリに格納されているデータの読出要求に基づいて、前記メモリに格納されている各実行結果を比較するように構成されている、請求項1に記載の半導体装置。
【請求項6】
前記メモリは、データを格納するための複数の領域を含み、
前記第1のプロセッサに割り当てられる領域は、前記第2のプロセッサによる前記実行結果の書き込みから保護されており、
前記第2のプロセッサに割り当てられる領域は、前記第1のプロセッサによる前記実行結果の書き込みから保護されており、
前記制御装置に割り当てられる領域は、前記第1のプロセッサおよび前記第2のプロセッサによる書き込みから保護されている、請求項1に記載の半導体装置。
【請求項7】
前記制御装置の機能安全レベルは、前記第1のプロセッサおよび前記第2のプロセッサの機能安全レベルよりも高い、請求項1に記載の半導体装置。
【請求項8】
信号の入力を受ける入力インターフェイスと、
前記信号に基づいて演算を実行する半導体装置と、
前記演算の実行結果を出力するための出力インターフェイスとを備え、
前記半導体装置は、
キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1および第2のプロセッサと、
メモリと、
前記メモリに接続され、アドレスプロテクト機能を有するアービタと、
前記アービタに接続されたバスと、
前記第1のプロセッサと前記バスとに接続され、前記第1のプロセッサによる前記第2のプロセッサのキャッシュへのスヌープ動作を制御するための第1のスヌープ制御回路と、
前記第2のプロセッサと前記バスとに接続され、前記第2のプロセッサによる前記第1のプロセッサのキャッシュへのスヌープ動作を制御するための第2のスヌープ制御回路と、
前記ソフトウェアロックステップと前記通常動作とを切り替えるための制御装置とを備え、
前記制御装置は、
前記通常動作が実行される場合に、前記第1のスヌープ制御回路および前記第2のスヌープ制御回路に対して、各前記スヌープ動作を許可し、
前記ソフトウェアロックステップが実行される場合に、前記第1のスヌープ制御回路および前記第2のスヌープ制御回路に対して、各前記スヌープ動作を禁止し、
前記第1のプロセッサは、
前記ソフトウェアロックステップのための第1のソフトウェアを実行し、
前記第1のプロセッサのために前記メモリに確保された第1の領域に、前記第1のソフトウェアの実行結果を書き込み、
前記第2のプロセッサは、
前記ソフトウェアロックステップのための第2のソフトウェアを実行し、
前記第1の領域と異なる第2の領域に、前記第2のソフトウェアの実行結果を書き込み、
前記半導体装置は、前記第1の領域に書き込まれた実行結果と、前記第2の領域に書き込まれた実行結果とを比較する比較器をさらに備える、制御システム。
【請求項9】
前記第1のスヌープ制御回路または前記第2のスヌープ制御回路は、所定の条件を満たさない異常なスヌープ動作を禁止し、
前記アービタは、前記制御装置によってアクセス可能なメモリ領域に対する前記第1のプロセッサまたは前記第2のプロセッサによるアクセスを禁止する、請求項8に記載の制御システム。
【請求項10】
前記アービタに接続された第1の処理部および第2の処理部をさらに備え、
前記第1の処理部
は、前記ソフトウェアロックステップのための
処理を実行
し、
前記第1のソフトウェアを実行することは、前記
第1の処理部による処理の結果
を用いて前記第1のソフトウェアを実行するこ
とを含み、
前記第2の処理部
は、前記ソフトウェアロックステップのための
処理を実行し
、
前記第2のソフトウェアを実行することは、前記
第2の処理部による処理の結果
を用いて前記第2のソフトウェアを実行するこ
とを含む、請求項8に記載の制御システム。
【請求項11】
前記第1のプロセッサは、前記第1のソフトウェアの実行結果に基づいてCRC(Cyclic Redundancy Code)を生成するように構成されており、
前記制御装置は、
前記第2のソフトウェアの実行結果に基づいてCRCを生成し、
前記第1のプロセッサによって生成されたCRCと、前記制御装置によって生成されたCRCとを比較するように構成されている、請求項8に記載の制御システム。
【請求項12】
前記比較器は、前記アービタに含まれており、前記メモリに格納されているデータの読出要求に基づいて、前記メモリに格納されている各実行結果を比較するように構成されている、請求項8に記載の制御システム。
【請求項13】
前記メモリは、データを格納するための複数の領域を含み、
前記第1のプロセッサに割り当てられる領域は、前記第2のプロセッサによる前記実行結果の書き込みから保護されており、
前記第2のプロセッサに割り当てられる領域は、前記第1のプロセッサによる前記実行結果の書き込みから保護されており、
前記制御装置に割り当てられる領域は、前記第1のプロセッサおよび前記第2のプロセッサによる書き込みから保護されている、請求項8に記載の制御システム。
【請求項14】
前記制御装置の機能安全レベルは、前記第1のプロセッサおよび前記第2のプロセッサの機能安全レベルよりも高い、請求項8に記載の制御システム。
【請求項15】
キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1および第2のプロセッサ
と、第1および第2のスヌープ制御回路と、制御装置と、メモリとを
備える半導体装置の制御方法であって、
前記第1のスヌープ制御回路が、前記第1のプロセッサによる前記第2のプロセッサのキャッシュへのスヌープ動作を制御するステップと、
前記第2のスヌープ制御回路が、前記第2のプロセッサによる前記第1のプロセッサのキャッシュへのスヌープ動作を制御するステップと、
前記通常動作が実行される場合に、
制御装置が、各前記スヌープ動作を許可するステップと、
前記ソフトウェアロックステップが実行される場合に、
前記制御装置が、各前記スヌープ動作を禁止するステップと、
前記第1のプロセッサが、前記ソフトウェアロックステップのための第1のソフトウェアを実行するステップと
、
前記第1のプロセッサが、前記
メモリの第1の領域に、前記第1のソフトウェアの実行結果を書き込むステップと、
前記第2のプロセッサが、前記ソフトウェアロックステップのための第2のソフトウェアを実行するステップと、
前記第2のプロセッサが、前記
メモリの第2の領域に、前記第2のソフトウェアの実行結果を書き込むステップと、
前記制御装置が、前記第1の領域に書き込まれた実行結果と、前記第2の領域に書き込まれた実行結果とを比較するステップとを含む、半導体装置の制御方法。
【請求項16】
前記半導体装置は、アービタをさらに備え
前記制御方法は、
前記第2のスヌープ制御回路が、所定の条件を満たさない異常なスヌープ動作を禁止するステップと、
前記アービタが、メモリ領域に対する前記第1のプロセッサまたは前記第2のプロセッサによるアクセスを禁止するステップとをさらに含む、請求項15に記載の制御方法。
【請求項17】
前記半導体装置は、第1の処理部および第2の処理部を
さらに備え、
前記制御方法は、
前記第1の処理部
が、前記ソフトウェアロックステップのための
処理を実行する
ステップと、
前記第1のプロセッサが、前記
第1の処理部による処理の結果に基づいて前記第1のソフトウェアを実行する
ステップと、
前記第2の処理部
が、前記ソフトウェアロックステップのための
処理を実行する
ステップと、
前記第2のプロセッサが、前記
第2の処理部による処理の結果に基づいて前記第2のソフトウェアを実行する
ステップとを
さらに含む、請求項15に記載の制御方法。
【請求項18】
前記第1のプロセッサが、前記第1のソフトウェアの実行結果に基づいてCRC(Cyclic Redundancy Code)を生成するステップと、
前記制御装置が、前記第2のソフトウェアの実行結果に基づいてCRCを生成するステップとをさらに含み、
前記比較するステップは、各前記生成されたCRCを比較することを含む、請求項15に記載の制御方法。
【請求項19】
前記メモリに格納されているデータの読出要求に基づいて、
前記制御装置が、前記メモリに格納されている各実行結果を比較するステップとをさらに含む、請求項15に記載の制御方法。
【請求項20】
前記メモリは、データを格納するための複数の領域を含み、
前記第1のプロセッサに割り当てられる領域は、前記第2のプロセッサによる前記実行結果の書き込みから保護されており、
前記第2のプロセッサに割り当てられる領域は、前記第1のプロセッサによる前記実行結果の書き込みから保護されており、
前記制御装置に割り当てられる領域は、前記第1のプロセッサおよび前記第2のプロセッサによる書き込みから保護されている、請求項15に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は半導体装置に関し、より特定的には、半導体装置におけるロックステップに関する。
【背景技術】
【0002】
昨今、より高い機能安全のレベルが求められている。ISO26262の機能安全として、ASIL(Automotive Safety Integrity Level)が規定されている。安全レベルが低いものから、QM(Quality Management)/ASIL A/ASIL B/ASIL C/ASIL Dと規定されている。ASIL Bレベルでは、動作中に発生する故障の90%以上が検知されなければならず、ASIL Dレベルでは、99%以上の故障が検知されなければならない。例えば、ISO26262に準拠した車載電子システムでは、ASIL Dが要求される。具体的には、ASIL Dレベルの機能安全には、ロックステップと呼ばれる、2つ以上のハードウェアの演算で得られた結果を比較一致させるような高いレベルの故障検出性能が求められる。
【0003】
ロックステップに関し、例えば、特開2014-56396号公報(特許文献1)は、「複数のプロセッサコアが正常に同じプログラムを実行しているか否かを判定するとともに、メモリチェックの実行機会を確保する電子制御装置」を開示している([要約])。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1に開示された技術によれば、機能安全レベルは高いが1つの動作しかできないデュアルコア・ロックステップのモードと、機能安全レベルは通常であるが2つのコアがそれぞれ動作できるモードとを切り替えることができる。しかしながら、デュアルコア・ロックステップのモードへの切り替えの際には、2つのコアが同期をとるためにリセットが必要となり、数ミリ秒程度の処理停止期間が生じ、性能が低下する場合がある。したがって、機能安全レベルを維持しつつ性能が低下しない技術が必要とされている。
【0006】
本開示は、上述のような問題点を解決するためになされたものであって、ある局面において、機能安全レベルを維持しつつ性能が低下しない半導体装置が開示される。他の局面において、機能安全レベルを維持しつつ性能が低下しない制御システムが開示される。さらに他の局面において、機能安全レベルを維持しつつ性能が低下しないように半導体装置を制御する方法が開示される。
【課題を解決するための手段】
【0007】
ある実施の形態に従う半導体装置は、キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1および第2のプロセッサと、メモリと、メモリに接続され、アドレスプロテクト機能を有するアービタと、アービタに接続されたバスと、第1のプロセッサとバスとに接続され、第1のプロセッサによる第2のプロセッサのキャッシュへのスヌープ動作を制御するための第1のスヌープ制御回路と、第2のプロセッサとバスとに接続され、第2のプロセッサによる第1のプロセッサのキャッシュへのスヌープ動作を制御するための第2のスヌープ制御回路と、ソフトウェアロックステップと通常動作とを切り替えるための制御装置とを備える。制御装置は、通常動作が実行される場合に、第1のスヌープ制御回路および第2のスヌープ制御回路に対して、各スヌープ動作を許可し、ソフトウェアロックステップが実行される場合に、第1のスヌープ制御回路および第2のスヌープ制御回路に対して、各スヌープ動作を禁止し得る。第1のプロセッサは、ソフトウェアロックステップのための第1のソフトウェアを実行し、第1のプロセッサのためにメモリに確保された第1の領域に、第1のソフトウェアの実行結果を書き込み得る。第2のプロセッサは、ソフトウェアロックステップのための第2のソフトウェアを実行し、第1の領域と異なる第2の領域に、第2のソフトウェアの実行結果を書き込み得る。半導体装置は、第1の領域に書き込まれた実行結果と、第2の領域に書き込まれた実行結果とを比較する比較器をさらに備える。
【0008】
ある局面において、半導体装置の機能安全レベルを維持しつつ性能の低下を防止し得る。
【0009】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【図面の簡単な説明】
【0010】
【
図1】半導体装置1のハードウェア構成を表わすブロック図である。
【
図2】ソフトウェアロックステップを実行可能な半導体装置2の構成の概略を表わすブロック図である。
【
図3】SPU210,220の構成の詳細を説明するための図である。
【
図4】半導体装置2の動作を表わすフローチャート(その1)である。
【
図5】半導体装置2の動作を表わすフローチャート(その2)である。
【
図6】半導体装置2の動作を表わすフローチャート(その3)である。
【
図7】半導体装置2の動作を説明するための図(その1)である。
【
図8】半導体装置2の動作を説明するための図(その2)である。
【
図9】半導体装置2の動作を説明するための図(その3)である。
【
図10】半導体装置2の動作を説明するための図である。
【
図11】ソフトウェアロックステップが行なわれない場合の設定を説明するための図である。
【
図12】スヌープが誤って他のCPUに対して行なわれた場合の保護を説明する図である。
【
図13】メモリ260内においてアドレスエリアを跨ぐアクセスのプロテクトについて説明する図である。
【
図14】スヌープを許可する場合の動作を説明する図である。
【
図15】スヌープが許可されている場合の動作を表わす図である。
【
図16】ソフトウェアロックステップが行なわれていない場合の半導体装置2の動作を説明する図である。
【
図17】ある局面に従う半導体装置3におけるデータの流れを表わす図である。
【
図18】ある局面に従う半導体装置4の構成の概略を表わすブロック図である。
【
図19】半導体装置4におけるデータの流れを表わす図である。
【
図20】半導体装置4が実行する処理の一部を表わすフローチャートである。
【
図21】半導体装置5におけるデータフローを表わす図である。
【
図22】半導体装置5におけるCPUのプログラムの実行結果の出力を説明するための図である。
【
図23】半導体装置5におけるソフトウェアロックステップのプログラムの実行結果の比較を説明するための図である。
【
図24】半導体装置6の構成を表わすブロック図である。
【
図25】半導体装置6におけるデータのフローを説明するための図である。
【
図26】半導体装置6の制御構造を説明するためのフローチャートである。
【
図27】半導体装置6における処理の一部を表わすフローチャートである。
【
図28】対象エリアに格納されているデータの読み出しを説明するための図である。
【
図29】比較器252による比較の動作を説明するための図である。
【発明を実施するための形態】
【0011】
以下、図面を参照しつつ、本開示に係る技術思想の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【0012】
[第1の実施の形態]
図1を参照して、ある局面に従ってソフトウェアロックステップ(SWLS)を行なう半導体装置1の構成について説明する。
図1は、半導体装置1のハードウェア構成を表わすブロック図である。本実施の形態において、ソフトウェアロックステップとは、複数のコアが同一の結果になるプログラムを実行し、これらのコア以外の比較装置によってその結果が同一であることを確認することで、これらのコアの故障の検知を行なう方法をいう。より具体的には、機能安全レベルが通常である二つのコアが、クロックサイクル単位で同期をとることなく、アプリケーション単位あるいは関数単位でプログラムを実行し、実行結果が比較される。この時、各コアへの入力がクロックサイクル単位で同じであることが求められるデュアルコアロックステップと異なり、本実施の形態に従うソフトウェアロックステップでは、各コアへの入力タイミングは任意でよく、各コアの同期をとる必要はない。
【0013】
半導体装置1は、CPU(Central Processing Unit)10,20と、バス30と、処理部40と、アービタ50と、メモリ60とを備える。CPU10は、コア11と、MMU(Memory Management Unit)12と、キャッシュ13とを含む。CPU20は、コア21と、MMU22と、キャッシュ23とを含む。CPU10,20は、それぞれ、バス30に接続されている。バス30と、処理部40と、メモリ60とが、アービタ50に接続されている。
【0014】
CPU10,20は、機能安全を適用しなくてもよい通常の品質管理(Quality Management(QM))クラスのプロセッサである。CPU10,20は、データをキャッシュに保存し得る。ある局面において、CPU20は、データをキャッシュ23に格納して、メモリ60に当該データを書き込んでいない場合がある。そのような場合において、CPU20以外のプロセッサ、例えばCPU10が、当該データを扱いたい時、CPU10は、所謂スヌープと呼ばれる処理、すなわち、CPU20のキャッシュ23にアクセスして当該データを読み込む等の処理を行う必要がある。スヌープを行なうことにより、コア11,21間で高速にデータをやり取りできるので、スヌープがない場合と比べて、演算速度等の性能が大きく向上し得る。
【0015】
コア11,21は、演算処理回路を含む。MMU12は、メモリのアドレス変換、メモリ60へのアクセスの保護、キャッシュ13へのアクセスを制御する。MMU22は、メモリのアドレス変換、メモリ60へのアクセスの保護、キャッシュ23へのアクセスを制御する。
【0016】
バス30は、キャッシュコヒーレントインターコネクト(CCI)であり、例えば、CPU10によるキャッシュへのアクセスを扱う。バス30は、ASIL Dクラスに対応する(以下、適宜、「ASIL Dクラス」は「ASIL D対応」あるいは「ASIL Dレベル」と表わすこともあり、他の場合も同様である)。
【0017】
処理部40は、キャッシュを有さない演算器であり得る。処理部40は、ASIL BクラスおよびASIL Dクラスのいずれであってもよい。
【0018】
アービタ50は、アドレスの保護機能を有し、CPU10,20、バス30、処理部40によるメモリ60へのアクセスを調停する。
【0019】
メモリ60は、例えば、DDR(Double Data Rate)タイプのメモリである。
ある局面に従う半導体装置1によれば、CPU10,20間のスヌープを防ぐためには、例えば、MMU12,22がスヌープを保護することが考えられる。しかしながら、MMU12,22自体がロックステップの対象であるため、スヌープを防ぐためにMMU12,22を使用することはできない。あるいは、CPU10,20がスヌープをできないように構成することも考えられる。この場合、スヌープを行なっても問題がない場合でもスヌープができなくなるため、処理の遅延のように半導体装置1の性能が悪化する恐れがある。
【0020】
なお、本実施の形態において、ソフトウェアやハードウェアのバグによる故障をシステマティックフォールトと呼び、ハードウェアが宇宙線や経年劣化で故障することをランダムハードウェアフォールトと呼ぶ。CPUがASIL D対応であるとは、単独で(ソフトウェアロックステップを使用せずに)システマティック・フォールトとランダムハードウェア・フォールトの両方において、ASIL Dクラスに対応するCPUであることをいう。また、ソフトウェアロックステップに使用されるハードウェアは、システマティック・フォールトの観点ではASIL Dクラスとし、ランダムハードウェア・フォールトの観点では、単体では、ASIL Dクラスではないものを指すとする。例えば、ソフトウェアロックステップが行なわれない場合には、当該ハードウェア(例えば、CPU)は、QMクラスであってもよい。
【0021】
図1に示される半導体装置1においてソフトウェアロックステップが行なわれる場合、以下の様な問題が生じ得る。より具体的には、CPU10のMMU12が故障して不要なスヌープが開始され、CPU20のキャッシュ23へのアクセスが行なわれる場合があり得る。この場合、当該スヌープによって、CPU10の故障がCPU20に広がり、CPU10,20による誤った演算結果が一致し、CPU10の故障が検知されない可能性があり、結果として、ASIL Dクラスを達成することができない。
【0022】
既存の回路構成では、スヌープはMMU12,22において保護されることになっているが、MMU12,22自体がソフトウェアロックステップの対象となっており、スヌープを保護することができない。また、QMクラスのCPU10,20のうち、MM12,22までを2重化する方法も考えられるが、その場合、面積のオーバヘッドが大きくなるという問題が生じ得る。さらに、近年では、CPU、画像処理回路、メモリ等のLSI(Large Scale Integrated Circuit)を構成する機能ブロック(所謂IP(Intellectual Property))は、自社製ではなく社外製であることが多く、CPU自体に変更を加えられないこともある。また、プロトコルの複雑化により、MMUなどの面積が増加してきており、それを別途追加するのは、従来のメリットが損なわれるうえ、レイテンシも増大する。
【0023】
また、ISO26262では、ASILの異なるクラス間での故障の伝播等の干渉があってはならないとされており、不干渉(以下、FFI(Freedom From Interface)ともいう。)が求められている。ソフトウェアロックステップによって達成されるASIL Dクラスと、ソフトウェアロックステップを行なわないQMクラスのCPU10,20との間で、FFIの考慮が必要になるため、単体でASIL DクラスのCPUのように、QMクラスのCPU10,20を制御するためのプロセッサが必要となる。
【0024】
そこで、
図2を参照して、ある局面に従う半導体装置2について説明する。
図2は、ソフトウェアロックステップを実行可能な半導体装置2の構成の概略を表わすブロック図である。半導体装置2は、半導体装置1の構成に加えて、スヌープ動作を制御するための回路として、スヌープ保護部(以下、SPU(Snoop Protection Unit)と表す)210,220と、CPU230とを備える。さらに、半導体装置2は、半導体装置1の構成に対して、アービタ50に代えてアービタ250を備え、メモリ60に代えてメモリ260を備える。
【0025】
SPU210は、CPU10によるスヌープを保護する。SPU220は、CPU20によるスヌープを保護する。SPU210,220は、ASIL Dクラスである。
【0026】
CPU230は、ASIL Dクラスのプロセッサである。半導体装置2において、FFIの観点から、ASIL Dクラスを達成するための制御は、ASIL Dクラスのプロセッサで行なわれる必要がある。そこで、CPU230は、ASIL Dクラスであることが望ましい。
【0027】
アービタ250は、メモリ260へのアクセスを調停する。例えば、アービタ250は、アドレスが異常であることを検知すると、当該アドレスへのアクセスを禁止する。あるいは、アービタ250は、メモリ260内において、アドレスエリアをまたぐようなアクセスをプロテクトし得る。例えば、アービタ250は、ASIL D対応のプロセッサに割り当てられたメモリ領域に対するASIL B対応のプロセッサによるデータの書き込みを禁止する。
【0028】
メモリ260は、DDRタイプのメモリであり得る。メモリ260は、エリア261,262,263,264を含む。エリア261は、ASIL Bクラスのハードウェアのためのエリアである。エリア262は、CPU10のソフトウェアロックステップためのエリアである。エリア263は、CPU20のソフトウェアロックステップためのエリアである。エリア264は、ASIL Dクラスのハードウェアのためのエリアである。
【0029】
ソフトウェアロックステップのための複数のエリア262,263は、それぞれのCPU10,20が排他的に当該エリアにアクセスできるように構成されている。ASIL Bクラスのハードウェア(例えば、処理部40)は、FFIの要件を満たすため、エリア262,263,264にアクセスできないように構成される。また、ソフトウェアロックステップの対象となるCPU10,20は、同様の理由により、ASIL Dクラスのハードウェアによって使用されるエリア264にアクセスできないように構成される。なお、ASIL Dクラスの機能安全では、バスのように半導体装置2において他の回路等と共通して使用される部品に関しても、ASIL D対応であることが求められる。これらの部品においては、デュアルコア・ロックステップやEDC(Error Detection Code)機能若しくはECC(Error Correction Code)等でASIL D対応であるものとする。
【0030】
[スヌープ保護部]
図3を参照して、ある局面に従うSPU210,220の構成について説明する。
図3は、SPU210,220の構成の詳細を説明するための図である。ある局面において、SPU210,220は、デュアルコア・ロックステップ等の仕組みにより、ASIL Dクラスに対応している。
【0031】
SPU210,220は、スヌープbit強制無効化ブロック310と、プロテクトON/OFFレジスタ320とを含む。CPU10の出力は、SPU210のスヌープbit強制無効化ブロック310に、CPU20の出力は、SPU220のスヌープbit強制無効化ブロック310に、それぞれ入力され得る。スヌープbit強制無効化ブロック310の出力は、バス30に入力され得る。
【0032】
ある局面において、プロテクトON/OFFレジスタ320がオフに設定されている場合には、SPU210,220は、マスタ(例えば、ASIL DクラスのCPU230)からの信号をそのまま通す。別の局面において、プロテクトON/OFFレジスタ320がオンに設定されている場合には、SPU210,220は、CPU10,20からのリクエストに含まれるスヌープを示す信号を監視し、その信号を無効にして、バス30に送る。
【0033】
本実施の形態に係る半導体装置2では、SPU210,220がスヌープの保護を行なう。SPU210,220には、スヌープのアクセス保護以外の機能を持たせないことで、レイテンシの増大を低減できる。また、ソフトウェアロックステップが行なわれない場合には、SPU210,220によるスヌープを許可することで、半導体装置2の性能を高めることができる。
【0034】
[制御構造]
図4~
図6を参照して、半導体装置2の制御構造について説明する。
図4~
図6は、半導体装置2の動作を表わすフローチャートである。
【0035】
図4に示されるように、ステップS410にて、ASIL DクラスのCPU230は、ソフトウェアロックステップのために、SPU210,220をスヌープ禁止に設定する。例えば、CPU230は、プロテクトON/OFFレジスタ320の設定をオフにする。また、CPU230は、アービタ250に、禁止アドレスを設定する。例えば、CPU230は、CPU10がエリア262にアクセスできるようにアドレスを設定し、CPU20によるアクセスを禁止する。CPU230は、CPU20がエリア263にアクセスできるようにアドレスを設定し、CPU10によるアクセスを禁止する。エリア264は、CPU230によるアクセスが可能にアドレス設定され、他のCPU10,20によるアクセスは禁止される。
【0036】
ステップS415にて、CPU230は、ソフトウェアロックステップ用のプログラムおよびデータをメモリ260のエリア264に書き込む。
【0037】
ステップS420にて、CPU230は、メモリ260への書き込みを完了したことに基づいて、ソフトウェアロックステップを行なうCPU10,20を起動する。例えば、CPU230は、ソフトウェアロックステップの開始指令を、アービタ250、バス30を介して、CPU10,20に送信する。ステップS425にて、CPU10,20は、当該開始指令の受信を検知すると、起動する。
【0038】
ステップS430にて、CPU10は、メモリ260にアクセスして、ソフトウェアロックステップのためのプログラムおよびデータを読み出して、そのプログラムを実行する。同様に、ステップS431にて、CPU20は、メモリ260にアクセスして当該プログラムおよびデータを読み出して、そのプログラムを実行する。なお、ステップS430における読み出しおよび/または実行のタイミングと、ステップS431における読み出しおよび/または実行のタイミングとは、同一である必要はなく、異なっていてもよい。
【0039】
ステップS435にて、CPU10は、当該プログラムの実行結果を、メモリ260に確保されたエリア262に書き込む。ステップS436にて、CPU20は、当該プログラムの実行結果を、メモリ260に確保されたエリア263に書き込む。なお、ステップS435における書き込みのタイミングと、ステップS436における書き込みのタイミングとは、同一である必要はなく、異なっていてもよい。
【0040】
ステップS440にて、CPU230は、CPU10,20による各処理が終了したことを検知するまで待機する。CPU10,20は、実行結果の書き込みを終了すると、その旨を、バス30及びアービタ250を介して、CPU230に通知する。
【0041】
ステップS445にて、CPU230は、CPU10,20による実行結果の書き込みが終了した旨の通知を受信すると、エリア262,263にアクセスして実行結果を読み出し、CPU10による実行結果と、CPU20による実行結果とを比較する。ある局面において、比較の単位は、例えば、アプリケーション単位または関数単位である。
【0042】
ステップS450にて、CPU230は、これらの実行結果が一致しているか否かを判断する。CPU230は、これらの実行結果が一致していると判断すると(ステップS450にてYES)、ステップS455にて、CPU230は、実行結果がASIL Dレベルに対応していると判定し、所定の出力先に当該実行結果を出力し、ソフトウェアロックステップを終了する。当該実行結果が一致していることに基づいて、所定の処理が実行される。そうでない場合には(ステップS450にてNO)、ステップCPU230は、実行結果がASIL Dレベルに対応していないと判定し、エラーを出力する。
【0043】
図5は、アービタ250によるプロテクト動作を表わす図である。
ステップS510にて、アービタ250は、トランザクションを待機している。
【0044】
ステップS520にて、アービタ250は、トランザクションの受信に基づいて、トランザクションの情報および指定されたアドレスと、マスタ情報(CPU230によって登録されている情報)およびアドレスとを比較する。
【0045】
ステップS530にて、アービタ250は、CPU230による設定内容に基づいて、メモリ260におけるアドレスのプロテクトが必要であるか否かを判断する。例えば、CPU210は、CPU10に対して許可されていないアドレスへのアクセスをCPU10が要求しているか否かを判断する。アービタ250は、アドレスのプロテクトが必要であると判断すると(ステップS530にてYES)、制御をステップS540に切り替える。そうでない場合には(ステップS530にてNO)、アービタ250は、制御をステップS510に戻す。
【0046】
ステップS540にて、アービタ250は、エラーレスポンスをCPU10に返し、当該トランザクションを通過させない。また、アービタ250は、所定のエラー信号をCPU230に出力し得る。
【0047】
図6は、SPU210が実行する処理の一部を表わすフローチャートである。なお、SPU220も同様の処理を実行し得る。
【0048】
ステップS610にて、SPU210は、トランザクションを待機する。
ステップS620にて、SPU210は、トランザクションがCPU10によるスヌープであるか否かを判断する。この判断は、例えば、トランザクションに含まれる信号(例えば、後述するARSNOOP信号)の値に基づいて行なわれる。
【0049】
CPU210は、当該トランザクションがスヌープであると判断すると(ステップS630にてYES)、ステップS640にて、SPU210は、当該トランザクションをスヌープではないトランザクションに変換し、当該トランザクションを通過させて、バス30に伝送する。これにより、CPU10が誤ったスヌープ動作を要求するトランザクションを発した場合には、当該トランザクションは、スヌープ動作を要求しないトランザクションに変換されるので、CPU20のキャッシュに対する誤ったスヌープが防止され得る。
【0050】
他方、当該トランザクションがスヌープではないと判断すると(ステップS630にてNO)、SPU210は、制御をステップS610に戻す。その後、処理は繰り返される。
【0051】
図7~
図10は、半導体装置2の動作を説明するための図である。
図7を参照して、ある局面において、CPU230は、ソフトウェアロックステップを実行するために、SPU210,220によるスヌープを禁止する。例えば、CPU230は、スヌープbit強制無効化ブロック310において、SPU210,220によるスヌープを禁止することを示すフラグを立てる。
【0052】
CPU230は、アービタ250のプロテクトアドレスを設定する。より具体的には、CPU230は、メモリ260において、エリア262,263,264を確保し、各エリアへのアクセスを規定する。たとえば、エリア262は、CPU10およびCPU230によるアクセスが可能に設定され、CPU20によるアクセスが禁止される。エリア263は、CPU20およびCPU230によるアクセスが可能に設定され、CPU10によるアクセスが禁止される。エリア264は、CPU230によるデータの書き込みが可能に設定され、CPU10,20によるデータの書き込みが禁止される。さらに、CPU230は、ソフトウェアロックステップに必要なプログラムおよびデータをメモリ260の所定のエリア262,263にそれぞれ格納する。このような構成により、ある局面において、あるプロセッサによって生成された誤ったデータが他のプロセッサによって使用され、比較結果が同一になることにより誤りが検出されなくなることが防止され得る。
【0053】
図8を参照して、CPU230は、ソフトウェアロックステップを実行するCPU10,20をそれぞれ起動する(ステップS420)。ある局面において、CPU230は、アービタ250、バス30およびSPU210,220を介して、起動命令をCPU10,20にそれぞれ送信する。別の局面において、CPU230がCPU10,20に起動命令を送信するためのバスが別途設けられてもよい。
【0054】
図9を参照して、CPU10,20は、それぞれ、同一の結果をもたらすプログラムを実行し、実行結果を所定のエリア262,263にそれぞれ書き込む(ステップS430,S431)。
【0055】
図10を参照して、CPU230は、エリア262,263から実行結果を読み出して、これらの実行結果を比較する(ステップS445)。CPU230は、実行結果が一致すると判断すると、その旨を示すデータをエリア264の所定のアドレスに格納し得る。実行結果が一致しない場合には、CPU230は、CPU10またはCPU20が故障していることその他エラーを通知するためのデータを、エリア264の所定のアドレスに格納し得る。
【0056】
図11は、ソフトウェアロックステップが行なわれない場合の設定を説明するための図である。別の局面において、CPU10,20がソフトウェアロックステップを行なわない場合には、CPU230は、SPU210,220の設定を非ソフトウェアロックアップに変更することにより、SPU210,220によるスヌープを許可する。
【0057】
[異常なスヌープのプロテクト]
図12は、スヌープが誤って他のCPUに対して行なわれた場合の保護を説明する図である。ある局面に従う半導体装置2は、AXI(Advanced eXtensible Interface)規格に従ってバスが拡張されたACE(AXI Coherency Extensions)プロトコルを使用する場合がある。AXI規格に従うインターフェイスを構成する5つのチャネルのうち、リードデータチャネルには、ARDOMAIN信号とARSNOOP信号とが追加される。ARSNOOP信号は、リードチャネルおよびライトチャネルでシェアされるトランザクションのためのスヌープトランザクションのタイプを示す。ARDOMAIN信号は、いずれのマスタがスヌープトランザクションにおいてスヌープされるべきであるか、と、いずれのマスタがバリアートランザクションを命令するために考慮されるべきであるか、とを示す。
【0058】
スヌープ時には、トランザクション内のARDOMAIN信号は、2進数で01または10となっているか、ARSNOOP信号が0以外になっている。そのような信号が来た時には、ARSNOOP信号を強制的に0に設定する。このようにすることで、そのトランザクションがキャッシュを利用しないトランザクションとなり、スヌープの発生を防ぐことができる。
【0059】
ライトトランザクションの場合も同様である。スヌープのためのアクセスは、通常のアクセスとなり、アドレスが異常であれば、アービタ250でプロテクトされる。データがおかしくなれば、CPU230は、ソフトウェアロックステップの処理の実行結果を比較する処理において、当該比較の結果に基づいて異常を検知し得る。
【0060】
[アドレス異常のプロテクト]
図13は、メモリ260内においてアドレスエリアを跨ぐアクセスのプロテクトについて説明する図である。ある局面において、アービタ250は、メモリ260内におけるアドレスエリアを跨ぐようなアクセスを検知すると、そのアクセスを禁止し、当該アクセスにつながるトランザクションを与えたプロセッサに、エラーレスポンスを返す。より具体的には、アービタ250は、トランザクションのアドレスを監視し、そのトランザクションの発行元が、当該アドレスにアクセスしてはいけないことを検知すると、当該アドレスへのアクセスをプロテクトする。発行元は、トランザクションに付加されている識別情報で特定され得る。識別情報は、例えば、AxIDその他の値であり得る。当該アドレスへのアクセスが許可されているか否かは、例えば、CPU230において予め設定されている。
【0061】
[スヌープの許可の設定]
図14は、スヌープを許可する場合の動作を説明する図である。ある局面において、CPU230は、SPU210,220によるスヌープを許可する設定のための信号を、アービタ250およびバス30を介して、SPU210,220に送信する。SPU210,220は、この信号を受信すると、プロテクトON/OFFレジスタ320のプロテクトをオフに設定する(
図3)。プロテクトがオフに設定されると、スヌープbit強制無効化ブロック310は、CPU10,20からのリクエストに含まれるスヌープを表わす信号(例えば、ARSNOOP)を検知した場合、そのまま、当該信号をアービタ250に送るので、スヌープが実行される。
【0062】
図15は、スヌープが許可されている場合の動作を表わす図である。ある局面において、スヌープが許可されている場合、CPU10は、キャッシュ23に対するスヌープを、また、CPU20は、キャッシュ13に対するスヌープを行なうことができる。また、CPU10,20は、それぞれ、メモリ260のうち、ソフトウェアロックステップに使用されないエリア261のみへのアクセスが許可され、他のエリア262,263,264へのアクセスは禁止される。
【0063】
図16は、ソフトウェアロックステップが行なわれていない場合の半導体装置2の動作を説明する図である。ある局面において、ソフトウェアロックステップが行なわれていない時、アービタ250は、エリア262,263,264のアドレス保護を行なっている。したがって、CPU10は、エリア262,263,264にはアクセスできない。
【0064】
以上のようにして、本実施の形態に従う半導体装置2は、異常なスヌープをプロテクトするためのSPU210,220と、アドレスをプロテクト可能なアービタ250と、ソフトウェアロックステップを制御するためのASIL DクラスのCPU230とを備える。このような構成により、ソフトウェアロックステップを用いたASIL Dが半導体装置2で実現できる。本実施の形態に従うSPU210,220は、
図3に示されるように、簡易な構成で実現されるため、半導体装置2の大幅な面積増大を必要とせず、また、レイテンシの増大もない。また、ソフトウェアロックステップはCPU230によって制御されるため、CPU10,20を変更できない場合であっても、ソフトウェアロックステップを導入することができる。
【0065】
[第2の実施の形態]
以下、第2の実施の形態について説明する。本実施の形態に従う半導体装置は、所謂IPコアの一例であるCPUとして、二種類のCPUを有する場合にソフトウェアロックステップを実行できる点で、一種類のIPコアを有する第1の実施の形態と異なる。
【0066】
図17は、ある局面に従う半導体装置3におけるデータの流れを表わす図である。半導体装置3において、CPU230は、メモリ260のエリア61に対してデータを読み書きする。CPU10,20は、それぞれ、エリア61からデータを読み出す。CPU10は、ソフトウェアロックステップを行う際、メモリ260のエリア62に対してデータを読み書きし、メモリ260のエリア64にデータを書き込む。CPU20は、ソフトウェアロックステップを行う際、メモリ260のエリア63に対してデータを読み書きし、メモリ260のエリア65にデータを書き込む。CPU230は、比較器231として、エリア64,65に書き込まれたデータを比較し、これらのデータが一致した場合には、ASILDクラスのデータとして、当該データを使用する。
【0067】
図17は、一種類のIPコアに対してソフトウェアロックステップを適用する場合を表わしている。二種類のIPコアに対してソフトウェアロックステップを連続して適用する場合、二度の比較処理が必要になり、より具体的には、二度のソフトウェアロックステップのためのデータ通信のための帯域および比較時間が必要になる。そこで、本実施の形態においては、二種類のIPコアに対してソフトウェアロックステップを行なう場合に帯域および比較時間の増大が抑制される構成を説明する。
【0068】
図18は、ある局面に従う半導体装置4の構成の概略を表わすブロック図である。なお、前述の構成要素と同一の構成要素には同一の番号を付してある。当該構成要素の機能も同じである。したがって、当該構成要素の説明は繰り返さない。
【0069】
半導体装置4は、
図2に示される構成要素に加えて、画像処理部70,71をさらに備える。画像処理部70,71は、それぞれ、アービタ250に接続されている。画像処理部70,71は、ASILD非対応のIP(例えば、ASIL Bクラスの画像処理部)の一例であるが、ASILD非対応のIPは、画像処理部に限られない。
【0070】
本実施の形態に係る半導体装置4は、ソフトウェアロックステップにおいて、一組目のIP(すなわち、画像処理部70,71)による各計算結果を比較することなく、二組目のIP(すなわち、CPU10,20)に計算結果を渡すことで、一回の比較処理が省略される。
【0071】
図19は、半導体装置4におけるデータの流れを表わす図である。CPU230がデータをメモリ260のエリア61に書き込むと、画像処理部70,71は、それぞれエリア61からデータを読み出す。画像処理部70は、エリア62に対して、データの書き込みおよび読み出しを行なう。画像処理部71は、エリア63に対して、データの書き込みおよび読み出しを行なう。
【0072】
さらに、画像処理部70は、ソフトウェアロックステップのためのプログラムの実行結果をエリア64に書き込む。画像処理部70は、書込みが完了するとその旨をCPU10に通知し、ソフトウェアロックステップのためのプログラムを実行させるためにCPU10を起動させる。同様に、画像処理部71は、ソフトウェアロックステップのためのプログラムの実行結果をエリア65に書き込む。画像処理部71は、書込みが完了するとその旨をCPU20に通知し、ソフトウェアロックステップのためのプログラムを実行させるためにCPU20を起動させる。
【0073】
CPU10は、エリア64からデータを読み出す。CPU10は、エリア62に対してデータの書き込みおよび読み出しを行なう。さらに、CPU10は、画像処理部70による実行結果を用いて、ソフトウェアロックステップのプログラムを実行し、実行結果をエリア64に書き込む。CPU20は、エリア65からデータを読み出す。CPU20は、エリア63に対してデータの書き込みおよび読み出しを行なう。さらに、CPU20は、画像処理部71による実行結果を用いて、ソフトウェアロックステップのプログラムを実行し、実行結果をエリア65に書き込む。
【0074】
CPU230は、比較器231として、エリア64,65に書き込まれた各実行結果を比較し、これらが一致する場合には、ASIL Dクラスのデータとして上記データを使用する。
【0075】
なお、エリア62、64は、画像処理部70とCPU10とによって排他的に使用され得る。また、エリア63、65は、画像処理部71とCPU20とによって排他的に使用され得る。
【0076】
ここで、
図20を参照して、半導体装置4が使用される局面の一例について説明する。
図20は、半導体装置4が実行する処理の一部を表わすフローチャートである。半導体装置4は、車両の周辺を撮影するためのカメラに接続されている。
【0077】
ステップS2010にて、半導体装置4は、カメラからの画像信号を受信する。ステップS2020にて、画像処理部70(または画像処理部71)は、歪補正その他の画像処理を実行する。画像処理の結果は、エリア64(またはエリア65)に格納される。
【0078】
ステップS2030にて、CPU10(またはCPU20)は、人を検出したか否かを判断する。人の検出は、顔認識、特徴量算出その他の公知の技術を用いて実現される。検出結果は、エリア64,64に書き込まれる。CPU10(またはCPU20)が人を検出したと判断すると(ステップS2030にてYES)、ステップS2040にて、ASIL DレベルのCPU230は、車両のブレーキを作動するための信号を、ブレーキの制御装置に送信する。その後、車両は停止する。
【0079】
他方、CPU10(またはCPU20)が人を検出しないと判断した場合には(ステップS2030にてNO)、ステップS2050にて、CPU10、CPU20またはCPU230のいずれかは、予め定められたその他の処理を実行する。
【0080】
以上のようにして、本実施の形態によれば、ソフトウェアロックステップの対象となるCPU、画像処理部その他のIPが二種類ある場合には、一組目のIPによるプログラムの実行結果は比較されることなく二組目のIPによるソフトウェアロックステップのプログラムの実行のために使用される。これにより、比較処理を1回に留めることができるので、一回目の実行結果の比較のためのデータ読み込み、データ書き込み、および比較処理のための時間が不要となり、半導体装置4の処理時間の増大化が防止され得る。
【0081】
[第3の実施の形態]
以下、第3の実施の形態について説明する。前述の各実施の形態では、ソフトウェアロックステップのプログラムの実行結果が比較される。これに対して、本実施の形態は、実行結果以外のデータが比較される点で、前述の実施の形態と異なる。以下、実行結果に基づくCRC(Cyclic Redundancy Code)が比較される場合を説明するが、比較対象は、CRCに限られず、例えば、ASIL Dクラスの故障検出率を実現した上でバイト数が削減されるハッシュ等であってもよい。
【0082】
図21は、半導体装置5におけるデータフローを表わす図である。ある局面において、CPU230は、データをエリア61に書き込む。CPU10は、エリア61から当該データを読み出し、エリア62に対してデータの書き込みと読み出しとを行なう。CPU20は、エリア61から当該データを読み出し、エリア63に対してデータの書き込みと読み出しとを行なう。
【0083】
CPU10は、エリア62から読み出したデータを用いてソフトウェアロックステップのプログラムを実行し、その実行結果からCRCを生成し、エリア64にその生成したCRCを書き込む。CPU20は、エリア63から読み出したデータを用いてソフトウェアロックステップのプログラムを実行し、実行結果をエリア65に書き込む。
【0084】
CPU230は、比較器231として、エリア65から実行結果を読み出し、その読み出した実行結果からCRCを生成する。さらに、比較器231は、エリア64からCRCを読み出し、その読み出したCRCと、生成したCRCとを比較する。これらのCRCが一致すると、CPU230は、ASIL D対応として上記データを使用する。
【0085】
なお、上記のCRCのデータサイズは、例えば、256バイトのデータについて2バイトであるが、データサイズは、これに限られない。
【0086】
図22および
図23を参照して、半導体装置5の動作について説明する。
図22は、半導体装置5におけるCPUのプログラムの実行結果の出力を説明するための図である。ある局面において、いずれかのCPU(例えば、CPU10)は、ソフトウェアロックステップのプログラムを実行し、その実行結果からCRCを生成し、エリア262(エリア64に相当)に書き込む。他方のCPU(例えば、CPU20)は、ソフトウェアロックステップのプログラムを実行し、その実行結果をエリア263(エリア65に相当)に書き込む。
【0087】
図23は、半導体装置5におけるソフトウェアロックステップのプログラムの実行結果の比較を説明するための図である。CPU230は、エリア262からCRCを読み出し、エリア263からデータを読み出し、その読み出したデータからCRCを計算する。CPU230は、比較器231として、読み出したCRCと計算したCRCとを比較する。
【0088】
以上のようにして、本実施の形態によれば、二つのCPUから出力される実行結果のうちのいずれかからCRCが計算され、メモリ260の所定のエリアに書き込まれる。これにより、メモリ260へのアクセスとして、CRCおよび実行結果の書き込みと、当該CRCおよび実行結果の読み出しと、当該CRCと、実行結果に基づいて計算されるCRCとの比較の後におけるエリア65からのデータの読出とが行なわれる。このような構成によれば、ASIL Dクラスの故障検出率を保ったまま、CRCを用いない場合に比べて、帯域を1.5倍の増加に留めることができる。
【0089】
[第4の実施の形態]
以下、第4の実施の形態について説明する。第4の実施の形態に従う半導体装置6は、ソフトウェアロックステップの実行結果の比較が、アービタで行なわれる点で、前述の実施の形態と異なる。
【0090】
図24は、半導体装置6の構成を表わすブロック図である。半導体装置6は、半導体装置2に示される構成に対して、アービタ250に代えてアービタ251を、処理部40に代えて処理部41を備える。アービタ251は、比較器252を含む。比較器252は、比較対象アドレス、範囲および比較用データベースアドレスのためのレジスタを有する。処理部41は、アービタ251に接続されている。処理部41は、例えば、ASIL Dクラスであり、キャッシュを含み得る。ある局面において、処理部41は、CPUであってもよい。
【0091】
図25は、半導体装置6におけるデータのフローを説明するための図である。ある局面において、CPU230がデータをエリア61に書き込むと、CPU10,20は、それぞれエリア61にアクセスし、データを読み出す。CPU10は、そのデータをエリア62に書き込み、CPU20は、そのデータをエリア63に書き込む。
【0092】
CPU10は、エリア62のデータを読み出して、ソフトウェアロックステップのプログラムを実行し、実行結果をエリア64に書き込む。CPU20は、エリア63のデータを読み出して、ソフトウェアロックステップのプログラムを実行し、実行結果をエリア65に書き込む。
【0093】
比較器252は、処理部41からのリードリクエストを受信すると、当該リードリクエストから二つのリードリクエストを生成する。比較器252は、各リードリクエストに基づいて、エリア64,65にアクセスして、実行結果をそれぞれ読み出す。さらに、比較器252は、読み出した実行結果を比較し、比較結果が一致していることを確認すると、読み出した実行結果を処理部41に送信する。
【0094】
図26は、半導体装置6の制御構造を説明するためのフローチャートである。
ステップS2610にて、CPU10,20は、それぞれ、ソフトウェアロックステップのプログラムを実行し、実行結果を、メモリ260の所定のエリア62,63にそれぞれ書き込む。
【0095】
ステップS2620にて、CPU230は、アービタ252にアクセスして、比較器252の設定を行う。例えば、CPU230は、比較対象アドレス、範囲、および比較用データベースアドレスをレジスタに設定する。
【0096】
ステップS2630にて、ASIL Dクラスの処理部41は、データを所定の領域から読み出す。
【0097】
ステップS2640にて、比較器252は、処理部41からのリクエストに基づいて、エリア64,65から、それぞれデータを読み出す。例えば、比較器252は、エリア64からCRCを読み出し、エリア65から実行結果を読み出す。CRCは、CPU10によるソフトウェアロックステップのプログラムの実行により生成されたものである。
【0098】
ステップS2650にて、比較器252は、読み出したデータ(実行結果)からCRCを計算し、計算で得られたCRCと、読み出したCRCとを比較する。
【0099】
ステップS2660にて、比較器252は、これらのCRCが一致するか否かを判断する。比較器252は、これらのCRCが一致すると判断すると(ステップS2660にてYES)、ステップS2670にて、比較器252は、上記リクエストの発信元である処理部41に、実行結果を送信する。そうでない場合には(ステップS2660にてNO)、ステップS2680にて、比較器252は、エラーを通知するために予め定められたエラー出力処理を実行する。
【0100】
図27を参照して、半導体装置6の動作についてさらに説明する。
図27は、半導体装置6における処理の一部を表わすフローチャートである。
【0101】
ステップS2710にて、半導体装置6は、
図26に示される比較器の処理を実行する。例えば、比較器252は、CPU230から送られる設定データに基づき、メモリ260へのアクセスを管理するためのアドレス設定を行なう。
【0102】
ステップS2715にて、比較器252は、CPU230からのリクエストトランザクションを待機する。
【0103】
ステップS2720にて、比較器252は、受信したリクエストトランザクションに含まれているアドレスと、CRCの比較のために設定されたアドレスとを比較する。ステップS2725にて、比較器252は、これらのアドレスが一致するか否かを判断する。比較器252は、これらのアドレスが一致すると判断すると、比較器252は、ステップS2640以降の処理を実行する。これらのアドレスが一致しない場合には、比較器252は、当該トランザクションの対象となるリクエストが通常のデータ読出リクエストであると判定し、ステップS2735にて、比較器252は、通常のデータ読出処理を実行する。
【0104】
図28は、対象エリアに格納されているデータの読み出しを説明するための図である。ある局面において、半導体装置6の処理部41は、比較器252にリードリクエストを送信する。比較器252は、当該リードリクエストから、メモリ260の所定の領域にアクセスするための2つのリードリクエストを生成する。さらに、比較器252は、二つのリードリクエストに基づいて、エリア262(エリア64に相当)と、エリア263(エリア65に相当)とにそれぞれアクセスする。
【0105】
図29は、比較器252による比較の動作を説明するための図である。ある局面において、比較器252は、エリア262から読み出したデータと、エリア263から読み出したデータとに基づいて比較処理を実行する。ある局面において、比較器252は、CPU10によるソフトウェアロックステップのプログラムの実行結果と、CPU20によるソフトウェアロックステップのプログラムの実行結果とを比較し得る。別の局面において、いずれか一方CPUが当該実行結果からCRCを生成している場合には、比較器252は、そのCRCをメモリ260から読み出し、他方のCPUによる実行結果からCRCを生成し、その読み出したCRCと、生成したCRCとを比較し得る。比較器252は、データの一致を確認すると、当該データを処理部41に送信する。
【0106】
以上のようにして、本実施の形態によれば、アービタ250が比較器252を備える。比較器252がメモリ260にアクセスしてデータの書き込みおよび読み出しを行なうことにより、メモリ260にアクセスするために使用される帯域の使用量(2ライト+2リード)を、ソフトウェアロックステップを行なわない通常の動作のために使用される帯域の使用量(2ライト+2リード)よりも削減することができるので、比較処理によるCPUリソースの減少を回避できる。
【0107】
なお、上記の実施の形態は、第3の実施の形態と組み合わされてもよい。このようにすると、メモリの帯域は、実質的に1倍まで削減でき、処理部41が、CRCの復号を行う必要がなくなるので、処理速度が向上し得る。
【0108】
上記開示された技術的特徴は、以下のように要約され得る。
(構成1) ある局面に従う半導体装置は、キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1のプロセッサ(例、CPU1)および第2のプロセッサ(CPU20)と、メモリ260と、当該メモリに接続され、アドレスプロテクト機能を有するアービタ250と、当該アービタに接続されたバス30と、当該第1のプロセッサと当該バスとに接続され、当該第1のプロセッサによる当該第2のプロセッサのキャッシュへのスヌープ動作を制御するための第1のスヌープ制御回路(例えば、SPU210)と、当該第2のプロセッサと当該バスとに接続され、当該第2のプロセッサによる当該第1のプロセッサのキャッシュへのスヌープ動作を制御するための第2のスヌープ制御回路(例えば、SPU220)と、当該ソフトウェアロックステップと当該通常動作とを切り替えるための制御装置(例えば、CPU230)とを備える。当該制御装置は、当該通常動作が実行される場合に、当該第1のスヌープ制御回路および当該第2のスヌープ制御回路に対して、各当該スヌープ動作を許可し、当該ソフトウェアロックステップが実行される場合に、当該第1のスヌープ制御回路および当該第2のスヌープ制御回路に対して、各当該スヌープ動作を禁止する。当該第1のプロセッサは、当該ソフトウェアロックステップのための第1のソフトウェアを実行し、当該第1のプロセッサのために当該メモリに確保された第1の領域に、当該第1のソフトウェアの実行結果を書き込む。当該第2のプロセッサは、当該ソフトウェアロックステップのための第2のソフトウェアを実行し、当該第1の領域と異なる第2の領域に、当該第2のソフトウェアの実行結果を書き込む。当該半導体装置は、当該第1の領域に書き込まれた実行結果と、当該第2の領域に書き込まれた実行結果とを比較する比較器をさらに備える。
【0109】
(構成2) ある局面に従うと、当該第1のスヌープ制御回路または当該第2のスヌープ制御回路は、所定の条件を満たさない異常なスヌープ動作を禁止する。当該アービタは、当該制御装置によってアクセス可能なメモリ領域に対する当該第1のプロセッサまたは当該第2のプロセッサによるアクセスを禁止する。
【0110】
(構成3) ある局面に従う半導体装置は、当該アービタに接続された第1の処理部および第2の処理部をさらに備える。当該第1のプロセッサが当該第1のソフトウェアを実行することは、当該第1の処理部による演算結果に基づいて、ソフトウェアロックステップのための第3のソフトウェアを実行することと、当該第3のソフトウェアの実行結果に基づいて当該第1のソフトウェアを実行することとを含む。当該第2のプロセッサが当該第2のソフトウェアを実行することは、当該第2の処理部による演算結果に基づいて、ソフトウェアロックステップのための第4のソフトウェアを実行することと、当該第4のソフトウェアの実行結果に基づいて当該第2のソフトウェアを実行することとを含む。
【0111】
(構成4) ある局面に従うと、当該第1のプロセッサは、当該第1のソフトウェアの実行結果に基づいてCRC(Cyclic Redundancy Code)を生成するように構成されている。当該制御装置は、当該第2のソフトウェアの実行結果に基づいてCRCを生成し、当該第1のプロセッサによって生成されたCRCと、当該制御装置によって生成されたCRCとを比較するように構成されている。
【0112】
(構成5) ある局面に従うと、当該比較器は、当該アービタに含まれており、当該メモリに格納されているデータの読出要求に基づいて、当該メモリに格納されている各実行結果を比較するように構成されている。
【0113】
(構成6) ある局面に従うと、当該メモリは、データを格納するための複数の領域(例えば、エリア261,262,263,264)を含む。当該第1のプロセッサに割り当てられる領域は、当該第2のプロセッサによる当該実行結果の書き込みから保護されている。当該第2のプロセッサに割り当てられる領域は、当該第1のプロセッサによる当該実行結果の書き込みから保護されている。当該制御装置に割り当てられる領域は、当該第1のプロセッサおよび当該第2のプロセッサによる書き込みから保護されている。
【0114】
(構成7) ある局面に従うと、当該制御装置の機能安全レベルは、当該第1のプロセッサおよび当該第2のプロセッサの機能安全レベルよりも高い。
【0115】
(構成8) 他の実施の形態に従うと、半導体装置を備える制御システムが提供される。この制御システムは、信号の入力を受ける入力インターフェイスと、当該信号に基づいて演算を実行する半導体装置と、当該演算の実行結果を出力するための出力インターフェイスとを備える。当該半導体装置は、キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1のプロセッサ10および第2のプロセッサ20と、メモリ260と、当該メモリに接続され、アドレスプロテクト機能を有するアービタ250と、当該アービタに接続されたバス30と、当該第1のプロセッサと当該バスとに接続され、当該第1のプロセッサによる当該第2のプロセッサのキャッシュへのスヌープ動作を制御するための第1のスヌープ制御回路(例えば、SPU210)と、当該第2のプロセッサと当該バスとに接続され、当該第2のプロセッサによる当該第1のプロセッサのキャッシュへのスヌープ動作を制御するための第2のスヌープ制御回路(例えば、SPU220)と、当該ソフトウェアロックステップと当該通常動作とを切り替えるための制御装置とを備える。当該制御装置は、当該通常動作が実行される場合に、当該第1のスヌープ制御回路および当該第2のスヌープ制御回路に対して、各当該スヌープ動作を許可し、当該ソフトウェアロックステップが実行される場合に、当該第1のスヌープ制御回路および当該第2のスヌープ制御回路に対して、各当該スヌープ動作を禁止する。当該第1のプロセッサは、当該ソフトウェアロックステップのための第1のソフトウェアを実行し、当該第1のプロセッサのために当該メモリに確保された第1の領域に、当該第1のソフトウェアの実行結果を書き込む。当該第2のプロセッサは、当該ソフトウェアロックステップのための第2のソフトウェアを実行し、当該第1の領域と異なる第2の領域に、当該第2のソフトウェアの実行結果を書き込む。当該半導体装置は、当該第1の領域に書き込まれた実行結果と、当該第2の領域に書き込まれた実行結果とを比較する比較器をさらに備える。
【0116】
(構成9) さらに他の局面に従うと、半導体装置の制御方法が提供される。この制御方法は、キャッシュを有し、ソフトウェアロックステップと通常動作とを実行するための第1および第2のプロセッサを準備するステップと、当該第1のプロセッサによる当該第2のプロセッサのキャッシュへのスヌープ動作を制御するステップと、当該第2のプロセッサによる当該第1のプロセッサのキャッシュへのスヌープ動作を制御するステップと、当該通常動作が実行される場合に、各当該スヌープ動作を許可するステップと、当該ソフトウェアロックステップが実行される場合に、各当該スヌープ動作を禁止するステップと、当該第1のプロセッサが、当該ソフトウェアロックステップのための第1のソフトウェアを実行するステップと、当該第1のプロセッサのためにメモリに第1の領域を確保するステップと、当該第2のプロセッサのために当該第1の領域と異なる第2の領域を確保するステップと、当該第1のプロセッサが、当該第1の領域に、当該第1のソフトウェアの実行結果を書き込むステップと、当該第2のプロセッサが、当該ソフトウェアロックステップのための第2のソフトウェアを実行するステップと、当該第2のプロセッサが、当該第2の領域に、当該第2のソフトウェアの実行結果を書き込むステップと、制御装置が、当該第1の領域に書き込まれた実行結果と、当該第2の領域に書き込まれた実行結果とを比較するステップとを含む。
【0117】
<実施の形態の効果>
上記の各実施の形態に従うソフトウェアロックステップによれば、機能安全レベルが通常レベルのCPU10,20は、互いに同期をとることなく、アプリケーションあるいは関数単位で処理を実行し、ASIL DクラスのCPU230が、当該処理結果を比較する。このようにすると、通常の動作モードからデュアルコアロックステップを行なうモードへの切り替えに必要とされるコア同士の同期をとるためのリセット処理等が不要になり、数ミリ秒の処理停止時間が生じなくなる。
【0118】
なお、上述の実施の形態では、主として、ASIL DレベルあるいはASIL Bレベルの例を用いているが、本開示に係る技術思想は、他の機能安全レベル(例えば、ASIL Aレベル、あるいは、ASIL Cレベル)にも適用可能である。
【0119】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0120】
1,2,3,4,5,6 半導体装置、11,21 コア、13,23 キャッシュ、30 バス、40,41 処理部、50,250 アービタ、60,260 メモリ、61,62,63,64,65,252,261,262,263,264 エリア、70,71 画像処理部、231,252 比較器、310 強制無効化ブロック、320 レジスタ。