(57)【要約】  内部バッファＡ１０９は、メモリ１０５からのデータをキャッシュする。メモリアドレス変換部１０６は、リクエスト要求元１０１からリードリクエストを入力する。ヒット判定部１１３は、リードリクエストで要求されているペイロードデータと、対応するＥＣＣとが格納されている２つ以上のアドレスである読み出し候補アドレスのいずれかのアドレスのデータが、内部バッファＡ１０９にキャッシュ済み又はキャッシュ予定であるかを判定する。コマンド発行間隔制御部１１４は、いずれかのアドレスのデータが内部バッファＡ１０９にキャッシュ済み又はキャッシュ予定である場合に、読み出し候補アドレスのうち内部バッファＡ１０９にデータがキャッシュ済み又はキャッシュ予定のアドレス以外のアドレスからのデータリードを指示する部分リードコマンドを、所定の遅延時間が経過した後にメモリ１０５に出力する。
2014068789.tif 000002
【特許請求の範囲】
【請求項１】
各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する２つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストをパイプライン方式にて処理するメモリ制御装置であって、
前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている２つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定するキャッシュ判定部と、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、２つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済み又はキャッシュされる予定のアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリへの前記部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、前記メモリに出力するコマンド出力部とを有することを特徴とするメモリ制御装置。
【請求項２】
前記コマンド出力部は、
２つ以上の読み出し候補アドレスのうちの最前のアドレスのデータと前記最前のアドレスに後続する０個以上のアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、
前記最前のアドレスを含むキャッシュアドレス以外のアドレスのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力することを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記メモリ制御装置は、更に、
コマンドを蓄積するＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）バッファと、
前記ＦＩＦＯバッファからコマンドを入力し、入力したコマンドに従って、前記要求ペイロードデータと前記対応誤り訂正データとを取得するデータ取得部とを有し、
前記コマンド出力部は、
前記部分リードコマンドを前記メモリに出力するとともに、
前記キャッシュ領域から前記キャッシュアドレスのデータを入力するよう前記データ取得部に指示するキャッシュデータ入力コマンドと、前記メモリから前記キャッシュアドレス以外のアドレスのデータを入力するよう前記データ取得部に指示するメモリデータ入力コマンドとを前記ＦＩＦＯバッファに格納し、
前記データ取得部は、
前記ＦＩＦＯバッファから前記キャッシュデータ入力コマンドと前記メモリデータ入力コマンドとを入力し、前記キャッシュデータ入力コマンドに従って、前記キャッシュ領域から前記キャッシュアドレスのデータを入力し、前記メモリデータ入力コマンドに従って、前記部分リードコマンドに応じて読み出された前記キャッシュアドレス以外のアドレスのデータを前記メモリから入力し、
前記キャッシュ領域から入力した前記キャッシュアドレスのデータと、前記メモリから入力した前記キャッシュアドレス以外のアドレスのデータとから、前記要求ペイロードデータと前記対応誤り訂正データとを取得することを特徴とする請求項２に記載のメモリ制御装置。
【請求項４】
前記コマンド出力部は、
前記遅延時間が経過した後に部分リードコマンドを前記メモリに出力することで、前記データ取得部における前記キャッシュ領域からの前記キャッシュアドレスのデータの入力と前記メモリからの前記キャッシュアドレス以外のアドレスのデータの入力との間で衝突を発生させないことを特徴とする請求項３に記載のメモリ制御装置。
【請求項５】
前記コマンド出力部は、
２つ以上の読み出し候補アドレスのうちのいずれのアドレスのデータも前記キャッシュ領域にキャッシュ済みでなく、キャッシュされる予定でもないと前記キャッシュ判定部により判定された場合に、
２つ以上の読み出し候補アドレスの全域からのデータの読み出しを指示する全域リードコマンドを、前記遅延時間の経過を待つことなく前記メモリに出力することを特徴とする請求項１〜４のいずれかに記載のメモリ制御装置。
【請求項６】
前記コマンド出力部は、
部分リードコマンドを前記メモリに出力する場合に、全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えているか否かを判断し、
全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えている場合に、前記遅延時間の経過を待つことなく部分リードコマンドを前記メモリに出力することを特徴とする請求項５に記載のメモリ制御装置。
【請求項７】
全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えていない場合に、
全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間と前記遅延時間との差分時間を算出し、
前記メモリへの前記部分リードコマンドの出力が可能なタイミングから前記差分時間が経過した後に、部分リードコマンドを前記メモリに出力することを特徴とする請求項６に記載のメモリ制御装置。
【請求項８】
前記メモリ制御装置は、更に、
前記コマンド出力部により出力された全域リードコマンド及び部分リードコマンドのいずれかに応じて前記メモリから読み出された最後尾のデータである最後尾データに、前記要求ペイロードデータ及び前記対応誤り訂正データのいずれでもないデータが含まれている場合に、前記最後尾データを前記キャッシュ領域に格納するキャッシュ管理部を有することを特徴とする請求項５〜７のいずれかに記載のメモリ制御装置。
【請求項９】
前記コマンド出力部は、
少なくともパイプライン処理におけるスロット１つ分の時間に相当する時間を前記遅延時間とすることを特徴とする請求項１〜８のいずれかに記載のメモリ制御装置。
【請求項１０】
前記メモリ制御装置は、
複数のキャッシュ領域を有し、
前記キャッシュ判定部は、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記複数のキャッシュ領域のいずれかのキャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定することを特徴とする請求項１〜９のいずれかに記載のメモリ制御装置。
【請求項１１】
各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する２つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストを処理するメモリ制御装置であって、
前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている２つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済みであるかを判定するキャッシュ判定部と、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済みであると前記キャッシュ判定部により判定された場合に、２つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済みのアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力するコマンド出力部とを有することを特徴とするメモリ制御装置。
【請求項１２】
前記コマンド出力部は、
２つ以上の読み出し候補アドレスのうちのいずれのアドレスのデータも前記キャッシュ領域にキャッシュ済みでないと前記キャッシュ判定部により判定された場合に、
２つ以上の読み出し候補アドレスの全域からのデータの読み出しを指示する全域リードコマンドを、前記メモリに出力することを特徴とする請求項１１に記載のメモリ制御装置。
【請求項１３】
前記メモリ制御装置は、更に、
前記コマンド出力部により出力された全域リードコマンド及び部分リードコマンドのいずれかに応じて前記メモリから読み出された最後尾のデータである最後尾データに、前記要求ペイロードデータ及び前記対応誤り訂正データのいずれでもないデータが含まれている場合に、前記最後尾データを前記キャッシュ領域に格納するキャッシュ管理部を有することを特徴とする請求項１１又は１２に記載のメモリ制御装置。
【請求項１４】
前記メモリ制御装置は、
複数のキャッシュ領域を有し、
前記キャッシュ判定部は、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記複数のキャッシュ領域のいずれかのキャッシュ領域にキャッシュ済みであるかを判定することを特徴とする請求項１１〜１３のいずれかに記載のメモリ制御装置。
【請求項１５】
前記コマンド出力部は、
２つ以上の読み出し候補アドレスのうちの最前のアドレスのデータと前記最前のアドレスに後続する０個以上のアドレスのデータが前記キャッシュ領域にキャッシュ済みであると前記キャッシュ判定部により判定された場合に、
前記最前のアドレスを含むキャッシュアドレス以外のアドレスのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力し、
前記メモリ制御装置は、更に、
前記キャッシュ領域から前記キャッシュアドレスのデータを入力し、前記部分リードコマンドに応じて読み出された前記キャッシュアドレス以外のアドレスのデータを前記メモリから入力し、
前記キャッシュ領域から入力した前記キャッシュアドレスのデータと、前記メモリから入力した前記キャッシュアドレス以外のアドレスのデータとから、前記要求ペイロードデータと前記対応誤り訂正データとを取得するデータ取得部を有することを特徴とする請求項１１〜１４のいずれかに記載のメモリ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリからのペイロードデータの読み出しを要求するリードリクエストを処理する技術に関する。
【背景技術】
【０００２】
メモリの信頼性を向上するためにペイロードデータにＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）やパリティビットを付加することがある。
通常は、付加したＥＣＣ、パリティビット専用に幅方向にメモリ素子を追加する（水平ＥＣＣ、水平パリティ）。
例えば×８ビット構成のメモリではなく、特殊な×９ビット構成のメモリを使用することが考えられる。
しかし、メモリ素子の追加や特殊メモリの採用は、コスト的に不利であったり、部品の入手性に難がある場合が多い。
その解決策の一つとして、ＥＣＣを幅方向ではなく深さ方向へＥＣＣを保存することで幅方向にメモリを増やす必要のない、垂直ＥＣＣ、垂直パリティを採用することがある（以下垂直ＥＣＣと記載する）。【０００３】
例えば、図１に示すようなメモリ構成に垂直ＥＣＣ方式により、ＥＣＣを付加する場合を考える。
図１では、１つのアドレスに、各々のデータ幅が１バイトのペイロードデータが４つ格納されている。
図１のメモリ構成において、垂直ＥＣＣにより、４バイトのペイロードデータにつき１バイトのＥＣＣを付加すると、図２に示すようなデータの配置となる。【０００４】
垂直ＥＣＣを採用したメモリへアドレスが連続したリードを行うと、メモリからリードする２番目のデータ（第２データ）は、ＥＣＣを含めると後続するアドレスが連続したリードにおいても利用する。
リードリクエストの要求元で図１のデータ配置にてペイロードデータを管理しており、メモリでは図２のデータ配置にてペイロードデータとＥＣＣを管理している場合に、図１の００００ｈ番地のデータ（Ｄ０〜Ｄ３）のリードリクエストがあると、以下のデータリードが行われる。
メモリからは図２の００００ｈ番地のデータ（Ｄ０〜Ｄ３）、０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）の順序で読み出しが行われ、読み出されたＤ０〜Ｄ３に対してＥＣＣ０を用いて誤り訂正が行われ、誤り訂正後のＤ０〜Ｄ３が要求元に出力される。
更に、図１の０００４ｈ番地のデータ（Ｄ４〜Ｄ７）のリードリクエストがあった場合は、以下のデータリードが行われる。
メモリからは図２の０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）、０００８ｈ番地のデータ（Ｄ７〜Ｄ９）の順序で読み出しが行われ、読み出されたＤ４〜Ｄ７に対してＥＣＣ１を用いて誤り訂正が行われ、誤り訂正後のＤ４〜Ｄ７が要求元に出力される。【０００５】
このように、リード対象のアドレスが連続した場合、第２データ（上記の例では、図２の０００４ｈ番地のデータ）を２回メモリからリードする必要がある。
しかし、メモリアクセスにはオーバーヘッドがある場合が多く（例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）では同一バンクをＡＣＴするとアクセスできない期間が発生する）、第２データを２回リードすると、性能ロスが生じ、非効率的である。
また、メモリアクセスごとに電力が消費されるため、第２データを２回リードすると、電力消費が多くなる。【０００６】
パリティチェック結果を伴うデータ転送技術に関し、連続したアクセスに対し、パリティチェック結果が出力されるよりも前に次のリードリクエストを受け取らないようバスコントロールを行い、パリティチェック後のデータ転送までリードリクエストを待たせる技術がある（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−２３３４７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１の方式では、リードリクエストからリードデータ返送までの１つのトランザクションが必ず完了することを保障はできるが、パイプライン型のメモリへのデータ転送には対応できないという課題がある。【０００９】
本発明は、上記のような事情に鑑みたものであり、パイプライン型のメモリであっても、重複したデータの読み出しを回避し、有限なメモリ帯域を効率的に利用し、また、メモリアクセスにおける電力消費を抑制することを主な目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るメモリ制御装置は、
各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する２つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストをパイプライン方式にて処理するメモリ制御装置であって、
前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている２つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定するキャッシュ判定部と、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、２つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済み又はキャッシュされる予定のアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリへの前記部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、前記メモリに出力するコマンド出力部とを有することを特徴とする。
【発明の効果】
【００１１】
本発明では、読み出し候補アドレスのうちキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、メモリへの部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、メモリに出力する。
キャッシュアドレスのデータはキャッシュ領域のデータを用いることで重複したデータの読み出しを回避し、有限なメモリ帯域を効率的に利用し、また、メモリアクセスにおける電力消費を抑制することができる。
また、遅延時間が経過した後に部分リードコマンドをメモリに出力することで、パイプライン型のメモリであっても、キャッシュ領域からのキャッシュアドレスのデータの入力とメモリからのキャッシュアドレス以外のアドレスのデータの入力との間の衝突を回避することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るＥＣＣが含まれないデータの配置例を示す図。
【図２】実施の形態１に係る垂直ＥＣＣを付加されたデータの配置例を示す図。
【図３】実施の形態１に係るメモリ制御装置とリクエスト要求元とメモリとを示す図。
【図４】実施の形態１に係るメモリ制御装置の動作例を示すフローチャート図。
【図５】実施の形態１に係るメモリ制御装置の動作例を示す図。
【図６】実施の形態１に係るメモリ制御装置の動作例を示す図。
【図７】実施の形態２に係るメモリ制御装置とリクエスト要求元とメモリとを示す図。
【図８】実施の形態２に係るメモリ制御装置の動作例を示すフローチャート図。
【図９】実施の形態２に係るメモリ制御装置の動作例を示すフローチャート図。
【図１０】実施の形態３に係るメモリ制御装置とリクエスト要求元とメモリとを示す図。
【図１１】実施の形態３に係るメモリ制御装置の動作例を示すフローチャート図。
【図１２】実施の形態２に係るメモリ制御装置の動作例を示すタイミングチャート図。
【図１３】実施の形態２に係るメモリ制御装置の動作例を示すタイミングチャート図。
【図１４】実施の形態３に係るメモリ制御装置の動作例を示すタイミングチャート図。
【発明を実施するための形態】
【００１３】
実施の形態１では、パイプライン型ではないメモリに対応したメモリ制御装置を説明し、実施の形態２及び３で、パイプライン型のメモリに対応したメモリ制御装置を説明する。
実施の形態１のメモリ制御装置では、第２データの重複したリードを回避するために前回値保持部と内部バッファを用いている。
パイプライン型のメモリに対応した実施の形態２及び３のメモリ制御装置でも、第２データの重複したリードを回避するために、同じく前回値保持部と内部バッファを用いている。
メモリ制御装置における前回値保持部と内部バッファの使用法は、実施の形態１〜３で共通であるため、理解のしやすさを考慮して、実施の形態１において、非パイプライン方式のメモリ制御装置の動作を説明する。
そして、実施の形態１での動作を前提にして、実施の形態２及び３では、パイプライン方式に特有の動作を説明する。
【００１４】
また、実施の形態１〜３で共通する、リクエスト要求元及びメモリ上のアドレスとデータの関係を説明する。
例えば、図１に示すような、アドレスとデータ幅が４バイトのデータ（Ｄ０〜Ｄ３ｆ）がある。
ＥＣＣを４バイトにつき１バイト付加した垂直ＥＣＣのメモリ配置を図２に示す。
データに続けてＥＣＣを配置する順になっているが、これは一例であり、ＥＣＣの配置方法は、隣り合う前後２ラインの中にデータとＥＣＣが配置されていればよい。
例えば、「ＥＥＣ０」がペイロードデータ「Ｄ０」の前に配置されていてもよい。
また、同じアドレスに割り当たったデータは拡張可能であり、例えば００００ｈ番地にＤ０〜Ｄ３、ＥＣＣ０、Ｄ４〜Ｄ６、次の０００８ｈ番地にＤ７、ＥＣＣ１、Ｄ８〜Ｄｂ、ＥＣＣ２、Ｄｃと、データ幅を拡張しても良い。
その場合においても、一部のペイロードデータとＥＣＣは隣接する２つのアドレスにわたって対応関係にあり続けるためである。
【００１５】
実施の形態１．
図３は、実施の形態１に係るメモリ制御装置１００とリクエスト要求元１０１とメモリ１０５とを示す。
【００１６】
図３において、リクエスト要求元１０１は、メモリ１０５へのリード・ライトリクエストを発行する。
以下では、リクエスト要求元１０１は、メモリ１０５からのペイロードデータの読み出しを要求するリードリクエストを発行する場合に限って説明を進める。
リクエスト要求元１０１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
なお、リクエスト要求元１０１では、例えば図１に示す形式で、ペイロードデータの配置を認識している。
【００１７】
また、メモリ１０５では、例えば図２に示す形式で、ペイロードデータと、誤り訂正データであるＥＣＣが配置されている。
メモリ１０５からは、アドレス単位でデータの読み出しが行われる。
なお、メモリ１０５は、メモリ制御装置１００の制御対象のメモリである。
【００１８】
メモリ制御装置１００は、メモリアドレス変換部１０６、内部バッファＡ１０９、内部バッファ管理部１０７、内部バッファ情報記憶部１１２、ヒット判定部１１３、前回値保持部１０４、データ選択部１０８、データ整列部１０３及びＥＣＣ訂正部１０２で構成される。
メモリ制御装置１００の各構成要素は、例えば素子、デバイス、回路といったハードウェアである。
メモリ制御装置１００の各構成要素は、例えば、チップセット内の半導体回路群である。
また、例えば、メモリアドレス変換部１０６、内部バッファ管理部１０７、内部バッファ情報記憶部１１２、データ選択部１０８、データ整列部１０３及びＥＣＣ訂正部１０２は、プログラムを用いて実現されていてもよい。
【００１９】
メモリアドレス変換部１０６は、リクエスト要求元１０１からのリードリクエストを入力する。
また、メモリアドレス変換部１０６は、入力したリードリクエストのアドレスを垂直ＥＣＣを配置したメモリ１０５上のアドレスへ変換する。
例えば、リクエスト要求元１０１から図１の００００ｈ番地のデータ（Ｄ０〜Ｄ３）のリードリクエストがあった場合は、メモリアドレス変換部１０６は、図２の００００ｈ番地のデータ（Ｄ０〜Ｄ３）と０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）へのアドレス変換を行う。
なお、メモリアドレス変換部１０６によるアドレス変換後のアドレスを読み出し候補アドレスという（上記の例では、図２の００００ｈ番地と０００４ｈ番地が読み出し候補アドレス）。
また、リクエスト要求元１０１からのリードリクエストで要求されているペイロードデータを要求ペイロードデータという（上記の例では、Ｄ０〜Ｄ３が要求ペイロードデータ）。
また、要求ペイロードデータの誤り訂正に用いられるＥＣＣを対応誤り訂正データ又は対応ＥＣＣという（上記の例では、ＥＣＣ０が対応誤り訂正データ）。
更に、メモリアドレス変換部１０６は、アドレス変換結果及びヒット判定部１１３の判定結果に基づき、メモリ１０５にデータリードを指示するリードコマンドを出力する。
なお、本明細書では、メモリアドレス変換部１０６がリクエスト要求元１０１から入力する情報をリードリクエストといい、メモリアドレス変換部１０６がメモリ１０５に出力する情報をリードコマンドという。
ヒット判定部１１３においてヒット判定があった場合は、メモリアドレス変換部１０６は、部分リードコマンドをメモリ１０５に出力する。
部分リードコマンドは、読み出し候補アドレスのうち内部バッファＡ１０９にキャッシュ済みのアドレス（キャッシュアドレスという）以外のアドレスからのデータの読み出しを指示するコマンドである。
また、ヒット判定部１１３においてミス判定があった場合は、メモリアドレス変換部１０６は、全域リードコマンドをメモリ１０５に出力する。
全域リードコマンドは、読み出し候補アドレスの全域からのデータの読み出しを指示するコマンドである。
なお、メモリアドレス変換部１０６は、リードリクエスト入力部及びコマンド出力部の例に相当する。
【００２０】
内部バッファＡ１０９には、以前のリードコマンドによってメモリ１０５からリードされたデータが格納される。
内部バッファＡ１０９は、キャッシュ領域の例である。
なお、図１では、内部バッファは１つだけ図示されているが、複数の内部バッファを配置することが可能である。
【００２１】
内部バッファ管理部１０７は、内部バッファＡ１０９の管理を行う。
より具体的には、内部バッファ管理部１０７は、メモリ１０５からリードされたデータのうち、内部バッファＡ１０９に記憶させるデータを選択し、選択したデータを内部バッファＡ１０９に格納する。
メモリアドレス変換部１０６により出力されたリードコマンドに応じてメモリ１０５から読み出されたデータのうちの最後尾のデータ（最後尾データという）に、要求ペイロードデータ及び対応ＥＣＣのいずれでもないデータが含まれている場合に、内部バッファ管理部１０７は、当該最後尾データを内部バッファＡ１０９に格納する。
例えば、リクエスト要求元１０１から図１の００００ｈ番地のデータ（Ｄ０〜Ｄ３）のリードリクエストがあった場合は、メモリアドレス変換部１０６により、図２の００００ｈ番地のデータ（Ｄ０〜Ｄ３）と０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）へのアドレス変換が行われる。
００００ｈ番地のデータ（Ｄ０〜Ｄ３）が内部バッファＡ１０９に格納されていない場合は、ミス判定となり、００００ｈ番地のデータと０００４ｈ番地のデータのリードを指示する全域リードコマンドが出力される。
この全域リードコマンドに対してメモリ１０５からリードされた最後尾データ（０００４ｈ番地）には、ＥＣＣ０〜Ｄ６が含まれる。
ＥＣＣ０は対応ＥＣＣに該当するが、Ｄ４〜Ｄ６は要求ペイロードデータではない。
このため、内部バッファ管理部１０７は、０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）を内部バッファＡ１０９に格納する。
一方で、リクエスト要求元１０１から図１の００１Ｃｈ番地のデータ（Ｄ１ｃ〜Ｄ１ｆ）のリードリクエストがあった場合は、メモリアドレス変換部１０６により、図２の００２０ｈ番地のデータ（Ｄ１ａ〜Ｄ１ｃ）と００２４ｈ番地のデータ（Ｄ１ｄ〜ＥＣＣ７）へのアドレス変換が行われる。
００２０ｈ番地のデータ（Ｄ１ａ〜Ｄ１ｃ）が内部バッファＡ１０９に格納されていない場合は、ミス判定となり、００２０ｈ番地のデータと００２４ｈ番地のデータのリードを指示する全域リードコマンドが出力される。
この全域リードコマンドに対してメモリ１０５からリードされた最後尾データ（００２４ｈ番地）には、Ｄ１ｄ〜ＥＣＣ７が含まれる。
Ｄ１ｄ〜Ｄ１ｆは要求ペイロードデータに該当し、ＥＣＣ７は対応ＥＣＣに該当する。
このため、内部バッファ管理部１０７は、００２４ｈ番地のデータ（Ｄ１ｄ〜ＥＣＣ７）は、内部バッファＡ１０９に格納しない。
なお、内部バッファ管理部１０７は、キャッシュ管理部の例に相当する。
【００２２】
ヒット判定部１１３は、メモリアドレス変換部１０６により取得された読み出し候補アドレスの一部のアドレスのデータが内部バッファＡ１０９にキャッシュ済みであるか否かを判定する。
読み出し候補アドレスの一部のアドレスのデータが内部バッファＡ１０９にキャッシュ済みであれば、ヒット判定であり、キャッシュ済みでなければミス判定である。
ヒット判定部１１３は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」と「距離情報」から連続するアドレスを計算して、内部バッファＡ１０９にデータがキャッシュ済みかどうかを判定する。
ヒット判定であれば、ヒット判定部１１３は、ヒット信号をメモリアドレス変換部１０６に出力する。
なお、ヒット判定部１１３は、キャッシュ判定部の例に相当する。
【００２３】
内部バッファ情報記憶部１１２内の「内部バッファＡのアドレス」には、リクエスト要求元１０１からのリードリクエストで示されているアドレス（図１のアドレス）が記憶される。
内部バッファ情報記憶部１１２内の「距離情報Ａ」には、リードリクエストで要求されたアドレスのアドレス長が記憶される。
リクエスト要求元１０１から図１の００００ｈ番地のリードリクエストがあった場合は、「内部バッファＡのアドレス」には「００００ｈ番地」が記憶され、「距離情報Ａ」には「４バイト」が記憶される。
内部バッファが複数ある場合は、各内部バッファに対してアドレスと距離情報が記憶される。
なお、図１では、「内部バッファＡのアドレス」と「距離情報Ａ」を別に管理しているが、「内部バッファＡのアドレス」のみで運用してもよい。
この場合は、リードリクエストで示されているアドレスにアドレス長を加算した値を「内部バッファＡのアドレス」に記憶する。
つまり、リクエスト要求元１０１から図１の００００ｈ番地のリードリクエストがあった場合は、００００ｈ番地に４バイトを加算した「０００４ｈ番地」を「内部バッファＡのアドレス」に記憶する。
【００２４】
前回値保持部１０４は、メモリ１０５から受信した前回のリードデータ、もしくは内部バッファＡ１０９のデータを保持するレジスタである。
【００２５】
データ選択部１０８は、メモリ１０５から受信したリードデータ及び内部バッファＡ１０９のデータのいずれかを選択し、選択したデータをデータ整列部１０３に出力する。
【００２６】
データ整列部１０３は、データ選択部１０８で選択したデータと前回値保持部１０４のデータの中から、要求ペイロードデータと対応ＥＣＣとを取得し、取得した要求ペイロードデータと対応ＥＣＣとをＥＣＣ訂正を行うことができるように整列する。
【００２７】
なお、データ整列部１０３、前回値保持部１０４及びデータ選択部１０８を合わせたものをデータ取得部１１１という。
【００２８】
ＥＣＣ訂正部１０２は、データ整列部１０３から整列後の要求ペイロードデータと対応ＥＣＣを入力し、対応ＥＣＣを用いて要求ペイロードデータのＥＣＣ訂正を行い、リクエスト要求元１０１にＥＣＣ訂正後の要求ペイロードデータを出力する。
【００２９】
次に、本実施の形態に係るメモリ制御装置１００の動作例を、図１〜図５を用いて説明する。
以下では、図１の００００ｈ番地から４バイト（Ｄ０〜Ｄ３）、続けて０００４ｈ番地から４バイト（Ｄ４〜Ｄ７）をリードする場合を説明する。
【００３０】
まず、メモリアドレス変換部１０６が、リクエスト要求元１０１から００００ｈ番地から４バイトリードのリードリクエストを受理する（Ｓ２０１）。
次に、ヒット判定部１１３が、受理したリードリクエストが内部バッファＡ１０９に格納されているデータとヒットするかを判定する（Ｓ３０１）。
具体的には、ヒット判定部１１３は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」、「距離情報Ａ」からキャッシュアドレスを計算し、判定する。
なお、この時点では、内部バッファＡ１０９にはデータが格納されていないので、Ｓ３０１の判定結果はＮｏとなる。
【００３１】
次に、メモリアドレス変換部１０６が、４バイトのデータ（Ｄ０〜Ｄ３）とそれに対応するＥＣＣ（ＥＣＣ０）を含む領域（読み出し候補アドレス）を計算し、計算した領域からのリードを指示するリードコマンドを生成し、生成したリードコマンドをメモリ１０５に出力する（Ｓ２０２）。
図２を参照すると、上記データは００００ｈ番地と、０００４ｈ番地に跨って配置されているため、メモリアドレス変換部１０６は、００００ｈ番地から８バイトのリードを指示するリードコマンド（全域リードコマンド）を生成する。
また、メモリアドレス変換部１０６は、生成したリードコマンドをメモリ１０５に出力するとともに、内部バッファ管理部１０７及びデータ選択部１０８に、リードコマンドとリクエスト要求元１０１からのリードリクエストを出力する。
【００３２】
メモリ１０５は、００００ｈ番地のデータ（Ｄ０〜Ｄ３）を返し、メモリ制御装置１００ではデータ選択部１０８が００００ｈ番地のデータを入力する（Ｓ２０３）。
データ選択部１０８は、データ整列部１０３と内部バッファ管理部１０７にリードデータの入力を通知する。
【００３３】
内部バッファ管理部１０７は、データ選択部１０８から通知があると、入力されたリードデータが最後尾データであるかを判断する（Ｓ４００）。
００００ｈ番地のデータは、最後尾データではないのでＳ４０１の判定結果はＮｏとなる。
内部バッファ管理部１０７は、メモリアドレス変換部１０６からリードコマンドとリードリクエストを入力しており、また、図１のデータ配置及び図２のデータ配置を認識しているため、最初に入力するリードデータ（００００ｈ番地のデータ）は最後尾データでないと判定することができる。
なお、入力した００００ｈ番地のデータは、最後尾データではないので、入力したリードデータは内部バッファＡ１０９で保持されない。
【００３４】
次に、データ整列部１０３は、データの整列ができるか否かを判断する（Ｓ３０５）。
つまり、データ整列部１０３は、メモリ１０５からのデータ又は内部バッファＡ１０９のデータと前回値保持部１０４のデータとで、リクエスト要求元１０１から要求された要求ペイロードデータと対応ＥＣＣとが得られるかを判断する。
この時点では、メモリ１０５から００００ｈ番地のデータを入力しているが、前回値保持部１０４にはデータが格納されていない。
００００ｈ番地のデータだけでは要求ペイロードデータと対応ＥＣＣとが得られないため、データ整列部１０３は、０００４ｈ番地のデータの入力を待つ（Ｓ３０５でＮＯ）。
このとき、データ選択部１０８から前回値保持部１０４に、リードデータ（００００ｈ番地）が前回値として格納される。
なお、データ整列部１０３は、メモリアドレス変換部１０６からリードコマンドとリードリクエストを入力しており、また、図１のデータ配置及び図２のデータ配置を認識しているため、データの整列ができるか否かを判断することができる。
【００３５】
次に、メモリ１０５は、０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）を返し、メモリ制御装置１００ではデータ選択部１０８が０００４ｈ番地のデータを入力する（Ｓ２０３）。
データ選択部１０８は、データ整列部１０３と内部バッファ管理部１０７にリードデータの入力を通知する。
【００３６】
内部バッファ管理部１０７は、データ選択部１０８から通知があると、入力されたリードデータが最後尾データであるかを判断する（Ｓ４００）。
０００４ｈ番地のデータは、リードコマンドに対してメモリ１０５から入力する最後のデータであり、最後尾データに該当する（Ｓ４００でＹＥＳ）。
【００３７】
次に、内部バッファ管理部１０７は、入力された０００４ｈ番地のデータに、要求ペイロードデータ及び対応ＥＣＣ以外の後続のペイロードデータが含まれるか否かを判断する（Ｓ４０１）。
リクエスト要求元１０１から要求された要求ペイロードデータはＤ０〜Ｄ３であり、また、対応ＥＣＣはＥＥＣ０である。
０００４ｈ番地のデータには、後続のペイロードデータであるＤ４〜Ｄ６が含まれている。
このため、Ｓ４０１の判定結果はＹＥＳとなる。
前述したように、内部バッファ管理部１０７は、メモリアドレス変換部１０６からリードリクエストを入力しており、また、図１のデータ配置及び図２のデータ配置を認識しているため、０００４ｈ番地のＤ４〜Ｄ６が、要求ペイロードデータ及び対応ＥＣＣのいずれでもない後続のペイロードデータであると判断できる。
【００３８】
次に、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」に「００００ｈ」を、「距離情報Ａ」に４バイトリードの「４」を記述し、内部バッファＡ１０９に０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）を格納する（Ｓ４０２）。
【００３９】
次に、データ整列部１０３は、データの整列ができるか否かを判断する（Ｓ３０５）。
つまり、データ整列部１０３は、メモリ１０５からのデータ又は内部バッファＡ１０９のデータと前回値保持部１０４のデータとで、リクエスト要求元１０１から要求された要求ペイロードデータと対応ＥＣＣとが得られるかを判断する。
この時点では、メモリ１０５から０００４ｈ番地のデータを入力し、前回値保持部１０４に前回値として００００ｈ番地のデータが格納されている。
メモリ１０５から入力したデータと前回値保持部１０４のデータで、要求ペイロードデータと対応ＥＣＣとが得られるため、Ｓ３０５の判定結果はＹｅｓとなる。
【００４０】
データ整列部１０３は、前回値保持部１０４から００００ｈ番地のデータ（Ｄ０〜Ｄ３）を入力し、また、データ選択部１０８から０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）を取得し、要求ペイロードデータ（Ｄ０〜Ｄ３）と対応ＥＣＣ（ＥＣＣ０）を抽出し、抽出したデータの整列を行う（Ｓ２０５）。
【００４１】
次に、ＥＣＣ訂正部１０２が、整列されたデータ（Ｄ０〜Ｄ３とＥＣＣ０）をデータ整列部１０３から取得し、ＥＣＣ０を用いて要求ペイロードデータＤ０〜Ｄ３のＥＣＣ訂正を行った後に、リクエスト要求元１０１に、要求ペイロードデータＤ０〜Ｄ３を返送する（Ｓ２０６）。
以上で要求されたペイロードデータを全て返送し終えたので処理が完了する（Ｓ２０７）。
【００４２】
続けてリクエスト要求元１０１から０００４ｈ番地から４バイトリードのリードリクエストを受理する場合を想定する。
【００４３】
この場合は、リードリクエストの受理（Ｓ２０１）後に、ヒット判定部１１３が、リードリクエストで要求されているペイロードデータが内部バッファＡ１０９に格納されているデータとヒットするかを判定する（Ｓ３０１）。
つまり、ヒット判定部１１３は、Ｓ２０１で受理したリードリクエストは、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」に記述されているアドレスに連続するアドレスのデータのリードを要求しているかを判断する。
本例の場合は、「内部バッファＡのアドレス」に「００００ｈ番地」が記述され、「距離情報Ａ」に「４」が記述されているため、「００００ｈ番地」に４バイトを加算して「０００４ｈ」となり、リードリクエストの要求に合致するので、ヒット判定となり、Ｓ３０１の判定結果はＹｅｓである。
【００４４】
メモリアドレス変換部１０６は、４バイトのデータ（Ｄ４〜Ｄ７）とそれに対応するＥＣＣ（ＥＣＣ１）を含む領域（読み出し候補アドレス）を計算する。
図２を参照すると、上記データは０００４ｈ番地と、０００８ｈ番地に跨って配置されているため、通常であれば、メモリアドレス変換部１０６は０００４ｈ番地から８バイトのリードを指示するリードコマンドを生成する。
しかし、０００４ｈ番地のデータは内部バッファＡ１０９のデータを利用するため、メモリアドレス変換部１０６は、０００８ｈから４バイトのリードを指示するリードコマンド（部分リードコマンド）を生成し、生成したリードコマンドをメモリ１０５に出力する（Ｓ３０２）。
また、メモリアドレス変換部１０６は、生成したリードコマンドをメモリ１０５に出力するとともに、内部バッファ管理部１０７及びデータ選択部１０８に、リードコマンドとリクエスト要求元１０１からのリードリクエストを出力する。
【００４５】
０００４ｈ番地のデータは内部バッファＡ１０９にすでに格納されているため、内部バッファ管理部１０７は、内部バッファＡ１０９のデータをデータ選択部１０８を介してデータ整列部１０３に送る（Ｓ３０３）。
【００４６】
データ整列部１０３は、データの整列ができるか否かを判断する（Ｓ３０５）。
つまり、データ整列部１０３は、メモリ１０５からのデータ又は内部バッファＡ１０９のデータと前回値保持部１０４のデータとで、リクエスト要求元１０１から要求された要求ペイロードデータと対応ＥＣＣとが得られるかを判断する。
この時点では、内部バッファＡ１０９に０００４ｈ番地のデータがあり、前回値保持部１０４にも０００４ｈ番地のデータがある。
０００４ｈ番地のデータだけでは要求ペイロードデータと対応ＥＣＣとが得られないため、データ整列部１０３は、０００８ｈ番地のデータの入力を待つ（Ｓ３０５でＮＯ）。
このとき、データ選択部１０８から前回値保持部１０４に、内部バッファＡ１０９のデータ（０００４ｈ番地）が前回値として格納される。
【００４７】
次に、メモリ１０５は、０００８ｈ番地のデータ（Ｄ７〜Ｄ９）を返し、メモリ制御装置１００ではデータ選択部１０８が０００８ｈ番地のデータを入力する（Ｓ２０３）。
データ選択部１０８は、データ整列部１０３と内部バッファ管理部１０７にリードデータの入力を通知する。
【００４８】
内部バッファ管理部１０７は、データ選択部１０８から通知があると、入力されたリードデータが最後尾データであるかを判断する（Ｓ４００）。
０００８ｈ番地のデータは、リードコマンドに対してメモリ１０５から入力する最後のデータであり、最後尾データに該当する（Ｓ４００でＹＥＳ）。
【００４９】
次に、内部バッファ管理部１０７は、入力された０００８ｈ番地のデータに、要求ペイロードデータ及び対応ＥＣＣ以外の後続のペイロードデータが含まれるか否かを判断する（Ｓ４０１）。
リクエスト要求元１０１から要求された要求ペイロードデータはＤ４〜Ｄ７であり、また、対応ＥＣＣはＥＥＣ１である。
０００８ｈ番地のデータには、後続のペイロードデータであるＤ８〜Ｄ９が含まれている。
このため、Ｓ４０１の判定結果はＹＥＳとなる。
【００５０】
次に、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」に「０００４ｈ」を、「距離情報Ａ」に４バイトリードの「４」を記述し、内部バッファＡ１０９に０００８ｈ番地のデータ（Ｄ７〜Ｄ９）を格納する（Ｓ４０２）。
【００５１】
次に、データ整列部１０３は、データの整列ができるか否かを判断する（Ｓ３０５）。
つまり、データ整列部１０３は、メモリ１０５からのデータ又は内部バッファＡ１０９のデータと前回値保持部１０４のデータとで、リクエスト要求元１０１から要求された要求ペイロードデータと対応ＥＣＣとが得られるかを判断する。
この時点では、メモリ１０５から０００８ｈ番地のデータを入力し、前回値保持部１０４に前回値として０００４ｈ番地のデータが格納されている。
メモリ１０５から入力したデータと前回値保持部１０４のデータで、要求ペイロードデータと対応ＥＣＣとが得られため、Ｓ３０５の判定結果はＹｅｓとなる。
【００５２】
データ整列部１０３は、前回値保持部１０４から０００４ｈ番地のデータ（ＥＣＣ０〜Ｄ６）を入力し、また、データ選択部１０８から０００８ｈ番地のデータ（Ｄ７〜Ｄ９）を取得し、要求ペイロードデータ（Ｄ４〜Ｄ７）と対応ＥＣＣ（ＥＣＣ１）を抽出し、抽出したデータの整列を行う（Ｓ２０５）。
【００５３】
次に、ＥＣＣ訂正部１０２が、整列されたデータ（Ｄ４〜Ｄ７とＥＣＣ１）をデータ整列部１０３から取得し、ＥＣＣ１を用いて要求ペイロードデータＤ４〜Ｄ７のＥＣＣ訂正を行った後に、リクエスト要求元１０１に、要求ペイロードデータＤ４〜Ｄ７を返送する（Ｓ２０６）。
以上で要求されたペイロードデータを全て返送し終えたので処理が完了する（Ｓ２０７）。
【００５４】
図５は、以上のメモリ制御装置１００の動作を具体的に説明している。
【００５５】
リクエスト要求元１０１から００００ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ０〜Ｄ３）があると、メモリ１０５から、第１データＡ（Ｄ０〜Ｄ３）が図２の００００ｈ番地から読み出される。
第１データＡ（Ｄ０〜Ｄ３）は、最後尾データではないため、内部バッファＡ１０９では保持されないが、第１データＢ（Ｄ０〜Ｄ３）として前回値保持部１０４に保持される。
次に、メモリ１０５から第２データＡ（ＥＣＣ０〜Ｄ６）が図２の０００４ｈ番地から読み出される。
第２データＡ（ＥＣＣ０〜Ｄ６）は、最後尾データであるので、第２データＥ（ＥＣＣ０〜Ｄ６）として内部バッファＡ１０９に保持される。
データ整列部１０３は、メモリ１０５からの第２データＡ（ＥＣＣ０〜Ｄ６）と、前回値保持部１０４の第１データＢ（Ｄ０〜Ｄ３）からデータ整列を行って、第１データＣ（Ｄ０〜ＥＣＣ０）を生成する。
そして、ＥＣＣ訂正部１０２が、第１データＣ（Ｄ０〜ＥＣＣ０）のＥＣＣ訂正を行い、ＥＣＣ訂正後の第１データＤ（Ｄ０〜Ｄ３）をリクエスト要求元１０１に出力する。
また、第２データＡ（ＥＣＣ０〜Ｄ６）は、第２データＢ（ＥＣＣ０〜Ｄ６）として前回値保持部１０４に保持される。
【００５６】
続けて、リクエスト要求元１０１から０００４ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ４〜Ｄ７）があった際には、内部バッファＡ１０９に第２データＥ（ＥＣＣ０〜Ｄ６）が存在しており、第２データＢ（ＥＣＣ０〜Ｄ６）が前回値保持部１０４に前回値として保持されている。
内部バッファＡ１０９の第２データＥ（ＥＣＣ０〜Ｄ６）と前回値保持部１０４の第２データＢ（ＥＣＣ０〜Ｄ６）では、データ整列ができないので、第２データＥ（ＥＣＣ０〜Ｄ６）が前回値として前回値保持部１０４に保持されるとともに、メモリ１０５から第４データＡ（Ｄ７〜Ｄ９）が図２の０００８ｈ番地から読み出される。
第４データＡ（Ｄ７〜Ｄ９）は、最後尾データであるので、第４データＥ（Ｄ７〜Ｄ９）として内部バッファＡ１０９に保持される。
データ整列部１０３は、メモリ１０５からの第４データＡ（Ｄ７〜Ｄ９）と、前回値保持部１０４の第２データＥ（ＥＣＣ０〜Ｄ６）からデータ整列を行って、第２データＣ（Ｄ４〜ＥＣＣ１）を生成する。
そして、ＥＣＣ訂正部１０２が、第２データＣ（Ｄ４〜ＥＣＣ１）のＥＣＣ訂正を行い、ＥＣＣ訂正後の第２データＤ（Ｄ４〜Ｄ７）をリクエスト要求元１０１に出力する。
また、第４データＡ（Ｄ７〜Ｄ９）は、第４データＢ（Ｄ７〜Ｄ９）として前回値保持部１０４に保持される。
【００５７】
本実施の形態によらなければ、リクエスト要求元１０１から０００４ｈ番地から４バイトリードのリードリクエストがあった際には、第３データＡ（ＥＣＣ０〜Ｄ６）のように、ＥＣＣ０〜Ｄ６のデータを重複してメモリ１０５から読み出すことになる。
これに対して、本実施の形態では、内部バッファＡ１０９内の第２データＥ（ＥＣＣ０〜Ｄ６）を利用することが可能であるため、メモリ１０５からの重複した読み出しは不要である。
【００５８】
以上では、内部バッファＡ１０９のみが含まれるメモリ制御装置１００の動作例を説明した。
ここでは、内部バッファＡ１０９の他に内部バッファＢ１０９０が含まれるメモリ制御装置１００の動作例を説明する。
【００５９】
図６は、内部バッファＡ１０９と内部バッファＢ１０９０が含まれるメモリ制御装置１００の動作例を示す。
【００６０】
図６では、リクエスト要求元１０１から００００ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ０〜Ｄ３）があり、次に、００１４ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ１４〜Ｄ１７）があり、更に、０００４ｈ番地から４バイトリードのリードリクエスト（Ｄ４〜Ｄ７）がある場合のリクエスト要求元１０１の動作例を示している。
なお、第１のリードリクエスト（００００ｈ番地のリードリクエスト）の際には、第１のリードリクエストに先行するリードリクエストに対して読み出されたＥＣＣ４〜Ｄ１６のデータ（図２の００１８ｈ番地）が第３データＥとして内部バッファＢ１０９０に保持されているものとする。
一方、内部バッファＡ１０９には、第１のリードリクエストの際には、データが保持されていないものとする。
【００６１】
リクエスト要求元１０１から００００ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ０〜Ｄ３）があると、メモリ１０５から、第１データＡ（Ｄ０〜Ｄ３）が図２の００００ｈ番地から読み出される。
第１データＡ（Ｄ０〜Ｄ３）は、最後尾データではないため、内部バッファＡ１０９では保持されないが、第１データＢ（Ｄ０〜Ｄ３）として前回値保持部１０４に保持される。
次に、メモリ１０５から第２データＡ（ＥＣＣ０〜Ｄ６）が読み出される。
第２データＡ（ＥＣＣ０〜Ｄ６）は、最後尾データであるので、第２データＥ（ＥＣＣ０〜Ｄ６）として内部バッファＡ１０９に保持される。
データ整列部１０３は、メモリ１０５からの第２データＡ（ＥＣＣ０〜Ｄ６）と、前回値保持部１０４の第１データＢ（Ｄ０〜Ｄ３）からデータ整列を行って、第１データＣ（Ｄ０〜ＥＣＣ０）を生成する。
そして、ＥＣＣ訂正部１０２が、第１データＣ（Ｄ０〜ＥＣＣ０）のＥＣＣ訂正を行い、ＥＣＣ訂正後の第１データＤ（Ｄ０〜Ｄ３）をリクエスト要求元１０１に出力する。
また、第２データＡ（ＥＣＣ０〜Ｄ６）は、第２データＢ（ＥＣＣ０〜Ｄ６）として前回値保持部１０４に保持される。
【００６２】
続けて、リクエスト要求元１０１から００１４ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ１４〜Ｄ１７）があった際には、内部バッファＢ１０９０に第３データＥ（ＥＣＣ４〜Ｄ１６）が存在しており、第２データＢ（ＥＣＣ０〜Ｄ６）が前回値保持部１０４に前回値として保持されている。
内部バッファＢ１０９０の第３データＥ（ＥＣＣ４〜Ｄ１６）と前回値保持部１０４の第２データＢ（ＥＣＣ０〜Ｄ６）では、データ整列ができないので、第３データＥ（ＥＣＣ４〜Ｄ１６）が第３データＢ（ＥＣＣ４〜Ｄ１６）（前回値）として前回値保持部１０４に保持されるとともに、メモリ１０５から第４データＡ（Ｄ１７〜Ｄ１９）が図２の００１Ｃｈ番地から読み出される。
第４データＡ（Ｄ１７〜Ｄ１９）は、最後尾データであるので、第４データＥ（Ｄ１７〜Ｄ１９）として内部バッファＡ１０９に保持される。
データ整列部１０３は、メモリ１０５からの第４データＡ（Ｄ１７〜Ｄ１９）と、前回値保持部１０４の第３データＢ（ＥＣＣ４〜Ｄ１６）からデータ整列を行って、第２データＣ（Ｄ１４〜ＥＣＣ５）を生成する。
そして、ＥＣＣ訂正部１０２が、第２データＣ（Ｄ１４〜ＥＣＣ５）のＥＣＣ訂正を行い、ＥＣＣ訂正後の第２データＤ（Ｄ１４〜Ｄ１７）をリクエスト要求元１０１に出力する。
また、第４データＡ（Ｄ１７〜Ｄ１９）は、第４データＢ（Ｄ１７〜Ｄ１９）として前回値保持部１０４に保持される。
【００６３】
続けて、リクエスト要求元１０１から０００４ｈ番地（図１）から４バイトリードのリードリクエスト（Ｄ４〜Ｄ７）があった際には、内部バッファＡ１０９に第２データＥ（ＥＣＣ０〜Ｄ６）が存在しており、第４データＢ（Ｄ１７〜Ｄ１９）が前回値保持部１０４に前回値として保持されている。
内部バッファＡ１０９の第２データＥ（ＥＣＣ０〜Ｄ６）と前回値保持部１０４の第４データＢ（Ｄ１７〜Ｄ１９）では、データ整列ができないので、第２データＥ（ＥＣＣ０〜Ｄ６）が第５データＢ（ＥＣＣ０〜Ｄ６）（前回値）として前回値保持部１０４に保持されるとともに、メモリ１０５から第６データＡ（Ｄ７〜Ｄ９）が図２の０００８ｈ番地から読み出される。
第６データＡ（Ｄ７〜Ｄ９）は、最後尾データであるので、第６データＥ（Ｄ７〜Ｄ９）として内部バッファＡ１０９に保持される。
データ整列部１０３は、メモリ１０５からの第６データＡ（Ｄ７〜Ｄ９）と、前回値保持部１０４の第５データＢ（ＥＣＣ０〜Ｄ６）からデータ整列を行って、第３データＣ（Ｄ４〜ＥＣＣ１）を生成する。
そして、ＥＣＣ訂正部１０２が、第３データＣ（Ｄ４〜ＥＣＣ１）のＥＣＣ訂正を行い、ＥＣＣ訂正後の第３データＤ（Ｄ４〜Ｄ７）をリクエスト要求元１０１に出力する。
また、第６データＡ（Ｄ７〜Ｄ９）は、第６データＢ（Ｄ７〜Ｄ９）として前回値保持部１０４に保持される。
なお、第６データＢ（Ｄ７〜Ｄ９）の図示は省略している。
【００６４】
以上では、００００ｈ番地から４バイト、０００４ｈ番地から４バイトというように、４バイトずつのリードリクエストに対してペイロードデータをリクエスト要求元１０１に返送する例を取り上げた。
本実施の形態のメモリ制御装置１００は、４バイトの整数倍ずつのリードリクエストにも対処可能である。
例えば、００００ｈ番地から８バイト、０００８ｈ番地から８バイトというように、８バイトずつのリードリクエストにも対処可能である。
【００６５】
また、本実施の形態では、内部バッファＡ１０９と内部バッファＢ１０９０という２つの内部バッファを用いる例を説明したが、３つ以上の内部バッファを用いる場合も、本実施の形態で説明した手順にて処理することができる。
【００６６】
本実施の形態では、
以下の手段を備えたメモリ制御装置を説明した。
（ａ）リクエスト要求元からのリクエストを、メモリのリクエストに変換し、データの橋渡しをする手段
（ｂ）データのＥＣＣエラー訂正をする手段
（ｃ）垂直ＥＣＣを採用したメモリからの受信データを、ＥＣＣエラー訂正をすることができるデータ（データと対応するＥＣＣに分離したもの）に再配置する手段
（ｄ）リクエスト要求元からのアドレスとレングスを、垂直ＥＣＣを採用したメモリのアドレスとレングスに変換する手段
（ｅ）メモリから受信した前回のデータを保持する手段
（ｆ）次のアドレスのペイロードデータを含む最後に受信したリードデータを保持する手段
（ｇ）次のアドレスであることを判定するために、保持しているペイロードデータのアドレスを記憶する手段
（ｈ）次のアドレスであることを判定するために、距離情報を保持する手段
（ｉ）これからメモリに発行するリードコマンドが保持しているペイロードデータを再利用するかどうかを判定する手段
（ｊ）内部バッファのデータとメモリから受信したリードデータのどちらかを選択する手段。
【００６７】
実施の形態２．
実施の形態１では、例えば、リクエスト要求元１０１からの０００４ｈ番地（図１）から４バイトリードのリードリクエストは、先行する００００ｈ番地（図１）から４バイトのリードが完了後（図４のＳ２０７でＹＥＳ）に行われているため、非パイプライン型の動作が行われている。
パイプライン型の動作では、内部バッファに保持しているデータを利用するタイミングで、別トランザクションのリードデータがメモリから返送され、内部バッファのデータとメモリからのデータとの間で競合が生ずる可能性があり、データの競合が発生した場合にはいずれかのデータが消失してしまう。
本実施の形態では、パイプライン型の動作で内部バッファのデータを再利用する場合に、メモリから受信するリードデータのデータ取得部１１１への出力タイミングと内部バッファからのデータのデータ取得部１１１への出力タイミングとが重ならないように、メモリからのリードデータの受信タイミングを遅らせる。
このようにして、本実施の形態のメモリ制御装置１００では、パイプライン型のメモリに対応する。
そして、本実施の形態のメモリ制御装置１００は、パイプライン型メモリの特徴を活かすことができ、メモリアクセスのスループット向上に寄与することができる。
【００６８】
本実施の形態に係るメモリ制御装置１００の構成例を図７に示す。
【００６９】
図３の構成と比較して、図７では、コマンド発行間隔制御部１１４とＦＩＦＯバッファ１１０が追加されている。
【００７０】
コマンド発行間隔制御部１１４は、内部バッファＡ１０９のデータを利用する場合に、内部バッファＡ１０９のデータを利用するために必要な時間、メモリ１０５へのリードコマンドの出力を遅延させる制御を行う。
メモリ１０５からは、リードコマンドを出力してから、ある一定間隔の後（リードレイテンシ）にリードデータが返送されてくるため、コマンド発行間隔制御部１１４によりリードコマンドを発行する間隔を制御することで、内部バッファＡのデータを利用するための時間を空けることが可能である。
なお、コマンド発行間隔制御部１１４がリードコマンドの出力を遅延させる遅延時間は、例えば、パイプラインにおける１スロット分の時間である。
本実施の形態では、コマンド発行間隔制御部１１４も、コマンド出力部の例に相当する。
【００７１】
本実施の形態では、メモリアドレス変換部１０６は、メモリ１０５へのリードコマンドをＦＩＦＯバッファ１１０に格納する。
更に、メモリアドレス変換部１０６は、内部バッファＡ１０９に保持されているデータを入力するようデータ整列部１０３に指示する内部バッファデータ入力コマンド（キャッシュデータ入力コマンドに相当）と、メモリ１０５からのデータを入力するようデータ整列部１０３に指示するメモリデータ入力コマンドをＦＩＦＯバッファ１１０に格納する。
ＦＩＦＯバッファ１１０は、リードコマンド、内部バッファデータ入力コマンド及びメモリデータ入力コマンドを記憶する。
【００７２】
本実施の形態に係るメモリ制御装置１００は、パイプライン型のメモリを制御する。
つまり、本実施の形態に係るメモリ制御装置１００は、リクエスト要求元１０１から受理したリードリクエストに対応するリードデータをリクエスト要求元１０１に全て返送し終わる前に、次のリードリクエストをリクエスト要求元１０１から受理し、メモリ１０５に対してリードコマンドを発行する。
このために、ＦＩＦＯバッファ１１０において、発行したリードコマンドを記憶する。
【００７３】
また、本実施の形態では、内部バッファ管理部１０７は、メモリ１０５からリードデータを入力する前に、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」の値と「距離情報Ａ」の値を更新する。
このため、ヒット判定部１１３は、読み出し対象アドレスのデータが内部バッファＡ１０９にキャッシュ済みであるか否かを判定するだけでなく、「内部バッファＡのアドレス」の値と「距離情報Ａ」の値から、読み出し対象アドレスのデータが内部バッファＡ１０９にキャッシュされる予定であるか否かも判定する。
【００７４】
なお、図７に示す他の要素は、図３に示したものと同様なため、説明を省略する。
【００７５】
次に、本実施の形態に係るメモリ制御装置１００の動作例を、図８及び図９を参照して説明する。
【００７６】
Ｓ２０１、Ｓ３０１、Ｓ２０２は、実施の形態１で説明したものと同様であり、説明を省略する。
【００７７】
本実施の形態では、Ｓ３０２において、メモリアドレス変換部１０６が、内部バッファＡ１０９に保持されていないデータのリードを指示するリードコマンド（部分リードコマンド）を生成し、Ｓ５０６において、コマンド発行間隔制御部１１４が、内部バッファＡ１０９のデータを利用するための時間（データの衝突を回避するための時間）だけ間隔を空けてリードコマンド（部分リードコマンド）をメモリ１０５に出力する。
コマンド発行間隔制御部１１４は、メモリアドレス変換部１０６がリードコマンドを生成した後にリードコマンドを出力する通常のタイミングから、所定の遅延時間が経過した後に、リードコマンドをメモリ１０５に出力する。
【００７８】
次に、内部バッファ管理部１０７が、最後尾データに後続のペイロードデータが含まれるか否かを判断する（Ｓ５０５）。
つまり、内部バッファ管理部１０７は、Ｓ２０２又はＳ３０２で生成されたリードコマンドに対してメモリ１０５から読み出されるデータのうちの最後尾データに後続のペイロードデータが含まれるか否かを判断する。
この処理は、図４のＳ４０１と同様の処理である。
実施の形態１と同様に、内部バッファ管理部１０７は、メモリアドレス変換部１０６から、リクエスト要求元１０１からのリードリクエスト及びメモリ１０５へのリードコマンドを入力しており、また、図１のデータ配置及び図２のデータ配置を認識しているため、Ｓ５０５のように、最後尾データに後続のペイロードデータが含まれるか否かを判断することができる。
【００７９】
最後尾データに後続のペイロードデータが含まれる場合（Ｓ５０５でＹＥＳ）は、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」の値と「距離情報Ａ」の値を更新する（Ｓ５０７）。
但し、この時点では、内部バッファＡ１０９のデータは更新しない。
本実施の形態では、パイプライン型のメモリに対応した動作を行うために、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」及び「距離情報Ａ」の値を、リードデータをメモリ１０５から入力する前に更新する。
【００８０】
次に、メモリアドレス変換部１０６が、コマンドをＦＩＦＯバッファ１１０に格納する（Ｓ５０１）。
具体的には、メモリアドレス変換部１０６は、Ｓ２０２において全域リードコマンドを生成した場合には、メモリ１０５からのデータを入力するようデータ整列部１０３に指示するメモリデータ入力コマンドを生成する。
そして、メモリアドレス変換部１０６は、全域リードコマンド及びリードリクエストとメモリデータ入力コマンドをＦＩＦＯバッファ１１０に格納する。
また、メモリアドレス変換部１０６は、Ｓ３０２において部分リードコマンドを生成した場合には、内部バッファＡ１０９に保持されているデータを入力するようデータ整列部１０３に指示する内部バッファデータ入力コマンドと、メモリデータ入力コマンドを生成する。
そして、メモリアドレス変換部１０６は、部分リードコマンド及びリードリクエストと内部バッファデータ入力コマンドとメモリデータ入力コマンドをＦＩＦＯバッファ１１０に格納する。
なお、ＥＣＣ訂正をした要求ペイロードデータの返送が完了する前に、リクエスト要求元１０１からリードリクエストを受け付けた場合は、連続してＦＩＦＯバッファ１１０にコマンドが格納される。
【００８１】
図８の処理と並行して、データ整列部１０３は、定期的にＦＩＦＯバッファ１１０にコマンドが蓄積されているかどうかを確認し（Ｓ５０２）、ＦＩＦＯバッファ１１０にコマンドがあれば（Ｓ５０２でＹＥＳ）、ＦＩＦＯバッファ１１０からコマンドを取り出す（Ｓ５０３）。
取り出したコマンドが内部バッファデータ入力コマンドであれば、Ｓ５０４でＹＥＳとなり、Ｓ３０３に処理を進める。
取り出したコマンドがメモリデータ入力コマンドであれば、Ｓ５０４でＮＯとなり、Ｓ２０３に処理を進める。
なお、作図上の理由により、図９には、取り出したコマンドがリードコマンド及びリードリクエストである場合の処理が示されていないが、リードコマンド及びリードリクエストを取り出した場合は、データ整列部１０３は、取り出したリードコマンド及びリードリクエストを所定の記憶領域に保持するとともに、再度、ＦＩＦＯバッファ１１０からコマンドを取り出す。
【００８２】
Ｓ２０３では、データ選択部１０８がメモリ１０５からリードデータを入力し、内部バッファ管理部１０７にリードデータの入力を通知する。
内部バッファ管理部１０７は、入力されたリードデータが最後尾のデータであるか否かを判断し（Ｓ４００）、リードデータが最後尾データである場合は、最後尾データに後続のペイロードデータが含まれているか否かを判断する（Ｓ４０１）。
最後尾データに後続のペイロードデータが含まれている場合は、内部バッファ管理部１０７は内部バッファＡ１０９のデータを更新する（Ｓ４０２）。
【００８３】
Ｓ３０３では、内部バッファ管理部１０７は、内部バッファＡ１０９のデータをデータ選択部１０８を介してデータ整列部１０３に送る。
【００８４】
データ整列部１０３は、データの整列ができるか否かを判断し（Ｓ３０５）、データの整列ができる場合は、データ整列部１０３は、要求ペイロードデータと対応ＥＣＣを抽出し、抽出したデータの整列を行う（Ｓ２０５）。
更に、ＥＣＣ訂正部１０２が、整列されたデータをデータ整列部１０３から取得し、ＥＣＣデータを用いて要求ペイロードデータのＥＣＣ訂正を行った後に、リクエスト要求元１０１に、要求ペイロードデータを返送する（Ｓ２０６）。
要求ペイロードデータを全て返送したら処理が完了する（Ｓ２０７）。
【００８５】
なお、Ｓ２０３、Ｓ４００、Ｓ４０１、Ｓ４０２、Ｓ３０５、Ｓ２０５、Ｓ２０６、Ｓ２０７の動作は、図４について説明したものと同じである。
【００８６】
次に、図８、図９及び図１２を用いて、本実施の形態に係るメモリ制御装置１００の動作を具体的に説明する。
ここでは、リクエスト要求元１０１から、第１のリードリクエストとして、００００ｈ番地（図１）からの４バイトリードのリードリクエストを受理し、第１のリードリクエストに対して要求ペイロードデータを返送する前に、第２のリードリクエストとして、０００４ｈ番地（図１）からの４バイトリードのリードリクエストを受理する例を想定して、メモリ制御装置１００の動作を説明する。
【００８７】
なお、図１２のＴ１〜Ｔ１１は、パイプライン処理における各スロットを示している。
Ｍｅｍｏｒｙ  ＣＬＫは、リクエスト要求元１０１、メモリ制御装置１００及びメモリ１０５の動作クロックを示す。
また、図１２のＣｏｍｍａｎｄ（Ｃ１）は、図７のＣ１に相当し、Ｃｏｍｍａｎｄ（Ｃ２）は、図７のＣ２に相当し、Ｃｏｍｍａｎｄ（Ｃ３）は、図７のＣ３に相当する。
また、図１２のＲｅａｄ  Ｄａｔａ（Ｏｕｔ）は、ＥＣＣ訂正部１０２からリクエスト要求元１０１への要求ペイロードデータの出力を示している。
また、図１２のＲｅａｄ  Ｄａｔａ（Ｉｎ）は、メモリ１０５からのリードデータの入力を示している。
また、ｓＲｅａｄ−００００は、リクエスト要求元１０１からのリードリクエストを示し、００００ｈ番地（図１）から４バイトリードのリードリクエストを示している。
また、ｓＲｅａｄ−０００４は、リクエスト要求元１０１からのリードリクエストを示し、０００４ｈ番地（図１）から４バイトリードのリードリクエストを示している。
ｄＲｅａｄ−００００は、メモリ１０５へのリードコマンドを示し、００００ｈ番地（図２）から４バイトリードのリードコマンドを示している。
ｄＲｅａｄ−０００４は、メモリ１０５へのリードコマンドを示し、０００４ｈ番地（図２）から４バイトリードのリードコマンドを示している。
ｄＲｅａｄ−０００８は、メモリ１０５へのリードコマンドを示し、０００８ｈ番地（図２）から４バイトリードのリードコマンドを示している。
Ｒｅａｄ  Ｄａｔａ（ｏｕｔ）の以外の欄にあるｄａｔａ−００００は、メモリ１０５からリードされた００００ｈ番地（図２）のデータを示している。
Ｒｅａｄ  Ｄａｔａ（ｏｕｔ）の以外の欄にあるｄａｔａ−０００４は、メモリ１０５からリードされた０００４ｈ番地（図２）のデータを示している。
Ｒｅａｄ  Ｄａｔａ（ｏｕｔ）の以外の欄にあるｄａｔａ−０００８は、メモリ１０５からリードされた０００８ｈ番地（図２）のデータを示している。
Ｒｅａｄ  Ｄａｔａ（ｏｕｔ）の欄にあるｄａｔａ−００００は、リクエスト要求元１０１に出力する００００ｈ番地（図１）の要求ペイロードデータを示している。
Ｒｅａｄ  Ｄａｔａ（ｏｕｔ）の欄にあるｄａｔａ−０００４は、リクエスト要求元１０１に出力する０００４ｈ番地（図１）の要求ペイロードデータを示している。
【００８８】
まず、メモリアドレス変換部１０６が、リクエスト要求元１０１から、００００ｈ番地（図１）から４バイトリードのリードリクエスト（図１２のｓＲｅａｄ−００００）を受理する（Ｓ２０１）。
次に、ヒット判定部１１３が、受理したリードリクエストが内部バッファＡ１０９に格納されているデータとヒットするかを判定する（Ｓ３０１）。
なお、この時点では、内部バッファＡ１０９にはデータが格納されていないので、Ｓ３０１の判定結果はＮｏとなる。
【００８９】
次に、メモリアドレス変換部１０６が、００００ｈ番地（図２）と０００４ｈ番地（図２）からのリードを指示するリードコマンド（図１２のｄＲｅａｄ−００００とｄＲｅａｄ−０００４）を生成し、生成したリードコマンドをメモリ１０５に出力する（Ｓ２０２）。
【００９０】
次に、内部バッファ管理部１０７が、最後尾データに後続のペイロードデータが含まれるか否かを確認し（Ｓ５０５）、この場合は、０００４ｈ番地（図２）からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」、「距離情報Ａ」の値を更新する（Ｓ５０７）。
この結果、図１２の「内部バッファＡのアドレス」の欄に示されるように「内部バッファＡのアドレス」に「００００ｈ番地」が記述され、「距離情報Ａ」には「４」が記述される。
また、メモリアドレス変換部１０６は、リードコマンド（図１２のｄＲｅａｄ−００００とｄＲｅａｄ−０００４）及びリードリクエスト（図１２のｓＲｅａｄ−０００４）、メモリデータ入力コマンドをＦＩＦＯバッファ１１０に格納する（Ｓ５０１）。
【００９１】
ここで、メモリアドレス変換部１０６が、リクエスト要求元１０１から、０００４ｈ番地（図１）から４バイトリードのリードリクエスト（図１２のｓＲｅａｄ−０００４）を受理したとする（Ｓ２０１）。
前述のようにＳ５０７の処理にて内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」に「００００ｈ番地」が記述され、「距離情報Ａ」には「４」が記述されており、０００４ｈ番地（図２）のデータは内部バッファＡ１０９にキャッシュされる予定なので、Ｓ３０１の判定はＹＥＳとなる。
このため、メモリアドレス変換部１０６は、０００８ｈ番地（図２）からリードを指示するリードコマンド（図１２のｄＲｅａｄ−０００８）を生成する（Ｓ３０２）。
そして、コマンド発行間隔制御部１１４が、内部バッファＡ１０９のデータを利用するための時間（データの衝突を回避するための時間）だけ間隔を空けてリードコマンド（図１２のｄＲｅａｄ−０００８）をメモリ１０５に出力する。
リクエスト要求元１０１からのリードリクエスト（図１２のｓＲｅａｄ−０００４）の入力タイミングからは、リードコマンド（図１２のｄＲｅａｄ−０００８）は、図１２の符号１２０１のタイミングでメモリ１０５に出力することができる。
しかし、本実施の形態では、コマンド発行間隔制御部１１４は、リードコマンドを出力できるタイミングから、１スロット分、リードコマンドの出力タイミングを遅らせ、符号１２０２のタイミングでリードコマンド（図１２のｄＲｅａｄ−０００８）をメモリ１０５に出力している。
【００９２】
次に、内部バッファ管理部１０７が、最後尾データに後続のペイロードデータが含まれるか否かを確認する（Ｓ５０５）。
この場合は、０００８ｈ番地（図２）からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」、「距離情報Ａ」の値を更新する（Ｓ５０７）。
この結果、図１２の「内部バッファＡのアドレス」の欄に示されるように「内部バッファＡのアドレス」に「０００４ｈ番地」が記述され、「距離情報Ａ」には「４」が記述される。
また、メモリアドレス変換部１０６は、リードコマンド（図１２のｄＲｅａｄ−０００８）及びリードリクエスト（図１２のｓＲｅａｄ−０００４）、メモリデータ入力コマンド及び内部バッファデータ入力コマンドをＦＩＦＯバッファ１１０に格納する（Ｓ５０１）。
【００９３】
上記の動作と並行して、データ整列部１０３が、ＦＩＦＯバッファ１１０から先頭のリードコマンド（図１２のｄＲｅａｄ−００００とｄＲｅａｄ−０００４）と、メモリデータ入力コマンドを取り出す（Ｓ５０２、Ｓ５０３）。
この場合は、内部バッファＡ１０９を利用しないため、Ｓ５０４はＮＯとなり、図１２に示すように、データ選択部１０８が、メモリ１０５から００００ｈ番地（図２）のデータ（図１２のｄａｔａ−００００）を入力する（Ｓ２０３）。
そして、入力されたデータ（図１２のｄａｔａ−００００）は、最後尾データではないので（Ｓ４００でＮＯ）、内部バッファＡ１０９には格納されない。
また、入力されたデータ（図１２のｄａｔａ−００００）だけではデータの整列ができないので（Ｓ３０５でＮＯ）、メモリ１０５からの次のデータの入力を待つ。
なお、このとき、００００ｈ番地（図２）のデータ（図１２のｄａｔａ−００００）は前回値保持部１０４に保持される。
【００９４】
次に、データ選択部１０８が、メモリ１０５から０００４ｈ番地（図２）のデータ（図１２のｄａｔａ−０００４）を入力する（Ｓ２０３）。
入力されたデータ（図１２のｄａｔａ−０００４）は、最後尾データであり（Ｓ４００でＹＥＳ）、また、後続のペイロードデータを含むので（Ｓ４０１でＹＥＳ）、入力されたデータが内部バッファＡ１０９に格納される。
また、入力されたデータ（図１２のｄａｔａ−０００４）と前回値保持部１０４のデータ（図１２のｄａｔａ−００００）でデータの整列ができるので（Ｓ３０５でＹＥＳ）、データ整列部１０３がデータを整列し、ＥＣＣ訂正部１０２がＥＣＣ訂正を行って、ＥＣＣ訂正後の要求ペイロードデータ（図１２のｄａｔａ−００００）をリクエスト要求元１０１に出力する（Ｓ２０５、Ｓ２０６）。
また、０００４ｈ番地（図２）のデータ（図１２のｄａｔａ−０００４）は前回値保持部１０４に保持される。
【００９５】
また、データ整列部１０３は、ＦＩＦＯバッファ１１０から次のリードコマンド（図１２のｄＲｅａｄ−０００８）と、内部バッファデータ入力コマンド及びメモリデータ入力コマンドを取り出す（Ｓ５０２、Ｓ５０３）。
この場合は、内部バッファＡ１０９を利用するため、Ｓ５０４はＹＥＳとなり、内部バッファＡ１０９内のデータ（図１２のｄａｔａ−０００４）がデータ整列部１０３に出力される（Ｓ３０３）。
内部バッファＡ１０９からのデータ（図１２のｄａｔａ−０００４）と前回値保持部１０４のデータ（図１２のｄａｔａ−０００４）ではデータの整列ができないので（Ｓ３０５でＮＯ）、メモリ１０５からの次のデータの入力を待つ。
なお、このとき、内部バッファＡ１０９からのデータ（図１２のｄａｔａ−０００４）は前回値保持部１０４に保持される。
【００９６】
次に、データ選択部１０８が、メモリ１０５から０００８ｈ番地（図２）のデータ（図１２のｄａｔａ−０００８）を入力する（Ｓ２０３）。
なお、符号１２０１のタイミングでコマンド発行間隔制御部１１４からメモリ１０５にｄＲｅａｄ−０００８が出力されていれば、符号１２０３のタイミングでメモリ１０５からｄａｔａ−０００８が入力されることになるが、前述のように、符号１２０２のタイミングでｄＲｅａｄ−０００８が出力されているので、符号１２０４のタイミングでメモリ１０５からｄａｔａ−０００８が入力される。
【００９７】
入力されたデータ（図１２のｄａｔａ−０００８）は、最後尾データであり（Ｓ４００でＹＥＳ）、また、後続のペイロードデータを含むので（Ｓ４０１でＹＥＳ）、入力されたデータが内部バッファＡ１０９に格納される。
また、入力されたデータ（図１２のｄａｔａ−０００８）と前回値保持部１０４のデータ（図１２のｄａｔａ−０００４）でデータの整列ができるので（Ｓ３０５でＹＥＳ）、データ整列部１０３がデータを整列し、ＥＣＣ訂正部１０２がＥＣＣ訂正を行って、ＥＣＣ訂正後の要求ペイロードデータ（図１２のｄａｔａ−０００４）をリクエスト要求元１０１に出力する（Ｓ２０５、Ｓ２０６）。
また、０００８ｈ番地（図２）のデータ（図１２のｄａｔａ−０００４）は前回値保持部１０４に保持される。
【００９８】
図１２の例において、コマンド発行間隔制御部１１４によりｄＲｅａｄ−０００８の出力タイミングが調整されずに、符号１２０１のタイミングでｄＲｅａｄ−０００８が出力されていれば、符号１２０３のタイミングでメモリ１０５からｄａｔａ−０００８が入力される。
この場合には、符号１２０６のタイミングで、ｄａｔａ−０００８が前回値保持部１０４に入力されるが、符号１２０５に示すように、内部バッファＡ１０９内のｄａｔａ−０００４が前回値保持部１０４に入力されるタイミングと競合してしまう。
このため、ｄａｔａ−０００８とｄａｔａ−０００４のいずれかが消失してしまう。
これに対して、本実施の形態では、コマンド発行間隔制御部１１４が符号１２０２のタイミングでｄＲｅａｄ−０００８を出力するため、符号１２０４のタイミングでメモリ１０５からｄａｔａ−０００８が入力される。
そして、符号１２０４のタイミングで入力された場合は、ｄａｔａ−０００８が前回値保持部１０４に入力されるタイミングは、符号１２０７のタイミングであり、データの競合は起こらない。
【００９９】
次に、図８、図９及び図１３を用いて、内部バッファＡ１０９に加えて内部バッファＢ１０９０が存在するメモリ制御装置１００の動作例を説明する。
ここでは、リクエスト要求元１０１から、第１のリードリクエストとして、００００ｈ番地（図１）からの４バイトリードのリードリクエストを受理し、第１のリードリクエストに対して要求ペイロードデータを返送する前に、第２のリードリクエストとして、００１４ｈ番地（図１）からの４バイトリードのリードリクエストを受理する例を想定して、メモリ制御装置１００の動作を説明する。
なお、図１３の「内部バッファＢのアドレス」及び「内部バッファＢ」に示されるように、内部バッファＢ１０９０には、以前の００１０ｈ番地（図１）についてのリードリクエストにより００１８ｈ番地（図２）のデータ（図１３のｄａｔａ−００１８）が格納されているものとする。
なお、図１３では、ｄａｔａ−００１８が内部バッファＢ１０９０に継続して保持されていることを表すために、ｄａｔａ−００１８を二重線で表現している。
【０１００】
まず、メモリアドレス変換部１０６が、リクエスト要求元１０１から、００００ｈ番地（図１）から４バイトリードのリードリクエスト（図１３のｓＲｅａｄ−００００）を受理する（Ｓ２０１）。
次に、ヒット判定部１１３が、受理したリードリクエストが内部バッファＡ１０９又は内部バッファＢ１０９０に格納されているデータとヒットするかを判定する（Ｓ３０１）。
なお、この時点では、内部バッファＡ１０９にはデータが格納されておらず、また、内部バッファＢ１０９０のデータはリードリクエストで要求されているアドレスに合致しないので、Ｓ３０１の判定結果はＮｏとなる。
【０１０１】
次に、メモリアドレス変換部１０６が、００００ｈ番地（図２）と０００４ｈ番地（図２）からリードを指示するリードコマンド（図１３のｄＲｅａｄ−００００とｄＲｅａｄ−０００４）を生成し、生成したリードコマンドをメモリ１０５に出力する（Ｓ２０２）。
【０１０２】
次に、内部バッファ管理部１０７が、最後尾データに後続のペイロードデータが含まれるか否かを確認し（Ｓ５０５）、この場合は、０００４ｈ番地（図２）からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＡのアドレス」、「距離情報Ａ」の値を更新する（Ｓ５０７）。
この結果、図１３の「内部バッファＡのアドレス」の欄に示されるように「内部バッファＡのアドレス」に「００００ｈ番地」が記述され、「距離情報Ａ」には「４」が記述される。
また、メモリアドレス変換部１０６は、リードデータ（図１３のｄＲｅａｄ−００００とｄＲｅａｄ−０００４）と、メモリデータ入力コマンドをＦＩＦＯバッファ１１０に格納する（Ｓ５０１）。
【０１０３】
ここで、メモリアドレス変換部１０６が、リクエスト要求元１０１から、００１４ｈ番地（図１）から４バイトリードのリードリクエスト（図１３のｓＲｅａｄ−００１４）を受理したとする（Ｓ２０１）。
前述のように内部バッファＢ１０９０には、００１４ｈ番地（図１）に対応する００１８ｈ番地（図２）のデータと００１Ｃｈ番地（図２）のデータのうち、００１８ｈ番地（図２）のデータ（図１３のｄａｔａ−００１８）がキャッシュされているので、Ｓ３０１の判定はＹＥＳとなる。
このため、メモリアドレス変換部１０６は、００１Ｃｈ番地（図２）からのリードを指示するリードコマンド（図１３のｄＲｅａｄ−００１Ｃ）を生成する（Ｓ３０２）。
そして、コマンド発行間隔制御部１１４が、内部バッファＢ１０９０のデータを利用するための時間（データの衝突を回避するための時間）だけ間隔を空けてリードコマンド（図１３のｄＲｅａｄ−００１Ｃ）をメモリ１０５に出力する。
リクエスト要求元１０１からのリードリクエスト（図１３のｓＲｅａｄ−００１４）の入力タイミングからは、リードコマンド（図１３のｄＲｅａｄ−００１Ｃ）は、図１３の符号１３０１のタイミングでメモリ１０５に出力される。
しかし、本実施の形態では、コマンド発行間隔制御部１１４は、リードコマンドを出力できるタイミングから、１スロット分、リードコマンドの出力タイミングを遅らせて、符号１３０２のタイミングでリードコマンド（図１３のｄＲｅａｄ−００１Ｃ）をメモリ１０５に出力している。
【０１０４】
次に、内部バッファ管理部１０７が、最後尾データに後続のペイロードデータが含まれるか否かを確認し（Ｓ５０５）、この場合は、００１Ｃｈ番地（図２）からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部１０７は、内部バッファ情報記憶部１１２の「内部バッファＢのアドレス」、「距離情報Ｂ」の値を更新する（Ｓ５０７）。
この結果、図１３の「内部バッファＢのアドレス」の欄に示されるように「内部バッファＢのアドレス」に「００１４ｈ番地」が記述され、「距離情報Ｂ」には「４」が記述される。
また、メモリアドレス変換部１０６は、リードデータ（図１３のｄＲｅａｄ−００１Ｃ）及びリードリクエスト（図１３のｓＲｅａｄ−００１４）と、メモリデータ入力コマンド及び内部バッファデータ入力コマンドをＦＩＦＯバッファ１１０に格納する（Ｓ５０１）。
なお、本例では、内部バッファデータ入力コマンドには、内部バッファＢ１０９０のデータを入力する旨が指示されている。
一方、内部バッファＡ１０９のデータを利用する場合は、内部バッファデータ入力コマンドには、内部バッファＡ１０９のデータを入力する旨が指示されている。
【０１０５】
上記の動作と並行して、データ整列部１０３は、ＦＩＦＯバッファ１１０から先頭のリードコマンド（図１３のｄＲｅａｄ−００００とｄＲｅａｄ−０００４）と、メモリデータ入力コマンドを取り出す（Ｓ５０２、Ｓ５０３）。
この場合は、内部バッファＡ１０９を利用しないため、Ｓ５０４はＮＯとなり、図１３に示すように、データ選択部１０８が、メモリ１０５から００００ｈ番地（図２）のデータ（図１３のｄａｔａ−００００）を入力する（Ｓ２０３）。
そして、入力されたデータ（図１３のｄａｔａ−００００）は、最後尾データではないので（Ｓ４００でＮＯ）、内部バッファＡ１０９には格納されない。
また、入力されたデータ（図１３のｄａｔａ−００００）だけではデータの整列ができないので（Ｓ３０５でＮＯ）、メモリ１０５からの次のデータの入力を待つ。
なお、このとき、００００ｈ番地（図２）のデータ（図１３のｄａｔａ−００００）は前回値保持部１０４に保持される。
【０１０６】
次に、データ選択部１０８が、メモリ１０５から０００４ｈ番地（図２）のデータ（図１３のｄａｔａ−０００４）を入力する（Ｓ２０３）。
入力されたデータ（図１３のｄａｔａ−０００４）は、最後尾データであり（Ｓ４００でＹＥＳ）、また、後続のペイロードデータを含むので（Ｓ４０１でＹＥＳ）、入力されたデータが内部バッファＡ１０９に格納される。
また、入力されたデータ（図１３のｄａｔａ−０００４）と前回値保持部１０４のデータ（図１３のｄａｔａ−００００）でデータの整列ができるので（Ｓ３０５でＹＥＳ）、データ整列部１０３がデータを整列し、ＥＣＣ訂正部１０２がＥＣＣ訂正を行って、ＥＣＣ訂正後の要求ペイロードデータ（図１３のｄａｔａ−００００）をリクエスト要求元１０１に出力する（Ｓ２０５、Ｓ２０６）。
また、０００４ｈ番地（図２）のデータ（図１３のｄａｔａ−０００４）は前回値保持部１０４に保持される。
【０１０７】
また、データ整列部１０３は、ＦＩＦＯバッファ１１０から次のリードデータ（図１３のｄＲｅａｄ−００１Ｃ）と、内部バッファデータ入力コマンド及びメモリデータ入力コマンドを取り出す（Ｓ５０２、Ｓ５０３）。
この場合は、内部バッファＢ１０９０を利用するため、Ｓ５０４はＹＥＳとなり、内部バッファＢ１０９０内のデータ（図１３のｄａｔａ−００１８）がデータ整列部１０３に出力される（Ｓ３０３）。
内部バッファＢ１０９０からのデータ（図１３のｄａｔａ−００１８）と前回値保持部１０４のデータ（図１３のｄａｔａ−０００４）ではデータの整列ができないので（Ｓ３０５でＮＯ）、メモリ１０５からの次のデータの入力を待つ。
なお、このとき、内部バッファＡ１０９からのデータ（図１３のｄａｔａ−００１８）は前回値保持部１０４に保持される。
【０１０８】
次に、データ選択部１０８が、メモリ１０５から００１Ｃｈ番地（図２）のデータ（図１３のｄａｔａ−００１Ｃ）を入力する（Ｓ２０３）。
なお、符号１３０１のタイミングでコマンド発行間隔制御部１１４からメモリ１０５にｄＲｅａｄ−００１Ｃが出力されていれば、符号１３０３のタイミングでメモリ１０５からｄａｔａ−００１Ｃが入力されることになるが、前述のように、符号１３０２のタイミングでｄＲｅａｄ−００１Ｃが出力されているので、符号１３０４のタイミングでメモリ１０５からｄａｔａ−００１Ｃが入力される。
【０１０９】
入力されたデータ（図１３のｄａｔａ−００１Ｃ）は、最後尾データであり（Ｓ４００でＹＥＳ）、また、後続のペイロードデータを含むので（Ｓ４０１でＹＥＳ）、入力されたデータが内部バッファＢ１０９０に格納される。
また、入力されたデータ（図１３のｄａｔａ−００１Ｃ）と前回値保持部１０４のデータ（図１３のｄａｔａ−００１８）でデータの整列ができるので（Ｓ３０５でＹＥＳ）、データ整列部１０３がデータを整列し、ＥＣＣ訂正部１０２がＥＣＣ訂正を行って、ＥＣＣ訂正後の要求ペイロードデータ（図１３のｄａｔａ−００１４）をリクエスト要求元１０１に出力する（Ｓ２０５、Ｓ２０６）。
また、００１Ｃｈ番地（図２）のデータ（図１３のｄａｔａ−００１Ｃ）は前回値保持部１０４に保持される。
【０１１０】
なお、以上では、内部バッファＡ１０９及び内部バッファＢ１０９０に１アドレス分のデータ（４バイトのデータ）を格納することとしているが、内部バッファＡ１０９及び内部バッファＢ１０９０に２アドレス分以上のデータを格納するようにしてもよい。
また、リクエスト要求元１０１からのリードリクエストで対象となっている図１の形式のアドレスを図２の形式のアドレスに変換した結果、３つ以上のアドレスが読み出し候補アドレスとなった場合に、３つ以上の読み出し候補アドレスのうちの前から２つのアドレスのデータが内部バッファＡ１０９又は内部バッファＢ１０９０にキャッシュされている場合は、メモリアドレス変換部１０６は、当該２つアドレス以外のアドレスのデータ、すなわち、３つ目のアドレス以降のデータのリードを指示するリードコマンド（部分リードコマンド）を生成する。
【０１１１】
また、以上では、コマンド発行間隔制御部１１４が、メモリアドレス変換部１０６により生成された部分リードコマンドの出力タイミングを１スロット分遅らせてメモリ１０５に出力している。
これに対して、メモリアドレス変換部１０６が、部分リードコマンドを、通常の生成タイミングから１スロット分遅らせて生成することで、メモリ１０５からのリードデータと内部バッファＡ１０９からのデータとの間での衝突を回避するようにしてもよい。
【０１１２】
また、本実施の形態のメモリ制御装置１００も、実施の形態１と同様に、４バイトの整数倍ずつのリードリクエストにも対処可能である。
また、３つ以上の内部バッファを用いる場合も、本実施の形態で説明した手順にて処理することができる。
【０１１３】
以上、本実施の形態では、
パイプライン型メモリに対応するためのメモリ制御装置であって、
（ａ）メモリに発行したリクエストを記憶する手段
（ｂ）コマンド発行間隔を制御し、次にメモリに発行するコマンドの発行を遅延させる手段を有するメモリ制御装置を説明した。
【０１１４】
実施の形態３．
実施の形態２では、内部バッファＡ１０９のデータを利用する場合、無条件にメモリ１０５へのリードコマンドの発行間隔を空けていたが、リクエスト要求元１０１からのリードリクエストを受理した時点で、内部バッファＡ１０９を利用する以上の時間が空いている場合、すなわち、データの競合が起きない場合には、リードコマンドの発行間隔を空ける必要がない。
本実施の形態では、内部バッファＡ１０９の利用のための時間が空いていないことを検出し、その場合のみコマンド発行間隔を空けるように制御することで、無駄なくリードコマンドを発行する方式を説明する。
【０１１５】
図１０は、本実施の形態に係るメモリ制御装置１００の構成例を示す。
【０１１６】
図７と比較して、図１０では、発行間隔判定部１１５が追加されている。
発行間隔判定部１１５は、現在、メモリ１０５に発行しようとしている部分リードコマンドと、その部分リードコマンドの直前に発行したリードコマンド（全域リードコマンド、部分リードコマンドのいずれか）との発行間隔が一定以上空いているかどうかを判定する。
具体的には、発行間隔判定部１１５は、最後にリードコマンド（全域リードコマンド、部分リードコマンドのいずれか）を出力してからの経過時間が、実施の形態２で説明した発行間隔（遅延時間）を超えているかどうかを判定する。
コマンド発行間隔制御部１１４は、最後にリードコマンドを出力してからの経過時間が、実施の形態２で説明した発行間隔（遅延時間）を超えている場合には、間隔を空けることなく、部分リードコマンドをメモリ１０５に出力する。
なお、発行間隔判定部１１５は、最後にリードコマンドを出力した時刻を、直前リードの発行時刻として保持しており、この直前リードの発行時刻と現在時刻との差が、実施の形態２で説明した発行間隔（遅延時間）を超えているかどうかを判定する。
本実施の形態では、発行間隔判定部１１５も、コマンド出力部の例に相当する。
【０１１７】
次に、本実施の形態に係るメモリ制御装置１００の動作を、図１１及び図１４を参照しながら説明する。
なお、以下では、主に実施の形態２との相違点を説明する。
また、以下では、リクエスト要求元１０１から、第１のリードリクエストとして、００００ｈ番地（図１）からの４バイトリードのリードリクエストを受理し、第１のリードリクエストに対して要求ペイロードデータを返送する前に、第２のリードリクエストとして、０００４ｈ番地（図１）からの４バイトリードのリードリクエストを受理する例を想定して、メモリ制御装置１００の動作を説明する。
【０１１８】
まず、メモリアドレス変換部１０６は、００００ｈ番地（図１）から４バイトリードのリードリクエスト（図１４のｓＲｅａｄ−００００）を入力し、実施の形態２と同様に、００００ｈ番地（図２）から８バイトのリードを指示する全域リードコマンドを生成し、コマンド発行間隔制御部１１４が、この全域リードコマンドをメモリ１０５に出力する（Ｓ２０１、Ｓ３０１、Ｓ２０２）。
コマンド発行間隔制御部１１４は、リードコマンドの出力の際に、リードコマンドの出力を発行間隔判定部１１５に通知し、発行間隔判定部１１５では、コマンド発行間隔制御部１１４からリードコマンドの出力が通知された時刻で直前リードの発行時刻を更新する（Ｓ６０２）。
以降は、実施の形態２と同様の処理が行われる。
【０１１９】
その後、メモリアドレス変換部１０６が、０００４ｈ番地（図１）から４バイトリードのリードリクエスト（図１４のｓＲｅａｄ−０００４）を入力する（Ｓ２０１）。
ここでは、内部バッファＡ１０９のデータを利用できるので、ヒット判定となり、Ｓ３０１はＹＥＳであり、メモリアドレス変換部１０６は、実施の形態２と同様に、部分リードコマンド（図１４のｄＲｅａｄ−０００８）を生成する（Ｓ３０２）。
次に、発行間隔判定部１１５は、最後のリードコマンド（図１４のｄＲｅａｄ−０００４）の出力からの経過時間が遅延時間（図１４の例では、１スロット分の時間）を超えているか否かを判断する（Ｓ６０１）。
図１４の例では、最後のリードコマンドの出力からの経過時間が遅延時間を超えているため（Ｓ６０１でＹＥＳ）、コマンド発行間隔制御部１１４は、発行間隔を空けずに（遅延時間の経過を待たずに）リードコマンド（図１４のｄＲｅａｄ−０００８）をメモリ１０５に出力する。
実施の形態２では、図１４の符号１４０２のタイミングでリードコマンド（ｄＲｅａｄ−０００８）がメモリ１０５に出力されるが、本実施の形態では、リードコマンド（ｄＲｅａｄ−０００８）は、符号１４０１のタイミングでメモリ１０５に出力される。
この結果、メモリ１０５からは、符号１４０３のタイミングで、リードデータ（ｄａｔａ−０００８）が入力される。
一方、実施の形態２の場合は、符号１４０４のタイミングで、リードデータ（ｄａｔａ−０００８）が入力される。
【０１２０】
一方、最後のリードコマンドの出力からの経過時間が遅延時間を超えていない場合（Ｓ６０１でＮＯ）は、コマンド発行間隔制御部１１４は、実施の形態２と同様に、メモリ１０５へのリードコマンドの出力が可能なタイミングから遅延時間を経過した後にリードコマンド（図１４のｄＲｅａｄ−０００８）をメモリ１０５に出力する（Ｓ５０６）。
以降の処理は、実施の形態２と同じであるため、説明を省略する。
【０１２１】
なお、以上では、最後のリードコマンドの出力からの経過時間が遅延時間を超えていない場合は、コマンド発行間隔制御部１１４は、リードコマンドの出力が可能なタイミングから遅延時間を経過した後にリードコマンドをメモリ１０５に出力している。
これに対して、最後のリードコマンドの出力からの経過時間が遅延時間を超えていない場合に、コマンド発行間隔制御部１１４は、最後のリードコマンドの出力からの経過時間と遅延時間との差分の時間を算出し、リードコマンドの出力が可能なタイミングから差分の時間が経過した後にリードコマンドをメモリ１０５に出力するようにしてもよい。
【０１２２】
以上、本実施の形態では、
内部バッファのデータを再利用する時間が十分ある場合には、コマンド発行を遅らせないメモリ制御装置であって、
（ａ）直前に発行したリードコマンドとの発行間隔が、内部バッファのデータを再利用する時間よりも経っているかどうか判定する手段
（ｂ）直前に発行したリードコマンドのタイミングを保持する手段を有するメモリ制御装置を説明した。
【０１２３】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。
あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。
あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１２４】
１００  メモリ制御装置、１０１  リクエスト要求元、１０２  ＥＣＣ訂正部、１０３  データ整列部、１０４  前回値保持部、１０５  メモリ、１０６  メモリアドレス変換部、１０７  内部バッファ管理部、１０８  データ選択部、１０９  内部バッファＡ、１１０  ＦＩＦＯバッファ、１１１  データ取得部、１１２  内部バッファ情報記憶部、１１３  ヒット判定部、１１４  コマンド発行間隔制御部、１１５  発行間隔判定部、１０９０  内部バッファＢ。
【図１】
2014068789.tif 000003
【図２】
2014068789.tif 000004
【図３】
2014068789.tif 000005
【図４】
2014068789.tif 000006
【図５】
2014068789.tif 000007
【図６】
2014068789.tif 000008
【図７】
2014068789.tif 000009
【図８】
2014068789.tif 000010
【図９】
2014068789.tif 000011
【図１０】
2014068789.tif 000012
【図１１】
2014068789.tif 000013
【図１２】
2014068789.tif 000014
【図１３】
2014068789.tif 000015
【図１４】
2014068789.tif 000016
【手続補正書】
【提出日】平成26年9月24日(2014.9.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する２つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストをパイプライン方式にて処理するメモリ制御装置であって、
前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている２つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定するキャッシュ判定部と、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、２つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済み又はキャッシュされる予定のアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリへの前記部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、前記メモリに出力するコマンド出力部とを有することを特徴とするメモリ制御装置。
【請求項２】
前記コマンド出力部は、
２つ以上の読み出し候補アドレスのうちの最前のアドレスのデータと前記最前のアドレスに後続する０個以上のアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、
前記最前のアドレスを含むキャッシュアドレス以外のアドレスのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力することを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記メモリ制御装置は、更に、
コマンドを蓄積するＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）バッファと、
前記ＦＩＦＯバッファからコマンドを入力し、入力したコマンドに従って、前記要求ペイロードデータと前記対応誤り訂正データとを取得するデータ取得部とを有し、
前記コマンド出力部は、
前記部分リードコマンドを前記メモリに出力するとともに、
前記キャッシュ領域から前記キャッシュアドレスのデータを入力するよう前記データ取得部に指示するキャッシュデータ入力コマンドと、前記メモリから前記キャッシュアドレス以外のアドレスのデータを入力するよう前記データ取得部に指示するメモリデータ入力コマンドとを前記ＦＩＦＯバッファに格納し、
前記データ取得部は、
前記ＦＩＦＯバッファから前記キャッシュデータ入力コマンドと前記メモリデータ入力コマンドとを入力し、前記キャッシュデータ入力コマンドに従って、前記キャッシュ領域から前記キャッシュアドレスのデータを入力し、前記メモリデータ入力コマンドに従って、前記部分リードコマンドに応じて読み出された前記キャッシュアドレス以外のアドレスのデータを前記メモリから入力し、
前記キャッシュ領域から入力した前記キャッシュアドレスのデータと、前記メモリから入力した前記キャッシュアドレス以外のアドレスのデータとから、前記要求ペイロードデータと前記対応誤り訂正データとを取得することを特徴とする請求項２に記載のメモリ制御装置。
【請求項４】
前記コマンド出力部は、
前記遅延時間が経過した後に部分リードコマンドを前記メモリに出力することで、前記データ取得部における前記キャッシュ領域からの前記キャッシュアドレスのデータの入力と前記メモリからの前記キャッシュアドレス以外のアドレスのデータの入力との間で衝突を発生させないことを特徴とする請求項３に記載のメモリ制御装置。
【請求項５】
前記コマンド出力部は、
２つ以上の読み出し候補アドレスのうちのいずれのアドレスのデータも前記キャッシュ領域にキャッシュ済みでなく、キャッシュされる予定でもないと前記キャッシュ判定部により判定された場合に、
２つ以上の読み出し候補アドレスの全域からのデータの読み出しを指示する全域リードコマンドを、前記遅延時間の経過を待つことなく前記メモリに出力することを特徴とする請求項１〜４のいずれかに記載のメモリ制御装置。
【請求項６】
前記コマンド出力部は、
部分リードコマンドを前記メモリに出力する場合に、全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えているか否かを判断し、
全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えている場合に、前記遅延時間の経過を待つことなく部分リードコマンドを前記メモリに出力することを特徴とする請求項５に記載のメモリ制御装置。
【請求項７】
全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えていない場合に、
全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間と前記遅延時間との差分時間を算出し、
前記メモリへの前記部分リードコマンドの出力が可能なタイミングから前記差分時間が経過した後に、部分リードコマンドを前記メモリに出力することを特徴とする請求項６に記載のメモリ制御装置。
【請求項８】
前記メモリ制御装置は、更に、
前記コマンド出力部により出力された全域リードコマンド及び部分リードコマンドのいずれかに応じて前記メモリから読み出された最後尾のデータである最後尾データに、前記要求ペイロードデータ及び前記対応誤り訂正データのいずれでもないデータが含まれている場合に、前記最後尾データを前記キャッシュ領域に格納するキャッシュ管理部を有することを特徴とする請求項５〜７のいずれかに記載のメモリ制御装置。
【請求項９】
前記コマンド出力部は、
少なくともパイプライン処理におけるスロット１つ分の時間に相当する時間を前記遅延時間とすることを特徴とする請求項１〜８のいずれかに記載のメモリ制御装置。
【請求項１０】
前記メモリ制御装置は、
複数のキャッシュ領域を有し、
前記キャッシュ判定部は、
２つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記複数のキャッシュ領域のいずれかのキャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定することを特徴とする請求項１〜９のいずれかに記載のメモリ制御装置。
【国際調査報告】
2014068789.tif 000017
2014068789.tif 000018
2014068789.tif 000019
2014068789.tif 000020