(57)【要約】【課題】複数のライトデータをマージして、メインメモリに記憶されるデータを保護するためのコードを生成する場合に、メモリコントローラ内でライトデータを保護する。【解決手段】ＥＣＣ生成部２１２は、サブメモリ２１１に記憶されるライトデータに基づいてＥＣＣを生成し、生成したＥＣＣをサブメモリ２１３に記憶する。サブメモリコントローラ２１４は、サブメモリ２１１からマージ対象のライトデータを読み出し、サブメモリ２１３に記憶されるＥＣＣを用いて読み出したライトデータにエラーが含まれるか否かを検証する。サブメモリコントローラ２１４は、エラーが含まれない場合、サブメモリ２１１から読み出したライトデータの有効データをマージし、マージしたデータをＥＣＣ生成部２１６に出力する。ＥＣＣ生成部２１６は、マージされたデータに基づいてＥＣＣを生成する。【選択図】図２
2020102087.tif 000002
【特許請求の範囲】
【請求項１】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第１のサブメモリと、
前記第１のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第１のコードを生成する第１の符号生成部と、
前記第１のコードを記憶する第２のサブメモリと、
前記第２のサブメモリに記憶される前記第１のコードに基づいて、前記第１のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第１のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第２のコードを生成する第２の符号生成部と、
前記第２のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第１のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第１のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第１のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第２の符号生成部に前記第２のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第２のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行する、半導体装置。
【請求項２】
前記第１のコードは、更に前記ライトデータにおける所定ビット数誤りを訂正することが可能なコードであり、
前記ライトデータ検証部は、前記ライトデータに誤りが含まれると判断した場合、前記第１のコードを用いて前記ライトデータを訂正する請求項１に記載の半導体装置。
【請求項３】
前記ライトデータ検証部は、前記ライトデータが訂正できない場合、前記ライトデータに誤りが含まれる旨を前記サブメモリコントローラに返却する請求項２に記載の半導体装置。
【請求項４】
前記サブメモリコントローラは、前記ライトデータ検証部で前記ライトデータに誤りが含まれると判断された場合、エラー処理を行う請求項１に記載の半導体装置。
【請求項５】
前記第１のサブメモリは、前記ライトリクエストごとに、前記ライトデータをエントリを分けて記憶し、前記サブメモリコントローラは、前記第１のサブメモリに、前記書込み先のアドレスが同じ複数の前記ライトデータが記憶されている場合、該複数のライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断する請求項１に記載の半導体装置。
【請求項６】
前記ライトデータは複数のブロックを含み、前記ライトリクエストは、前記ライトデータの各ブロックに対して前記有効データであることを示す情報、及び前記有効データではない無効データであることを示す情報を含んでおり、
前記第１の符号生成部は、前記有効データに対応するブロックに対して、前記ブロックごとに前記第１のコードを生成する請求項１に記載の半導体装置。
【請求項７】
前記第１のサブメモリは、前記書込み先のアドレスごとに前記ライトデータをエントリを分けて記憶し、前記サブメモリコントローラは、前記ライトリクエストが受け付けられた場合、前記第１のサブメモリに、前記受け付けられたライトリクエストの書込み先のアドレスのライトデータを記憶するエントリがあるか否かを調べ、エントリがある場合、当該エントリに記憶されるライトデータのうち、前記受け付けられたライトリクエストの前記ライトデータの前記有効データに対応するブロックのデータを、該有効データで上書きする請求項６に記載の半導体装置。
【請求項８】
前記サブメモリコントローラは、所定の条件が成立した場合は、前記メインメモリから、前記ライトデータの書込み先のアドレスのデータを読み出し、該読み出したデータと前記ライトデータの前記有効データとをマージし、前記第２の符号生成部に前記第２のコードを生成させる請求項１に記載の半導体装置。
【請求項９】
タイマを更に有し、
前記サブメモリコントローラは、前記タイマがタイムアウト発生した場合、前記所定の条件が成立したと判断する請求項８に記載の半導体装置。
【請求項１０】
前記マスタが発行するメモリアクセス要求を監視するリクエスト監視部を更に有し、
前記サブメモリコントローラは、前記マスタのメモリアクセス要求の発行状況に応じて前記所定の条件が成立したか否かを判断する請求項８に記載の半導体装置。
【請求項１１】
前記サブメモリコントローラは、前記ライトリクエストが受け付けられたとき、前記書込み先のアドレスが、前記受け付けられたライトリクエストの書込み先のアドレスと同じライトデータが前記第１のサブメモリに記憶されていない場合、前記所定の条件が成立したと判断する請求項８に記載の半導体装置。
【請求項１２】
前記メモリコントローラは、前記コマンド発行部が発行したコマンドのヒストリを記憶するコマンドヒストリ記憶部を更に有し、
前記サブメモリコントローラは、前記コマンドヒストリ記憶部に記憶されるヒストリに基づいて、前記メインメモリに書き込まれるライトデータを決定する請求項１に記載の半導体装置。
【請求項１３】
前記メモリコントローラは、前記ライトデータの前記有効データが前記所定データ幅のデータであるか否かを判断するライトデータチェック部を更に有し、
前記ライトデータチェック部が前記ライトデータの前記有効データが前記所定データ幅のデータであると判断した場合、当該ライトデータは前記第１のサブメモリに格納されず、前記第２の符号生成部は、当該ライトデータに基づいて前記第２のコードを生成し、前記コマンド発行部は、当該ライトデータに前記第２のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行する請求項１に記載の半導体装置。
【請求項１４】
前記ライトデータチェック部は、前記ライトデータの前記有効データが前記所定データ幅のデータであると判断した場合、更に、前記書込み先のアドレスが、当該ライトデータの書込み先のアドレスと同じライトデータが前記第１のサブメモリに記憶されているか否かを判断し、記憶されていると判断した場合、前記サブメモリコントローラに、前記第１のサブメモリに記憶されるライトデータの削除を依頼する請求項１３に記載の半導体装置。
【請求項１５】
前記マスタは第１のマスタであり、
前記メモリアクセス要求を発行する第２のマスタと、
前記第１のマスタが発行する前記メモリアクセス要求と前記第２のマスタが発行する前記メモリアクセス要求とを選択的に前記メモリコントローラへ出力するインターコネクトロジック回路とを更に有する請求項１に記載の半導体装置。
【請求項１６】
前記第１のマスタ及び第２のマスタが発行するメモリアクセス要求を監視するリクエスト監視部を更に有し、
前記サブメモリコントローラは、前記リクエスト監視部で監視されるメモリアクセス要求の発行状況に応じて、前記第１のサブメモリから読み出した複数のライトデータの有効データをマージする動作を実施するか否かを決定し、実施しないと決定した場合、前記メインメモリから、前記ライトデータの書込み先のアドレスのデータを読み出し、該読み出したデータと前記ライトデータの前記有効データとをマージし、前記第２の符号生成部に第２のコードを生成させる請求項１５に記載の半導体装置。
【請求項１７】
ライトリクエストを含むメモリアクセス要求を発行するマスタが発行したライトリクエストに含まれる、有効データを含むライトデータを記憶する第１のサブメモリと、
前記第１のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第１のコードを生成する第１の符号生成部と、
前記第１のコードを記憶する第２のサブメモリと、
前記第２のサブメモリに記憶される前記第１のコードに基づいて、前記第１のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第１のサブメモリに記憶されるライトデータのメインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第２のコードを生成する第２の符号生成部と、
前記第２のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを備え、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第１のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第１のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第１のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第２の符号生成部に前記第２のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第２のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行する、メモリコントローラ。
【請求項１８】
ライトリクエストを含むメモリアクセス要求を発行するマスタが発行したライトリクエストに含まれる、有効データを含むライトデータを第１のサブメモリに記憶し、
前記第１のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第１のコードを生成し、
前記第１のコードを第２のサブメモリに記憶し、
同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、データの誤り検出が可能な第２のコードを生成する単位である所定データ幅のデータが得られるか否かを判断し、
得られると判断した場合、前記第１のサブメモリからマージ対象の複数のライトデータを読み出し、
前記第２のサブメモリに記憶される、前記読み出されたマージ対象の複数のライトデータのそれぞれに対応する前記第１のコードに基づいて、当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証し、
誤りが含まれない場合、前記第１のサブメモリから読み出された複数のライトデータの有効データをマージし、
前記マージされたライトに基づいて前記第２のコードを生成し、
前記マージされたライトデータに前記第２のコードを付加したデータをメインメモリに書き込むためのコマンドを発行する、メモリアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、メモリコントローラ、及びメモリアクセス方法に関し、例えば誤り検出が可能なコードが付加されたデータをメモリに記憶する半導体装置、メモリコントローラ、及びメモリアクセス方法に関する。
【背景技術】
【０００２】
メモリに書き込まれたデータを保護する機構として、データの誤り検出及び訂正が可能な誤り訂正コード（ＥＣＣ：Error Correction Code）を用いた符号誤り訂正が知られている。符号誤り訂正では、例えば８Ｂｙｔｅなどの所定単位のデータに対して、１Ｂｙｔｅなどの所定データ幅のＥＣＣが生成される。ＥＣＣを用いることで、データに所定ビット数のエラーが生じた場合に、そのエラーを訂正することができる。
【０００３】
ここで、メモリへ書き込まれるデータのビットが、ＥＣＣの生成単位より少ない場合、メモリへ書き込まれるデータのみではＥＣＣを生成することができない。ＥＣＣを生成するためには、既にメモリに記憶されているデータを読み出し、読み出したデータとメモリへ書き込まれるデータとをマージするリードモディファイライト（ＲＭＷ：Read Modify Write）を行う必要がある。しかしながら、リードモディファイライトを行うと、メモリにデータを書き込む前に、一度メモリからデータを読み出す必要があるため、アクセス効率が悪化する。
【０００４】
ＥＣＣに関して、特許文献１は、誤り検出訂正装置を有するメモリ装置を開示する。特許文献１に記載のメモリ装置は、データごとにＥＣＣを生成する符号生成部と、ＥＣＣを用いてデータのエラーを検出又は訂正する検出訂正部とを有する。符号生成部は、メモリに書き込まれるデータのビット数が、メモリのデータ幅分のビット数の場合は、そのデータを用いてＥＣＣを生成する。また、符号生成部は、ＥＣＣが有効である旨示すフラグ情報、及びそのフラグ情報のパリティ検査用の検査情報を生成する。
【０００５】
特許文献１に記載のメモリ装置において、メモリに書き込まれるデータのビット数がメモリのデータ幅分のビット数に満たない場合、符号生成部は、ダミーのＥＣＣ符号を生成する。また、符号生成部は、ダミーのＥＣＣが誤り検出訂正に用いられる符号ではない旨を示すフラグ情報、及びそのフラグ情報のパリティ検査用の検査情報を生成する。検出訂正部は、フラグ情報を参照し、ＥＣＣがダミーではない場合は、メモリから読み出したデータに対し、ＥＣＣを用いた誤り検出訂正を行う。検出訂正部は、ＥＣＣがダミーの場合は、誤り検出訂正を行わない。
【０００６】
また、ＥＣＣに関して、特許文献２は、ＥＣＣなどのチェックビット生成の対象となるデータ幅より小さいデータ幅のデータを書き込むパーシャルライトを制御するＥＣＣパーシャルライト制御ユニットを開示する。特許文献２に記載のＥＣＣ制御ユニットにおいて、ライトバッファには、チェックビット生成の対象となるデータ幅より小さいデータ幅の書込みデータが格納される。
【０００７】
ライトバッファがチェックビット生成の対象となるアドレス範囲内のデータを格納しており、かつライトバッファに格納された複数の書込みデータのデータ幅の合計がＥＣＣ生成ユニットでチェックビットを生成できるデータ幅である場合、マルチプレクサは、ライトバッファに格納される複数の書込みデータをマージする。一方、ライトバッファに格納された複数の書込みデータのデータ幅がチェックビット生成の対象となるデータ幅に満たない場合、メモリから読み出されたデータがリードバッファに格納される。この場合、マルチプレクサは、ライトバッファ内の書込みデータとリードバッファ内のデータとをマージする。ＥＣＣ生成ユニットは、マルチプレクサでマージされたデータに対してチェックビットを生成する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−１５４５５１号公報
【特許文献２】特開平１０−２３２７８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１では、メモリに書き込まれるデータのビット数がメモリのデータ幅分のビット数に満たない場合、ダミーのＥＣＣが生成される。この場合、リードモディファイライトは省略できるものの、ダミーのＥＣＣが付加されたデータに対して誤り訂正を行うことはできず、メモリに格納されたデータが保護されない。例えば、メモリに書き込まれるデータが重要なデータである場合、保護を行わないことが許容できない場合がある。その場合、データを保護するためにはリードモディファイライトを行う必要がある。
【００１０】
特許文献２では、書込みデータのビット数がＥＣＣ生成単位のビット数より少ない場合、ライトバッファに書込みデータが書き込まれ、ライトバッファ内に書き込まれた複数の書込みデータをマージしてＥＣＣが生成される。このようにすることで、リードモディファイライトを省略しつつ、データを保護することができる。しかしながら、特許文献２では、ライトバッファ内に書き込まれたデータは保護されない。ライトバッファに一度書き込まれたデータは、マージされるまでに内容が書き換わる可能性があり、その場合、メモリに正しいデータを書き込むことができないという問題があった。
【００１１】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態によれば、半導体装置はメモリコントローラを有する。メモリコントローラは、有効データを含むライトデータを第１のサブメモリに記憶し、そのライトデータに対して生成された、データの誤り検出が可能な第１のコードを第２のサブメモリに記憶する。メモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、複数のライトリクエストのライトデータの有効データをマージすることで、データの誤り検出が可能な第２のコードの生成単位である所定データ幅のデータが得られるか否かを判断する。メモリコントローラは、得られると判断した場合、第１のサブメモリからマージ対象のライトデータを読み出し、第１のコードを用いて読み出したライトデータに誤りが含まれるか否かを検証する。メモリコントローラは、誤りが含まれない場合、第１のサブメモリから読み出したライトデータの有効データをマージし、マージしたデータに対して第２のコードを生成する。メモリコントローラは、マージしたデータに第２の誤りコードを付加したデータをメインメモリに書き込むためのコマンドを発行する。
【発明の効果】
【００１３】
前記一実施の形態によれば、複数のライトデータをマージして、メインメモリに記憶されるデータを保護するための、データの誤り検出が可能なコードを生成する場合に、メモリコントローラ内でライトデータを保護できる。
【図面の簡単な説明】
【００１４】
【図１】実施形態１に係る半導体装置を示すブロック図。
【図２】ＥＣＣコントローラの構成例を示すブロック図。
【図３】マスタがライトリクエストを出力した場合の動作手順を示すフローチャート。
【図４】２つのライトデータとマージされたデータとを示す模式図。
【図５】ライトデータの一例を示す模式図。
【図６】ライトデータの別例を示す模式図。
【図７】サブメモリに記憶されるライトデータを示す模式図。
【図８】サブメモリに記憶されるＥＣＣを示す模式図。
【図９】動作手順を示すフローチャート。
【図１０】実施形態３において用いられるＥＣＣコントローラの構成例を示すブロック図。
【図１１】動作手順を示すフローチャート。
【図１２】実施形態４に係る半導体装置を示すブロック図。
【図１３】インターコネクトロジック回路の構成例を示すブロック図。
【図１４】メモリコントローラの構成例を示すブロック図。
【図１５】コマンドの履歴、及びライトデータのデータ例を示す模式図。
【図１６】実施形態５において用いられるＥＣＣコントローラの構成例を示すブロック図。
【発明を実施するための形態】
【００１５】
実施の形態の説明に先立って、下記の実施の形態を想到するに至った経緯について説明する。車載用途の特定の半導体装置では、ＤＤＲ（Double-Data-Rate）メモリに、データと対となるＥＣＣを書き込むことでデータを保護している。半導体装置では、例えば、８Ｂｙｔｅデータごとに、１ＢｙｔｅのＥＣＣが生成される。このとき、データが８Ｂｙｔｅ揃っていない場合、そのままではＥＣＣが生成できない。上記特定の半導体装置では、ＥＣＣが生成できないデータについては、ＥＣＣを生成せず、データを保護対象外としていた。
【００１６】
しかしながら、機能安全保護の観点からは、ＥＣＣが生成できない８Ｂｙｔｅ未満のデータについても保護を行う必要がある。８Ｂｙｔｅ未満のデータに対し、リードモディファイライトを行えば、ＥＣＣを生成できる。しかしながら、その場合、著しい性能低下が発生する。本発明者らは、リードモディファイライトを可能な限り省略しつつ、データ保護の確実性を向上できる半導体装置について検討した結果、下記の実施の形態を想到するに至った。
【００１７】
以下、図面を参照しつつ、上記課題を解決するための手段を適用した実施形態を詳細に説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Central Processing Unit）、メモリ、又はその他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、又はそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、何れかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１８】
上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスク）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Compact Disk - Read Only Memory）、ＣＤ−Ｒ（recordable）、ＣＤ−Ｒ／Ｗ（ReWritable）、及び半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の優先通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１９】
以下の実施の形態においては便宜上その必要があるときは、複数のセクション又は実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部又は全部の変形例、応用例、詳細説明、又は補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００２０】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合及び原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、又は位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００２１】
［実施形態１］
図１は、実施形態１に係る半導体装置を示す。半導体装置１０は、マスタ１１及びメモリコントローラ２０を含む。マスタ１１は、メインメモリ３０に対してアクセス要求を発行する。マスタ１１は、バスマスタであり、例えばＣＰＵやＧＰＵ（Graphics Processing Unit）などのプロセッサとして構成される。メインメモリ３０は、例えばＤＤＲ−ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などのメモリデバイスとして構成される。メインメモリ３０に対するアクセス要求は、例えば、リード又はライトを示すアクセス種別、及びアクセス先のアドレス情報を示す情報などを含む。以下では、アクセス種別がライトのアクセス要求をライトリクエストと呼び、アクセス種別がリードのアクセス要求をリードリクエストと呼ぶことがある。
【００２２】
メモリコントローラ２０は、バスなどを介してマスタ１１に接続され、マスタ１１から受け付けたアクセス要求に従ってメインメモリ３０にアクセスする。メモリコントローラ２０は、ＥＣＣコントローラ２１、及びコマンド発行部２３を有する。ＥＣＣコントローラ２１は、マスタからライトリクエストを受け付け、ライトリクエストに従ってメインメモリ３０へ書き込まれるデータに、誤り検出及び訂正が可能なコードであるＥＣＣを付加する。
【００２３】
コマンド発行部２３は、ＥＣＣが付加されたデータをメインメモリ３０に書き込むためのコマンド（ライトコマンド）を発行する。コマンド発行部２３は、ライトコマンドに対する応答をマスタ１１に返却する。また、コマンド発行部２３は、マスタ１１からリードリクエストを受け付け、受け付けたリードリクエストに従って、メインメモリ３０からデータを読み出すためのコマンド（リードコマンド）を発行する。コマンド発行部２３は、リードデータを含む、リードコマンドに対する応答をマスタ１１に返却する。コマンド発行部２３は、ライトリクエスト及びリードリクエストに対するスケジューリングも行う。
【００２４】
［メモリコントローラ］
図２は、ＥＣＣコントローラ２１の構成例を示す。ＥＣＣコントローラ２１は、サブメモリ２１１、ＥＣＣ生成部２１２、サブメモリ２１３、サブメモリコントローラ２１４、ＥＣＣ検査部２１５、及びＥＣＣ生成部２１６を含む。ＥＣＣコントローラ２１において、例えばＥＣＣ生成部２１２、ＥＣＣ検査部２１５、及びＥＣＣ生成部２１６は、ハードウェア回路として構成され得る。サブメモリコントローラ２１４は、プロセッサを含んだ回路で構成され得る。
【００２５】
サブメモリ２１１は、ライトリクエストに従ってメインメモリ３０に書き込まれる、有効データを含むライトデータを記憶する。ＥＣＣ生成部２１２は、サブメモリ２１１に記憶されるライトデータに基づいてＥＣＣを生成する。ＥＣＣ生成部２１２で生成されるＥＣＣは、例えば、ライトデータにおける所定ビット数のエラーを訂正するためのコードである。本実施形態において、ＥＣＣ生成部２１２は、ライトデータに無効データが含まれる場合でも、ライトデータ全体に対してＥＣＣを生成するものとする。ＥＣＣ生成部２１２は、生成したＥＣＣをサブメモリ２１３に記憶する。サブメモリ２１１及び２１３には、例えばＳＲＡＭ（Static RAM）などのメモリデバイスが用いられる。なお、サブメモリ２１１及び２１３は、必ずしも物理的に分離された個別のデバイスで構成される必要はない。
【００２６】
ＥＣＣ検査部２１５は、サブメモリコントローラ２１４を通じて、サブメモリ２１１に記憶されるライトデータ、及びサブメモリ２１３に記憶されるＥＣＣを取得する。ＥＣＣ検査部２１５は、ライトデータ検証部であり、サブメモリ２１３に記憶されるＥＣＣを用いて、サブメモリ２１１に記憶されるライトデータにエラーが生じているか否かを検証する。ＥＣＣ検査部２１５は、サブメモリコントローラ２１４に検証の結果をサブメモリコントローラ２１４に出力する。
【００２７】
ＥＣＣ生成部２１６は、サブメモリコントローラ２１４からメインメモリ３０に書き込まれるデータを取得する。ＥＣＣ生成部２１６は、所定データ幅の単位で、メインメモリ３０に書き込まれるデータに基づいてＥＣＣを生成する。ここで、ＥＣＣ生成部２１２で生成されるＥＣＣは、サブメモリ２１１においてライトデータを保護するために用いられる。一方、ＥＣＣ生成部２１６で生成されるＥＣＣは、メインメモリ３０に記憶されるデータを保護するために用いられる。
【００２８】
サブメモリコントローラ２１４は、サブメモリ２１１に記憶されるライトデータのメインメモリ３０での書込み先のアドレス情報を管理する。サブメモリコントローラ２１４は、メインメモリ３０の同じアドレスに対するライトリクエストが複数ある場合、それらライトリクエストのライトデータの有効データをマージすることで、ＥＣＣ生成部２１６で生成されるＥＣＣの生成単位である所定データ幅のデータが得られるか否かを判断する。
【００２９】
例えば、サブメモリ２１１は、ライトリクエストごとに、ライトデータをエントリを分けて記憶している。サブメモリコントローラ２１４は、サブメモリ２１１に、書込み先のアドレスが同じ複数のライトデータが記憶されているか否かを調べる。サブメモリコントローラ２１４は、書込み先のアドレスが同じ複数のライトデータが記憶されている場合、複数のライトデータの有効データをマージすることで、所定データ幅のデータが得られるか否かを判断する。サブメモリコントローラ２１４は、得られると判断した場合、サブメモリ２１１からマージ対象のライトデータを読み出す。サブメモリコントローラ２１４は、読み出したライトデータをＥＣＣ検査部２１５に出力し、ライトデータにエラーが含まれるか否かを検証させる。
【００３０】
ＥＣＣ検査部２１５は、サブメモリコントローラ２１４からライトデータとＥＣＣとを取得し、ライトデータにエラーが含まれるか否かを判断する。ＥＣＣ検査部２１５は、ライトデータにエラーが含まれると判断した場合、ＥＣＣを用いてライトデータを訂正する。ＥＣＣ検査部２１５は、ライトデータを訂正できた場合は、訂正されたライトデータをサブメモリコントローラ２１４に出力する。ＥＣＣ検査部２１５は、ライトデータが訂正できない場合は、ライトデータにエラーが含まれる旨をサブメモリコントローラ２１４に出力する。サブメモリコントローラは、ＥＣＣ検査部２１５でライトデータにエラーが含まれると判断された場合、エラー処理を行う。
【００３１】
サブメモリコントローラ２１４は、ＥＣＣ検査部２１５でライトデータにエラーが含まれないと判断された場合、サブメモリ２１１から読み出されたマージ対象のデータの有効データをマージし、マージしたデータをＥＣＣ生成部２１６に出力する。ＥＣＣ生成部２１６は、マージされたデータに基づいて、ＥＣＣを生成する。ＥＣＣ生成部２１６は、マージされたデータと生成したＥＣＣとをコマンド発行部２３に出力する。コマンド発行部２３は、マージされたデータにＥＣＣを付加したデータをメインメモリ３０へ書き込むためのコマンドを生成し、メインメモリ３０へ出力する。メインメモリ３０は、出力されたコマンドに従って、マージされたデータにＥＣＣを付加したデータを書込み先のアドレスに書き込む。
【００３２】
［動作手順］
図３は、マスタがライトリクエストを出力した場合の動作手順を示す。メモリコントローラ２０は、マスタ１１から、バスを介してライトリクエストを受け付ける。メモリコントローラ２０のサブメモリ２１１は、ライトデータを一時的に記憶する。ＥＣＣ生成部２１２は、ライトデータに基づいてＥＣＣを生成し、生成したＥＣＣをサブメモリ２１３に記憶する。
【００３３】
サブメモリコントローラ２１４は、ライトリクエストが受け付けられると、サブメモリ２１１を参照し、有効データが揃っているメインメモリ３０のアドレスが存在するか否かを判断する（ステップＡ１）。例えば、サブメモリコントローラ２１４は、ステップＡ１では、サブメモリ２１１に記憶された、書込み先のアドレスが同じ複数のライトデータの有効データをマージした場合に、ＥＣＣ生成部２１６においてＥＣＣを生成する単位である所定データ幅のデータが得られるか否かを判断する。サブメモリコントローラ２１４は、複数のライトデータの有効データをマージした場合に所定データ幅のデータが得られると判断した場合、有効データが揃っているメインメモリ３０のアドレスが存在すると判断する。サブメモリコントローラ２１４は、パーシャルライトではない、つまりライトデータのデータ幅が所定データ幅と等しい場合も、有効データが揃っているメインメモリ３０のアドレスが存在すると判断する。
【００３４】
サブメモリコントローラ２１４は、ステップＡ１で有効データが揃っているメインメモリ３０のアドレスが存在すると判断した場合、サブメモリ２１１からマージ対象のライトデータを１つ読み出し、サブメモリ２１３から、読み出したライトデータに対応するＥＣＣを読み出す（ステップＡ２）。ＥＣＣ検査部２１５は、ステップＡ２で読み出されたＥＣＣを用いて、ステップＡ２で読み出されたライトデータを検証する（ステップＡ３）。ＥＣＣ検査部２１５は、ライトデータにエラーがあった場合、ＥＣＣを用いてエラーが訂正可能である場合は、ライトデータを訂正する。ＥＣＣ検査部２１５は、検証結果をサブメモリコントローラ２１４に出力する。
【００３５】
サブメモリコントローラ２１４は、ライトデータにエラーが発生しているか否かを判断する（ステップＡ４）。サブメモリコントローラ２１４は、エラーが発生していると判断した場合、エラー処理を行う（ステップＡ５）。例えば、サブメモリコントローラ２１４は、ステップＡ５では、例えばライトリクエストの発行元のマスタ１１にライトリクエストの再転送を依頼する。ライトリクエストが再転送された場合、正しいデータをメインメモリ３０へ書き込むことができる。あるいは、サブメモリコントローラ２１４は、メインメモリ３０からエラー箇所のデータを読み出して、データを補填してもよいし、エラーが発生しているライトデータを破棄してもよい。これらの場合、エラーが発生したデータをメインメモリ３０に書き込むことを回避できる。
【００３６】
サブメモリコントローラ２１４は、ライトデータにエラーが発生していないと判断した場合、有効データが揃っているアドレスの全てのライトデータを読み出したか否かを判断する（ステップＡ６）。サブメモリコントローラ２１４は、全てのライトデータを読み出していないと判断した場合、ステップＡ２に戻り、サブメモリ２１１及び２１３から次のライトデータ及びＥＣＣを読み出す。サブメモリコントローラ２１４は、ステップＡ２からステップＡ４を、ステップＡ６において全てのライトデータを読み出したと判断するまで繰り返し実施する。
【００３７】
サブメモリコントローラ２１４は、ステップＡ６で全てのライトデータを読み出したと判断すると、読み出したライトデータの有効データをマージする（ステップＡ７）。ＥＣＣ生成部２１６は、ステップＡ７でマージされた有効データに基づいてＥＣＣを生成する（ステップＡ８）。コマンド発行部２３は、ステップＡ７でマージされた有効データに、ステップＡ８で生成されたＥＣＣを付加したデータをメインメモリ３０に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ３０へ出力する（ステップＡ９）。
【００３８】
［動作例］
以下、動作例を説明する。図４は、２つのライトデータとマージされたデータとを模式的に示す。ここでは、マスタ１１が、ライトデータ５００をメインメモリ３０のアドレスＸへ書き込むためのライトリクエストを出力した後に、ライトデータ５１０をメインメモリ３０のアドレスＸに書き込むためのライトリクエストを出力した場合を考える。ライトデータ５００は、有効データ（ＤＡＴＡ＿Ａ）５０１と、無効データ５０２とを含む。一方、ライトデータ５１０は、無効データ５１１と、有効データ（ＤＡＴＡ＿Ｂ）５１２とを含む。
【００３９】
ＥＣＣコントローラ２１は、ライトデータ５００及び５１０をエントリを分けてサブメモリ２１１に記憶する。ＥＣＣ生成部２１２は、ライトデータ５００に基づいてＥＣＣ５０５を生成し、ＥＣＣ５０５をサブメモリ２１３に記憶する。また、ＥＣＣ生成部２１２は、ライトデータ５１０に基づいてＥＣＣ５１５を生成し、ＥＣＣ５１５をサブメモリ２１３に記憶する。
【００４０】
サブメモリコントローラ２１４は、図３のステップＡ１において、アドレスＸについて、ライトデータ５００の有効データ５０１とライトデータ５１０の有効データ５１２とをマージした場合に、ＥＣＣ生成部２１６においてＥＣＣを生成する単位である所定データ幅のデータが得られると判断する。その場合、サブメモリコントローラ２１４は、ステップＡ２において、サブメモリ２１１からライトデータ５００を読み出し、サブメモリ２１３からＥＣＣ５０５を読み出す。サブメモリコントローラ２１４は、ステップＡ３において、ＥＣＣ５０５を用いてライトデータ５００を検証する。
【００４１】
サブメモリコントローラ２１４は、ライトデータ５００にエラーが含まれなかった場合、ステップＡ２に戻り、サブメモリ２１１からライトデータ５１０を読み出し、サブメモリ２１３からＥＣＣ５１５を読み出す。サブメモリコントローラ２１４は、ステップＡ３において、ＥＣＣ５１５を用いてライトデータ５１０を検証する。
【００４２】
サブメモリコントローラ２１４は、ライトデータ５１０にエラーが含まれていないと判断された場合、ステップＡ７において、ライトデータ５００の有効データ５０１とライトデータ５１０の有効データ５１２とをマージしたデータ（ライトデータ）５２０を生成する。このとき、有効データ５０１と有効データ５１２とで重複するアドレスのデータは、後から出力されたライトデータ５１０の有効データ５１２で上書きされる。ＥＣＣ生成部２１６は、ステップＡ８において、ライトデータ５２０に基づいてＥＣＣ５２５を生成する。コマンド発行部２３は、ステップＡ９において、ライトデータ５２０にＥＣＣ５２５を付加したデータをメインメモリ３０に書き込むためのコマンドを生成する。
【００４３】
［まとめ］
本実施形態では、サブメモリ２１１はライトリクエストのライトデータを記憶し、サブメモリ２１３はライトデータのＥＣＣを記憶する。サブメモリコントローラ２１４は、ライトデータの有効データをマージした場合に、メインメモリ３０に記憶されるＥＣＣを生成するために必要なデータが揃うか否かを判断する。サブメモリコントローラ２１４は、ＥＣＣを生成するために必要なデータが揃うと判断した場合、サブメモリ２１１からマージ対象のライトデータを読み出し、サブメモリ２１３からマージ対象のライトデータのＥＣＣを読み出す。ＥＣＣ検査部２１５は、サブメモリ２１３から読み出されたＥＣＣを用いてサブメモリ２１１に記憶されるライトデータを検証する。サブメモリコントローラ２１４は、ライトデータにエラーが含まれない場合、読み出したライトデータの有効データをマージする。ＥＣＣ生成部２１６は、マージされたデータに対してＥＣＣを生成し、コマンド発行部２３は、マージされたデータとＥＣＣとをメインメモリ３０に書き込むためのコマンドを生成する。
【００４４】
本実施形態では、メインメモリ３０に記憶されるＥＣＣを生成することができない、無効データを含むライトデータがマスタ１１から出力された場合、リードモディファイライトを行わずに、無効データを含むライトデータをサブメモリ２１１に記憶する。本実施形態では、複数のライトデータの有効データをマージすることで、ＥＣＣ生成に必要な所定データ幅のデータを得ることができる。このため、リードモディファイライトの動作を省略しつつ、メインメモリ３０上のデータを保護することができる。また、本実施形態では、ＥＣＣ生成部２１２は、サブメモリ２１１に記憶されるライトデータのＥＣＣを生成し、ＥＣＣ検査部２１５は、ＥＣＣ生成部２１２が生成したＥＣＣを用いて、サブメモリ２１１に記憶されるライトデータがエラーを含むか否かを検証する。このようにすることで、メモリコントローラ２０内において、サブメモリ２１１に記憶されるライトデータを保護することできる。
【００４５】
［実施形態２］
次いで、実施形態２を説明する。本実施形態に係る半導体装置の構成は、図１に示される実施形態１に係る半導体装置１０の構成と同様でよい。また、本実施形態におけるＥＣＣコントローラの構成は、図２に示されるＥＣＣコントローラ２１の構成と同様でよい。本実施形態において、ライトデータは複数のブロックを含み、ライトリクエストはライトデータの各ブロックに対して有効データであることを示す情報、及び無効データであることを示す情報を含む。本実施形態では、ＥＣＣ生成部２１２は、ライトデータのうち、有効データに対応するブロックに対して、ブロックごとにＥＣＣを生成する。
【００４６】
本実施形態では、サブメモリ２１１は、メインメモリ３０における書込み先のアドレスごとに、ライトデータをエントリを分けて記憶する。また、サブメモリ２１３は、書込み先のアドレスごとに、ＥＣＣをエントリを分けて記憶する。サブメモリコントローラ２１４は、ライトリクエストが受け付けられた場合、サブメモリ２１１に、受け付けられたライトリクエストの書込み先のアドレスのライトデータを記憶するエントリがあるか否かを調べる。サブメモリコントローラ２１４は、エントリが存在しない場合は、サブメモリ２１１に新たなエントリを作成し、そのエントリにライトデータの有効データの部分を記憶する。この場合、サブメモリ２１３において、新たに生成されたエントリに対応したエントリに、ＥＣＣ生成部２１２が生成した、有効データに対応する各ブロックのＥＣＣが記憶される。
【００４７】
サブメモリコントローラ２１４は、ライトリクエストの書込み先のアドレスのライトデータを記憶するエントリが既に存在する場合は、そのエントリに記憶されるライトデータのうち、新たに受け付けられたライトリクエストのライトデータの有効データに対応するブロックのデータを、有効データで上書きする。このとき、ＥＣＣ生成部２１２は、サブメモリ２１３に記憶されるＥＣＣのうち、新たに受け付けられたライトリクエストのライトデータの有効データに対応するブロックのＥＣＣを、生成したＥＣＣで上書きする。
【００４８】
［データ例］
以下、具体例を用いて説明する。図５は、ライトデータの一例を示す。ライトデータ５００は、例えば計８つのブロックを含む。各ブロックのデータ長は、８ビットであるとする。各ブロックには、データの有効又は無効を示すフラグが設定されている。ライトデータ５００では、ブロック０〜ブロック５の５つのブロックのフラグが「有効」に設定されており、ブロック６及び７のブロックのフラグが「無効」に設定されている。この場合、ライトデータ５００の各ブロックのデータＡ０〜Ａ７のうち、データＡ０〜Ａ６が有効データであるＤＡＴＡ＿Ａを構成し、データＡ６及びＡ７は無効データを構成する。
【００４９】
ＥＣＣ生成部２１２は、上記ライトデータ５００に基づいて、ＥＣＣ５０６を生成する。ＥＣＣ５０６は、ライトデータ５００と同様に、計８つのブロックを含む。ＥＣＣ２１２は、例えば８ビットの各ブロックのデータに対して５ビットのＥＣＣを生成する。ＥＣＣ生成部２１２は、データＡ１〜Ａ５に基づいて、ブロックごとに、５ビットのＥＣＣ＿Ａ０〜ＥＣＣ＿Ａ５を生成する。ＥＣＣ生成部２１２は、無効データであるデータＡ６及びＡ７については、ＥＣＣを生成しない。この場合、ＥＣＣ＿Ａ０〜ＥＣＣ＿Ａ５を用いることで、データＡ０〜Ａ５がエラーを含むか否かの検証、及びエラーの訂正が可能である。
【００５０】
図６は、ライトデータの別例を示す。ライトデータ５１０は、ライトデータ５００と同様に、計８つのブロックに分割されている。ライトデータ５１０では、ブロック０〜ブロック４の５つのブロックのフラグが「無効」に設定されており、ブロック５〜７のブロックのフラグが「有効」に設定されている。この場合、ライトデータ５１０の各ブロックのデータＢ０〜Ｂ７のうち、データＢ５〜Ｂ７が有効データであるＤＡＴＡ＿Ｂを構成し、データＢ０〜Ｂ４は無効データを構成する。
【００５１】
ＥＣＣ生成部２１２は、上記ライトデータ５１０に基づいて、ＥＣＣ５０７を生成する。ＥＣＣ５０７は、ライトデータ５１０と同様に、計８つのブロックを含む。ＥＣＣ生成部２１２は、データＢ５〜Ｂ７に基づいて、ブロックごとに、ＥＣＣ＿Ｂ５〜ＥＣＣ＿Ｂ７を生成する。ＥＣＣ生成部２１２は、無効データであるデータＢ０〜Ｂ４については、ＥＣＣを生成しない。この場合、ＥＣＣ＿Ｂ５〜ＥＣＣ＿Ｂ７を用いることで、データＢ５〜Ｂ７がエラーを含むか否かの検証、及びエラーの訂正が可能である。
【００５２】
図７は、サブメモリ２１１に記憶されるライトデータを示す。サブメモリ２１１は、新規アドレスを書込み先とする、ライトデータ５００のライトリクエストが受け付けられた場合、サブメモリ２１１にライトデータ５００を記憶する。なお、ＥＣＣ生成部２１６は、ライトデータの８つのブロックのフラグが全て「有効」である場合にメインメモリ３０に記憶されるＥＣＣが生成可能であるとする。
【００５３】
次いで、書込み先アドレスが、ライトデータ５００のライトリクエストの書込み先アドレスと同じアドレスであるライトデータ５１０のライトリクエストが受け付けられたとする。その場合、サブメモリ２１１に記憶されるライトデータ５００のデータＡ５〜Ａ７が、ライトデータ５１０においてフラグが「有効」のブロックのデータＢ５〜Ｂ７で上書きされる。上書き後のライトデータ５２０は、データＡ０〜Ａ４、及びデータＢ５〜Ｂ７で構成される。このように、本実施形態では、ライトデータ５００の有効データとライトデータ５１０の有効データとが、サブメモリ２１１上でマージされる。
【００５４】
図８は、サブメモリ２１３に記憶されるＥＣＣを示す。ＥＣＣ生成部２１２は、ライトデータ５００に対してＥＣＣ５０６を生成し、サブメモリ２１３に記憶する。ＥＣＣ５０６は、データＡ０〜Ａ５の各ブロックに対して生成された、ＥＣＣ＿Ａ０〜Ａ５を含む。また、ＥＣＣ生成部２１２は、ライトデータ５１０に対してＥＣＣ５０７を生成する。ＥＣＣ５０７は、データＢ５〜Ｂ７の各ブロックに対して生成された、ＥＣＣ＿Ｂ５〜Ｂ７を含む。サブメモリ２１３に記憶されたＥＣＣ５０６を、ＥＣＣ５０７で上書きすることで、ＥＣＣ＿Ａ０〜ＥＣＣ＿Ａ４及びＥＣＣ＿Ｂ５〜ＥＣＣ＿Ｂ７で構成されるＥＣＣ５０８が得られる。このＥＣＣ５０８を用いることで、サブメモリ２１１に記憶されたライトデータ５２０（図７を参照）の各ブロックについて、エラーを含むか否かの検証、及びエラー訂正が可能である。
【００５５】
［動作手順］
図９は、動作手順を示す。メモリコントローラ２０は、マスタ１１から、バスを介してライトリクエストを受け付ける。メモリコントローラ２０のサブメモリ２１１に、ライトリクエストの書込み先のアドレスに対応するライトデータを記憶するエントリが存在しない場合、ライトデータがサブメモリ２１１に一時的に記憶される。サブメモリ２１１に、書込み先のアドレスに対応するライトデータを記憶するエントリが既に存在する場合は、サブメモリ２１１に記憶されるデータのうち、ライトデータの有効データに対応するブロックのデータが、ライトデータの有効データで上書きされる。ＥＣＣ生成部２１２は、ライトデータの有効データ部分に基づいてＥＣＣを生成し、生成したＥＣＣをサブメモリ２１３に記憶する。
【００５６】
サブメモリコントローラ２１４は、ライトリクエストが受け付けられると、サブメモリ２１１を参照し、有効データが揃っているメインメモリ３０のアドレスが存在するか否かを判断する（ステップＢ１）。例えば、サブメモリコントローラ２１４は、ステップＢ１では、サブメモリ２１１の各ブロックのフラグが全て「有効」であるエントリが存在するか否かを調べる。サブメモリコントローラ２１４は、全てのブロックのフラグが「有効」であるエントリが存在する場合、有効データが揃っているメインメモリ３０のアドレスが存在すると判断する。
【００５７】
サブメモリコントローラ２１４は、ステップＢ１で有効データが揃っているメインメモリ３０のアドレスが存在すると判断した場合、サブメモリ２１１からライトデータを読み出し、サブメモリ２１３から、読み出したライトデータに対応するＥＣＣを読み出す（ステップＢ２）。本実施形態では、前述のように、サブメモリ２１１上で無効データを含む複数のライトデータがマージされるため、サブメモリ２１１から読み出した後に複数のライトデータをマージする必要はない。
【００５８】
ＥＣＣ検査部２１５は、ステップＢ２で読み出されたＥＣＣを用いて、ステップＢ２で読み出されたライトデータの各ブロックのデータを検証する（ステップＢ３）。ＥＣＣ検査部２１５は、例えば図７に示されるライトデータのデータＡ０を、図８に示されるＥＣＣ５０８のＥＣＣ＿Ａ０を用いて検証する。また、ＥＣＣ検査部２１５は、ライトデータのデータＡ１〜Ａ４及びデータＢ４〜Ｂ７のそれぞれを、ＥＣＣ５０８のＥＣＣ＿Ａ０〜ＥＣＣ＿Ａ４及びＥＣＣ＿Ｂ４〜ＥＣＣ＿Ｂ７を用いて検証する。ＥＣＣ検査部２１５は、ライトデータの何れかのブロックにエラーがあった場合で、かつ対応するブロックのＥＣＣを用いてエラーが訂正可能である場合は、そのブロックのデータを訂正する。ＥＣＣ検査部２１５は、検証結果をサブメモリコントローラ２１４に出力する。
【００５９】
サブメモリコントローラ２１４は、ライトデータにエラーが発生しているか否かを判断する（ステップＢ４）。サブメモリコントローラ２１４は、エラーが発生していると判断した場合、エラー処理を行う（ステップＢ５）。ステップＢ５は、図３のステップＡ５と同様でよい。
【００６０】
サブメモリコントローラ２１４は、ステップＢ４でエラーが発生していないと判断すると、読み出したライトデータをＥＣＣ生成部２１６に出力する。ＥＣＣ生成部２１６は、ライトデータに基づいてＥＣＣを生成する（ステップＢ６）。コマンド発行部２３は、ライトデータに、ステップＢ６で生成されたＥＣＣを付加したデータをメインメモリ３０に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ３０へ出力する（ステップＢ７）。
【００６１】
［まとめ］
本実施形態では、ライトデータは複数のブロックから成り、複数のライトデータの有効データに対応するブロックは、サブメモリ２１１上でマージされる。また、ＥＣＣ生成部２１２は、ライトデータの有効データに対応した各ブロックのＥＣＣを生成し、サブメモリ２１３に記憶する。ＥＣＣ生成部２１２が生成するＥＣＣの生成単位を、ライトデータのブロックに対応させることで、サブメモリ２１３に記憶されるＥＣＣを新たに生成したＥＣＣで上書きした場合でも、サブメモリ２１１上のライトデータの各ブロックのデータを、サブメモリ２１３に記憶されるＥＣＣを用いて検証することができる。実施形態１では、同じ書込み先のアドレスが同じ複数のライトデータが、エントリを分けてサブメモリ２１１に記憶された。本実施形態では、１つの書込み先のアドレスに対して、ライトデータを記憶するエントリは１つでよく、実施形態１に比べて、サブメモリ２１１に要求されるエントリ数（メモリ容量）を低減できる。
【００６２】
［実施形態３］
続いて、実施形態３を説明する。実施形態１及び実施形態２では、サブメモリ２１１において、メインメモリ３０に記憶されるＥＣＣを生成するために必要なデータが揃った場合に、ＥＣＣ生成部２１６がＥＣＣを生成した。この場合、マスタ１１（図１を参照）が書込み先のアドレスが同じ複数のライトリクエストを出力しない場合、メインメモリ３０に記憶されるＥＣＣを生成するために必要なデータが揃わず、ライトデータがメインメモリ３０に記憶されるまでに要する時間が長くなる。本実施形態では、メモリコントローラ２０は、所定の条件が成立した場合は、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ３０に記憶されるＥＣＣを生成する。その他の点は、実施形態１又は実施形態２と同様でよい。
【００６３】
図１０は、本実施形態において用いられるＥＣＣコントローラの構成例を示す。本実施形態において用いられるＥＣＣコントローラ２１ａは、図２に示されるＥＣＣコントローラ２１の構成に加えて、ＲＭＷタイマ２１７を有する。本実施形態において、サブメモリコントローラ２１４は、所定の条件が成立した場合は、コマンド発行部２３（図２を参照）を通じてメインメモリ３０から、ライトデータの書込み先のアドレスのデータを読み出す。サブメモリコントローラ２１４は、メインメモリ３０から読み出したデータとサブメモリ２１１に記憶されるライトデータの有効データとをマージし、ＥＣＣ生成部２１６に出力する。
【００６４】
ＲＭＷタイマ２１７は、ライトリクエストが受け付けられると時間の測定を開始し、所定時間の経過後にタイムアウトを発生する。ＲＭＷタイマ２１７は、例えば書込み先のアドレスごとに、最初にライトリクエストを受け付けた時刻から所定時間の経過後にタイムアウトを発生する。あるいは、ＲＭＷタイマ２１７は、書込み先のアドレスごとに、最後にライトリクエストを受け付けた時刻から所定時間の経過後にタイムアウトを発生してもよい。サブメモリコントローラ２１４は、ＲＭＷタイマ２１７がタイムアウトを発生した場合、所定の条件が成立したと判断する。
【００６５】
［動作手順］
図１１は、動作手順を示す。メモリコントローラ２０は、マスタ１１から、バスを介してライトリクエストを受け付ける。メモリコントローラ２０のサブメモリ２１１は、ライトデータを一時的に記憶する。ＥＣＣ生成部２１２は、ライトデータに基づいてＥＣＣを生成し、生成したＥＣＣをサブメモリ２１３に記憶する。
【００６６】
サブメモリコントローラ２１４は、ライトリクエストが受け付けられると、サブメモリ２１１を参照し、有効データが揃っているメインメモリ３０のアドレスが存在するか否かを判断する（ステップＣ１）。例えば、サブメモリコントローラ２１４は、ステップＣ１では、サブメモリ２１１に記憶された、同じ書込み先のアドレスの複数のライトデータの有効データをマージした場合に、ＥＣＣ生成部２１６においてＥＣＣを生成する単位である所定データ幅のデータが得られるか否かを判断する。サブメモリコントローラ２１４は、複数のライトデータの有効データをマージした場合に所定データ幅のデータが得られると判断した場合、有効データが揃っているメインメモリ３０のアドレスが存在すると判断する。
【００６７】
サブメモリコントローラ２１４は、ステップＣ１で有効データが揃っているメインメモリ３０のアドレスが存在すると判断した場合、サブメモリ２１１からマージ対象のライトデータを読み出し、サブメモリ２１３から、ライトデータに対応するＥＣＣを読み出す（ステップＣ２）。ＥＣＣ検査部２１５は、ステップＣ２で読み出されたＥＣＣを用いて、ステップＣ２で読み出されたライトデータを検証する（ステップＣ３）。ＥＣＣ検査部２１５は、ライトデータにエラーがあった場合で、かつＥＣＣを用いてエラーが訂正可能である場合は、ライトデータを訂正する。ＥＣＣ検査部２１５は、検証結果をサブメモリコントローラ２１４に出力する。
【００６８】
サブメモリコントローラ２１４は、ライトデータにエラーが発生していない場合、読み出したライトデータの有効データをマージし、ＥＣＣ生成部２１６に出力する。サブメモリコントローラ２１４は、ライトデータにエラーが発生している場合、エラー処理を行ってもよい。ＥＣＣ生成部２１６は、マージされた有効データに基づいてＥＣＣを生成する（ステップＣ４）。コマンド発行部２３は、マージされた有効データに、ステップＣ４で生成されたＥＣＣを付加したデータをメインメモリ３０に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ３０へ出力する（ステップＣ５）。ステップＣ１〜Ｃ５の動作は、図３のステップＡ１〜Ａ４、及びＡ６〜Ａ９の動作と同様でよい。あるいは、ステップＣ１〜Ｃ５の動作は、図９のステップＢ１〜Ｂ４、Ｂ６、及びＢ７の動作と同様でよい。
【００６９】
サブメモリコントローラ２１４は、ステップＣ１で有効データが揃っているアドレスが存在しないと判断した場合、ＲＭＷタイマ２１７がタイムアウトしたか否かを判断する（ステップＣ６）。ステップＣ６でＲＭＷタイマ２１７がタイムアウトしていないと判断された場合、処理はステップＣ１に戻る。サブメモリコントローラ２１４は、ステップＣ６でＲＭＷタイマ２１７がタイムアウトしたと判断した場合、メインメモリ３０から、データを読み出す（ステップＣ７）。サブメモリコントローラ２１４は、例えばアドレスＸを書込み先アドレスとする、無効データを含むライトデータがサブメモリ２１１に記憶されている場合、ステップＣ７では、コマンド発行部２３を通じて、メインメモリ３０からアドレスＸのデータを取得する。
【００７０】
サブメモリコントローラ２１４は、ステップＣ７と並行して、サブメモリ２１１からライトデータを読み出し、サブメモリ２１３からＥＣＣを読み出す（ステップＣ８）。ＥＣＣ検査部２１５は、ステップＣ８で読み出されたＥＣＣを用いて、ステップＣ８で読み出されたライトデータを検証する（ステップＣ９）。ＥＣＣ検査部２１５は、ライトデータにエラーがあった場合で、かつＥＣＣを用いてエラーが訂正可能である場合は、ライトデータを訂正する。ＥＣＣ検査部２１５は、検証結果をサブメモリコントローラ２１４に出力する。
【００７１】
サブメモリコントローラ２１４は、ライトデータにエラーが発生していない場合、読み出したライトデータの有効データと、ステップＣ７でメインメモリ３０から読み出されたデータとをマージし、ＥＣＣ生成部２１６に出力する。サブメモリコントローラ２１４は、ライトデータにエラーが発生している場合、エラー処理を行ってもよい。ＥＣＣ生成部２１６は、ステップＣ４において、マージされたデータに基づいてＥＣＣを生成する。また、コマンド発行部２３は、ステップＣ５において、マージされたデータに、ＥＣＣ生成部２１６で生成されたＥＣＣを付加したデータをメインメモリ３０に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ３０へ出力する。
【００７２】
［まとめ］
本実施形態では、サブメモリコントローラ２１４は、ＲＭＷタイマ２１７がタイムアウトすると、通常のリードモディファイライトと同様な動作を行い、メインメモリ３０から読み出したデータと無効データを含むライトデータとをマージする。本実施形態では、ライトデータがサブメモリ２１１に記憶されてから所定時間の経過後に、ライトデータを含むデータをメインメモリ３０に書き込むことができ、ライトデータがサブメモリ２１１に滞留し続けることを抑制できる。このため、本実施形態では、サブメモリ２１１に要求されるメモリ容量を削減することができる。また、本実施形態では、所定時間の経過後にライトデータがメインメモリ３０に書き込まれることが期待できるため、性能の定量見積もりが可能である。
【００７３】
［実施形態４］
引き続き、実施形態４を説明する。図１２は、本実施形態に係る半導体装置を示す。本実施形態に係る半導体装置１０ｂは、マスタ１１、マスタ１２、メモリコントローラ２０ｂ、メインメモリ３０、及びインターコネクトロジック回路４０を有する。マスタ１１及び１２は、バスマスタであり、メインメモリ３０に対するアクセス要求を出力する。インターコネクトロジック回路４０は、対応するバスを介して、マスタ１１及び１２が発行したアクセス要求を受け取る。インターコネクトロジック回路４０は、マスタ１１及び１２が出力するアクセス要求を選択的にメモリコントローラ２０ｂへ出力する。
【００７４】
インターコネクトロジック回路４０は、例えばバスアービタであり、複数のマスタから入力されるアクセス要求を調停する。インターコネクトロジック回路４０は、例えばマスタ１１及び１２からアクセス要求を受け取った場合は、各マスタに設定された優先度に従って、優先度が高いマスタが発行したアクセス要求をメモリコントローラ２０ｂに出力してもよい。インターコネクトロジック回路４０は、メモリコントローラ２０ｂに出力したアクセス要求に対するレスポンスが得られると、次に優先度が高いマスタのアクセス要求を選択してメモリコントローラ２０ｂに出力する。
【００７５】
なお、図１２では半導体装置１０ｂがマスタを２つ有する例が示されているが、半導体装置１０ｂはメモリコントローラ２０ｂに対してメインメモリ３０へのアクセス要求を発行するマスタを少なくとも１つ有していればよく、マスタの数は特に限定されない。本実施形態において、半導体装置１０ｂは３以上のマスタを有していてもよいし、半導体装置１０ｂはマスタを１つ有していてもよい。マスタの数が１つである場合、インターコネクトロジック回路４０は省略できる。
【００７６】
［インターコネクトロジック回路］
図１３は、インターコネクトロジック回路４０の構成例を示す。インターコネクトロジック回路４０は、アービタ４１、及びリクエストモニタ（リクエスト監視部）４２を有する。アービタ４１は、マスタ１１及び１２が出力するアクセス要求を選択的にメモリコントローラ２０ｂへ出力する。リクエストモニタ４２は、マスタ１１及び１２が出力するアクセス要求を監視する。リクエストモニタ４２は、マスタ１１及び１２のメモリアクセス要求の発行状況を示すインターコネクトステータスをメモリコントローラに出力する。なお、リクエストモニタ４２は、必ずしもインターコネクトロジック回路４０に含まれている必要はなく、インターコネクトロジック回路４０の外部に配置されていてもよい。
【００７７】
［メモリコントローラ］
図１４は、メモリコントローラ２０ｂの構成例を示す。メモリコントローラ２０ｂは、ＥＣＣコントローラ２１ｂ、及びコマンド発行部２３ｂを有する。ＥＣＣコントローラ２１ｂは、図２に示されるＥＣＣコントローラ２１の構成に加えて、バス状況コントローラ２１８を有する。ＥＣＣコントローラ２１ｂは、更にＲＭＷタイマ２１７（図１０を参照）を有していてもよい。本実施形態において、サブメモリコントローラ２１４は、実施形態３と同様に、所定の条件が成立した場合は、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ３０に記憶されるＥＣＣを生成する。
【００７８】
バス状況コントローラ２１８は、リクエストモニタ４２からインターコネクトステータスを取得する。サブメモリコントローラ２１４は、バス状況コントローラ２１８を通じて、マスタ１１及び１２のメモリアクセス要求の発行状況を取得し、メモリアクセス要求の発行状況に応じて、リードモディファイライトを実施する所定の条件が成立したか否かを判断する。
【００７９】
サブメモリコントローラ２１４は、例えば、インターコネクトロジック回路４０がマスタ１１及び１２の少なくとも一方が出力したメモリアクセス要求を受け付けている場合は、書込み先のアドレスが同じライトリクエストを待つ。サブメモリコントローラ２１４は、例えば、インターコネクトロジック回路４０がマスタ１１及び１２の少なくとも一方が出力したメモリアクセス要求を受け付けていない場合は、所定の条件が成立したと判断する。その場合、サブメモリコントローラ２１４は、図１１のステップＣ７〜Ｃ１０と同様な手順で、メインメモリ３０から読み出したデータと、サブメモリ２１１から読み出したライトデータとをマージする。
【００８０】
サブメモリコントローラ２１４は、新たなライトリクエストが受け付けられた場合、書込み先のアドレスが、新たに受け付けられたライトリクエストの書込み先のアドレスと同じアドレスのライトデータが、サブメモリ２１１に記憶されているか否かを判断してもよい。サブメモリコントローラ２１４は、同じ書込み先のアドレスのライトデータが、サブメモリ２１１に記憶されていない場合は、所定の条件が成立したと判断してもよい。その場合、サブメモリコントローラ２１４は、図１１のステップＣ７と同様な手順でメインメモリ３０からデータを読み出し、読み出したデータとライトデータの有効データとをマージしてもよい。
【００８１】
コマンド発行部２３ｂは、コマンドヒストリ記憶部２３１を有する。コマンドヒストリ記憶部２３１は、コマンド発行部２３が発行したメモリアクセスのコマンドの履歴を記憶する。コマンドヒストリ記憶部２３１は、例えば直前の３回分のコマンドの履歴を記憶する。コマンドヒストリ記憶部２３１を参照することで、メインメモリ３０のどのバンクへのアクセスがあったかを知ることができる。
【００８２】
例えばＤＤＲなどのメモリデバイスでは、直前のアクセスと次のアクセスのバンクアドレスなどに依存して、アクセス間のペナルティサイクルが決まる。従って、次にアクセスするバンクと、直前にアクセスしたバンクとの組み合わせに依存して、アクセス時間が変化し得る。サブメモリコントローラ２１４は、コマンドヒストリ記憶部２３１に記憶される履歴に基づいて、アクセス時間を見積もり、次にメインメモリ３０に書き込むライトデータを決定してもよい。
【００８３】
例えば、サブメモリコントローラ２１４は、リードモディファイライトが必要なライトデータを含む、サブメモリ２１１に記憶されるライトデータのそれぞれについて、メインメモリ３０にライトデータを書き込む場合のアクセス時間を計算する。サブメモリコントローラ２１４は、ペナルティが最も小さいライトデータを選択し、必要に応じてリードモディファイライトを行い、ＥＣＣ生成部２１６にＥＣＣを生成させ、コマンド発行部２３にライトデータにＥＣＣが付加されたデータをメインメモリ３０に書き込むためのコマンドを発行させる。このようにすることで、状況に応じた効率のよいメモリアクセスを実現できる。
【００８４】
図１５は、コマンドヒストリ記憶部２３１が記憶する履歴、及びサブメモリ２１１が記憶するライトデータのデータ例を示す。コマンドヒストリ記憶部２３１は、例えば、１つ前のメモリアクセスはバンク０へのアクセスであり、２つ前のメモリアクセスはバンク０へのアクセスであり、３つ前のメモリアクセスはバンク３へのアクセスである旨の履歴を記憶している。また、サブメモリ２１１は、エントリ０からエントリ４に、計５つのライトデータを記憶している。エントリ０及び１に記憶されるライトデータは無効データを含んでいないか、或いは他のエントリのライトデータとマージすることでメインメモリ３０に記憶されるＥＣＣの生成単位である所定データ幅のデータとなるライトデータである。一方、エントリ２〜４に記憶されるライトデータは無効データを含んでおり、メインメモリ３０にライトデータを書き込むためには、リードモディファイライトの動作が必要となるライトデータである。
【００８５】
サブメモリ２１１のエントリ０及び１に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク０であり、エントリ２に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク３であったとする。また、エントリ３に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク２であり、エントリ４に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク１であったとする。
【００８６】
サブメモリコントローラ２１４は、各エントリに記憶されるライトデータのアクセス先のバンクと、コマンドヒストリ記憶部２３１に記憶される過去のメモリアクセスのアクセス先のバンクとに基づいて、各エントリに記憶されるライトデータをメインメモリ３０に書き込む場合のアクセス時間を計算する。サブメモリコントローラ２１４は、例えば、エントリ０及び１に記憶されるライトデータを次にメインメモリ３０に書き込む場合は、書込みに２０サイクル必要であると計算する。サブメモリコントローラ２１４は、エントリ２に記憶されるライトデータを次にメインメモリ３０に書き込む場合は、書込みに２サイクル必要であると計算し、エントリ３に記憶されるライトデータを次にメインメモリ３０に書き込む場合は、書込みに１０サイクル必要であると計算する。また、サブメモリコントローラ２１４は、エントリ４に記憶されるライトデータを次にメインメモリ３０に書き込む場合は、書込みに１５サイクル必要であると計算する。
【００８７】
サブメモリコントローラ２１４は、上記で計算したアクセス時間に基づいて、どのライトデータを次にメインメモリ３０に書き込ませるかを決定する。上記の場合、サブメモリ２１１のエントリ２に記憶されるライトデータをメインメモリ３０に書き込む場合に必要なサイクル数が最も少ない。この場合、サブメモリコントローラ２１４は、メインメモリ３０のバンク３からライトデータの書込み先のアドレスのデータを取得し、取得したライトデータにエントリ３に記憶されるライトデータをマージする。サブメモリコントローラ２１４は、ＥＣＣ生成部２１６にマージされたデータを出力し、ＥＣＣ生成部２１６は、マージされたデータのＥＣＣを生成する。コマンド発行部２３は、マージされたデータにＥＣＣを付加したデータをメインメモリ３０に書き込むためのコマンドを発行し、メインメモリ３０にエントリ３に記憶されたライトデータを書き込ませる。
【００８８】
「まとめ」
本実施形態では、サブメモリコントローラ２１４は、マスタのアクセス要求の発行状況に応じて、リードモディファイライトを実施する条件が成立したか否かを判断する。例えば、マスタがアクセス要求を発行していない場合、インターコネクトロジック回路４０側からメモリコントローラ２０に次のライトリクエストが出力されない予想される。その場合、サブメモリコントローラ２１４は、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ３０に記憶されるＥＣＣを生成するために必要なデータを取得する。マスタがアクセス要求を出力していない場合、リードモディファイライトを行った方が、ライトデータをマージする場合より短時間で処理を完了できる場合がある。そのような場合に、リードモディファイライトを行うことで、長時間にわたってライトデータがサブメモリ２１１に滞留することを抑制できる。
【００８９】
また、本実施形態では、サブメモリコントローラ２１４は、書込み先のアドレスが、新たに受け付けられたライトリクエストの書込み先のアドレスと同じアドレスのライトデータが、サブメモリ２１１に記憶されているか否かに応じて、リードモディファイライトを実施する条件が成立したか否かを判断する。例えば、サブメモリコントローラ２１４は、サブメモリ２１１にライトデータが記憶されていない場合に、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ３０に記憶されるＥＣＣを生成するために必要なデータを取得する。このようにすることで、効率のよいメモリアクセスが実現できる。
【００９０】
本実施形態では、サブメモリコントローラ２１４は、コマンドヒストリ記憶部２３１に記憶された履歴に基づいて、次にメインメモリ３０に書き込むライトデータを決定する。例えば、サブメモリコントローラ２１４は、サブメモリ２１１に記憶されるライトデータのうち、最もデータの書込み完了までに要する時間が短いライトデータを、次にメインメモリ３０に書き込むライトデータとして決定する。このようにすることで、コマンドの発行状況に応じた効率のよいメモリアクセスを実現できる。
【００９１】
［実施形態５］
引き続いて、実施形態５を説明する。図１６は、本実施形態において用いられるＥＣＣコントローラの構成例を示す。本実施形態において用いられるＥＣＣコントローラ２１ｃは、図２に示されるＥＣＣコントローラ２１の構成に加えて、ライトデータチェック部２１９、及びアービタ２２０を有する。本実施形態において、ＥＣＣコントローラ２１ｃは、更にＲＭＷタイマ２１７（図１０を参照）を有していてもよい。また、ＥＣＣコントローラ２１ｂは、更にバス状況コントローラ２１８（図１４を参照）を有していてもよい。
【００９２】
ライトデータチェック部２１９は、新たにライトリクエストが受け付けられると、ライトリクエストのライトデータの有効データが、メインメモリ３０に記憶されるＥＣＣの生成単位である所定データ幅のデータであるか否かを判断する。ライトデータチェック部２１９は、ライトデータの有効データのデータ幅が所定データ幅に満たないと判断した場合、サブメモリ２１１にライトデータを記憶する。サブメモリ２１１にライトデータが格納された後の動作は、実施形態１〜実施形態４の何れかと同様でよい。
【００９３】
本実施形態では、ライトデータチェック部２１９は、ライトデータの有効データが所定データ幅のデータであると判断した場合、そのライトデータをサブメモリ２１１に格納せずに、アービタ２２０に出力する。アービタ２２０は、サブメモリコントローラ２１４から出力されるライトデータと、ライトデータチェック部２１９から出力されるライトデータとを選択的に出力する。ＥＣＣ生成部２１６は、アービタ２２０を介して、ライトデータチェック部２１９から出力されるライトデータを受け取り、そのライトデータに基づいてＥＣＣを生成する。コマンド発行部２３（図２を参照）は、ライトデータにＥＣＣを付加したデータをメインメモリ３０に書き込むためのコマンドを発行する。
【００９４】
ライトデータチェック部２１９は、ライトデータの有効データが所定データ幅のデータであると判断した場合、サブメモリ２１１を参照し、書込み先のアドレスが、新たに受け付けられたライトリクエストの書込み先のアドレスと同じライトデータがサブメモリ２１１に記憶されているか否かを判断する。ライトデータチェック部２１９は、同じ書込み先のアドレスのライトデータが記憶されていると判断した場合、サブメモリコントローラ２１４に、サブメモリ２１１に記憶される、同じ書込み先のアドレスのライトデータの削除を依頼する。サブメモリコントローラ２１４は、サブメモリ２１１から、同じ書込み先のアドレスのライトデータを削除する。このようにすることで、サブメモリ２１１から不必要なライトデータを削除することができ、サブメモリ２１１のエントリを開放することができる。
【００９５】
［まとめ］
本実施形態では、ライトデータチェック部２１９は、ライトデータが、ＥＣＣ生成部２１６においてＥＣＣを生成できるデータであるか否かを判断する。本実施形態では、ライトデータが無効データを含まず、従って他のライトデータとマージしなくてもメインメモリ３０に書き込まれるＥＣＣを作成できる場合、ライトデータはサブメモリ２１１に格納されずに、ＥＣＣ生成部２１６に出力される。このようにすることで、ＥＣＣ生成部２１６は、サブメモリ２１１を介さずにライトデータを受け取ることができ、ライトリクエストが受け付けられてから、ＥＣＣが生成され、ライトコマンドが発行されるまでに要する時間を短縮できる。
【００９６】
なお、上記各実施形態では、メインメモリ３０及びサブメモリ２１１に記憶されるデータを、ＥＣＣを用いて保護する例を説明したが、本開示はこれには限定されない。メインメモリ３０及びサブメモリ２１１に記憶されるデータを、誤り検出及び訂正が可能なＥＣＣに代えて、誤り検出が可能なＥＤＣ（Error Detection Code）を用いて保護してもよい。あるいは、メインメモリ３０に記憶されるデータについてはＥＣＣを用いて保護し、サブメモリ２１１に記憶されるデータについてはＥＤＣを用いて保護してもよい。ＥＤＣを用いる場合は、誤り訂正はできないものの、データにエラーが含まれるか否かを判断することはできる。
【００９７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００９８】
１０：半導体装置
１１、１２：マスタ
２０：メモリコントローラ
２１：ＥＣＣコントローラ
２３：コマンド発行部
３０：メインメモリ
４０：インターコネクトロジック回路
４１：アービタ
４２：リクエストモニタ
２１１：サブメモリ
２１２：ＥＣＣ生成部
２１３：サブメモリ
２１４：サブメモリコントローラ
２１５：ＥＣＣ検査部
２１６：ＥＣＣ生成部
２１７：ＲＭＷタイマ
２１８：バス状況コントローラ
２１９：ライトデータチェック部
２２０：アービタ
２３１：コマンドヒストリ記憶部
５００、５１０、５２０：ライトデータ
５０１、５１２：有効データ
５０２、５１１：無効データ
【図１】
2020102087.tif 000003
【図２】
2020102087.tif 000004
【図３】
2020102087.tif 000005
【図４】
2020102087.tif 000006
【図５】
2020102087.tif 000007
【図６】
2020102087.tif 000008
【図７】
2020102087.tif 000009
【図８】
2020102087.tif 000010
【図９】
2020102087.tif 000011
【図１０】
2020102087.tif 000012
【図１１】
2020102087.tif 000013
【図１２】
2020102087.tif 000014
【図１３】
2020102087.tif 000015
【図１４】
2020102087.tif 000016
【図１５】
2020102087.tif 000017
【図１６】
2020102087.tif 000018