JP2012027718A - コマンド管理装置及び同コマンド管理装置を備えた記憶装置 - Google Patents

コマンド管理装置及び同コマンド管理装置を備えた記憶装置 Download PDF

Info

Publication number
JP2012027718A
JP2012027718A JP2010166292A JP2010166292A JP2012027718A JP 2012027718 A JP2012027718 A JP 2012027718A JP 2010166292 A JP2010166292 A JP 2010166292A JP 2010166292 A JP2010166292 A JP 2010166292A JP 2012027718 A JP2012027718 A JP 2012027718A
Authority
JP
Japan
Prior art keywords
address
command
stored
entry
cfifo
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
JP2010166292A
Other languages
English (en)
Other versions
JP4886887B2 (ja
Inventor
Nobuyuki Myoga
信行 茗茄
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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2010166292A priority Critical patent/JP4886887B2/ja
Priority to US13/077,559 priority patent/US8473649B2/en
Publication of JP2012027718A publication Critical patent/JP2012027718A/ja
Application granted granted Critical
Publication of JP4886887B2 publication Critical patent/JP4886887B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Communication Control (AREA)

Abstract

【課題】不要となったコマンドが格納されている領域をコンパクション或いはガーベージコレクションを用いずに解放できるようにする。
【解決手段】実施形態によれば、コマンド管理装置のコマンドバッファは、ホストから受信されたコマンドの群を格納する。先入れ先出し手段は、これらのコマンドの群のそれぞれが格納されているコマンドバッファの領域のアドレスを格納するアドレス部を含むエントリの群を備える。先入れ先出し手段のエントリの群にそれぞれ含まれているアドレス部はリング状に接続されており、置換手段を含む。置換手段は、このアドレス部に格納されている第1のアドレスを、フリーアドレス設定手段に保持されている、不要となったコマンドが格納されているコマンドバッファの領域のアドレスまたは前段のアドレス部に格納されている第2のアドレスのいずれか一方に置換する。
【選択図】 図1

Description

本発明の実施形態は、ホストから受信されたコマンドの群を保持・管理する、コマンド管理装置及び同コマンド管理装置を備えた記憶装置に関する。
磁気ディスクドライブ(HDD)、或いはソリッドステートドライブ(SSD)のような記憶装置は、一般にホストインタフェース部を備えている。ホストインタフェース部は、ホストと記憶装置との間のデータ転送を制御する。ホストインタフェース部は、コマンド管理装置を備えている。コマンド管理装置は、ホストから転送される、リードコマンド、或いはライトコマンドのようなコマンドを受信して、当該受信されたコマンドをコマンドバッファに格納する。コマンドバッファに格納されたコマンドの群は、コマンド管理装置の管理の下で、格納順に処理部に取り出される。処理部は、取り出されたコマンドを実行する。
コマンドバッファから取り出されたコマンドの実行が完了すると、当該コマンドは不要になる。すると、不要になったコマンドが格納されている、コマンドバッファの領域(以下、不要領域と称する)を解放する必要がある。このような不要領域の解放(つまりコマンドバッファのメンテナンス)は、コンパクション或いはガーベージコレクションのようなソフトウェア処理により実行される。
一方、デジタル通信システムにおいて、受信データを順次格納するデータバッファを備えたバッファ管理サブシステムも知られている。このバッファ管理サブシステムは、データバッファ内の空き領域(つまり不要領域)を指すバッファポインタを格納する先入れ先出し(First-In First-Out)バッファ(以下、バッファポインタFIFOと称する)を備えている。受信データは、バッファポインタFIFOから取り出されるバッファポインタによって指定されるデータバッファ内の領域に格納される。データバッファに格納されたデータの群は格納順に取り出され、宛先に転送される。データバッファからデータが取り出されると、当該取り出されたデータが格納されている、データバッファの領域は空き領域なる。そこで、この空き領域を指すバッファポインタがバッファポインタFIFOに格納される。
特開2000−90042号公報
上述のコンパクション或いはガーベージコレクションを用いた場合、コマンドバッファ内の不要領域を高速に解放することは難しい。
一方、コマンドバッファに格納されたコマンドの群の実行が完了する順番は、当該コマンドバッファからコマンドの群が取り出される順番と必ずしも一致しない。このため、コマンドバッファに格納されているコマンド群の物理的な並びは、コマンドの群の取り出し順(つまり格納順)に対して時間の経過と共に大きくずれる。したがって、コマンドバッファに格納されたコマンドの群を格納順に取り出す必要のあるコマンド管理装置において、コンパクション或いはガーベージコレクションに代えて、バッファポインタFIFOを用いることによって、コマンドバッファ内の不要領域を解放することは難しい。
本発明の目的は、不要となったコマンドが格納されている領域をコンパクション或いはガーベージコレクションを用いずに解放することができるコマンド管理装置及び同コマンド管理装置を備えた記憶装置を提供することにある。
実施形態によれば、コマンド管理装置は、コマンドバッファと、先入れ先出し手段と、フリーアドレス設定手段とを具備する。コマンドバッファは、ホストから受信されたコマンドの群を格納する。先入れ先出し手段は、前記コマンドバッファに格納されているコマンドの群を、その格納順に取り出すために、当該コマンドの群のそれぞれが格納されている前記コマンドバッファの領域のアドレスを格納する。フリーアドレス設定手段は、不要となったコマンドが格納されている前記コマンドバッファの領域のアドレスをフリーアドレスとして保持する。前記先入れ先出し手段の前記エントリの群にそれぞれ含まれている前記アドレス部はリング状に接続されており、当該アドレス部は、当該アドレス部に格納されている第1のアドレスを、前記フリーアドレス設定手段に保持されている前記フリーアドレスまたは前段のアドレス部に格納されている第2のアドレスのいずれか一方に置換する置換手段を含む。
実施形態に係るコマンド管理装置の構成を示すブロック図。 同実施形態におけるコマンド格納時の動作を説明するための図。 図2に示したコマンド格納が完了した後の、コマンドヒストリーFIFO部の状態を示す図。 同実施形態におけるコマンド取り出し時の動作を説明するための図。 図4に示したコマンド取り出しが完了した後の、コマンドヒストリーFIFO部の状態を示す図。 同実施形態におけるコマンドヒストリーFIFO部の初期状態の一例を示す図。 同実施形態における第1の状態のときのアドレス解放を説明するための図。 同実施形態における第1の状態のときのアドレス解放の具体例を説明するための図。 同実施形態における第2の状態のときのアドレス解放を説明するための図。 同実施形態における第2の状態のときのアドレス解放の具体例を説明するための図。 同実施形態における検出回路の構成を示すブロック図。 同実施形態におけるアドレスFIFO部の0番目のエントリを除くi番目のエントリの構成を示す図。 同実施形態における「i」が「0」の場合のアドレスFIFO部のi番目のエントリの構成を示す図。 同実施形態におけるフラグFIFO部の0番目のエントリを除くi番目のエントリの構成を示す図。 同実施形態における「i」が「0」の場合のフラグFIFO部のi番目のエントリの構成を示す図。 同実施形態におけるアドレス解放時に、アドレスFIFO部のi番目のエントリに格納されているアドレスAがアドレスBに置換される場合のタイミングチャート。 同実施形態における、リードポインタの指し示すコマンドヒストリーFIFO部のエントリのアドレス部及びフラグ部を取り出す選択回路の構成を示すブロック図。 同実施形態における選択制御回路の構成を示すブロック図。
以下、実施の形態につき図面を参照して説明する。
図1は一つの実施形態に係るコマンド管理装置の構成を示すブロック図である。
本実施形態において、図1に示すコマンド管理装置1は、磁気ディスクドライブ、或いはソリッドステートドライブのような記憶装置のホストインタフェース部に備えられている。記憶装置は、コマンド管理装置1の他に、処理部2及び記憶部3を備えている。記憶部3は、記憶装置が磁気ディスクドライブであれば、磁気記録媒体及びヘッドを含み、記憶装置がソリッドステートドライブであれば、書き換え可能な不揮発性メモリを含む。
コマンド管理装置1は、コマンドヒストリーFIFO部10とコマンドバッファ20とを備えている。
コマンドバッファ20は、ホストから受信したコマンド群を格納する。コマンドバッファ20は、N個のエントリENT(0)〜ENT(N-1)を有するテーブル(以下、コマンドテーブルと称する)21から構成される。Nは、コマンド管理装置1によって同時に管理されるべきコマンドの最大数から決定される。本実施形態において、Nは128であり、コマンド管理装置1によって最大128個のコマンドが同時に管理される。
コマンドテーブル21は、メモリを用いて実現される。コマンドテーブル21の各エントリENT(u)(u=0,1,…127)の大きさ(記憶容量)は、受信されるべきコマンドの長さに依存する。ここでは、コマンドが32ビットバスを介してコマンドテーブル21内のエントリENT(u)に格納され、且つ当該コマンドの長さが8ワード(1ワード=32ビット)であるものとする。この場合、コマンドテーブル21の各エントリENT(u)の大きさは、32ビット×8=256ビットとなる。したがってコマンドテーブル21は、Nが128である本実施形態では、32ビット×8×128=32768ビット=1024ワードのメモリから構成される。
コマンドヒストリーFIFO部10は、コマンドテーブル21のN個(N=128)のエントリENT(0)〜ENT(N-1)のそれぞれのアドレス(ADDRESS)及び当該エントリENT(0)〜ENT(N-1)のそれぞれにおけるコマンドの格納状態を示すフラグの群を保持・管理する先入れ先出しバッファ部として用いられる。コマンドテーブル21に格納されたコマンドの群は、コマンドヒストリーFIFO部10の管理の下で格納順に取り出される。コマンドヒストリーFIFO部10は、アドレスFIFO部11、フラグFIFO部12、フリーアドレス設定部13、検出回路14及び置換制御回路15を備えている。
アドレスFIFO部11は、主として、コマンドテーブル21のN個(N=128)のエントリENT(0)〜ENT(N-1)のmビットのアドレスを保持するためのN個のmビットのフリップフロップから構成される。「m」は、「N−1」までの数字を表すことが可能なバイナリデータのビット数である。本実施形態では、N−1=127(0x7F)であるので、m=7である。
フラグFIFO部12は、主として、上記エントリENT(0)〜ENT(N-1)のそれぞれにおけるコマンドの格納状態を示すフラグの群を保持するためのN個のフリップフロップ組から構成される。N個のフリップフロップ組の各々は、k個のフラグを保持するための、k個の1ビットのフリップフロップから構成される。kは管理されるべきフラグの種類の数から決定される。本実施形態では、管理されるべきフラグの種類は、後述するRフラグ(未読フラグ)及びUフラグ(使用中フラグ)の2種類であり、したがってk=2である。しかしkは、他に管理されるべき種類のフラグが必要ならば増やされてもよく、不要な種類のフラグがあるならば減らされてもよい。
アドレスFIFO部11のN個(N=128)のmビットのフリップフロップのうちのv番目(v=0,1,…N−1)のmビットのフリップフロップと、フラグFIFO部12のN個のフリップフロップ組のうちのv番目のフリップフロップ組との組み合わせを、アドレスFIFO部11のv番目のエントリまたはエントリvと呼び、cfifo[v]のように表現する。また、vをcfifo[v]のアドレス(エントリアドレス)、つまりアドレスFIFO部11及びフラグFIFO部12のアドレス(エントリアドレス)と称する。cfifo[v]に対応するアドレスFIFO部11の部分をcfifo[v]のアドレス部、cfifo[v]に対応するフラグFIFO部12の部分をcfifo[v]のフラグ部と、それぞれ称する。
フリーアドレス設定部13は、不要になったコマンドがコマンドテーブル21内の例えばエントリENT(u)に格納されている場合、当該エントリENT(u)のアドレス「u」を次フリーアドレス(NEXT FREE ADDRESS)として設定するのに用いられる。フリーアドレス設定部13は、後述するアドレス解放処理において用いられる。
検出回路14及び置換制御回路15に関する説明は後述する。
コマンドヒストリーFIFO部10はまた、mビット(m=7)のライトポインタwp及びリードポインタrpを備えている。
ライトポインタwpは、ホストから転送された、リードコマンド、或いはライトコマンドのようなコマンドをコマンドテーブル21に格納する際に、当該コマンドが格納されるべきコマンドテーブル21のエントリのアドレスを格納しているcfifo[wp]のアドレス「wp」を指し示す。ライトポインタwpによって指定される、cfifo[wp]のアドレス部に格納されているアドレスは、書き込みアドレス(WRITE ADDRESS)としてコマンドヒストリーFIFO部10からコマンドバッファ20に出力される。
リードポインタrpは、コマンドテーブル21から次に実行されるべきコマンドを取り出す際に用いられる。リードポインタrpは、取り出されるべきコマンドが格納されているコマンドテーブル21のエントリのアドレスを格納しているcfifo[rp]のアドレス「rp」を指し示す。リードポインタrpによって指定される、cfifo[rp]のアドレス部に格納されているアドレスは、読み出しアドレス(READ ADDRESS)としてコマンドヒストリーFIFO部10から、処理部2に出力される。
処理部2は、コマンドヒストリーFIFO部10から出力される読み出しアドレスを用いて、当該読み出しアドレスで指定されるコマンドテーブル21内のエントリからコマンドを取り出す。処理部2は取り出されたコマンドを実行する。処理部2は、取り出されたコマンドが、リードコマンドまたはライトコマンドの場合、記憶部3からデータを読み出す、または記憶部3にデータを書き込む。処理部2は、これらの動作を、例えばファームウェア(以下、FWと称する)に従って実行する。
次に、本実施形態におけるコマンド格納時の動作について、図2を参照して説明する。
今、記憶装置のホストインタフェース部がホストから転送されたコマンドを受信した結果、当該受信されたコマンドをコマンド管理装置1のコマンドテーブル21に格納するためのコマンド格納動作が行われるものとする。このとき、コマンドヒストリーFIFO部10のライトポインタwpが「20」であり、図2に示すように、当該コマンドヒストリーFIFO部10内のcfifo[20]を指しているものとする。
この場合、ライトポインタwp(=20)の指し示すcfifo[20]が選択される。そして、選択されたcfifo[20]のアドレス部に格納されているアドレス(図2の例では65)が、書き込みアドレス(WRITE ADDRESS)としてコマンドバッファ20に出力される。これにより、ホストから受信されたコマンドは、書き込みアドレス「65」によって指定される、コマンドテーブル21内のエントリENT(65)に格納される。コマンドの大きさが8ワードで、当該コマンドをコマンドバッファ20に転送するのに用いられるバスのデータ幅が32ビットであるものとすると、コマンドテーブル21内のエントリENT(65)にコマンドを格納するのに、8バスサイクルを要する。
コマンドテーブル21へのコマンドの格納が完了すると、上記選択されたcfifo[20](つまりライトポインタwpの指し示すcfifo[20])内のRフラグ(より詳細にはフラグ部内のRフラグ)及びUフラグ(より詳細にはフラグ部内のUフラグ)がそれぞれセットされる。また、ライトポインタwpがインクリメントされる。この例では、ライトポインタwpが「20」から「21」にインクリメントされる。
なお、N=128の本実施形態のように、「N−1」が2進数で“1”のみで表される場合であれば、ライトポインタwpは、そのときの値に無関係にインクリメントされてよい。しかし「N−1」が、例えば159のように、2進数で“1”のみで表されない場合には、ライトポインタwpが「N−1」を指しているときに限り、当該ライトポインタwpはインクリメントされるのではなく、0に戻される。本実施形態では、アドレス「0」はアドレス「N−1」から連続していると見なすことができる。このことは、リードポインタrpについても同様である。つまり本実施形態では、ライトポインタwp及びリードポインタrpは、シーケンシャルに更新される。
ライトポインタwpの指し示すcfifo[wp]のアドレス部に格納されたアドレスが「u」であるものとする。この場合、cfifo[wp]内のRフラグは、当該cfifo[wp]のアドレス部に格納されたアドレス(以下、対応するアドレスと称する)「u」によって指定される、コマンドテーブル21内のエントリENT(u)に格納されているコマンドが未だ読み出されていないことを示す。cfifo[wp]内のUフラグは、対応するアドレス「u」によって指定される、コマンドテーブル21内のエントリENT(u)に格納されているコマンドの実行が未だ完了していないこと、つまり使用中であることを示す。図2は、wp=20、u=65の場合である。
ライトポインタwpの指し示すcfifo[wp]内のUフラグがセットされているときは、実行完了していないコマンドが新規コマンドで上書きされないように、ホストからのコマンドの受信を制限してもよい。
次に、本実施形態におけるコマンド格納完了時の動作について、図3を参照して説明する。図3は、図2に示したコマンド格納が完了した後の、コマンドヒストリーFIFO部10の状態を示す。
図2に示したコマンド格納が完了した場合、図3に示すように、cfifo[20]内のRフラグ及びUフラグがセットされ、ライトポインタwpは「20」から「21」にインクリメントされている。この状態で、ホストから新たにコマンドが受信されると、今度はcfifo[21]のアドレス部に格納されているアドレス「74」が書き込みアドレスとしてコマンドバッファ20へ出力される。これにより、新たに受信されたコマンドはコマンドテーブル21内のエントリENT(74)に格納される。
次に、本実施形態におけるコマンド取り出し時の動作について、図4を参照して説明する。本実施形態では、コマンド取り出しは、処理部2によってFWに従って行われる。
今、コマンドヒストリーFIFO部10のリードポインタrpが「1」であり、図4に示すように、当該コマンドヒストリーFIFO部10内のcfifo[1]を指しているものとする。
本実施形態では、処理部2が、ある1つのレジスタ領域(以下、CFIFOトップ部と称する)にリードアクセスすると、リードポインタrpの指し示すcfifo[rp]のアドレス部及びフラグ部が、コマンドヒストリーFIFO部10から当該処理部2に出力されるように構成されている。図4の例ではrp=1であることから、cfifo[1]が選択される。cfifo[1]のアドレス部にはアドレス「8」が格納されている。このアドレス「8」が、読み出しアドレス(READ ADDRESS)として処理部2に出力される。処理部2は、この読み出しアドレス「8」を使用する。
処理部2は、コマンドヒストリーFIFO部10から読み出しアドレス「8」が出力される際に、当該コマンドヒストリーFIFO部10から出力されるフラグ部内のRフラグがセットされているならば、そのアドレス「8」によって指定される、コマンドテーブル21内のエントリENT(8)に格納されているコマンドを未だ取り出していないことを認識できる。そこで処理部2は、CFIFOトップ部にアクセスすることにより、コマンドヒストリーFIFO部10(より詳細には、リードポインタrp(=1)の指し示すcfifo[1])から読み出したアドレス(読み出しアドレス)「8」に基づいて、コマンドテーブル21にアクセスする。これにより処理部2は、コマンドテーブル21のエントリENT(8)に格納されているコマンドを取り出す。
処理部2は、コマンド取り出しを完了すると、cfifo[1]内のRフラグをクリア(ここではゼロクリア)し、リードポインタrpをインクリメントする。なお、処理部2からのコマンド取り出し完了に応じて、リードポインタrpが自動的にインクリメントされる構成としてもよい。同様に、処理部2からのコマンド取り出し完了に応じて、Rフラグが自動的にクリアされる構成としてもよい。
次に、本実施形態におけるコマンド取り出し完了時の動作について、図5を参照して説明する。図5は、図4に示したコマンド取り出しが完了した後の、コマンドヒストリーFIFO部10の状態を示す。
図4に示したコマンド取り出しが完了した場合、図5に示すように、cfifo[1]内のRフラグがクリアされ、リードポインタrpは「1」から「2」にインクリメントされている。この状態で、処理部2がCFIFOトップ部にリードアクセスすると、今度はcfifo[2]のアドレス部に格納されているアドレス「54」が読み出しアドレスとして処理部2に出力される。このアドレス「54」を用いて処理部2は、コマンドテーブル21のエントリENT(54)に格納されているコマンドを取り出すことができる。
本実施形態によれば、ホストから受信したコマンドの群を、図2乃至図5を参照して説明したような動作によって、その受信順に処理部2が取り出すことができる。
次に、本実施形態におけるコマンドヒストリーFIFO部10の初期状態について、図6を参照して説明する。
図6に示すように、コマンドヒストリーFIFO部10の初期状態では、全てのcfifo[0]〜cfifo[127]内のRフラグとUフラグはクリアされている。cfifo[0]〜cfifo[127]のアドレス部には、それぞれアドレス「0」〜「127」が初期設定される。このように初期状態では、コマンドヒストリーFIFO部10のアドレスFIFO部11には、アドレス「0」〜「127」が昇順に整列している。しかし、この並びは、後述するアドレス解放動作の繰り返しに応じて崩れていく。なお、ライトポインタwp及びリードポインタrpは、初期状態では、いずれも「0」に設定される。
次に本実施形態における第1の状態でのアドレス解放について、図7を参照して説明する。第1状態とは、後述するwp≦nの場合を指す。
コマンドテーブル21から取り出されたコマンドの実行が完了した場合、当該コマンドは不要になる。また、コマンドテーブル21に格納されたコマンドを実行せずにアボートする場合にも、当該コマンドは不要になる。ここで、不要になったコマンドが格納されているコマンドテーブル21のエントリ(領域)がENT(u)であり、当該エントリENT(u)のアドレス「u」を格納しているコマンドヒストリーFIFO部10内のエントリがエントリ「n」(nは0〜127のいずれか)、つまりcfifo[n]であるものとする。この場合、フリーアドレス設定部13には、アドレス「u」が設定されている。
さて、コマンドテーブル21のエントリENT(u)に格納されているコマンドが不要となった場合、当該エントリENT(u)(つまり、不要になったコマンドが格納されているエントリENT(u))を解放する必要がある。アドレス解放とは、このコマンドテーブル21のエントリENT(u)を解放することを指す。また、解放されたコマンドテーブル21のエントリENT(u)のアドレス「u」を、解放されたアドレスと称する。コマンドテーブル21のエントリENT(u)を解放した際には、以下に述べるように、当該エントリENT(u)のアドレス「u」も解放される。また、エントリENT(u)のアドレス「u」を解放することは、当該アドレス「u」を格納しているcfifo[n]を解放することと等価である。
本実施形態において、アドレス解放は、処理部2によりFWに従って行われる。処理部2によってアドレス解放が行われると、解放されたアドレス「u」が、現在のcfifo[n]のアドレス部から、ライトポインタwpの指し示すコマンドヒストリーFIFO部10のcfifo[wp]のアドレス部に移される。これによりcfifo[n]も解放される。また、ホストから次のコマンドが受信された場合、当該次のコマンドは、最後に解放されたアドレス「u」で指定される、コマンドテーブル21のエントリENT(u)に格納される。
以下、処理部2によるアドレス解放の手順について説明する。このアドレス解放は、FWに従って、コマンドヒストリーFIFO部10と協働して行われるが、全てハードウェア(HW)により行われる構成としてもよい。
処理部2は、解放されるべきアドレス「u」を次フリーアドレス(NEXT FREE ADDRESS)としてフリーアドレス設定部13に設定する。そして処理部2は、アドレス解放処理を起動する。
すると、コマンドヒストリーFIFO部10は、ライトポインタwpが指し示すcfifo[wp]のアドレス部を、フリーアドレス設定部13に設定されている次フリーアドレス「u」に置換する。この置換の詳細については後述する。このとき、cfifo[wp]内のRフラグ及びUフラグは、いずれもクリアされる(初期値に戻る)。
さて、次フリーアドレス「u」と等しいアドレス「u」は、コマンドヒストリーFIFO部10のcfifo[0]〜cfifo[127]のいずれかのアドレス部(前述の例では、cfifo[n]のアドレス部)に必ず格納されている。しかし本実施形態において、cfifo[wp]のアドレス部の置換に用いられるアドレス「u」は、フリーアドレス設定部13に設定されている次フリーアドレス「u」であることに注意されたい。
もし、フリーアドレス設定部13を適用しないならば、cfifo[wp]の入力に、cfifo[0]〜cfifo[127]のうちのcfifo[wp]以外の127のcfifoの中から、アドレス「u」を格納しているcfifo[n]のアドレス部を選択する、127入力1出力のマルチプレクサの出力を接続する必要がある。cfifo[0]〜cfifo[127]のうち、cfifo[wp]を除く各cfifoの入力についても同様である。
このときコマンドヒストリーFIFO部10は、コマンドの群の受信(格納)順にCFIFOトップ部を介してアドレスFIFO部11から対応するアドレスが読み出せることを保証するために、コマンドヒストリーFIFO部10のエントリを置換する必要がある。
前述したように、次フリーアドレス「u」と等しいアドレス「u」が格納されている、コマンドヒストリーFIFO部10のエントリが、エントリ「n」、つまりcfifo[n]であるものとする。もし、「wp」が「n」以下(wp≦n)である第1の状態のときは、コマンドヒストリーFIFO部10は、図7に示すように、wp以上n以下を満足する全てのアドレス「i」(wp≦i≦n)で指定される、コマンドヒストリーFIFO部10内のcfifo[i]のアドレス部及びフラグ部を、以下のように置換する。nを検出するための構成については後述する。図7の例では、wp=2、n=21である。
a1)i=wp
i=wpでは、コマンドヒストリーFIFO部10は、
新しいcfifo[i]のアドレス部=次フリーアドレス「u」
新しいcfifo[i]内のRフラグ=0(Rフラグの初期値)
新しいcfifo[i]内のUフラグ=0(Uフラグの初期値)
のように置換する。
a2)i=wp以外のi(wp<i≦n)
wp<i≦nでは、コマンドヒストリーFIFO部10は、
新しいcfifo[i]のアドレス部=旧cfifo[i-1]内のアドレス
新しいcfifo[i]内のRフラグ=旧cfifo[i-1]内のRフラグ
新しいcfifo[i]内のUフラグ=旧cfifo[i-1]内のUフラグ
のように置換する。旧cfifo[i-1]内のアドレスとは、置換前に、cfifo[i]の前段のcfifo[i-1]のアドレス部に格納されているアドレスを指す。
また、リードポインタrpが、コマンドヒストリーFIFO部10内の置換されるエントリの1つを指している(wp≦rp≦n)ときは、処理部2はアドレス解放処理の際に、当該リードポインタrpをインクリメントする。なお、リードポインタrpが、アドレス解放処理の際に自動的にインクリメントされる構成としてもよい。
次に、上述の第1の状態(wp≦n)のときのアドレス解放の具体例について、図8を参照して説明する。
まず、図8に示すように、ライトポインタwpが「2」、リードポインタrpが「19」であるものとする。また、フリーアドレス設定部13に設定されている次フリーアドレス「u」(つまり解放されるべきアドレス)が「37」であり、この次フリーアドレス「u」と等しいアドレス「37」が、コマンドヒストリーFIFO部10のcfifo[21](n=21)のアドレス部に格納されているものとする。このような例では、コマンドヒストリーFIFO部10内の置換されるエントリ「i」の範囲は、図8において矩形81で示されるように2≦i≦21である。
この場合、コマンドヒストリーFIFO部10は、図8において矢印82で示すように、矩形81で示される範囲に対して、
新しいcfifo[2]のアドレス部=次フリーアドレス「u」=37
新しいcfifo[2]内のRフラグ=0
新しいcfifo[2]内のUフラグ=0
新しいcfifo[3]のアドレス部=旧cfifo[2]内のアドレス=80
新しいcfifo[3]内のRフラグ=旧cfifo[2]内のRフラグ=0
新しいcfifo[3]内のUフラグ=旧cfifo[2]内のUフラグ=0

新しいcfifo[20]のアドレス部=旧cfifo[19]内のアドレス=29
新しいcfifo[20]内のRフラグ=旧cfifo[19]内のRフラグ=1
新しいcfifo[20]内のUフラグ=旧cfifo[19]内のUフラグ=1
新しいcfifo[21]のアドレス部=旧cfifo[20]内のアドレス=111
新しいcfifo[21]内のRフラグ=旧cfifo[20]内のRフラグ=1
新しいcfifo[21]内のUフラグ=旧cfifo[20]内のUフラグ=1
のように置換する。
コマンドヒストリーFIFO部10内の、2≦i≦21の範囲に含まれないcfifo[i]については、何も変わらない。
また、図8の例では、リードポインタrpが「19」であり、コマンドヒストリーFIFO部10内の置換されるエントリの1つを指している(2≦rp≦21)。このため、リードポインタrpは「19」から「20」にインクリメントされる。
このように本実施形態によれば、使用中(Uフラグ=1)であったコマンドが格納されていた、次フリーアドレス「37」によって指定されるコマンドテーブル21内のエントリENT(37)と、当該エントリENT(37)を指定するアドレス「37」と、当該アドレス「37」が格納されているコマンドヒストリーFIFO部10内のcfifo[21](n=21)とが解放される。これにより、ホストから次のコマンドが受信された場合、当該次のコマンドは、コマンドテーブル21内の解放されたエントリENT(37)に格納される。
次に、本実施形態における第2の状態でのアドレス解放について、図9を参照して説明する。第2の状態とは、「wp」が「n」より大きい場合(n<wp)を指す。ここでも、フリーアドレス設定部13に設定されている次フリーアドレス「u」と等しいアドレス「u」が格納されている、コマンドヒストリーFIFO部10内のエントリがcfifo[n]であるものとする。
図9の例でも、処理部2によってアドレス解放処理が起動されることにより、コマンドヒストリーFIFO部10は、ライトポインタwpが指し示すcfifo[wp]のアドレス部を、フリーアドレス設定部13に設定されている次フリーアドレス「u」に置換する。このとき、cfifo[wp]内のRフラグ及びUフラグは、いずれもクリアされる。
またコマンドヒストリーFIFO部10は、n以下を満足する全てのアドレス「i」(i≦n)と、wp以上を満足する全てのアドレス「i」(wp≦i)とで指定される、コマンドヒストリーFIFO部10内のcfifo[i]のアドレス部及びフラグ部を、以下のように置換する。但しアドレス「i」の下限は「0」であり、上限は127である。図9の例では、wp=126、n=19である。
b1)i=wp
i=wpでは、コマンドヒストリーFIFO部10は、
新しいcfifo[i]のアドレス部=次フリーアドレス「u」
新しいcfifo[i]内のRフラグ=0(Rフラグの初期値)
新しいcfifo[i]内のUフラグ=0(Uフラグの初期値)
のように置換する。
b2)i=wp以外のi(i≦nまたはwp<i)
i≦n(0≦i≦n)またはwp<i(wp<i≦127)では、コマンドヒストリーFIFO部10は、
新しいcfifo[i]のアドレス部=旧cfifo[i-1]内のアドレス
新しいcfifo[i]内のRフラグ=旧cfifo[i-1]内のRフラグ
新しいcfifo[i]内のUフラグ=旧cfifo[i-1]内のUフラグ
のように置換する。但し、新しいcfifo[0]は、旧cfifo[127]の内容で置換される。
また、リードポインタrpが、コマンドヒストリーFIFO部10内の置換されるエントリの1つを指している(rp≦nまたはwp≦rp)ときは、処理部2はアドレス解放処理の際に、当該リードポインタrpをインクリメントする。
次に、上述の第2の状態(n<wp)のときのアドレス解放の具体例について、図10を参照して説明する。
まず、図10に示すように、ライトポインタwpが「126」、リードポインタrpが「125」であるものとする。また、フリーアドレス設定部13に設定されている次フリーアドレス「u」が「29」であり、この次フリーアドレス「u」と等しいアドレス「29」が、コマンドヒストリーFIFO部10のcfifo[19](n=19)のアドレス部に格納されているものとする。このような例では、コマンドヒストリーFIFO部10内の置換されるエントリ「i」の範囲は、図10において矩形101aで示されるi≦19(0≦i≦19)と、矩形101bで示される126≦i(126≦i≦127)である。
この場合、コマンドヒストリーFIFO部10は、図10において矢印102aで示すように、矩形101aで示される範囲に対しては、
新しいcfifo[0]のアドレス部=旧cfifo[127]内のアドレス=71
新しいcfifo[0]内のRフラグ=旧cfifo[127]内のRフラグ=0
新しいcfifo[0]内のUフラグ=旧cfifo[127]内のUフラグ=0
新しいcfifo[1]のアドレス部=旧cfifo[0]内のアドレス=15
新しいcfifo[1]内のRフラグ=旧cfifo[0]内のRフラグ=0
新しいcfifo[1]内のUフラグ=旧cfifo[0]内のUフラグ=0

新しいcfifo[19]のアドレス部=旧cfifo[18]内のアドレス=74
新しいcfifo[19]内のRフラグ=旧cfifo[18]内のRフラグ=0
新しいcfifo[19]内のUフラグ=旧cfifo[18]内のUフラグ=1
のように置換する。
また、コマンドヒストリーFIFO部10は、図10において矢印102bで示すように、矩形101bで示される範囲に対しては、
新しいcfifo[126]のアドレス部=次フリーアドレス「u」=29
新しいcfifo[126]内のRフラグ=0
新しいcfifo[126]内のUフラグ=0
新しいcfifo[127]のアドレス部=旧cfifo[126]内のアドレス=99
新しいcfifo[127]内のRフラグ=旧cfifo[126]内のRフラグ=0
新しいcfifo[127]内のUフラグ=旧cfifo[126]内のUフラグ=0
のように置換する。
コマンドヒストリーFIFO部10内の、20≦i≦125の範囲のcfifo[i]については、何も変わらない。
また、図10の例では、リードポインタrpが「125」であり、コマンドヒストリーFIFO部10内の置換されるエントリを指していない。このため、リードポインタrpはインクリメントされない。
このように本実施形態によれば、使用中(Uフラグ=1)であったコマンドが格納されていた、次フリーアドレス「29」によって指定されるコマンドテーブル21内のエントリENT(29)と、当該エントリENT(29)を指定するアドレス「29」と、当該アドレス「29」が格納されているコマンドヒストリーFIFO部10内のcfifo[19](n=19)とが解放される。これにより、ホストから次のコマンドが受信された場合、当該次のコマンドは、コマンドテーブル21内の解放されたエントリENT(29)に格納される。
次に、図1に示される検出回路14の構成について説明する。
図11は、検出回路14の構成を示すブロック図である。
検出回路14は、フリーアドレス設定部13に設定されている次フリーアドレスと等しいアドレスが格納されている、コマンドヒストリーFIFO部10のエントリ(cfifo[n])のアドレス「n」を検出する。検出回路14は、128個(n=128)の比較器CMP[0]〜CMP[127]と、変換器140とを備えている。
比較器CMP[i](i=0,1,…127)は、フリーアドレス設定部13に設定されている次フリーアドレスとコマンドヒストリーFIFO部10のcfifo[i]のアドレス部に格納されているアドレス(つまりcfifo[i]内のアドレス)とを比較し、1ビットの比較結果を出力する。この比較結果は、“1”のとき次フリーアドレスとcfifo[i]内のアドレスとが等しいことを示し、“0”のとき当該両アドレスが異なることを示す。
比較器CMP[0]〜CMP[127]のうち、比較器CMP[n](nは0〜127のいずれか)が比較結果として“1”を出力したものとする。この場合、変換器140は、比較器CMP[0]〜CMP[127]の比較結果の組み合わせを、比較器CMP[n]に対応するcfifo[n]のアドレス「n」に変換する。つまり変換器140は、比較器CMP[0]〜CMP[127]の比較結果の組み合わせのビット列を、当該ビット列における比較結果が“1”の位置に応じて、以下のように変換する。
変換器140は、
比較器CMP[0]〜CMP[127]の比較結果が
「128’b00000000000……0000001」のとき、n=0
比較器CMP[0]〜CMP[127]の比較結果が
「128’b00000000000……0000010」のとき、n=1
比較器CMP[0]〜CMP[127]の比較結果が
「128’b00000000000……0000100」のとき、n=2

比較器CMP[0]〜CMP[127]の比較結果が
「128’b01000000000……0000000」のとき、n=126
比較器CMP[0]〜CMP[127]の比較結果が
「128’b10000000000……0000000」のとき、n=127
にそれぞれ変換する。なお、「128’b」は、後続のビット列が128ビットであることを示す。
上述したように、図11に示す検出回路14には、次フリーアドレス及びcfifo[0]〜cfifo[127]内のアドレスが入力される。しかし、図1では、検出回路14の入力のうち、cfifo[0]〜cfifo[127]内のアドレスは、簡略化のために省略されている。
次に、図1に示されるコマンドヒストリーFIFO部10のアドレスFIFO部11の構成について説明する。前述したようにアドレスFIFO部11は、主として、N個のmビットのフリップフロップから構成される。
図12は、アドレスFIFO部11の0番目のエントリを除くi番目のエントリ(i=1,2,…N−1)の構成(N=128)、つまりコマンドヒストリーFIFO部10のcfifo[i]のアドレス部ADR[i]の構成を示すブロック図である。
アドレス部ADR[i]は、セレクタ(第1のセレクタ)ASEL1[i]、セレクタ(第2のセレクタ)ASEL2[i]及びmビット(m=7)のフリップフロップAFF[i]を備えている。
セレクタASEL1[i]は、アドレス部ADR[i-1]に含まれているフリップフロップAFF[i-1]の出力(cfifo[i-1]内のアドレス)またはフリーアドレス設定部13に設定されている次フリーアドレス(NEXT FREE ADDRESS)のいずれか一方を選択信号AS1[i]に応じて選択する。選択信号AS1[i]は、ライトポインタwpがアドレス(エントリ)「i」を指している場合(i=wp)“1”となり、それ以外の場合(i≠wp)は“0”となる。セレクタASEL1[i]は、選択信号AS1[i]が“1”の場合、次フリーアドレスを選択し、選択信号AS1[i]が“0”の場合、cfifo[i-1]内のアドレスを選択する。
セレクタASEL2[i]は、フリップフロップAFF[i]の出力(cfifo[i]内のアドレス)またはセレクタASEL1[i]によって選択されたアドレスのいずれか一方を選択信号AS2[i]に応じて選択する。選択信号AS2[i]は、「i」がcfifo[i](より詳細には、cfifo[i]のアドレス部及びフラグ部)を置換する条件に合致した場合に“1”となり、それ以外は“0”となる。セレクタASEL2[i]は、選択信号AS2[i]が“1”の場合、セレクタASEL1[i]によって選択されたアドレスを選択し、選択信号AS2[i]が“0”の場合、cfifo[i]内のアドレスを選択する。選択信号AS2[i]には、「i」がcfifo[i]を置換する条件に合致しているかを示す、後述する条件合致信号CS[i]が用いられる。
フリップフロップAFF[i]はcfifo[i]のアドレス部の主要部を構成している。フリップフロップAFF[i]は、セレクタASEL2[i]によって選択されたアドレスを、クロック信号CLKに応じて、cfifo[i]のアドレス部に格納されるアドレスとして保持する。セレクタASEL1[i]及びASEL2[i]は、cfifo[i]のアドレス部(フリップフロップAFF[i])に格納されているアドレスを置換する置換回路ASUB[i]を構成する。
図13は、「i」が「0」の場合のアドレスFIFO部11のエントリiの構成、つまりコマンドヒストリーFIFO部10のcfifo[i]のアドレス部ADR[i]の構成を示すブロック図である。
図13に示すアドレス部ADR[i](i=0)の構成は、図12に示すアドレス部ADR[i](i=1,2,…N−1)の構成と同様である。但し、図13に示すアドレス部ADR[i](i=0)では、セレクタASEL1[i]の一方の入力に、cfifo[i-1]内のアドレスではなくて、cfifo[N-1]内のアドレス、つまりアドレス部ADR[N-1]に含まれているフリップフロップAFF[N-1]の出力が用いられる。
上述したアドレスFIFO部11の構成から明らかなように、cfifo[0]〜cfifo[N-1](N=128)のアドレス部ADR[0]〜ADR[N-1]は、リング状に接続されている。このため、アドレス部ADR[i]の前段は、i≠0の場合はアドレス部ADR[i-1]となり、i=0の場合はアドレス部ADR[N-1]となる。
上述のアドレス部ADR[i](i=0,1,…N−1)では、「i」がcfifo[i]を置換する条件に合致していない場合には、フリップフロップAFF[i]の入力として、当該フリップフロップAFF[i]の出力が選択される。この場合、フリップフロップAFF[i]の値、つまりcfifo[i]のアドレス部の値は保持される。
アドレス解放処理によって、「i」がcfifo[i]を置換する条件に合致すると、i=wpの場合は、フリップフロップAFF[i]の入力として、フリーアドレス設定部13に設定されている次フリーアドレスが選択される。この場合、フリップフロップAFF[i]の値、つまりcfifo[i]のアドレス部の値は、次フリーアドレスに置換される。
一方、アドレス解放処理によって、「i」がcfifo[i]を置換する条件に合致しても、i≠wpで、i≠0の場合は、フリップフロップAFF[i]の入力として、アドレス部ADR[i]の前段のアドレス部ADR[i-1]内のフリップフロップAFF[i-1]の値、つまりcfifo[i-1]のアドレス部に格納されているアドレスが選択される。この場合、フリップフロップAFF[i]の値、つまりcfifo[i]のアドレス部の値は、cfifo[i-1]のアドレス部に格納されているアドレスに置換される。次に、i≠wpで、i=0の場合は、フリップフロップAFF[i]の入力として、アドレス部ADR[i](アドレス部ADR[0])の前段のアドレス部ADR[N-1]内のフリップフロップAFF[N-1]の値、つまりcfifo[N-1]のアドレス部に格納されているアドレスが選択される。この場合、フリップフロップAFF[i]の値、つまりcfifo[i]のアドレス部の値は、cfifo[N-1]のアドレス部に格納されているアドレスに置換される。
次に、図1に示されるコマンドヒストリーFIFO部10のフラグFIFO部12の構成について説明する。前述したようにフラグFIFO部12は、主として、N個(N=128)のフリップフロップ組から構成され、N個のフリップフロップ組の各々はk個(k=2)のフラグを保持するために、k個の1ビットのフリップフロップから構成される。つまりフラグFIFO部12は、1種類のフラグにつき、主として、N個の1ビットのフリップフロップから構成される。
図14は、フラグFIFO部12の0番目のエントリを除くi番目のエントリ(i=1,2,…N−1)の構成(N=128)、つまりコマンドヒストリーFIFO部10のcfifo[i]のフラグ部FLG[i]の構成を示すブロック図である。
フラグ部FLG[i]は、セレクタFSEL1[i]、セレクタFSEL2[i]及びフリップフロップFFF[i]を備えている。
セレクタFSEL1[i]は、フラグ部FLG[i-1]に含まれているフリップフロップFFF[i-1]の出力(cfifo[i-1]のフラグ部に保持されているフラグ、つまりcfifo[i-1]内のフラグ)またはフラグの初期値“0”のいずれか一方を選択信号FS1[i]に応じて選択する。選択信号FS1[i]は、ライトポインタwpがアドレス(エントリ)「i」を指している場合(i=wp)“1”となり、それ以外の場合(i≠wp)は“0”となる。選択信号FS1[i]は、選択信号AS1[i]に一致する。セレクタFSEL1[i]は、選択信号FS1[i]が“1”の場合、フラグの初期値“0”を選択し、選択信号FS1[i]が“0”の場合、cfifo[i-1]内のフラグを選択する。
セレクタFSEL2[i]は、フリップフロップFFF[i]の出力(cfifo[i]内のフラグ)またはセレクタFSEL1[i]によって選択されたフラグのいずれか一方を選択信号FS2[i]に応じて選択する。選択信号FS2[i]は、「i」がcfifo[i]を置換する条件に合致する場合に“1”となり、それ以外は“0”となる。セレクタFSEL2[i]は、選択信号FS2[i]が“1”の場合、セレクタFSEL1[i]によって選択されたフラグを選択し、選択信号FS2[i]が“0”の場合、cfifo[i]内のフラグを選択する。選択信号FS2[i]には、選択信号AS2[i]と同様に、条件合致信号CS[i]が用いられる。
フリップフロップFFF[i]は、cfifo[i]のフラグ部の主要部を構成している。フリップフロップFFF[i]は、セレクタFSEL2[i]によって選択されたフラグを、クロック信号CLKに応じて、cfifo[i]のフラグ部に格納されるフラグとして保持する。セレクタFSEL1[i]及びFSEL2[i]は、cfifo[i]のフラグ部(フリップフロップFFF[i])に格納されているフラグを置換する置換回路FSUB[i]を構成する。
図15は、「i」が「0」の場合のフラグFIFO部12のエントリiの構成、つまりコマンドヒストリーFIFO部10のcfifo[i]のフラグ部FLG[i]の構成を示す。
図15に示すフラグ部FLG[i](i=0)の構成は、図14に示すフラグ部FLG[i](i=1,2,…N−1)の構成と同様である。但し、図15に示すフラグ部FLG[i](i=0)では、セレクタFSEL1[i]の一方の入力に、cfifo[i-1]内のフラグではなくて、cfifo[N-1]内のフラグ、つまりフラグ部FLG[N-1]に含まれているフリップフロップFFF[N-1]の出力が用いられる。
上述したフラグFIFO部12の構成から明らかなように、cfifo[0]〜cfifo[N-1](N=128)のフラグ部FLG[0]〜FLG[N-1]は、リング状に接続されている。このため、フラグ部FLG[i]の前段は、i≠0の場合はフラグ部FLG[i-1]となり、i=0の場合はフラグ部FLG[N-1]となる。
上述のフラグ部FLG[i](i=0,1,…N−1)では、「i」がcfifo[i]を置換する条件に合致していない場合には、フリップフロップFFF[i]の入力として、当該フリップフロップFFF[i]の出力が選択される。この場合、フリップフロップFFF[i]の値、つまりcfifo[i]のフラグ部の値は保持される。
アドレス解放処理によって、「i」がcfifo[i]を置換する条件に合致すると、i=wpの場合は、フリップフロップFFF[i]の入力として、フラグの初期値“0”が選択される。この場合、フリップフロップFFF[i]の値、つまりcfifo[i]のフラグ部の値は、初期値“0”となる。
一方、アドレス解放処理によって、「i」がcfifo[i]を置換する条件に合致しても、i≠wpで、i≠0の場合は、フリップフロップFFF[i]の入力として、フラグ部FLG[i]の前段のフラグ部FLG[i-1]内のフリップフロップFFF[i]の値、つまりcfifo[i-1]のフラグ部に格納されているフラグが選択される。この場合、フリップフロップFFF[i]の値、つまりcfifo[i]のフラグ部の値は、cfifo[i-1]のフラグ部に格納されているフラグに置換される。次に、i≠wpで、i=0の場合は、フリップフロップFFF[i]の入力として、フラグ部FLG[i](フラグ部FLG[0])の前段のフラグ部FLG[N-1]内のフリップフロップFFF[N-1]の値、つまりcfifo[N-1]のフラグ部に格納されているフラグが選択される。この場合、フリップフロップFFF[i]の値、つまりcfifo[i]のフラグ部の値は、cfifo[N-1]のフラグ部に格納されているフラグに置換される。
なお、フラグの初期値は必ずしも“0”でなくてもよく、“1”であっても構わない。
図16は、本実施形態におけるアドレス解放時に、アドレスFIFO部11のi番目のエントリ(アドレス部ADR[i])、つまりcfifo[i]のアドレス部において、アドレスAがアドレスBに置換される場合のタイミングチャートである。
まず、cfifo[i]のアドレス部(ADR[i])にアドレスAが格納されているものとする。この状態で、アドレス解放処理によって、「i」がcfifo[i]を置換する条件に合致すると、cfifo[i]のアドレス部に格納されているアドレスAがアドレスBに置換される。ここでアドレスBは、上述したように、次フリーアドレス(i=wpの場合)、cfifo[i-1]内のアドレス(i≠wpで、i≠0の場合)、またはcfifo[N-1]内のアドレス(i≠wpで、i=0の場合)である。
図16のタイミングチャートからも明らかなように、本実施形態によれば、アドレス解放処理(アドレスの置換)は、「i」がcfifo[i]を置換する条件に合致する場合に、後述する置換トリガ信号TRGが出力されるクロック信号CLKの1サイクルの期間、選択信号AS2[i](及びFS2[i])に用いられる条件合致信号CS[i]が“1”に切り替えられるだけで、つまりフリップフロップAFF[i]の入力を切り替えるだけで、当該クロック信号CLKの1サイクルで完了する。
フラグFIFO部12内のフラグ部FLG[i]、つまりcfifo[i]のフラグ部においても、図16に示すタイミングチャートと同様のタイミングでフラグが置換される。
つまり本実施形態においては、不要となったコマンドが格納されているコマンドテーブル21内のエントリENT(u)、当該エントリENT(u)のアドレス「u」、当該エントリENT(u)におけるコマンドの格納状態を示すフラグを格納している、コマンドヒストリーFIFO部10内のcfifo[n]を、コンパクション/カーベージコレクションを用いずに、しかも高速で解放できる。また本実施形態においては、コマンド群の受信(格納)順にアドレスFIFO部11から対応するアドレスが読み出せることを保証するために置換が必要となる、コマンドヒストリーFIFO部10内の置換対象範囲内のエントリ群を、クロック信号CLKの1サイクルで置換することができる。
図17は、処理部2によるCFIFOトップ部へのリードアクセスに応じてリードポインタrpの指し示すコマンドヒストリーFIFO部10のrp番目のエントリ(cfifo[rp])のアドレス部及びフラグ部を取り出す選択回路170の構成を示すブロック図である。
図17に示すように、選択回路170は、マルチプレクサ171を備えている。マルチプレクサ171は、cfifo[0]〜cfifo[127](N=128の場合)の各々のアドレス部及びフラグ部を入力する。マルチプレクサ171は、cfifo[0]〜cfifo[127](N=128の場合)の各々のアドレス部及びフラグ部から、リードポインタrpの指し示すcfifo[rp]のアドレス部及びフラグ部の値を選択する。選択されたcfifo[rp]のアドレス部及びフラグ部の値は、処理部2に出力される。
次に、図1に示される置換制御回路15の構成について説明する。置換制御回路15は、コマンドヒストリーFIFO部10のcfifo[i](i=0,1,…127)毎に、「i」がcfifo[i]を置換する条件に合致することを検出する。置換制御回路15は、この検出結果に応じて、cfifo[i]を対象とする置換を制御する。
図18は、置換制御回路15に含まれている、選択制御回路SCNT[i]の構成を示すブロック図である。
選択制御回路SCNT[i]は、「i」がcfifo[i]を置換する条件に合致することを検出することにより、条件合致信号CS[i]を出力する。条件合致信号CS[i]は、前述したように選択信号AS2[i]及びFS2[i]として用いられる。つまり選択制御回路SCNT[i]は、「i」がcfifo[i]を置換する条件に合致することを検出することにより、cfifo[i]のアドレス部ADR[i]のセレクタASEL2[i]及びcfifo[i]のフラグ部FLG[i]のセレクタFSEL2[i]を制御する。
「i」がcfifo[i]を置換する条件は、「wp」と「n」との大小関係によって、第1の条件と第2の条件とに分けられる。wp≦n(第1の状態)のとき、「i」がcfifo[i]を置換する条件として第1の条件が用いられる。第1の条件は、「i」がwp≦i≦nであることである。n<wp(第2の状態)のとき、「i」がcfifo[i]を置換する条件として第2の条件が用いられる。第2の条件は、「i」がi≦n、またはwp≦iであることである。
選択制御回路SCNT[i]は、検出器(第1の検出器)DTC1[i](#1)と、検出器(第2の検出器)DTC2[i](#2)と、セレクタ(第3のセレクタ)SEL[i]と、アンドゲートAND[i]とを備えている。
検出器DTC1[i]は、「i」が、wp≦i≦nであること、つまり第1の条件に合致することを検出する。検出器DTC1[i]は、wp≦i≦nであれば“1”の信号を、そうでなければ“0”の信号を出力する。検出器DTC2[i]は、「i」が、i≦n、またはwp≦iであること、つまり第2の条件に合致することを検出する。検出器DTC2[i]は、i≦n、またはwp≦iであれば“1”の信号を、そうでなければ“0”の信号を出力する。
セレクタSEL[i]は、検出器DTC1[i]の出力信号または検出器DTC2[i]の出力信号のいずれか一方を、選択信号S[i]に応じて選択する。選択信号S[i]は、wp≦n(第1の状態)の場合に“1”となり、n<wp(第2の状態)の場合は“0”となる。セレクタSEL[i]は、選択信号S[i]が“1”の場合(wp≦n)、検出器DTC1[i]の出力信号を選択し、選択信号S[i]が“0”の場合(n<wp)、検出器DTC2[i]の出力信号を選択する。
アンドゲートAND[i]は、処理部2からの置換トリガ信号TRGが“1”の期間、セレクタSEL[i]の出力信号を、「i」がcfifo[i]を置換する条件に合致しているかを示す条件合致信号CS[i]として出力する。条件合致信号CS[i]は、選択信号AS2[i]及びFS2[i]として用いられる。
置換制御回路15は、128個の選択制御回路SCNT[i](N=128の場合)を備えている。
以上説明した少なくとも1つの実施形態によれば、不要となったコマンドが格納されている領域をコンパクション或いはガーベージコレクションを用いずに解放することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…コマンド管理装置、10…コマンドヒストリーFIFO部、11…アドレスFIFO部、12…フラグFIFO部、13…フリーアドレス設定部、14…検出回路、15…置換制御回路、20…コマンドバッファ、21…コマンドテーブル、140…変換器、170…選択回路、171…マルチプレクサ、CMP[0]〜CMP[127]…比較器、AFF[i],AFF[i-1],AFF[N-1],FFF[i],FFF[i-1],FFF[N-1]…フリップフロップ、ASEL1[i],ASEL2[i],FSEL1[i],FSEL2[i]…セレクタ、ASUB[i],ASUB[i]…置換回路、SCNT[i]…選択制御回路、DTC1[i],DTC2[i]…検出器、SEL[i]…セレクタ、AND[i]…アンドゲート。
実施形態によれば、コマンド管理装置は、コマンドバッファと、先入れ先出し手段と、置換手段とを具備する。前記コマンドバッファは、ホストから受信されたコマンドの群を格納する。前記先入れ先出し手段は、前記コマンドバッファに格納されているコマンドの群を、その格納順に取り出すために、当該コマンドの群のそれぞれが格納されている前記コマンドバッファの領域のアドレスを格納するエントリの群を備えている前記置換手段は、前記コマンドバッファ内の1のコマンドが不要となった場合、前記ホストから新たに受信されたコマンドが格納されるべき前記コマンドバッファの領域のアドレスを格納している、前記先入れ先出し手段のエントリのエントリアドレス「wp」と、前記不要となったコマンドが格納されている前記コマンドバッファの領域のアドレスであるフリーアドレスが格納されている前記先入れ先出し手段のエントリのエントリアドレス「n」との大小関係で決まるエントリアドレスの範囲について、前記範囲内のエントリアドレスが「i」のエントリに格納されている第1のアドレスを、前記範囲内のエントリにおける前段のエントリに格納されている第2のアドレスに置換する
実施形態によれば、コマンド管理装置は、コマンドバッファと、先入れ先出し手段と、フリーアドレス設定手段と、ライトポインタとを具備する。前記コマンドバッファは、ホストから受信されたコマンドの群を格納する。前記先入れ先出し手段は、前記コマンドバッファに格納されているコマンドの群を、その格納順に取り出すために、当該コマンドの群のそれぞれが格納されている前記コマンドバッファの領域のアドレスを格納するアドレス部を含むエントリの群を備えている。前記フリーアドレス設定手段は、不要となったコマンドが格納されている前記コマンドバッファの領域のアドレスをフリーアドレスとして保持する。前記ライトポインタは、前記ホストから新たに受信されたコマンドが格納されるべき前記コマンドバッファの領域のアドレスを格納している、前記先入れ先出し手段の前記アドレス部のエントリアドレス「wp」を指し示す。前記先入れ先出し手段の前記エントリの群にそれぞれ含まれている前記アドレス部はリング状に接続されており、当該アドレス部は、当該アドレス部に格納されている第1のアドレスを、前記フリーアドレス設定手段に保持されている前記フリーアドレスまたは前段のアドレス部に格納されている第2のアドレスのいずれか一方に置換する置換手段を含む。前記先入れ先出し手段の前記エントリ群のそれぞれの前記アドレス部には、前記コマンドバッファの異なる領域のアドレスが初期設定される。前記置換手段は、当該置換手段を含む前記アドレス部のエントリアドレスが「i」であり、前記フリーアドレスと等しい第3のアドレスが格納されている前記先入れ先出し手段のエントリのエントリアドレスが「n」であるものとすると、前記「wp」が前記「n」以下である第1の状態において、前記「i」が前記「wp」以上で、前記「n」以下である第1の条件に合致する第1の場合のうち、前記「i」が前記「wp」に等しくない場合に、前記エントリアドレスが「i」のアドレス部に格納されている前記第1のアドレスを前段のアドレス部に格納されている前記第2のアドレスに置換し、前記「wp」が前記「n」より大きい第2の状態において、前記「i」が前記「n」以下であるか、或いは前記「wp」以上である第2の条件に合致する第2の場合のうち、前記「i」が前記「wp」に等しくない場合に、前記エントリアドレスが「i」のアドレス部に格納されている前記第1のアドレスを前のアドレス部に格納されている前記第2のアドレスに置換する。

Claims (11)

  1. ホストから受信されたコマンドの群を格納するコマンドバッファと、
    前記コマンドバッファに格納されているコマンドの群を、その格納順に取り出すために、当該コマンドの群のそれぞれが格納されている前記コマンドバッファの領域のアドレスを格納するアドレス部を含むエントリの群を備えた先入れ先出し手段と、
    不要となったコマンドが格納されている前記コマンドバッファの領域のアドレスをフリーアドレスとして保持するフリーアドレス設定手段とを具備し、
    前記先入れ先出し手段の前記エントリの群にそれぞれ含まれている前記アドレス部はリング状に接続されており、当該アドレス部は、当該アドレス部に格納されている第1のアドレスを、前記フリーアドレス設定手段に保持されている前記フリーアドレスまたは前段のアドレス部に格納されている第2のアドレスのいずれか一方に置換する置換手段を含む
    コマンド管理装置。
  2. 前記ホストから新たに受信されたコマンドが格納されるべき前記コマンドバッファの領域のアドレスを格納している、前記先入れ先出し手段のアドレス部のエントリアドレス「wp」を指し示すライトポインタを更に具備し、
    前記置換手段は、当該置換手段を含む前記アドレス部のエントリアドレスが「i」であり、前記フリーアドレスと等しい第3のアドレスが格納されている前記先入れ先出し手段のエントリのエントリアドレスが「n」であるものとすると、
    前記「wp」が前記「n」以下である第1の状態において、前記「i」が前記「wp」以上で、前記「n」以下である第1の条件に合致する第1の場合のうち、前記「i」が前記「wp」に等しくない場合に、前記エントリアドレスが「i」のアドレス部に格納されている前記第1のアドレスを前段のアドレス部に格納されている前記第2のアドレスに置換し、
    前記「wp」が前記「n」より大きい第2の状態において、前記「i」が前記「n」以下であるか、或いは前記「wp」以上である第2の条件に合致する第2の場合のうち、前記「i」が前記「wp」に等しくない場合に、前記エントリアドレスが「i」のアドレス部に格納されている前記第1のアドレスを前段のアドレス部に格納されている前記第2のアドレスに置換する
    請求項1記載のコマンド管理装置。
  3. 前記先入れ先出し手段のエントリ群のそれぞれのアドレス部は、前記アドレスを格納するのに用いられる、所定のクロック信号で動作するフリップフロップを備えている請求項2記載のコマンド管理装置。
  4. 前記エントリアドレスが「i」のアドレス部の前記置換手段は、
    前記フリーアドレス設定手段に保持されている前記フリーアドレスまたは前段のアドレス部の前記フリップフロップに格納されている前記第2のアドレスのいずれか一方を、前記「i」が前記「wp」に等しいかに応じて選択する第1のセレクタと、
    前記第1の場合と前記第2の場合のそれぞれの場合に、前記第1のセレクタによって選択されたアドレスを選択し、前記第1の場合または前記第2の場合のいずれでもない場合に、前記エントリアドレスが「i」のアドレス部の前記フリップフロップに格納されている前記第1のアドレスを選択する第2のセレクタとを備えており、
    前記エントリアドレスが「i」のアドレス部の前記フリップフロップは、前記第2のセレクタによって選択されたアドレスを、前記クロック信号に応じて格納する
    請求項3記載のコマンド管理装置。
  5. 前記先入れ先出し手段の前記エントリの群にそれぞれ含まれている前記置換手段を制御する置換制御手段を更に具備し、
    前記置換制御手段は、前記先入れ先出し手段の前記エントリの群にそれぞれ対応して設けられる選択制御手段を備え、
    前記選択制御手段は、対応する前記エントリのエントリアドレスが「i」である場合、前記第1の場合と前記第2の場合のそれぞれを検出することにより、前記第2のセレクタが前記第1のセレクタによって選択されたアドレスを選択するように制御する
    請求項4記載のコマンド管理装置。
  6. 前記選択制御手段は、
    前記「i」が前記第1の条件に合致することを検出して第1の検出信号を出力する第1の検出器と、
    前記「i」が前記第2の条件に合致することを検出して第2の検出信号を出力する第2の検出器と、
    前記第1の状態において前記第1の検出信号を選択し、前記第2の状態において前記第2の検出信号を選択する第3のセレクタとを備えており、
    前記第2のセレクタは、前記第3のセレクタによって選択された信号に応じて、前記第1のセレクタによって選択されたアドレスまたは前記第1のアドレスを選択する
    請求項5記載のコマンド管理装置。
  7. 前記コマンドバッファに格納されているコマンドの群を、その格納順に取り出すために、次に取り出されるべきコマンドが格納されている前記コマンドバッファの領域のアドレスを格納している、前記先入れ先出し手段のアドレス部のエントリアドレス「rp」を指し示すリードポインタを更に具備し、
    前記リードポインタは、前記置換手段による置換時に、当該リードポインタの指すエントリアドレス「rp」が、前記第1の状態において、前記「wp」以上で、前記「n」以下であるか、または、前記第2の状態において、前記「n」以下であるか、もしくは前記「wp」以上である場合、次段のエントリを指し示すように更新される
    請求項2記載のコマンド管理装置。
  8. 前記フリーアドレスを、前記先入れ先出し手段のエントリ群のそれぞれのアドレス部に格納されているアドレスと比較することにより、前記フリーアドレスと等しい前記第3のアドレスが格納されている前記先入れ先出し手段のエントリのエントリアドレス「n」を検出する検出手段を更に具備する請求項2記載のコマンド管理装置。
  9. 前記検出手段は、
    前記先入れ先出し手段のエントリ群にそれぞれ対応して設けられ、前記フリーアドレスを、対応するエントリのアドレス部に格納されているアドレスと比較する比較器の群と、
    前記比較器の群のそれぞれの比較結果の組み合わせを、当該組み合わせにおける一致を示す比較結果の位置に応じて前記エントリアドレス「n」に変換する変換器とを備えている
    請求項8記載のコマンド管理装置。
  10. 前記先入れ先出し手段の前記エントリ群のそれぞれのアドレス部には、前記コマンドバッファの異なる領域のアドレスが初期設定される
    請求項8記載のコマンド管理装置。
  11. ホストから受信されたコマンドの群を管理するコマンド管理装置と、
    記憶部と、
    前記記憶部にアクセスする処理手段とを具備し、
    前記コマンド管理装置は、
    ホストから受信されたコマンドの群を格納するコマンドバッファと、
    前記コマンドバッファに格納されているコマンドの群を、その格納順に取り出すために、当該コマンドの群のそれぞれが格納されている前記コマンドバッファの領域のアドレスを格納するアドレス部を含むエントリの群を備えた先入れ先出し手段と、
    不要となったコマンドが格納されている前記コマンドバッファの領域のアドレスをフリーアドレスとして保持するフリーアドレス設定手段とを具備し、
    前記先入れ先出し手段の前記エントリの群にそれぞれ含まれている前記アドレス部はリング状に接続されており、当該アドレス部は、当該アドレス部に格納されている第1のアドレスを、前記フリーアドレス設定手段に保持されている前記フリーアドレスまたは前段のアドレス部に格納されている第2のアドレスのいずれか一方に置換する置換手段を含み、
    前記処理手段は、前記先入れ先出し手段の前記エントリ群のそれぞれのアドレス部に格納されているアドレスをシーケンシャルに読み出して、その読み出されたアドレスに基づいて前記コマンドバッファにアクセスすることにより、当該読み出されたアドレスで指定される前記コマンドバッファ内の領域からコマンドを取り出し、当該取り出されたコマンドに応じて前記記憶部にアクセスする
    記憶装置。
JP2010166292A 2010-07-23 2010-07-23 コマンド管理装置及び同コマンド管理装置を備えた記憶装置 Expired - Fee Related JP4886887B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010166292A JP4886887B2 (ja) 2010-07-23 2010-07-23 コマンド管理装置及び同コマンド管理装置を備えた記憶装置
US13/077,559 US8473649B2 (en) 2010-07-23 2011-03-31 Command management device configured to store and manage received commands and storage apparatus with the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010166292A JP4886887B2 (ja) 2010-07-23 2010-07-23 コマンド管理装置及び同コマンド管理装置を備えた記憶装置

Publications (2)

Publication Number Publication Date
JP2012027718A true JP2012027718A (ja) 2012-02-09
JP4886887B2 JP4886887B2 (ja) 2012-02-29

Family

ID=45494493

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010166292A Expired - Fee Related JP4886887B2 (ja) 2010-07-23 2010-07-23 コマンド管理装置及び同コマンド管理装置を備えた記憶装置

Country Status (2)

Country Link
US (1) US8473649B2 (ja)
JP (1) JP4886887B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017162113A (ja) * 2016-03-08 2017-09-14 東芝メモリ株式会社 記憶装置

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9875039B2 (en) 2014-09-30 2018-01-23 Sandisk Technologies Llc Method and apparatus for wear-leveling non-volatile memory
JP7024448B2 (ja) * 2018-01-29 2022-02-24 トヨタ自動車株式会社 電動車両
US11586372B2 (en) 2021-07-01 2023-02-21 Samsung Electronics Co., Ltd. Use of copy location to selectively set or selectively clear bits of metadata during live migration

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000090042A (ja) * 1998-06-30 2000-03-31 Sun Microsyst Inc 空バッファを指し示すポインタを含む空きポインタfifoを使用してバッファを管理するシステムおよび方法
JP2004102867A (ja) * 2002-09-12 2004-04-02 Hitachi Ltd ハードウェア制御装置
JP2010027114A (ja) * 2008-07-16 2010-02-04 Sony Corp 情報処理装置および方法、並びにプログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2734581B2 (ja) 1988-12-13 1998-03-30 日本電気株式会社 入出力制御装置の制御方式
JPH02292929A (ja) 1989-05-08 1990-12-04 Fujitsu Ltd データメモリのアドレス制御方式
US5796944A (en) * 1995-07-12 1998-08-18 3Com Corporation Apparatus and method for processing data frames in an internetworking device
US7127549B2 (en) * 2004-02-04 2006-10-24 Sandisk Corporation Disk acceleration using first and second storage devices
KR100706808B1 (ko) * 2006-02-03 2007-04-12 삼성전자주식회사 쓰기 버퍼로서 동작하는 불 휘발성 메모리를 구비한 데이터저장 장치 및 그것의 블록 회수 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000090042A (ja) * 1998-06-30 2000-03-31 Sun Microsyst Inc 空バッファを指し示すポインタを含む空きポインタfifoを使用してバッファを管理するシステムおよび方法
JP2004102867A (ja) * 2002-09-12 2004-04-02 Hitachi Ltd ハードウェア制御装置
JP2010027114A (ja) * 2008-07-16 2010-02-04 Sony Corp 情報処理装置および方法、並びにプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017162113A (ja) * 2016-03-08 2017-09-14 東芝メモリ株式会社 記憶装置

Also Published As

Publication number Publication date
JP4886887B2 (ja) 2012-02-29
US20120023273A1 (en) 2012-01-26
US8473649B2 (en) 2013-06-25

Similar Documents

Publication Publication Date Title
TWI417722B (zh) 階層式不可改變的內容可定址的記憶體處理器
US9734059B2 (en) Methods and apparatus for data cache way prediction based on classification as stack data
EP3964967B1 (en) Cache memory and method of using same
JP2010530591A5 (ja)
KR20170097609A (ko) 압축된 데이터 백그라운드를 캐싱하는 장치, 시스템 및 방법
JP5842768B2 (ja) 重複除去装置、重複除去方法及び重複除去プログラム
JP4886887B2 (ja) コマンド管理装置及び同コマンド管理装置を備えた記憶装置
US10095442B2 (en) Memory device that changes execution order of commands
JP2012113691A (ja) データ処理装置、トレースユニット、および診断装置
US10896022B2 (en) Sorting using pipelined compare units
US8065496B2 (en) Method for updating information used for selecting candidate in LRU control
JP5664187B2 (ja) 相互接続装置、および、その制御方法
WO2024146076A1 (zh) 乱序处理器中队列的队列项选择方法及装置
JPWO2005029336A1 (ja) キャッシュメモリおよびキャッシュメモリ制御方法
JP2014186579A (ja) キャッシュメモリ、キャッシュメモリ制御装置、および、そのキャッシュメモリ制御方法
US8959278B2 (en) System and method for scalable movement and replication of data
US7457919B2 (en) Method for memory page management
JP2009199384A (ja) データ処理装置
US7376797B2 (en) Cache memory system and method using reference bits
JP2011248586A (ja) データ入出力装置、データ記憶方法及びプログラム
TWI749960B (zh) 資料處理裝置與其資料存取電路
JP2012118906A (ja) 相互接続装置、および、その制御方法
CN109690506A (zh) 存储器控制器、存储器系统、信息系统和存储器控制方法
JP5379075B2 (ja) データ入出力装置、データ記憶方法及びプログラム
US20220300424A1 (en) Memory system, control method, and memory controller

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: 20111115

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111209

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 4886887

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141216

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees