(57)【要約】【課題】従来のデータ処理装置では、部分データの書き込み動作において動作速度を十分に高速化することができなかった。【解決手段】本発明にかかるデータ処理装置は、所定のデータ幅のデータで入出力を行うメモリ２０と、リード命令又はライト命令を出力してメモリ２０に対してアクセスを行う演算回路１０と、演算回路１０からライト命令とそのライト命令に関連付けられた部分データとを受けた場合に、メモリ２０から読み出した第１のリードデータの一部を部分データに置き換えてメモリ２０に対するライトデータを出力するアクセス制御回路３０と、を有し、アクセス制御回路３０は、ライト命令がそのライト命令よりも前に出力されたリード命令に対応して出力されたものである場合は、第１のリードデータに代えて以前に出力された前記リード命令に応じてすでに取得されている第２のリードデータの一部を部分データに置き換えてライトデータを出力する。【選択図】図１
2009289170.tif 000002
【特許請求の範囲】
【請求項１】
所定のデータ幅のデータの入出力を行うメモリと、
リード命令又はライト命令を出力して前記メモリに対してアクセスを行う演算回路と、
前記演算回路から前記ライト命令と前記ライト命令に関連付けられた前記所定のデータ幅よりも小さなデータ幅の部分データとを受けた場合に、前記メモリから読み出した第１のリードデータの一部を前記部分データに置き換えて前記メモリに対するライトデータを出力するアクセス制御回路と、
を有し、
前記アクセス制御回路は、前記ライト命令が前記ライト命令よりも前に出力されたリード命令に対応して出力されたものである場合は、前記第１のリードデータに代えて以前に出力された前記リード命令に応じてすでに取得されている第２のリードデータの一部を前記部分データに置き換えて前記ライトデータを出力するデータ処理装置。
【請求項２】
前記演算回路は、前記メモリから前記第１のリードデータを読み出し、読み出した前記第１のリードデータの一部を修正して前記部分データを生成し、生成した前記部分データを前記メモリに対して書き込むリードモディファイライト命令を実行する請求項１に記載のデータ処理装置。
【請求項３】
前記アクセス制御回路は、
フラグ値を格納するＲＭＷフラグレジスタと、
前記メモリに対して読み出し動作を指示するリード制御信号及び書き込み動作を指示するライト制御信号を出力するリード／ライト制御回路と、を有し、
前記演算回路は、前記リードモディファイライト命令の実行開始に伴い前記リード命令と共にリードモディファイライト信号を出力し、その後、前記ライト命令と共に前記アクセス制御回路に対して出力する被保存データのデータ幅を示すデータサイズ信号を出力し、
前記ＲＭＷフラグレジスタは、前記リードモディファイライト信号を受信し、前記フラグ値を有効状態とし、
前記リード／ライト制御回路は、前記ライト命令の受信時に、前記データサイズ信号が前記所定のデータ幅よりも小さな値を示し、かつ、前記フラグ値が有効状態であれば、前記ライト命令に応じて前記リード制御信号を出力することなく、前記ライト制御信号を出力する請求項２に記載のデータ処理装置。
【請求項４】
前記リード／ライト制御回路は、前記ライト命令の受信時に、前記データサイズ信号が前記所定のデータ幅よりも小さく、かつ、前記フラグ値が無効状態であれば、前記ライト命令に応じて前記リード制御信号を出力し、その後前記ライト制御信号を出力する請求項３に記載のデータ処理装置。
【請求項５】
前記アクセス制御回路は、
前記演算回路が出力するアドレス信号及び前記演算回路が前記ライト命令の出力時に前記アクセス制御回路に対して出力する被保存データのデータ幅を示すデータサイズ信号を受け、データのマージ処理の対象となるデータ位置を示す選択信号を出力するデータセレクト制御回路と、
前記第１のリードデータを格納するリードデータバッファと、
前記部分データ又は前記被保存データを格納するライトデータバッファと、
前記リードデータバッファから読み出したデータと前記ライトデータバッファから読み出したデータとを前記選択信号に応じてマージし、前記ライトデータを生成するデータマージ回路と、
を有する請求項１乃至４のいずれか１項に記載のデータ処理装置。
【請求項６】
前記リードデータバッファ及びライトデータバッファは、それぞれ前記所定のデータ幅よりも小さなデータ幅で定義される格納データ幅で格納するデータを分割し、分割したデータ単位でデータの入出力を行う請求項５に記載のデータ処理装置。
【請求項７】
前記データマージ回路は、前記選択信号が有効状態を示す部分に相当する前記ライトデータとして前記ライトデータバッファのデータを選択し、前記選択信号が無効状態を示す部分に相当する前記ライトデータとして前記リードデータバッファのデータを選択する請求項６に記載のデータ処理装置。
【請求項８】
前記データ処理装置は、
前記ライトデータの全体に対するエラー訂正コードを生成して、前記メモリに対して前記ライトデータ及び前記エラー訂正コードを出力するエラー訂正回路と、
前記メモリから読み出される第３のリードデータに関連付けられて読み出される前記エラー訂正コードを用いて、前記第３のリードデータに対するエラー訂正を行い、前記演算回路に送信する前記第１のリードデータを生成するエラー検出訂正回路を有する請求項１乃至７のいずれか１項に記載のデータ処理装置。
【請求項９】
演算回路から出力されるリード命令又はライト命令を受けてメモリに対するアクセスを制御するメモリコントローラであって、
前記ライト命令が前記ライト命令の直前に受けた前記リード命令に基づく命令であることを検知した場合、前記ライト命令の直前に受けた前記リード命令に基づき前記メモリから取得したリードデータ、及び、前記ライト命令に対応して前記演算回路から出力される部分データに基づき前記メモリに対するライトデータを出力するアクセス制御回路と、
前記ライトデータの全体に対するエラー訂正コードを生成して、前記メモリに対して前記ライトデータ及び前記エラー訂正コードを出力するエラー訂正回路と、
を有するメモリコントローラ。
【請求項１０】
前記部分データは、前記演算回路と前記メモリとの間を接続するデータバスのデータ幅よりも小さいデータ幅を有する請求項９に記載のメモリコントローラ。
【請求項１１】
前記演算回路は、前記メモリから前記リードデータを読み出し、読み出した前記リードデータの一部を修正して前記部分データを生成し、生成した前記部分データを前記メモリに対して書き込むリードモディファイライト命令を実行する請求項１０に記載のメモリコントローラ。
【請求項１２】
前記アクセス制御回路は、
前記ライト命令が前記ライト命令の直前に受けた前記リード命令に基づく命令であることを検知した場合、前記ライト命令の直前に受けた前記リード命令に基づき前記メモリから取得したリードデータの一部を前記部分データに置き換えて前記ライトデータを出力し、
前記ライト命令が前記ライト命令の直前に受けた前記リード命令とは独立した命令であることを検知し、かつ、前記ライト命令と共に前記部分データを受信した場合、前記ライト命令に基づき前記メモリに読み出し動作を指示するリード制御信号を出力して前記メモリから前記リードデータを読み出し、その後、前記リードデータの一部を前記部分データに置き換えて前記ライトデータを生成する請求項１０又は１１に記載のメモリコントローラ。
【請求項１３】
前記アクセス制御回路は、
フラグ値を格納するＲＭＷフラグレジスタと、
前記メモリに対して読み出し動作を指示するリード制御信号及び書き込み動作を指示するライト制御信号を出力するリード／ライト制御回路と、を有し、
前記演算回路は、前記リードモディファイライト命令の実行開始に伴い前記リード命令と共にリードモディファイライト信号を出力し、その後、前記ライト命令と共に前記アクセス制御回路に対して出力する被保存データのデータ幅を示すデータサイズ信号を出力し、
前記ＲＭＷフラグレジスタは、前記リードモディファイライト信号を受信し、前記フラグ値を有効状態とし、
前記リード／ライト制御回路は、前記ライト命令の受信時に、前記データサイズ信号が前記データバスのデータ幅よりも小さく、かつ、前記フラグ値が有効状態であれば、前記ライト命令に応じて前記リード制御信号を出力することなく、前記ライト制御信号を出力する請求項１０乃至１２のいずれか１項に記載のメモリコントローラ。
【請求項１４】
前記リード／ライト制御回路は、前記ライト命令の受信時に、前記データサイズ信号が前記データバスのデータ幅よりも小さな値を示し、かつ、前記フラグ値が無効状態であれば、前記ライト命令に応じて前記リード制御信号を出力し、その後前記ライト制御信号を出力する請求項１３に記載のメモリコントローラ。
【請求項１５】
前記アクセス制御回路は、
前記演算回路が出力するアドレス信号及び前記被保存データのデータ幅を示すデータサイズ信号を受け、データのマージ処理の対象となるデータ位置を示す選択信号を出力するデータセレクト制御回路と、
前記リードデータを格納するリードデータバッファと、
前記部分データ又は前記被保存データを格納するライトデータバッファと、
前記リードデータバッファから読み出したデータと前記ライトデータバッファから読み出したデータとを前記選択信号に応じてマージし、前記ライトデータを生成するデータマージ回路と、
を有する請求項１０乃至１４のいずれか１項に記載のメモリコントローラ。
【請求項１６】
前記リードデータバッファ及びライトデータバッファは、それぞれ前記データバスのデータ幅よりも小さなデータ幅で定義される格納データ幅で格納するデータを分割し、分割したデータ単位でデータの入出力を行う請求項１５に記載のデータ処理装置。
【請求項１７】
前記データマージ回路は、前記選択信号が有効状態を示す部分に相当する前記ライトデータとして前記ライトデータバッファのデータを選択し、前記選択信号が無効状態を示す部分に相当する前記ライトデータとして前記リードデータバッファのデータを選択する請求項６に記載のメモリコントローラ。
【請求項１８】
演算回路と前記演算回路からのアクセスを受けるメモリとの間のアクセス制御方法であって、
前記演算回路から出力されるリード命令に基づき前記メモリから読み出したリードデータを前記演算回路に送信し、
前記演算回路から部分データとして出力される前記リードデータの一部に変更を加えたデータ及びライト命令を受信し、
前記ライト命令が直前に出力された前記リード命令に基づき出力された命令であることを検知し、
前記ライト命令の直前に出力された前記リード命令に基づき読み出された前記リードデータと前記部分データとに基づき前記メモリに対するライトデータを生成するアクセス制御方法。
【請求項１９】
前記部分データは、前記演算回路と前記メモリとの間のデータバスのデータ幅よりも小さなデータ幅を有し、
前記ライトデータは、前記リードデータの一部を前記部分データに置き換えて生成される請求項１８に記載のアクセス制御方法。
【請求項２０】
前記演算回路から他の命令とは独立したライト命令と、前記部分データと、を受信した場合、
前記ライト命令が直前に出力された前記リード命令とは独立した命令であることを検知し、
前記ライト命令に応じて前記メモリからリードデータを読み出し、
その後、前記リードデータの一部を前記部分データに置き換えて前記ライトデータを生成する請求項１８又は１９に記載のアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置、メモリコントローラ及びそのアクセス制御方法に関し、特に演算回路と演算回路からのアクセスを受けるメモリとを有し、メモリが演算回路から出力されるライトデータと、ライトデータに対応するエラー訂正コードと、を関連付けて記憶するデータ処理装置、メモリコントローラ及びそのアクセス制御方法に関する。
【背景技術】
【０００２】
データ処理装置は、演算回路（例えば、ＣＰＵ：Central Processing Unit）とＣＰＵからアクセスを受けるメモリとを有する。そして、ＣＰＵは、メモリに対してアクセスを行うことで各種処理を実行する。ここで、近年の半導体装置においては、半導体素子の微細化が進み、メモリの容量が増大している。しかしながら、メモリが大容量になることで、製造工程あるいは使用期間中における素子不良の発生率が高まっている。メモリにおいて不良素子が発生した場合、正確なデータの保持を行うことができない。このような不正確なデータに基づきＣＰＵが動作した場合、データ処理装置に誤動作が発生する問題がある。
【０００３】
そこで、メモリに格納するデータに対してエラー訂正コード（例えば、ＥＣＣ：Error Correcting Code）を付加し、メモリからデータと共にエラー訂正コードを読み出してデータのエラー訂正を行うことが行われている。このようなエラー訂正を行うことで、ある程度の個数の素子不良をメモリが含む場合であっても、メモリを素子不良のないメモリと同等に扱うことができる。
【０００４】
また、ＣＰＵとメモリは、一般的に所定のバス幅を有するデータバスを介して接続される。そして、ＣＰＵは、バス幅の範囲内のデータ幅のデータをメモリと送受信する。例えば、バス幅が３２ビットである場合、ＣＰＵがメモリとの間で送受信できるデータの最大データ幅は３２ビット（以下、３２ビットのデータ幅を１ワードと称す）となる。しかしながら、ＣＰＵは必ずワード単位でメモリとの間でデータの送受信を行うわけではなく、実行するプログラムに応じてハーフワード（データ幅が１６ビットのデータ）やバイト（データ幅が８ビットのデータ）の単位でメモリとの間でデータの送受信を行う。
【０００５】
このようなデータ処理装置においてエラー訂正コードを用いたエラー訂正を行うためには、エラー訂正コードを送受信されるデータの最小単位ごとに生成することが行われる。しかしながら、最小単位のデータに対してエラー訂正コードを生成した場合、メモリの記憶容量に占めるエラー訂正コードの比率が高くなり、メモリの記憶容量を有効に利用できない問題がある。例えば、８ビットのデータに対するエラー訂正コードは５ビットのデータ幅を有する。この場合、メモリの記憶容量のうち４０％程度がエラー訂正コードのために利用されることになる。これに対して、エラー訂正コードを１ワード単位で生成した場合、エラー訂正コードのデータ幅は７ビットとなる。つまり、エラー訂正コードをより大きなデータの単位に対して生成した方がデータ量を抑制できる。
【０００６】
そこで、ＣＰＵとメモリとの間で送受信されるデータのデータ幅に関わらずエラー訂正コードを１ワード単位で生成するメモリシステム１００が特許文献１に開示されている。メモリシステム１００のブロック図を図７に示す。図７に示すようにメモリシステム１００は、メモリ１０１、ＣＰＵ１０２、書き込み制御回路１１０、読み込み制御回路１１１、読み出し要否判定回路１１２、誤り訂正回路１３２を有する。また、誤り訂正回路１３２は、バス制御回路１０４ａ、１０４ｂ、ラッチ回路１０５、パーシャルライト制御回路１０６、セレクタ１０７ａ〜１０７ｄ、訂正コード生成回路１０８、エラー検出訂正回路１０９を有する。メモリシステム１００では、ＣＰＵ１０２とメモリ１０１は、３２ビットのデータ幅のバスで接続される。つまり、ＣＰＵ１０２とメモリ１０１は、３２ビットを１ワードとする。
【０００７】
ここで、図８にメモリシステム１００が８ビット又は１６ビットのデータ幅を有するデータをメモリに書き込む場合におけるメモリシステム１００の動作を示すタイミングチャートを示す。図８に示すように、８ビット、１６ビットの書き込みのときは、まず、読み出し要否判定回路１１２がデータサイズ信号に基づき読み込み制御回路１１１に対して読み出し信号ＯＥ−Ｎを出力するように指示する。この読み出し信号ＯＥ−Ｎに基づきメモリ１０１から被保存データが出力される。その後、書き込み制御回路１１０から書き込み信号ＷＥ−Ｎが出力される。そして、メモリ１０１に入力データが書き込まれる。すなわち、メモリシステム１００は、最初の読み出し動作においてメモリ１０１からデータＤｒとエラー訂正コードＥＣＣを読み出し、エラー検出訂正回路１０９によってデータＤｒ'を生成する。そして、次の書き込み動作において、パーシャルライト制御回路１０６が選択したセレクタに入力されるデータＤｐ（ＣＰＵ１０２から出力されたライトデータ）と、パーシャルライト制御回路１０６が選択しなかったセレクタに入力されるデータＤｒ'と、によりメモリ１０１に入力される入力データＤＷを生成する。次いで、この入力データＤＷに対してエラー訂正コードＥＣＣを生成する。その後、このエラー訂正コードＥＣＣと入力データＤＷとともにメモリ１０１に書き込む。
【０００８】
一方、図９に１ワードのデータをメモリ１０１に書き込む場合におけるメモリシステム１００の動作を示すタイミングチャートを示す。１ワードでデータを書き込む場合、読み出し要否判定回路１１２は、読み込み制御回路１１１に読み出し信号ＯＥ−Ｎの出力を行わないように指示する。そして。ＣＰＵ１０２から出力されたデータＤｐがバス制御回路１０４ａに達した時点で読み込み制御回路１１０が書き込み信号ＷＥ−Ｎを出力する。その後、データＤｐは、メモリ１０１に対する入力データとしてメモリ１０１に書き込まれる。
【０００９】
メモリシステム１００では、１ワードのデータの書き込み時には、事前にメモリ１０１からデータを読み出すことなくＣＰＵ１０２が出力したデータＤｐを書き込む。これにより、メモリシステム１００は、１ワードのデータ書き込み時のアクセス時間を削減する。
【特許文献１】特開平１１−１９４９７５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
マイコン等のデータ処理装置では、メモリから読み出したデータに修正を加えて、その修正部分のデータのみをメモリに書き戻すリードモディファイライト命令が実装されることがある。このリードモディファイライト命令が実装されるデータ処理装置において、エラー訂正コードのデータ量を削減するためには、書き戻し動作において８ビット又は１６ビットのデータ幅のデータ（例えば、修正後のデータ）を含む１ワードのデータを生成する必要がある。
【００１１】
ここで、リードモディファイライト命令が実装されるデータ処理装置に特許文献１の書き込み処理の手順を適用することを考える。この場合、データ処理装置は、書き戻し動作は、特許文献１における８ビット又は１６ビットのデータ幅のデータの書き込み動作に相当する。つまり、リードモディファイライト命令における書き戻し動作では、書き戻し動作の前に実行されるリード動作とは別に書き戻し動作用のリード動作を行が行われ、その後に修正後のデータのメモリに対する書き込みが行われる。
【００１２】
そのため、リードモディファイライト命令が実装されるデータ処理装置に特許文献１の書き込み手順を適用しても、アクセス時間を短縮できる１ワードでの書き込み動作の発生頻度が低い場合、アクセス時間を十分に短縮できない問題がある。
【課題を解決するための手段】
【００１３】
本発明にかかるデータ処理装置の一態様は、所定のデータ幅のデータで入出力を行うメモリと、リード命令又はライト命令を出力して前記メモリに対してアクセスを行う演算回路と、前記演算回路から前記ライト命令と前記ライト命令に関連付けられた前記所定のデータ幅よりも小さなデータ幅の部分データとを受けた場合に、前記メモリから読み出した第１のリードデータの一部を前記部分データに置き換えて前記メモリに対するライトデータを出力するアクセス制御回路と、を有し、前記アクセス制御回路は、前記ライト命令が前記ライト命令よりも前に出力されたリード命令に対応して出力されたものである場合は、前記第１のリードデータに代えて以前に出力された前記リード命令に応じてすでに取得されている第２のリードデータの一部を前記部分データに置き換えて前記ライトデータを出力するものである。
【００１４】
本発明にかかるメモリコントローラの一態様は、演算回路から出力されるリード命令又はライト命令を受けてメモリに対するアクセスを制御するメモリコントローラであって、前記ライト命令が前記ライト命令の直前に受けた前記リード命令に基づく命令であることを検知した場合、前記ライト命令の直前に受けた前記リード命令に基づき前記メモリから取得したリードデータ、及び、前記ライト命令に対応して前記演算回路から出力される部分データに基づき前記メモリに対するライトデータを出力するアクセス制御回路と、前記ライトデータの全体に対するエラー訂正コードを生成して、前記メモリに対して前記ライトデータ及び前記エラー訂正コードを出力するエラー訂正回路と、を有するものである。
【００１５】
本発明にかかるアクセス制御方法の一態様は、演算回路と前記演算回路からのアクセスを受けるメモリとの間のアクセス制御方法であって、前記演算回路から出力されるリード命令に基づき前記メモリから読み出したリードデータを前記演算回路に送信し、前記演算回路から部分データとして出力される前記リードデータの一部に変更を加えたデータ及びライト命令を受信し、前記ライト命令が直前に出力された前記リード命令に基づき出力された命令であることを検知し、前記ライト命令の直前に出力された前記リード命令に基づき読み出された前記リードデータと前記部分データとに基づき前記メモリに対するライトデータを生成するものである。
【００１６】
本発明にかかるデータ処理装置、メモリコントローラ及びそのアクセス制御方法は、演算回路から出力されるライト命令が、直前のリード命令に基づくものであり、かつ、所定のデータ幅よりも小さなデータ幅を有する部分データの書き込み指示である場合に、特に有効である。本発明では、このような場合、メモリへの読み出し動作を行うことなく、直前のリード命令に基づきすでに取得されているリードデータの一部を部分データに置き換えてメモリに書き込むべきライトデータを生成する。このような動作により、本発明にかかるデータ処理装置、メモリコントローラ及びそのアクセス制御方法では、部分データの書き込み動作を行う場合においてメモリに対する読み出し動作を行うことなく、部分データを含むリードデータと同じデータ幅のライトデータを生成することができる。
【発明の効果】
【００１７】
本発明のデータ処理装置、メモリコントローラ及びそのアクセス制御方法によれば、部分データの書き込み動作において、部分データを含むリードデータと同じデータ幅のライトデータを生成しながら、演算回路とメモリとの間のアクセス時間を短縮することができる。
【発明を実施するための最良の形態】
【００１８】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。本実施の形態にかかるデータ処理装置のブロック図を図１に示す。図１に示すように、データ処理装置は、演算回路（例えば、ＣＰＵ：Central Processing Unit）１０、メモリ２０、メモリコントローラ３０を有する。なお、本実施の形態では、ＣＰＵ１０とメモリ２０は、１ワード（３２ビット）のバス幅を有するデータバスで接続されるものとする。そして、メモリ２０は、入出力するライトデータ及びリードデータを所定のデータ幅（例えば、データバスのバス幅と同じデータ幅）を一つの制御単位として扱うものとする。一方、ＣＰＵ１０は、実行するプログラムに応じて８ビット（バイト）、１６ビット（ハーフワード）、３２ビット（ワード）のデータ幅を有する被保存データ（以下、ライトデータと称す）を出力するものとする。メモリコントローラ３０は、ＣＰＵ１０とメモリ２０との間に設けられ、ＣＰＵ１０とメモリ２０との間のアクセスを制御するものとする。なお、ライトデータのうちデータバスのデータ幅よりも小さなデータ幅を有するデータを部分データと称す。
【００１９】
ＣＰＵ１０は、図示しない記憶装置からプログラムを読み出し、読み出したプログラムに応じて各種処理を実行する。また、ＣＰＵ１０は、実行するプログラムに応じてメモリ２０へのアクセスを行う。ＣＰＵ１０は、メモリ２０へのアクセス処理において、クロック信号ＣＬＫ、アドレス信号ＡＤＤ、ストローブ信号ＳＴＢ、リードライト制御信号ＲＷＣ、データサイズ信号ＤＳ、リードモディファイライト信号ＲＭＷ、ライトデータＷＤａを送信し、メモリコントローラ３０からリードデータＲＤｂ及びエラー信号ＥＲＲを受信する。なお、リードライト制御信号ＲＷＣは、ＣＰＵ１０がメモリ２０に対してライト命令を行う場合は書き込み指示状態（例えば、ロウレベル）となり、ＣＰＵ１０がメモリ２０に対してリード命令を行う場合は読み出し指示状態（例えば、ハイレベル）となる。
【００２０】
また、ＣＰＵ１０は、リードモディファイライト命令が実装されるものとする。リードモディファイライト命令は、ＣＰＵ１０において実行されるプログラムに応じて生じる命令である。リードモディファイライト命令が実行されると、ＣＰＵ１０は、まずリード動作を行い、所定のアドレスに格納されたデータを読み出し、読み出したデータに対して修正を加え、書き込み動作により修正したデータのみをメモリ２０に書き戻す。ＣＰＵ１０においてリードモディファイライト命令が実行された場合、ＣＰＵ１０はリード動作とライト動作において同じアドレスにアクセスを行う。また、ＣＰＵ１０がメモリ２０に書き戻すデータは、リードデータの一部分のみのデータとなる。
【００２１】
メモリ２０は、ＣＰＵ１０からの命令に応じてライトデータＷＤｂの格納及びリードデータＲＤａの出力を行う。このとき、メモリ２０は、ライトデータＷＤｂに対応してメモリコントローラ３０が生成したエラー訂正コードＥＣＣをライトデータＷＤｂに関連付けて格納する。また、メモリ２０は、ＣＰＵ１０から読み出しの指示がなされた場合、リードデータＲＤａと共にリードデータＲＤａと関連付けられたエラー訂正コードＥＣＣを出力する。なお、エラー訂正コードＥＣＣは、メモリコントローラ３０とメモリ２０とを接続するローカルバスを介して伝送されるものとする。
【００２２】
メモリコントローラ３０は、ＣＰＵ１０が出力するリードライト制御信号ＲＷＣ、ストローブ信号、データサイズ信号ＤＳ、リードモディファイライト信号ＲＭＷに基づきＣＰＵ１０とメモリ２０との間で行われるデータの送受信を制御する。なお、ＣＰＵ１０が出力するアドレス信号ＡＤＤ及びクロック信号ＣＬＫは、メモリコントローラ３０を介さずに直接メモリ２０に与えられる。また、ＣＰＵ１０が出力するクロック信号ＣＬＫは、メモリコントローラ３０にも与えられ、メモリコントローラ３０はクロック信号ＣＬＫを動作クロックとして動作する。ＰＵメモリコントローラ３０は、アクセス制御回路３１、訂正コード生成回路３２、エラー検出訂正回路３３を有する。
【００２３】
訂正コード生成回路３２は、アクセス制御回路３１からライトデータＷＤｂを受信して、受信したライトデータＷＤｂに対応したエラー訂正コードＥＣＣを生成する。そして、訂正コード生成回路３２は、ライトデータＷＤｂ及びエラー訂正コードＥＣＣをメモリ２０に出力する。エラー検出訂正回路３３は、メモリ２０からリードデータＲＤａ及びリードデータＲＤａに対応したエラー訂正コードＥＣＣを読み出す。そして、エラー検出訂正回路３３は、エラー訂正コードＥＣＣに基づきリードデータＲＤａにおける誤りの検出と誤りの訂正を行う。その後エラー検出訂正回路３３は、誤り訂正後のリードデータＲＤｂをＣＰＵ１０に対して出力する。このときエラー検出訂正回路３３は、リードデータＲＤａをエラー訂正コードＥＣＣによって訂正できない場合はエラー信号ＥＲＲを誤り発生状態として、リードデータＲＤａに訂正できていない誤りが存在することをＣＰＵ１０に通知する。
【００２４】
アクセス制御回路３１は、ＣＰＵ１０からリードライト制御信号ＲＷＣを受けて、メモリ２０に対するリード制御信号ＯＥ又はライト制御信号ＷＥを出力する。また、アクセス制御回路３１は、ＣＰＵ１０から受信したストローブ信号ＳＴＢをメモリ２０に出力する。アクセス制御回路３１が出力するストローブ信号ＳＴＢは、訂正コード生成回路３２が出力するライトデータＷＤｂ及びエラー訂正コードＥＣＣに同期した信号である。さらに、アクセス制御回路３１は、ＣＰＵ１０から受信したライトデータＷＤａをライトデータＷＤｂとして訂正コード生成回路３２に対して出力する。ここで、ＣＰＵ１０が１ワードのライトデータＷＤａを出力した場合には、ライトデータＷＤｂはライトデータＷＤａと同じものとなる。一方、ＣＰＵ１０が１バイト又は１ワードのライトデータＷＤａを出力した場合には、ライトデータＷＤｂは、以前に読み出されたリードデータＲＤｂの一部をライトデータＷＤａと置き換えたものとなる。メモリコントローラ３０は、ライトデータＷＤａのデータ幅を示すデータサイズ信号ＤＳに基づきこの置き換え動作を行う。以下ではアクセス制御回路３１について更に詳細に説明する。
【００２５】
アクセス制御回路３１は、リード／ライト制御回路４１、ＲＭＷフラグレジスタ４２、データセレクト制御回路４３、ライトデータバッファ４４、データマージ回路４５、リードデータバッファ４６を有する。
【００２６】
リード／ライト制御回路４１は、ＣＰＵ１０から出力されるストローブ信号ＳＴＢの同期タイミングを、メモリコントローラ３０が出力するライトデータＷＤｂに応じたものに変換して出力する。また、リード／ライト制御回路４１は、ＣＰＵから出力されるリードライト制御信号ＲＷＣに応じてリード制御信号ＯＥ又はライト制御信号ＷＥを出力する。リードライト制御信号ＲＷＣが読み出し指示状態である場合、リード／ライト制御回路４１は、リード制御信号ＯＥを出力する。一方、リードライト制御信号ＲＷＣが書き込み指示状態である場合、リード／ライト制御回路４１はデータサイズ信号ＤＳ及びＲＭＷフラグレジスタ４２の値を参照してリード制御信号ＯＥ又はライト制御信号ＷＥを出力する。より具体的には、リード／ライト制御回路４１は、ＲＭＷフラグレジスタの値が有効であることを示し、かつ、データサイズ信号ＤＳがワード以外値を示す場合、ライト制御信号ＷＥのみを出力する。また、リード／ライト制御回路４１は、ＲＭＷフラグレジスタの値が無効であることを示し、かつ、データサイズ信号ＤＳがワード以外値を示す場合、リード制御信号ＯＥを出力後にライト制御信号ＷＥを出力する。さらに、リード／ライト制御回路４１は、ＲＭＷフラグレジスタの値に関わらず、データサイズ信号ＤＳがワードを示す値である場合、ライト制御信号ＷＥのみを出力する。
【００２７】
ＲＭＷフラグレジスタ４２は、ＲＭＷフラグの値を格納する。ＲＭＷフラグは、リードモディファイライト信号ＲＭＷがＣＰＵ１０においてリードモディファイライト命令が実行されていることを示す場合に有効状態となる。一方、リードモディファイライト信号ＲＭＷがＣＰＵ１０においてリードモディファイライト命令以外の命令が実行されていることを示す場合にＲＭＷフラグは無効状態にとなる。ＲＭＷフラグレジスタ４２は、ＣＰＵ１０からストローブ信号ＳＴＢとリードライト制御信号ＲＷＣを受けて、ＲＭＷフラグの状態を切り替える。
【００２８】
データセレクト制御回路４３は、アドレス信号ＡＤＤ及びデータサイズ信号ＤＳに基づき選択信号をデータマージ回路４５に出力する。データマージ回路４５は、この選択信号に基づきデータのマージ処理を行い、ライトデータＷＤｂを生成する。本実施の形態における選択信号は、複数の信号から構成される。本実施の形態では、ＣＰＵ１０が出力する最小のデータ幅の単位はバイト（８ビット）単位であり、最大のデータ幅の単位はワード（３２ビット）単位である。そのため、本実施の形態の選択信号は４つの選択信号により構成される。データセレクト制御回路４３は、データサイズ信号ＤＳがワード以外の値を示す場合、アドレス信号ＡＤＤに応じた少なくとも一つ選択信号（例えば、アドレス信号ＡＤＤにより指定されているデータの位置に該当する選択信号）を無効にする。また、データセレクト制御回路４３は、データサイズ信号ＤＳがワードを示す値である場合にはすべての選択信号を有効にする。
【００２９】
ライトデータバッファ４４は、ＣＰＵ１０が出力するライトデータＷＤａを格納する。本実施の形態では、ライトデータバッファ４４は、複数のセグメント（図１のＷＤ１〜ＷＤ４）に分割され、各セグメントは１バイト（８ビット）のデータを格納する。図１に示す例では、セグメントＷＤ１はライトデータＷＤａの１〜８ビット目のデータを格納し、セグメントＷＤ２はライトデータＷＤａの９〜１６ビット目のデータを格納し、セグメントＷＤ３はライトデータＷＤａの１７〜２４ビット目のデータを格納し、セグメントＷＤ４はライトデータＷＤａの２４〜３６ビット目のデータを格納する。
【００３０】
リードデータバッファ４６は、エラー検出訂正回路３３によって訂正されたリードデータＲＤｂを格納する。本実施の形態では、リードデータバッファ４６は、複数のセグメント（図１のＲＤ１〜ＲＤ４）に分割され、各セグメントは１バイト（８ビット）のデータを格納する。図１に示す例では、セグメントＲＤ１はリードデータＲＤａの１〜８ビット目のデータを格納し、セグメントＲＤ２はリードデータＲＤａの９〜１６ビット目のデータを格納し、セグメントＷＤ３はリードデータＲＤａの１７〜２４ビット目のデータを格納し、セグメントＷＤ４はリードデータＲＤａの２４〜３６ビット目のデータを格納する。
【００３１】
データマージ回路４５は、複数のセレクタを有する。複数のセレクタは、それぞれライトデータバッファ４４又はリードデータバッファ４６セグメントに対応して設けられる。また、複数のセレクタには、それぞれ一つの選択信号が入力される。そして、各セレクタは、選択信号が有効であれば、ライトデータバッファ４４に格納されたデータを選択し、選択信号が無効であれば、リードデータバッファ４６に格納さえたデータを選択する。データマージ回路４５は、選択信号に基づき各セレクタが選択したデータによりデータのマージを行い、ライトデータＷＤｂを生成する。
【００３２】
続いて、本実施の形態にかかるメモリコントローラ３０の動作について説明する。図２にメモリコントローラ３０の動作を示すフローチャートを示す。なお、図２に示すフローチャートは、データ処理装置１はすでに起動済みである状態を示すものとする。
【００３３】
図２に示すように、メモリコントローラ３０は、ＣＰＵ１０からアクセス要求（リードライト制御信号ＲＷＣ等の信号）を受信すると処理を開始する（ステップＳ１）。メモリコントローラ３０は、アクセス要求のうちリードライト制御信号ＲＷＣを参照して、ＣＰＵ１０からの要求がリード動作であるかライト動作であるかを判断する（ステップＳ２）。
【００３４】
ステップＳ２において、リードライト制御信号ＲＷＣがハイレベル（読み出し指示状態）であれば、メモリコントローラ３０は、ＣＰＵ１０からのアクセス要求が読み出し動作であると判断する（ステップＳ２のＹｅｓ）。この場合、メモリコントローラ３０は、リードモディファイライト信号ＲＭＷを参照して、ＣＰＵ１０において実行されている命令がリードモディファイライト命令であるか否かを判断する（ステップＳ３）。ステップＳ３において、リードモディファイライト信号ＲＭＷがハイレベルであれば（ステップＳ３のＹｅｓ）、メモリコントローラ３０は、ＲＭＷフラグをセットする（"１"とする）（ステップＳ４）。一方、ステップＳ３において、リードモディファイライト信号ＲＭＷがロウレベルであれば（ステップＳ３のＮｏ）、ＲＭＷフラグをセットせずに次のステップに進む。
【００３５】
ステップＳ３又はステップＳ４の動作が完了すると、メモリコントローラ３０は、メモリ２０からリードデータＲＤａを読み出す（ステップＳ５）。その後、リードデータＲＤａは、エラー検出訂正回路３３においてエラー訂正処理が行われる。エラー検出訂正回路３３から出力されるリードデータＲＤｂは、リードデータバッファ４６に格納される（ステップＳ６）。また、メモリコントローラ３０は、リードデータＲＤｂをＣＰＵ１０に送信する（ステップＳ７）。ステップＳ７の処理が完了した後、メモリコントローラ３０は、再度ＣＰＵ１０からのアクセス要求を待つ。
【００３６】
一方、ステップＳ２において、リードライト制御信号ＲＷＣがロウレベル（書き込み指示状態）であれば、メモリコントローラ３０は、ＣＰＵ１０からのアクセス要求が書き込み動作であると判断する（ステップＳ２のＮｏ）。この場合、メモリコントローラ３０は、ＣＰＵ１０から出力されるライトデータＷＤａをライトデータバッファ４４に格納する（ステップＳ８）。そして、ＲＭＷフラグの値が"１"であるか否かを判定する（ステップＳ９）。
【００３７】
ステップＳ９においてＲＭＷフラグの値が"１"と判断された場合（ステップＳ９のＹｅｓ）、メモリコントローラ３０のリード／ライト制御回路４１は、その後に行われる書き込み動作のためにライト制御信号ＷＥを出力する。また、メモリコントローラ３０は、ＲＭＷフラグをリセットする（"０"にする）（ステップＳ１４）。その後、メモリコントローラ３０のデータセレクト制御回路４３はマージの対象となるデータの位置を指示す選択信号を出力する。そして、データマージ回路４５は選択信号に基づきデータのマージ処理を行う（ステップＳ１５）。なお、本実施の形態では、ＣＰＵ１０においてリードモディファイライト命令が実行された場合（例えば、ＲＭＷフラグが"１"である場合）、ＣＰＵ１０が１バイトあるいはハーフワードのデータ幅を有するライトデータＷＤａを出力するものとした。そのため、ＲＭＷフラグが"１"である場合、ステップＳ１６のマージ処理が行われる。このステップＳ１６のマージ処理において用いられるデータはＲＭＷフラグをセットする処理（ステップＳ４）の処理の直後に行われたリード動作（ステップＳ５）で読み出されたリードデータＲＤｂとその後にＣＰＵ１０から出力されたライトデータＷＤａを用いて行われる。従って、ステップＳ９においてＲＭＷフラグが"１"であった場合、メモリコントローラ３０は、ライト動作の指示の後にリード動作を行うことなくステップＳ１６のマージ処理を行う。
【００３８】
ここで、ステップＳ１４のマージ処理について説明する。マージ処理の手順を示すフローチャートを図３に示す。本実施の形態にかかるメモリコントローラ３０は、１ワードのデータをバイト単位でライトデータバッファ４４及びリードデータバッファ４６に格納する。そして、データマージ回路４５は、ライトデータバッファ４４及びリードデータバッファ４６からバイト単位でデータを読み出し、バイト単位でライトデータを用いるかリードデータを用いるかを選択することでデータのマージ処理を行う。このとき、データマージ回路４５は、バイト単位に設けられたセレクタを並列動作させることでマージ処理を行う。従って、図３に示すマージ処理では、１バイトのマージを行うステップＳ２０〜ステップＳ２３、ステップＳ３０〜ステップＳ３３、ステップＳ４０〜ステップＳ４３及びステップＳ５０〜ステップＳ５３が並列的に実行される。なお、ステップＳ２０〜ステップＳ２３はライトデータのうち２５ビット目から３２ビット目のデータに対するマージ処理であり、ステップＳ３０〜ステップＳ３３ライトデータのうち１７ビット目から２４ビット目のデータに対するマージ処理であり、ステップＳ４０〜ステップＳ４３ライトデータのうち９ビット目から１６ビット目のデータに対するマージ処理であり、及びステップＳ５０〜ステップＳ５３はライトデータのうち１ビット目から８ビット目のデータに対するマージ処理である。
【００３９】
ステップＳ２０〜ステップＳ２３、ステップＳ３０〜ステップＳ３３、ステップＳ４０〜ステップＳ４３及びステップＳ５０〜ステップＳ５３は、実質的に同じ動作であるため、ここではステップＳ２０〜Ｓ２３を例にマージ処理について説明する。
【００４０】
まず、データマージ回路４５は、ステップＳ２０においてライトデータが有効であるか否かを判断する。より具体的にはステップＳ２０では、２５ビット目から３２ビット目のライトデータに対応するセレクタに入力される選択信号が有効状態であるか無効状態であるかライトデータの有効性を判断する。ステップＳ２０においてライトデータが有効であると判断された場合（ステップＳ２０のＹｅｓ）、ステップＳ２１においてセレクタは、ライトデータバッファ４４に格納されているライトデータを選択して出力する。一方、ステップＳ２０においてライトデータが無効であると判断された場合（ステップＳ２０のＮｏ）、ステップＳ２２においてセレクタは、リードデータバッファ４６に格納されているリードデータを選択して出力する。そして、データマージ回路４５は、ステップＳ２１又はステップＳ２２において選択されたデータをライトデータＷＤｂのうち２５ビット目から３２ビット目のデータとして出力する。データマージ回路４５は、このようにしてバイト単位でマージ処理されたライトデータは、その後合成され、メモリ２０に書き込むべきライトデータＷＤｂ（３２ビット（１ワード）のデータ）となる。
【００４１】
上記のステップＳ１４のマージ処理が完了すると、メモリコントローラ３０は、訂正コード生成回路３２によって生成されたエラー訂正コードＥＣＣと共に、ライトデータＷＤｂをメモリ２０に書き込む（ステップＳ１３）。ステップＳ１３の処理が完了した後、メモリコントローラ３０は、再度ＣＰＵ１０からのアクセス要求を待つ。
【００４２】
また、図２のステップＳ９においてＲＭＷフラグの値が"０"と判断された場合（ステップＳ９のＮｏ）、メモリコントローラ３０のリード／ライト制御回路４１は、データサイズ信号ＤＳを参照して、データサイズ信号ＤＳがワード（３２ビット）を示すものであるか否かを判断する（ステップＳ１０）。ステップＳ１０において、データサイズ信号ＤＳがワードを示す場合（ステップＳ１０のＹｅｓ）、リード／ライト制御回路４１はライト制御信号ＷＥを出力する。そして、メモリコントローラ３０は、ＣＰＵ１０から出力されたライトデータＷＤａに対してマージ処理（ステップＳ１５）を行わずにライトデータＷＤａをそのままライトデータＷＤｂとし、メモリ２０に書き込む（ステップＳ１３）。なお、この場合においても、ライトデータＷＤｂと共にエラー訂正コードＥＣＣが生成され、メモリ２０にはライトデータＷＤｂとエラー訂正コードＥＣＣが書き込まれる。ステップＳ１３の処理が完了した後、メモリコントローラ３０は、再度ＣＰＵ１０からのアクセス要求を待つ。
【００４３】
一方、ステップＳ１０において、データサイズ信号ＤＳがワード以外のデータサイズを示す場合（ステップＳ１０のＮｏ）、リード／ライト制御回路４１はリード制御信号ＯＥを出力する。そして、メモリコントローラ３０は、メモリ２０からリードデータを読み出す（ステップＳ１１）。ステップＳ１１で読み出されたリードデータは、リードデータバッファ４６に格納される（ステップＳ１２）。その後、メモリコントローラ３０のデータマージ回路４５は、ステップＳ１２でリードデータバッファ４６に格納されたリードデータＲＤｂとステップＳ８でライトデータバッファ４４に格納されたライトデータＷＤａとに対してマージ処理を行い、ライトデータＷＤｂを生成する（ステップＳ１５）。そして、メモリコントローラ３０は、ステップＳ１５において生成されたライトデータＷＤｂをメモリ２０に書き込む（ステップＳ１３）。なお、この場合においても、ライトデータＷＤｂと共にエラー訂正コードＥＣＣが生成され、メモリ２０にはライトデータＷＤｂとエラー訂正コードＥＣＣが書き込まれる。ステップＳ１３の処理が完了した後、メモリコントローラ３０は、再度ＣＰＵ１０からのアクセス要求を待つ。
【００４４】
続いて、タイミングチャートを用いて図２に示すフローに従ったメモリコントローラ３０の動作を説明する。まず、図４にＣＰＵ１０が単純なリード動作（図２のステップＳ１、Ｓ２、Ｓ３、Ｓ５、Ｓ６、Ｓ７）及びライト動作（図２のステップＳ１、Ｓ２、Ｓ８、Ｓ９、Ｓ１０、Ｓ１３、Ｓ１４）を行った場合におけるメモリコントローラ３０のタイミングチャートを示す。
【００４５】
図４に示す例では、タイミングＴ０〜Ｔ２の区間でＣＰＵ１０からの読み出し指示に基づくリード動作が行われ、タイミングＴ２〜Ｔ４の区間でＣＰＵ１０から書き込み指示に基づくライト動作が行われるものとする。図４に示す例においてクロック信号ＣＬＫは、ＣＰＵ１０がメモリ２０に対してアクセスを行っている間出力され続けられているものとする。また、図４に示す例では、ＣＰＵ１０において実行される命令が単純なリード命令及びライト命令であるため、リードモディファイライト信号ＲＭＷ及びＲＭＷフラグはロウレベル（例えば"０"）を維持する。さらに、データサイズ信号ＤＳはタイミングＴ０〜Ｔ４の間ワードを示す値を維持するものとする。
【００４６】
まず、リード動作が開始されるタイミングＴ０でＣＰＵ１０から出力されるリードライト制御信号ＲＷＣがロウレベルからハイレベルになり、メモリコントローラ３０に読み出し指示を与える。また、ＣＰＵ１０は、タイミングＴ０においてアクセス対象のアドレスとしてアドレス１を出力する。さらに、ＣＰＵ１０は、タイミングＴ０でのアクセス開始に伴いストローブ信号ＳＴＢをハイレベルとする。そして、ＣＰＵ１０からの信号を受信したメモリコントローラ３０は、リードライト制御信号ＲＷＣ、ＲＭＷフラグ及びデータサイズ信号ＤＳの値に基づきリード制御信号ＯＥをハイレベルとする。
【００４７】
そして、タイミングＴ１においてメモリコントローラ３０は、メモリ２０から読み出し対象となっているデータをリードデータＲＤａ（図４では各バイトの値をＡ、Ｂ、Ｃ、ｄで示す。）として受信する。その後、メモリコントローラ３０は、リードデータＲＤａに対してエラー訂正処理を行い、訂正後のデータをリードデータＲＤｂとしてＣＰＵ１０に送信する。なお、タイミングＴ１でリードライト制御信号ＲＷＣ及びストローブ信号ＳＴＢは立ち下がりロウレベルとなる。
【００４８】
続いて、ライト動作が開始されるタイミングＴ２では、ＣＰＵ１０はリードライト制御信号ＲＷＣをロウレベルに維持したままストローブ信号ＳＴＢを立ち上げる。これにより、ＣＰＵ１０はメモリコントローラ３０に書き込み指示を与える。また、ＣＰＵ１０は、タイミングＴ２においてアクセス対象のアドレスとしてアドレス２を出力する。さらに、ＣＰＵ１０は、タイミングＴ２でのアクセス開始に伴いストローブ信号ＳＴＢをハイレベルとする。そして、ＣＰＵ１０からの信号を受信したメモリコントローラ３０は、リードライト制御信号ＲＷＣ、ＲＭＷフラグ及びデータサイズ信号ＤＳの値に基づきライト制御信号ＷＥをハイレベルとする。また、メモリコントローラ３０は、ＣＰＵ１０から受信したライトデータＷＤａ（図４では各バイトの値をＥ、Ｆ、Ｇ、Ｈで示す。）を受信する。そして、メモリコントローラ３０は、受信したライトデータＷＤａと同じデータをライトデータＷＤｂとして出力し、メモリ２０に対して書き込みを行う。なお、このときライト動作の期間となっているタイミングＴ３〜Ｔ４の期間は特にメモリコントローラ３０の動作は行われない。
【００４９】
次いで、図５にＣＰＵ１０が単純なリード動作（図２のステップＳ１、Ｓ２、Ｓ３、Ｓ５、Ｓ６、Ｓ７）及び１バイトのデータのライト動作（図２のステップＳ１、Ｓ２、Ｓ８、Ｓ９、Ｓ１０、Ｓ１１、Ｓ１２、Ｓ１６、Ｓ１３、Ｓ１４）を行った場合におけるメモリコントローラ３０のタイミングチャートを示す。なお、図５におけるリード動作は、図４に示したリード動作と実質的に同じになるため説明を省略する。
【００５０】
図５に示す例では、タイミングＴ１０〜Ｔ１２の区間でＣＰＵ１０からの読み出し指示に基づくリード動作が行われ、タイミングＴ１２〜Ｔ１６の区間でＣＰＵ１０から書き込み指示に基づくライト動作が行われるものとする。図５に示す例においてクロック信号ＣＬＫは、ＣＰＵ１０がメモリ２０に対してアクセスを行っている間出力され続けられているものとする。また、図５に示す例では、ＣＰＵ１０において実行される命令がリード命令及びライト命令であるため、リードモディファイライト信号ＲＭＷ及びＲＭＷフラグはロウレベル（例えば"０"）を維持する。さらに、データサイズ信号ＤＳはタイミングＴ１０〜Ｔ１２の間ワードを示す値を維持し、タイミングＴ１２〜Ｔ１６はバイトを示す値を維持するものとする。
【００５１】
図５に示すライト動作では、ライト動作が開始されるタイミングＴ１２でＣＰＵ１０はリードライト制御信号ＲＷＣをロウレベルに維持したままストローブ信号ＳＴＢを立ち上げる。これにより、ＣＰＵ１０はメモリコントローラ３０に書き込み指示を与える。また、ＣＰＵ１０は、タイミングＴ１２においてアクセス対象のアドレスとしてアドレス２を出力する。
【００５２】
そして、図５に示す１バイトのデータを書き込む場合、タイミングＴ１２においてＣＰＵ１０からの信号を受信したメモリコントローラ３０は、まずリード制御信号ＯＥをハイレベルとする。そして、タイミングＴ１３においてアドレス２に格納されているリードデータＲＤａを読み出す。タイミングＴ１３で読み出されたデータはリードデータバッファ４６に格納される。
【００５３】
その後、タイミングＴ１４においてメモリコントローラ３０は、ライト制御信号ＷＥをハイレベルとする。また、メモリコントローラ３０は、ＣＰＵ１０から出力された１バイトのライトデータＷＤａ（図５においてＥで示す）とタイミングＴ１３で読み出したリードデータＲＤａとに基づきデータＥを含むライトデータＷＤｂを生成する。そして、データＥを含むライトデータＷＤｂをメモリ２０に書き込む。なお、図５に示す例では、ライト動作においてＣＰＵ１０がタイミングＴ１２〜Ｔ１５の期間にライトデータＷＤａを出力する状態を維持するが、これはメモリコントローラ３０がウェイト信号（不図示）をＣＰＵ１０に出力することで実現される。また、ライト動作の期間となっているタイミングＴ１５〜Ｔ１６の期間は特にメモリコントローラ３０の動作は行われない。
【００５４】
次いで、図６にＣＰＵ１０がリードモディファイライト命令を実行した場合（図２のステップＳ１、Ｓ２、Ｓ３、Ｓ４、Ｓ５、Ｓ６、Ｓ７、Ｓ１、Ｓ２、Ｓ８、Ｓ９、Ｓ１５、Ｓ１６、Ｓ１３、Ｓ１４の処理が実行される）におけるメモリコントローラ３０のタイミングチャートを示す。ＣＰＵ１０においてリードモディファイライト命令が実行された場合、ＣＰＵ１０は一つの命令に対してリード動作とライト動作とを一連の動作として行う。この場合においてもリード動作は、図４に示したリード動作と実質的に同じになるため説明を省略する。
【００５５】
なお、図６に示す例では、タイミングＴ２０〜Ｔ２２の区間でリードモディファイライト命令に基づくリード動作が行われ、タイミングＴ２２〜Ｔ２３の区間でリードモディファイライト命令のモディファイ動作が行われ、タイミングＴ２３〜Ｔ２５の区間でリードモディファイライト命令に基づくライト動作が行われるものとする。図６に示す例においてクロック信号ＣＬＫは、ＣＰＵ１０がメモリ２０に対してアクセスを行っている間出力され続けられているものとする。また、図６に示す例では、リードモディファイライト命令に基づく動作が開始されるタイミングＴ２０でリードモディファイライト信号ＲＭＷがハイレベルとなる。そして、タイミングＴ２１のストローブ信号ＳＴＢの立ち下がりに同期してリードモディファイライト信号ＲＭＷがラッチされＲＭＷフラグがハイレベル（例えば、"１"）となる。ＲＭＷフラグは、リードモディファイライト命令に基づくライト命令に基づくライト動作の開始を示すストローブ信号の立ち下がり（タイミングＴ２４）に同期して"０"に戻される。さらに、本実施の形態におけるリードモディファイライト命令は１バイトのデータを修正して書き戻すものとする。そのため、データサイズ信号ＤＳはタイミングＴ２０〜Ｔ２５の間バイトを示す値を維持するものとする。
【００５６】
図６に示す例では、タイミングＴ２２において、リードモディファイライト命令に基づくリード動作が完了する。そして、タイミングＴ２２〜Ｔ２３の期間にＣＰＵ１０は、読み出したリードデータＲＤｂのうち１バイト分のデータ（例えば、データＤ）に対して修正を行い、データＤｍを生成する。
【００５７】
その後、タイミングＴ２３からリードモディファイライト命令に基づくライト動作を開始する。図６に示すライト動作では、ライト動作が開始されるタイミングＴ２２でＣＰＵ１０はリードライト制御信号ＲＷＣをロウレベルに維持したままストローブ信号ＳＴＢを立ち上げる。これにより、ＣＰＵ１０はメモリコントローラ３０に書き込み指示を与える。また、ＣＰＵ１０は、タイミングＴ２２においてアクセス対象のアドレスとしてタイミングＴ２０〜Ｔ２２と同じアドレス１を出力する。
【００５８】
また、メモリコントローラ３０は、ＲＭＷフラグがハイレベルであるため、データサイズ信号ＤＳがバイトを示す値であっても、リード制御信号ＯＥを出力せずに、ライト制御信号ＷＥを出力する。さらに、メモリコントローラ３０は、タイミングＴ２１〜Ｔ２２においてメモリ２０から読み出されたリードデータＲＤｂのデータＤをライトデータＷＤａに置き換えたライトデータＷＤｂ（図６において、Ａ、Ｂ、Ｃ、Ｄｍで示す）を生成する。そして、メモリコントローラ３０は、データＤｍを含むライトデータＷＤｂをメモリ２０に書き込む。なお、ライト動作の期間となっているタイミングＴ２４〜Ｔ２５の期間は特にメモリコントローラ３０の動作は行われない。
【００５９】
上記説明より、ＣＰＵ１０がリードモディファイライト命令を実行した場合、ＣＰＵ１０は、リードデータを読み出したアドレスに対して修正後のデータを書き戻す動作を行う。このような場合、本実施の形態にかかるメモリコントローラ３０は、ＲＭＷフラグにより、ライド動作の前に行われたリード動作がリードモディファイライト命令に基づき行われたものか否かを判断することができる。そして、メモリコントローラ３０は、ＲＭＷフラグが有効であれば、リードモディファイライト命令に基づくライト動作において、リード動作を行うことなく、修正後のライトデータＷＤａを含むライトデータＷＤｂを生成する。
【００６０】
これにより、本実施の形態にかかるメモリコントローラ３０は、ＣＰＵ１０においてリードモディファイライト命令が実行され、所定のデータ幅（例えば、３２ビット（１ワード））よりも小さなデータ幅（例えば、８ビット（１バイト）又は１６ビット（ハーフワード））を有する部分データを書き込む動作が発生した場合であっても、部分データのライト動作においてリード動作を行うことなく、書き込み対象データである部分データを含む１ワードのデータ幅のライトデータＷＤｂをメモリに書き込むことができる。つまり、本実施の形態にかかるメモリコントローラ３０は、リードモディファイライト命令に基づくライト動作を高速化し、データ処理装置の処理能力を向上させることができる。データ処理装置においてリードモディファイライト命令が実行される頻度が高い場合、本実施の形態にかかるメモリコントローラ３０を実装することによる高速化のメリットは更に顕著なものとなる。
【００６１】
また、本実施の形態にかかるメモリコントローラ３０は、リードモディファイライト命令に起因することなく部分データの書き込みが発生した場合（例えば、図５のタイミングＴ１２〜Ｔ１６の動作）、データサイズ信号ＤＳに基づきリード／ライト制御回路４１がリード動作とライト動作を実行する。つまり、このような場合、メモリコントローラ３０は、まずリード制御信号ＯＥを出力して第１のリードデータを読み出し、第１のリードデータの該当部分を部分データに置き換えて、部分データを含む１ワードのデータ幅のライトデータＷＤｂを生成する。そして、メモリコントローラ３０は、部分データを含む１ワードのデータ幅を有するライトデータＷＤｂをメモリ２０に書き込む。これにより、メモリコントローラ３０は、リードモディファイライト命令以外の命令に基づいて部分データの書き込み動作が発生した場合であっても、部分データを含む１ワードのデータ幅のライトデータＷＤｂをメモリ２０に書き込むことができる。
【００６２】
本実施の形態にかかるメモリコントローラ３０では、部分データのライト動作が、リードモディファイライト命令に基づくものか否かに関わらず、部分データを含むライトデータＷＤｂをメモリ２０に書き込む。そのため、メモリコントローラ３０は、書き込み対象となっているデータのデータ幅によらず、１ワードのライトデータＷＤｂに対してエラー訂正コードＥＣＣを生成することができる。これにより、メモリコントローラ３０は、生成するエラー訂正コードＥＣＣのデータサイズをバイト単位で生成するよりも小さくすることができる。また、エラー訂正コードＥＣＣのデータ量が小さいために、データ処理装置１は、メモリ２０の記憶容量がエラー訂正コードＥＣＣにより圧迫されることなく、ＣＰＵ１０が必要とするデータをメモリ２０に効率的に格納することができる。
【００６３】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、ＣＰＵ１０で実行された命令がリードモディファイライト命令であるか否かを判断する方法は、ＲＭＷフラグを用いた方法以外に、ライト動作に対応したアドレス信号ＡＤＤとライト動作の前の動作において出力されたアドレス信号ＡＤＤとを比較する方法によっても実現することができる。つまり、本発明にかかるアクセス方法を実現するためには、ＣＰＵ１０においてリードモディファイライト命令が実行されているかをメモリコントローラ３０が判断できれば良く、その判断方法はデータ処理装置のシステムに応じて適宜変更することが可能である。
【図面の簡単な説明】
【００６４】
【図１】実施の形態１にかかるデータ処理装置のブロック図である。
【図２】実施の形態１にかかるメモリコントローラの動作を示すフローチャートを示す図である。
【図３】実施の形態１にかかるメモリコントローラにおけるマージ処理の動作を示すフローチャートである。
【図４】実施の形態１にかかるデータ処理装置において１ワードのデータのリード動作及びライト動作が行われた場合のメモリコントローラの動作を示すタイミングチャートである。
【図５】実施の形態１にかかるデータ処理装置において１ワードのデータのリード動作及び部分データのライト動作が行われた場合のメモリコントローラの動作を示すタイミングチャートである。
【図６】実施の形態１にかかるデータ処理装置においてリードモディファイライト命令に基づくリード動作及びライト動作が行われた場合のメモリコントローラの動作を示すタイミングチャートである。
【図７】従来のデータ処理装置のブロック図である。
【図８】従来のデータ処理装置において部分データのライト動作が行われた場合のタイミングチャートである。
【図９】従来のデータ処理装置において１ワードのデータのライト動作が行われた場合のタイミングチャートである。
【符号の説明】
【００６５】
１    データ処理装置
１０    ＣＰＵ
２０    メモリ
３０    メモリコントローラ
３１    アクセス制御回路
３２    訂正コード生成回路
３３    エラー検出訂正回路
４１    リード／ライト制御回路
４２    ＲＭＷフラグレジスタ
４３    データセレクト制御回路
４４    ライトデータバッファ
４５    データマージ回路
４６    リードデータバッファ
ＡＤＤ    アドレス信号
ＣＬＫ    クロック信号
ＤＳ    データサイズ信号
ＥＣＣ    エラー訂正コード
ＥＲＲ    エラー信号
ＲＭＷ    リードモディファイライト信号
ＲＷＣ    リードライト制御信号
ＳＴＢ    ストローブ信号
ＯＥ    リード制御信号
ＷＥ    ライト制御信号
Ａ〜Ｆ、Ｄｍ    バイト単位のデータ
ＲＤａ、ＲＤｂ    リードデータ
ＷＤａ、ＷＤｂ    ライトデータ
【図１】
2009289170.tif 000003
【図２】
2009289170.tif 000004
【図３】
2009289170.tif 000005
【図４】
2009289170.tif 000006
【図５】
2009289170.tif 000007
【図６】
2009289170.tif 000008
【図７】
2009289170.tif 000009
【図８】
2009289170.tif 000010
【図９】
2009289170.tif 000011