以下に図面を参照しながら、好適な実施の形態について説明する。以下の実施の形態に示す具体的な数値等は、実施の形態の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項については、適宜、省略及び簡略化がなされている。
<実施の形態1>
まず、実施の形態1について、図面を用いて、その構成と動作を説明する。図1を参照して、本実施の形態1に係るCPU(Central Processing Unit)システム1の構成について説明する。図1に示すように、CPUシステム1は、CPU10と、コントロール入力I/F11と、コマンド出力I/F12と、I/F変換回路13と、内蔵メモリ14と、DMAC(Direct Memory Access Controller)15と、その他周辺回路16と、その他I/F17とを有する。
CPU10、コントロール入力I/F11、コマンド出力I/F12、I/F変換回路13、DMAC15、その他周辺回路16、及び、その他I/F17は、システムバスを介して相互に接続されている。また、内蔵メモリ14は、I/F変換回路13を介してシステムバスと接続されている。
本実施の形態1では、CPUシステム1が、自動車に搭載される車載制御システムである例について説明するが、これに限られない。CPUシステム1は、CPUシステム1に対してデータを入力する入力ユニットと、CPUシステム1が入力ユニットから入力されたデータに基づいて制御する制御ユニットとを有する任意の機器(例えば、自動車又はオートバイ等の輸送機器、重機等の建設機器、もしくは、製造ロボット等の産業機器)に搭載してもよい。また、CPUシステム1は、メモリと、メモリにアクセスする装置(例えばCPU)とを有する機器であれば、それ以外の機器(例えばパーソナルコンピューター又はスマートフォン等の情報機器)に搭載される情報処理システムであってもよい。
また、CPUシステム1は、例えば、マイクロコントローラ(半導体装置)に構築される。そして、このCPUシステム1は、他のマイクロコントローラ(図1では「サブマイコン」)と連携をとり、自動車を制御することが可能である。
入力ユニットは、自動車に搭載されている装置である。入力ユニットは、ユーザから制御ユニットの制御を指示する入力を受ける。入力ユニットは、例えば、キーユニット又はスイッチ(図1では「SW」)等である。入力ユニットは、ユーザからの入力に応じて、その入力内容を示す入力データをCPUシステム1に送信する。
制御ユニットは、自動車に搭載されている装置である。制御ユニットは、CPUシステム1によって制御される。制御ユニットは、例えば、ドア又はミラー等である。CPUシステム1は、入力ユニットから受信した入力データが示す入力内容に基づいて、制御ユニットの制御内容を示す制御データであるコマンドを生成し、制御ユニットに送信する。制御ユニットは、CPUシステム1からのコマンドに応じて、そのコマンドが示す制御内容で動作する。
CPU10は、入力ユニットからの入力データに基づいて、制御データを生成する。例えば、CPU10は、ドアに対する制御データであれば、制御内容として、ドアの開閉を指示する制御データを生成する。また、例えば、CPU10は、ミラーに対する制御データであれば、制御内容として、ミラーの位置の調整を指示する制御データを生成する。
コントロール入力I/F11は、入力ユニットとシステムバスとを接続するインタフェース回路である。すなわち、コントロール入力I/F11は、入力ユニットから制御ユニットを制御するための入力データが入力される。コマンド出力I/F12は、制御ユニットとシステムバスとを接続するインタフェース回路である。すなわち、コマンド出力I/F12は、制御ユニットを制御するためのコマンドを、制御ユニットに出力する。
I/F変換回路13は、内蔵メモリ14とシステムバスとを接続するインタフェース回路である。I/F変換回路13は、CPU10及びDMAC15の各々からのデータの書き込みの要求に応じて、内蔵メモリ14にデータを書き込む。I/F変換回路13は、CPU10及びDMAC15の各々からのデータの読み出しの要求に応じて、内蔵メモリ14からデータを読み出す。また、I/F変換回路13は、CPU10及びDMAC15の各々からの要求に応じて、内蔵メモリ14にアクセス(データの書き込み又はデータの読み出し)をする際に、データ信号系及びアドレス信号系の故障を検出するための処理を実行する。
より具体的には、I/F変換回路13は、内蔵メモリ14に対してデータを書き込む際に、そのデータから生成したECC(Error Correcting Code:エラー訂正符号)も内蔵メモリ14に書き込む。また、I/F変換回路13は、内蔵メモリ14からデータを読み出す際に、読み出したデータからECCを生成し、生成したECCと、そのデータと共に内蔵メモリ14に書き込んでいたECCとを比較することで故障を検出する。本実施の形態1では、後述するように、データを格納するアドレスからECCを格納するアドレスを生成することで、データ信号系の故障のみならず、アドレス信号系の故障も検出可能とする。
内蔵メモリ14は、各種データが格納される記憶回路である。すなわち、内蔵メモリ14には、例えば、上述の入力データ、制御データ(コマンド)及びECC等が格納される。
DMAC15は、システムバスに接続された各回路10〜13、16、17の間でのデータ転送を実現する。例えば、DMAC15は、入力ユニットからコントロールI/F11に入力された入力データをI/F変換回路13に転送し、転送した入力データの内蔵メモリ14への書き込みをI/F変換回路13に要求する。また、例えば、DMAC15は、内蔵メモリ14からのコマンドの読み出しをI/F変換回路13に要求し、I/F変換回路13が読み出したコマンドをコマンド出力I/F12に転送する。これにより、コマンドが制御ユニットに出力される。
ここで、CPU10は、DMAC15によって内蔵メモリ14に格納された入力データの読み出しをI/F変換回路13に要求し、I/F変換回路13が読み出した入力データを取得する。CPU10は、取得した入力データに基づいてコマンドを生成し、生成したコマンドの内蔵メモリ14への書き込みをI/F変換回路13に要求する。これにより、内蔵メモリ14に格納されたコマンドは、上述したようにDMAC15によって転送される。
CPUシステム1は、その他周辺回路16として任意の回路を備えるようにしてよい。その他I/F17は、サブマイコン等の車載制御システムが備える他のユニットとシステムバスとを接続するためのインタフェース回路である。
以上に説明したように、CPU10及びDMAC15は、バスマスタとして動作する。他の回路11〜13、16、17は、バススレーブとして動作する。
続いて、図2を参照して、本実施の形態1に係るI/F変換回路13の構成について説明する。図2に示すように、I/F変換回路13は、I/F制御回路110と、ADR変換回路120と、WDT変換回路130と、RDT変換回路140とを有する。ここで、「ADR」はアドレスを示し、「WDT」は書き込みデータを示し、「RDT」は読み出しデータを示す略称である。
バスマスタは、イネーブル(セレクト)信号、ライト/リード信号、アドレス信号及びライトデータを、システムバスを介してI/F変換回路13に出力する。I/F変換回路13は、ウエイト#信号、リードデータ及びエラー通知信号を、システムバスを介してバスマスタに出力する。I/F変換回路13及び内蔵メモリ14は、クロック生成回路(図示せず)から入力されるクロック信号に基づいて動作する。なお、ウエイト#信号の「#」は、ウエイト#信号がローアクティブな信号であることを示す記号である。
なお、ここでは、イネーブル信号が1ビットであり、ライト/リード信号が1ビットであり、アドレス信号がNビットであり(Nは所定の正整数)、ライトデータが8ビットであり、ウエイト#信号が1ビットであり、リードデータが8ビットであり、エラー通知信号が1ビットである例について説明する。
バスマスタは、内蔵メモリ14に対してデータを書き込む場合、データの書き込みを要求する信号として、アサートしたイネーブル信号(例えば値は“1”)と、データの書き込みを指定するライト/リード信号(例えば値は“0”)と、データを書き込むアドレスを示すアドレス信号と、書き込むデータとなるライトデータとを、I/F変換回路13に出力する。これに応じて、I/F変換回路13は、内蔵メモリ14のうち、アドレス信号が示すアドレスにライトデータを書き込む。また、この際、I/F変換回路13は、そのライトデータから生成したECCも内蔵メモリ14に書き込む。
また、バスマスタは、内蔵メモリ14からデータを読み出す場合、アサートしたイネーブル信号(例えば値は“1”)と、データの読み出しを指定するライト/リード信号(例えば値は“1”)と、データを読み出すアドレスを示すアドレス信号とを、I/F変換回路13に出力する。これに応じて、I/F変換回路13は、内蔵メモリ14のうち、アドレス信号が示すアドレスに格納されたデータを読み出し、リードデータとしてバスマスタに出力する。また、この際に、I/F変換回路13は、そのデータに対応するECCを内蔵メモリ14から読み出し、読み出したECCとデータとに基づいて、データに誤りが発生しているか否かを判定する。I/F変換回路13は、この判定によってデータの誤りが検出された場合、エラーを通知するエラー通知信号をバスマスタに出力する。ただし、1ビット誤りの場合には、バスマスタに出力するリードデータを訂正する。
I/F制御回路110は、バスマスタが内蔵メモリ14に対してアクセスする場合に、バスマスタに対して1クロックサイクル分だけウエイトをかけることで、そのアクセスを2クロックサイクルまで延ばす。そして、I/F制御回路110は、ADR変換回路120、WDT変換回路130及びRDT変換回路140を、1クロックサイクル目ではデータに関する動作を行わせ、2クロックサイクル目ではECCに関する動作を行わせるように制御する。すなわち、I/F制御回路110は、バスマスタからの信号の出力を2クロックサイクル目まで延ばすことで、2クロックサイクル目でその信号に基づいたECCに関する動作を可能とする。
I/F制御回路110は、イネーブル信号保持回路111と、ウエイト信号生成回路112とを有する。
イネーブル信号保持回路111は、バスマスタが内蔵メモリ14に対してアクセスした際に、クロック信号に基づいて、1クロックサイクル目でアサートされたイネーブル信号の値を保持し、2クロックサイクル目で保持した値の反転出力となる信号をウエイト信号生成回路112に出力する。すなわち、バスマスタから出力されたイネーブル信号は、I/F変換回路13を介して内蔵メモリ14にそのまま入力されるとともに、I/F制御回路110にも入力される。イネーブル信号保持回路111は、例えば、FF(Flip-Flop)回路である。
すなわち、イネーブル信号保持回路111は、1クロックサイクル目では、その1クロックサイクル前のデアサートされたイネーブル信号(例えば値は“0”)に基づいて、その反転出力となる信号(例えば値は“1”)をウエイト信号生成回路112に出力する。次に、イネーブル信号保持回路111は、2クロックサイクル目では、その1クロックサイクル前(1クロックサイクル目)のアサートされたイネーブル信号(例えば値は“1”)に基づいて、その反転出力となる信号(例えば値は“0”)をウエイト信号生成回路112に出力する。
ここで、イネーブル信号は、データの書き込み及び読み出しを有効にするか無効にするかを指示する信号である。イネーブル信号は、データの書き込み及び読み出しを有効にする場合、アサートされる。イネーブル信号は、データの書き込み及び読み出しを無効にする場合、デアサートされる。
内蔵メモリ14は、アサートされたイネーブル信号が入力されている場合、後述するようにI/F変換回路13から入力されるライト/リード信号(書き込み指定)、アドレス信号及びライトデータに基づいて、内蔵メモリ14にデータを書き込む。一方、内蔵メモリ14は、デアサートされたイネーブル信号が入力されている場合、ライト/リード信号、アドレス信号及びライトデータの入力に関わらず、内蔵メモリ14へのデータの書き込みは行わない。
また、内蔵メモリ14は、アサートされたイネーブル信号が入力されている場合、後述するようにI/F変換回路13から入力されるライト/リード信号(読み出し指定)及びアドレス信号に基づいて、内蔵メモリ14からデータを読み出す。一方、内蔵メモリ14は、デアサートされたイネーブル信号が入力されている場合、ライト/リード信号及びアドレス信号の入力に関わらず、内蔵メモリ14からのデータの読み出しは行わない。
ウエイト信号生成回路112は、バスマスタから入力されるイネーブル信号と、イネーブル信号保持回路111から入力される信号のNAND演算結果となる信号を、ウエイト#信号としてバスマスタに出力する。ウエイト信号生成回路112は、例えば、NAND(否定的論理積)回路である。
すなわち、ウエイト信号生成回路112は、1クロックサイクル目では、アサートされたイネーブル信号(例えば値は“1”)と、イネーブル信号保持回路111からからの信号(例えば値は“1”)とに基づいて、アサートされたウエイト#信号(例えば値は“0”)をバスマスタに出力する。このアサートされたウエイト#信号が入力されている間、バスマスタは、その動作を停止する。次に、ウエイト信号生成回路112は、2クロックサイクル目では、アサートされたままのイネーブル信号(例えば値は“1”)と、イネーブル信号保持回路111からの信号(例えば値は“0”)とに基づいて、デアサートされたウエイト#信号(例えば値は“1”)をバスマスタに出力する。このデアサートされたウエイト#信号が入力されると、バスマスタは、その動作を再開する。
このように、バスマスタが内蔵メモリ14にアクセスした際に、1クロックサイクル分だけ、アサートされたウエイト#信号を入力することで、そのアクセスサイクルが延ばされる。そして、バスマスタによる内蔵メモリ14に対するアクセスは、2クロックサイクルで完了することになる。よって、バスマスタが内蔵メモリ14にアクセスする際における、イネーブル信号、ライト/リード信号、アドレス信号及びライトデータの出力は、2クロックサイクルの間、維持されることになる。
また、ウエイト#信号は、ADR変換回路120、WDT変換回路130及びRDT変換回路140の動作を切り替えるデータ/ECC信号としても機能する。すなわち、ウエイト信号生成回路112は、ウエイト#信号を、データ/ECC信号として、ADR変換回路120、WDT変換回路130及びRDT変換回路140の各々に出力する。
また、ウエイト#信号は、内蔵メモリ14にデータを書き込むアドレス、又は、内蔵メモリ14からデータを読み出すアドレスの最上位ビットの値を示す信号としても機能する。すなわち、ウエイト信号生成回路112は、ウエイト#信号を、アドレスの最上位ビットを示す信号として内蔵メモリ14に出力する。
ADR変換回路120は、1クロックサイクル目では、データを書き込む又は読み出すアドレスを内蔵メモリ14に対して指定するために、バスマスタから入力されるアドレス信号をそのまま内蔵メモリ14に出力する。一方、ADR変換回路120は、2クロックサイクル目では、書き込むデータ又は読み出すデータとペアとなるECCを書き込む又は読み出すアドレスを内蔵メモリ14に対して指定するために、バスマスタから入力されるアドレス信号に基づいて、ECCを書き込む又は読み出すアドレスを示すアドレス信号を生成し、内蔵メモリ14に出力する。
ADR変換回路120は、ADR反転回路121と、セレクタ122とを有する。ADR反転回路121には、バスマスタから出力されるアドレス信号が入力される。ADR反転回路121は、入力されたアドレス信号が示すアドレスの全てのビットの各々の値を反転し、セレクタ122に出力する。セレクタ122は、バスマスタからのアドレス信号、及び、ADR反転回路121からのアドレス信号が入力される。セレクタ122は、バスマスタからのアドレス信号、及び、ADR反転回路121からのアドレス信号のうち、いずれか1つを選択し、内蔵メモリ14に出力する。
セレクタ122は、ウエイト信号生成回路112からデータ/ECC信号(例えば値は“0”)が入力されている1クロックサイクル目の場合、バスマスタから入力されるアドレス信号を選択し、内蔵メモリ14に出力する。一方、セレクタ122は、ウエイト信号生成回路112からデータ/ECC信号(例えば値は“1”)が入力されている2クロックサイクル目の場合、ADR反転回路121から入力されるアドレス信号を選択し、内蔵メモリ14に出力する。
これにより、最終的に内蔵メモリ14に入力される(N+1)ビットのアドレス信号のうち、下位Nビットは、ADR変換回路120が出力するNビットのアドレス信号となり、上位1ビットは、ウエイト信号生成回路112が出力するデータ/ECC信号となる。
そして、内蔵メモリ14は、1クロックサイクル目では、(N+1)ビットのアドレス信号が示すアドレスに対して、データの書き込み又は読み出しを行う。内蔵メモリ14は、2クロックサイクル目では、(N+1)ビットのアドレス信号が示すアドレスに対して、ECCの書き込み又は読み出しを行う。
WDT変換回路130は、1クロックサイクル目では、データを内蔵メモリ14に対して書き込むために、バスマスタから入力されるライトデータをそのまま内蔵メモリ14に出力する。一方、WDT変換回路130は、2クロックサイクル目では、そのライトデータとペアとなるECCを内蔵メモリ14に対して書き込むために、バスマスタから入力されるライトデータに基づいて、ECCを生成し、内蔵メモリ14に出力する。
WDT変換回路130は、ECC生成回路131と、セレクタ132とを有する。ECC生成回路131には、バスマスタからのライトデータが入力される。ECC生成回路131は、入力されたライトデータからECCを生成し、セレクタ132に出力する。
セレクタ132は、バスマスタからのライトデータ、及び、ECC生成回路131からのECCが入力される。セレクタ132は、バスマスタからのライトデータ、及び、ECC生成回路131からのECCのうち、いずれか1つを選択し、内蔵メモリ14に出力する。
セレクタ132は、ウエイト信号生成回路112からデータ/ECC信号(例えば値は“0”)が入力されている1クロックサイクル目の場合、バスマスタから入力されるライトデータを選択し、内蔵メモリ14に出力する。一方、セレクタ132は、ウエイト信号生成回路112からデータ/ECC信号(例えば値は“1”)が入力されている2クロックサイクル目の場合、ECC生成回路131から入力されるECCを選択し、内蔵メモリ14に出力する。
これにより、内蔵メモリ14は、データの書き込みを指定するライト/リード信号が入力されている場合、1クロックサイクル目では、バスマスタから入力されるライトデータを、(N+1)ビットのアドレス信号が示すアドレスに格納する。内蔵メモリ14は、2クロックサイクル目では、WDT変換回路130から入力されるECC(厳密には、後述するようにダミービットとECCを含むデータ)を、(N+1)ビットのアドレス信号が示すアドレスに格納する。なお、バスマスタから出力されたライト/リード信号は、I/F変換回路13を介して、そのまま内蔵メモリ14に入力される。
一方、内蔵メモリ14は、データの読み出しを指定するライト/リード信号が入力されている場合、1クロックサイクル目では、(N+1)ビットのアドレス信号が示すアドレスに格納されたデータを、リードデータとしてRDT変換回路140に出力する。内蔵メモリ14は、2クロックサイクル目では、(N+1)ビットのアドレス信号が示すアドレスに格納されたECCをRDT変換回路140に出力する。
RDT変換回路140は、バスマスタが内蔵メモリ14からデータを読み出す際に、内蔵メモリ14から入力されたリードデータ及びECCに基づいて、リードデータに誤りが発生しているか否かを判定する。RDT変換回路140は、リードデータに誤りが発生していない場合、内蔵メモリ14から入力されたリードデータを、そのままバスマスタに出力する。一方、RDT変換回路140は、リードデータに誤りが発生している場合、内蔵メモリ14から入力されたリードデータにおける誤りをECCに基づいて訂正してからバスマスタに出力する。
RDT変換回路140は、データ保持回路141と、ECCチェック回路142と、エラー訂正回路143とを有する。
データ保持回路141は、バスマスタが内蔵メモリ14に対してアクセスした際に、クロック信号に基づいて、1クロックサイクル目で内蔵メモリ14から入力されたリードデータを取り込み、2クロックサイクル目で保持したリードデータをECCチェック回路142及びエラー訂正回路143に出力する。データ保持回路141は、例えば、FF回路である。
ECCチェック回路142は、1クロックサイクル目では動作せず、2クロックサイクル目で、データ保持回路141から入力されるリードデータと、内蔵メモリ14から入力されるECCとに基づいて、データの誤りが発生しているか否かを判定する。
すなわち、ECCチェック回路142は、1クロックサイクル目で、ウエイト信号生成回路112からデータ/ECC信号(例えば値は“0”)が入力されている場合、故障の判定は行わない。一方、ECCチェック回路142は、2クロックサイクル目で、ウエイト信号生成回路112からデータ/ECC信号(例えば値は“1”)が入力されている場合、データの誤りが発生しているか否かを判定する。言い換えると、データ/ECC信号は、ECCチェック回路142の動作を有効にするか無効にするかを指示するイネーブル信号として機能する。
ECCチェック回路142は、データのいずれか1ビットに誤りが発生していると判定した場合、そのビット位置を示すエラー訂正信号をエラー訂正回路143に出力する。ECCチェック回路142は、データに訂正不能な2ビット以上の誤りが発生していると判定した場合、エラーであることを通知する信号として、アサートされたエラー通知信号(例えば値は“1”)をバスマスタに出力する。一方、ECCチェック回路142は、データに訂正不能な2ビット以上の誤りが発生していないと判定した場合、エラーでないことを通知する信号として、デアサートされたエラー通知信号(例えば値は“0”)をバスマスタに出力する。
エラー訂正回路143は、データに誤りが発生していない場合、2クロックサイクル目でデータ保持回路141から入力されるリードデータを、そのままバスマスタに出力する。一方、エラー訂正回路143は、データに誤りが発生している場合、2クロックサイクル目でデータ保持回路141から入力されるリードデータの誤りを訂正してからバスマスタに出力する。より具体的には、エラー訂正回路143は、データ保持回路141から入力されるリードデータのうち、ECCチェック回路142から入力されるエラー訂正信号が示すビット位置の値を反転させた結果となるデータを、エラー訂正後のリードデータとしてバスマスタに出力する。エラー訂正回路143は、例えば、N個のXOR(排他的論理和)回路を有する。
続いて、図3を参照して、本実施の形態1に係るADR変換回路120が有するADR反転回路121の構成について説明する。図3に示すように、ADR変換回路120は、N個のビット値反転回路1210を有する。ここでは、アドレス信号がNビットである例について説明する。
N個のビット値反転回路1210の各々は、Nビットのアドレス信号の各ビットA0、A1、A2、・・・、A(N−1)に対応する。N個のビット値反転回路1210の各々は、アドレス信号のうち、自身に対応するビットの値を反転し、反転後の値を出力する。N個のビット値反転回路1210の各々から出力された各ビットA’0、A’1、A’2、・・・、A’(N−1)は、Nビットのアドレス信号としてまとめられ、内蔵メモリ14に出力される。ここで、“A”に続く数字は、数字が大きくなるほど上位のビットであることを示している。すなわち、N個のビットにおいて、“0”は最下位ビットであることを示し、“N−1”は最上位ビットであることを示している。以降も同様である。ビット値反転回路1210は、例えば、NOT(論理否定)回路である。
続いて、図4を参照して、本実施の形態1に係る内蔵メモリ14のメモリマップについて説明する。ここでは、内蔵メモリ14のデータ幅は8ビットであり、内蔵メモリ14のアドレス幅は(N+1)ビットであり、内蔵メモリ14のデータ容量が(8×2(N+1))ビットであり、N=3である例について説明する。
内蔵メモリ14は、図4における下位半分を本来のデータを格納する領域、上位半分を本来のデータとペアになるECCを格納する領域として使用する。つまり、内蔵メモリ14における領域は、そのアドレス空間において、アドレスの最上位ビット(図4ではA3)の値が“0”となる場合はデータが格納される領域として、“1”となる場合はECCが格納される領域として区別される。本実施の形態1では、データを格納するアドレスの下位Nビット(図4ではA2〜A0)の値に対して、そのデータとペアになるECCを格納するアドレスの下位Nビットの値は、図3に示したADR反転回路121の動作によりビット値を反転した値(図4においてA2〜A0の値を「ADR反転」と示している部分)になっている。
すなわち、図4に示すように、アドレスADR−0(“0000”)のデータ(“DATA0”)と、アドレスADR−F(“1111”)のECC(“ECC0”)とがペアになる。アドレスADR−1(“0001”)のデータ(“DATA1”)と、アドレスADR−E(“1110”)のECC(“ECC1”)がペアになる。アドレスADR−2(“0010”)のデータ(“DATA2”)と、アドレスADR−D(“1101”)のECC(“ECC2”)がペアになる。アドレスADR−3(“0011”)のデータ(“DATA3”)と、アドレスADR−C(“1100”)のECC(“ECC3”)がペアになる。アドレスADR−4(“0100”)のデータ(“DATA4”)と、アドレスADR−B(“1011”)のECC(“ECC4”)がペアとなる。アドレスADR−5(“0101”)のデータ(“DATA5”)と、アドレスADR−A(“1010”)のECC(“ECC5”)がペアとなる。アドレスADR−6(“0110”)のデータ(“DATA6”)と、アドレスADR−9(“1001”)のECC(“ECC6”)がペアとなる。アドレスADR−7(“0111”)のデータ(“DATA7”)と、アドレスADR−8(“1000”)の(“ECC7”)がペアになる。
ここで、図4に示す「ADR−n」の「n」にあたる部分は、アドレスを16進数表記したものである。すなわち、「ADR−0」は、アドレスが“0000”であることを意味し、「ADR−F」は、アドレスが“1111”であることを意味する。
なお、8ビットのデータから生成されるECCは5ビットであるため、そのECCは上位3ビットにダミービット(例えば値は“0”)を付加して8ビットのデータとされた後で内蔵メモリ14に格納される。
内蔵メモリ14は、以上に説明したように構成されており、その内蔵メモリ14に対して設けているI/F変換回路13も以上に説明した通りに動作する。そのため、内蔵メモリ14に書き込んだデータのいずれかのビットに誤りが発生した場合には、そのデータを読み出す際に、I/F変換回路13のRDT変換回路140で、そのデータの誤りが検出される。そして、1ビット誤りが検出された場合には、エラーが訂正される。2ビット以上の誤りが検出された場合には、エラー通知信号でエラー訂正不能であることが通知される。
よって、I/F変換回路13のWDT変換回路130から内蔵メモリ14に出力するライトデータ(8ビット)の8本の信号線のうち、いずれか1本以上の故障(断線)によりStuck−at故障(0または1への固着)が発生した場合、相互にペアを成すデータとECCの両方において、故障した信号線に対応するビット位置の値が本来の値と異なる値(反転した値)になる。そのため、そのデータを読み出す際に、ECCチェック回路142で1ビットの誤り、または、2ビット以上の誤りとして、その値の変化が確実に検出される。I/F変換回路13のRDT変換回路140が内蔵メモリ14から入力するリードデータ(8ビット)の8本の信号線のうち、いずれか1本以上の故障(断線)によりStuck−at故障(0または1への固着)が発生した場合も同様である。
一方、I/F変換回路13のADR変換回路120から内蔵メモリ14に入力するアドレス信号(Nビット)のN本の信号線のうち、いずれか1本以上の故障(断線)によりStuck−at故障(0または1に固着)が発生した場合については、以下に説明する通りとなる。
図5を参照して、内蔵メモリ14に入力するアドレス信号(Nビット)のうち、A2ビットにStuck−at1故障(1への固着)が発生した場合の動作について説明する。なお、内蔵メモリ14は、図4に示したように、N=3であるものとする。また、ここでは、以下の流れでデータの書き込みと読み出しが行われる場合について説明する。
(1)データ(“DATA5”)がアドレスADR−5(“0101”)に書き込まれており、そのデータとペアになるECC(“ECC5”)がアドレスADR−A(“1010”)に書き込まれている。図では、括弧付きで“DATA5”と“ECC5”を示している。
(2)新たに、データ(“DATA1”)をアドレスADR−1(“0001”)に、そのデータとペアになるECC(“ECC1”)を、アドレスADR−E(“1110”)に書き込む。
(3)ここで、アドレスのA2ビットに対応するアドレス信号線にStuck−at1故障が発生する。そのため、内蔵メモリ14のアドレスADR−0〜ADR−3とADR−8〜ADR−Bのアドレスにはアクセスできなくなる。
(4)上記の(2)で書き込んだデータ(“DATA1”)と、そのデータとペアになるECC(“ECC1”)を読み出そうとする。
(4)’このとき、実際には、上記の(3)で発生したアドレス信号線の故障により、データ(“DATA1”)が格納されているアドレスADR−1(“0001”)からではなく、内蔵メモリ14のアドレスADR−5(“0101”)からデータ(“DATA5”)が読み出される。一方、ECC(“ECC1”)が格納されているアドレスADR−E(“1110”)は、このアドレス信号線の故障による影響を受けないため、正常にECC(“ECC1”)が読み出される。つまり、上記の(2)で書き込んだデータではないデータ(“DATA5”)と、そのデータとはペアが崩れたECC(“ECC1”)が読み出される。
(5)その結果、RDT変換回路140が有するECCチェック回路142で1ビットの誤り、又は、2ビット以上の誤りとして、Stuck−at1故障が確実に検出される。このように、アドレス信号系の故障の検出も可能であるため、本実施の形態1は、機能安全の観点から優れていると言える。
また、図6を参照して、ECCを格納する領域に対して「ADR反転」を行わないケース(つまり、図2に示したI/F変換回路13におけるADR変換回路120を無くしたケース)で、図5と同じデータの書き込みと読み出しが行われる場合の動作について説明する。
(1)データ(“DATA5”)がアドレスADR−5(“0101”)に書き込まれており、そのデータとペアになるECC(“ECC5”)がADR−D(“1101”)に書き込まれている。図では、括弧付きで“DATA5”と“ECC5”を示している。
(2)新たに、データ(“DATA1”)をアドレスADR−1(“0001”)に、そのデータとペアになるECC(“ECC1”)をアドレスADR−9(“1001”)に書き込む。
(3)ここで、アドレスのA2ビットに対応するアドレス信号線にStuck−at1故障が発生する。そのため、内蔵メモリ14のアドレスADR−0〜ADR−3とADR−8〜ADR−Bのアドレスにはアクセスできなくなる。
(4)上記の(2)で書き込んだデータ(“DATA1”)と、そのデータとペアになるECC(“ECC1”)を読み出そうとする。
(4)’このとき、実際には、上記の(3)で発生したアドレス信号線の故障により、データ(“DATA1”)が格納されているアドレスADR−1(“0001”)からではなく、内蔵メモリ14のアドレスADR−5(“0101”)からデータ(“DATA5”)が読み出される。また、ECC(“ECC1”)が格納されているアドレスADR−9(“1001”)も、このアドレス信号線の故障による影響を受けるため、内蔵メモリ14のアドレスADR−D(“1101”)からECC(“ECC5”)が読み出される。つまり、上記の(2)で書き込んだデータではないデータ(“DATA5”)と、そのデータとペアを成すECC(“ECC5”)が読み出される。
(5)その結果、RDT変換回路140が有するECCチェック回路142では、正常なデータ(“DATA5”)とECC(“ECC5”)のペアに見えるため、データにビット誤りが発生していない限り、1ビットの誤り、又は、2ビット以上の誤りとして故障を検出することはできない。
なお、図5は、内蔵メモリ14に入力するアドレス信号のうち、A2ビットにStuck−at1故障(1への固着)が発生した場合の動作を示したものであった。しかし、そのA2ビットにStuck−at0故障(0への固着)が発生した場合や、他のアドレス(具体的には、A1ビットとA0ビット)にStuck−at1故障またはStuck−at0故障が発生した場合であっても、本実施の形態1によれば同様にアドレス信号線の故障を検出可能である。
図7は、図4に示したN=3の場合について、“DATA0”と“ECC0”、“DATA1”と“ECC1”、・・・、“DATA7”と“ECC7”という8通りのペアについて、アドレス信号の下位3ビットA2〜A0の値を、8行(上から順番に“0”〜“7”と番号付け)にわたって示した表である。図7では、データを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(データ)」として示し、ECCを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(ECC)」として示している。
この表の左から右に向かって、
(1)アドレスの全ビットに故障が発生していない場合
(2)アドレスのA2ビットにStuck−at1故障が発生した場合(これが、図5に示したものに相当する)、
(3)アドレスのA2ビットにStuck−at0故障が発生した場合
(4)アドレスのA1ビットにStuck−at1故障が発生した場合
(5)アドレスのA1ビットにStuck−at0故障が発生した場合
(6)アドレスのA0ビットにStuck−at1故障が発生した場合
(7)アドレスのA0ビットにStuck−at0故障が発生した場合
の7通りを示している。
なお、A2〜A0の値として、各ビット位置の値(0または1)を3つ並べて示しているが、故障により値が変わったビット位置の値には下線を付している。
図7に示した表の2行目(番号は1)は、図5の(2)において書き込むデータ(“DATA1”)と、そのデータとペアになるECC(“ECC1”)の各々が格納されるアドレスを示した行になる。アドレスの全ビットに故障が発生していない場合のアドレスは、一番左に示している通り、それぞれ、ADR−1の下位3ビット(“001”)とADR−Eの下位3ビット(“110”)となる。図7の表において、この2つのA2〜A0の値のペアを実線で囲んで示している。
ここで、A2ビットにStuck−at1故障が発生した場合のアドレスは、そのすぐ右に示している通り、アドレス(データ)のADR−1は故障による影響を受けて別のADR−5(下位3ビットは“101”)となり、アドレス(ECC)のADR−E(下位3ビットは“110”)は故障による影響を受けずにADR−Eのままとなる。この2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示すとともに、この2つのA2〜A0の値のペアの故障による影響を受けた後の値の各々で実際にアクセスされるアドレス(データ)及びアドレス(ECC)を、表において実線で囲むとともに太実線で接続して示している。これによって、データ(“DATA5”)とECC(“ECC1”)がアクセスされる。すなわち、図5の(4)’で説明した通り、データとECCのペアが崩れていることが分かる。
同じく、さらに右に進むにつれて、他の例として、A1ビットにStuck−at1故障が発生した場合と、A0ビットにStuck−at1故障が発生した場合についても、2つのA2〜A0の値のペアについて、上記と同様の形で示しているが、いずれの場合も、データとECCのペアが崩れていることが分かる。
また、さらに、他の例として、図7に示した表の7行目(番号は6)における、データ(“DATA6”)と、そのデータとペアとなるECC(“ECC6”)の各々が格納されるアドレスに関して、同様に、A2ビットにStuck−at0故障が発生した場合、A1ビットにStuck−at0故障が発生した場合、A0ビットにStuck−at0故障が発生した場合についても示している。そして、いずれの場合も、やはりデータとECCのペアは崩れている。この表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、確実に故障が検出できることが分かる。
また、図8は、ECCを格納する領域に対して「ADR反転」を行わないケース(つまり、図2に示したI/F変換回路13におけるADR変換回路120を無くしたケース)で、図7と同様にアドレス(データ)とアドレス(ECC)の下位3ビットであるA2〜A0の値を示した表である。この表の2行目(番号は1)で左から2通り目にあるアドレスのA2ビットにStuck−at1故障が発生した場合が、図6に示したものに相当する。
このケースの場合、図8に示した表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、その影響によりアクセスできなくなるアドレスのデータとECCのペアは、それとは別のアドレスのデータとECCのペアとして認識される(つまり、アドレスが縮退される)。そのため、そのデータを読み出す際に、アドレス信号線の故障を検出することはできない。
以上の説明では、バスマスタから入力されるNビットのアドレス信号の全てのビットの値を反転する例について説明したが、これに限られない。例えば、Nビットのアドレス信号のうちの所定数ビット(Nビット〜1ビットのいずれか)の値を反転するようにしても一定の効果が得られる。なお、この所定数ビットは、Nビットにおいて、上位から所定数のビットでもよく、下位から所定数のビットでもよい。また、この所定数ビットは、Nビットにおいて、連続したビットでもよく、非連続のビットでもよい。しかしながら、好ましくは、上述したように、Nビットのアドレス信号の全てのビットの値を反転することで、より多くの故障を検出することが可能となる。
以上に説明したように、本実施の形態1では、ADR変換回路120は、内蔵メモリ14にデータを格納するための第1のアドレスに基づいて、データから生成された誤り検出符号を格納するための第2のアドレスを生成する。WDT変換回路130は、第1のアドレスに対してデータの書き込みが要求された場合、第1のアドレスにデータを書き込むとともに、第2のアドレスに誤り検出符号を書き込む。RDT変換回路104は、第1のアドレスに対してデータの読み出しが要求された場合、第1のアドレスからデータを読み出すとともに、第2のアドレスから誤り検出符号を読み出し、そのデータとその誤り検出符号とに基づいてエラーを検出する。
ここで、I/F制御回路110は、第1のアドレス((N+1)ビットのアドレスに対応)の少なくとも1つのビットの値((N+1)ビットのアドレスの最上位ビットに対応)を変更し、誤り検出符号の格納位置がデータの格納位置に対してオフセットされるようにしている。ADR変換回路120は、それ以外のビット(下位Nビットに対応)のうちの所定数ビットの値が反転したアドレスを第2のアドレスとして生成している。上述の例では、ADR変換回路120は、それ以外のビットの全て(Nビット)の値を反転したアドレスを第2のアドレスとして生成するようにしている。
これによれば、データと、そのデータから生成したECCのペアを内蔵メモリ14に書き込んだ後で、内蔵メモリ14に対するアドレス信号線のいずれか1本にStuck−at故障(0または1への固着)が発生した場合、その書き込み済みのデータを読み出す際に、アドレス信号線の故障検出が可能となる。
これは、2本以上のアドレス信号線の故障に対しても同様に有効である。また、内蔵メモリ14に入力するアドレス信号を生成して出力するADR変換回路120や、内蔵メモリ14の中のアドレス信号処理回路(図示せず)で起きたアドレスの値に影響が出る故障も検出可能である。
また、本実施の形態1では、バスマスタは、データの書き込み又は読み出しが行われる単位時間(クロックサイクルに対応)の間、データの書き込み又は読み出しを有効にするイネーブル信号を内蔵メモリ14に出力する。I/F制御回路110は、バスマスタからのデータの書き込み又は読み出しを有効にするイネーブル信号に応じて、単位時間の間、バスマスタの動作を許容するウエイト信号に代えて、バスマスタの動作を抑止するウエイト信号をバスマスタに出力する。
WDT変換回路130は、I/F制御回路110からのバスマスタの動作を抑止するウエイト信号に応じて、第1のアドレスにデータを書き込み(第1のクロックサイクルに対応)、その後のI/F制御回路110からのバスマスタの動作を許容するウエイト信号に応じて、第2のアドレスに誤り検出符号を書き込む(第2のクロックサイクルに対応)ようにしている。
RDT変換回路140は、I/F制御回路110からのバスマスタの動作を抑止するウエイト信号に応じて、その後の第1のアドレスからデータを読み出し、I/F制御回路110からのバスマスタの動作を許容するウエイト信号に応じて、第2のアドレスから誤り検出符号を読み出すようにしている。
これによれば、バスマスタによるデータの書き込み又は読み出しの要求を継続させることができるとともに、その継続させた時間を利用して誤り検出符号を内蔵メモリ14に書き込む又は内蔵メモリ14から読み出すことができる。また、データの書き込みの要求の継続と、データの書き込み及び誤り検出符号の書き込みの切り替えとを、ウエイト信号を流用して、より簡易な構成で実現することができる。また、データの読み出しの要求の継続と、データの読み出し及び誤り検出符号の読み出しの切り替えとを、ウエイト信号を流用して、より簡易な構成で実現することができる。
また、本実施の形態1では、バスマスタの動作を抑止するウエイト信号は、第1のアドレスの少なくとも1つのビットの値として利用される。また、バスマスタの動作を許容するウエイト信号は、第1のアドレスの少なくとも1つのビットの値の変更後の値として利用されるようにしている。
これによれば、データの書き込み又は読み出しの要求の継続と、データの格納位置に対する誤り検出符号の格納位置のオフセットとを、ウエイト信号を流用して、より簡易な構成で実現することができる。
また、本実施の形態1では、RDT変換回路140は、I/F制御回路110からのバスマスタの動作を抑止するウエイト信号に応じて、内蔵メモリ14から読み出したデータを保持し、その後のI/F制御回路110からのバスマスタの動作を許容するウエイト信号に応じて、内蔵メモリ14から読み出した誤り検出符号と、保持したデータとに基づいてエラーを検出するようにしている。
これによれば、データの書き込み又は読み出しの要求の継続と、エラー検出のための動作の切り替えとを、ウエイト信号を流用して、より簡易な構成で実現することができる。
<実施の形態2>
続いて、実施の形態2について、図面を用いて、その構成と動作を説明する。本実施の形態2に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態2では、CPUシステム1が有するI/F変換回路13の一部の構成と動作が、実施の形態1に係るI/F変換回路13とは異なる。
続いて、図9を参照して、本実施の形態2に係るI/F変換回路13の構成について説明する。本実施の形態2に係るI/F変換回路13は、実施の形態1に係るI/F変換回路13と比較して、ADR変換回路120におけるADR反転回路121に代えて、ADRローテーション回路123を有する。なお、本実施の形態2に係るI/F制御回路110、WDT変換回路130及びRDT変換回路140の構成及び動作は、実施の形態1に係るそれらと同様である。
ADRローテーション回路123には、バスマスタから出力されるアドレス信号が入力される。ADRローテーション回路123は、入力されたアドレス信号が示すアドレスの全てのビットをローテーション(シフト)して、セレクタ122に出力する。よって、本実施の形態2では、セレクタ122は、バスマスタから出力されるアドレス信号、及び、ADRローテーション回路123から出力されるアドレス信号のうち、いずれか1つを選択し、内蔵メモリ14に出力する。
続いて、図10を参照して、本実施の形態2に係るADR変換回路120が有するADRローテーション回路123の構成について説明する。ここでは、アドレス信号がNビットである例について説明する。
図10に示すように、ADRローテーション回路123は、Nビットのアドレス信号の各ビットの位置を入れ替えるために、そのアドレス信号が示すアドレスを左方向に(上位ビット方向に)1ビットだけローテーションする。すなわち、ADRローテーション回路123は、アドレス信号のNビットを1ビットだけ左シフトして溢れた最上位ビットを最下位ビットに移す。
これは、図10に示すように、ADRローテーション回路123において、Nビットのアドレス信号線の各々のビット位置を、入力段と出力段とでずらして接続することで実現する。すなわち、ADRローテーション回路123に入力されたNビットのアドレス信号の各ビットA0、A1、A2、・・・、A(N−1)を、ADRローテーション回路123から出力されるNビットのアドレス信号の各ビットA’1、A’2、・・・、A’(N−1)、A’0とする。なお、このADRローテーション回路123では、Nビットのアドレス信号線の各ビットの信号を、N個のバッファ1230の各々で受けた後に、その接続先のビット位置をずらすようにしている。
続いて、図11を参照して、実施の形態2に係る内蔵メモリ14のメモリマップについて説明する。ここでは、図4に示した実施の形態1に係る内蔵メモリ14と同様に、内蔵メモリ14のデータ幅は8ビットであり、内蔵メモリ14のアドレス幅は(N+1)ビットであり、内蔵メモリ14のデータ容量が(8×2(N+1))ビットであり、N=3である例について説明する。
本実施の形態2では、データを格納するアドレスの下位Nビット(図11ではA2〜A0)の値に対して、そのデータとペアになるECCを格納するアドレスの下位Nビットの値は、図10に示したADRローテーション回路123の動作により各ビット値が入れ替えられたもの(図11においてA2〜A0の値を「ADRローテーション」と示している部分)になっている。
すなわち、図11に示すように、アドレスADR−0(“0000”)のデータ(“DATA0”)と、アドレスADR−8(“1000”)のECC(“ECC0”)とがペアになる。アドレスADR−1(“0001”)のデータ(“DATA1”)と、アドレスADR−A(“1010”)のECC(“ECC1”)がペアになる。アドレスADR−2(“0010”)のデータ(“DATA2”)と、アドレスADR−C(“1100”)のECC(“ECC2”)がペアになる。アドレスADR−3(“0011”)のデータ(“DATA3”)と、アドレスADR−E(“1110”)のECC(“ECC3”)がペアとなる。アドレスADR−4(“0100”)のデータ(“DATA4”)と、アドレスADR−9(“1001”)のECC(“ECC4”)がペアとなる。アドレスADR−5(“0101”)のデータ(“DATA5”)と、アドレスADR−B(“1011”)のECC(“ECC5”)がペアとなる。アドレスADR−6(“0110”)のデータ(“DATA6”)と、アドレスADR−D(“1101”)のECC(“ECC6”)がペアとなる。アドレスADR−7(“0111”)のデータ(“DATA7”)と、アドレスADR−F(“1111”)のECC(“ECC7”)がペアになる。
なお、実施の形態1と同様に、ECCは上位3ビットにダミービット(例えば値は“0”)を付加して8ビットのデータとされた後で内蔵メモリ14に格納される。また、実施の形態1と同様に、I/F変換回路13のWDT変換回路130が内蔵メモリ14に出力するライトデータ(8ビット)の8本の信号線のうち、いずれか1本以上に故障(断線)によりStuck−at故障(0または1への固着)が発生した場合、相互にペアを成すデータとECCの両方において、故障した信号線に対応するビット位置の値が本来の値と異なる値(反転した値)になる。そのため、そのデータを読み出す際に、ECCチェック回路142で1ビットの誤り、または、2ビット以上の誤りとして、その値の変化が確実に検出される。I/F変換回路13のRDT変換回路140が内蔵メモリ14から入力するリードデータ(8ビット)の8本の信号線のうち、いずれか1本以上の故障(断線)によりStuck−at故障(0または1への固着)が発生した場合も同様である。
一方、I/F変換回路13のADR変換回路120から内蔵メモリ14に入力するアドレス信号(Nビット)のN本の信号線のうち、いずれか1本以上の故障(断線)によりStuck−at故障(0または1に固着)が発生した場合については、以下に説明する通りとなる。
図12を参照して、実施の形態1の場合の図5と同様に、内蔵メモリ14に入力するアドレス信号(Nビット)のうち、A2ビットにStuck−at1故障(1への固着)が発生した場合の動作について説明する。なお、内蔵メモリ14は、図11に示したように、N=3であるものとする。また、ここでは、以下の流れでデータの書き込みと読み出しが行われる場合について説明する。
(1)データ(“DATA3”)がアドレスADR−3(“0011”)に、そのデータとペアになるECC(“ECC3”)がアドレスADR−E(“1110”)に書き込まれている。また、データ(“DATA5”)がアドレスADR−5(“0101”)に、そのデータとペアになるECC(“ECC5”)がアドレスADR−B(“1011”)に書き込まれている。図では、括弧付きでこれらを示している。
(2)新たに、データ(“DATA1”)をアドレスADR−1(“0001”)に、そのデータとペアになるECC(“ECC1”)をアドレスADR−A(“1010”)に書き込む。
(3)ここで、アドレスのA2ビットに対応するアドレス信号線にStuck−at1故障が発生する。そのため、内蔵メモリ14のアドレスADR−0〜ADR−3とADR−8〜ADR−Bのアドレスにはアクセスできなくなる。
(4)上記の(2)で書き込んだデータ(“DATA1”)と、そのデータとペアになるECC(“ECC1”)を読み出そうとする。
(4)’このとき、実際には、上記の(3)で発生したアドレス信号線の故障により、データ(“DATA1”)が格納されているアドレスADR−1(“0001”)からではなく、内蔵メモリ14のアドレスADR−5(“0101”)からデータ(“DATA5”)が読み出される。また、ECC(“ECC1”)が格納されているアドレスADR−A(“1010”)からではなく、アドレスADR−E(“1110”)からECC(“ECC3”)が読み出される。つまり、上記の(2)で書き込んだデータではないデータ(“DATA5”)と、そのデータとはペアが崩れたECC(“ECC3”)が読み出される。
(5)その結果、RDT変換回路140が有するECCチェック回路142で1ビットの誤り、又は、2ビット以上の誤りとして、Stuck−at1故障が確実に検出される。このように、アドレス信号系の故障の検出も可能であるため、本実施の形態2は、機能安全の観点から優れていると言える。
なお、図12は、内蔵メモリ14に入力するアドレス信号のうち、A2ビットにStuck−at1故障(1への固着)が発生した場合の動作を示したものであった。しかし、そのA2ビットにStuck−at0故障(0への固着)が発生した場合や、他のアドレス(具体的には、A1ビットとA0ビット)にStuck−at1故障またはStuck−at0故障が発生した場合であっても、本実施の形態2によれば同様にアドレス信号線の故障を検出可能である。
図13は、図11に示したN=3の場合について、“DATA0”と“ECC0”、“DATA1”と“ECC1”、・・・、“DATA7”と“ECC7”という8通りのペアについて、アドレス信号の下位3ビットA2〜A0の値を、8行(上から順番に“0”〜“7”と番号付け)にわたって示した表である。図13では、データを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(データ)」として示し、ECCを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(ECC)」として示している。
この表の左から右に向かって、
(1)アドレスの全ビットに故障が発生していない場合
(2)アドレスのA2ビットにStuck−at1故障が発生した場合(これが、図12に示したものに相当する)、
(3)アドレスのA2ビットにStuck−at0故障が発生した場合
(4)アドレスのA1ビットにStuck−at1故障が発生した場合
(5)アドレスのA1ビットにStuck−at0故障が発生した場合
(6)アドレスのA0ビットにStuck−at1故障が発生した場合
(7)アドレスのA0ビットにStuck−at0故障が発生した場合
の7通りを示している。
なお、A2〜A0の値として、各ビット位置の値(0または1)を3つ並べて示しているが、故障により値が変わったビット位置の値には下線を付している。
図13に示した表の2行目(番号は1)は、図12の(2)において書き込むデータ(“DATA1”)と、そのデータとペアになるECC(“ECC1”)の各々が格納されるアドレスを示した行になる。アドレスの全ビットに故障が発生していない場合のアドレスは、一番左に示している通り、それぞれ、ADR−1の下位3ビット(“001”)とADR−Aの下位3ビット(“010”)となる。図13の表において、この2つのA2〜A0の値のペアを実線で囲んで示している。
ここで、A2ビットにStuck−at1故障が発生した場合のアドレスは、そのすぐ右に示している通り、アドレス(データ)のADR−1は故障による影響を受けて別のADR−5(下位3ビットは“101”)となり、アドレス(ECC)のADR−Aも故障による影響を受けて別のADR−E(下位3ビットは“110”)となる。この2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示すとともに、この2つのA2〜A0の値のペアの故障による影響を受けた後の値の各々で実際にアクセスされるアドレス(データ)及びアドレス(ECC)を、表において実線で囲むとともに太実線で接続して示している。これによって、データ(“DATA5”)とECC(“ECC3”)がアクセスされる。すなわち、図12の(4)’で説明した通り、データとECCのペアが崩れていることが分かる。
同じく、さらに右に進むにつれて、他の例として、A1ビットにStuck−at1故障が発生した場合と、A0ビットにStuck−at1故障が発生した場合についても、2つのA2〜A0の値のペアについて、上記と同様の形で示しているが、いずれの場合も、データとECCのペアが崩れていることが分かる。
また、さらに、他の例として、図13に示した表の7行目(番号は6)における、データ(“DATA6”)と、そのデータとペアとなるECC(“ECC6”)の各々が格納されるアドレスに関して、同様に、A2ビットにStuck−at0故障が発生した場合、A1ビットにStuck−at0故障が発生した場合、A0ビットにStuck−at0故障が発生した場合についても示している。そして、いずれの場合も、やはりデータとECCのペアは崩れている。この表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、確実に故障が検出できることが分かる。
さらに、本実施の形態2では、I/F変換回路13におけるADR変換回路120が内蔵メモリ14に入力するアドレス信号(Nビット)のN本の信号線のうち、いずれか1本に故障(断線)によりStuck−at故障(0または1への固着)が発生した後に、データの書き込みと読み出しが行われる場合であっても、以下に説明する通り、故障が検出できる。
図14を参照して、内蔵メモリ14に入力するアドレス信号(Nビット)のうち、A2ビットにStuck−at1故障(1への固着)が発生した後に、データの書き込みと読み出しが行われる場合の動作について説明する。なお、内蔵メモリ14は、図11に示したように、N=3であるものとする。また、ここでは、以下の流れでデータの書き込みと読み出しが行われる場合について説明する。
(1)データ(“DATA3”)がアドレスADR−3(“0011”)に、そのデータとペアになるECC(“ECC3”)がADR−E(“1110”)に書き込まれている。また、データ(“DATA5”)がアドレスADR−5(“0101”)に、そのデータとペアになるECC(“ECC5”)がADR−B(“1011”)に書き込まれている。また、データ(“DATA1”)がアドレスADR−1(“0001”)に、そのデータとペアになるECC(“ECC1”)がADR−A(“1010”)に書き込まれている。図では、括弧付きでこれらを示している。
(2)ここで、アドレスのA2ビットに対応するアドレス信号線にStuck−at1故障が発生する。そのため、内蔵メモリ14のアドレスADR−0〜ADR−3とADR−8〜ADR−Bのアドレスにはアクセスできなくなる。
(3)新たに、データ(“DATA2”)をアドレスADR−2(“0010”)に、そのデータとペアになるECC(“ECC2”)をアドレスADR−C(“1100”)に書き込もうとする。このとき、実際には、上記の(2)で発生したアドレス信号線の故障により、内蔵メモリ14のアドレスADR−2(“0010”)ではなく、アドレスADR−6(“0110”)にデータ(“DATA2”)が書き込まれる。一方、ECC(“ECC2”)は正常にアドレスADR−C(“1100”)に書き込まれる。
(4)続いて、データ(“DATA6”)をアドレスADR−6(“0110”)に、そのデータとペアになるECC(“ECC6”)をアドレスADR−D(“1101”)に書き込もうとする。このときは、上記の(2)で発生したアドレス信号線の故障を受けず、データ(“DATA6”)とECC(“ECC6”)は両方とも正常なアドレスに書き込まれる。
(4)’このとき、上記の(3)でアドレスADR−6(“0110”)に書き込まれたデータ(“DATA2”)が、データ(“DATA6”)で上書きされる。
(5)上記の(3)で書き込んだデータ(“DATA2”)と、そのデータとペアになるECC(“ECC2”)を読み出そうとする。
(5)’このとき、実際には、データ(“DATA2”)が格納されているはずのアドレスADR−2(“0010”)からではなく、内蔵メモリ14のアドレスADR−6(“0110”)からデータ(“DATA6”)が読み出される。このアドレスADR−6(“0110”)には、上記の(3)で一旦データ(“DATA2”)が書き込まれたものの、上記の(4)’でデータ(“DATA6”)に上書きされたためである。また、ECC(“ECC2”)が格納されているアドレスADR−C(“1100”)から正常にECC(“ECC2”)は読み出される。そのため、データ(“DATA6”)と、そのデータとはペアが崩れたECC(“ECC2”)が読み出される。
(6)その結果、RDT変換回路140が有するECCチェック回路142で1ビットの誤り、又は、2ビット以上の誤りとして、Stuck−at1故障が確実に検出される。このように、アドレス信号系の故障の検出も可能であるため、本実施の形態2は、機能安全の観点から優れていると言える。
また、図15を参照して、ECCを格納する領域に対して「ADR反転」を行う実施の形態1のケースで、図14と同様にデータの書き込みと読み出しが行われる場合の動作について説明する。
(1)データ(“DATA5”)がアドレスADR−5(“0101”)に、そのデータとペアになるECC(“ECC5”)がアドレスADR−A(“1010”)に書き込まれている。また、データ(“DATA1”)がアドレスADR−1(“0001”)に、そのデータとペアになるECC(“ECC1”)がアドレスADR−E(“1110”)に書き込まれている。図では、括弧付きでこれらを示している。
(2)ここで、アドレスのA2ビットに対応するアドレス信号線にStuck−at1故障が発生する。そのため、内蔵メモリ14のアドレスADR−0〜ADR−3とADR−8〜ADR−Bのアドレスにはアクセスできなくなる。
(3)新たに、データ(“DATA2”)をアドレスADR−2(“0010”)に、そのデータとペアになるECC(“ECC2”)をアドレスADR−D(“1101”)に書き込もうとする。このとき、実際には、上記の(2)で発生したアドレス信号線の故障により、内蔵メモリ14のアドレスADR−2(“0010”)ではなく、アドレスADR−6(“0110”)にデータ(“DATA2”)が書き込まれる。一方、ECC(“ECC2”)は正常にアドレスADR−D(“1101”)に書き込まれる。
(4)続いて、データ(“DATA6”)をアドレスADR−6(“0110”)に、そのデータとペアになるECC(“ECC6”)をアドレスADR−9(“1001”)に書き込もうとする。このとき、実際には、上記の(2)で発生したアドレス信号線の故障により、内蔵メモリ14のアドレスADR−9(“1001”)ではなく、アドレスADR−D(“1101”)にECC(“ECC6”)が書き込まれる。一方、データ(“DATA6”)は正常にアドレスADR−6(“0110”)に書き込まれる。
(4)’このとき、上記の(3)でアドレスADR−6(“0110”)に書き込まれたデータ(“DATA2”)が、データ(“DATA6”)で上書きされる。また、アドレスADR−D(“1101”)に書き込まれたECC(“ECC2”)が、ECC(“ECC6”)で上書きされる。
(5)上記の(3)で書き込んだデータ(“DATA2”)と、そのデータとペアになるECC(“ECC2”)を読み出そうとする。
(5)’このとき、実際には、データ(“DATA2”)が格納されているはずのアドレスADR−2(“0010”)からではなく、内蔵メモリ14のアドレスADR−6(“0110”)からデータ(“DATA6”)が読み出される。このADR−6(“0110”)は、上記の(3)で一旦データ(“DATA2”)が書き込まれたものの、上記の(4)’でデータ(“DATA6”)に上書きされたためである。また、ECC(“ECC2”)が格納されているはずのアドレスADR−D(“1101”)からECC(“ECC6”)が読み出される。このアドレスADR−D(“1101”)には、上記の(3)で一旦ECC(“ECC2”)が書き込まれたものの、上記の(4)’でECC(“ECC6”)に上書きされたためである。そのため、上記の(3)で書き込んだデータではないデータ(“DATA6”)と、そのデータとペアを成すECC(“ECC6”)が読み出される。
(6)その結果、RDT変換回路140が有するECCチェック回路142では、正常なデータ(“DATA6”)とECC(“ECC6”)のペアに見えるため、データにビット誤りが発生していない限り、1ビットの誤り、又は、2ビット以上の誤りとして故障を検出することはできない。
なお、図14は、内蔵メモリ14に入力するアドレス信号のうち、A2ビットにStuck−at1故障(1への固着)が発生した場合の動作を示したものであった。しかし、そのA2ビットにStuck−at0故障(0への固着)が発生した場合や、他のアドレス(具体的には、A1ビットとA0ビット)にStuck−at1故障またはStuck−at0故障が発生した場合であっても、本実施の形態2によれば同様にアドレス信号線の故障を検出可能である。
図16は、図11に示したN=3の場合について、“DATA0”と“ECC0”、“DATA1”と“ECC1”、・・・、“DATA7”と“ECC7”という8通りのペアについて、アドレス信号の下位3ビットA2〜A0の値を、8行(上から順番に“0”〜“7”と番号付け)にわたって示した表である。図16では、データを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(データ)」として示し、ECCを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(ECC)」として示している。この表の左から右に向かって、図13と同様に、上記(1)〜(7)の7通りの故障が発生した場合について示している。この表の3行目(番号は2)で左から2通り目にあるアドレスのA2ビットにStuck−at1故障が発生した場合が、図14に示したものに相当する。
なお、A2〜A0の値として、各ビット位置の値(0または1)を3つ並べて示しているが、故障により値が変わったビット位置の値には下線を付している。
図16に示した表の3行目(番号は2)は、図14の(3)において書き込むデータ(“DATA2”)と、そのデータとペアになるECC(“ECC2”)の各々が格納されるアドレスを示した行になる。アドレスの全ビットに故障が発生していない場合のアドレスは、一番左に示している通り、それぞれ、ADR−2の下位3ビット(“010”)とADR−Cの下位3ビット(“100”)となる。図16の表において、この2つのA2〜A0の値のペアを点線で囲んで示している。
ここで、A2ビットにStuck−at1故障が発生した場合のアドレスは、そのすぐ右に示している通り、アドレス(データ)のADR−2は故障による影響を受けて別のADR−6(下位3ビットは“110”)となり、アドレス(ECC)のADR−C(下位3ビットは“100”)は故障による影響を受けずにADR−Cのままとなる。この2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示すとともに、この2つのA2〜A0の値のペアの故障による影響を受けた後の値の各々で実際にアクセスされるアドレス(データ)及びアドレス(ECC)を、表において実線で囲むとともに太実線で接続して示している。これによって、データ(“DATA6”)とECC(“ECC2”)がアクセスされる。すなわち、図14の(5)’で説明した通り、データとECCのペアが崩れていることが分かる。
また、この3行目における2つのA2〜A0の値のペアの故障による影響を受けた後の値に加えて、1行目、5行目及び7行目についても、2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示している。しかしながら、これら4行に示されている2つのA2〜A0の値のペアは、アドレス(データ)がADR−6(その下位3ビットは“110”)またはADR−4(その下位3ビットは“100”)、アドレス(ECC)がADR−C(その下位3ビットは“100”)またはADR−D(その下位3ビットは“101”)である4通りの組み合わせになっている。そのため、図14の(4)’で説明した通り、本来のペアとは異なるアドレス(データ)とアドレス(ECC)にデータとECCのペアを書き込んだ場合であっても、本来のペアにおけるデータとECCのどちらか一方が上書きされてしまうことはあるが、データとECCの両方が上書きされてしまうことはない。
同じ3行目の右の方には、他の例として、A1ビットにStuck−at1故障が発生した場合と、A0ビットにStuck−at1故障が発生した場合についても、2つのA2〜A0の値のペアについて、上記と同様の形で示しているが、いずれの場合もデータとECCのペアが崩れていることが分かる。また、データとECCの両方に対する上書きは発生しないことが分かる。
さらに、他の例として、図16に示した表の6行目(番号は5)には、データ(“DATA5”)と、そのデータとペアとなるECC(“ECC5”)の各々が格納されるアドレスに関して、同様に、A2ビットにStuck−at0故障が発生した場合、A1ビットにStuck−at0故障が発生した場合、A0ビットにStuck−at0故障が発生した場合についても示している。そして、いずれの場合も、やはりデータとECCのペアは崩れている。また、本来のペアにおけるデータとECCの両方に対する上書きは発生しない。この表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、確実に故障が検出できることが分かる。
また、図17は、ECCを格納する領域に対して「ADR反転」を行う実施の形態1のケースについて、図16と同様にアドレス(データ)とアドレス(ECC)の下位3ビットであるA2〜A0の値を示した表である。この表の3行目(番号は2)で左から2通り目にあるアドレスのA2ビットにStuck−at1故障が発生した場合が、図15に示したものに相当する。
このケースの場合、図17に示した表から、アドレスのいずれかのビットにStuck−at故障が発生した後に、データの書き込みと読み出しが行われる場合、アドレス(データ)とアドレス(ECC)のペアが本来のペアとは異なるものとなるが、それとは違うもう1つのアドレス(データ)とアドレス(ECC)のペアと一致してしまう(つまり、アドレスが縮退される)。そのため、そのデータを読み出す際に、アドレス信号線の故障を検出することができない場合がある。
なお、このケースでは、2通りのアドレス(データ)とアドレス(ECC)のペアが1つに縮退されることが原因で、アドレス信号線の故障を見逃す場合があることが分かる。しかし、その縮退される前の2通りのペアの各々のアドレス(データ)またはアドレス(ECC)のA2〜A0の3ビットのアドレスパリティを算出すると、一方は値が“0”となり、他方は値が“1”になる。そのため、これを利用することで、両者の区別が可能となる。すなわち、このケースでも確実に故障が検出できるように工夫することは可能である。
例えば、5ビットのECCに対して上位3ビットに付加されるダミービットとして、このアドレスパリティの値(0または1)を3つ並べた3ビットを用いるようにする。すなわち、アドレス(データ)のA2〜A0の3ビットのアドレスにおいて、“1”が奇数含まれている場合はダミービットとして“111”が生成され、“1”が偶数含まれている場合はダミービットとして“000”が生成される。ECCチェック回路142は、ECCを読み出した際にその3ビットの各ビットの値において多数決で最も多い値をアドレスパリティの値として判定する。そして、ECCチェック回路142は、その判定した値が“0”なのか“1”なのかによって、データとECCのペアが正しいものなのか、それともアドレス信号線の故障により本来のペアにおけるデータとECCが両方とも上書きされてしまったものかどうかを識別して、アドレス信号線の故障を検出する。
より具体的には、この故障検出方法を採用する場合には、バスマスタから入力されるアドレス信号を、ECC生成回路131と、ECCチェック回路142にも入力されるようにする。そして、ECC生成回路131は、入力されたアドレス信号が示すアドレスに基づいて、ダミービットを生成する。また、ECCチェック回路142は、入力されたアドレス信号が示すアドレスに基づいてアドレスパリティを生成し、生成したアドレスパリティと、内蔵メモリ14から入力されたECCに付加されたダミービットから判定されたアドレスパリティが一致するか否かを判定する。そして、ECCチェック回路142は、比較したアドレスパリティが一致しない場合、アドレス信号線が故障していると判定し、エラーを通知するエラー通知信号(例えば値は“1”)を出力する。
ここで、ECC生成回路131は、3ビットのダミービットの全てではなく、いずれか1ビット又は2ビットにアドレスパリティの値を設定してもよい。そして、ECCチェック回路142は、その1ビット又は2ビットのいずれかの値を参照して、アドレスパリティの値を判定してもよい。しかしながら、この場合は、データは訂正可能であるが、アドレスパリティの値が変更されてしまう1ビットの誤りが発生した場合に、訂正不能な誤りが発生したことを通知するエラー通知信号(例えば値は“1”)が通知されてしまう。よって、好ましくは、上述したように、ダミービットの3ビットの全てにアドレスパリティの値を設定するとよい。
以上の説明では、バスマスタから入力されるNビットのアドレス信号の全てのビットをローテーション(シフト)する例について説明したが、これに限られない。例えば、Nビットのアドレス信号のうちの所定数ビット(Nビット〜1ビットのいずれか)をローテーションするようにしても一定の効果が得られる。なお、この所定数ビットは、上述同様に、上位のビットでもよく、下位のビットでもよく、連続したビットでもよく、非連続のビットでもよい。しかしながら、好ましくは、上述したように、Nビットのアドレス信号の全てのビットをローテーションすることで、より多くの故障を検出することが可能となる。
以上に説明したように、本実施の形態2では、ADR変換回路120は、第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビットの値以外のビット(下位Nビットに対応)のうちの所定数ビットを並べ替えたアドレスを第2のアドレスとして生成している。上述の例では、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を並べ替えたアドレスを第2のアドレスとして生成している。より具体的には、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を上位方向に所定のビット数(上記例では1ビット)だけシフトしたアドレスを第2のアドレスとして生成するようにしている。
これによれば、データと、そのデータから生成したECCのペアを内蔵メモリ14に書き込んだ後で、内蔵メモリ14に対するアドレス信号線のいずれか1本にStuck−at故障(0または1への固着)が発生した場合、その書き込み済みのデータを読み出す際に、アドレス信号線の故障検出が可能となる。
これは、2本以上のアドレス信号線の故障に対しても同様に有効である。また、内蔵メモリ14に入力するアドレス信号を生成して出力するADR変換回路120や、内蔵メモリ14の中のアドレス信号処理回路で起きたアドレスの値に影響が出る故障も検出可能である。
さらに、本実施の形態2によれば、アドレス信号線のいずれか1本にStuck−at故障(0または1への固着)が発生した後に、データの書き込みと読み出しが行われる場合であっても、データとECCの両方が上書きされてしまうことによってアドレス信号線の故障を見逃すことはなく、確実に故障が検出できる。
<実施の形態3>
続いて、本実施の形態3について、図面を用いて、その構成と動作を説明する。本実施の形態3に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。また、本実施の形態3に係るI/F変換回路13の構成と動作については、図9に示した実施の形態2に係るI/F変換回路13の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態3では、I/F変換回路13において、ADR変換回路120が有するADRローテーション回路123の構成と動作が、実施の形態2に係るADRローテーション回路123とは異なる。
続いて、図18を参照して、本実施の形態3に係るADRローテーション回路123の構成について説明する。ここでは、アドレス信号がNビットである例について説明する。以下、実施の形態2と実施の形態3とでアドレスのローテーションを区別するために、実施の形態3におけるアドレスのビットのローテーションを「ADRローテーション2」と示し、実施の形態2におけるアドレスのビットのローテーションを「ADRローテーション」と示す。
実施の形態2に係るADRローテーション回路123では、Nビットのアドレス信号線の各ビットの位置を入れ替えるために、そのアドレス信号が示すアドレスを左方向に(上位ビット方向に)1ビットだけローテーションしていた。それに対して、本実施の形態3では、アドレスを逆方向にローテーションする。すなわち、本実施の形態3に係るADRローテーション回路123は、アドレスを右方向に(下位ビット方向に)1ビットだけローテーションするものである。
これは、図18に示すように、ADRローテーション回路123において、Nビットのアドレス信号線の各々のビット位置を、入力段と出力段とでずらして接続することで実現する。すなわち、ADRローテーション回路123に入力されたNビットのアドレス信号の各ビットA0、A1、A2、・・・、A(N−1)を、ADRローテーション回路123から出力されるNビットのアドレス信号の各ビットA’(N−1)、A’0、A’1、・・・、A’(N−2)とする。なお、このADRローテーション回路123でも、Nビットのアドレス信号線の各ビットの信号を、N個のバッファ1230の各々で受けた後に、その接続先のビット位置をずらすようにしている。
続いて、図19を参照して、実施の形態3に係る内蔵メモリ14のメモリマップについて説明する。ここでは、図11に示した実施の形態2に係る内蔵メモリ14と同様に、内蔵メモリ14のデータ幅は8ビットであり、内蔵メモリ14のアドレス幅は(N+1)ビットであり、内蔵メモリ14のデータ容量が(8×2(N+1))ビットであり、N=3である例について説明する。
本実施の形態3では、データを格納するアドレスの下位Nビット(図19ではA2〜A0)の値に対して、そのデータとペアになるECCを格納するアドレスの下位Nビットの値は、図18に示したADRローテーション回路123の動作により各ビット値が入れ替えられたもの(図19においてA2〜A0の値を「ADRローテーション2」と示している部分)になっている。
すなわち、図19に示すように、アドレスADR−0(“0000”)のデータ(“DATA0”)と、アドレスADR−8(“1000”)のECC(“ECC0”)とがペアになる。アドレスADR−1(“0001”)のデータ(“DATA1”)と、アドレスADR−C(“1100”)のECC(“ECC1”)がペアになる。アドレスADR−2(“0010”)のデータ(“DATA2”)と、アドレスADR−9(“1001”)のECC(“ECC2”)がペアになる。アドレスADR−3(“0011”)のデータ(“DATA3”)と、アドレスADR−D(“1101”)のECC(“ECC3”)がペアとなる。アドレスADR−4(“0100”)のデータ(“DATA4”)と、アドレスADR−A(“1010”)のECC(“ECC4”)がペアとなる。アドレスADR−5(“0101”)のデータ(“DATA5”)と、アドレスADR−E(“1110”)のECC(“ECC5”)がペアとなる。アドレスADR−6(“0110”)のデータ(“DATA6”)と、アドレスADR−B(“1011”)のECC(“ECC6”)がペアとなる。アドレスADR−7(“0111”)のデータ(“DATA7”)と、アドレスADR−F(“1111”)のECC(“ECC7”)がペアになる。
なお、実施の形態1、2と同様に、ECCは上位3ビットにダミービット(値が0)を付加して8ビットのデータとされた後で内蔵メモリ14に格納される。また、実施の形態1、2と同様に、データを読み出す際に、ECCチェック回路142で1ビットの誤り、または、2ビット以上の誤りとして、ライトデータ(8ビット)の8本の信号線のうち、いずれか1本以上が故障(断線)による値の変化が確実に検出される。また、リードデータ(8ビット)の8本の信号線の故障(断線)に関しても同様である。
図20は、図19に示したN=3の場合について、“DATA0”と“ECC0”、“DATA1”と“ECC1”、・・・、“DATA7”と“ECC7”という8通りのペアについて、アドレス信号の下位3ビットA2〜A0の値を、8行(上から順番に“0”〜“7”と番号付け)にわたって示した表である。図20では、データを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(データ)」として示し、ECCを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(ECC)」として示している。
この表の左から右に向かって、
(1)アドレスの全ビットに故障が発生していない場合
(2)アドレスのA2ビットにStuck−at1故障が発生した場合
(3)アドレスのA2ビットにStuck−at0故障が発生した場合
(4)アドレスのA1ビットにStuck−at1故障が発生した場合
(5)アドレスのA1ビットにStuck−at0故障が発生した場合
(6)アドレスのA0ビットにStuck−at1故障が発生した場合
(7)アドレスのA0ビットにStuck−at0故障が発生した場合
の7通りを示している。
なお、A2〜A0の値として、各ビット位置の値(0または1)を3つ並べて示しているが、故障により値が変わったビット位置の値には下線を付している。
図20に示した表の2行目(番号は1)は、データ(“DATA1”)と、そのデータとペアになるECC(“ECC1”)の各々が格納されるアドレスを示した行になる。アドレスの全ビットに故障が発生していない場合のアドレスは、一番左に示している通り、それぞれ、ADR−1の下位3ビット(“001”)とADR−Cの下位3ビット(“100”)となる。図20の表において、この2つのA2〜A0の値のペアを実線で囲んで示している。
ここで、A2ビットにStuck−at1故障が発生した場合のアドレスは、そのすぐ右に示している通り、アドレス(データ)のADR−1は故障による影響を受けて別のADR−5(下位3ビットは“101”)となり、アドレス(ECC)のADR−C(下位3ビットは“100”)は故障による影響を受けない。この2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示すとともに、この2つのA2〜A0の値のペアの故障による影響を受けた後の値の各々で実際にアクセスされるアドレス(データ)及びアドレス(ECC)を、表において実線で囲むとともに太実線で接続して示している。これによって、データ(“DATA5”)とECC(“ECC1”)がアクセスされる。すなわち、データとECCのペアが崩れていることが分かる。
同じく、さらに右に進むにつれて、他の例として、A1ビットにStuck−at1故障が発生した場合と、A0ビットにStuck−at1故障が発生した場合についても、2つのA2〜A0の値のペアについて、上記と同様の形で示しているが、いずれの場合もデータとECCのペアが崩れていることが分かる。
また、さらに、他の例として、図20に示した表の7行目(番号は6)には、データ(“DATA6”)と、そのデータとペアとなるECC(“ECC6”)の各々が格納されるアドレスに関して、同様に、A2ビットにStuck−at0故障が発生した場合、A1ビットにStuck−at0故障が発生した場合、A0ビットにStuck−at0故障が発生した場合についても示している。そして、いずれの場合も、やはりデータとECCのペアは崩れている。この表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、確実に故障が検出できることが分かる。
また、図21は、図19に示したN=3の場合について、“DATA0”と“ECC0”、“DATA1”と“ECC1”、・・・、“DATA7”と“ECC7”という8通りのペアについて、アドレス信号の下位3ビットA2〜A0の値を、8行(上から順番に“0”〜“7”と番号付け)にわたって示した表である。図21では、データを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(データ)」として示し、ECCを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(ECC)」として示している。この表の左から右に向かって、図20と同様に、上記(1)〜(7)の7通りの故障が発生した場合について示している。
図21に示した表の3行目(番号は2)は、データ(“DATA2”)と、そのデータとペアになるECC(“ECC2”)の各々が格納されるアドレスを示した行になる。アドレスの全ビットに故障が発生していない場合のアドレスは、一番左に示している通り、それぞれ、ADR−2の下位3ビット(“010”)とADR−9の下位3ビット(“001”)となる。図21の表において、この2つのA2〜A0の値のペアを点線で囲んで示している。
ここで、A2ビットにStuck−at1故障が発生した場合のアドレスは、そのすぐ右に示している通り、アドレス(データ)のADR−2は故障による影響を受けて別のADR−6(下位3ビットは“110”)となり、アドレス(ECC)のADR−9(下位3ビットは“001”)も故障による影響を受けて別のADR−D(下位3ビットは“101”)となる。この2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示すとともに、この2つのA2〜A0の値のペアの故障による影響を受けた後の値の各々で実際にアクセスされるアドレス(データ)及びアドレス(ECC)を、表において実線で囲むとともに太実線で接続して示している。これによって、データ(“DATA6”)とECC(“ECC3”)がアクセスされる。すなわち、データとECCのペアが崩れていることが分かる。
また、この3行目における2つのA2〜A0の値のペアの故障による影響を受けた後の値に加えて、4行目、7行目及び8行目についても、2つのA2〜A0の値のペアの故障による影響を受けた後の値を、表において破線で囲んで示している。しかしながら、これら4行に示されている2つのA2〜A0の値のペアは、アドレス(データ)がADR−6(その下位3ビットは“110”)またはADR−7(その下位3ビットは“111”)、アドレス(ECC)がADR−D(その下位3ビットは“101”)またはADR−F(その下位3ビットは“111”)である4通りの組み合わせになっている。そのため、本来のペアとは異なるアドレス(データ)とアドレス(ECC)にデータとECCのペアを書き込んだ場合であっても、本来のペアにおけるデータとECCのどちらか一方が上書きされてしまうことはあるが、データとECCの両方が上書きされてしまうことはない。
同じ3行目の右の方には、他の例として、A1ビットにStuck−at1故障が発生した場合と、A0ビットにStuck−at1故障が発生した場合についても、2つのA2〜A0の値のペアについて、上記と同様の形で示しているが、いずれの場合もデータとECCのペアが崩れていることが分かる。また、データとECCの両方に対する上書きは発生しないことが分かる。
さらに、他の例として、図21に示した表の6行目(番号は5)には、データ(“DATA5”)と、そのデータとペアとなるECC(“ECC5”)の各々が格納されるアドレスに関して、同様に、A2ビットにStuck−at0故障が発生した場合、A1ビットにStuck−at0故障が発生した場合、A0ビットにStuck−at0故障が発生した場合についても示している。そして、いずれの場合も、やはりデータとECCのペアは崩れている。また、本来のペアにおけるデータとECCの両方に対する上書きは発生しない。この表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、確実に故障が検出できることが分かる。
なお、本実施の形態3でも、実施の形態2でも説明したように、Nビットのアドレス信号のうちの所定数ビット(Nビット〜1ビットのいずれか)をローテーションしてもよい。
以上に説明したように、本実施の形態3では、ADR変換回路120は、第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビットの値以外のビット(下位Nビットに対応)のうちの所定数ビットを並べ替えたアドレスを第2のアドレスとして生成している。上述の例では、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を並べ替えたアドレスを第2のアドレスとして生成している。より具体的には、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を下位方向に所定のビット数(上記例では1ビット)だけシフトしたアドレスを第2のアドレスとして生成するようにしている。
これによれば、実施の形態2と同じ効果が得られる。すなわち、データと、そのデータから生成したECCのペアを内蔵メモリ14に書き込んだ後で、内蔵メモリ14に対するアドレス信号線のいずれか1本にStuck−at故障(0または1への固着)が発生した場合、その書き込み済みのデータを読み出す際に、アドレス信号線の故障検出が可能となる。
さらに、本実施の形態3によれば、アドレス信号線のいずれか1本にStuck−at故障(0または1への固着)が発生した後に、データの書き込みと読み出しが行われる場合であっても、データとECCの両方が上書きされてしまうことによってアドレス信号線の故障を見逃すことはなく、確実に故障が検出できる。
<実施の形態4>
続いて、本実施の形態4について、図面を用いて、その構成と動作を説明する。本実施の形態4に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態4では、CPUシステム1が有するI/F変換回路13の一部の構成と動作が、実施の形態1に係るI/F変換回路13とは異なる。
続いて、図22を参照して、本実施の形態4に係るI/F変換回路13の構成について説明する。本実施の形態4に係るI/F変換回路13は、実施の形態1に係るI/F変換回路13と比較して、ADR変換回路120におけるADR反転回路121に代えて、ADRビット順逆転回路124を有する。なお、本実施の形態4に係るI/F制御回路110、WDT変換回路130及びRDT変換回路140の構成及び動作は、実施の形態1に係るそれらと同様である。
ADRビット順逆転回路124には、バスマスタから出力されるアドレス信号が入力される。ADRビット順逆転回路124は、入力されたアドレス信号が示すアドレスの全てのビットの並び順を反転して、セレクタ122に出力する。よって、本実施の形態4では、セレクタ122は、バスマスタから出力されるアドレス信号、及び、ADRビット順逆転回路124から出力されるアドレス信号のうち、いずれか1つを選択し、内蔵メモリ14に出力する。
続いて、図23を参照して、本実施の形態4に係るADR変換回路120が有するADRビット順逆転回路124の構成について説明する。ここでは、アドレス信号がNビットである例について説明する。
実施の形態2では、Nビットあるアドレス信号の各ビットを入れ替えるために、アドレスを左方向に(上位ビット方向に)1ビットだけローテーションし、実施の形態3では、アドレスを右方向に(下位ビット方向に)1ビットだけローテーションしていた。それに対し、本実施の形態4では、アドレス信号の各ビットの位置を上下逆方向に入れ替えて、ビット順を反転させる。すなわち、ADRビット順逆転回路124は、アドレス信号のNビットの並び順を反転する。
これは、図23に示すように、ADRビット順逆転回路124において、Nビットのアドレス信号線の各々のビット位置を、入力段と出力段とでずらして接続することで実現する。すなわち、ADRビット順逆転回路124に入力されたNビットのアドレス信号の各ビットA0、A1、A2、・・・、A(N−2)、A(N−1)を、ADRビット順逆転回路124から出力されるNビットのアドレス信号の各ビットA’(N−1)、A’(N−2)、・・・、A’2、A’1、A’0とする。なお、このADRビット順逆転回路124では、Nビットのアドレス信号線の各ビットの信号を、N個のバッファ1240の各々で受けた後に、その接続先のビット位置をずらすようにしている。
ただし、Nビットあるアドレスの全てのビットの位置が入れ替わるようにする必要がある。そのため、本実施の形態4ではNが偶数であることを前提としている。例えば、N=4の場合、ADRビット順逆転回路124は、図24に示す構成になる。
なお、本実施の形態4でも、実施の形態2及び実施の形態3でも説明したように、Nビットのアドレス信号のうちの所定数ビット(Nビット〜1ビットのいずれか)を並び替えるようにしてもよい。
以上に説明したように、本実施の形態4では、ADR変換回路120は、第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビットの値以外のビット(下位Nビットに対応)のうちの所定数ビットを並べ替えたアドレスを第2のアドレスとして生成している。上述の例では、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を並べ替えたアドレスを第2のアドレスとして生成している。より具体的には、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)の並び順を反転したアドレスを第2のアドレスとして生成するようにしている。
これによれば、実施の形態2及び実施の形態3と全く同じ効果が得られることは明らかであるため、詳細な説明は省略する。
なお、以上に説明した実施の形態2、実施の形態3及び実施の形態4では、データとペアになるECCに対するアドレスを、ADRローテーション回路123又はADRビット順逆転回路124というアドレス入替回路で変換している点が共通する。
Nビットあるアドレスの全てのビットの位置が入れ替わるようにするアドレス入替えの方法は、複数通り存在する。ここで、その数をSNとする(SNにおける「N」は、上述したI/F変換回路13に入力されるアドレス信号のビット数である)。N=2の場合は、図25に示す1通りのみ(S2=1)で、N=3の場合は、図26に示す2通り(S3=2)である。図26の上から1番目は実施の形態2で示した「ADRローテーション」に対応し、図26の2番目は実施の形態3で示した「ADRローテーション2」に対応する。
また、N=4の場合は、図27に示す9通り(S4=9)となる。その左側の列の上から1番目が実施の形態2での「ADRローテーション」に相当し、2番目が実施の形態3での「ADRローテーション2」に相当し、3番目が実施の形態4での「ADRビット順逆転」に相当する。ここで、図26の最下行に示した3通りは、2ビットずつアドレスのビットを入れ替えたものが2セットになっているものである。そのため、そのどちらかの1セットに含まれる2ビットのアドレス信号線の両方に故障が発生した場合には、故障検出が行えないという制約がある。
なお、一般的に、Nビット(ただし、N≧3)のアドレスに対するアドレス入替えの方法の数は、図28に示す式1の通りとなる。
すなわち、ADR変換回路120において実施するアドレスの各ビットの位置の入れ替えは、図27でも例示するように、実施の形態2〜4で説明した「ADRローテーション」、「ADRローテーション2」及び「ADRビット順逆転」のみに限られない。次の実施の形態5として、図27の最下行の真ん中で「ADRローテーション3」として示すアドレス入れ替え方法について説明する。
<実施の形態5>
さらに、本実施の形態5について、図面を用いて、その構成と動作を説明する。本実施の形態5に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。また、本実施の形態5に係るI/F変換回路13の構成と動作については、図9に示した実施の形態2に係るI/F変換回路13の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態5では、I/F変換回路13において、ADR変換回路120が有するADRローテーション回路123の構成と動作が、実施の形態2及び実施の形態3に係るADRローテーション回路123とは異なる。
続いて、図29を参照して、本実施の形態5に係るADRローテーション回路123の構成について説明する。ここでは、アドレス信号がNビットである例について説明する。以下、本実施の形態5に係るアドレスのローテーションを「ADRローテーション3」と示す。
実施の形態2に係るADRローテーション回路123では、Nビットのアドレス信号線の各ビットの位置を入れ替えるために、そのアドレス信号が示すアドレスを左方向に(上位ビット方向に)1ビットだけローテーションしていた。また、実施の形態3では、アドレスを右方向に(下位ビット方向に)1ビットだけローテーションしていた。しかし、本実施の形態5では、アドレスを右方向に(上位ビット方向に)2ビットだけローテーションする。
これは、図29に示すように、ADRローテーション回路123において、Nビットのアドレス信号線の各々のビット位置を、入力段と出力段とでずらして接続することで実現する。すなわち、ADRローテーション回路123に入力されたNビットのアドレス信号の各ビットA0、A1、A2、・・・、A(N−1)を、ADRローテーション回路123から出力されるNビットのアドレス信号の各ビットA’(N−2)、A’(N−1)、A’0、A’1、・・・、A’(N−3)とする。なお、このADRローテーション回路123でも、Nビットのアドレス信号線の各ビットの信号を、N個のバッファ1230の各々で受けた後に、その接続先のビット位置をずらすようにしている。
ここで、N=4の場合は、図30に示す構成になる。この図30から明らかなように、N=4の場合は、アドレスを左方向に(下位ビット方向に)2ビットだけローテーションすることと同等である。これは、ちょうど、図27の最下行の真ん中で、「ADRローテーション3」として示したものに対応する。
続いて、図31を参照して、実施の形態5に係る内蔵メモリ14のメモリマップについて説明する。ここでは、内蔵メモリ14のデータ幅は8ビットであり、内蔵メモリ14のアドレス幅は(N+1)ビットであり、内蔵メモリ14のデータ容量が(8×2(N+1))ビットであり、N=4である例について説明する。
内蔵メモリ14は、図31における左半分を本来のデータを格納する領域として使用し、右半分を本来のデータとペアになるECCを格納する領域として使用する。つまり、内蔵メモリ14における領域は、そのアドレス空間において、アドレスの最上位ビット(図31ではA4)の値が、“0”となる場合はデータが格納される領域として、“1”となる場合はECCが格納される領域として区別される。
本実施の形態5では、データを格納するアドレスの下位Nビット(図31ではA3〜A0)の値に対して、そのデータとペアになるECCを格納するアドレスの下位Nビットの値は、図30に示したADRローテーション回路123の動作により各ビット値が入れ替えられたもの(図31においてA3〜A0の値を「ADRローテーション3」と示している部分、A4=1として右半分に示している領域)になっている。
すなわち、図31に示すように、アドレスADR−00(“00000”)のデータ(“DATA0”)と、アドレスADR−10(“10000”)のECC(“ECC0”)とがペアになる。アドレスADR−01(“00001”)のデータ(“DATA1”)と、アドレスADR−14(“10100”)のECC(“ECC1”)がペアになる。アドレスADR−02(“00010”)のデータ(“DATA2”)と、アドレスADR−18(“11000”)のECC(“ECC2”)がペアになる。アドレスADR−03(“00011”)のデータ(“DATA3”)と、アドレスADR−1C(“11100”)のECC(“ECC3”)がペアになる。アドレスADR−04(“00100”)のデータ(“DATA4”)と、アドレスADR−11(“10001”)のECC(“ECC4”)がペアになる。アドレスADR−05(“00101”)のデータ(“DATA5”)と、アドレスADR−15(“10101”)のECC5がペアになる。アドレスADR−06(“00110”)のデータ(“DATA6”)とアドレスADR−19(“11001”)のECC(“ECC6”)がペアになる。アドレスADR−07(“00111”)のデータ(“DATA7”)と、アドレスADR−1D(“11101”)のECC(“ECC7”)がペアになる。他のアドレスのデータ(“DATA8”)〜(“DATAF”)の各々と、他のアドレスのECC(“ECC8”)〜(“ECCF”)の各々とがペアになる対応関係も、同様に、この図31から分かるため、詳細な説明は省略する。
実施の形態2及び実施の形態3では、N=3とした場合、図11及び図19に示したように、内蔵メモリ14が、データと、そのデータに対応するECCの各々を格納するアドレスとして8個(アドレスの下位3ビットA2〜A0の組み合わせ)を有する例について説明した。それに対して、本実施の形態5では、N=4とした場合、図31に示すように、データと、そのデータに対応するECCの各々を格納するアドレスとして、その2倍の16個を有する例を図示している。
なお、本実施の形態5でも、実施の形態2及び実施の形態3でも説明したように、Nビットのアドレス信号のうちの所定数ビット(Nビット〜1ビットのいずれか)をローテーションするようにしてもよい。
以上に説明したように、本実施の形態5では、ADR変換回路120は、第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビットの値以外のビット(下位Nビットに対応)のうちの所定数ビットを並べ替えたアドレスを第2のアドレスとして生成している。上述の例では、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を並べ替えたアドレスを第2のアドレスとして生成している。より具体的には、ADR変換回路120は、第1のアドレスの少なくとも1つのビットの値以外のビットの全て(Nビット)を上位方向に所定のビット数(上記例では2ビット)だけシフトしたアドレスを第2のアドレスとして生成するようにしている。
これによれば、実施の形態2〜実施の形態4と全く同じ効果が得られることは明らかであるため、詳細な説明は省略する。
<実施の形態6>
続いて、本実施の形態6について、図面を用いて、その構成と動作を説明する。本実施の形態6に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態6では、CPUシステム1が有するI/F変換回路13の一部の構成と動作が、実施の形態1に係るI/F変換回路13とは異なる。
続いて、図32を参照して、本実施の形態6に係るI/F変換回路13の構成について説明する。本実施の形態6に係るI/F変換回路13は、実施の形態1に係るI/F変換回路13と比較して、ADR変換回路120におけるADR反転回路121に代えて、ADRシフト&オフセット設定回路125を有する。なお、本実施の形態6に係るI/F制御回路110、WDT変換回路130及びRDT変換回路140の構成及び動作は、実施の形態1に係るそれらと同様である。
ADRシフト&オフセット設定回路125には、バスマスタから出力されるアドレス信号と、2ビットのオフセット信号が入力される。ADRシフト&オフセット設定回路125は、入力されたアドレス信号のうち、所定の複数ビットのビットをシフトし、他の複数ビットをオフセット信号が示すオフセット値に変更してから、そのアドレス信号をセレクタ122に出力する。よって、本実施の形態6では、セレクタ122は、バスマスタから出力されるアドレス信号、及び、ADRシフト&オフセット設定回路125から出力されるアドレス信号のうち、いずれか1つを選択し、内蔵メモリ14に出力する。
続いて、図33を参照して、本実施の形態6に係るADR変換回路120が有するADRシフト&オフセット設定回路125の構成について説明する。ここでは、アドレス信号がNビットであり、オフセット信号がMビットであり、M=2ビットである例について説明する。
図33に示すように、本実施の形態6に係るADRシフト&オフセット設定回路125は、図29に示した実施の形態5に係るADRローテーション回路123と比較して、下位2ビット(A1、A0)を上位2ビットに移動させるのではなく、その2ビットは使用せず、代わりにオフセット信号が示す2ビットを上位2ビットに使用する点が異なる。
すなわち、ADRシフト&オフセット設定回路125は、オフセット設定レジスタ1251を有している。オフセット設定レジスタ1251には、2ビットのオフセット信号がオフセット値として取り込まれる。オフセット設定レジスタ1251に格納される2ビットのオフセット値の各々は、Nビットのアドレス信号の上位2ビットとして、ADRシフト&オフセット設定回路125から出力される。
よって、ADRシフト&オフセット設定回路125に入力されたNビットのアドレス信号が示すアドレスのうち、上位(N−M)ビットの各々A2、・・・、A(N−1)を、ADRシフト&オフセット設定回路125から出力されるNビットのアドレス信号のうち、下位(N−M)ビットの各々A’0、A’1、・・・、A’(N−3)とする。また、ADRシフト&オフセット設定回路125に入力されたオフセット信号が示すオフセット値の各ビットB(N−2)、B(N−1)を、ADRシフト&オフセット設定回路125から出力するNビットのアドレス信号のうち、残りの上位Mビットの各々A’(N−2)、A’(N−1)とする。
なお、このADRシフト&オフセット設定回路125でも、A2〜A(N−1)までの(N−M)ビットのアドレス信号線の各ビットの信号を、(N−M)個のバッファ1250の各々で受けた後に、その接続先のビット位置をずらすようにしている。
ここで、N=4の場合、ADRシフト&オフセット設定回路125は、図34に示す通りの構成になる。すなわち、ADRシフト&オフセット設定回路125に入力されるアドレス信号の上位2ビットA2、A3の各々は、ADRシフト&オフセット設定回路125から出力されるアドレス信号の下位2ビットA’0、A’1となる。また、ADRシフト&オフセット設定回路125に入力されるオフセット信号の2ビットB2、B3の各々は、ADRシフト&オフセット設定回路125から出力されるアドレス信号の上位2ビットA’2、A’3となる。
続いて、図35を参照して、実施の形態6に係る内蔵メモリ14のメモリマップについて説明する。ここでは、内蔵メモリ14のデータ幅は8ビットであり、内蔵メモリ14のアドレス幅は(N+1)ビットであり、内蔵メモリ14のデータ容量が(8×2(N+1))ビットであり、N=4である例について説明する。
内蔵メモリ14は、図35における左半分を本来のデータを格納する領域として使用し、右半分のうちの一部を本来のデータとペアになるECCを格納する領域として使用する。つまり、内蔵メモリ14における領域は、そのアドレス空間において、アドレスの最上位ビット(図35ではA4)の値が、“0”となる場合はデータが格納される領域として、“1”となる場合はECCが格納される領域として区別される。
本実施の形態6では、データを格納するアドレスの下位Nビット(図35ではA3〜A0)の値に対して、そのデータとペアになるECCを格納するアドレスの下位Nビットの値は、図34に示したADRシフト&オフセット設定回路125の動作により各ビット値が変換されたもの(図35においてA3〜A0の値を「ADRシフト&オフセット設定」と示している部分、A4=1として右半分のうちの一部に示している領域のうち、A3=1及びA2=1として示している領域)になっている。すなわち、オフセット信号が示す2ビットのオフセット値の各ビットB2、B3が両方とも“1”に設定されている例について示している。
すなわち、図35に示すように、アドレスADR−00(“00000”)〜ADR−03(“00011”)のデータ(“DATA0”〜“DATA3”)と、アドレスADR−1C(“11100”)のECC(“ECC0(0、1、2、3)”)とがペアになる。アドレスADR−04(“00100”)〜ADR−07(“00111”)のデータ(“DATA4”〜“DATA7”)と、アドレスADR−1D(“11101”)のECC(“ECC1(4、5、6、7)”)がペアになる。アドレスADR−08(“01000”)〜ADR−0B(“01011”)のデータ(“DATA8”〜“DATAB”)と、アドレスADR−1E(“11110”)のECC(“ECC2(8、9、A、B)”)がペアになる。アドレスADR−0C(“01100”)〜ADR−0F(“01111”)のデータ(“DATAC”〜“DATAF”)と、アドレスADR−1F(“11111”)のECC(“ECC3(C、D、E、F)”)がペアになる。すなわち、オフセット値の2ビットの各々が両方とも“1”に設定されているため、ADR−10(“10000”)〜ADR−1B(“11011”)の12アドレスは使用されない。
ここで、実施の形態1〜実施の形態5では、8ビットのデータから5ビットのECCを生成し、その生成したECCの上位3ビットにダミービット(値は0)を付加して8ビットのデータとした後で内蔵メモリ14に格納していた。しかし、本実施の形態6では、32ビット(4アドレス)のデータから7ビットのECCを生成し、その生成したECCの上位1ビットにダミービット(値は0)を付加して8ビットとした後で内蔵メモリ14に格納する。
よって、本実施の形態6では、バスマスタは、32ビットのデータを内蔵メモリ14に書き込む場合、その32ビットのデータを8ビットずつ4回に分けて連続したアドレスを指定して書き込む。例えば、32ビットのデータ(“DATA0”〜“DATA3”)を内蔵メモリ14に書き込む場合、1回目では、バスマスタは、アドレスADR−00(“00000”)を示すアドレス信号と、ライトデータ(“DATA0”)をI/F変換回路13に出力する。2回目では、バスマスタは、アドレスADR−01(“00001”)を示すアドレス信号と、ライトデータ(“DATA1”)をI/F変換回路13に出力する。3回目では、バスマスタは、アドレスADR−02(“00010”)を示すアドレス信号と、ライトデータ(“DATA2”)をI/F変換回路13に出力する。4回目では、バスマスタは、アドレスADR−03(“00011”)を示すアドレス信号と、ライトデータ(“DATA3”)をI/F変換回路13に出力する。
ECC生成回路131は、4回の書き込みで入力された4つのライトデータを結合することで、32ビットのデータを生成し、生成した32ビットのデータに基づいて、ECCを生成する。ECC生成回路131は、生成したECCを、最後(4回目)の書き込み時に出力することで内蔵メモリ14に書き込む。よって、1回目〜3回目で不定の値が、ADR−1C(“11100”)に書き込まれたとしても、4回目の書き込み時に32ビットのデータから生成されたECCで上書きされるため問題はない。
また、本実施の形態6では、バスマスタは、32ビットのデータを内蔵メモリ14から読み出す場合、その32ビットのデータを8ビットずつ4回に分けて連続したアドレスを指定して読み出す。例えば、32ビットのデータ(“DATA0”〜“DATA3”)を内蔵メモリ14から読み出す場合、1回目では、バスマスタは、アドレスADR−00(“00000”)を示すアドレス信号をI/F変換回路13に出力する。2回目では、バスマスタは、アドレスADR−01(“00001”)を示すアドレス信号をI/F変換回路13に出力する。3回目では、バスマスタは、アドレスADR−02(“00010”)を示すアドレス信号をI/F変換回路13に出力する。4回目では、バスマスタは、アドレスADR−03(“00011”)をI/F変換回路13に出力する。
ECCチェック回路142及びエラー訂正回路143は、4回の読み出しで入力された4つのリードデータを結合することで、32ビットのデータを生成する。ECCチェック回路142は、生成した32ビットのデータに基づいてECCを生成し、生成したECCと、4回目で読み出したECCとに基づいて、その32ビットのデータの誤りを検出する。そして、エラー訂正回路143は、ECCチェック回路142による判定結果に応じて、32ビットのデータをそのまま、又は、32ビットのデータを訂正してリードデータとしてバスマスタに出力する。ただし、本実施の形態6では、エラー訂正回路143から出力する32ビットのリードデータは、8ビットずつ4回にわたってバスマスタに出力される。
図36は、図35に示したN=4の場合について、“DATA0”〜“DATA3”と“ECC0”、“DATA4”〜“DATA7”と“ECC1”、“DATA8”〜“DATAB”と“ECC2”、“DATAC”〜“DATAF”と“ECC3”という4通りのペアについて、アドレス信号の下位4ビットA3〜A0の値を、4行にわたって示した表である。図36では、データを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(データ)」として示し、ECCを読み出す際に内蔵メモリ14に入力されるアドレス信号が示すアドレスを「アドレス(ECC)」として示している。
この表の左から右に向かって、
(1)アドレスの全ビットに故障が発生していない場合
(2)アドレスのA3ビットにStuck−at1故障が発生した場合
(3)アドレスのA3ビットにStuck−at0故障が発生した場合
(4)アドレスのA2ビットにStuck−at1故障が発生した場合
(5)アドレスのA2ビットにStuck−at0故障が発生した場合
(6)アドレスのA1ビットにStuck−at1故障が発生した場合
(7)アドレスのA1ビットにStuck−at0故障が発生した場合
の7通りを示している。
なお、アドレスのA0ビットにStuck−at1故障が発生した場合、及び、アドレスのA0ビットにStuck−at0故障が発生した場合の各々は、アドレスのA1ビットにStuck−at1故障が発生した場合、及び、アドレスのA1ビットにStuck−at0故障が発生した場合の各々と同様となるため、この表から省略している。また、A3〜A0の値として、各ビット位置の値(0または1)を4つ並べて示しているが、故障により値が変わったビット位置の値には下線を付している。
図36に示した表の2行目(番号は4〜7)は、データ(“DATA4”〜“DATA7”)と、そのデータとペアになるECC(“ECC1”)の各々が格納されるアドレスを示した行になる。アドレスの全ビットに故障が発生していない場合のアドレスは、一番左に示している通り、それぞれ、ADR−04〜ADR−07の下位4ビット(“0100”〜“0111”)とADR−Aの下位4ビット(“1101”)となる。図36の表において、このアドレス(データ)の4アドレスと、アドレス(ECC)の1アドレスとの2つのペアを実線で囲んで示している。
ここで、A3ビットにStuck−at1故障が発生した場合のアドレスは、アドレスADR−04〜ADR−07(その下位4ビットは“0100”〜“0111”)が故障による影響を受けて別のADR−0C〜ADR−0F(その下位4ビットは“1100”〜“1111”)となり、アドレスADR−1D(その下位4ビットは“1101”)は故障による影響を受けない。このA3〜A0の値の2つのペアの故障による影響を受けた後の値を、表において破線で囲んで示すとともに、このA3〜A0の値の2つのペアの故障による影響を受けた後の値の各々で実際にアクセスされるアドレス(データ)及びアドレス(ECC)を、表において実線で囲むとともに太実線で接続して示している。これによって示すように、4行目のデータ(“DATAC”〜“DATAF”)と、2行目のECC(“ECC2”)がアクセスされる。すなわち、データとECCのペアが崩れていることが分かる。
同じ2行目の右の方には、他の例として、A3ビットにStuck−at0故障が発生した場合についても、このA3〜A0の値の2つのペアについて、上記と同様の形で示している。この場合は、アドレスADR−1D(その下位4ビットは“1101”)が故障による影響を受けて別のアドレスADR−15(その下位4ビットは“0101”)となり、そのアドレスはECC格納のために使用されないアドレスである。そのため、データとECCのペアが崩れていることが分かる。
また、同じ2行目の一番右には、さらに、他の例として、A1ビットにStuck−at0故障が発生した場合についても、このA3〜A0の値の2つのペアについて、上記と同様の形で示している。この場合は、アドレスADR−04〜ADR−07(その下位4ビットは“0100”〜“0111”)が、2つのアドレスADR−04、ADR−05(その下位4ビットは“0100”、“0101”)に縮退される。よって、アドレスADR−06、ADR07に格納されているデータ(“DATA6”)とデータ(“DATA7”)が読み出し不能となるため、データとECCのペアが崩れることが分かる。
また、さらに、他の例として、図36に示した表の3行目における、データ(“DATA8”〜“DATAB”)と、そのデータとペアになるECC(“ECC2”)の各々が格納されるアドレスに関して、同様に、A2ビットにStuck−at1故障が発生した場合、A2ビットにStuck−at0故障が発生した場合、A1ビットにStuck−at1故障が発生した場合についても示している。そして、いずれの場合も、やはりデータとECCのペアは崩れている。この表から、アドレスのいずれかのビットにStuck−at故障が発生した場合には、確実に故障が検出できることが分かる。なお、オフセット(2ビット)が両方とも“1”に設定されている場合について説明したが、他の値“0”に設定されている場合であっても以上と同様になることは明らかであるため、詳細な説明は省略する。
さらに、アドレスのいずれかのビットにStuck−at故障が発生した後に、データの書き込みと読み出しが行われる場合、アドレス(データ)とアドレス(ECC)のペアが本来のペアとは異なるものとなるが、それとは違うもう1つのアドレス(データ)とアドレス(ECC)のペアと一致してしまう(つまり、アドレスが縮退される)ことはないことも分かる。そのため、データとECCの両方に対する上書きは発生せず、アドレスのいずれかのビットにStuck−at故障が発生した後であっても、確実に故障が検出できることが分かる。
以上に説明したように、本実施の形態6では、第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビット以外のビット(下位Nビットに対応)のうち、下位から所定のオフセットビット数のビットを除くビットを、オフセットビット数だけ下位方向にシフトするとともに、上位からオフセットビット数のオフセットビット(Mビットに対応)を、設定されたオフセット値に変更したアドレスを前記第2のアドレスとして生成するようにしている。
これによれば、実施の形態2〜実施の形態5と全く同じ効果が得られることは明らかであるため、詳細な説明は省略する。
<実施の形態7>
続いて、本実施の形態7について、図面を用いて、その構成と動作を説明する。本実施の形態7に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。また、本実施の形態7に係るI/F変換回路13の構成と動作については、図32に示した実施の形態6に係るI/F変換回路13の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態7では、I/F変換回路13において、ADR変換回路120の一部の構成と動作が、実施の形態6に係るADR変換回路120とは異なる。なお、本実施の形態7に係るI/F制御回路110、WDT変換回路130及びRDT変換回路140の構成及び動作は、実施の形態6に係るそれらと同様である。
続いて、図37を参照して、本実施の形態7に係るADR変換回路120の構成について説明する。
図37に示すように、本実施の形態7に係るADR変換回路120は、実施の形態6に係るADR変換回路120と比較して、さらに、ADR範囲制限回路126を有する。
ADR範囲制限回路126は、アドレス(データ)を制限する回路である。バスマスタから入力されたアドレス信号は、ADR範囲制限回路126に入力される。ADR範囲制限回路126は、入力されたアドレス信号が示すアドレスが、データを格納可能であるとして予め定められた範囲に含まれない場合、その範囲内に収まるようにアドレスを変更し、変更後のアドレスを示すアドレス信号を、セレクタ122及びADRシフト&オフセット設定回路125に出力する。一方、ADR範囲制限回路126は、入力されたアドレス信号が示すアドレスが、データを格納可能であるとして予め定められた範囲に含まれる場合、そのアドレス信号を、そのままセレクタ122及びADRシフト&オフセット設定回路125に出力する。
続いて、図38を参照して、本実施の形態7に係るADRシフト&オフセット設定回路125の構成について説明する。ここでは、N=4である例について説明する。
図38に示すように、本実施の形態7に係るADRシフト&オフセット設定回路125は、図34に示した実施の形態6に係るADRシフト&オフセット設定回路125と比較して、オフセット設定レジスタ1251を有さない点が異なる。すなわち、本実施の形態7に係るADRシフト&オフセット設定回路125では、実施の形態6では任意に設定可能としていたオフセット(2ビット)の各ビット値を、予め定められた値(ここでは“1”である場合を例示)に固定している。
よって、ADRシフト&オフセット設定回路125に入力されたNビットのアドレス信号が示すアドレスのうち、上位(N−M)ビットの各々A2、A3を、ADRシフト&オフセット設定回路125から出力されるNビットのアドレス信号が示すアドレスのうち、下位(N−M)ビットの各々A’0、A’1とする。また、所定のオフセット値の各ビットB2、B3(どちらも値は“1”)を、ADRシフト&オフセット設定回路125から出力するNビットのアドレス信号のうち、残りの上位Mビットの各々A’(N−2)=A’2、A’(N−1)=A’3とする。
続いて、図39を参照して、本実施の形態7に係る内蔵メモリ14のメモリマップについて説明する。ここでは、内蔵メモリ14のデータ幅は8ビットであり、内蔵メモリ14のアドレス幅はNビットであり、内蔵メモリ14のデータ容量が(8×2N)ビットであり、N=4である例について説明する。すなわち、本実施の形態7では、ウエイト#信号は、アドレスの最上位ビットを示す信号としては利用されない。
内蔵メモリ14は、図39における先頭から12アドレスをデータが格納される領域として使用し、それに続く4アドレスをECCが格納される領域として使用する。つまり、内蔵メモリ14における領域は、データを格納するアドレスのNビット(図39ではA3〜A0)の値に対して、そのデータとペアになるECCを格納するアドレスのNビットの値は、図38に示したADRシフト&オフセット設定回路125の動作により変換されたもの(図39においてA3〜A0の値を「ADRシフト&オフセット設定」と示している部分、末尾から4アドレスの領域)になっている。
すなわち、図39に示すように、アドレスADR−0(“0000”)〜ADR−3(“0011”)のデータ(“DATA0”〜“DATA3”)と、アドレスADR−C(“1100”)のECC(“ECC0(0、1、2、3)”)がペアになる。アドレスADR−4(“0100”)〜ADR−7(“0111”)のデータ(“DATA4”〜“DATA7”)と、アドレスADR−D(“1101”)のECC(“ECC1(4、5、6、7)”)がペアになる。アドレスADR−8(“1000”)〜ADR−B(“1011”)のデータ(“DATA8”〜“DATAB”)と、アドレスADR−E(“1110”)のECC(“ECC2(8、9、A、B)”)がペアになる。最後のアドレスADR−F(“1111”)の領域は使用されない。
よって、ADR範囲制限回路126は、アドレス信号が示すアドレスが、ECCが格納されるアドレスADR−C(“1100”)〜ADR−F(“1111”)のいずれかのアドレスを示している場合、そのアドレスをデータが格納されるアドレスADR−0(“0000”〜ADR−B(“1011”)のうち、いずれかの予め定められたアドレスに変更する。
以上に説明したように、本実施の形態7では、第1のアドレス(Nビットのアドレスに対応)のうち、下位から所定のオフセットビット数のビットを除くビットを、オフセットビット数だけ下位方向にシフトするとともに、上位からオフセットビット数のオフセットビット(Mビットに対応)を、設定されたオフセット値に変更したアドレスを第2のアドレスとして生成するようにしている。
これによれば、実施の形態2〜実施の形態6と全く同じ効果が得られることは明らかであるため、詳細な説明は省略する。また、本実施の形態7によれば、内蔵メモリ14において使用されないアドレスの領域を減らすことができる。
また、本実施の形態7では、ADR範囲制限回路126は、バスマスタから指定された第1のアドレスが、第2のアドレスが取り得る範囲として予め定められた範囲に含まれる場合、バスマスタから指定されたアドレスを、第1のアドレスが取り得るアドレスとして予め定められたアドレスに補正するようにしている。
これによれば、本実施の形態7に係る構成のように、バスマスタがECCが格納されるアドレスを指定してデータの書き込みが可能であっても、バスマスタがECCが格納されるアドレスに対してECC以外のデータを書き込むことを抑止することができる。
<実施の形態8>
続いて、本実施の形態8について、図面を用いて、その構成と動作を説明する。本実施の形態8に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。また、本実施の形態8に係るI/F変換回路13の構成と動作については、図32に示した実施の形態6に係るI/F変換回路13の構成と動作と基本的に同様である。ただし、本実施の形態8では、I/F変換回路13において、ADR変換回路120が有するADRシフト&オフセット設定回路125の一部の構成と動作が、実施の形態6に係るADRシフト&オフセット設定回路125とは異なる。
本実施の形態8では、ECCモードを、2つのECCモードのうちのいずれかに切り替え可能である。第1のECCモードは、バスマスタが内蔵メモリ14に対して8ビットのデータの書き込み及び読み出しを行うものであり、その8ビットのデータに対して5ビットのECCが生成されて内蔵メモリ14に格納される。第2のECCモードは、バスマスタが内蔵メモリ14に対して32ビットのデータの書き込み及び読み出しを行うものであり、その32ビットのデータに対して7ビットのECCが生成されて内蔵メモリ14に格納される。
本実施の形態8に係るADRシフト&オフセット設定回路125は、図29に示した実施の形態5に係るADRローテーション回路123としての動作と、図33に示した実施の形態6に係るADRシフト&オフセット設定回路125としての動作とのいずれかに、その動作を切り替え可能である。
すなわち、本実施の形態8に係るADR変換回路120は、設定されたECCモードに応じて、「ADRローテーション」と「ADRシフト&オフセット設定」のいずれかの動作に切り替え可能である。
続いて、図40を参照して、本実施の形態8に係るADRシフト&オフセット設定回路125の構成について説明する。
図40に示すように、本実施の形態8に係るADRシフト&オフセット設定回路125は、実施の形態6に係るADRシフト&オフセット設定回路125と比較して、さらに、オフセット信号のビット数分のセレクタ1252を有する。アドレス信号がNビットであり、オフセット信号がMビットであり、M=2である例について説明する。
ADRシフト&オフセット設定回路125に入力されるアドレス信号の下位MビットA0、A1の各々は、2つのセレクタ1252の各々に入力される。オフセット設定レジスタ1251に格納された2ビットのオフセット値を示すオフセット信号B(N−2)、B(N−1)の各々は、2つのセレクタ1252の各々に入力される。
セレクタ1252の各々は、バスマスタから入力されたアドレス信号の下位MビットA0、A1の各々、及び、オフセット設定レジスタ1251から入力されたオフセット信号B(N−2)、B(N−1)の各々のいずれかを選択し、選択した信号をADRシフト&オフセット設定回路125から出力するアドレス信号の上位MビットA’(N−2)、A’(N−1)として出力する。
セレクタ1252の各々には、ECCモードを指定するECCモード信号が入力される。セレクタ1252の各々は、第1のECCモードを指定するECCモード信号(“0”)が入力されている場合、アドレス信号の下位MビットA0、A1の各々を選択する。一方、セレクタ1252の各々は、第2のECCモードを指定するECCモード信号(“1”)が入力されている場合、オフセット信号B(N−2)、B(N−1)の各々を選択する。
ADRシフト&オフセット設定回路125に入力されたアドレス信号のうち、上位(N−M)ビットA2、・・・、A(N−1)の各々は、ADRシフト&オフセット設定回路125から出力されるアドレス信号のうち、下位(N−M)ビットA’0、A’1、・・・、A’(N−3)の各々となる。すなわち、これについては、図29に示した実施の形態5に係るADRローテーション回路123と、図33に示した実施の形態6に係るADRシフト&オフセット設定回路125と同様である。なお、このADRシフト&オフセット設定回路125でも、A0〜A(N−1)までのNビットのアドレス信号線の各ビットの信号は、N個のバッファ1250の各々で受けた後に使用するようにしている。
以上に説明したように、本実施の形態8では、ADRシフト&オフセット設定回路125は、第1のモードが指定されている場合、第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビット以外のビットの全てを、所定のオフセットビット数だけ下位方向にシフトしたアドレスを第2のアドレスとして生成するようにしている。また、ADRシフト&オフセット設定回路125は、第2のモードが指定されている場合、第1のアドレスの少なくとも1つのビット以外のビットのうち、下位からオフセットビット数のビットを除くビットを、オフセットビット数だけ下位方向にシフトするとともに、上位からオフセットビット数のオフセットビット(Mビットに対応)を、設定されたオフセット値に変更したアドレスを第2のアドレスとして生成するようにしている。
これによれば、第1のECCモード時には、実施の形態5と全く同じ効果が選択的に得られることは明らかであるため、詳細な説明は省略する。また、第2のECCモード時にも、実施の形態6と全く同じ効果が選択的に得られることは明らかであるため、詳細な説明は省略する。
<実施の形態9>
続いて、本実施の形態9について、図面を用いて、その構成と動作を説明する。本実施の形態9に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。また、本実施の形態9に係るI/F変換回路13の構成と動作については、図32に示した実施の形態6に係るI/F変換回路13の構成と動作と基本的に同様である。ただし、本実施の形態9では、I/F変換回路13において、ADR変換回路120の一部の構成と動作が、実施の形態6に係るADR変換回路120とは異なる。
続いて、図41を参照して、本実施の形態9に係るI/F変換回路13の構成について説明する。本実施の形態9に係るI/F変換回路13は、実施の形態6に係るI/F変換回路13と比較して、ADR変換回路120におけるADRシフト&オフセット設定回路125に代えて、ADR反転シフト&オフセット設定回路127を有する。なお、本実施の形態9に係るI/F制御回路110、WDT変換回路130及びRDT変換回路140の構成及び動作は、実施の形態6に係るそれらと同様である。
本実施の形態9では、ECCモードを、2つのECCモードのうちのいずれかに切り替え可能である。第1のECCモードは、バスマスタが内蔵メモリ14に対して8ビットのデータの書き込み及び読み出しを行うものであり、その8ビットのデータに対して5ビットのECCが生成されて内蔵メモリ14に格納される。第2のECCモードは、バスマスタが内蔵メモリ14に対して32ビットのデータの書き込み及び読み出しを行うものであり、その32ビットのデータに対して7ビットのECCが生成されて内蔵メモリ14に格納される。
本実施の形態9に係るADR反転シフト&オフセット設定回路127は、図3に示した実施の形態1に係るADR反転回路121としての動作と、入力されたアドレス信号のうち、下位から所定ビット数のビットを除くビットの値を反転してからその所定ビット数だけ下位にシフトするとともに、上位からその所定ビット数のビットをオフセット信号が示すオフセット値としてから、そのアドレス信号をセレクタ122に出力する動作とのいずれかに、その動作を切り替え可能である。よって、本実施の形態9では、セレクタ122は、バスマスタから出力されるアドレス信号、及びADR反転シフト&オフセット設定回路127から出力されるアドレス信号のうち、いずれか1つを選択し、内蔵メモリ14に出力する。
すなわち、本実施の形態9に係るADR変換回路120は、設定されたECCモードに応じて、「ADR反転」と「ADR反転シフト&オフセット設定」のいずれかの動作に切り替え可能である。
続いて、図42を参照して、本実施の形態9に係るADR反転シフト&オフセット設定回路127の構成について説明する。
図42に示すように、ADR反転シフト&オフセット設定回路127は、N個のビット値反転回路1270と、オフセット設定レジスタ1271と、N個のセレクタ1272とを有する。アドレス信号がNビットであり、オフセット信号がMビットであり、M=2である例について説明する。
N個のビット値反転回路1270の各々は、Nビットのアドレス信号の各ビットA0、A1、A2、・・・、A(N−1)に対応する。N個のビット値反転回路1270の各々は、アドレス信号のうち、自身に対応するビットの値を反転し、反転後の値を出力する。ビット値反転回路1270は、例えば、NOT回路である。
ここで、アドレス信号のNビットA0、A1、・・・、A(N−2)、A(N−1)の反転後の値の各々は、アドレス信号のNビットA’0、A’1、・・・、A’(N−2)、A’(N−1)の各々を出力するN個のセレクタ1272の各々に入力される。また、アドレス信号の上位(N−M)ビットA2、A3、・・・、A(N−2)、A(N−1)の反転後の値の各々は、アドレス信号の下位(N−M)ビットA’0、A’1、・・・、A’(N−4)、A’(N−3)の各々を出力する(N−M)個のセレクタ1272の各々に入力される。
オフセット設定レジスタ1271には、Mビットのオフセット信号がオフセット値として取り込まれる。オフセット設定レジスタ1271に格納されるMビットのオフセット値の各々は、アドレス信号の上位MビットA’(N−2)、A’(N−1)の各々を出力するM個のセレクタ1272の各々に入力される。
アドレス信号の下位(N−M)ビットA’0、A’1、・・・、A’(N−4)、A’(N−3)の各々を出力する(N−M)個のセレクタ1272の各々は、アドレス信号の下位(N−M)ビットA0、A1、・・・、A(N−4)、A(N−3)の反転後の値の各々、及び、アドレス信号の上位(N−M)ビットA2、A3、・・・、A(N−2)、A(N−1)の反転後の値の各々のいずれかを選択して出力する。
セレクタ1272の各々には、ECCモードを指定するECCモード信号が入力される。上記(N−M)個のセレクタ1272の各々は、第1のECCモードを指定するECCモード信号(“0”)が入力されている場合、アドレス信号の下位(N−M)ビットA0、A1、・・・、A(N−4)、A(N−3)の反転後の値の各々を選択する。一方、上記(N−M)個のセレクタ1272の各々は、第2のECCモードを指定するECCモード信号(“1”)が入力されている場合、アドレス信号の上位(N−M)ビットA2、A3、・・・、A(N−2)、A(N−1)の反転後の値の各々を選択する。
アドレス信号の上位MビットA’(N−2)、A’(N−1)の各々を出力するM個のセレクタ1272の各々は、アドレス信号の上位MビットA(N−2)、A(N−1)の反転後の値の各々、及び、オフセット値B(N−2)、B(N−1)の各々のいずれかを選択して出力する。
上記M個のセレクタ1272の各々は、第1のECCモードを指定するECCモード信号(“0”)が入力されている場合、アドレス信号の上位MビットA(N−2)、A(N−1)の反転後の値の各々を選択する。一方、上記M個のセレクタ1272の各々は、第2のECCモードを指定するECCモード信号(“1”)が入力されている場合、オフセット値B(N−2)、B(N−1)の各々を選択する。
以上に説明したように、本実施の形態9では、ADR反転シフト&オフセット設定回路127は、第1のモードが指定されている場合、第1のアドレス(N+1ビットに対応)の少なくとも1つのビット以外のビットの全ての値を反転したアドレスを第2のアドレスとして生成するようにしている。また、ADR反転シフト&オフセット設定回路127は、第2のモードが指定されている場合、第1のアドレスの少なくとも1つのビット以外のビットの全ての値を反転し、下位から所定のオフセットビット数のビットを除くビットを、オフセットビット数だけ下位方向にシフトするとともに、上位からオフセットビット数のオフセットビット(Mビットに対応)を、設定されたオフセット値に変更したアドレスを第2のアドレスとして生成するようにしている。
これによれば、第1のECCモード時には、実施の形態1と全く同じ効果が選択的に得られることは明らかであるため、詳細な説明は省略する。また、第2のECCモード時にも、実施の形態6と全く同じ効果が選択的に得られることは明らかであるため、詳細な説明は省略する。
<実施の形態10>
続いて、本実施の形態10について、図面を用いて、その構成と動作を説明する。本実施の形態10に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。また、本実施の形態10に係るI/F変換回路13の構成と動作については、図32に示した実施の形態6に係るI/F変換回路13の構成と動作と基本的に同様である。ただし、本実施の形態10では、I/F変換回路13において、ADR変換回路120が有するADRシフト&オフセット設定回路125の一部の構成と動作が、実施の形態6に係るADRシフト&オフセット設定回路125とは異なる。
本実施の形態10では、ECCモードを、2つのECCモードのうちのいずれかに切り替え可能である。第1のECCモードは、バスマスタが内蔵メモリ14に対して8ビットのデータの書き込み及び読み出しを行うものであり、その8ビットのデータに対して5ビットのECCが生成されて内蔵メモリ14に格納される。第2のECCモードは、バスマスタが内蔵メモリ14に対して32ビットのデータの書き込み及び読み出しを行うものであり、その32ビットのデータに対して7ビットのECCが生成されて内蔵メモリ14に格納される。
本実施の形態10に係るADRシフト&オフセット設定回路125は、図3に示した実施の形態1に係るADR反転回路121としての動作と、図33に示した実施の形態6に係るADRシフト&オフセット設定回路125としての動作とのいずれかに、その動作を切り替え可能である。
すなわち、本実施の形態10に係るADR変換回路120は、設定されたECCモードに応じて、「ADR反転」と「ADRシフト&オフセット設定」のいずれかの動作に切り替え可能である。
続いて、図43を参照して、本実施の形態10に係るADRシフト&オフセット設定回路125の構成について説明する。
図43に示すように、本実施の形態10に係るADRシフト&オフセット設定回路125は、実施の形態6に係るADRシフト&オフセット設定回路125と比較して、さらに、N個のADR選択回路1253を有する。アドレス信号がNビットであり、オフセット信号がMビットであり、M=2である例について説明する。
アドレス信号のNビットA0、A1、・・・、A(N−2)、A(N−1)の値の各々は、バッファ1250を介して、アドレス信号のNビットA’0、A’1、・・・、A’(N−2)、A’(N−1)の各々を出力するN個のADR選択回路1253の各々に入力される。また、アドレス信号の上位(N−M)ビットA2、A3、・・・、A(N−2)、A(N−1)の値の各々は、バッファ1250を介して、アドレス信号の下位(N−M)ビットA’0、A’1、・・・、A’(N−4)、A’(N−3)の各々を出力する(N−M)個のADR選択回路1253の各々に入力される。
オフセット設定レジスタ1251には、Mビットのオフセット信号がオフセット値として取り込まれる。オフセット設定レジスタ1251に格納されるMビットのオフセット値B(N−2)、B(N−1)は、アドレス信号の上位MビットA’(N−2)、A’(N−1)の各々を出力するM個のADR選択回路1253の各々に入力される。
アドレス信号の下位(N−M)ビットA’0、A’1、・・・、A’(N−4)、A’(N−3)の各々を出力する(N−M)個のADR選択回路1253の各々は、アドレス信号の下位(N−M)ビットA0、A1、・・・、A(N−4)、A(N−3)の反転後の値の各々、及び、アドレス信号の上位(N−M)ビットA2、A3、・・・、A(N−2)、A(N−1)の値の各々のいずれかを選択して出力する。
ADR選択回路1253の各々には、ECCモードを指定するECCモード信号が入力される。上記(N−M)個のADR選択回路1253の各々は、第1のECCモードを指定するECCモード信号(“0”)が入力されている場合、アドレス信号の下位(N−M)ビットA0、A1、・・・、A(N−4)、A(N−3)の値の各々を選択し、選択した値を反転して出力する。ここで選択される値は、「第1の値」として後述する。一方、上記(N−M)個のADR選択回路1253の各々は、第2のECCモードを指定するECCモード信号(“1”)が入力されている場合、アドレス信号の上位(N−M)ビットA2、A3、・・・、A(N−2)、A(N−1)の値の各々を選択して出力する。ここで選択される値は、「第2の値」として後述する。
アドレス信号の上位MビットA’(N−2)、A’(N−1)の各々を出力するM個のADR選択回路1253の各々は、アドレス信号の上位MビットA(N−2)、A(N−1)の反転後の値の各々、及び、オフセット値B(N−2)、B(N−1)の各々のいずれかを選択して出力する。
上記M個のADR選択回路1253の各々は、第1のECCモードを指定するECCモード信号(“0”)が入力されている場合、アドレス信号の上位MビットA(N−2)、A(N−1)の値の各々を選択し、選択した値を反転して出力する。ここで選択される値は、「第1の値」として後述する。一方、上記M個のADR選択回路1253の各々は、第2のECCモードを指定するECCモード信号(“1”)が入力されている場合、オフセット値B(N−2)、B(N−1)の各々を選択して出力する。ここで選択される値は、「第2の値」として後述する。
続いて、図44を参照して、本実施の形態10に係るADR選択回路1253の構成について説明する。
図44に示すように、ADR選択回路1253は、NOR回路12531と、AND回路12532と、OR回路12533とを有する。
NOR回路12531は、第1の値とECCモード信号の値とのNOR(否定的論理和)演算結果となる信号をOR回路12533に出力する。AND回路12532は、第2の値とECCモード信号の値とのAND(論理積)演算結果となる信号をOR回路12533に出力する。OR回路12533は、NOR回路12531から入力された信号と、AND回路12532から入力された信号とのOR(論理和)演算結果となる信号を出力する。
以上に説明したように、本実施の形態10では、ADRシフト&オフセット設定回路125は、第1のモードが指定されている場合、第1のアドレス(N+1ビットに対応)の少なくとも1つのビット以外のビットの全ての値を反転したアドレスを第2のアドレスとして生成するようにしている。また、ADRシフト&オフセット設定回路125は、第2のモードが指定されている場合、第1のアドレスの少なくとも1つのビット以外のビットのうち、下位から所定のオフセットビット数のビットを除くビットを、オフセットビット数だけ下位方向にシフトするとともに、上位からオフセットビット数のオフセットビット(Mビットに対応)を、設定されたオフセット値に変更したアドレスを第2のアドレスとして生成するようにしている。
これによれば、第1のECCモード時には、実施の形態1と全く同じ効果が選択的に得られることは明らかであるため、詳細な説明は省略する。また、第2のECCモード時にも、実施の形態6と全く同じ効果が選択的に得られることは明らかであるため、詳細な説明は省略する。
<実施の形態11>
続いて、本実施の形態11について、図面を用いて、その構成と動作を説明する。図45を参照して、本実施の形態11に係るCPUシステム1の構成について説明する。図45に示すように、本実施の形態11に係るCPUシステム1は、図1に示した実施の形態1に係るCPUシステム1と比較して、コントロール入力I/F11、コマンド出力I/F12、及びI/F変換回路13を有さず、ハードウェアアクセラレータ20、センサI/F21、アクチュエータI/F22、変換回路23、DDR I/F24及びDDRメモリ25を有する。
本実施の形態11では、自動車は、自動車の周辺を観測し、観測結果を示すセンサデータを、入力データとしてCPUシステム1に送信するセンサユニットが、入力ユニットとして搭載されている。センサユニットは、例えば、レーダー又はカメラ等である。
また、自動車は、制御ユニットとして、CPUシステム1によって制御されるアクチュエータユニットが搭載されている。制御ユニットは、例えば、ステアリング又はブレーキ等である。
本実施の形態11に係るCPUシステム1においては、CPU10は、マルチコア構成のCPUである。CPU10は、センサユニットからのセンサデータに基づいて、制御データを生成する。例えば、CPU10は、ステアリングに対する制御データであれば、制御内容として、ステアリングの切れ角の変更を指示する制御データを生成する。また、例えば、CPU10は、ブレーキに対する制御データであれば、制御内容として、ブレーキ油圧の調整を指示する制御データを生成する。
ハードウェアアクセラレータ20は、マルチコア構成のハードウェアである。CPU10の処理を補助的に実行する。ハードウェアアクセラレータ20は、例えば、GPU(Graphics Processing Unit)又はDSP(Digital Signal Processor)等である。
センサI/F21は、センサユニットとシステムバスとを接続するインタフェース回路である。すなわち、センサI/F21は、センサユニットからセンサデータが入力される。アクチュエータI/F22は、アクチュエータユニットとシステムバスとを接続するインタフェース回路である。すなわち、アクチュエータI/F22は、アクチュエータユニットを制御するためのコマンドを、アクチュエータユニットに出力する。
変換回路23は、DDR I/F24とシステムバスとを接続するインタフェース回路である。後述するように、変換回路23は、実施の形態1〜10に係るI/F変換回路13と同様に、バスマスタ(CPU10、DMAC15及びハードウェアアクセラレータ20)の各々がシステムバス経由でDDR I/F24を介してDDRメモリ25にアクセス(データの書き込み又はデータの読み出し)する際に、データ信号系及びアドレス信号系の故障を検出するための処理を実行する。
より具体的には、変換回路23は、DDRメモリ25に対してデータを書き込む際に、そのデータから生成したECCもDDRメモリ25に書き込む。また、変換回路23は、DDRメモリ25からデータを読み出す際に、読み出したデータからECCを生成し、生成したECCと、そのデータと共にDDRメモリ25に書き込んだECCとを比較することで故障を検出する。本実施の形態11でも、データを格納するアドレスからECCを格納するアドレスを生成することにより、データ信号系の故障のみならず、アドレス信号系の故障も検出可能とする。
DDR I/F24は、バスマスタから変換回路23を介して入力されたパケットに応じて、DDRメモリ25へのデータの書き込み、又は、DDRメモリ25からのデータの読み出しを実行する。すなわち、本実施の形態11では、バスマスタは、パケットの形式で、ライトアドレスを示すデータ及びライトデータを示すデータを変換回路23に出力することで、データの書き込みを実行する。また、バスマスタは、パケットの形式で、リードアドレスを示すデータを変換回路23に出力することで、データの読み出しを実行する。
DDRメモリ25は、各種データが格納される記憶回路である。すなわち、DDRメモリ25には、例えば、上述のセンサデータ、制御データ(コマンド)及びECC等が格納される。
続いて、図46を参照して、本実施の形態11に係る変換回路23の構成について説明する。図46に示すように、変換回路23は、WADR変換回路210と、RADR変換回路220と、WDT変換回路230と、RDT変換回路240とを有する。ここで、「WADR」は書き込みアドレス(ライトアドレス)を示し、「RADR」は読み出しアドレス(リードアドレス)を示す。「WDT」及び「RDT」については、実施の形態1の説明で述べた通りである。
バスマスタは、ライトアドレスを示すパケット、リードアドレスを示すパケット及びライトデータを示すパケットを、システムバスを介して変換回路23に出力する。変換回路23は、リードデータを示すパケット及びエラー通知信号を、システムバスを介してバスマスタに出力する。変換回路23は、クロック生成回路(図示せず)から入力されるクロック信号に基づいて動作する。
バスマスタは、DDRメモリ25に対してデータを書き込む場合、データを書き込むアドレスとなるライトアドレスを示すパケットと、書き込むデータとなるライトデータを示すパケットとを、変換回路23に出力する。これに応じて、変換回路23は、それらのパケットとともに、そのライトデータに対応するECCの書き込むアドレスとなるECCアドレスを示すパケットと、そのDDRメモリ25に書き込むECCを示すパケットとを、DDR I/F24に出力する。
DDR I/F24は、DDRメモリ25のうち、変換回路23からのパケットが示すライトアドレスに、変換回路23からのパケットが示すライトデータを書き込む。また、DDR I/F24は、DDRメモリ25のうち、変換回路23からのパケットが示すECCアドレスに、変換回路23からのパケットが示すECCを書き込む。
また、バスマスタは、DDRメモリ25からデータを読み出す場合、データを読み出すアドレスとなるリードアドレスを示すパケットを変換回路23に出力する。これに応じて、変換回路23は、そのパケットとともに、その読み出すデータであるリードデータに対応するECCを読み出すアドレスとなるECCアドレスを示すパケットをDDR I/F24に出力する。
DDR I/F24は、DDRメモリ25のうち、変換回路23からのパケットが示すリードアドレスから、リードデータを読み出し、読み出したリードデータを示すパケットを変換回路23に出力する。また、DDR I/F24は、DDRメモリ25のうち、変換回路23からのパケットが示すECCアドレスから、ECCを読み出し、読み出したECCを示すパケットを変換回路23に出力する。
そして、変換回路23は、DDR I/F24からのパケットが示すリードデータと、DDR I/F24からのパケットが示すECCによるチェックによってデータの誤りが検出された場合、エラーを通知するエラー通知信号をバスマスタに出力する。
図46に示すように、WADR変換回路210は、アドレスバッファ211と、ECC用ADR生成回路212と、切替制御回路213と、セレクタ214とを有する。
アドレスバッファ211は、バスマスタからのライトアドレスを示すパケットを、セレクタ214に出力するとともに、その後も一時的に保持するメモリである。
ECC用ADR生成回路212は、アドレスバッファ211に格納されたバケットが示すライトアドレスに基づいて、ECCアドレスを示すパケットを生成する。このライトアドレスからECCアドレスを生成する動作については、実施の形態1に係るADR反転回路121と同様であるため、詳細な説明を省略する。ECC用ADR生成回路212は、生成したパケットをセレクタ214に出力する。ただし、本実施の形態11では、実施の形態1ではウエイト#信号によって切り替えていたアドレス信号の最上位ビットの値も、ECC用ADR生成回路212が切り替える。
切替制御回路213は、アドレスバッファ211からライトアドレスを示すパケットがセレクタ214に出力されている間、そのパケットの選択をセレクタ214に指示する。より具体的には、切替制御回路213は、データ/ECC信号(“0”)をセレクタ214に出力する。切替制御回路213は、アドレスバッファ211からライトアドレスを示すパケットのセレクタ214への出力の完了後、ECC用ADR生成回路212からECCアドレスを示すパケットがセレクタ214に出力されている間、そのパケットの選択をセレクタ214に指示する。より具体的には、切替制御回路213は、データ/ECC信号(“1”)をセレクタ214に出力する。
セレクタ214は、切替制御回路213からデータ/ECC信号(“0”)が入力されている場合、アドレスバッファ211から入力されるパケットを選択し、DDR I/F24に出力する。一方、セレクタ214は、切替制御回路213からデータ/ECC信号(“1”)が入力されている場合、ECC用ADR生成回路212から入力されるパケットを選択し、DDR I/F24に出力する。
RADR変換回路220の構成及び動作については、WADR変換回路210の構成及び動作と同様であるため、説明を省略する。
図46に示すように、WDT変換回路230は、データバッファ231と、ECC生成回路232と、切替制御回路233と、セレクタ234とを有する。
データバッファ231は、バスマスタからのライトデータを示すパケットを、セレクタ234に出力するとともに、その後も一時的に保持するメモリである。
ECC生成回路232は、データバッファ231に格納されたバケットが示すライトデータに基づいて、ECCを示すパケットを生成する。このライトデータからECCを生成する動作については、実施の形態1に係るECC生成回路131と同様であるため、詳細な説明を省略する。ECC生成回路232は、生成したパケットをセレクタ234に出力する。
切替制御回路233は、データバッファ231からライトデータを示すパケットがセレクタ234に出力されている間、そのパケットの選択をセレクタ234に指示する。より具体的には、切替制御回路233は、データ/ECC信号(“0”)をセレクタ234に出力する。切替制御回路233は、データバッファ231からライトデータを示すパケットのセレクタ234への出力の完了後、ECC生成回路232からECCを示すパケットがセレクタ234に出力されている間、そのパケットの選択をセレクタ234に指示する。より具体的には、切替制御回路233は、データ/ECC信号(“1”)をセレクタ234に出力する。
セレクタ234は、切替制御回路233からデータ/ECC信号(“0”)が入力されている場合、データバッファ231から入力されるパケットを選択し、DDR I/F24に出力する。一方、セレクタ234は、切替制御回路233からデータ/ECC信号(“1”)が入力されている場合、ECC生成回路232から入力されるパケットを選択し、DDR I/F24に出力する。
RDT変換回路240は、データバッファ241と、イネーブル制御回路242と、ECCチェック回路243と、エラー訂正回路244とを有する。
データバッファ241は、DDR I/F24からのリードデータを示すパケットを、ECCチェック回路243及びエラー訂正回路244に出力するとともに、その後も一時的に格納するメモリである。また、データバッファ241は、DDR I/F24からのECCを示すパケットを格納する。
イネーブル制御回路242は、データバッファ241にECCを示すパケットが格納された場合、データバッファ241に格納されるパケットが示すデータの誤りが発生しているか否かを判定するためのイネーブル信号を出力する。より具体的には、イネーブル制御回路242は、アサートされたイネーブル信号(“1”)をECCチェック回路243に出力する。なお、イネーブル制御回路242は、それ以外の場合には、デアサートされたイネーブル信号(“0”)をECCチェック回路243に出力している。例えば、イネーブル制御回路242は、後述のECCチェック回路243による判定が終了した場合、デアサートされたイネーブル信号(“0”)をECCチェック回路243に出力する。
ECCチェック回路243は、イネーブル制御回路242からのアサートされたイネーブル信号(“1”)に応じて、データバッファ241に格納されるパケットが示すデータと、データバッファ241に格納されるパケットが示すECCとに基づいて、データの誤りが発生しているか否かを判定する。
ECCチェック回路243は、データのいずれか1ビットに誤りが発生していると判定した場合、そのビット位置を示すエラー訂正信号をエラー訂正回路244に出力する。ECCチェック回路243は、データに訂正不能な2ビット以上の誤りが発生していると判定した場合、エラーを通知するエラー通知信号をバスマスタに出力する。
エラー訂正回路244は、データに誤りが発生していない場合、データバッファ241から入力されるデータを示すパケットを、そのままリードデータとしてバスマスタに出力する。一方、エラー訂正回路244は、データに誤りが発生している場合、データバッファ241から入力されるパケットが示すデータの誤りを訂正してから、そのパケットをバスマスタに出力する。具体的なデータの誤り訂正の方法及びその構成については、実施の形態1に係るエラー訂正回路143と同様であるため、その説明は省略する。
ここで、DDRメモリ25は、列アドレス(Columnアドレス)と行アドレス(Rowアドレス)を指定することで、データを読み出す又はデータを書き込むアドレスが指定可能とされている。DDR I/F24は、パケットが示すアドレスを列アドレスと行アドレスとに分解し、各々のアドレスを示すアドレス信号を2回に分けてDDRメモリ25に送信することでDDRメモリ25へのアクセスを実現している。これにより、DDR I/F24とDDRメモリ25間のアドレス信号線の本数を低減している。ただし、例えば、DDRメモリ25のデータ信号線の本数が32本である場合、パケットが示すアドレスの下位2ビットは意味を持たないため、DDRメモリ25に対しては出力されない。
しかしながら、これは、そのアドレス信号線の1本にStuck−at故障が発生すると、アドレスが2ビット分のStuck−at故障の影響を受けることと等しくなる。しかしながら、本実施の形態11によれば、上述したように、2ビット以上の誤りも検出可能としているため、このような故障も確実に検出することができる。
ここで、図47を参照して、本実施の形態11の他の効果について説明する。より具体的には、図47に示すように、DDR I/F24は、DDR制御回路310と、キャッシュメモリ320とを有する。
DDR制御回路310は、変換回路23からのリードアドレスを示すパケットに応じて、DDRメモリ25のうち、そのリードアドレスに格納されたデータを読み出す。DDR制御回路310は、そのデータがキャッシュメモリ320にキャッシュされている場合は、DDRメモリ25からの読み出しに代えて、キャッシュメモリ320からデータを読み出す。そして、DDR制御回路310は、読み出したデータをリードデータとして示すパケットを生成し、変換回路23に出力する。
キャッシュメモリ320は、セットアソシアティブ方式で管理されており、複数のウェイを有する。nウェイセットアソシアティブ方式が採用されている場合、キャッシュメモリ320は、各々に複数のデータが格納されるn個の領域を有している。このn個の領域の各々は、異なるn種類のウェイアドレスの各々でタグ付けされている。
図47では、4ウェイセットアソシアティブ方式が採用されており、4つの領域の各々が、“00”、“01”、“10”、“11”の4種類のウェイアドレスの各々でタグ付けされている例について示している。ここで、ウェイアドレスとして、Nビットのリードアドレスのうち、上位2ビットを使用するものとする。
本実施の形態11では、RADR変換回路220で、データを読み出すアドレスに対して、リードアドレスの(N+1)ビットのうち、下位NビットのECCを読み出すアドレスのビット値を反転するようにしている。そのため、データを読み出すウェイアドレスが“00”の場合は、ECCを読み出すウェイアドレスは“11”となる。つまり、本実施の形態11によれば、データを格納するウェイのタグと、ECCを格納するウェイのタグは、下位1ビットの値が相互に異なるものとなる。
よって、このアドレス信号線のうち、このウェイアドレスの下位1ビットに対応する信号線にStuck−at故障が発生した場合には、下位1ビットが同じ値のタグからデータとECCとが読み出されてしまうため、データとECCのペアが崩れることになる。したがって、RDT変換回路240によって故障が検出される。つまり、本実施の形態11は、このようなDDR I/F24に対して、好適に適用することができることが分かる。
以上の説明では、本実施の形態11に係るパケットによりデータの書き込み及び読み出しを行う構成において、実施の形態1に係るアドレス変換を行う例について説明したが、これに限られない。本実施の形態11に係るパケットによりデータの書き込み及び読み出しを行う構成において、他の実施の形態2〜10のいずれかに係るアドレス変換を行うようにしてもよい。また、上述の所定数ビットとして、アドレス信号のうち、N未満のビット数のビットの値を反転又は並べ替えする場合には、キャッシュメモリ320の各ウェイは、アドレス信号のうち、その所定数ビットの少なくとも1つのビットを含むビットでタグ付けされるようにする。
以上に説明したように、本実施の形態11では、アドレスバッファ211は、バスマスタから受信した第1のアドレスを示す第1のパケットを格納する。WADR変換回路210及びRADR変換回路220は、アドレスバッファ211に格納された第1のパケットが示す第1のアドレスに基づいて、第2のアドレスを示す第2のパケットを生成する。WADR変換回路210は、バスマスタから受信した第1のパケットをDDR I/F24に送信し、生成した第2のパケットをDDR I/F24に送信することで、第1のアドレスへのデータの書き込みと、第2のアドレスへの誤り検出符号の書き込みとを実行する。RADR変換回路220は、バスマスタから受信した第1のパケットをDDR I/F24に送信し、生成した第2のパケットをDDR I/F24に送信することで、第1のアドレスからのデータの読み出しと、第2のアドレスからの誤り検出符号の読み出しとを実行する。
これによれば、バスマスタからパケットの形式でデータの書き込み及び読み出しが行われる場合であっても、アドレス信号系の故障を検出することができる。なお、データアクセス効率を高めるために、連続する複数個のアドレスを連続的にアクセスするバーストアクセスのモードを設ける場合には、1回のバーストアクセスでアクセスする範囲に対応するアドレスの下位複数ビットについては、WADR変換回路210及びRADR変換回路220のECC用ADR生成回路212におけるアドレス変換の対象外として元の値を出力するようにしてもよい。このときでも、DDR I/F24とDDRメモリ25間のアドレス信号線の1本にStuck−at故障が発生した場合は、列アドレスと行アドレスとに分解された後、その下位複数ビットと同じアドレス信号線で送信される上位の対応する複数ビットの方もそのStuck−at故障の影響を受けるため、このような故障も検出することができる。
また、本実施の形態11では、DDR I/F24は、セットアソシアティブ方式でDDRメモリ25のデータをキャッシュするキャッシュメモリ320を有している。第1のアドレス(N+1ビットのアドレスに対応)の少なくとも1つのビットの値以外のビット(下位Nビットに対応)のうち、所定数ビットの値を反転したアドレスを第2のアドレスとして生成している。キャッシュメモリ320の各ウェイは、上記所定数ビットの少なくとも1つを含むビットでタグ付けされている。
これによれば、DDR I/F24のキャッシュメモリ320における機能を流用して、アドレス信号系の故障を検出することができる。
<実施の形態12>
続いて、本実施の形態12について、図面を用いて、その構成と動作を説明する。本実施の形態12に係るCPUシステム1の構成と動作については、図1に示した実施の形態1に係るCPUシステム1の構成と動作と基本的に同様であるため、その説明を省略する。ただし、本実施の形態12では、CPUシステム1が有するI/F変換回路13の一部の構成と動作が、実施の形態1に係るI/F変換回路13とは異なる。
続いて、図48を参照して、本実施の形態12に係るI/F変換回路13の構成について説明する。本実施の形態12に係るI/F変換回路13は、実施の形態10に係るI/F変換回路13と比較して、さらに、ECCモード制御回路150を有する。
ECCモード制御回路150は、ECCモード設定レジスタ151を有する。ECCモード設定レジスタ151は、ECCモードに関する各種設定値が格納される。ECCモード制御回路150は、ECCモード設定レジスタ151に格納された設定値に従って、ECCモードを有効又は無効にする制御、及び、ECCモードの有効時にECCモードを切り替える制御を行う。
ここで、ECCモード設定レジスタ151には、例えば、設定値として、以下の(1)〜(4)が設定される。ここで、(2)〜(4)は、各々を対応付けた組を複数設定することが可能である。
(1)ECCモードの有効/無効
(2)ECCモード
(3)ECCモードの範囲(例えば、その範囲の開始アドレスと終了アドレスで指定)
(4)データが格納される領域からECCが格納される領域までのオフセット
ECCモード制御回路150は、ECCモードを無効とする設定値が、ECCモード設定レジスタ151に格納されている場合、I/F制御回路110、ADR変換回路120、WDT変換回路130及びRDT変換回路140において、ECCに関する処理(内蔵メモリ14へのECCの書き込み、内蔵メモリ14からのECCの読み出し、ECCによるデータの誤りの判定)を抑止する。
例えば、ECCモード制御回路150は、デアサートされたECCイネーブル信号(“0”)をI/F制御回路110に出力する。I/F制御回路110は、ECCモード制御回路150からデアサートされたECCイネーブル信号(“0”)が入力されている場合、1クロックサイクル目でのアサートされたウエイト#信号(“0”)の出力を抑止する。
一方、ECCモード制御回路150は、ECCモードを有効とする設定値が、ECCモード設定レジスタ151に格納されている場合、I/F制御回路110、ADR変換回路120、WDT変換回路130及びRDT変換回路140において、ECCに関する処理(内蔵メモリ14へのECCの書き込み、内蔵メモリ14からのECCの読み出し、ECCによるデータの誤りの判定)を許容する。
例えば、ECCモード制御回路150は、アサートされたECCイネーブル信号(“1”)をI/F制御回路110に出力する。I/F制御回路110は、ECCモード制御回路150からアサートされたECCイネーブル信号(“1”)が入力されている場合、1クロックサイクル目でのアサートされたウエイト#信号(“0”)を出力する。
また、バスマスタからADR変換回路120に入力されるアドレス信号は、ECCモード制御回路150にも入力される。ECCモード制御回路150は、ECCモードが有効である場合、そのアドレス信号が示すアドレスが、上記(3)のECCモードの範囲に含まれるか否かを判定する。アドレス信号が示すアドレスが、ECCモードの範囲に含まれる場合、ECCモード制御回路150は、ECCモード設定レジスタ151において、そのECCモードの範囲に対応付けられて設定されているECCモードを指定するECCモード信号をADR変換回路120に出力する。
また、ECCモード制御回路150は、バスマスタから入力されるアドレス信号のうち、上位Lビットの値に対して、ECCモード設定レジスタ151において、そのECCモードの範囲に対応付けられて設定されている上記の(4)のオフセット値を加算した値に変更し、変更後の値を示す信号を内蔵メモリ14に出力する。このLビットの信号は、内蔵メモリ14に入力される(N+L)ビットのアドレス信号のうちの上位Lビットの信号として利用される。
これによれば、図49に示すように、内蔵メモリ14のうち、特定の範囲に格納されたデータについては、第1のECCモードでそのデータに対応するECCを格納し、他の特定の範囲に格納されたデータについては、第2のECCモードでそのデータに対応するECCを格納することができる。
また、これによれば、図50に示すように、アドレスが変換される。すなわち、第1のECCモードでは、図50の上図に示すように、(N+L)ビットのアドレスのうち、上位Lビットの値に対してオフセットが加えられ、下位Nビットの値は反転される。また、第2のECCモードでは、図50の下図に示すように、(N+L)ビットのアドレスのうち、上位Lビットの値に対してオフセットが加えられる。そして、下位Nビットの値において、上位Mビットはオフセット設定レジスタ1251に設定されたオフセットに変更され、下位(N−M)ビットは上位(N−M)ビットが下位方向にシフトされた値となる。
以上の説明では、本実施の形態12に係るECCモード制御回路150を、実施の形態10に係るI/F変換回路13に適用した例について説明したが、これに限られない。本実施の形態12に係るECCモード制御回路150を、実施の形態8、9のいずれかに係るI/F変換回路13に適用してもよい。
<実施の形態の概略構成>
続いて、図51を参照して、上述した実施の形態1〜12に係るCPUシステム1の概略構成となる半導体装置9の構成について説明する。すなわち、実施の形態1〜12に係るCPUシステム1における特徴的構成の一部は、図51に示すように抽出される。
図51に示すように、半導体装置9は、アドレス変換回路91と、書込回路92と、読出回路93とを有する。
アドレス変換回路91は、メモリ94にデータを格納するための第1のアドレスに基づいて、データから生成された誤り検出符号を格納するための第2のアドレスを生成する。アドレス変換回路91は、ADR変換回路120に対応する。
書込回路92は、第1のアドレスに対してデータの書き込みが要求された場合、第1のアドレスにデータを書き込むとともに、第2のアドレスに誤り検出符号を書き込む。書込回路92は、WDT変換回路130に対応する。
読出回路93は、第1のアドレスに対してデータの読み出しが要求された場合、第1のアドレスからデータを読み出すとともに、第2のアドレスから誤り検出符号を読み出し、データと誤り検出符号とに基づいてエラーを検出する。読出回路93は、RDT変換回路140に対応する。
ここで、アドレス変換回路91は、第1のアドレスの少なくとも1つのビットの値を変更し、誤り検出符号の格納位置がデータの格納位置に対してオフセットされるようにするとともに、それ以外のビットのうちの所定数ビットの値の反転又は並べ替えをしたアドレスを第2のアドレスとして生成する。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
上述した実施の形態1〜12では、データの誤りを検出するための誤り検出符号として、1ビットの誤り訂正と2ビット以上の誤り検出を行うことができるECC(エラー訂正符号)を利用する例について説明したが、これに限られない。誤り検出符号として、CRC(Cyclic Redundancy Check)又はパリティ符号等を利用するようにしてもよい。しかしながら、好ましくは、上述したように、誤り検出のみでなく、誤り訂正も行うことができるECCを利用するとよい。
また、上述の内蔵メモリ14やDDR I/F24のアドレス信号処理回路において、論理アドレスと物理アドレスとの間でアドレスを変換する処理が実行される場合であっても、本実施の形態は適用可能である。
また、上述した各種信号のビット数及び値も、上述した例に限られない。例えば、イネーブル信号及びエラー通知信号は、アサートされた値を“0”とし、ネゲートされた値を“1”としてもよい。ウエイト#信号は、ハイアクティブな信号としてもよい。ライト/リード信号は、書き込みを指定する値を“1”とし、読み出しを指定する値を“0”としてもよい。また、ウエイト#信号は、アドレスの所定の上位数ビットを指定する複数ビットであってもよい。
また、上述した内蔵メモリ14のデータ幅、アドレス幅及びデータ容量も、上述した例に限られない。オフセット値のビット数Mも、上述した2ビットの例に限られない。オフセット値も、上述した値に限られない。