JPWO2014068789A1 - メモリ制御装置 - Google Patents

メモリ制御装置 Download PDF

Info

Publication number
JPWO2014068789A1
JPWO2014068789A1 JP2014544200A JP2014544200A JPWO2014068789A1 JP WO2014068789 A1 JPWO2014068789 A1 JP WO2014068789A1 JP 2014544200 A JP2014544200 A JP 2014544200A JP 2014544200 A JP2014544200 A JP 2014544200A JP WO2014068789 A1 JPWO2014068789 A1 JP WO2014068789A1
Authority
JP
Japan
Prior art keywords
data
memory
read
address
command
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014544200A
Other languages
English (en)
Other versions
JP5797342B2 (ja
Inventor
浩士 跡部
浩士 跡部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Application granted granted Critical
Publication of JP5797342B2 publication Critical patent/JP5797342B2/ja
Publication of JPWO2014068789A1 publication Critical patent/JPWO2014068789A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1028Adjacent errors, e.g. error in n-bit (n>1) wide storage units, i.e. package error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1016Error in accessing a memory location, i.e. addressing error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

内部バッファA109は、メモリ105からのデータをキャッシュする。メモリアドレス変換部106は、リクエスト要求元101からリードリクエストを入力する。ヒット判定部113は、リードリクエストで要求されているペイロードデータと、対応するECCとが格納されている2つ以上のアドレスである読み出し候補アドレスのいずれかのアドレスのデータが、内部バッファA109にキャッシュ済み又はキャッシュ予定であるかを判定する。コマンド発行間隔制御部114は、いずれかのアドレスのデータが内部バッファA109にキャッシュ済み又はキャッシュ予定である場合に、読み出し候補アドレスのうち内部バッファA109にデータがキャッシュ済み又はキャッシュ予定のアドレス以外のアドレスからのデータリードを指示する部分リードコマンドを、所定の遅延時間が経過した後にメモリ105に出力する。

Description

本発明は、メモリからのペイロードデータの読み出しを要求するリードリクエストを処理する技術に関する。
メモリの信頼性を向上するためにペイロードデータにECC(Error Correcting Code)やパリティビットを付加することがある。
通常は、付加したECC、パリティビット専用に幅方向にメモリ素子を追加する(水平ECC、水平パリティ)。
例えば×8ビット構成のメモリではなく、特殊な×9ビット構成のメモリを使用することが考えられる。
しかし、メモリ素子の追加や特殊メモリの採用は、コスト的に不利であったり、部品の入手性に難がある場合が多い。
その解決策の一つとして、ECCを幅方向ではなく深さ方向へECCを保存することで幅方向にメモリを増やす必要のない、垂直ECC、垂直パリティを採用することがある(以下垂直ECCと記載する)。
例えば、図1に示すようなメモリ構成に垂直ECC方式により、ECCを付加する場合を考える。
図1では、1つのアドレスに、各々のデータ幅が1バイトのペイロードデータが4つ格納されている。
図1のメモリ構成において、垂直ECCにより、4バイトのペイロードデータにつき1バイトのECCを付加すると、図2に示すようなデータの配置となる。
垂直ECCを採用したメモリへアドレスが連続したリードを行うと、メモリからリードする2番目のデータ(第2データ)は、ECCを含めると後続するアドレスが連続したリードにおいても利用する。
リードリクエストの要求元で図1のデータ配置にてペイロードデータを管理しており、メモリでは図2のデータ配置にてペイロードデータとECCを管理している場合に、図1の0000h番地のデータ(D0〜D3)のリードリクエストがあると、以下のデータリードが行われる。
メモリからは図2の0000h番地のデータ(D0〜D3)、0004h番地のデータ(ECC0〜D6)の順序で読み出しが行われ、読み出されたD0〜D3に対してECC0を用いて誤り訂正が行われ、誤り訂正後のD0〜D3が要求元に出力される。
更に、図1の0004h番地のデータ(D4〜D7)のリードリクエストがあった場合は、以下のデータリードが行われる。
メモリからは図2の0004h番地のデータ(ECC0〜D6)、0008h番地のデータ(D7〜D9)の順序で読み出しが行われ、読み出されたD4〜D7に対してECC1を用いて誤り訂正が行われ、誤り訂正後のD4〜D7が要求元に出力される。
このように、リード対象のアドレスが連続した場合、第2データ(上記の例では、図2の0004h番地のデータ)を2回メモリからリードする必要がある。
しかし、メモリアクセスにはオーバーヘッドがある場合が多く(例えば、DRAM(Dynamic Random Access Memory)では同一バンクをACTするとアクセスできない期間が発生する)、第2データを2回リードすると、性能ロスが生じ、非効率的である。
また、メモリアクセスごとに電力が消費されるため、第2データを2回リードすると、電力消費が多くなる。
パリティチェック結果を伴うデータ転送技術に関し、連続したアクセスに対し、パリティチェック結果が出力されるよりも前に次のリードリクエストを受け取らないようバスコントロールを行い、パリティチェック後のデータ転送までリードリクエストを待たせる技術がある(例えば、特許文献1)。
特開平5−233471号公報
特許文献1の方式では、リードリクエストからリードデータ返送までの1つのトランザクションが必ず完了することを保障はできるが、パイプライン型のメモリへのデータ転送には対応できないという課題がある。
本発明は、上記のような事情に鑑みたものであり、パイプライン型のメモリであっても、重複したデータの読み出しを回避し、有限なメモリ帯域を効率的に利用し、また、メモリアクセスにおける電力消費を抑制することを主な目的とする。
本発明に係るメモリ制御装置は、
各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する2つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストをパイプライン方式にて処理するメモリ制御装置であって、
前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている2つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定するキャッシュ判定部と、
2つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、2つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済み又はキャッシュされる予定のアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリへの前記部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、前記メモリに出力するコマンド出力部とを有することを特徴とする。
本発明では、読み出し候補アドレスのうちキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、メモリへの部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、メモリに出力する。
キャッシュアドレスのデータはキャッシュ領域のデータを用いることで重複したデータの読み出しを回避し、有限なメモリ帯域を効率的に利用し、また、メモリアクセスにおける電力消費を抑制することができる。
また、遅延時間が経過した後に部分リードコマンドをメモリに出力することで、パイプライン型のメモリであっても、キャッシュ領域からのキャッシュアドレスのデータの入力とメモリからのキャッシュアドレス以外のアドレスのデータの入力との間の衝突を回避することができる。
実施の形態1に係るECCが含まれないデータの配置例を示す図。 実施の形態1に係る垂直ECCを付加されたデータの配置例を示す図。 実施の形態1に係るメモリ制御装置とリクエスト要求元とメモリとを示す図。 実施の形態1に係るメモリ制御装置の動作例を示すフローチャート図。 実施の形態1に係るメモリ制御装置の動作例を示す図。 実施の形態1に係るメモリ制御装置の動作例を示す図。 実施の形態2に係るメモリ制御装置とリクエスト要求元とメモリとを示す図。 実施の形態2に係るメモリ制御装置の動作例を示すフローチャート図。 実施の形態2に係るメモリ制御装置の動作例を示すフローチャート図。 実施の形態3に係るメモリ制御装置とリクエスト要求元とメモリとを示す図。 実施の形態3に係るメモリ制御装置の動作例を示すフローチャート図。 実施の形態2に係るメモリ制御装置の動作例を示すタイミングチャート図。 実施の形態2に係るメモリ制御装置の動作例を示すタイミングチャート図。 実施の形態3に係るメモリ制御装置の動作例を示すタイミングチャート図。
実施の形態1では、パイプライン型ではないメモリに対応したメモリ制御装置を説明し、実施の形態2及び3で、パイプライン型のメモリに対応したメモリ制御装置を説明する。
実施の形態1のメモリ制御装置では、第2データの重複したリードを回避するために前回値保持部と内部バッファを用いている。
パイプライン型のメモリに対応した実施の形態2及び3のメモリ制御装置でも、第2データの重複したリードを回避するために、同じく前回値保持部と内部バッファを用いている。
メモリ制御装置における前回値保持部と内部バッファの使用法は、実施の形態1〜3で共通であるため、理解のしやすさを考慮して、実施の形態1において、非パイプライン方式のメモリ制御装置の動作を説明する。
そして、実施の形態1での動作を前提にして、実施の形態2及び3では、パイプライン方式に特有の動作を説明する。
また、実施の形態1〜3で共通する、リクエスト要求元及びメモリ上のアドレスとデータの関係を説明する。
例えば、図1に示すような、アドレスとデータ幅が4バイトのデータ(D0〜D3f)がある。
ECCを4バイトにつき1バイト付加した垂直ECCのメモリ配置を図2に示す。
データに続けてECCを配置する順になっているが、これは一例であり、ECCの配置方法は、隣り合う前後2ラインの中にデータとECCが配置されていればよい。
例えば、「EEC0」がペイロードデータ「D0」の前に配置されていてもよい。
また、同じアドレスに割り当たったデータは拡張可能であり、例えば0000h番地にD0〜D3、ECC0、D4〜D6、次の0008h番地にD7、ECC1、D8〜Db、ECC2、Dcと、データ幅を拡張しても良い。
その場合においても、一部のペイロードデータとECCは隣接する2つのアドレスにわたって対応関係にあり続けるためである。
実施の形態1.
図3は、実施の形態1に係るメモリ制御装置100とリクエスト要求元101とメモリ105とを示す。
図3において、リクエスト要求元101は、メモリ105へのリード・ライトリクエストを発行する。
以下では、リクエスト要求元101は、メモリ105からのペイロードデータの読み出しを要求するリードリクエストを発行する場合に限って説明を進める。
リクエスト要求元101は、例えば、CPU(Central Processing Unit)である。
なお、リクエスト要求元101では、例えば図1に示す形式で、ペイロードデータの配置を認識している。
また、メモリ105では、例えば図2に示す形式で、ペイロードデータと、誤り訂正データであるECCが配置されている。
メモリ105からは、アドレス単位でデータの読み出しが行われる。
なお、メモリ105は、メモリ制御装置100の制御対象のメモリである。
メモリ制御装置100は、メモリアドレス変換部106、内部バッファA109、内部バッファ管理部107、内部バッファ情報記憶部112、ヒット判定部113、前回値保持部104、データ選択部108、データ整列部103及びECC訂正部102で構成される。
メモリ制御装置100の各構成要素は、例えば素子、デバイス、回路といったハードウェアである。
メモリ制御装置100の各構成要素は、例えば、チップセット内の半導体回路群である。
また、例えば、メモリアドレス変換部106、内部バッファ管理部107、内部バッファ情報記憶部112、データ選択部108、データ整列部103及びECC訂正部102は、プログラムを用いて実現されていてもよい。
メモリアドレス変換部106は、リクエスト要求元101からのリードリクエストを入力する。
また、メモリアドレス変換部106は、入力したリードリクエストのアドレスを垂直ECCを配置したメモリ105上のアドレスへ変換する。
例えば、リクエスト要求元101から図1の0000h番地のデータ(D0〜D3)のリードリクエストがあった場合は、メモリアドレス変換部106は、図2の0000h番地のデータ(D0〜D3)と0004h番地のデータ(ECC0〜D6)へのアドレス変換を行う。
なお、メモリアドレス変換部106によるアドレス変換後のアドレスを読み出し候補アドレスという(上記の例では、図2の0000h番地と0004h番地が読み出し候補アドレス)。
また、リクエスト要求元101からのリードリクエストで要求されているペイロードデータを要求ペイロードデータという(上記の例では、D0〜D3が要求ペイロードデータ)。
また、要求ペイロードデータの誤り訂正に用いられるECCを対応誤り訂正データ又は対応ECCという(上記の例では、ECC0が対応誤り訂正データ)。
更に、メモリアドレス変換部106は、アドレス変換結果及びヒット判定部113の判定結果に基づき、メモリ105にデータリードを指示するリードコマンドを出力する。
なお、本明細書では、メモリアドレス変換部106がリクエスト要求元101から入力する情報をリードリクエストといい、メモリアドレス変換部106がメモリ105に出力する情報をリードコマンドという。
ヒット判定部113においてヒット判定があった場合は、メモリアドレス変換部106は、部分リードコマンドをメモリ105に出力する。
部分リードコマンドは、読み出し候補アドレスのうち内部バッファA109にキャッシュ済みのアドレス(キャッシュアドレスという)以外のアドレスからのデータの読み出しを指示するコマンドである。
また、ヒット判定部113においてミス判定があった場合は、メモリアドレス変換部106は、全域リードコマンドをメモリ105に出力する。
全域リードコマンドは、読み出し候補アドレスの全域からのデータの読み出しを指示するコマンドである。
なお、メモリアドレス変換部106は、リードリクエスト入力部及びコマンド出力部の例に相当する。
内部バッファA109には、以前のリードコマンドによってメモリ105からリードされたデータが格納される。
内部バッファA109は、キャッシュ領域の例である。
なお、図1では、内部バッファは1つだけ図示されているが、複数の内部バッファを配置することが可能である。
内部バッファ管理部107は、内部バッファA109の管理を行う。
より具体的には、内部バッファ管理部107は、メモリ105からリードされたデータのうち、内部バッファA109に記憶させるデータを選択し、選択したデータを内部バッファA109に格納する。
メモリアドレス変換部106により出力されたリードコマンドに応じてメモリ105から読み出されたデータのうちの最後尾のデータ(最後尾データという)に、要求ペイロードデータ及び対応ECCのいずれでもないデータが含まれている場合に、内部バッファ管理部107は、当該最後尾データを内部バッファA109に格納する。
例えば、リクエスト要求元101から図1の0000h番地のデータ(D0〜D3)のリードリクエストがあった場合は、メモリアドレス変換部106により、図2の0000h番地のデータ(D0〜D3)と0004h番地のデータ(ECC0〜D6)へのアドレス変換が行われる。
0000h番地のデータ(D0〜D3)が内部バッファA109に格納されていない場合は、ミス判定となり、0000h番地のデータと0004h番地のデータのリードを指示する全域リードコマンドが出力される。
この全域リードコマンドに対してメモリ105からリードされた最後尾データ(0004h番地)には、ECC0〜D6が含まれる。
ECC0は対応ECCに該当するが、D4〜D6は要求ペイロードデータではない。
このため、内部バッファ管理部107は、0004h番地のデータ(ECC0〜D6)を内部バッファA109に格納する。
一方で、リクエスト要求元101から図1の001Ch番地のデータ(D1c〜D1f)のリードリクエストがあった場合は、メモリアドレス変換部106により、図2の0020h番地のデータ(D1a〜D1c)と0024h番地のデータ(D1d〜ECC7)へのアドレス変換が行われる。
0020h番地のデータ(D1a〜D1c)が内部バッファA109に格納されていない場合は、ミス判定となり、0020h番地のデータと0024h番地のデータのリードを指示する全域リードコマンドが出力される。
この全域リードコマンドに対してメモリ105からリードされた最後尾データ(0024h番地)には、D1d〜ECC7が含まれる。
D1d〜D1fは要求ペイロードデータに該当し、ECC7は対応ECCに該当する。
このため、内部バッファ管理部107は、0024h番地のデータ(D1d〜ECC7)は、内部バッファA109に格納しない。
なお、内部バッファ管理部107は、キャッシュ管理部の例に相当する。
ヒット判定部113は、メモリアドレス変換部106により取得された読み出し候補アドレスの一部のアドレスのデータが内部バッファA109にキャッシュ済みであるか否かを判定する。
読み出し候補アドレスの一部のアドレスのデータが内部バッファA109にキャッシュ済みであれば、ヒット判定であり、キャッシュ済みでなければミス判定である。
ヒット判定部113は、内部バッファ情報記憶部112の「内部バッファAのアドレス」と「距離情報」から連続するアドレスを計算して、内部バッファA109にデータがキャッシュ済みかどうかを判定する。
ヒット判定であれば、ヒット判定部113は、ヒット信号をメモリアドレス変換部106に出力する。
なお、ヒット判定部113は、キャッシュ判定部の例に相当する。
内部バッファ情報記憶部112内の「内部バッファAのアドレス」には、リクエスト要求元101からのリードリクエストで示されているアドレス(図1のアドレス)が記憶される。
内部バッファ情報記憶部112内の「距離情報A」には、リードリクエストで要求されたアドレスのアドレス長が記憶される。
リクエスト要求元101から図1の0000h番地のリードリクエストがあった場合は、「内部バッファAのアドレス」には「0000h番地」が記憶され、「距離情報A」には「4バイト」が記憶される。
内部バッファが複数ある場合は、各内部バッファに対してアドレスと距離情報が記憶される。
なお、図1では、「内部バッファAのアドレス」と「距離情報A」を別に管理しているが、「内部バッファAのアドレス」のみで運用してもよい。
この場合は、リードリクエストで示されているアドレスにアドレス長を加算した値を「内部バッファAのアドレス」に記憶する。
つまり、リクエスト要求元101から図1の0000h番地のリードリクエストがあった場合は、0000h番地に4バイトを加算した「0004h番地」を「内部バッファAのアドレス」に記憶する。
前回値保持部104は、メモリ105から受信した前回のリードデータ、もしくは内部バッファA109のデータを保持するレジスタである。
データ選択部108は、メモリ105から受信したリードデータ及び内部バッファA109のデータのいずれかを選択し、選択したデータをデータ整列部103に出力する。
データ整列部103は、データ選択部108で選択したデータと前回値保持部104のデータの中から、要求ペイロードデータと対応ECCとを取得し、取得した要求ペイロードデータと対応ECCとをECC訂正を行うことができるように整列する。
なお、データ整列部103、前回値保持部104及びデータ選択部108を合わせたものをデータ取得部111という。
ECC訂正部102は、データ整列部103から整列後の要求ペイロードデータと対応ECCを入力し、対応ECCを用いて要求ペイロードデータのECC訂正を行い、リクエスト要求元101にECC訂正後の要求ペイロードデータを出力する。
次に、本実施の形態に係るメモリ制御装置100の動作例を、図1〜図5を用いて説明する。
以下では、図1の0000h番地から4バイト(D0〜D3)、続けて0004h番地から4バイト(D4〜D7)をリードする場合を説明する。
まず、メモリアドレス変換部106が、リクエスト要求元101から0000h番地から4バイトリードのリードリクエストを受理する(S201)。
次に、ヒット判定部113が、受理したリードリクエストが内部バッファA109に格納されているデータとヒットするかを判定する(S301)。
具体的には、ヒット判定部113は、内部バッファ情報記憶部112の「内部バッファAのアドレス」、「距離情報A」からキャッシュアドレスを計算し、判定する。
なお、この時点では、内部バッファA109にはデータが格納されていないので、S301の判定結果はNoとなる。
次に、メモリアドレス変換部106が、4バイトのデータ(D0〜D3)とそれに対応するECC(ECC0)を含む領域(読み出し候補アドレス)を計算し、計算した領域からのリードを指示するリードコマンドを生成し、生成したリードコマンドをメモリ105に出力する(S202)。
図2を参照すると、上記データは0000h番地と、0004h番地に跨って配置されているため、メモリアドレス変換部106は、0000h番地から8バイトのリードを指示するリードコマンド(全域リードコマンド)を生成する。
また、メモリアドレス変換部106は、生成したリードコマンドをメモリ105に出力するとともに、内部バッファ管理部107及びデータ選択部108に、リードコマンドとリクエスト要求元101からのリードリクエストを出力する。
メモリ105は、0000h番地のデータ(D0〜D3)を返し、メモリ制御装置100ではデータ選択部108が0000h番地のデータを入力する(S203)。
データ選択部108は、データ整列部103と内部バッファ管理部107にリードデータの入力を通知する。
内部バッファ管理部107は、データ選択部108から通知があると、入力されたリードデータが最後尾データであるかを判断する(S400)。
0000h番地のデータは、最後尾データではないのでS401の判定結果はNoとなる。
内部バッファ管理部107は、メモリアドレス変換部106からリードコマンドとリードリクエストを入力しており、また、図1のデータ配置及び図2のデータ配置を認識しているため、最初に入力するリードデータ(0000h番地のデータ)は最後尾データでないと判定することができる。
なお、入力した0000h番地のデータは、最後尾データではないので、入力したリードデータは内部バッファA109で保持されない。
次に、データ整列部103は、データの整列ができるか否かを判断する(S305)。
つまり、データ整列部103は、メモリ105からのデータ又は内部バッファA109のデータと前回値保持部104のデータとで、リクエスト要求元101から要求された要求ペイロードデータと対応ECCとが得られるかを判断する。
この時点では、メモリ105から0000h番地のデータを入力しているが、前回値保持部104にはデータが格納されていない。
0000h番地のデータだけでは要求ペイロードデータと対応ECCとが得られないため、データ整列部103は、0004h番地のデータの入力を待つ(S305でNO)。
このとき、データ選択部108から前回値保持部104に、リードデータ(0000h番地)が前回値として格納される。
なお、データ整列部103は、メモリアドレス変換部106からリードコマンドとリードリクエストを入力しており、また、図1のデータ配置及び図2のデータ配置を認識しているため、データの整列ができるか否かを判断することができる。
次に、メモリ105は、0004h番地のデータ(ECC0〜D6)を返し、メモリ制御装置100ではデータ選択部108が0004h番地のデータを入力する(S203)。
データ選択部108は、データ整列部103と内部バッファ管理部107にリードデータの入力を通知する。
内部バッファ管理部107は、データ選択部108から通知があると、入力されたリードデータが最後尾データであるかを判断する(S400)。
0004h番地のデータは、リードコマンドに対してメモリ105から入力する最後のデータであり、最後尾データに該当する(S400でYES)。
次に、内部バッファ管理部107は、入力された0004h番地のデータに、要求ペイロードデータ及び対応ECC以外の後続のペイロードデータが含まれるか否かを判断する(S401)。
リクエスト要求元101から要求された要求ペイロードデータはD0〜D3であり、また、対応ECCはEEC0である。
0004h番地のデータには、後続のペイロードデータであるD4〜D6が含まれている。
このため、S401の判定結果はYESとなる。
前述したように、内部バッファ管理部107は、メモリアドレス変換部106からリードリクエストを入力しており、また、図1のデータ配置及び図2のデータ配置を認識しているため、0004h番地のD4〜D6が、要求ペイロードデータ及び対応ECCのいずれでもない後続のペイロードデータであると判断できる。
次に、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファAのアドレス」に「0000h」を、「距離情報A」に4バイトリードの「4」を記述し、内部バッファA109に0004h番地のデータ(ECC0〜D6)を格納する(S402)。
次に、データ整列部103は、データの整列ができるか否かを判断する(S305)。
つまり、データ整列部103は、メモリ105からのデータ又は内部バッファA109のデータと前回値保持部104のデータとで、リクエスト要求元101から要求された要求ペイロードデータと対応ECCとが得られるかを判断する。
この時点では、メモリ105から0004h番地のデータを入力し、前回値保持部104に前回値として0000h番地のデータが格納されている。
メモリ105から入力したデータと前回値保持部104のデータで、要求ペイロードデータと対応ECCとが得られるため、S305の判定結果はYesとなる。
データ整列部103は、前回値保持部104から0000h番地のデータ(D0〜D3)を入力し、また、データ選択部108から0004h番地のデータ(ECC0〜D6)を取得し、要求ペイロードデータ(D0〜D3)と対応ECC(ECC0)を抽出し、抽出したデータの整列を行う(S205)。
次に、ECC訂正部102が、整列されたデータ(D0〜D3とECC0)をデータ整列部103から取得し、ECC0を用いて要求ペイロードデータD0〜D3のECC訂正を行った後に、リクエスト要求元101に、要求ペイロードデータD0〜D3を返送する(S206)。
以上で要求されたペイロードデータを全て返送し終えたので処理が完了する(S207)。
続けてリクエスト要求元101から0004h番地から4バイトリードのリードリクエストを受理する場合を想定する。
この場合は、リードリクエストの受理(S201)後に、ヒット判定部113が、リードリクエストで要求されているペイロードデータが内部バッファA109に格納されているデータとヒットするかを判定する(S301)。
つまり、ヒット判定部113は、S201で受理したリードリクエストは、内部バッファ情報記憶部112の「内部バッファAのアドレス」に記述されているアドレスに連続するアドレスのデータのリードを要求しているかを判断する。
本例の場合は、「内部バッファAのアドレス」に「0000h番地」が記述され、「距離情報A」に「4」が記述されているため、「0000h番地」に4バイトを加算して「0004h」となり、リードリクエストの要求に合致するので、ヒット判定となり、S301の判定結果はYesである。
メモリアドレス変換部106は、4バイトのデータ(D4〜D7)とそれに対応するECC(ECC1)を含む領域(読み出し候補アドレス)を計算する。
図2を参照すると、上記データは0004h番地と、0008h番地に跨って配置されているため、通常であれば、メモリアドレス変換部106は0004h番地から8バイトのリードを指示するリードコマンドを生成する。
しかし、0004h番地のデータは内部バッファA109のデータを利用するため、メモリアドレス変換部106は、0008hから4バイトのリードを指示するリードコマンド(部分リードコマンド)を生成し、生成したリードコマンドをメモリ105に出力する(S302)。
また、メモリアドレス変換部106は、生成したリードコマンドをメモリ105に出力するとともに、内部バッファ管理部107及びデータ選択部108に、リードコマンドとリクエスト要求元101からのリードリクエストを出力する。
0004h番地のデータは内部バッファA109にすでに格納されているため、内部バッファ管理部107は、内部バッファA109のデータをデータ選択部108を介してデータ整列部103に送る(S303)。
データ整列部103は、データの整列ができるか否かを判断する(S305)。
つまり、データ整列部103は、メモリ105からのデータ又は内部バッファA109のデータと前回値保持部104のデータとで、リクエスト要求元101から要求された要求ペイロードデータと対応ECCとが得られるかを判断する。
この時点では、内部バッファA109に0004h番地のデータがあり、前回値保持部104にも0004h番地のデータがある。
0004h番地のデータだけでは要求ペイロードデータと対応ECCとが得られないため、データ整列部103は、0008h番地のデータの入力を待つ(S305でNO)。
このとき、データ選択部108から前回値保持部104に、内部バッファA109のデータ(0004h番地)が前回値として格納される。
次に、メモリ105は、0008h番地のデータ(D7〜D9)を返し、メモリ制御装置100ではデータ選択部108が0008h番地のデータを入力する(S203)。
データ選択部108は、データ整列部103と内部バッファ管理部107にリードデータの入力を通知する。
内部バッファ管理部107は、データ選択部108から通知があると、入力されたリードデータが最後尾データであるかを判断する(S400)。
0008h番地のデータは、リードコマンドに対してメモリ105から入力する最後のデータであり、最後尾データに該当する(S400でYES)。
次に、内部バッファ管理部107は、入力された0008h番地のデータに、要求ペイロードデータ及び対応ECC以外の後続のペイロードデータが含まれるか否かを判断する(S401)。
リクエスト要求元101から要求された要求ペイロードデータはD4〜D7であり、また、対応ECCはEEC1である。
0008h番地のデータには、後続のペイロードデータであるD8〜D9が含まれている。
このため、S401の判定結果はYESとなる。
次に、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファAのアドレス」に「0004h」を、「距離情報A」に4バイトリードの「4」を記述し、内部バッファA109に0008h番地のデータ(D7〜D9)を格納する(S402)。
次に、データ整列部103は、データの整列ができるか否かを判断する(S305)。
つまり、データ整列部103は、メモリ105からのデータ又は内部バッファA109のデータと前回値保持部104のデータとで、リクエスト要求元101から要求された要求ペイロードデータと対応ECCとが得られるかを判断する。
この時点では、メモリ105から0008h番地のデータを入力し、前回値保持部104に前回値として0004h番地のデータが格納されている。
メモリ105から入力したデータと前回値保持部104のデータで、要求ペイロードデータと対応ECCとが得られため、S305の判定結果はYesとなる。
データ整列部103は、前回値保持部104から0004h番地のデータ(ECC0〜D6)を入力し、また、データ選択部108から0008h番地のデータ(D7〜D9)を取得し、要求ペイロードデータ(D4〜D7)と対応ECC(ECC1)を抽出し、抽出したデータの整列を行う(S205)。
次に、ECC訂正部102が、整列されたデータ(D4〜D7とECC1)をデータ整列部103から取得し、ECC1を用いて要求ペイロードデータD4〜D7のECC訂正を行った後に、リクエスト要求元101に、要求ペイロードデータD4〜D7を返送する(S206)。
以上で要求されたペイロードデータを全て返送し終えたので処理が完了する(S207)。
図5は、以上のメモリ制御装置100の動作を具体的に説明している。
リクエスト要求元101から0000h番地(図1)から4バイトリードのリードリクエスト(D0〜D3)があると、メモリ105から、第1データA(D0〜D3)が図2の0000h番地から読み出される。
第1データA(D0〜D3)は、最後尾データではないため、内部バッファA109では保持されないが、第1データB(D0〜D3)として前回値保持部104に保持される。
次に、メモリ105から第2データA(ECC0〜D6)が図2の0004h番地から読み出される。
第2データA(ECC0〜D6)は、最後尾データであるので、第2データE(ECC0〜D6)として内部バッファA109に保持される。
データ整列部103は、メモリ105からの第2データA(ECC0〜D6)と、前回値保持部104の第1データB(D0〜D3)からデータ整列を行って、第1データC(D0〜ECC0)を生成する。
そして、ECC訂正部102が、第1データC(D0〜ECC0)のECC訂正を行い、ECC訂正後の第1データD(D0〜D3)をリクエスト要求元101に出力する。
また、第2データA(ECC0〜D6)は、第2データB(ECC0〜D6)として前回値保持部104に保持される。
続けて、リクエスト要求元101から0004h番地(図1)から4バイトリードのリードリクエスト(D4〜D7)があった際には、内部バッファA109に第2データE(ECC0〜D6)が存在しており、第2データB(ECC0〜D6)が前回値保持部104に前回値として保持されている。
内部バッファA109の第2データE(ECC0〜D6)と前回値保持部104の第2データB(ECC0〜D6)では、データ整列ができないので、第2データE(ECC0〜D6)が前回値として前回値保持部104に保持されるとともに、メモリ105から第4データA(D7〜D9)が図2の0008h番地から読み出される。
第4データA(D7〜D9)は、最後尾データであるので、第4データE(D7〜D9)として内部バッファA109に保持される。
データ整列部103は、メモリ105からの第4データA(D7〜D9)と、前回値保持部104の第2データE(ECC0〜D6)からデータ整列を行って、第2データC(D4〜ECC1)を生成する。
そして、ECC訂正部102が、第2データC(D4〜ECC1)のECC訂正を行い、ECC訂正後の第2データD(D4〜D7)をリクエスト要求元101に出力する。
また、第4データA(D7〜D9)は、第4データB(D7〜D9)として前回値保持部104に保持される。
本実施の形態によらなければ、リクエスト要求元101から0004h番地から4バイトリードのリードリクエストがあった際には、第3データA(ECC0〜D6)のように、ECC0〜D6のデータを重複してメモリ105から読み出すことになる。
これに対して、本実施の形態では、内部バッファA109内の第2データE(ECC0〜D6)を利用することが可能であるため、メモリ105からの重複した読み出しは不要である。
以上では、内部バッファA109のみが含まれるメモリ制御装置100の動作例を説明した。
ここでは、内部バッファA109の他に内部バッファB1090が含まれるメモリ制御装置100の動作例を説明する。
図6は、内部バッファA109と内部バッファB1090が含まれるメモリ制御装置100の動作例を示す。
図6では、リクエスト要求元101から0000h番地(図1)から4バイトリードのリードリクエスト(D0〜D3)があり、次に、0014h番地(図1)から4バイトリードのリードリクエスト(D14〜D17)があり、更に、0004h番地から4バイトリードのリードリクエスト(D4〜D7)がある場合のリクエスト要求元101の動作例を示している。
なお、第1のリードリクエスト(0000h番地のリードリクエスト)の際には、第1のリードリクエストに先行するリードリクエストに対して読み出されたECC4〜D16のデータ(図2の0018h番地)が第3データEとして内部バッファB1090に保持されているものとする。
一方、内部バッファA109には、第1のリードリクエストの際には、データが保持されていないものとする。
リクエスト要求元101から0000h番地(図1)から4バイトリードのリードリクエスト(D0〜D3)があると、メモリ105から、第1データA(D0〜D3)が図2の0000h番地から読み出される。
第1データA(D0〜D3)は、最後尾データではないため、内部バッファA109では保持されないが、第1データB(D0〜D3)として前回値保持部104に保持される。
次に、メモリ105から第2データA(ECC0〜D6)が読み出される。
第2データA(ECC0〜D6)は、最後尾データであるので、第2データE(ECC0〜D6)として内部バッファA109に保持される。
データ整列部103は、メモリ105からの第2データA(ECC0〜D6)と、前回値保持部104の第1データB(D0〜D3)からデータ整列を行って、第1データC(D0〜ECC0)を生成する。
そして、ECC訂正部102が、第1データC(D0〜ECC0)のECC訂正を行い、ECC訂正後の第1データD(D0〜D3)をリクエスト要求元101に出力する。
また、第2データA(ECC0〜D6)は、第2データB(ECC0〜D6)として前回値保持部104に保持される。
続けて、リクエスト要求元101から0014h番地(図1)から4バイトリードのリードリクエスト(D14〜D17)があった際には、内部バッファB1090に第3データE(ECC4〜D16)が存在しており、第2データB(ECC0〜D6)が前回値保持部104に前回値として保持されている。
内部バッファB1090の第3データE(ECC4〜D16)と前回値保持部104の第2データB(ECC0〜D6)では、データ整列ができないので、第3データE(ECC4〜D16)が第3データB(ECC4〜D16)(前回値)として前回値保持部104に保持されるとともに、メモリ105から第4データA(D17〜D19)が図2の001Ch番地から読み出される。
第4データA(D17〜D19)は、最後尾データであるので、第4データE(D17〜D19)として内部バッファA109に保持される。
データ整列部103は、メモリ105からの第4データA(D17〜D19)と、前回値保持部104の第3データB(ECC4〜D16)からデータ整列を行って、第2データC(D14〜ECC5)を生成する。
そして、ECC訂正部102が、第2データC(D14〜ECC5)のECC訂正を行い、ECC訂正後の第2データD(D14〜D17)をリクエスト要求元101に出力する。
また、第4データA(D17〜D19)は、第4データB(D17〜D19)として前回値保持部104に保持される。
続けて、リクエスト要求元101から0004h番地(図1)から4バイトリードのリードリクエスト(D4〜D7)があった際には、内部バッファA109に第2データE(ECC0〜D6)が存在しており、第4データB(D17〜D19)が前回値保持部104に前回値として保持されている。
内部バッファA109の第2データE(ECC0〜D6)と前回値保持部104の第4データB(D17〜D19)では、データ整列ができないので、第2データE(ECC0〜D6)が第5データB(ECC0〜D6)(前回値)として前回値保持部104に保持されるとともに、メモリ105から第6データA(D7〜D9)が図2の0008h番地から読み出される。
第6データA(D7〜D9)は、最後尾データであるので、第6データE(D7〜D9)として内部バッファA109に保持される。
データ整列部103は、メモリ105からの第6データA(D7〜D9)と、前回値保持部104の第5データB(ECC0〜D6)からデータ整列を行って、第3データC(D4〜ECC1)を生成する。
そして、ECC訂正部102が、第3データC(D4〜ECC1)のECC訂正を行い、ECC訂正後の第3データD(D4〜D7)をリクエスト要求元101に出力する。
また、第6データA(D7〜D9)は、第6データB(D7〜D9)として前回値保持部104に保持される。
なお、第6データB(D7〜D9)の図示は省略している。
以上では、0000h番地から4バイト、0004h番地から4バイトというように、4バイトずつのリードリクエストに対してペイロードデータをリクエスト要求元101に返送する例を取り上げた。
本実施の形態のメモリ制御装置100は、4バイトの整数倍ずつのリードリクエストにも対処可能である。
例えば、0000h番地から8バイト、0008h番地から8バイトというように、8バイトずつのリードリクエストにも対処可能である。
また、本実施の形態では、内部バッファA109と内部バッファB1090という2つの内部バッファを用いる例を説明したが、3つ以上の内部バッファを用いる場合も、本実施の形態で説明した手順にて処理することができる。
本実施の形態では、
以下の手段を備えたメモリ制御装置を説明した。
(a)リクエスト要求元からのリクエストを、メモリのリクエストに変換し、データの橋渡しをする手段
(b)データのECCエラー訂正をする手段
(c)垂直ECCを採用したメモリからの受信データを、ECCエラー訂正をすることができるデータ(データと対応するECCに分離したもの)に再配置する手段
(d)リクエスト要求元からのアドレスとレングスを、垂直ECCを採用したメモリのアドレスとレングスに変換する手段
(e)メモリから受信した前回のデータを保持する手段
(f)次のアドレスのペイロードデータを含む最後に受信したリードデータを保持する手段
(g)次のアドレスであることを判定するために、保持しているペイロードデータのアドレスを記憶する手段
(h)次のアドレスであることを判定するために、距離情報を保持する手段
(i)これからメモリに発行するリードコマンドが保持しているペイロードデータを再利用するかどうかを判定する手段
(j)内部バッファのデータとメモリから受信したリードデータのどちらかを選択する手段。
実施の形態2.
実施の形態1では、例えば、リクエスト要求元101からの0004h番地(図1)から4バイトリードのリードリクエストは、先行する0000h番地(図1)から4バイトのリードが完了後(図4のS207でYES)に行われているため、非パイプライン型の動作が行われている。
パイプライン型の動作では、内部バッファに保持しているデータを利用するタイミングで、別トランザクションのリードデータがメモリから返送され、内部バッファのデータとメモリからのデータとの間で競合が生ずる可能性があり、データの競合が発生した場合にはいずれかのデータが消失してしまう。
本実施の形態では、パイプライン型の動作で内部バッファのデータを再利用する場合に、メモリから受信するリードデータのデータ取得部111への出力タイミングと内部バッファからのデータのデータ取得部111への出力タイミングとが重ならないように、メモリからのリードデータの受信タイミングを遅らせる。
このようにして、本実施の形態のメモリ制御装置100では、パイプライン型のメモリに対応する。
そして、本実施の形態のメモリ制御装置100は、パイプライン型メモリの特徴を活かすことができ、メモリアクセスのスループット向上に寄与することができる。
本実施の形態に係るメモリ制御装置100の構成例を図7に示す。
図3の構成と比較して、図7では、コマンド発行間隔制御部114とFIFOバッファ110が追加されている。
コマンド発行間隔制御部114は、内部バッファA109のデータを利用する場合に、内部バッファA109のデータを利用するために必要な時間、メモリ105へのリードコマンドの出力を遅延させる制御を行う。
メモリ105からは、リードコマンドを出力してから、ある一定間隔の後(リードレイテンシ)にリードデータが返送されてくるため、コマンド発行間隔制御部114によりリードコマンドを発行する間隔を制御することで、内部バッファAのデータを利用するための時間を空けることが可能である。
なお、コマンド発行間隔制御部114がリードコマンドの出力を遅延させる遅延時間は、例えば、パイプラインにおける1スロット分の時間である。
本実施の形態では、コマンド発行間隔制御部114も、コマンド出力部の例に相当する。
本実施の形態では、メモリアドレス変換部106は、メモリ105へのリードコマンドをFIFOバッファ110に格納する。
更に、メモリアドレス変換部106は、内部バッファA109に保持されているデータを入力するようデータ整列部103に指示する内部バッファデータ入力コマンド(キャッシュデータ入力コマンドに相当)と、メモリ105からのデータを入力するようデータ整列部103に指示するメモリデータ入力コマンドをFIFOバッファ110に格納する。
FIFOバッファ110は、リードコマンド、内部バッファデータ入力コマンド及びメモリデータ入力コマンドを記憶する。
本実施の形態に係るメモリ制御装置100は、パイプライン型のメモリを制御する。
つまり、本実施の形態に係るメモリ制御装置100は、リクエスト要求元101から受理したリードリクエストに対応するリードデータをリクエスト要求元101に全て返送し終わる前に、次のリードリクエストをリクエスト要求元101から受理し、メモリ105に対してリードコマンドを発行する。
このために、FIFOバッファ110において、発行したリードコマンドを記憶する。
また、本実施の形態では、内部バッファ管理部107は、メモリ105からリードデータを入力する前に、内部バッファ情報記憶部112の「内部バッファAのアドレス」の値と「距離情報A」の値を更新する。
このため、ヒット判定部113は、読み出し対象アドレスのデータが内部バッファA109にキャッシュ済みであるか否かを判定するだけでなく、「内部バッファAのアドレス」の値と「距離情報A」の値から、読み出し対象アドレスのデータが内部バッファA109にキャッシュされる予定であるか否かも判定する。
なお、図7に示す他の要素は、図3に示したものと同様なため、説明を省略する。
次に、本実施の形態に係るメモリ制御装置100の動作例を、図8及び図9を参照して説明する。
S201、S301、S202は、実施の形態1で説明したものと同様であり、説明を省略する。
本実施の形態では、S302において、メモリアドレス変換部106が、内部バッファA109に保持されていないデータのリードを指示するリードコマンド(部分リードコマンド)を生成し、S506において、コマンド発行間隔制御部114が、内部バッファA109のデータを利用するための時間(データの衝突を回避するための時間)だけ間隔を空けてリードコマンド(部分リードコマンド)をメモリ105に出力する。
コマンド発行間隔制御部114は、メモリアドレス変換部106がリードコマンドを生成した後にリードコマンドを出力する通常のタイミングから、所定の遅延時間が経過した後に、リードコマンドをメモリ105に出力する。
次に、内部バッファ管理部107が、最後尾データに後続のペイロードデータが含まれるか否かを判断する(S505)。
つまり、内部バッファ管理部107は、S202又はS302で生成されたリードコマンドに対してメモリ105から読み出されるデータのうちの最後尾データに後続のペイロードデータが含まれるか否かを判断する。
この処理は、図4のS401と同様の処理である。
実施の形態1と同様に、内部バッファ管理部107は、メモリアドレス変換部106から、リクエスト要求元101からのリードリクエスト及びメモリ105へのリードコマンドを入力しており、また、図1のデータ配置及び図2のデータ配置を認識しているため、S505のように、最後尾データに後続のペイロードデータが含まれるか否かを判断することができる。
最後尾データに後続のペイロードデータが含まれる場合(S505でYES)は、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファAのアドレス」の値と「距離情報A」の値を更新する(S507)。
但し、この時点では、内部バッファA109のデータは更新しない。
本実施の形態では、パイプライン型のメモリに対応した動作を行うために、内部バッファ情報記憶部112の「内部バッファAのアドレス」及び「距離情報A」の値を、リードデータをメモリ105から入力する前に更新する。
次に、メモリアドレス変換部106が、コマンドをFIFOバッファ110に格納する(S501)。
具体的には、メモリアドレス変換部106は、S202において全域リードコマンドを生成した場合には、メモリ105からのデータを入力するようデータ整列部103に指示するメモリデータ入力コマンドを生成する。
そして、メモリアドレス変換部106は、全域リードコマンド及びリードリクエストとメモリデータ入力コマンドをFIFOバッファ110に格納する。
また、メモリアドレス変換部106は、S302において部分リードコマンドを生成した場合には、内部バッファA109に保持されているデータを入力するようデータ整列部103に指示する内部バッファデータ入力コマンドと、メモリデータ入力コマンドを生成する。
そして、メモリアドレス変換部106は、部分リードコマンド及びリードリクエストと内部バッファデータ入力コマンドとメモリデータ入力コマンドをFIFOバッファ110に格納する。
なお、ECC訂正をした要求ペイロードデータの返送が完了する前に、リクエスト要求元101からリードリクエストを受け付けた場合は、連続してFIFOバッファ110にコマンドが格納される。
図8の処理と並行して、データ整列部103は、定期的にFIFOバッファ110にコマンドが蓄積されているかどうかを確認し(S502)、FIFOバッファ110にコマンドがあれば(S502でYES)、FIFOバッファ110からコマンドを取り出す(S503)。
取り出したコマンドが内部バッファデータ入力コマンドであれば、S504でYESとなり、S303に処理を進める。
取り出したコマンドがメモリデータ入力コマンドであれば、S504でNOとなり、S203に処理を進める。
なお、作図上の理由により、図9には、取り出したコマンドがリードコマンド及びリードリクエストである場合の処理が示されていないが、リードコマンド及びリードリクエストを取り出した場合は、データ整列部103は、取り出したリードコマンド及びリードリクエストを所定の記憶領域に保持するとともに、再度、FIFOバッファ110からコマンドを取り出す。
S203では、データ選択部108がメモリ105からリードデータを入力し、内部バッファ管理部107にリードデータの入力を通知する。
内部バッファ管理部107は、入力されたリードデータが最後尾のデータであるか否かを判断し(S400)、リードデータが最後尾データである場合は、最後尾データに後続のペイロードデータが含まれているか否かを判断する(S401)。
最後尾データに後続のペイロードデータが含まれている場合は、内部バッファ管理部107は内部バッファA109のデータを更新する(S402)。
S303では、内部バッファ管理部107は、内部バッファA109のデータをデータ選択部108を介してデータ整列部103に送る。
データ整列部103は、データの整列ができるか否かを判断し(S305)、データの整列ができる場合は、データ整列部103は、要求ペイロードデータと対応ECCを抽出し、抽出したデータの整列を行う(S205)。
更に、ECC訂正部102が、整列されたデータをデータ整列部103から取得し、ECCデータを用いて要求ペイロードデータのECC訂正を行った後に、リクエスト要求元101に、要求ペイロードデータを返送する(S206)。
要求ペイロードデータを全て返送したら処理が完了する(S207)。
なお、S203、S400、S401、S402、S305、S205、S206、S207の動作は、図4について説明したものと同じである。
次に、図8、図9及び図12を用いて、本実施の形態に係るメモリ制御装置100の動作を具体的に説明する。
ここでは、リクエスト要求元101から、第1のリードリクエストとして、0000h番地(図1)からの4バイトリードのリードリクエストを受理し、第1のリードリクエストに対して要求ペイロードデータを返送する前に、第2のリードリクエストとして、0004h番地(図1)からの4バイトリードのリードリクエストを受理する例を想定して、メモリ制御装置100の動作を説明する。
なお、図12のT1〜T11は、パイプライン処理における各スロットを示している。
Memory CLKは、リクエスト要求元101、メモリ制御装置100及びメモリ105の動作クロックを示す。
また、図12のCommand(C1)は、図7のC1に相当し、Command(C2)は、図7のC2に相当し、Command(C3)は、図7のC3に相当する。
また、図12のRead Data(Out)は、ECC訂正部102からリクエスト要求元101への要求ペイロードデータの出力を示している。
また、図12のRead Data(In)は、メモリ105からのリードデータの入力を示している。
また、sRead−0000は、リクエスト要求元101からのリードリクエストを示し、0000h番地(図1)から4バイトリードのリードリクエストを示している。
また、sRead−0004は、リクエスト要求元101からのリードリクエストを示し、0004h番地(図1)から4バイトリードのリードリクエストを示している。
dRead−0000は、メモリ105へのリードコマンドを示し、0000h番地(図2)から4バイトリードのリードコマンドを示している。
dRead−0004は、メモリ105へのリードコマンドを示し、0004h番地(図2)から4バイトリードのリードコマンドを示している。
dRead−0008は、メモリ105へのリードコマンドを示し、0008h番地(図2)から4バイトリードのリードコマンドを示している。
Read Data(out)の以外の欄にあるdata−0000は、メモリ105からリードされた0000h番地(図2)のデータを示している。
Read Data(out)の以外の欄にあるdata−0004は、メモリ105からリードされた0004h番地(図2)のデータを示している。
Read Data(out)の以外の欄にあるdata−0008は、メモリ105からリードされた0008h番地(図2)のデータを示している。
Read Data(out)の欄にあるdata−0000は、リクエスト要求元101に出力する0000h番地(図1)の要求ペイロードデータを示している。
Read Data(out)の欄にあるdata−0004は、リクエスト要求元101に出力する0004h番地(図1)の要求ペイロードデータを示している。
まず、メモリアドレス変換部106が、リクエスト要求元101から、0000h番地(図1)から4バイトリードのリードリクエスト(図12のsRead−0000)を受理する(S201)。
次に、ヒット判定部113が、受理したリードリクエストが内部バッファA109に格納されているデータとヒットするかを判定する(S301)。
なお、この時点では、内部バッファA109にはデータが格納されていないので、S301の判定結果はNoとなる。
次に、メモリアドレス変換部106が、0000h番地(図2)と0004h番地(図2)からのリードを指示するリードコマンド(図12のdRead−0000とdRead−0004)を生成し、生成したリードコマンドをメモリ105に出力する(S202)。
次に、内部バッファ管理部107が、最後尾データに後続のペイロードデータが含まれるか否かを確認し(S505)、この場合は、0004h番地(図2)からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファAのアドレス」、「距離情報A」の値を更新する(S507)。
この結果、図12の「内部バッファAのアドレス」の欄に示されるように「内部バッファAのアドレス」に「0000h番地」が記述され、「距離情報A」には「4」が記述される。
また、メモリアドレス変換部106は、リードコマンド(図12のdRead−0000とdRead−0004)及びリードリクエスト(図12のsRead−0004)、メモリデータ入力コマンドをFIFOバッファ110に格納する(S501)。
ここで、メモリアドレス変換部106が、リクエスト要求元101から、0004h番地(図1)から4バイトリードのリードリクエスト(図12のsRead−0004)を受理したとする(S201)。
前述のようにS507の処理にて内部バッファ情報記憶部112の「内部バッファAのアドレス」に「0000h番地」が記述され、「距離情報A」には「4」が記述されており、0004h番地(図2)のデータは内部バッファA109にキャッシュされる予定なので、S301の判定はYESとなる。
このため、メモリアドレス変換部106は、0008h番地(図2)からリードを指示するリードコマンド(図12のdRead−0008)を生成する(S302)。
そして、コマンド発行間隔制御部114が、内部バッファA109のデータを利用するための時間(データの衝突を回避するための時間)だけ間隔を空けてリードコマンド(図12のdRead−0008)をメモリ105に出力する。
リクエスト要求元101からのリードリクエスト(図12のsRead−0004)の入力タイミングからは、リードコマンド(図12のdRead−0008)は、図12の符号1201のタイミングでメモリ105に出力することができる。
しかし、本実施の形態では、コマンド発行間隔制御部114は、リードコマンドを出力できるタイミングから、1スロット分、リードコマンドの出力タイミングを遅らせ、符号1202のタイミングでリードコマンド(図12のdRead−0008)をメモリ105に出力している。
次に、内部バッファ管理部107が、最後尾データに後続のペイロードデータが含まれるか否かを確認する(S505)。
この場合は、0008h番地(図2)からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファAのアドレス」、「距離情報A」の値を更新する(S507)。
この結果、図12の「内部バッファAのアドレス」の欄に示されるように「内部バッファAのアドレス」に「0004h番地」が記述され、「距離情報A」には「4」が記述される。
また、メモリアドレス変換部106は、リードコマンド(図12のdRead−0008)及びリードリクエスト(図12のsRead−0004)、メモリデータ入力コマンド及び内部バッファデータ入力コマンドをFIFOバッファ110に格納する(S501)。
上記の動作と並行して、データ整列部103が、FIFOバッファ110から先頭のリードコマンド(図12のdRead−0000とdRead−0004)と、メモリデータ入力コマンドを取り出す(S502、S503)。
この場合は、内部バッファA109を利用しないため、S504はNOとなり、図12に示すように、データ選択部108が、メモリ105から0000h番地(図2)のデータ(図12のdata−0000)を入力する(S203)。
そして、入力されたデータ(図12のdata−0000)は、最後尾データではないので(S400でNO)、内部バッファA109には格納されない。
また、入力されたデータ(図12のdata−0000)だけではデータの整列ができないので(S305でNO)、メモリ105からの次のデータの入力を待つ。
なお、このとき、0000h番地(図2)のデータ(図12のdata−0000)は前回値保持部104に保持される。
次に、データ選択部108が、メモリ105から0004h番地(図2)のデータ(図12のdata−0004)を入力する(S203)。
入力されたデータ(図12のdata−0004)は、最後尾データであり(S400でYES)、また、後続のペイロードデータを含むので(S401でYES)、入力されたデータが内部バッファA109に格納される。
また、入力されたデータ(図12のdata−0004)と前回値保持部104のデータ(図12のdata−0000)でデータの整列ができるので(S305でYES)、データ整列部103がデータを整列し、ECC訂正部102がECC訂正を行って、ECC訂正後の要求ペイロードデータ(図12のdata−0000)をリクエスト要求元101に出力する(S205、S206)。
また、0004h番地(図2)のデータ(図12のdata−0004)は前回値保持部104に保持される。
また、データ整列部103は、FIFOバッファ110から次のリードコマンド(図12のdRead−0008)と、内部バッファデータ入力コマンド及びメモリデータ入力コマンドを取り出す(S502、S503)。
この場合は、内部バッファA109を利用するため、S504はYESとなり、内部バッファA109内のデータ(図12のdata−0004)がデータ整列部103に出力される(S303)。
内部バッファA109からのデータ(図12のdata−0004)と前回値保持部104のデータ(図12のdata−0004)ではデータの整列ができないので(S305でNO)、メモリ105からの次のデータの入力を待つ。
なお、このとき、内部バッファA109からのデータ(図12のdata−0004)は前回値保持部104に保持される。
次に、データ選択部108が、メモリ105から0008h番地(図2)のデータ(図12のdata−0008)を入力する(S203)。
なお、符号1201のタイミングでコマンド発行間隔制御部114からメモリ105にdRead−0008が出力されていれば、符号1203のタイミングでメモリ105からdata−0008が入力されることになるが、前述のように、符号1202のタイミングでdRead−0008が出力されているので、符号1204のタイミングでメモリ105からdata−0008が入力される。
入力されたデータ(図12のdata−0008)は、最後尾データであり(S400でYES)、また、後続のペイロードデータを含むので(S401でYES)、入力されたデータが内部バッファA109に格納される。
また、入力されたデータ(図12のdata−0008)と前回値保持部104のデータ(図12のdata−0004)でデータの整列ができるので(S305でYES)、データ整列部103がデータを整列し、ECC訂正部102がECC訂正を行って、ECC訂正後の要求ペイロードデータ(図12のdata−0004)をリクエスト要求元101に出力する(S205、S206)。
また、0008h番地(図2)のデータ(図12のdata−0004)は前回値保持部104に保持される。
図12の例において、コマンド発行間隔制御部114によりdRead−0008の出力タイミングが調整されずに、符号1201のタイミングでdRead−0008が出力されていれば、符号1203のタイミングでメモリ105からdata−0008が入力される。
この場合には、符号1206のタイミングで、data−0008が前回値保持部104に入力されるが、符号1205に示すように、内部バッファA109内のdata−0004が前回値保持部104に入力されるタイミングと競合してしまう。
このため、data−0008とdata−0004のいずれかが消失してしまう。
これに対して、本実施の形態では、コマンド発行間隔制御部114が符号1202のタイミングでdRead−0008を出力するため、符号1204のタイミングでメモリ105からdata−0008が入力される。
そして、符号1204のタイミングで入力された場合は、data−0008が前回値保持部104に入力されるタイミングは、符号1207のタイミングであり、データの競合は起こらない。
次に、図8、図9及び図13を用いて、内部バッファA109に加えて内部バッファB1090が存在するメモリ制御装置100の動作例を説明する。
ここでは、リクエスト要求元101から、第1のリードリクエストとして、0000h番地(図1)からの4バイトリードのリードリクエストを受理し、第1のリードリクエストに対して要求ペイロードデータを返送する前に、第2のリードリクエストとして、0014h番地(図1)からの4バイトリードのリードリクエストを受理する例を想定して、メモリ制御装置100の動作を説明する。
なお、図13の「内部バッファBのアドレス」及び「内部バッファB」に示されるように、内部バッファB1090には、以前の0010h番地(図1)についてのリードリクエストにより0018h番地(図2)のデータ(図13のdata−0018)が格納されているものとする。
なお、図13では、data−0018が内部バッファB1090に継続して保持されていることを表すために、data−0018を二重線で表現している。
まず、メモリアドレス変換部106が、リクエスト要求元101から、0000h番地(図1)から4バイトリードのリードリクエスト(図13のsRead−0000)を受理する(S201)。
次に、ヒット判定部113が、受理したリードリクエストが内部バッファA109又は内部バッファB1090に格納されているデータとヒットするかを判定する(S301)。
なお、この時点では、内部バッファA109にはデータが格納されておらず、また、内部バッファB1090のデータはリードリクエストで要求されているアドレスに合致しないので、S301の判定結果はNoとなる。
次に、メモリアドレス変換部106が、0000h番地(図2)と0004h番地(図2)からリードを指示するリードコマンド(図13のdRead−0000とdRead−0004)を生成し、生成したリードコマンドをメモリ105に出力する(S202)。
次に、内部バッファ管理部107が、最後尾データに後続のペイロードデータが含まれるか否かを確認し(S505)、この場合は、0004h番地(図2)からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファAのアドレス」、「距離情報A」の値を更新する(S507)。
この結果、図13の「内部バッファAのアドレス」の欄に示されるように「内部バッファAのアドレス」に「0000h番地」が記述され、「距離情報A」には「4」が記述される。
また、メモリアドレス変換部106は、リードデータ(図13のdRead−0000とdRead−0004)と、メモリデータ入力コマンドをFIFOバッファ110に格納する(S501)。
ここで、メモリアドレス変換部106が、リクエスト要求元101から、0014h番地(図1)から4バイトリードのリードリクエスト(図13のsRead−0014)を受理したとする(S201)。
前述のように内部バッファB1090には、0014h番地(図1)に対応する0018h番地(図2)のデータと001Ch番地(図2)のデータのうち、0018h番地(図2)のデータ(図13のdata−0018)がキャッシュされているので、S301の判定はYESとなる。
このため、メモリアドレス変換部106は、001Ch番地(図2)からのリードを指示するリードコマンド(図13のdRead−001C)を生成する(S302)。
そして、コマンド発行間隔制御部114が、内部バッファB1090のデータを利用するための時間(データの衝突を回避するための時間)だけ間隔を空けてリードコマンド(図13のdRead−001C)をメモリ105に出力する。
リクエスト要求元101からのリードリクエスト(図13のsRead−0014)の入力タイミングからは、リードコマンド(図13のdRead−001C)は、図13の符号1301のタイミングでメモリ105に出力される。
しかし、本実施の形態では、コマンド発行間隔制御部114は、リードコマンドを出力できるタイミングから、1スロット分、リードコマンドの出力タイミングを遅らせて、符号1302のタイミングでリードコマンド(図13のdRead−001C)をメモリ105に出力している。
次に、内部バッファ管理部107が、最後尾データに後続のペイロードデータが含まれるか否かを確認し(S505)、この場合は、001Ch番地(図2)からのリードデータに後続のペイロードデータが含まれるので、内部バッファ管理部107は、内部バッファ情報記憶部112の「内部バッファBのアドレス」、「距離情報B」の値を更新する(S507)。
この結果、図13の「内部バッファBのアドレス」の欄に示されるように「内部バッファBのアドレス」に「0014h番地」が記述され、「距離情報B」には「4」が記述される。
また、メモリアドレス変換部106は、リードデータ(図13のdRead−001C)及びリードリクエスト(図13のsRead−0014)と、メモリデータ入力コマンド及び内部バッファデータ入力コマンドをFIFOバッファ110に格納する(S501)。
なお、本例では、内部バッファデータ入力コマンドには、内部バッファB1090のデータを入力する旨が指示されている。
一方、内部バッファA109のデータを利用する場合は、内部バッファデータ入力コマンドには、内部バッファA109のデータを入力する旨が指示されている。
上記の動作と並行して、データ整列部103は、FIFOバッファ110から先頭のリードコマンド(図13のdRead−0000とdRead−0004)と、メモリデータ入力コマンドを取り出す(S502、S503)。
この場合は、内部バッファA109を利用しないため、S504はNOとなり、図13に示すように、データ選択部108が、メモリ105から0000h番地(図2)のデータ(図13のdata−0000)を入力する(S203)。
そして、入力されたデータ(図13のdata−0000)は、最後尾データではないので(S400でNO)、内部バッファA109には格納されない。
また、入力されたデータ(図13のdata−0000)だけではデータの整列ができないので(S305でNO)、メモリ105からの次のデータの入力を待つ。
なお、このとき、0000h番地(図2)のデータ(図13のdata−0000)は前回値保持部104に保持される。
次に、データ選択部108が、メモリ105から0004h番地(図2)のデータ(図13のdata−0004)を入力する(S203)。
入力されたデータ(図13のdata−0004)は、最後尾データであり(S400でYES)、また、後続のペイロードデータを含むので(S401でYES)、入力されたデータが内部バッファA109に格納される。
また、入力されたデータ(図13のdata−0004)と前回値保持部104のデータ(図13のdata−0000)でデータの整列ができるので(S305でYES)、データ整列部103がデータを整列し、ECC訂正部102がECC訂正を行って、ECC訂正後の要求ペイロードデータ(図13のdata−0000)をリクエスト要求元101に出力する(S205、S206)。
また、0004h番地(図2)のデータ(図13のdata−0004)は前回値保持部104に保持される。
また、データ整列部103は、FIFOバッファ110から次のリードデータ(図13のdRead−001C)と、内部バッファデータ入力コマンド及びメモリデータ入力コマンドを取り出す(S502、S503)。
この場合は、内部バッファB1090を利用するため、S504はYESとなり、内部バッファB1090内のデータ(図13のdata−0018)がデータ整列部103に出力される(S303)。
内部バッファB1090からのデータ(図13のdata−0018)と前回値保持部104のデータ(図13のdata−0004)ではデータの整列ができないので(S305でNO)、メモリ105からの次のデータの入力を待つ。
なお、このとき、内部バッファA109からのデータ(図13のdata−0018)は前回値保持部104に保持される。
次に、データ選択部108が、メモリ105から001Ch番地(図2)のデータ(図13のdata−001C)を入力する(S203)。
なお、符号1301のタイミングでコマンド発行間隔制御部114からメモリ105にdRead−001Cが出力されていれば、符号1303のタイミングでメモリ105からdata−001Cが入力されることになるが、前述のように、符号1302のタイミングでdRead−001Cが出力されているので、符号1304のタイミングでメモリ105からdata−001Cが入力される。
入力されたデータ(図13のdata−001C)は、最後尾データであり(S400でYES)、また、後続のペイロードデータを含むので(S401でYES)、入力されたデータが内部バッファB1090に格納される。
また、入力されたデータ(図13のdata−001C)と前回値保持部104のデータ(図13のdata−0018)でデータの整列ができるので(S305でYES)、データ整列部103がデータを整列し、ECC訂正部102がECC訂正を行って、ECC訂正後の要求ペイロードデータ(図13のdata−0014)をリクエスト要求元101に出力する(S205、S206)。
また、001Ch番地(図2)のデータ(図13のdata−001C)は前回値保持部104に保持される。
なお、以上では、内部バッファA109及び内部バッファB1090に1アドレス分のデータ(4バイトのデータ)を格納することとしているが、内部バッファA109及び内部バッファB1090に2アドレス分以上のデータを格納するようにしてもよい。
また、リクエスト要求元101からのリードリクエストで対象となっている図1の形式のアドレスを図2の形式のアドレスに変換した結果、3つ以上のアドレスが読み出し候補アドレスとなった場合に、3つ以上の読み出し候補アドレスのうちの前から2つのアドレスのデータが内部バッファA109又は内部バッファB1090にキャッシュされている場合は、メモリアドレス変換部106は、当該2つアドレス以外のアドレスのデータ、すなわち、3つ目のアドレス以降のデータのリードを指示するリードコマンド(部分リードコマンド)を生成する。
また、以上では、コマンド発行間隔制御部114が、メモリアドレス変換部106により生成された部分リードコマンドの出力タイミングを1スロット分遅らせてメモリ105に出力している。
これに対して、メモリアドレス変換部106が、部分リードコマンドを、通常の生成タイミングから1スロット分遅らせて生成することで、メモリ105からのリードデータと内部バッファA109からのデータとの間での衝突を回避するようにしてもよい。
また、本実施の形態のメモリ制御装置100も、実施の形態1と同様に、4バイトの整数倍ずつのリードリクエストにも対処可能である。
また、3つ以上の内部バッファを用いる場合も、本実施の形態で説明した手順にて処理することができる。
以上、本実施の形態では、
パイプライン型メモリに対応するためのメモリ制御装置であって、
(a)メモリに発行したリクエストを記憶する手段
(b)コマンド発行間隔を制御し、次にメモリに発行するコマンドの発行を遅延させる手段を有するメモリ制御装置を説明した。
実施の形態3.
実施の形態2では、内部バッファA109のデータを利用する場合、無条件にメモリ105へのリードコマンドの発行間隔を空けていたが、リクエスト要求元101からのリードリクエストを受理した時点で、内部バッファA109を利用する以上の時間が空いている場合、すなわち、データの競合が起きない場合には、リードコマンドの発行間隔を空ける必要がない。
本実施の形態では、内部バッファA109の利用のための時間が空いていないことを検出し、その場合のみコマンド発行間隔を空けるように制御することで、無駄なくリードコマンドを発行する方式を説明する。
図10は、本実施の形態に係るメモリ制御装置100の構成例を示す。
図7と比較して、図10では、発行間隔判定部115が追加されている。
発行間隔判定部115は、現在、メモリ105に発行しようとしている部分リードコマンドと、その部分リードコマンドの直前に発行したリードコマンド(全域リードコマンド、部分リードコマンドのいずれか)との発行間隔が一定以上空いているかどうかを判定する。
具体的には、発行間隔判定部115は、最後にリードコマンド(全域リードコマンド、部分リードコマンドのいずれか)を出力してからの経過時間が、実施の形態2で説明した発行間隔(遅延時間)を超えているかどうかを判定する。
コマンド発行間隔制御部114は、最後にリードコマンドを出力してからの経過時間が、実施の形態2で説明した発行間隔(遅延時間)を超えている場合には、間隔を空けることなく、部分リードコマンドをメモリ105に出力する。
なお、発行間隔判定部115は、最後にリードコマンドを出力した時刻を、直前リードの発行時刻として保持しており、この直前リードの発行時刻と現在時刻との差が、実施の形態2で説明した発行間隔(遅延時間)を超えているかどうかを判定する。
本実施の形態では、発行間隔判定部115も、コマンド出力部の例に相当する。
次に、本実施の形態に係るメモリ制御装置100の動作を、図11及び図14を参照しながら説明する。
なお、以下では、主に実施の形態2との相違点を説明する。
また、以下では、リクエスト要求元101から、第1のリードリクエストとして、0000h番地(図1)からの4バイトリードのリードリクエストを受理し、第1のリードリクエストに対して要求ペイロードデータを返送する前に、第2のリードリクエストとして、0004h番地(図1)からの4バイトリードのリードリクエストを受理する例を想定して、メモリ制御装置100の動作を説明する。
まず、メモリアドレス変換部106は、0000h番地(図1)から4バイトリードのリードリクエスト(図14のsRead−0000)を入力し、実施の形態2と同様に、0000h番地(図2)から8バイトのリードを指示する全域リードコマンドを生成し、コマンド発行間隔制御部114が、この全域リードコマンドをメモリ105に出力する(S201、S301、S202)。
コマンド発行間隔制御部114は、リードコマンドの出力の際に、リードコマンドの出力を発行間隔判定部115に通知し、発行間隔判定部115では、コマンド発行間隔制御部114からリードコマンドの出力が通知された時刻で直前リードの発行時刻を更新する(S602)。
以降は、実施の形態2と同様の処理が行われる。
その後、メモリアドレス変換部106が、0004h番地(図1)から4バイトリードのリードリクエスト(図14のsRead−0004)を入力する(S201)。
ここでは、内部バッファA109のデータを利用できるので、ヒット判定となり、S301はYESであり、メモリアドレス変換部106は、実施の形態2と同様に、部分リードコマンド(図14のdRead−0008)を生成する(S302)。
次に、発行間隔判定部115は、最後のリードコマンド(図14のdRead−0004)の出力からの経過時間が遅延時間(図14の例では、1スロット分の時間)を超えているか否かを判断する(S601)。
図14の例では、最後のリードコマンドの出力からの経過時間が遅延時間を超えているため(S601でYES)、コマンド発行間隔制御部114は、発行間隔を空けずに(遅延時間の経過を待たずに)リードコマンド(図14のdRead−0008)をメモリ105に出力する。
実施の形態2では、図14の符号1402のタイミングでリードコマンド(dRead−0008)がメモリ105に出力されるが、本実施の形態では、リードコマンド(dRead−0008)は、符号1401のタイミングでメモリ105に出力される。
この結果、メモリ105からは、符号1403のタイミングで、リードデータ(data−0008)が入力される。
一方、実施の形態2の場合は、符号1404のタイミングで、リードデータ(data−0008)が入力される。
一方、最後のリードコマンドの出力からの経過時間が遅延時間を超えていない場合(S601でNO)は、コマンド発行間隔制御部114は、実施の形態2と同様に、メモリ105へのリードコマンドの出力が可能なタイミングから遅延時間を経過した後にリードコマンド(図14のdRead−0008)をメモリ105に出力する(S506)。
以降の処理は、実施の形態2と同じであるため、説明を省略する。
なお、以上では、最後のリードコマンドの出力からの経過時間が遅延時間を超えていない場合は、コマンド発行間隔制御部114は、リードコマンドの出力が可能なタイミングから遅延時間を経過した後にリードコマンドをメモリ105に出力している。
これに対して、最後のリードコマンドの出力からの経過時間が遅延時間を超えていない場合に、コマンド発行間隔制御部114は、最後のリードコマンドの出力からの経過時間と遅延時間との差分の時間を算出し、リードコマンドの出力が可能なタイミングから差分の時間が経過した後にリードコマンドをメモリ105に出力するようにしてもよい。
以上、本実施の形態では、
内部バッファのデータを再利用する時間が十分ある場合には、コマンド発行を遅らせないメモリ制御装置であって、
(a)直前に発行したリードコマンドとの発行間隔が、内部バッファのデータを再利用する時間よりも経っているかどうか判定する手段
(b)直前に発行したリードコマンドのタイミングを保持する手段を有するメモリ制御装置を説明した。
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、2つ以上を組み合わせて実施しても構わない。
あるいは、これらの実施の形態のうち、1つを部分的に実施しても構わない。
あるいは、これらの実施の形態のうち、2つ以上を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
100 メモリ制御装置、101 リクエスト要求元、102 ECC訂正部、103 データ整列部、104 前回値保持部、105 メモリ、106 メモリアドレス変換部、107 内部バッファ管理部、108 データ選択部、109 内部バッファA、110 FIFOバッファ、111 データ取得部、112 内部バッファ情報記憶部、113 ヒット判定部、114 コマンド発行間隔制御部、115 発行間隔判定部、1090 内部バッファB。

Claims (15)

  1. 各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する2つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストをパイプライン方式にて処理するメモリ制御装置であって、
    前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
    前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
    前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている2つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定するキャッシュ判定部と、
    2つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、2つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済み又はキャッシュされる予定のアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリへの前記部分リードコマンドの出力が可能なタイミングから所定の遅延時間が経過した後に、前記メモリに出力するコマンド出力部とを有することを特徴とするメモリ制御装置。
  2. 前記コマンド出力部は、
    2つ以上の読み出し候補アドレスのうちの最前のアドレスのデータと前記最前のアドレスに後続する0個以上のアドレスのデータが前記キャッシュ領域にキャッシュ済み又はキャッシュされる予定であると前記キャッシュ判定部により判定された場合に、
    前記最前のアドレスを含むキャッシュアドレス以外のアドレスのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力することを特徴とする請求項1に記載のメモリ制御装置。
  3. 前記メモリ制御装置は、更に、
    コマンドを蓄積するFIFO(First In First Out)バッファと、
    前記FIFOバッファからコマンドを入力し、入力したコマンドに従って、前記要求ペイロードデータと前記対応誤り訂正データとを取得するデータ取得部とを有し、
    前記コマンド出力部は、
    前記部分リードコマンドを前記メモリに出力するとともに、
    前記キャッシュ領域から前記キャッシュアドレスのデータを入力するよう前記データ取得部に指示するキャッシュデータ入力コマンドと、前記メモリから前記キャッシュアドレス以外のアドレスのデータを入力するよう前記データ取得部に指示するメモリデータ入力コマンドとを前記FIFOバッファに格納し、
    前記データ取得部は、
    前記FIFOバッファから前記キャッシュデータ入力コマンドと前記メモリデータ入力コマンドとを入力し、前記キャッシュデータ入力コマンドに従って、前記キャッシュ領域から前記キャッシュアドレスのデータを入力し、前記メモリデータ入力コマンドに従って、前記部分リードコマンドに応じて読み出された前記キャッシュアドレス以外のアドレスのデータを前記メモリから入力し、
    前記キャッシュ領域から入力した前記キャッシュアドレスのデータと、前記メモリから入力した前記キャッシュアドレス以外のアドレスのデータとから、前記要求ペイロードデータと前記対応誤り訂正データとを取得することを特徴とする請求項2に記載のメモリ制御装置。
  4. 前記コマンド出力部は、
    前記遅延時間が経過した後に部分リードコマンドを前記メモリに出力することで、前記データ取得部における前記キャッシュ領域からの前記キャッシュアドレスのデータの入力と前記メモリからの前記キャッシュアドレス以外のアドレスのデータの入力との間で衝突を発生させないことを特徴とする請求項3に記載のメモリ制御装置。
  5. 前記コマンド出力部は、
    2つ以上の読み出し候補アドレスのうちのいずれのアドレスのデータも前記キャッシュ領域にキャッシュ済みでなく、キャッシュされる予定でもないと前記キャッシュ判定部により判定された場合に、
    2つ以上の読み出し候補アドレスの全域からのデータの読み出しを指示する全域リードコマンドを、前記遅延時間の経過を待つことなく前記メモリに出力することを特徴とする請求項1〜4のいずれかに記載のメモリ制御装置。
  6. 前記コマンド出力部は、
    部分リードコマンドを前記メモリに出力する場合に、全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えているか否かを判断し、
    全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えている場合に、前記遅延時間の経過を待つことなく部分リードコマンドを前記メモリに出力することを特徴とする請求項5に記載のメモリ制御装置。
  7. 全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間が前記遅延時間を超えていない場合に、
    全域リードコマンド及び部分リードコマンドのいずれかを最後に前記メモリに出力してからの経過時間と前記遅延時間との差分時間を算出し、
    前記メモリへの前記部分リードコマンドの出力が可能なタイミングから前記差分時間が経過した後に、部分リードコマンドを前記メモリに出力することを特徴とする請求項6に記載のメモリ制御装置。
  8. 前記メモリ制御装置は、更に、
    前記コマンド出力部により出力された全域リードコマンド及び部分リードコマンドのいずれかに応じて前記メモリから読み出された最後尾のデータである最後尾データに、前記要求ペイロードデータ及び前記対応誤り訂正データのいずれでもないデータが含まれている場合に、前記最後尾データを前記キャッシュ領域に格納するキャッシュ管理部を有することを特徴とする請求項5〜7のいずれかに記載のメモリ制御装置。
  9. 前記コマンド出力部は、
    少なくともパイプライン処理におけるスロット1つ分の時間に相当する時間を前記遅延時間とすることを特徴とする請求項1〜8のいずれかに記載のメモリ制御装置。
  10. 前記メモリ制御装置は、
    複数のキャッシュ領域を有し、
    前記キャッシュ判定部は、
    2つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記複数のキャッシュ領域のいずれかのキャッシュ領域にキャッシュ済み又はキャッシュされる予定であるかを判定することを特徴とする請求項1〜9のいずれかに記載のメモリ制御装置。
  11. 各々に所定のデータ幅分のデータが格納される複数のアドレスを有し、前記データ幅分のペイロードデータに対して誤り訂正データが設定され、対応関係にある前記データ幅分のペイロードデータと誤り訂正データとが隣接する2つのアドレスにわたって格納され、アドレス単位でデータの読み出しが行われるメモリ、からのペイロードデータの読み出しを要求するリードリクエストを処理するメモリ制御装置であって、
    前記メモリから読み出されたデータをキャッシュするキャッシュ領域と、
    前記データ幅の整数倍分のペイロードデータの読み出しを要求するリードリクエストを入力するリードリクエスト入力部と、
    前記リードリクエスト入力部により入力されたリードリクエストで要求されているペイロードデータである要求ペイロードデータと前記要求ペイロードデータの誤り訂正に用いられる誤り訂正データである対応誤り訂正データとが格納されている2つ以上のアドレスである読み出し候補アドレスのうちのいずれかのアドレスのデータが、前記キャッシュ領域にキャッシュ済みであるかを判定するキャッシュ判定部と、
    2つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記キャッシュ領域にキャッシュ済みであると前記キャッシュ判定部により判定された場合に、2つ以上の読み出し候補アドレスのうち前記キャッシュ領域にデータがキャッシュ済みのアドレスであるキャッシュアドレス以外のアドレスからのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力するコマンド出力部とを有することを特徴とするメモリ制御装置。
  12. 前記コマンド出力部は、
    2つ以上の読み出し候補アドレスのうちのいずれのアドレスのデータも前記キャッシュ領域にキャッシュ済みでないと前記キャッシュ判定部により判定された場合に、
    2つ以上の読み出し候補アドレスの全域からのデータの読み出しを指示する全域リードコマンドを、前記メモリに出力することを特徴とする請求項11に記載のメモリ制御装置。
  13. 前記メモリ制御装置は、更に、
    前記コマンド出力部により出力された全域リードコマンド及び部分リードコマンドのいずれかに応じて前記メモリから読み出された最後尾のデータである最後尾データに、前記要求ペイロードデータ及び前記対応誤り訂正データのいずれでもないデータが含まれている場合に、前記最後尾データを前記キャッシュ領域に格納するキャッシュ管理部を有することを特徴とする請求項11又は12に記載のメモリ制御装置。
  14. 前記メモリ制御装置は、
    複数のキャッシュ領域を有し、
    前記キャッシュ判定部は、
    2つ以上の読み出し候補アドレスのうちのいずれかのアドレスのデータが前記複数のキャッシュ領域のいずれかのキャッシュ領域にキャッシュ済みであるかを判定することを特徴とする請求項11〜13のいずれかに記載のメモリ制御装置。
  15. 前記コマンド出力部は、
    2つ以上の読み出し候補アドレスのうちの最前のアドレスのデータと前記最前のアドレスに後続する0個以上のアドレスのデータが前記キャッシュ領域にキャッシュ済みであると前記キャッシュ判定部により判定された場合に、
    前記最前のアドレスを含むキャッシュアドレス以外のアドレスのデータの読み出しを指示する部分リードコマンドを、前記メモリに出力し、
    前記メモリ制御装置は、更に、
    前記キャッシュ領域から前記キャッシュアドレスのデータを入力し、前記部分リードコマンドに応じて読み出された前記キャッシュアドレス以外のアドレスのデータを前記メモリから入力し、
    前記キャッシュ領域から入力した前記キャッシュアドレスのデータと、前記メモリから入力した前記キャッシュアドレス以外のアドレスのデータとから、前記要求ペイロードデータと前記対応誤り訂正データとを取得するデータ取得部を有することを特徴とする請求項11〜14のいずれかに記載のメモリ制御装置。
JP2014544200A 2012-11-05 2012-11-05 メモリ制御装置 Active JP5797342B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/078628 WO2014068789A1 (ja) 2012-11-05 2012-11-05 メモリ制御装置

Publications (2)

Publication Number Publication Date
JP5797342B2 JP5797342B2 (ja) 2015-10-21
JPWO2014068789A1 true JPWO2014068789A1 (ja) 2016-09-08

Family

ID=50626752

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014544200A Active JP5797342B2 (ja) 2012-11-05 2012-11-05 メモリ制御装置

Country Status (6)

Country Link
US (1) US9715427B2 (ja)
JP (1) JP5797342B2 (ja)
CN (1) CN104769558B (ja)
DE (1) DE112012007102B4 (ja)
TW (1) TWI475383B (ja)
WO (1) WO2014068789A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326142B (zh) * 2015-06-17 2019-05-21 群联电子股份有限公司 缓冲存储器存取方法、存储器控制器与存储器存储装置
WO2017131648A1 (en) * 2016-01-27 2017-08-03 Hewlett Packard Enterprise Development Lp Adaptive request management
US10713750B2 (en) * 2017-04-01 2020-07-14 Intel Corporation Cache replacement mechanism
CN111881068A (zh) * 2020-06-30 2020-11-03 北京思朗科技有限责任公司 多入口的全相联的高速缓冲存储器及数据管理方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03132852A (ja) * 1989-10-19 1991-06-06 Pfu Ltd バス非同期制御方式
JPH0588987A (ja) 1991-09-25 1993-04-09 Hitachi Ltd バツフア記憶装置
JPH05233471A (ja) 1992-02-21 1993-09-10 Toshiba Corp マイクロプロセッサ及びそれを使用したデータ処理装置
JPH0773114A (ja) 1993-09-01 1995-03-17 Nec Corp 宇宙用デジタル計算機のメモリ制御回路
JPH07146825A (ja) 1993-11-22 1995-06-06 Okuma Mach Works Ltd メモリシステム
JPH1040165A (ja) * 1996-07-22 1998-02-13 Oki Data:Kk データ読み出し方法およびリードバッファ
JPH1198462A (ja) 1997-09-19 1999-04-09 Hitachi Ltd データ再生装置
US6748486B2 (en) * 2001-01-04 2004-06-08 International Business Machines Corporation Method, system, and data structures for superimposing data records in a first data format to memory in a second data format
JP2003044354A (ja) * 2001-07-26 2003-02-14 Matsushita Electric Ind Co Ltd メモリ制御装置
JP2004038705A (ja) 2002-07-05 2004-02-05 Toshiba Corp メモリ制御装置およびメモリアクセス方法
JP2006185162A (ja) * 2004-12-27 2006-07-13 Hitachi Global Storage Technologies Netherlands Bv データ記憶装置及びその制御方法
US8214600B2 (en) 2005-02-10 2012-07-03 International Business Machines Corporation Data processing system and method for efficient coherency communication utilizing coherency domains
US20080034132A1 (en) 2006-08-01 2008-02-07 Nec Electronics Corporation Memory interface for controlling burst memory access, and method for controlling the same
JP2008059565A (ja) 2006-08-01 2008-03-13 Nec Electronics Corp バーストメモリアクセスを制御するメモリインターフェース装置及びその制御方法
JP2008217857A (ja) * 2007-02-28 2008-09-18 Toshiba Corp メモリコントローラ及び半導体装置
EP2159704B1 (en) 2007-06-20 2013-06-26 Fujitsu Limited Cache memory control device and pipeline control method
JP5380102B2 (ja) * 2009-02-16 2014-01-08 株式会社東芝 マイクロプロセッサ
KR101459200B1 (ko) 2010-02-09 2014-11-07 미쓰비시덴키 가부시키가이샤 전송 제어장치, 메모리 제어장치, 및 상기 전송 제어장치를 구비한 plc
JP2012137944A (ja) * 2010-12-27 2012-07-19 Mitsubishi Electric Corp メモリアクセス装置
TWI467579B (zh) * 2011-01-14 2015-01-01 Mstar Semiconductor Inc 電子裝置及其記憶體控制方法以及相關電腦可讀取儲存媒體
US9465691B2 (en) 2012-06-28 2016-10-11 Mitsubishi Electric Corporation Read request processing apparatus

Also Published As

Publication number Publication date
WO2014068789A1 (ja) 2014-05-08
US20150186208A1 (en) 2015-07-02
JP5797342B2 (ja) 2015-10-21
CN104769558B (zh) 2017-07-21
TWI475383B (zh) 2015-03-01
US9715427B2 (en) 2017-07-25
DE112012007102B4 (de) 2022-04-28
DE112012007102T5 (de) 2015-07-16
CN104769558A (zh) 2015-07-08
TW201418980A (zh) 2014-05-16

Similar Documents

Publication Publication Date Title
US11379123B2 (en) Address/command chip synchronized autonomous data chip address sequencer for a distributed buffer memory system
JP5797342B2 (ja) メモリ制御装置
US9753872B2 (en) Information processing apparatus, input and output control device, and method of controlling information processing apparatus
JP5076488B2 (ja) 情報処理装置、履歴管理方法、履歴管理プログラム
JP2012089010A (ja) メモリ制御装置、記憶装置、及びメモリ制御方法
JP2007034392A (ja) 情報処理装置及びデータ処理方法
KR20140108787A (ko) 텍스쳐 맵핑 파이프라인을 위한 논블로킹 방식의 텍스쳐 캐쉬 메모리 시스템 및 논블로킹 방식의 텍스쳐 캐쉬 메모리의 동작 방법
JP5623677B2 (ja) リードリクエスト処理装置
KR20190112020A (ko) 데이터 처리
JP5101195B2 (ja) インタフェースコントローラ
US9921779B2 (en) Memory apparatus, memory system and memory controlling method
US11487695B1 (en) Scalable peer to peer data routing for servers
JP2018173856A (ja) 情報処理装置およびその制御方法
US20230315643A1 (en) Cache Data Provided Based on Data Availability
WO2014006732A1 (ja) データ訂正方法、マルチプロセッサシステム、及びプロセッサ
WO2017183096A1 (ja) 計算機システム及び不揮発性メモリの冗長化方法
JP5360940B1 (ja) 分散共有メモリ型システムおよびそのメモリアクセス方法、情報処理装置、およびデータ伝送方法
WO2014128967A1 (ja) 記憶制御装置、及びデータの書き込み完了を検知する方法
JP2012137944A (ja) メモリアクセス装置
JP2019200592A (ja) メモリ制御回路、出力回路、メモリ制御回路の制御方法および出力回路の制御方法
JP2011248846A (ja) メモリ装置及び信号処理装置
WO2011033862A1 (ja) 情報処理装置およびデータ転送方法
KR19990030723A (ko) 로컬버스의 트랜잭션 지연 제어방법 및 장치
JP2006146966A (ja) 記憶制御装置
JP2015125526A (ja) 命令処理装置およびその命令処理方法

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150721

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150818

R150 Certificate of patent or registration of utility model

Ref document number: 5797342

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250