(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-28
(45)【発行日】2022-12-06
(54)【発明の名称】半導体装置
(51)【国際特許分類】
G06F 11/10 20060101AFI20221129BHJP
G06F 12/04 20060101ALI20221129BHJP
【FI】
G06F11/10 662
G06F12/04 520D
(21)【出願番号】P 2018240740
(22)【出願日】2018-12-25
【審査請求日】2021-06-11
(73)【特許権者】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】100103894
【氏名又は名称】家入 健
(72)【発明者】
【氏名】山中 翔
(72)【発明者】
【氏名】本田 信彦
(72)【発明者】
【氏名】入田 隆宏
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平10-232789(JP,A)
【文献】特開2018-147166(JP,A)
【文献】米国特許出願公開第2018/0253354(US,A1)
【文献】特開平08-190512(JP,A)
【文献】特開2012-038168(JP,A)
【文献】米国特許出願公開第2016/0378595(US,A1)
【文献】米国特許出願公開第2017/0063401(US,A1)
【文献】米国特許第05182752(US,A)
【文献】特開2008-077783(JP,A)
【文献】特開2014-052754(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/10
G06F 12/04
(57)【特許請求の範囲】
【請求項1】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第1のサブメモリと、
前記第1のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第1のコードを生成する第1の符号生成部と、
前記第1のコードを記憶する第2のサブメモリと、
前記第2のサブメモリに記憶される前記第1のコードに基づいて、前記第1のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第1のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第2のコードを生成する第2の符号生成部と、
前記第2のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第1のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第1のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行し、
前記ライトデータは複数のブロックを含み、前記ライトリクエストは、前記ライトデータの各ブロックに対して前記有効データであることを示す情報、及び前記有効データではない無効データであることを示す情報を含んでおり、
前記第1の符号生成部は、前記有効データに対応するブロックに対して、前記ブロックごとに前記第1のコードを生成する
、半導体装置。
【請求項2】
前記第1のサブメモリは、前記書込み先のアドレスごとに前記ライトデータをエントリを分けて記憶し、前記サブメモリコントローラは、前記ライトリクエストが受け付けられた場合、前記第1のサブメモリに、前記受け付けられたライトリクエストの書込み先のアドレスのライトデータを記憶するエントリがあるか否かを調べ、エントリがある場合、当該エントリに記憶されるライトデータのうち、前記受け付けられたライトリクエストの前記ライトデータの前記有効データに対応するブロックのデータを、該有効データで上書きする請求項
1に記載の半導体装置。
【請求項3】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第1のサブメモリと、
前記第1のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第1のコードを生成する第1の符号生成部と、
前記第1のコードを記憶する第2のサブメモリと、
前記第2のサブメモリに記憶される前記第1のコードに基づいて、前記第1のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第1のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第2のコードを生成する第2の符号生成部と、
前記第2のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第1のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第1のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行し、
前記サブメモリコントローラは、所定の条件が成立した場合は、前記メインメモリから、前記ライトデータの書込み先のアドレスのデータを読み出し、該読み出したデータと前記ライトデータの前記有効データとをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記マスタが発行するメモリアクセス要求を監視するリクエスト監視部を更に有し、
前記サブメモリコントローラは、前記マスタのメモリアクセス要求の発行状況に応じて前記所定の条件が成立したか否かを判断する
、半導体装置。
【請求項4】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第1のサブメモリと、
前記第1のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第1のコードを生成する第1の符号生成部と、
前記第1のコードを記憶する第2のサブメモリと、
前記第2のサブメモリに記憶される前記第1のコードに基づいて、前記第1のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第1のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第2のコードを生成する第2の符号生成部と、
前記第2のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第1のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第1のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行し、
前記サブメモリコントローラは、所定の条件が成立した場合は、前記メインメモリから、前記ライトデータの書込み先のアドレスのデータを読み出し、該読み出したデータと前記ライトデータの前記有効データとをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記サブメモリコントローラは、前記ライトリクエストが受け付けられたとき、前記書込み先のアドレスが、前記受け付けられたライトリクエストの書込み先のアドレスと同じライトデータが前記第1のサブメモリに記憶されていない場合、前記所定の条件が成立したと判断する
、半導体装置。
【請求項5】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第1のサブメモリと、
前記第1のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第1のコードを生成する第1の符号生成部と、
前記第1のコードを記憶する第2のサブメモリと、
前記第2のサブメモリに記憶される前記第1のコードに基づいて、前記第1のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第1のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第2のコードを生成する第2の符号生成部と、
前記第2のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第1のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第1のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行し、
前記メモリコントローラは、前記コマンド発行部が発行したコマンドのヒストリを記憶するコマンドヒストリ記憶部を更に有し、
前記サブメモリコントローラは、前記コマンドヒストリ記憶部に記憶されるヒストリに基づいて、前記メインメモリに書き込まれるライトデータを決定する
、半導体装置。
【請求項6】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第1のサブメモリと、
前記第1のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第1のコードを生成する第1の符号生成部と、
前記第1のコードを記憶する第2のサブメモリと、
前記第2のサブメモリに記憶される前記第1のコードに基づいて、前記第1のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第1のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第2のコードを生成する第2の符号生成部と、
前記第2のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第1のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第1のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行し、
前記メモリコントローラは、前記ライトデータの前記有効データが前記所定データ幅のデータであるか否かを判断するライトデータチェック部を更に有し、
前記ライトデータチェック部が前記ライトデータの前記有効データが前記所定データ幅のデータであると判断した場合、当該ライトデータは前記第1のサブメモリに格納されず、前記第2の符号生成部は、当該ライトデータに基づいて前記第2のコードを生成し、前記コマンド発行部は、当該ライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行する
、半導体装置。
【請求項7】
前記ライトデータチェック部は、前記ライトデータの前記有効データが前記所定データ幅のデータであると判断した場合、更に、前記書込み先のアドレスが、当該ライトデータの書込み先のアドレスと同じライトデータが前記第1のサブメモリに記憶されているか否かを判断し、記憶されていると判断した場合、前記サブメモリコントローラに、前記第1のサブメモリに記憶されるライトデータの削除を依頼する請求項
6に記載の半導体装置。
【請求項8】
ライトリクエストを含むメモリアクセス要求を発行するマスタと、
前記メモリアクセス要求に従ってメインメモリにアクセスするメモリコントローラとを備え、
前記メモリコントローラは、
有効データを含むライトデータを記憶する第1のサブメモリと、
前記第1のサブメモリに記憶されるライトデータに基づいて、データの誤り検出が可能な第1のコードを生成する第1の符号生成部と、
前記第1のコードを記憶する第2のサブメモリと、
前記第2のサブメモリに記憶される前記第1のコードに基づいて、前記第1のサブメモリに記憶されるライトデータに誤りが含まれるか否かを検証するライトデータ検証部と、
前記第1のサブメモリに記憶されるライトデータの前記メインメモリでの書込み先のアドレスを管理するサブメモリコントローラと、
所定データ幅の単位で、前記メインメモリに書き込まれるデータに基づいて、データの誤り検出が可能な第2のコードを生成する第2の符号生成部と、
前記第2のコードが付加されたデータを前記メインメモリに書き込むためのコマンドを発行するコマンド発行部とを含み、
前記サブメモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、前記複数のライトリクエストのライトデータの有効データをマージすることで、前記所定データ幅のデータが得られるか否かを判断し、得られると判断した場合、前記第1のサブメモリからマージ対象の複数のライトデータを読み出し、前記ライトデータ検証部に前記読み出した複数のライトデータのそれぞれに対応する前記第1のコードを用いて当該複数のライトデータのそれぞれに誤りが含まれるか否かを検証させ、誤りが含まれない場合、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージし、前記第2の符号生成部に前記第2のコードを生成させ、
前記コマンド発行部は、前記マージされたライトデータに前記第2のコードを付加したデータを前記メインメモリに書き込むためのコマンドを発行し、
前記マスタは第1のマスタであり、
前記メモリアクセス要求を発行する第2のマスタと、
前記第1のマスタが発行する前記メモリアクセス要求と前記第2のマスタが発行する前記メモリアクセス要求とを選択的に前記メモリコントローラへ出力するインターコネクトロジック回路とを更に有する
、記載の半導体装置。
【請求項9】
前記第1のマスタ及び第2のマスタが発行するメモリアクセス要求を監視するリクエスト監視部を更に有し、
前記サブメモリコントローラは、前記リクエスト監視部で監視されるメモリアクセス要求の発行状況に応じて、前記第1のサブメモリから読み出した複数のライトデータの有効データをマージする動作を実施するか否かを決定し、実施しないと決定した場合、前記メインメモリから、前記ライトデータの書込み先のアドレスのデータを読み出し、該読み出したデータと前記ライトデータの前記有効データとをマージし、前記第2の符号生成部に第2のコードを生成させる請求項
8に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置、メモリコントローラ、及びメモリアクセス方法に関し、例えば誤り検出が可能なコードが付加されたデータをメモリに記憶する半導体装置、メモリコントローラ、及びメモリアクセス方法に関する。
【背景技術】
【0002】
メモリに書き込まれたデータを保護する機構として、データの誤り検出及び訂正が可能な誤り訂正コード(ECC:Error Correction Code)を用いた符号誤り訂正が知られている。符号誤り訂正では、例えば8Byteなどの所定単位のデータに対して、1Byteなどの所定データ幅のECCが生成される。ECCを用いることで、データに所定ビット数のエラーが生じた場合に、そのエラーを訂正することができる。
【0003】
ここで、メモリへ書き込まれるデータのビットが、ECCの生成単位より少ない場合、メモリへ書き込まれるデータのみではECCを生成することができない。ECCを生成するためには、既にメモリに記憶されているデータを読み出し、読み出したデータとメモリへ書き込まれるデータとをマージするリードモディファイライト(RMW:Read Modify Write)を行う必要がある。しかしながら、リードモディファイライトを行うと、メモリにデータを書き込む前に、一度メモリからデータを読み出す必要があるため、アクセス効率が悪化する。
【0004】
ECCに関して、特許文献1は、誤り検出訂正装置を有するメモリ装置を開示する。特許文献1に記載のメモリ装置は、データごとにECCを生成する符号生成部と、ECCを用いてデータのエラーを検出又は訂正する検出訂正部とを有する。符号生成部は、メモリに書き込まれるデータのビット数が、メモリのデータ幅分のビット数の場合は、そのデータを用いてECCを生成する。また、符号生成部は、ECCが有効である旨示すフラグ情報、及びそのフラグ情報のパリティ検査用の検査情報を生成する。
【0005】
特許文献1に記載のメモリ装置において、メモリに書き込まれるデータのビット数がメモリのデータ幅分のビット数に満たない場合、符号生成部は、ダミーのECC符号を生成する。また、符号生成部は、ダミーのECCが誤り検出訂正に用いられる符号ではない旨を示すフラグ情報、及びそのフラグ情報のパリティ検査用の検査情報を生成する。検出訂正部は、フラグ情報を参照し、ECCがダミーではない場合は、メモリから読み出したデータに対し、ECCを用いた誤り検出訂正を行う。検出訂正部は、ECCがダミーの場合は、誤り検出訂正を行わない。
【0006】
また、ECCに関して、特許文献2は、ECCなどのチェックビット生成の対象となるデータ幅より小さいデータ幅のデータを書き込むパーシャルライトを制御するECCパーシャルライト制御ユニットを開示する。特許文献2に記載のECC制御ユニットにおいて、ライトバッファには、チェックビット生成の対象となるデータ幅より小さいデータ幅の書込みデータが格納される。
【0007】
ライトバッファがチェックビット生成の対象となるアドレス範囲内のデータを格納しており、かつライトバッファに格納された複数の書込みデータのデータ幅の合計がECC生成ユニットでチェックビットを生成できるデータ幅である場合、マルチプレクサは、ライトバッファに格納される複数の書込みデータをマージする。一方、ライトバッファに格納された複数の書込みデータのデータ幅がチェックビット生成の対象となるデータ幅に満たない場合、メモリから読み出されたデータがリードバッファに格納される。この場合、マルチプレクサは、ライトバッファ内の書込みデータとリードバッファ内のデータとをマージする。ECC生成ユニットは、マルチプレクサでマージされたデータに対してチェックビットを生成する。
【先行技術文献】
【特許文献】
【0008】
【文献】特開2011-154551号公報
【文献】特開平10-232789号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1では、メモリに書き込まれるデータのビット数がメモリのデータ幅分のビット数に満たない場合、ダミーのECCが生成される。この場合、リードモディファイライトは省略できるものの、ダミーのECCが付加されたデータに対して誤り訂正を行うことはできず、メモリに格納されたデータが保護されない。例えば、メモリに書き込まれるデータが重要なデータである場合、保護を行わないことが許容できない場合がある。その場合、データを保護するためにはリードモディファイライトを行う必要がある。
【0010】
特許文献2では、書込みデータのビット数がECC生成単位のビット数より少ない場合、ライトバッファに書込みデータが書き込まれ、ライトバッファ内に書き込まれた複数の書込みデータをマージしてECCが生成される。このようにすることで、リードモディファイライトを省略しつつ、データを保護することができる。しかしながら、特許文献2では、ライトバッファ内に書き込まれたデータは保護されない。ライトバッファに一度書き込まれたデータは、マージされるまでに内容が書き換わる可能性があり、その場合、メモリに正しいデータを書き込むことができないという問題があった。
【0011】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0012】
一実施の形態によれば、半導体装置はメモリコントローラを有する。メモリコントローラは、有効データを含むライトデータを第1のサブメモリに記憶し、そのライトデータに対して生成された、データの誤り検出が可能な第1のコードを第2のサブメモリに記憶する。メモリコントローラは、同じアドレスに対するライトリクエストが複数ある場合、複数のライトリクエストのライトデータの有効データをマージすることで、データの誤り検出が可能な第2のコードの生成単位である所定データ幅のデータが得られるか否かを判断する。メモリコントローラは、得られると判断した場合、第1のサブメモリからマージ対象のライトデータを読み出し、第1のコードを用いて読み出したライトデータに誤りが含まれるか否かを検証する。メモリコントローラは、誤りが含まれない場合、第1のサブメモリから読み出したライトデータの有効データをマージし、マージしたデータに対して第2のコードを生成する。メモリコントローラは、マージしたデータに第2の誤りコードを付加したデータをメインメモリに書き込むためのコマンドを発行する。
【発明の効果】
【0013】
前記一実施の形態によれば、複数のライトデータをマージして、メインメモリに記憶されるデータを保護するための、データの誤り検出が可能なコードを生成する場合に、メモリコントローラ内でライトデータを保護できる。
【図面の簡単な説明】
【0014】
【
図1】実施形態1に係る半導体装置を示すブロック図。
【
図2】ECCコントローラの構成例を示すブロック図。
【
図3】マスタがライトリクエストを出力した場合の動作手順を示すフローチャート。
【
図4】2つのライトデータとマージされたデータとを示す模式図。
【
図7】サブメモリに記憶されるライトデータを示す模式図。
【
図8】サブメモリに記憶されるECCを示す模式図。
【
図10】実施形態3において用いられるECCコントローラの構成例を示すブロック図。
【
図12】実施形態4に係る半導体装置を示すブロック図。
【
図13】インターコネクトロジック回路の構成例を示すブロック図。
【
図14】メモリコントローラの構成例を示すブロック図。
【
図15】コマンドの履歴、及びライトデータのデータ例を示す模式図。
【
図16】実施形態5において用いられるECCコントローラの構成例を示すブロック図。
【発明を実施するための形態】
【0015】
実施の形態の説明に先立って、下記の実施の形態を想到するに至った経緯について説明する。車載用途の特定の半導体装置では、DDR(Double-Data-Rate)メモリに、データと対となるECCを書き込むことでデータを保護している。半導体装置では、例えば、8Byteデータごとに、1ByteのECCが生成される。このとき、データが8Byte揃っていない場合、そのままではECCが生成できない。上記特定の半導体装置では、ECCが生成できないデータについては、ECCを生成せず、データを保護対象外としていた。
【0016】
しかしながら、機能安全保護の観点からは、ECCが生成できない8Byte未満のデータについても保護を行う必要がある。8Byte未満のデータに対し、リードモディファイライトを行えば、ECCを生成できる。しかしながら、その場合、著しい性能低下が発生する。本発明者らは、リードモディファイライトを可能な限り省略しつつ、データ保護の確実性を向上できる半導体装置について検討した結果、下記の実施の形態を想到するに至った。
【0017】
以下、図面を参照しつつ、上記課題を解決するための手段を適用した実施形態を詳細に説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、又はその他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、又はそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、何れかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0018】
上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスク)、光磁気記録媒体(例えば光磁気ディスク)、CD-ROM(Compact Disk - Read Only Memory)、CD-R(recordable)、CD-R/W(ReWritable)、及び半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の優先通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0019】
以下の実施の形態においては便宜上その必要があるときは、複数のセクション又は実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部又は全部の変形例、応用例、詳細説明、又は補足説明等の関係にある。また、以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【0020】
さらに、以下の実施の形態において、その構成要素(動作ステップ等も含む)は、特に明示した場合及び原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、又は位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等(個数、数値、量、範囲等を含む)についても同様である。
【0021】
[実施形態1]
図1は、実施形態1に係る半導体装置を示す。半導体装置10は、マスタ11及びメモリコントローラ20を含む。マスタ11は、メインメモリ30に対してアクセス要求を発行する。マスタ11は、バスマスタであり、例えばCPUやGPU(Graphics Processing Unit)などのプロセッサとして構成される。メインメモリ30は、例えばDDR-SDRAM(Synchronous Dynamic Random Access Memory)などのメモリデバイスとして構成される。メインメモリ30に対するアクセス要求は、例えば、リード又はライトを示すアクセス種別、及びアクセス先のアドレス情報を示す情報などを含む。以下では、アクセス種別がライトのアクセス要求をライトリクエストと呼び、アクセス種別がリードのアクセス要求をリードリクエストと呼ぶことがある。
【0022】
メモリコントローラ20は、バスなどを介してマスタ11に接続され、マスタ11から受け付けたアクセス要求に従ってメインメモリ30にアクセスする。メモリコントローラ20は、ECCコントローラ21、及びコマンド発行部23を有する。ECCコントローラ21は、マスタからライトリクエストを受け付け、ライトリクエストに従ってメインメモリ30へ書き込まれるデータに、誤り検出及び訂正が可能なコードであるECCを付加する。
【0023】
コマンド発行部23は、ECCが付加されたデータをメインメモリ30に書き込むためのコマンド(ライトコマンド)を発行する。コマンド発行部23は、ライトコマンドに対する応答をマスタ11に返却する。また、コマンド発行部23は、マスタ11からリードリクエストを受け付け、受け付けたリードリクエストに従って、メインメモリ30からデータを読み出すためのコマンド(リードコマンド)を発行する。コマンド発行部23は、リードデータを含む、リードコマンドに対する応答をマスタ11に返却する。コマンド発行部23は、ライトリクエスト及びリードリクエストに対するスケジューリングも行う。
【0024】
[メモリコントローラ]
図2は、ECCコントローラ21の構成例を示す。ECCコントローラ21は、サブメモリ211、ECC生成部212、サブメモリ213、サブメモリコントローラ214、ECC検査部215、及びECC生成部216を含む。ECCコントローラ21において、例えばECC生成部212、ECC検査部215、及びECC生成部216は、ハードウェア回路として構成され得る。サブメモリコントローラ214は、プロセッサを含んだ回路で構成され得る。
【0025】
サブメモリ211は、ライトリクエストに従ってメインメモリ30に書き込まれる、有効データを含むライトデータを記憶する。ECC生成部212は、サブメモリ211に記憶されるライトデータに基づいてECCを生成する。ECC生成部212で生成されるECCは、例えば、ライトデータにおける所定ビット数のエラーを訂正するためのコードである。本実施形態において、ECC生成部212は、ライトデータに無効データが含まれる場合でも、ライトデータ全体に対してECCを生成するものとする。ECC生成部212は、生成したECCをサブメモリ213に記憶する。サブメモリ211及び213には、例えばSRAM(Static RAM)などのメモリデバイスが用いられる。なお、サブメモリ211及び213は、必ずしも物理的に分離された個別のデバイスで構成される必要はない。
【0026】
ECC検査部215は、サブメモリコントローラ214を通じて、サブメモリ211に記憶されるライトデータ、及びサブメモリ213に記憶されるECCを取得する。ECC検査部215は、ライトデータ検証部であり、サブメモリ213に記憶されるECCを用いて、サブメモリ211に記憶されるライトデータにエラーが生じているか否かを検証する。ECC検査部215は、サブメモリコントローラ214に検証の結果をサブメモリコントローラ214に出力する。
【0027】
ECC生成部216は、サブメモリコントローラ214からメインメモリ30に書き込まれるデータを取得する。ECC生成部216は、所定データ幅の単位で、メインメモリ30に書き込まれるデータに基づいてECCを生成する。ここで、ECC生成部212で生成されるECCは、サブメモリ211においてライトデータを保護するために用いられる。一方、ECC生成部216で生成されるECCは、メインメモリ30に記憶されるデータを保護するために用いられる。
【0028】
サブメモリコントローラ214は、サブメモリ211に記憶されるライトデータのメインメモリ30での書込み先のアドレス情報を管理する。サブメモリコントローラ214は、メインメモリ30の同じアドレスに対するライトリクエストが複数ある場合、それらライトリクエストのライトデータの有効データをマージすることで、ECC生成部216で生成されるECCの生成単位である所定データ幅のデータが得られるか否かを判断する。
【0029】
例えば、サブメモリ211は、ライトリクエストごとに、ライトデータをエントリを分けて記憶している。サブメモリコントローラ214は、サブメモリ211に、書込み先のアドレスが同じ複数のライトデータが記憶されているか否かを調べる。サブメモリコントローラ214は、書込み先のアドレスが同じ複数のライトデータが記憶されている場合、複数のライトデータの有効データをマージすることで、所定データ幅のデータが得られるか否かを判断する。サブメモリコントローラ214は、得られると判断した場合、サブメモリ211からマージ対象のライトデータを読み出す。サブメモリコントローラ214は、読み出したライトデータをECC検査部215に出力し、ライトデータにエラーが含まれるか否かを検証させる。
【0030】
ECC検査部215は、サブメモリコントローラ214からライトデータとECCとを取得し、ライトデータにエラーが含まれるか否かを判断する。ECC検査部215は、ライトデータにエラーが含まれると判断した場合、ECCを用いてライトデータを訂正する。ECC検査部215は、ライトデータを訂正できた場合は、訂正されたライトデータをサブメモリコントローラ214に出力する。ECC検査部215は、ライトデータが訂正できない場合は、ライトデータにエラーが含まれる旨をサブメモリコントローラ214に出力する。サブメモリコントローラは、ECC検査部215でライトデータにエラーが含まれると判断された場合、エラー処理を行う。
【0031】
サブメモリコントローラ214は、ECC検査部215でライトデータにエラーが含まれないと判断された場合、サブメモリ211から読み出されたマージ対象のデータの有効データをマージし、マージしたデータをECC生成部216に出力する。ECC生成部216は、マージされたデータに基づいて、ECCを生成する。ECC生成部216は、マージされたデータと生成したECCとをコマンド発行部23に出力する。コマンド発行部23は、マージされたデータにECCを付加したデータをメインメモリ30へ書き込むためのコマンドを生成し、メインメモリ30へ出力する。メインメモリ30は、出力されたコマンドに従って、マージされたデータにECCを付加したデータを書込み先のアドレスに書き込む。
【0032】
[動作手順]
図3は、マスタがライトリクエストを出力した場合の動作手順を示す。メモリコントローラ20は、マスタ11から、バスを介してライトリクエストを受け付ける。メモリコントローラ20のサブメモリ211は、ライトデータを一時的に記憶する。ECC生成部212は、ライトデータに基づいてECCを生成し、生成したECCをサブメモリ213に記憶する。
【0033】
サブメモリコントローラ214は、ライトリクエストが受け付けられると、サブメモリ211を参照し、有効データが揃っているメインメモリ30のアドレスが存在するか否かを判断する(ステップA1)。例えば、サブメモリコントローラ214は、ステップA1では、サブメモリ211に記憶された、書込み先のアドレスが同じ複数のライトデータの有効データをマージした場合に、ECC生成部216においてECCを生成する単位である所定データ幅のデータが得られるか否かを判断する。サブメモリコントローラ214は、複数のライトデータの有効データをマージした場合に所定データ幅のデータが得られると判断した場合、有効データが揃っているメインメモリ30のアドレスが存在すると判断する。サブメモリコントローラ214は、パーシャルライトではない、つまりライトデータのデータ幅が所定データ幅と等しい場合も、有効データが揃っているメインメモリ30のアドレスが存在すると判断する。
【0034】
サブメモリコントローラ214は、ステップA1で有効データが揃っているメインメモリ30のアドレスが存在すると判断した場合、サブメモリ211からマージ対象のライトデータを1つ読み出し、サブメモリ213から、読み出したライトデータに対応するECCを読み出す(ステップA2)。ECC検査部215は、ステップA2で読み出されたECCを用いて、ステップA2で読み出されたライトデータを検証する(ステップA3)。ECC検査部215は、ライトデータにエラーがあった場合、ECCを用いてエラーが訂正可能である場合は、ライトデータを訂正する。ECC検査部215は、検証結果をサブメモリコントローラ214に出力する。
【0035】
サブメモリコントローラ214は、ライトデータにエラーが発生しているか否かを判断する(ステップA4)。サブメモリコントローラ214は、エラーが発生していると判断した場合、エラー処理を行う(ステップA5)。例えば、サブメモリコントローラ214は、ステップA5では、例えばライトリクエストの発行元のマスタ11にライトリクエストの再転送を依頼する。ライトリクエストが再転送された場合、正しいデータをメインメモリ30へ書き込むことができる。あるいは、サブメモリコントローラ214は、メインメモリ30からエラー箇所のデータを読み出して、データを補填してもよいし、エラーが発生しているライトデータを破棄してもよい。これらの場合、エラーが発生したデータをメインメモリ30に書き込むことを回避できる。
【0036】
サブメモリコントローラ214は、ライトデータにエラーが発生していないと判断した場合、有効データが揃っているアドレスの全てのライトデータを読み出したか否かを判断する(ステップA6)。サブメモリコントローラ214は、全てのライトデータを読み出していないと判断した場合、ステップA2に戻り、サブメモリ211及び213から次のライトデータ及びECCを読み出す。サブメモリコントローラ214は、ステップA2からステップA4を、ステップA6において全てのライトデータを読み出したと判断するまで繰り返し実施する。
【0037】
サブメモリコントローラ214は、ステップA6で全てのライトデータを読み出したと判断すると、読み出したライトデータの有効データをマージする(ステップA7)。ECC生成部216は、ステップA7でマージされた有効データに基づいてECCを生成する(ステップA8)。コマンド発行部23は、ステップA7でマージされた有効データに、ステップA8で生成されたECCを付加したデータをメインメモリ30に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ30へ出力する(ステップA9)。
【0038】
[動作例]
以下、動作例を説明する。
図4は、2つのライトデータとマージされたデータとを模式的に示す。ここでは、マスタ11が、ライトデータ500をメインメモリ30のアドレスXへ書き込むためのライトリクエストを出力した後に、ライトデータ510をメインメモリ30のアドレスXに書き込むためのライトリクエストを出力した場合を考える。ライトデータ500は、有効データ(DATA_A)501と、無効データ502とを含む。一方、ライトデータ510は、無効データ511と、有効データ(DATA_B)512とを含む。
【0039】
ECCコントローラ21は、ライトデータ500及び510をエントリを分けてサブメモリ211に記憶する。ECC生成部212は、ライトデータ500に基づいてECC505を生成し、ECC505をサブメモリ213に記憶する。また、ECC生成部212は、ライトデータ510に基づいてECC515を生成し、ECC515をサブメモリ213に記憶する。
【0040】
サブメモリコントローラ214は、
図3のステップA1において、アドレスXについて、ライトデータ500の有効データ501とライトデータ510の有効データ512とをマージした場合に、ECC生成部216においてECCを生成する単位である所定データ幅のデータが得られると判断する。その場合、サブメモリコントローラ214は、ステップA2において、サブメモリ211からライトデータ500を読み出し、サブメモリ213からECC505を読み出す。サブメモリコントローラ214は、ステップA3において、ECC505を用いてライトデータ500を検証する。
【0041】
サブメモリコントローラ214は、ライトデータ500にエラーが含まれなかった場合、ステップA2に戻り、サブメモリ211からライトデータ510を読み出し、サブメモリ213からECC515を読み出す。サブメモリコントローラ214は、ステップA3において、ECC515を用いてライトデータ510を検証する。
【0042】
サブメモリコントローラ214は、ライトデータ510にエラーが含まれていないと判断された場合、ステップA7において、ライトデータ500の有効データ501とライトデータ510の有効データ512とをマージしたデータ(ライトデータ)520を生成する。このとき、有効データ501と有効データ512とで重複するアドレスのデータは、後から出力されたライトデータ510の有効データ512で上書きされる。ECC生成部216は、ステップA8において、ライトデータ520に基づいてECC525を生成する。コマンド発行部23は、ステップA9において、ライトデータ520にECC525を付加したデータをメインメモリ30に書き込むためのコマンドを生成する。
【0043】
[まとめ]
本実施形態では、サブメモリ211はライトリクエストのライトデータを記憶し、サブメモリ213はライトデータのECCを記憶する。サブメモリコントローラ214は、ライトデータの有効データをマージした場合に、メインメモリ30に記憶されるECCを生成するために必要なデータが揃うか否かを判断する。サブメモリコントローラ214は、ECCを生成するために必要なデータが揃うと判断した場合、サブメモリ211からマージ対象のライトデータを読み出し、サブメモリ213からマージ対象のライトデータのECCを読み出す。ECC検査部215は、サブメモリ213から読み出されたECCを用いてサブメモリ211に記憶されるライトデータを検証する。サブメモリコントローラ214は、ライトデータにエラーが含まれない場合、読み出したライトデータの有効データをマージする。ECC生成部216は、マージされたデータに対してECCを生成し、コマンド発行部23は、マージされたデータとECCとをメインメモリ30に書き込むためのコマンドを生成する。
【0044】
本実施形態では、メインメモリ30に記憶されるECCを生成することができない、無効データを含むライトデータがマスタ11から出力された場合、リードモディファイライトを行わずに、無効データを含むライトデータをサブメモリ211に記憶する。本実施形態では、複数のライトデータの有効データをマージすることで、ECC生成に必要な所定データ幅のデータを得ることができる。このため、リードモディファイライトの動作を省略しつつ、メインメモリ30上のデータを保護することができる。また、本実施形態では、ECC生成部212は、サブメモリ211に記憶されるライトデータのECCを生成し、ECC検査部215は、ECC生成部212が生成したECCを用いて、サブメモリ211に記憶されるライトデータがエラーを含むか否かを検証する。このようにすることで、メモリコントローラ20内において、サブメモリ211に記憶されるライトデータを保護することできる。
【0045】
[実施形態2]
次いで、実施形態2を説明する。本実施形態に係る半導体装置の構成は、
図1に示される実施形態1に係る半導体装置10の構成と同様でよい。また、本実施形態におけるECCコントローラの構成は、
図2に示されるECCコントローラ21の構成と同様でよい。本実施形態において、ライトデータは複数のブロックを含み、ライトリクエストはライトデータの各ブロックに対して有効データであることを示す情報、及び無効データであることを示す情報を含む。本実施形態では、ECC生成部212は、ライトデータのうち、有効データに対応するブロックに対して、ブロックごとにECCを生成する。
【0046】
本実施形態では、サブメモリ211は、メインメモリ30における書込み先のアドレスごとに、ライトデータをエントリを分けて記憶する。また、サブメモリ213は、書込み先のアドレスごとに、ECCをエントリを分けて記憶する。サブメモリコントローラ214は、ライトリクエストが受け付けられた場合、サブメモリ211に、受け付けられたライトリクエストの書込み先のアドレスのライトデータを記憶するエントリがあるか否かを調べる。サブメモリコントローラ214は、エントリが存在しない場合は、サブメモリ211に新たなエントリを作成し、そのエントリにライトデータの有効データの部分を記憶する。この場合、サブメモリ213において、新たに生成されたエントリに対応したエントリに、ECC生成部212が生成した、有効データに対応する各ブロックのECCが記憶される。
【0047】
サブメモリコントローラ214は、ライトリクエストの書込み先のアドレスのライトデータを記憶するエントリが既に存在する場合は、そのエントリに記憶されるライトデータのうち、新たに受け付けられたライトリクエストのライトデータの有効データに対応するブロックのデータを、有効データで上書きする。このとき、ECC生成部212は、サブメモリ213に記憶されるECCのうち、新たに受け付けられたライトリクエストのライトデータの有効データに対応するブロックのECCを、生成したECCで上書きする。
【0048】
[データ例]
以下、具体例を用いて説明する。
図5は、ライトデータの一例を示す。ライトデータ500は、例えば計8つのブロックを含む。各ブロックのデータ長は、8ビットであるとする。各ブロックには、データの有効又は無効を示すフラグが設定されている。ライトデータ500では、ブロック0~ブロック5の5つのブロックのフラグが「有効」に設定されており、ブロック6及び7のブロックのフラグが「無効」に設定されている。この場合、ライトデータ500の各ブロックのデータA0~A7のうち、データA0~A6が有効データであるDATA_Aを構成し、データA6及びA7は無効データを構成する。
【0049】
ECC生成部212は、上記ライトデータ500に基づいて、ECC506を生成する。ECC506は、ライトデータ500と同様に、計8つのブロックを含む。ECC212は、例えば8ビットの各ブロックのデータに対して5ビットのECCを生成する。ECC生成部212は、データA1~A5に基づいて、ブロックごとに、5ビットのECC_A0~ECC_A5を生成する。ECC生成部212は、無効データであるデータA6及びA7については、ECCを生成しない。この場合、ECC_A0~ECC_A5を用いることで、データA0~A5がエラーを含むか否かの検証、及びエラーの訂正が可能である。
【0050】
図6は、ライトデータの別例を示す。ライトデータ510は、ライトデータ500と同様に、計8つのブロックに分割されている。ライトデータ510では、ブロック0~ブロック4の5つのブロックのフラグが「無効」に設定されており、ブロック5~7のブロックのフラグが「有効」に設定されている。この場合、ライトデータ510の各ブロックのデータB0~B7のうち、データB5~B7が有効データであるDATA_Bを構成し、データB0~B4は無効データを構成する。
【0051】
ECC生成部212は、上記ライトデータ510に基づいて、ECC507を生成する。ECC507は、ライトデータ510と同様に、計8つのブロックを含む。ECC生成部212は、データB5~B7に基づいて、ブロックごとに、ECC_B5~ECC_B7を生成する。ECC生成部212は、無効データであるデータB0~B4については、ECCを生成しない。この場合、ECC_B5~ECC_B7を用いることで、データB5~B7がエラーを含むか否かの検証、及びエラーの訂正が可能である。
【0052】
図7は、サブメモリ211に記憶されるライトデータを示す。サブメモリ211は、新規アドレスを書込み先とする、ライトデータ500のライトリクエストが受け付けられた場合、サブメモリ211にライトデータ500を記憶する。なお、ECC生成部216は、ライトデータの8つのブロックのフラグが全て「有効」である場合にメインメモリ30に記憶されるECCが生成可能であるとする。
【0053】
次いで、書込み先アドレスが、ライトデータ500のライトリクエストの書込み先アドレスと同じアドレスであるライトデータ510のライトリクエストが受け付けられたとする。その場合、サブメモリ211に記憶されるライトデータ500のデータA5~A7が、ライトデータ510においてフラグが「有効」のブロックのデータB5~B7で上書きされる。上書き後のライトデータ520は、データA0~A4、及びデータB5~B7で構成される。このように、本実施形態では、ライトデータ500の有効データとライトデータ510の有効データとが、サブメモリ211上でマージされる。
【0054】
図8は、サブメモリ213に記憶されるECCを示す。ECC生成部212は、ライトデータ500に対してECC506を生成し、サブメモリ213に記憶する。ECC506は、データA0~A5の各ブロックに対して生成された、ECC_A0~A5を含む。また、ECC生成部212は、ライトデータ510に対してECC507を生成する。ECC507は、データB5~B7の各ブロックに対して生成された、ECC_B5~B7を含む。サブメモリ213に記憶されたECC506を、ECC507で上書きすることで、ECC_A0~ECC_A4及びECC_B5~ECC_B7で構成されるECC508が得られる。このECC508を用いることで、サブメモリ211に記憶されたライトデータ520(
図7を参照)の各ブロックについて、エラーを含むか否かの検証、及びエラー訂正が可能である。
【0055】
[動作手順]
図9は、動作手順を示す。メモリコントローラ20は、マスタ11から、バスを介してライトリクエストを受け付ける。メモリコントローラ20のサブメモリ211に、ライトリクエストの書込み先のアドレスに対応するライトデータを記憶するエントリが存在しない場合、ライトデータがサブメモリ211に一時的に記憶される。サブメモリ211に、書込み先のアドレスに対応するライトデータを記憶するエントリが既に存在する場合は、サブメモリ211に記憶されるデータのうち、ライトデータの有効データに対応するブロックのデータが、ライトデータの有効データで上書きされる。ECC生成部212は、ライトデータの有効データ部分に基づいてECCを生成し、生成したECCをサブメモリ213に記憶する。
【0056】
サブメモリコントローラ214は、ライトリクエストが受け付けられると、サブメモリ211を参照し、有効データが揃っているメインメモリ30のアドレスが存在するか否かを判断する(ステップB1)。例えば、サブメモリコントローラ214は、ステップB1では、サブメモリ211の各ブロックのフラグが全て「有効」であるエントリが存在するか否かを調べる。サブメモリコントローラ214は、全てのブロックのフラグが「有効」であるエントリが存在する場合、有効データが揃っているメインメモリ30のアドレスが存在すると判断する。
【0057】
サブメモリコントローラ214は、ステップB1で有効データが揃っているメインメモリ30のアドレスが存在すると判断した場合、サブメモリ211からライトデータを読み出し、サブメモリ213から、読み出したライトデータに対応するECCを読み出す(ステップB2)。本実施形態では、前述のように、サブメモリ211上で無効データを含む複数のライトデータがマージされるため、サブメモリ211から読み出した後に複数のライトデータをマージする必要はない。
【0058】
ECC検査部215は、ステップB2で読み出されたECCを用いて、ステップB2で読み出されたライトデータの各ブロックのデータを検証する(ステップB3)。ECC検査部215は、例えば
図7に示されるライトデータのデータA0を、
図8に示されるECC508のECC_A0を用いて検証する。また、ECC検査部215は、ライトデータのデータA1~A4及びデータB4~B7のそれぞれを、ECC508のECC_A0~ECC_A4及びECC_B4~ECC_B7を用いて検証する。ECC検査部215は、ライトデータの何れかのブロックにエラーがあった場合で、かつ対応するブロックのECCを用いてエラーが訂正可能である場合は、そのブロックのデータを訂正する。ECC検査部215は、検証結果をサブメモリコントローラ214に出力する。
【0059】
サブメモリコントローラ214は、ライトデータにエラーが発生しているか否かを判断する(ステップB4)。サブメモリコントローラ214は、エラーが発生していると判断した場合、エラー処理を行う(ステップB5)。ステップB5は、
図3のステップA5と同様でよい。
【0060】
サブメモリコントローラ214は、ステップB4でエラーが発生していないと判断すると、読み出したライトデータをECC生成部216に出力する。ECC生成部216は、ライトデータに基づいてECCを生成する(ステップB6)。コマンド発行部23は、ライトデータに、ステップB6で生成されたECCを付加したデータをメインメモリ30に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ30へ出力する(ステップB7)。
【0061】
[まとめ]
本実施形態では、ライトデータは複数のブロックから成り、複数のライトデータの有効データに対応するブロックは、サブメモリ211上でマージされる。また、ECC生成部212は、ライトデータの有効データに対応した各ブロックのECCを生成し、サブメモリ213に記憶する。ECC生成部212が生成するECCの生成単位を、ライトデータのブロックに対応させることで、サブメモリ213に記憶されるECCを新たに生成したECCで上書きした場合でも、サブメモリ211上のライトデータの各ブロックのデータを、サブメモリ213に記憶されるECCを用いて検証することができる。実施形態1では、同じ書込み先のアドレスが同じ複数のライトデータが、エントリを分けてサブメモリ211に記憶された。本実施形態では、1つの書込み先のアドレスに対して、ライトデータを記憶するエントリは1つでよく、実施形態1に比べて、サブメモリ211に要求されるエントリ数(メモリ容量)を低減できる。
【0062】
[実施形態3]
続いて、実施形態3を説明する。実施形態1及び実施形態2では、サブメモリ211において、メインメモリ30に記憶されるECCを生成するために必要なデータが揃った場合に、ECC生成部216がECCを生成した。この場合、マスタ11(
図1を参照)が書込み先のアドレスが同じ複数のライトリクエストを出力しない場合、メインメモリ30に記憶されるECCを生成するために必要なデータが揃わず、ライトデータがメインメモリ30に記憶されるまでに要する時間が長くなる。本実施形態では、メモリコントローラ20は、所定の条件が成立した場合は、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ30に記憶されるECCを生成する。その他の点は、実施形態1又は実施形態2と同様でよい。
【0063】
図10は、本実施形態において用いられるECCコントローラの構成例を示す。本実施形態において用いられるECCコントローラ21aは、
図2に示されるECCコントローラ21の構成に加えて、RMWタイマ217を有する。本実施形態において、サブメモリコントローラ214は、所定の条件が成立した場合は、コマンド発行部23(
図2を参照)を通じてメインメモリ30から、ライトデータの書込み先のアドレスのデータを読み出す。サブメモリコントローラ214は、メインメモリ30から読み出したデータとサブメモリ211に記憶されるライトデータの有効データとをマージし、ECC生成部216に出力する。
【0064】
RMWタイマ217は、ライトリクエストが受け付けられると時間の測定を開始し、所定時間の経過後にタイムアウトを発生する。RMWタイマ217は、例えば書込み先のアドレスごとに、最初にライトリクエストを受け付けた時刻から所定時間の経過後にタイムアウトを発生する。あるいは、RMWタイマ217は、書込み先のアドレスごとに、最後にライトリクエストを受け付けた時刻から所定時間の経過後にタイムアウトを発生してもよい。サブメモリコントローラ214は、RMWタイマ217がタイムアウトを発生した場合、所定の条件が成立したと判断する。
【0065】
[動作手順]
図11は、動作手順を示す。メモリコントローラ20は、マスタ11から、バスを介してライトリクエストを受け付ける。メモリコントローラ20のサブメモリ211は、ライトデータを一時的に記憶する。ECC生成部212は、ライトデータに基づいてECCを生成し、生成したECCをサブメモリ213に記憶する。
【0066】
サブメモリコントローラ214は、ライトリクエストが受け付けられると、サブメモリ211を参照し、有効データが揃っているメインメモリ30のアドレスが存在するか否かを判断する(ステップC1)。例えば、サブメモリコントローラ214は、ステップC1では、サブメモリ211に記憶された、同じ書込み先のアドレスの複数のライトデータの有効データをマージした場合に、ECC生成部216においてECCを生成する単位である所定データ幅のデータが得られるか否かを判断する。サブメモリコントローラ214は、複数のライトデータの有効データをマージした場合に所定データ幅のデータが得られると判断した場合、有効データが揃っているメインメモリ30のアドレスが存在すると判断する。
【0067】
サブメモリコントローラ214は、ステップC1で有効データが揃っているメインメモリ30のアドレスが存在すると判断した場合、サブメモリ211からマージ対象のライトデータを読み出し、サブメモリ213から、ライトデータに対応するECCを読み出す(ステップC2)。ECC検査部215は、ステップC2で読み出されたECCを用いて、ステップC2で読み出されたライトデータを検証する(ステップC3)。ECC検査部215は、ライトデータにエラーがあった場合で、かつECCを用いてエラーが訂正可能である場合は、ライトデータを訂正する。ECC検査部215は、検証結果をサブメモリコントローラ214に出力する。
【0068】
サブメモリコントローラ214は、ライトデータにエラーが発生していない場合、読み出したライトデータの有効データをマージし、ECC生成部216に出力する。サブメモリコントローラ214は、ライトデータにエラーが発生している場合、エラー処理を行ってもよい。ECC生成部216は、マージされた有効データに基づいてECCを生成する(ステップC4)。コマンド発行部23は、マージされた有効データに、ステップC4で生成されたECCを付加したデータをメインメモリ30に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ30へ出力する(ステップC5)。ステップC1~C5の動作は、
図3のステップA1~A4、及びA6~A9の動作と同様でよい。あるいは、ステップC1~C5の動作は、
図9のステップB1~B4、B6、及びB7の動作と同様でよい。
【0069】
サブメモリコントローラ214は、ステップC1で有効データが揃っているアドレスが存在しないと判断した場合、RMWタイマ217がタイムアウトしたか否かを判断する(ステップC6)。ステップC6でRMWタイマ217がタイムアウトしていないと判断された場合、処理はステップC1に戻る。サブメモリコントローラ214は、ステップC6でRMWタイマ217がタイムアウトしたと判断した場合、メインメモリ30から、データを読み出す(ステップC7)。サブメモリコントローラ214は、例えばアドレスXを書込み先アドレスとする、無効データを含むライトデータがサブメモリ211に記憶されている場合、ステップC7では、コマンド発行部23を通じて、メインメモリ30からアドレスXのデータを取得する。
【0070】
サブメモリコントローラ214は、ステップC7と並行して、サブメモリ211からライトデータを読み出し、サブメモリ213からECCを読み出す(ステップC8)。ECC検査部215は、ステップC8で読み出されたECCを用いて、ステップC8で読み出されたライトデータを検証する(ステップC9)。ECC検査部215は、ライトデータにエラーがあった場合で、かつECCを用いてエラーが訂正可能である場合は、ライトデータを訂正する。ECC検査部215は、検証結果をサブメモリコントローラ214に出力する。
【0071】
サブメモリコントローラ214は、ライトデータにエラーが発生していない場合、読み出したライトデータの有効データと、ステップC7でメインメモリ30から読み出されたデータとをマージし、ECC生成部216に出力する。サブメモリコントローラ214は、ライトデータにエラーが発生している場合、エラー処理を行ってもよい。ECC生成部216は、ステップC4において、マージされたデータに基づいてECCを生成する。また、コマンド発行部23は、ステップC5において、マージされたデータに、ECC生成部216で生成されたECCを付加したデータをメインメモリ30に書き込むためのコマンドを生成し、生成したコマンドをメインメモリ30へ出力する。
【0072】
[まとめ]
本実施形態では、サブメモリコントローラ214は、RMWタイマ217がタイムアウトすると、通常のリードモディファイライトと同様な動作を行い、メインメモリ30から読み出したデータと無効データを含むライトデータとをマージする。本実施形態では、ライトデータがサブメモリ211に記憶されてから所定時間の経過後に、ライトデータを含むデータをメインメモリ30に書き込むことができ、ライトデータがサブメモリ211に滞留し続けることを抑制できる。このため、本実施形態では、サブメモリ211に要求されるメモリ容量を削減することができる。また、本実施形態では、所定時間の経過後にライトデータがメインメモリ30に書き込まれることが期待できるため、性能の定量見積もりが可能である。
【0073】
[実施形態4]
引き続き、実施形態4を説明する。
図12は、本実施形態に係る半導体装置を示す。本実施形態に係る半導体装置10bは、マスタ11、マスタ12、メモリコントローラ20b、メインメモリ30、及びインターコネクトロジック回路40を有する。マスタ11及び12は、バスマスタであり、メインメモリ30に対するアクセス要求を出力する。インターコネクトロジック回路40は、対応するバスを介して、マスタ11及び12が発行したアクセス要求を受け取る。インターコネクトロジック回路40は、マスタ11及び12が出力するアクセス要求を選択的にメモリコントローラ20bへ出力する。
【0074】
インターコネクトロジック回路40は、例えばバスアービタであり、複数のマスタから入力されるアクセス要求を調停する。インターコネクトロジック回路40は、例えばマスタ11及び12からアクセス要求を受け取った場合は、各マスタに設定された優先度に従って、優先度が高いマスタが発行したアクセス要求をメモリコントローラ20bに出力してもよい。インターコネクトロジック回路40は、メモリコントローラ20bに出力したアクセス要求に対するレスポンスが得られると、次に優先度が高いマスタのアクセス要求を選択してメモリコントローラ20bに出力する。
【0075】
なお、
図12では半導体装置10bがマスタを2つ有する例が示されているが、半導体装置10bはメモリコントローラ20bに対してメインメモリ30へのアクセス要求を発行するマスタを少なくとも1つ有していればよく、マスタの数は特に限定されない。本実施形態において、半導体装置10bは3以上のマスタを有していてもよいし、半導体装置10bはマスタを1つ有していてもよい。マスタの数が1つである場合、インターコネクトロジック回路40は省略できる。
【0076】
[インターコネクトロジック回路]
図13は、インターコネクトロジック回路40の構成例を示す。インターコネクトロジック回路40は、アービタ41、及びリクエストモニタ(リクエスト監視部)42を有する。アービタ41は、マスタ11及び12が出力するアクセス要求を選択的にメモリコントローラ20bへ出力する。リクエストモニタ42は、マスタ11及び12が出力するアクセス要求を監視する。リクエストモニタ42は、マスタ11及び12のメモリアクセス要求の発行状況を示すインターコネクトステータスをメモリコントローラに出力する。なお、リクエストモニタ42は、必ずしもインターコネクトロジック回路40に含まれている必要はなく、インターコネクトロジック回路40の外部に配置されていてもよい。
【0077】
[メモリコントローラ]
図14は、メモリコントローラ20bの構成例を示す。メモリコントローラ20bは、ECCコントローラ21b、及びコマンド発行部23bを有する。ECCコントローラ21bは、
図2に示されるECCコントローラ21の構成に加えて、バス状況コントローラ218を有する。ECCコントローラ21bは、更にRMWタイマ217(
図10を参照)を有していてもよい。本実施形態において、サブメモリコントローラ214は、実施形態3と同様に、所定の条件が成立した場合は、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ30に記憶されるECCを生成する。
【0078】
バス状況コントローラ218は、リクエストモニタ42からインターコネクトステータスを取得する。サブメモリコントローラ214は、バス状況コントローラ218を通じて、マスタ11及び12のメモリアクセス要求の発行状況を取得し、メモリアクセス要求の発行状況に応じて、リードモディファイライトを実施する所定の条件が成立したか否かを判断する。
【0079】
サブメモリコントローラ214は、例えば、インターコネクトロジック回路40がマスタ11及び12の少なくとも一方が出力したメモリアクセス要求を受け付けている場合は、書込み先のアドレスが同じライトリクエストを待つ。サブメモリコントローラ214は、例えば、インターコネクトロジック回路40がマスタ11及び12の少なくとも一方が出力したメモリアクセス要求を受け付けていない場合は、所定の条件が成立したと判断する。その場合、サブメモリコントローラ214は、
図11のステップC7~C10と同様な手順で、メインメモリ30から読み出したデータと、サブメモリ211から読み出したライトデータとをマージする。
【0080】
サブメモリコントローラ214は、新たなライトリクエストが受け付けられた場合、書込み先のアドレスが、新たに受け付けられたライトリクエストの書込み先のアドレスと同じアドレスのライトデータが、サブメモリ211に記憶されているか否かを判断してもよい。サブメモリコントローラ214は、同じ書込み先のアドレスのライトデータが、サブメモリ211に記憶されていない場合は、所定の条件が成立したと判断してもよい。その場合、サブメモリコントローラ214は、
図11のステップC7と同様な手順でメインメモリ30からデータを読み出し、読み出したデータとライトデータの有効データとをマージしてもよい。
【0081】
コマンド発行部23bは、コマンドヒストリ記憶部231を有する。コマンドヒストリ記憶部231は、コマンド発行部23が発行したメモリアクセスのコマンドの履歴を記憶する。コマンドヒストリ記憶部231は、例えば直前の3回分のコマンドの履歴を記憶する。コマンドヒストリ記憶部231を参照することで、メインメモリ30のどのバンクへのアクセスがあったかを知ることができる。
【0082】
例えばDDRなどのメモリデバイスでは、直前のアクセスと次のアクセスのバンクアドレスなどに依存して、アクセス間のペナルティサイクルが決まる。従って、次にアクセスするバンクと、直前にアクセスしたバンクとの組み合わせに依存して、アクセス時間が変化し得る。サブメモリコントローラ214は、コマンドヒストリ記憶部231に記憶される履歴に基づいて、アクセス時間を見積もり、次にメインメモリ30に書き込むライトデータを決定してもよい。
【0083】
例えば、サブメモリコントローラ214は、リードモディファイライトが必要なライトデータを含む、サブメモリ211に記憶されるライトデータのそれぞれについて、メインメモリ30にライトデータを書き込む場合のアクセス時間を計算する。サブメモリコントローラ214は、ペナルティが最も小さいライトデータを選択し、必要に応じてリードモディファイライトを行い、ECC生成部216にECCを生成させ、コマンド発行部23にライトデータにECCが付加されたデータをメインメモリ30に書き込むためのコマンドを発行させる。このようにすることで、状況に応じた効率のよいメモリアクセスを実現できる。
【0084】
図15は、コマンドヒストリ記憶部231が記憶する履歴、及びサブメモリ211が記憶するライトデータのデータ例を示す。コマンドヒストリ記憶部231は、例えば、1つ前のメモリアクセスはバンク0へのアクセスであり、2つ前のメモリアクセスはバンク0へのアクセスであり、3つ前のメモリアクセスはバンク3へのアクセスである旨の履歴を記憶している。また、サブメモリ211は、エントリ0からエントリ4に、計5つのライトデータを記憶している。エントリ0及び1に記憶されるライトデータは無効データを含んでいないか、或いは他のエントリのライトデータとマージすることでメインメモリ30に記憶されるECCの生成単位である所定データ幅のデータとなるライトデータである。一方、エントリ2~4に記憶されるライトデータは無効データを含んでおり、メインメモリ30にライトデータを書き込むためには、リードモディファイライトの動作が必要となるライトデータである。
【0085】
サブメモリ211のエントリ0及び1に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク0であり、エントリ2に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク3であったとする。また、エントリ3に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク2であり、エントリ4に記憶されるライトデータの書込み先のアドレスが存在するバンクはバンク1であったとする。
【0086】
サブメモリコントローラ214は、各エントリに記憶されるライトデータのアクセス先のバンクと、コマンドヒストリ記憶部231に記憶される過去のメモリアクセスのアクセス先のバンクとに基づいて、各エントリに記憶されるライトデータをメインメモリ30に書き込む場合のアクセス時間を計算する。サブメモリコントローラ214は、例えば、エントリ0及び1に記憶されるライトデータを次にメインメモリ30に書き込む場合は、書込みに20サイクル必要であると計算する。サブメモリコントローラ214は、エントリ2に記憶されるライトデータを次にメインメモリ30に書き込む場合は、書込みに2サイクル必要であると計算し、エントリ3に記憶されるライトデータを次にメインメモリ30に書き込む場合は、書込みに10サイクル必要であると計算する。また、サブメモリコントローラ214は、エントリ4に記憶されるライトデータを次にメインメモリ30に書き込む場合は、書込みに15サイクル必要であると計算する。
【0087】
サブメモリコントローラ214は、上記で計算したアクセス時間に基づいて、どのライトデータを次にメインメモリ30に書き込ませるかを決定する。上記の場合、サブメモリ211のエントリ2に記憶されるライトデータをメインメモリ30に書き込む場合に必要なサイクル数が最も少ない。この場合、サブメモリコントローラ214は、メインメモリ30のバンク3からライトデータの書込み先のアドレスのデータを取得し、取得したライトデータにエントリ3に記憶されるライトデータをマージする。サブメモリコントローラ214は、ECC生成部216にマージされたデータを出力し、ECC生成部216は、マージされたデータのECCを生成する。コマンド発行部23は、マージされたデータにECCを付加したデータをメインメモリ30に書き込むためのコマンドを発行し、メインメモリ30にエントリ3に記憶されたライトデータを書き込ませる。
【0088】
「まとめ」
本実施形態では、サブメモリコントローラ214は、マスタのアクセス要求の発行状況に応じて、リードモディファイライトを実施する条件が成立したか否かを判断する。例えば、マスタがアクセス要求を発行していない場合、インターコネクトロジック回路40側からメモリコントローラ20に次のライトリクエストが出力されない予想される。その場合、サブメモリコントローラ214は、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ30に記憶されるECCを生成するために必要なデータを取得する。マスタがアクセス要求を出力していない場合、リードモディファイライトを行った方が、ライトデータをマージする場合より短時間で処理を完了できる場合がある。そのような場合に、リードモディファイライトを行うことで、長時間にわたってライトデータがサブメモリ211に滞留することを抑制できる。
【0089】
また、本実施形態では、サブメモリコントローラ214は、書込み先のアドレスが、新たに受け付けられたライトリクエストの書込み先のアドレスと同じアドレスのライトデータが、サブメモリ211に記憶されているか否かに応じて、リードモディファイライトを実施する条件が成立したか否かを判断する。例えば、サブメモリコントローラ214は、サブメモリ211にライトデータが記憶されていない場合に、書込み先のアドレスが同じライトリクエストを待たずに、リードモディファイライトを行って、メインメモリ30に記憶されるECCを生成するために必要なデータを取得する。このようにすることで、効率のよいメモリアクセスが実現できる。
【0090】
本実施形態では、サブメモリコントローラ214は、コマンドヒストリ記憶部231に記憶された履歴に基づいて、次にメインメモリ30に書き込むライトデータを決定する。例えば、サブメモリコントローラ214は、サブメモリ211に記憶されるライトデータのうち、最もデータの書込み完了までに要する時間が短いライトデータを、次にメインメモリ30に書き込むライトデータとして決定する。このようにすることで、コマンドの発行状況に応じた効率のよいメモリアクセスを実現できる。
【0091】
[実施形態5]
引き続いて、実施形態5を説明する。
図16は、本実施形態において用いられるECCコントローラの構成例を示す。本実施形態において用いられるECCコントローラ21cは、
図2に示されるECCコントローラ21の構成に加えて、ライトデータチェック部219、及びアービタ220を有する。本実施形態において、ECCコントローラ21cは、更にRMWタイマ217(
図10を参照)を有していてもよい。また、ECCコントローラ21bは、更にバス状況コントローラ218(
図14を参照)を有していてもよい。
【0092】
ライトデータチェック部219は、新たにライトリクエストが受け付けられると、ライトリクエストのライトデータの有効データが、メインメモリ30に記憶されるECCの生成単位である所定データ幅のデータであるか否かを判断する。ライトデータチェック部219は、ライトデータの有効データのデータ幅が所定データ幅に満たないと判断した場合、サブメモリ211にライトデータを記憶する。サブメモリ211にライトデータが格納された後の動作は、実施形態1~実施形態4の何れかと同様でよい。
【0093】
本実施形態では、ライトデータチェック部219は、ライトデータの有効データが所定データ幅のデータであると判断した場合、そのライトデータをサブメモリ211に格納せずに、アービタ220に出力する。アービタ220は、サブメモリコントローラ214から出力されるライトデータと、ライトデータチェック部219から出力されるライトデータとを選択的に出力する。ECC生成部216は、アービタ220を介して、ライトデータチェック部219から出力されるライトデータを受け取り、そのライトデータに基づいてECCを生成する。コマンド発行部23(
図2を参照)は、ライトデータにECCを付加したデータをメインメモリ30に書き込むためのコマンドを発行する。
【0094】
ライトデータチェック部219は、ライトデータの有効データが所定データ幅のデータであると判断した場合、サブメモリ211を参照し、書込み先のアドレスが、新たに受け付けられたライトリクエストの書込み先のアドレスと同じライトデータがサブメモリ211に記憶されているか否かを判断する。ライトデータチェック部219は、同じ書込み先のアドレスのライトデータが記憶されていると判断した場合、サブメモリコントローラ214に、サブメモリ211に記憶される、同じ書込み先のアドレスのライトデータの削除を依頼する。サブメモリコントローラ214は、サブメモリ211から、同じ書込み先のアドレスのライトデータを削除する。このようにすることで、サブメモリ211から不必要なライトデータを削除することができ、サブメモリ211のエントリを開放することができる。
【0095】
[まとめ]
本実施形態では、ライトデータチェック部219は、ライトデータが、ECC生成部216においてECCを生成できるデータであるか否かを判断する。本実施形態では、ライトデータが無効データを含まず、従って他のライトデータとマージしなくてもメインメモリ30に書き込まれるECCを作成できる場合、ライトデータはサブメモリ211に格納されずに、ECC生成部216に出力される。このようにすることで、ECC生成部216は、サブメモリ211を介さずにライトデータを受け取ることができ、ライトリクエストが受け付けられてから、ECCが生成され、ライトコマンドが発行されるまでに要する時間を短縮できる。
【0096】
なお、上記各実施形態では、メインメモリ30及びサブメモリ211に記憶されるデータを、ECCを用いて保護する例を説明したが、本開示はこれには限定されない。メインメモリ30及びサブメモリ211に記憶されるデータを、誤り検出及び訂正が可能なECCに代えて、誤り検出が可能なEDC(Error Detection Code)を用いて保護してもよい。あるいは、メインメモリ30に記憶されるデータについてはECCを用いて保護し、サブメモリ211に記憶されるデータについてはEDCを用いて保護してもよい。EDCを用いる場合は、誤り訂正はできないものの、データにエラーが含まれるか否かを判断することはできる。
【0097】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【0098】
10:半導体装置
11、12:マスタ
20:メモリコントローラ
21:ECCコントローラ
23:コマンド発行部
30:メインメモリ
40:インターコネクトロジック回路
41:アービタ
42:リクエストモニタ
211:サブメモリ
212:ECC生成部
213:サブメモリ
214:サブメモリコントローラ
215:ECC検査部
216:ECC生成部
217:RMWタイマ
218:バス状況コントローラ
219:ライトデータチェック部
220:アービタ
231:コマンドヒストリ記憶部
500、510、520:ライトデータ
501、512:有効データ
502、511:無効データ