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