(57)【要約】      （修正有）【課題】利便性が高いメモリシステムを提供する。【解決手段】メモリシステムは、メモリコントローラと１４０−０、複数のプレーンを有するメモリチップと、当該メモリチップに対応したキューブロック１５０−０とを備える。キューブロックは、第１キュー１５１と、複数のプレーンに対応した複数の第２キュー１５４−０〜１５４−３とを備える。メモリコントローラは、第１キューにエンキューされたコマンドである第１コマンドがプレーン間で非同期にリードを実行するためのコマンドである第１リードコマンドに該当するか否かを判定する。第１コマンドが第１リードコマンドに該当すると判定された場合には、メモリコントローラは、第１コマンドを対応する第２キューに移す。メモリコントローラは、第１キューをコマンド送信元として選択するか、または、複数の第２キューをコマンド送信元として選択する。【選択図】図５
2020016954.tif 000002
【特許請求の範囲】
【請求項１】
チャネルと、
前記チャネルに接続された複数のメモリチップと、
それぞれは前記複数のメモリチップのうちの少なくとも１つのメモリチップに対応し、当該対応する少なくとも１つのメモリチップに送信されるコマンドを蓄積する複数のキューブロックと、
コマンド送信元を前記複数のキューブロック間で調停動作によって選択するメモリコントローラと、
を備え、
前記複数のメモリチップは、複数のプレーンを有する第１メモリチップを含み、
前記複数のキューブロックは、前記第１メモリチップに対応した第１キューブロックを含み、
前記第１キューブロックは、第１キューと、それぞれ前記複数のプレーンのうちの１つのプレーンに対応した複数の第２キューと、を備え、
前記メモリコントローラは、
前記第１キューにエンキューされたコマンドである第１コマンドがプレーン間で非同期にリードを実行するためのコマンドである第１リードコマンドに該当するか否かを判定し、前記第１コマンドが前記第１リードコマンドに該当すると判定された場合には前記第１コマンドを前記複数の第２キューのうちの前記第１コマンドが実行されるプレーンに対応する第２キューに移し、前記第１コマンドが前記第１リードコマンドに該当しないと判定された場合には前記第１コマンドを移さずに前記第１キューに残し、
前記第１キューブロックを前記コマンド送信元として選択した場合、さらに、前記第１キューを前記コマンド送信元として選択するか、または、前記複数の第２キューを、前記コマンド送信元として選択する、
メモリシステム。
【請求項２】
前記メモリコントローラは、前記第１キューまたは前記複数の第２キューの空き状況に応じて前記第１キューを前記コマンド送信元として選択するか前記複数の第２キューを前記コマンド送信元として選択するかを決定する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、前記複数の第２キューの何れかにコマンドが存在する場合には、前記複数の第２キューを前記コマンド送信元として選択し、前記複数の第２キューの何れにもコマンドが存在せず、かつ前記第１キューにコマンドが存在する場合には、前記第１キューを前記コマンド送信元として選択する、  請求項２に記載のメモリシステム。
【請求項４】
前記第１キューに１以上のコマンドがエンキューされた場合、当該１以上のコマンドのうちの前記第１キューの先頭に位置するコマンドが前記第１コマンドに該当する、
請求項３に記載のメモリシステム。
【請求項５】
前記第１キューは、第３キューと第４キューとを備え、
前記メモリコントローラは、
前記第１リードコマンドに該当しないコマンドである第３コマンドを前記第３キューに格納し、前記第１リードコマンドに該当するコマンドである第４コマンドを前記第４キューに格納し、
前記第４キューに格納された前記第４コマンドを前記複数の第２キューのうちの前記第４キューに格納された前記第４コマンドが実行されるプレーンに対応する第２キューに移す、
請求項１に記載のメモリシステム。
【請求項６】
前記メモリコントローラは、前記複数の第２キューのうちの何れかに前記第４コマンドが存在する場合には、前記複数の第２キューを前記コマンド送信元として選択する、
請求項５に記載のメモリシステム。
【請求項７】
前記メモリコントローラは、前記第１メモリチップが前記第３コマンドを実行中に前記複数の第２キューのうちの何れかに前記第４コマンドが格納された場合、前記第３コマンドの実行をサスペンドして前記複数の第２キューを前記コマンド送信元として選択する、
請求項５に記載のメモリシステム。
【請求項８】
前記メモリコントローラは、前記第１メモリチップがライトまたはイレースを実行中であるか否かを判定し、前記第１メモリチップがライトおよびイレースの何れも実行中でない場合に、前記第１キューを前記コマンド送信元として選択するか前記複数の第２キューを前記コマンド送信元として選択するかを決定する、
請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
従来、ＮＡＮＤ型のフラッシュメモリなどの半導体メモリが知られている。このような半導体メモリにおいては、１つのメモリチップが並列に動作可能な複数のプレーンに分割される場合がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−２６８９４２号公報
【特許文献２】特開２０１２−６８９３６号公報
【特許文献３】特開２０１３−２００６７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、利便性が高いメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、メモリシステムは、チャネルと、前記チャネルに接続された複数のメモリチップと、複数のキューブロックと、メモリコントローラとを備える。前記複数のキューブロックのそれぞれは、前記複数のメモリチップのうちの少なくとも１つのメモリチップに対応し、当該対応する少なくとも１つのメモリチップに送信されるコマンドを蓄積する。前記メモリコントローラは、コマンド送信元を前記複数のキューブロック間で調停動作によって選択する。前記複数のメモリチップは、複数のプレーンを有する第１メモリチップを含む。前記複数のキューブロックは、前記第１メモリチップに対応した第１キューブロックを含む。前記第１キューブロックは、第１キューと、それぞれ前記複数のプレーンのうちの１つのプレーンに対応した複数の第２キューと、を備える。前記メモリコントローラは、前記第１キューにエンキューされたコマンドである第１コマンドがプレーン間で非同期にリードを実行するためのコマンドである第１リードコマンドに該当するか否かを判定する。前記第１コマンドが前記第１リードコマンドに該当すると判定された場合には、前記メモリコントローラは、前記第１コマンドを前記複数の第２キューのうちの対応する第２キューに移す。前記第１コマンドが前記第１リードコマンドに該当しないと判定された場合には、前記メモリコントローラは、前記第１コマンドを移さずに前記第１キューに残す。前記メモリコントローラは、前記第１キューブロックを前記コマンド送信元として選択した場合、さらに、前記第１キューを前記コマンド送信元として選択するか、または、前記複数の第２キューを前記コマンド送信元として選択する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態のメモリシステムの構成の概略を示す図である。
【図２】図２は、第１の実施形態のメモリチップの構成の概略図である。
【図３】図３は、第１の実施形態の調停動作の概略を説明するための図である。
【図４】図４は、第１の実施形態のＣＰＵが実現する機能を説明するための図である。
【図５】図５は、第１の実施形態の調停部によって制御される第１の実施形態のＮＡＮＤコントローラの調停機構を示す概略図である。
【図６】図６は、第１の実施形態のメインキューに格納される種々のコマンドのデータ構造の一例を示す図である。
【図７】図７は、第１の実施形態のコマンドの移動の動作を説明するためのフローチャートである。
【図８】図８は、第１の実施形態のバンク調停の動作を説明するためのフローチャートである。
【図９】図９は、第１の実施形態のサブバンク調停の動作を説明するためのフローチャートである。
【図１０】図１０は、第２の実施形態のキューブロックの構成の概略を示す図である。
【図１１】図１１は、第３の実施形態のプライオリティキューに格納されるコマンドのデータ構造の一例を示す図である。
【図１２】図１２は、第３の実施形態のサブキューへのコマンドの移動の一例を説明するための図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムの構成を示す図である。メモリシステム１は、ホスト２と接続可能である。メモリシステム１とホスト２との間の通信路の規格は、特定の規格に限定されない。一例では、ＳＡＳ（Serial  Attached  SCSI）が採用され得る。
【０００９】
ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。メモリシステム１は、ホスト２からアクセス要求（リード要求やライト要求など）を受け付けることができる。
【００１０】
メモリシステム１は、メモリコントローラ１００と、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）２００と、を備えている。ＮＡＮＤメモリ２００は、複数のメモリチップ２１０によって構成される。なお、これらのメモリチップ２１０の種類は、ＮＡＮＤ型のフラッシュメモリに限定されない。
【００１１】
ＮＡＮＤメモリ２００は、複数のメモリチップ２１０として、１６個のメモリチップ２１０ａ〜２１０ｐを備える。ＮＡＮＤメモリ２００を構成する１６個のメモリチップ２１０は、それぞれ、４つのチャネル（ｃｈ．０〜ｃｈ．３）の何れかを介してメモリコントローラ１００に接続されている。
【００１２】
図１の例に従えば、メモリチップ２１０ａ〜２１０ｄは、チャネル＃０（ｃｈ．０）に共通に接続されている。メモリチップ２１０ｅ〜２１０ｈは、チャネル＃１（ｃｈ．１）に共通に接続されている。メモリチップ２１０ｉ〜２１０ｌは、チャネル＃２（ｃｈ．２）に共通に接続されている。メモリチップ２１０ｍ〜２１０ｐは、チャネル＃３（ｃｈ．３）に共通に接続されている。
【００１３】
各チャネルは、Ｉ／Ｏ信号線および制御信号線を含む、配線群によって構成される。Ｉ／Ｏ信号線は、例えば、データ、アドレス、およびコマンドを送受信するための信号線である。制御信号線は、例えば、ＷＥ（ライトイネーブル）信号、ＲＥ（リードイネーブル）信号、ＣＬＥ（コマンドラッチイネーブル）信号、ＡＬＥ（アドレスラッチイネーブル）信号、ＷＰ（ライトプロテクト）信号、ＣＥ（チップイネーブル）信号（もしくはＣＳ（チップセレクト）信号）等を送受信するための信号線である。
【００１４】
メモリコントローラ１００は、各チャネルを個別に制御することができる。メモリコントローラ１００は、複数のチャネルを同時に制御することによって、それぞれ接続されたチャネルが異なる複数のメモリチップ２１０を同時に動作させることができる。
【００１５】
さらに、ＮＡＮＤメモリ２００は、複数のバンクを備える。例えば、各チャネルに接続された４つのメモリチップ２１０は、複数のバンクのうちの何れかに含まれる。
【００１６】
図１の例に従えば、ＮＡＮＤメモリ２００は、複数のバンクの一例として、４つのバンク（バンク＃０〜＃３）を備える。そして、４つのメモリチップ２１０ａ、２１０ｅ、２１０ｉ、２１０ｍは、バンク＃０を構成する。また、４つのメモリチップ２１０ｂ、２１０ｆ、２１０ｊ、２１０ｎは、バンク＃１を構成する。また、４つのメモリチップ２１０ｃ、２１０ｇ、２１０ｋ、２１０ｏは、バンク＃２を構成する。また、４つのメモリチップ２１０ｄ、２１０ｈ、２１０ｌ、２１０ｐは、バンク＃３を構成する。つまり、本図の例では、１つのチャネルに接続される４つのメモリチップ２１０は、それぞれ異なるバンクに属する。
【００１７】
なお、１つのバンクは、１以上のプレーン（後述する）によって構成されてもよい。以降の説明では、１つのバンクは、１つのメモリチップ２１０によって構成されることとする。
【００１８】
メモリコントローラ１００は、同一のチャネルに接続された、それぞれ異なるバンクに含まれる複数のメモリチップを、効率良く動かすことが可能である。
【００１９】
例えば、メモリコントローラ１００は、バンク＃０に属するメモリチップ２１０にコマンドを送る。そして、当該メモリチップ２１０が当該コマンドに応じた動作を実行している最中に、メモリコントローラ１００は、バンク＃１に属するメモリチップ２１０に対してデータまたはコマンドの送受信を行う。これによって、バンク＃０に属するメモリチップ２１０と、バンク＃１に属するメモリチップ２１０とがチャネルを共有している場合であっても、これらのメモリチップ２１０を効率よく動作させることができる。このようにそれぞれ異なるバンクに含まれる複数のバンクを用いた手法は、バンクインターリーブと称され得る。
【００２０】
なお、メモリシステム１が備えるメモリチップ２１０の数は、１６に限定されない。また、メモリシステム１が備えるチャネルの数は、４に限定されない。また、メモリシステム１が備えるバンクの数は、４に限定されない。１つのＮＡＮＤコントローラ（後述する）１４０は、2つ以上のチャネルを制御するよう構成されてもよい。また、メモリコントローラ１００が備えるＣＰＵ１１０の数は、各チャネルにそれぞれ対応する複数のＮＡＮＤコントローラ１４０に対して１つに限定されない。
【００２１】
メモリコントローラ１００は、ＣＰＵ（Central  Processing  Unit）１１０と、ホストインタフェース（ホストＩ／Ｆ）１２０と、ＲＡＭ（Random  Access  Memory）１３０と、４つのＮＡＮＤコントローラ１４０（ＮＡＮＤコントローラ１４０−０〜１４０−３）と、を備える。メモリコントローラ１００は、例えばＳｏＣ（System-On-a-Chip）として構成され得る。メモリコントローラ１００は、複数のチップによって構成されてもよい。
【００２２】
ＲＡＭ１３０は、メモリコントローラ１００が制御を行う際のキャッシュ、バッファ、およびワーキングエリアとして機能するメモリである。例えば、ＲＡＭ１３０には、ホスト２から受信したデータであってＮＡＮＤメモリ２００に送られる前のデータが格納される。また、ＲＡＭ１３０には、ＮＡＮＤメモリ２００から読み出されたデータであってホスト２に送られる前のデータが格納される。
【００２３】
ＲＡＭ１３０を構成するメモリの種類は特定の種類のメモリに限定されない。例えば、ＲＡＭ１３０は、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＳＲＡＭ（Static  Random  Access  Memory）、またはこれらの組み合わせによって構成され得る。ＲＡＭ１３０は、メモリコントローラ１００の外部に具備されてもよい。
【００２４】
例えば、４つのＮＡＮＤコントローラ１４０は、それぞれ異なるチャネルを制御する。各ＮＡＮＤコントローラ１４０は、対応するチャネルを介して接続された４つのメモリチップ２１０に対し、コマンドの送信やデータの送受信を実行する。図１では、チャネル＃ｉを制御するＮＡＮＤコントローラ１４０を、ＮＡＮＤコントローラ１４０−ｉと表記している。ただし、ｉは０以上で３以下の整数である。
【００２５】
ホストＩ／Ｆ１２０は、ホスト２とメモリコントローラ１００との間の情報（アクセス要求、応答、データ）の送受信を制御する。例えば、ホストＩ／Ｆ１２０は、ホスト２が送信したアクセス要求を受け付ける。また、ホストＩ／Ｆ１２０は、ホスト２から受信したデータをＲＡＭ１３０に格納する。また、ホストＩ／Ｆ１２０は、ＮＡＮＤメモリ２００から読み出されてＲＡＭ１３０に格納されたデータをホスト２に送信する。
【００２６】
ＣＰＵ１１０は、予めメモリシステム１に内蔵されるプログラム（ファームウェアプログラム）に基づいて動作するプロセッサである。ＣＰＵ１１０は、ファームウェアプログラムに従って、コマンドの生成を含む各種機能を実現する。ＣＰＵ１１０が実現する各種機能については後述する。
【００２７】
次に、各メモリチップ２１０の構成を説明する。図２は、第１の実施形態のメモリチップ２１０の構成の概略図である。
【００２８】
メモリチップ２１０は、電源系回路２１１を備える。電源系回路２１１は、外部から供給された電力に基づいて、メモリチップ２１０が備える各要素を駆動するための電力を生成する。電源系回路２１１は、例えばチャージポンプを含む。
【００２９】
メモリチップ２１０は、さらに、４つのサブアレイ２１２（サブアレイ２１２−０〜２１２−３）に分割されたメモリセルアレイ２２０と、４つの周辺回路２１３（周辺回路２１３−０〜２１３−３）とを備える。なお、サブアレイ２１２の数は４つに限定されない。
【００３０】
各サブアレイ２１２は、４つの周辺回路２１３のうちの一つと対を構成している。サブアレイ２１２と周辺回路２１３との対は、プレーンと称され得る。各プレーンは、プレーン番号によって識別され得る。プレーン＃ｊと表記した場合、プレーン番号が「ｊ」であるプレーンを指すこととする。図２では、プレーン＃ｊが備える周辺回路２１３を周辺回路２１３−ｊと表記している。また、プレーン＃ｊが備えるサブアレイ２１２を、サブアレイ２１２−ｊと表記している。ただし、ｊは０以上で３以下の整数である。
【００３１】
周辺回路２１３は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ページバッファ等を含む。周辺回路２１３がプレーン毎に設けられていることにより、４つのプレーンのそれぞれは、チャネルの使用（コマンド、応答、データの送受信）のタイミングが重ならない限り、互いに独立にリードを実行することができる。つまり、複数のプレーンは、互いに非同期にリードを実行することができる。
【００３２】
また、複数のプレーンは互いに同期にリードを実行することができる。なお、複数のプレーンが一度にリードを実行する動作はマルチプレーンリードと称され得る。マルチプレーンリードに対し、各プレーンが独立にリードを実行する動作は、１つのプレーンを異なるタイミング、もしくは同じタイミングでリードを開始するシングルプレーンリードと称され得る動作である。
【００３３】
複数のプレーンのそれぞれは、互いに非同期にリードを実行することができるので、一つのプレーンがリードを実行している際に他のプレーンに対するリードを要するリード要求を受信した場合に、実行中のリードの完了を待つこと無く当該他のプレーンがリードを開始できる。よって、リードの性能が向上する。
【００３４】
以降、１つのプレーンが他のプレーンとは非同期に実行するリードを、非同期リードと表記する。また、非同期リードをメモリチップ２１０に実行させるためのコマンドを、非同期リードコマンドと表記する。
【００３５】
上述したように、各プレーンは非同期にリードを実行することができる。これに対し、ライトやイレースに関しては、各プレーンは非同期に動作できない。
【００３６】
より詳しくは、各プレーンは、他の何れかのプレーンがリード、ライト、およびイレースの何れかを実行している最中に、ライトやイレースを開始することはできない。ただし、各プレーンは、他のプレーンと同じタイミングでライトやイレースを開始することができる。複数のプレーンが一度にライトを実行する動作は、マルチプレーンライトと称され得る。
【００３７】
多くの場合、ライトの性能よりもリードの性能が優先される。よって、リードに関しては、各プレーンが、非同期にリードを実行できることで、リードの性能を向上させている。
【００３８】
各プレーンが非同期にライトやイレースを実行できるためには、周辺回路２１３だけでなく、電源系回路２１１をプレーン毎に設ける必要がある。電源系回路２１１をプレーン毎に設けると、メモリチップ２１０の面積が複数のメモリチップ２１０の合計面積に近づくため、１つのメモリチップ２１０を複数のプレーンに分割することのメリットが失われる。
【００３９】
第１の実施形態では、各プレーンが、非同期リードを実行できるが、独立に（非同期に）ライトを実行できないように構成されることで、高いリード性能を得るために最適なチップ面積で実現している。なお、ライトまたはイレースに関しても各プレーンは独立に（非同期に）動作可能に構成されてもよい。
【００４０】
前述したように、１つのチャネルには、それぞれ異なるバンクに含まれる４つのメモリチップ２１０が接続されている。そして、各メモリチップ２１０は、リード、ライト、およびイレースのうちの、リードのみ非同期に実行可能な４つのプレーンを有している。しかしながら、メモリシステム１は、１つのチャネルを介して複数のメモリチップ２１０に対して同時にコマンド、応答、データの送受信を実行することができない。よって、チャネル毎に、アクセス先のメモリチップ２１０を選択する調停動作が必要となる。
【００４１】
図３は、第１の実施形態の調停動作の概略を説明するための図である。
【００４２】
図３に示されるように、メモリコントローラ１００は、バンク＃０、バンク＃１、バンク＃２、バンク＃３のそれぞれを、この順番で、アクセス先として設定（選択）する。メモリコントローラ１００は、バンク＃３の次に、バンク＃０をアクセス先として設定（選択）する。メモリコントローラ１００は、アクセス先として設定されたバンクにコマンドを送った後、当該バンクがそのコマンドに対応した動作を実行中に、次のバンクにアクセス先の設定を切り替えることができる。
【００４３】
このように、バンク単位でアクセス先を調停（設定）することを、バンク調停と表記する。なお、本実施形態では、１つのチャネルに着目した場合、各バンクは、１つのメモリチップ２１０によって構成される。以降の説明では、バンクはメモリチップ２１０と読み替えることが可能である。
【００４４】
メモリコントローラ１００は、バンク調停をロックすることができる。バンク調停をロックするとは、アクセス先を１つのバンクに設定し、次のバンクにアクセス先を切り替えることができないようにすることである。メモリコントローラ１００は、ロックを解除した後に、次のバンクにアクセス先の設定を切り替えることができる。
また、例えばバンク調停のロックは、弱めのロック機能と、強めのロック機能を備えることもある。弱めのロック機能によりロックされたバンクに次の実行コマンドが準備できていない場合、自動的にロックが解除され得る。強めのロック機能では、次の実行コマンドが準備できていない場合でも自動的にはロックが解除されない。強めのロック機能によるロックは、メモリコントローラ１００によって解除される。
【００４５】
メモリコントローラ１００は、さらに、１つのバンク（図３の例ではバンク＃０）をアクセス先として選択した場合、そのバンクが有する４つのプレーンのそれぞれを順次、アクセス先として設定することができる。このように、プレーン単位でアクセス先を調停することを、サブバンク調停と表記する。メモリコントローラ１００は、非同期リードコマンドを送信する場合には、サブバンク調停を実行し、非同期リードコマンドを除く他のコマンドを送信する場合には、サブバンク調停を実行しない。メモリコントローラ１００は、サブバンク調停をロックしたり、サブバンク調停のロックを解除したりしてもよい。
【００４６】
なお、サブバンク調停をロックするとは、サブバンク調停が１つのバンク内で繰り返されるように設定することである。メモリコントローラ１００は、サブバンク調停のロックを解除することで、１つのバンク内でのサブバンク調停を終了することが可能となる。
【００４７】
なお、バンク＃０についてサブバンク調停が実行される例を説明したが、メモリコントローラ１００は、バンク＃０だけでなく、他のバンクに対してもサブバンク調停を実行し得ることは言うまでもない。
【００４８】
次に、ＣＰＵ１１０がファームウェアプログラムに基づいて実現する各種機能について説明する。図４は、第１の実施形態のＣＰＵ１１０が実現する機能を説明するための図である。本図に示されるように、ＣＰＵ１１０は、コマンド生成部１１１および調停部１１２として機能する。
【００４９】
コマンド生成部１１１は、ホスト２から受信したアクセス要求に応じてメモリチップ２１０に対するコマンドを生成する。コマンド生成部１１１は、ライトコマンド、リードコマンド、およびイレースコマンドを生成することができる。リードコマンドは、非同期リードコマンドを含む。コマンド生成部１１１は、生成したコマンドを対応するＮＡＮＤコントローラ１４０（宛て先のメモリチップ２１０が接続されたチャネルに対応したＮＡＮＤコントローラ１４０）に送信する。つまり、コマンド生成部１１１は、種々のコマンドを生成し、生成したこれらのコマンドを４つのＮＡＮＤコントローラ１４０に分配することができる。
【００５０】
なお、ここではＣＰＵ１１０にて各種コマンドが生成されることとした。各種コマンドの生成元はＣＰＵ１１０でなくてもよい。例えば、ＣＰＵ１１０は各ＮＡＮＤコントローラ１４０にリード、ライト、イレースなどの処理を指示し、各ＮＡＮＤコントローラ１４０が、指示された処理を実現するためのコマンドを生成してもよい。
【００５１】
調停部１１２は、バンク調停およびサブバンク調停を実行する。各ＮＡＮＤコントローラ１４０は、図５に例示されるように、サブバンク調停機構（アービタ）１５５と、バンク調停機構（アービタ）１６０と、マルチプレクサ１５６とを備えており、調停部１１２は、これらの回路を制御することによって、バンク調停およびサブバンク調停を実現する。
【００５２】
次に、各ＮＡＮＤコントローラ１４０の構成とともに調停部１１２のバンク調停およびサブバンク調停を実現する機能を説明する。図５は、調停部１１２によって制御される第１の実施形態のＮＡＮＤコントローラ１４０の調停機構を示す概略図である。４つのＮＡＮＤコントローラ１４０は、それぞれ同一の構成を有する。ここでは、４つのＮＡＮＤコントローラ１４０の代表として、チャネル＃０を制御するＮＡＮＤコントローラ１４０−０について説明する。
【００５３】
図５に示されるように、ＮＡＮＤコントローラ１４０−０は、４つのバンク（バンク＃０〜バンク＃３）に対応して、４つのキューブロック１５０（キューブロック１５０−０〜１５０−３）を備える。換言すると、各キューブロック１５０は、４つのバンク（バンク＃０〜バンク＃３）のうちの１つと１対１に対応する。バンク＃ｋに対応したキューブロック１５０を、キューブロック１５０−ｋと表記する。なお、ｋは０以上で３以下の整数である。４つのキューブロック１５０は同一の構成を有するので、本図では、バンク＃０に対応したキューブロック１５０−０のみについて詳細な構成を図示している。
【００５４】
各キューブロック１５０は、コマンド生成部１１１から分配された、対応するバンクを宛て先としたコマンドを受信し、そのコマンドを送信するまで内部に設けられたキュー（メインキュー１５１または複数のサブキュー１５４）に保持する。
【００５５】
また、ＮＡＮＤコントローラ１４０−０は、バンク調停機構１６０を備える。バンク調停機構１６０は、調停部１１２からの選択信号に基づいて、４つのキューブロック１５０から１つを選択する。そして、バンク調停機構１６０は、選択したキューブロック１５０がコマンドを送信することを可能にする。この動作によって、４つのバンク（バンク＃０〜バンク＃３）のうちの１つがアクセス先として設定（選択）される。バンク調停機構１６０が、調停部１１２からの選択信号に基づいて４つのキューブロック１５０を順次選択することによって、バンク調停の動作が実現する。
【００５６】
キューブロック１５０−０は、メインキュー１５１、デマルチプレクサ１５２、デマルチプレクサ１５３、サブバンク調停機構１５５、およびマルチプレクサ１５６を備える。
【００５７】
メインキュー１５１は、例えばＦＩＦＯ（First  In  First  Out）構造を有するメモリである。メインキュー１５１は、コマンド生成部１１１から分配されたコマンドを受ける。
【００５８】
さらに、キューブロック１５０は、４つのプレーン（プレーン＃０〜＃３）に対応して、４つのサブキュー１５４（サブキュー１５４−０〜１５４−３）を備える。プレーン＃ｍに対応したサブキュー１５４を、サブキュー１５４−ｍと表記する。なお、ｍは０以上で３以下の整数である。各サブキュー１５４は、例えばＦＩＦＯ構造を有するメモリである。
【００５９】
デマルチプレクサ１５２とデマルチプレクサ１５３とは、メインキュー１５１に格納されたコマンドが非同期リードコマンドに該当するか否かを判定し、当該コマンドが非同期リードコマンドに該当する場合には、対応するサブキュー１５４に当該コマンドを移し、当該コマンドが非同期リードコマンドに該当しない場合には、当該コマンドをメインキュー１５１から移さないでメインキュー１５１に残す、ハードウェア回路の一例である。
【００６０】
より詳しくは、デマルチプレクサ１５２は、２つの出力端子を有する。当該２つの出力端子のうちの一方は、マルチプレクサ１５６の１つの入力端子に接続されている。また、当該２つの出力端子のうちの他方は、デマルチプレクサ１５３の入力端子に接続されている。デマルチプレクサ１５３は、４つの出力端子を備え、当該４つの出力端子のそれぞれは、４つのサブキュー１５４のうちの１つと１対１に接続されている。
【００６１】
そして、例えば、デマルチプレクサ１５２は、メインキュー１５１に格納されたコマンドに付加情報が付加されているか否かに応じて出力端子を選択する。
【００６２】
図６は、第１の実施形態のメインキュー１５１に格納される種々のコマンドのデータ構造の一例を示す図である。本図に例示されるように、非同期リードコマンド３００ａ〜３００ｄには、あて先のプレーンを示すプレーン番号が付加情報４００ａ〜４００ｄとして付されている。また、非同期リードコマンドに該当しない通常のリードコマンド３１０には、付加情報が付加されていない。また、ライトコマンド３２０には、付加情報が付加されていない。
【００６３】
このように、第１の実施形態では、非同期リードコマンドには、付加情報が付されており、非同期リードコマンド以外のコマンドには、付加情報が付されていない。付加情報の有無によって、コマンドが非同期リードコマンドに該当するか否かが判定可能となっている。
【００６４】
図５に説明を戻す。デマルチプレクサ１５２は、キューの先頭に格納されたコマンドに付加情報が付されている場合には、デマルチプレクサ１５３に接続された出力端子を選択する。この動作によって、当該コマンド（即ち非同期リードコマンド）は、メインキュー１５１からデキューされて、当該選択された出力端子を介してデマルチプレクサ１５３に入力される。
【００６５】
デマルチプレクサ１５３は、非同期リードコマンドが入力されると、付加情報として付されたプレーン番号に基づいて、あて先のプレーンに対応するサブキュー１５４に接続された出力端子を選択する。この動作によって、非同期リードコマンドは、宛て先のプレーンに対応するサブキュー１５４に入力される。
【００６６】
デマルチプレクサ１５２は、メインキュー１５１の先頭に格納されたコマンドに付加情報が付されていない場合には、マルチプレクサ１５６に接続された出力端子を選択する。
【００６７】
なお、付加情報は、プレーン番号だけに限定されない。リードコマンドは、非同期リードコマンドに該当するか否かを示すフラグが付加情報として付され、デマルチプレクサ１５２は、当該フラグに基づいて出力端子を選択してもよい。また、デマルチプレクサ１５３は、非同期リードコマンドに含まれるアドレス情報に基づいて出力端子を選択してもよい。
【００６８】
また、デマルチプレクサ１５３は、付加情報を削除して非同期リードコマンドをサブキュー１５４に入力してもよいし、付加情報を削除しないで非同期リードコマンドをサブキュー１５４に入力してもよい。
【００６９】
サブバンク調停機構１５５は、４つの入力端子を備え、当該４つの入力端子のそれぞれには、４つのサブキュー１５４のうちの１つと１対１に接続されている。サブバンク調停機構１５５の出力端子は、マルチプレクサ１５６の入力端子に接続されている。
【００７０】
サブバンク調停機構１５５は、調停部１１２からの選択信号に基づいて４つの入力端子から１つを選択する。これによって、選択された入力端子に接続されたサブキュー１５４からコマンドをデキューすることが可能となる。
【００７１】
マルチプレクサ１５６は、２つの入力端子を備える。当該２つの入力端子のうちの一方には、デマルチプレクサ１５２の出力端子が接続されている。当該２つの入力端子のうちの他方は、サブバンク調停機構１５５の出力端子が接続されている。
【００７２】
マルチプレクサ１５６は、調停部１１２からの選択信号に基づいて２つの入力端子のうちの１つを選択する。デマルチプレクサ１５２の出力端子に接続された入力端子が選択された場合には、メインキュー１５１からコマンドを送信することが可能となる。サブバンク調停機構１５５に接続された入力端子が選択された場合には、サブバンク調停機構１５５によって選択されたサブキュー１５４からコマンドを送信することが可能となる。
【００７３】
既に述べたように、調停部１１２は、サブバンク調停機構１５５、バンク調停機構１６０、およびマルチプレクサ１５６に対して選択信号を供給する。調停部１１２は、選択信号によってバンク調停機構１６０の入力端子を切り替えることによって、バンク調停を実現する。
【００７４】
さらに、調停部１１２は、選択信号によってマルチプレクサ１５６の入力端子を切り替えることによって、サブバンク調停の実行／非実行を切り替えることができる。具体的には、調停部１１２は、マルチプレクサ１５６にデマルチプレクサ１５２に接続された入力端子を選択させることで、サブキュー１５４−０〜１５４−３に格納されたコマンドが出力されなくなるので、サブバンク調停を実行しないようにすることができる。
【００７５】
また、調停部１１２は、マルチプレクサ１５６にサブバンク調停機構１５５に接続された入力端子を選択させることで、サブバンク調停を実行可能とすることができる。即ち、調停部１１２は、サブバンク調停を実行可能とした場合においては、選択信号によってサブバンク調停機構１５５の入力端子を切り替えることによって、サブバンク調停を実現する。
【００７６】
サブバンク調停の実行／非実行の決定方法は、任意に設計可能である。ここでは一例として、調停部１１２は、メインキュー１５１およびサブキュー１５４の空き状況に応じてサブバンク調停の実行／非実行を決定する。
【００７７】
より具体的には、調停部１１２は、複数のサブキュー１５４の何れかにコマンドが格納されている場合には、サブバンク調停を実行することを決定する。調停部１１２は、コマンドが格納されたサブキュー１５４がなく、メインキュー１５１にコマンドが格納されている場合には、サブバンク調停を実行しないことを決定する。
【００７８】
続いて、第１の実施形態のメモリシステムの動作を説明する。
【００７９】
図７は、第１の実施形態のコマンドの移動の動作を説明するためのフローチャートである。この動作は、メインキュー１５１の先頭に格納されたコマンドに対して実行される。
【００８０】
メインキュー１５１の先頭にコマンドが格納されている場合、デマルチプレクサ１５２は、そのコマンドの付加情報に応じて出力端子を切り替える。そのコマンドに付加情報が付加されている場合（Ｓ１０１、Ｙｅｓ）、即ちそのコマンドが非同期リードコマンドに該当する場合、デマルチプレクサ１５２は、デマルチプレクサ１５３に接続された出力端子を選択する（Ｓ１０２）。
【００８１】
続いて、デマルチプレクサ１５３は、そのコマンドの付加情報であるプレーン番号に基づいて、そのコマンドのあて先のプレーンに応じたサブキュー１５４に接続された出力端子を選択する（Ｓ１０３）。これによって、そのコマンドは、メインキュー１５１からデマルチプレクサ１５２およびデマルチプレクサ１５３を経由して、そのコマンドのあて先のプレーンに応じたサブキュー１５４に移動する（Ｓ１０４）。
【００８２】
メインキュー１５１の先頭のコマンドに付加情報が付加されていない場合（Ｓ１０１、Ｎｏ）、即ちそのコマンドが非同期リードコマンドに該当しない場合、デマルチプレクサ１５２は、マルチプレクサ１５６に接続された出力端子を選択する（Ｓ１０５）。これにより、そのコマンドがメインキュー１５１からあて先のメモリチップ２１０に送信されるまで、メインキュー１５１に残される。
【００８３】
Ｓ１０４またはＳ１０５の処理によって、コマンドの移動の動作が終了する。
【００８４】
図８は、第１の実施形態のバンク調停の動作を説明するためのフローチャートである。
【００８５】
まず、調停部１１２は、バンク＃０に対応するキューブロック１５０−０を選択する（Ｓ２０１）。なお、キューブロック１５０を選択するとは、調停部１１２がバンク調停機構１６０にそのキューブロック１５０に接続された入力端子を選択する選択信号を送ることである。
【００８６】
キューブロック１５０−０は、自身が有するキュー（メインキュー１５１または何れかのサブキュー１５４）から１つのコマンドをＮＡＮＤメモリ２００に送信する（Ｓ２０２）。コマンドの送信は、後述するＳ３０５、Ｓ３０７、Ｓ３０９、Ｓ３１１、またはＳ３１５によって実行される。なお、何れのキューにもコマンドが格納されていない場合にはＳ２０２の処理はスキップされる。
【００８７】
Ｓ２０２の処理の後、調停部１１２は、バンク調停がロックされているか否かを判定する（Ｓ２０３）。バンク調停のロック／ロック解除は、任意の回路によって任意の方法で実行され得る。
【００８８】
バンク調停がロックされている場合（Ｓ２０３、Ｙｅｓ）、Ｓ２０２の処理が再び実行される。
【００８９】
バンク調停がロックされていない場合（Ｓ２０３、Ｎｏ）、調停部１１２は、バンク＃１に対応するキューブロック１５０−１を選択する（Ｓ２０４）。
【００９０】
キューブロック１５０−１は、自身が有するキュー（メインキュー１５１または何れかのサブキュー１５４）から１つのコマンドをＮＡＮＤメモリ２００に送信する（Ｓ２０５）。何れのキューにもコマンドが格納されていない場合にはＳ２０５の処理はスキップされる。
【００９１】
続いて、調停部１１２は、バンク調停がロックされているか否かを判定する（Ｓ２０６）。バンク調停がロックされている場合（Ｓ２０６、Ｙｅｓ）、Ｓ２０５の処理が再び実行される。
【００９２】
バンク調停がロックされていない場合（Ｓ２０６、Ｎｏ）、調停部１１２は、バンク＃２に対応するキューブロック１５０−２を選択する（Ｓ２０７）。
【００９３】
キューブロック１５０−２は、自身が有するキュー（メインキュー１５１または何れかのサブキュー１５４）から１つのコマンドをＮＡＮＤメモリ２００に送信する（Ｓ２０８）。何れのキューにもコマンドが格納されていない場合にはＳ２０８の処理はスキップされる。
【００９４】
続いて、調停部１１２は、バンク調停がロックされているか否かを判定する（Ｓ２０９）。バンク調停がロックされている場合（Ｓ２０９、Ｙｅｓ）、Ｓ２０８の処理が再び実行される。
【００９５】
バンク調停がロックされていない場合（Ｓ２０９、Ｎｏ）、調停部１１２は、バンク＃３に対応するキューブロック１５０−３を選択する（Ｓ２１０）。
【００９６】
キューブロック１５０−３は、自身が有するキュー（メインキュー１５１または何れかのサブキュー１５４）から１つのコマンドをＮＡＮＤメモリ２００に送信する（Ｓ２１１）。何れのキューにもコマンドが格納されていない場合にはＳ２１１の処理はスキップされる。
【００９７】
続いて、調停部１１２は、バンク調停がロックされているか否かを判定する（Ｓ２１２）。バンク調停がロックされている場合（Ｓ２１２、Ｙｅｓ）、Ｓ２１１の処理が再び実行される。
【００９８】
バンク調停がロックされていない場合（Ｓ２１２、Ｎｏ）、調停部１１２は、バンク＃０に対応するキューブロック１５０−１を再び選択する（Ｓ２０１）。
【００９９】
このように、調停部１１２は、各キューブロック１５０を順番に選択することによって、各バンクが順番にアクセス先（コマンド送信先）として選択される。アクセス先として選択されたバンクに対応したキューブロック１５０は、１つのコマンドを送信することができる。バンク調停がロックされている場合には、キューブロック１５０は、バンク調停のロックが解除されるまで、コマンドを複数回送信することができる。
【０１００】
図９は、第１の実施形態のサブバンク調停の動作を説明するためのフローチャートである。バンク調停によってアクセス先として選択されたキューブロック１５０では、本図に示す処理が実行される。
【０１０１】
調停部１１２は、アクセス先のメモリチップ２１０がライトまたはイレースを実行中であるか否かを判定する（Ｓ３０１）。アクセス先のメモリチップ２１０がライトまたはイレースを実行中である場合（Ｓ３０１、Ｙｅｓ）、後続の処理の開始が待たされる。アクセス先のメモリチップ２１０がライトおよびイレースの何れも実行中ではない場合（Ｓ３０１、Ｎｏ）、調停部１１２は、何れかのサブキュー１５４にコマンドが格納されているか否かを判定する（Ｓ３０２）。何れかのサブキュー１５４にコマンドが格納されている場合（Ｓ３０２、Ｙｅｓ）、調停部１１２は、サブバンク調停を実行する、と決定する。
【０１０２】
つまり、調停部１１２は、マルチプレクサ１５６の選択信号を制御することによって、マルチプレクサ１５６の入力端子のうちのサブバンク調停機構１５５に接続された入力端子を選択する（Ｓ３０３）。
【０１０３】
続いて、調停部１１２は、サブバンク調停機構１５５の選択信号を制御することによって、サブバンク調停機構１５５の入力端子のうちのプレーン＃０に対応したサブキュー１５４に接続された入力端子を選択する。これによって、コマンドの送信元として、プレーン＃０に対応したサブキュー１５４−０が選択される（Ｓ３０４）。
【０１０４】
Ｓ３０４の処理の後、キューブロック１５０は、サブキュー１５４−０の先頭に格納されたコマンドを、サブバンク調停機構１５５、マルチプレクサ１５６、およびバンク調停機構１６０を介してあて先のメモリチップ２１０に送信する（Ｓ３０５）。サブキュー１５４−０にコマンドが格納されていない場合には、Ｓ３０５の処理はスキップされる。
【０１０５】
続いて、調停部１１２は、サブバンク調停機構１５５の選択信号を制御することによって、サブバンク調停機構１５５の入力端子のうちのプレーン＃１に対応したサブキュー１５４−１に接続された入力端子を選択する。これによって、コマンドの送信元として、サブキュー１５４−１が選択される（Ｓ３０６）。
【０１０６】
Ｓ３０６の処理の後、キューブロック１５０は、サブキュー１５４−１の先頭に格納されたコマンドを、サブバンク調停機構１５５、マルチプレクサ１５６、およびバンク調停機構１６０を介してあて先のメモリチップ２１０に送信する（Ｓ３０７）。サブキュー１５４−１にコマンドが格納されていない場合には、Ｓ３０７の処理はスキップされる。
【０１０７】
続いて、調停部１１２は、サブバンク調停機構１５５の選択信号を制御することによって、サブバンク調停機構１５５の入力端子のうちのプレーン＃２に対応したサブキュー１５４−２に接続された入力端子を選択する。これによって、コマンドの送信元として、サブキュー１５４−２が選択される（Ｓ３０８）。
【０１０８】
Ｓ３０８の処理の後、キューブロック１５０は、サブキュー１５４−２の先頭に格納されたコマンドを、サブバンク調停機構１５５、マルチプレクサ１５６、およびバンク調停機構１６０を介してあて先のメモリチップ２１０に送信する（Ｓ３０９）。サブキュー１５４−２にコマンドが格納されていない場合には、Ｓ３０９の処理はスキップされる。
【０１０９】
続いて、調停部１１２は、サブバンク調停機構１５５の選択信号を制御することによって、サブバンク調停機構１５５の入力端子のうちのプレーン＃３に対応したサブキュー１５４−３に接続された入力端子を選択する。これによって、コマンドの送信元として、サブキュー１５４−３が選択される（Ｓ３１０）。
【０１１０】
Ｓ３１０の処理の後、キューブロック１５０は、サブキュー１５４−３の先頭に格納されたコマンドを、サブバンク調停機構１５５、マルチプレクサ１５６、およびバンク調停機構１６０を介してあて先のメモリチップ２１０に送信する（Ｓ３１１）。サブキュー１５４−３にコマンドが格納されていない場合には、Ｓ３１１の処理はスキップされる。
【０１１１】
Ｓ３１１の処理の後、調停部１１２は、サブバンク調停がロックされているか否かを判定する（Ｓ３１２）。なお、サブバンク調停のロック／ロック解除は、任意のタイミングで任意の回路によって実行され得る。
【０１１２】
サブバンク調停がロックされている場合（Ｓ３１２、Ｙｅｓ）、調停部１１２は、Ｓ３０２の処理を再び実行する。
【０１１３】
サブバンク調停がロックされていない場合（Ｓ３１２、Ｎｏ）、調停部１１２は、メインキュー１５１にコマンドが格納されているか否かを判定する（Ｓ３１３）。
【０１１４】
メインキュー１５１にコマンドが格納されていない場合（Ｓ３１３、Ｎｏ）、動作が終了する。
【０１１５】
メインキュー１５１にコマンドが格納されている場合（Ｓ３１３、Ｙｅｓ）、調停部１１２は、サブバンク調停を実行しないことに決定する。つまり、調停部１１２は、マルチプレクサ１５６の選択信号を制御することによって、マルチプレクサ１５６の入力端子のうちのデマルチプレクサ１５２に接続された入力端子を選択する。これによって、コマンドの送信元として、サブキュー１５４ではなくメインキュー１５１が選択される（Ｓ３１４）。
【０１１６】
Ｓ３１４の処理の後、キューブロック１５０は、メインキュー１５１の先頭に格納されたコマンドを、デマルチプレクサ１５２、マルチプレクサ１５６、およびバンク調停機構１６０を介してあて先のメモリチップ２１０に送信し（Ｓ３１５）、動作が終了する。
【０１１７】
上記のように構成された第１の実施形態の調停動作による調停の具体例を説明する。例えばバンク＃０〜＃３のそれぞれに対応するメインキュー１５１と、バンク＃０の４つのプレーンのそれぞれに対応するサブキュー１５４にコマンドが格納されているケースを考える。
【０１１８】
そのケースにおいては、第１の実施形態の調停動作によれば、バンク＃０のサブキュー１５４−０、バンク＃０のサブキュー１５４−１、バンク＃０のサブキュー１５４−２、バンク＃０のサブキュー１５４−３、バンク＃０のメインキュー１５１、バンク＃１のメインキュー１５１、バンク＃２のメインキュー１５１、バンク＃３のメインキュー１５１、の順番でコマンド送信元のキューが選択される。
【０１１９】
このように、非同期リードコマンドは、プレーン毎に設けられたサブキュー１５４に自動的に分配される。調停部１１２は、サブバンク調停によって各サブキュー１５４を順次、コマンド送信元として選択する。各サブキュー１５４に分配されたコマンドは、当該サブキュー１５４がコマンド送信元として選択されたタイミングで送信される。各サブキュー１５４に分配されたコマンドは、他のサブキュー１５４から送信されたコマンドの実行状況に関係なく送信され、実行されるので、非同期リードが実現する。
【０１２０】
前述したように、各プレーンは、ライトを非同期に実行することができない。各プレーンは、リード、ライト、およびイレースの何れかを実行中のプレーンがないときにライトを実行できるか、またはマルチプレーンライトを実行できる。
【０１２１】
よって、仮にライトコマンドがサブキュー１５４に自動的に分配されるようにメモリシステムが構成された場合、キューブロック１５０は、各プレーンのコマンドの実行状況を監視し、サブキュー１５４に分配されたライトコマンドを、何れのプレーンもコマンドを実行していないタイミングで送信する必要が生じる。つまり、各サブキュー１５４に分配されたコマンドの送信タイミングの制御が複雑化する。さらに、各サブキュー１５４に分配されたコマンドが非同期リードコマンドであるかライトコマンドであるかに応じてコマンドの送信タイミングの制御の実行／非実行を切り替えることが必要となる。
【０１２２】
さらに別の例として、仮に複数のプレーンに対応した複数のサブキュー１５４が具備されず、非同期リードコマンドとライトコマンドとがメインキュー１５１からあて先のメモリチップ２１０に供給されるようにメモリシステムが構成された場合、プレーン単位の制御が困難になる。
【０１２３】
第１の実施形態では、ライトコマンドは、メインキュー１５１に残され、メインキュー１５１から順次送信される。キューブロック１５０は、メインキュー１５１に残されたライトコマンドを、あて先のバンクが何れのコマンドも実行していないタイミングで送信すればよく、プレーン毎のコマンドの実行状況に応じたタイミング制御やコマンドの判別は不要である。
【０１２４】
よって、第１の実施形態によれば、簡単な仕組みでライトと非同期リードとを実行することが可能となる。
【０１２５】
なお、メモリチップ２１０のコマンドの実行状況は、任意の方法で確認され得る。例えば、ＮＡＮＤコントローラ１４０は、ステータスリードコマンドを送信してメモリチップ２１０からステータス情報を取得することによって、そのメモリチップ２１０のコマンドの実行状況を取得してもよい。
【０１２６】
以上述べたように、第１の実施形態によれば、キューブロック１５０は、メインキュー１５１とそれぞれ１つのプレーンに対応した複数のサブキュー１５４（サブキュー１５４−０〜１５４−３）とを備える。デマルチプレクサ１５２およびデマルチプレクサ１５３は、メインキュー１５１に格納（エンキュー）されたコマンドが非同期リードコマンドであるか否かを判定する。デマルチプレクサ１５２およびデマルチプレクサ１５３は、当該コマンドが非同期リードコマンドに該当すると判定された場合には当該コマンドをメインキュー１５１から対応するサブキュー１５４に移し、当該コマンドが非同期リードコマンドに該当しないと判定された場合には当該コマンドをメインキュー１５１に残す。メモリコントローラ１００は、バンク調停によってあるバンクに対応したキューブロック１５０をコマンド送信元として選択した場合、メインキュー１５１をコマンド送信元として選択するか、または、複数のサブキュー１５４をコマンド送信元として選択する。
【０１２７】
よって、簡単な仕組みでライトと非同期リードとを実行することが可能となる。つまり、利便性が高いメモリシステムを得ることが可能となる。
【０１２８】
なお、調停部１１２は、何れかのサブキュー１５４にコマンドが格納されている場合には、複数のサブキュー１５４をコマンド送信元として選択し、何れのサブキュー１５４にもコマンドが格納されておらず、かつメインキュー１５１にコマンドが格納されている場合には、メインキュー１５１をコマンド送信元として選択した。コマンド送信元の選択方法はこれに限定されない。
【０１２９】
調停部１１２は、メインキュー１５１または複数のサブキュー１５４の空き状況に応じて、メインキュー１５１をコマンド送信元として選択するか複数のサブキュー１５４をコマンド送信元として選択するかを決定してもよい。
【０１３０】
一例では、調停部１１２は、メインキュー１５１にコマンドが格納されている場合には、メインキュー１５１をコマンド送信元として選択し、メインキュー１５１にコマンドが格納されていない場合には、複数のサブキュー１５４をコマンド送信元として選択してもよい。
【０１３１】
別の例では、調停部１１２は、複数のサブキュー１５４の何れかにコマンドが格納されている場合には、複数のサブキュー１５４をコマンド送信元として選択し、コマンドが格納されたサブキュー１５４がない場合には、メインキュー１５１をコマンド送信元として選択してもよい。
【０１３２】
さらに、調停部１１２は、各キュー１５１、１５４の空き状況以外の要因に基づいてコマンド送信元を選択してもよい。
【０１３３】
例えば、調停部１１２は、メインキュー１５１にエンキューされた各コマンドは、メインキュー１５１にエンキューされた順番でＮＡＮＤコントローラ１４０から送信されるように、メインキュー１５１および複数のサブキュー１５４の間でコマンド送信元を選択してもよい。
【０１３４】
また、第１の実施形態では、デマルチプレクサ１５２およびデマルチプレクサ１５３は、メインキュー１５１の先頭に格納されたコマンドについてのみ、サブキュー１５４への移動の実行／非実行を決定する。これによって、キューブロック１５０は、メインキュー１５１に複数のコマンドがエンキューされた場合、当該複数のコマンドを、エンキューされた順番と同じ順番でメモリチップ２１０に送信することが可能である。
【０１３５】
例えば、複数の非同期リードコマンドが連続してメインキュー１５１にエンキューされ、その後に非同期リードコマンドに該当しないコマンドがエンキューされた場合を考える。デマルチプレクサ１５２およびデマルチプレクサ１５３は、非同期リードコマンドに該当しないコマンドがメインキュー１５１の先頭に来るまで、複数の非同期リードコマンドをすべてサブキュー１５４に移動させる。サブキュー１５４に移動された複数の非同期リードコマンドは、メインキュー１５１に残された非同期リードコマンドに該当しないコマンドよりも先にメモリチップ２１０に送信され、実行される。複数の非同期リードコマンドの全ての送信が完了した後、メインキュー１５１に残された非同期リードコマンドが送信可能となる。つまり、複数の非同期リードコマンドが連続してメインキュー１５１にエンキューされ、その後に非同期リードコマンドに該当しないコマンドがエンキューされた場合、これらのコマンドは、メインキュー１５１にエンキューされた順番でメモリチップ２１０に送信される。
【０１３６】
なお、キューブロック１５０が、メインキュー１５１にエンキューされた複数のコマンドを、メインキュー１５１にエンキュー順番で出力するための構成は、上記の構成だけに限定されない。
【０１３７】
また、第１の実施形態では、メモリコントローラ１００は、アクセス先のメモリチップ２１０がライトまたはイレースを実行中であるか否かを判定する。アクセス先のメモリチップ２１０がライトおよびイレースの何れも実行中ではない場合に、メモリコントローラ１００は、メインキュー１５１をコマンド送信元として選択するか、または、複数のサブキュー１５４をコマンド送信元として選択する。
【０１３８】
これによって、メモリコントローラ１００は、１つのメモリチップ２１０内であるプレーンがライトまたはイレースを実行中に他のプレーンは非同期リードを開始することができないという制約がある場合であっても、複雑な仕組みを必要なくライト、イレース、および非同期リードを実行することが可能となる。
【０１３９】
なお、以上の説明では、デマルチプレクサ１５２およびデマルチプレクサ１５３がメインキュー１５１に格納されたコマンドが非同期リードコマンドであるか否かの判定と非同期リードコマンドであると判定されたコマンドの移動とを実行した。これらの動作は、例えばＣＰＵ１１０によって実行されてもよい。
【０１４０】
また、以上の説明では、バンク調停およびサブバンク調停を調停部１１２が実行する、として説明した。バンク調停およびサブバンク調停のうちの何れかまたは両方は、ハードウェア回路によって実行されてもよい。
【０１４１】
（第２の実施形態）
以下に、第２の実施形態について説明する。第２の実施形態では、第１の実施形態と異なる要素について重点的に説明し、他の要素については説明を省略する。
【０１４２】
図１０は、第２の実施形態の１つのキューブロックの構成の概略を示す図である。第２の実施形態のキューブロックを、キューブロック１５０ａと表記する。なお、キューブロック１５０ａは、図５に示す第１の実施形態のＮＡＮＤコントローラ１４０と同様に、各ＮＡＮＤコントローラ１４０にバンク毎に具備される。本図では、バンク＃０に対応したキューブロック１５０ａ−０を図示している。他のバンクに対応したキューブロック１５０は、キューブロック１５０ａ−０と同様の構成を有している。
【０１４３】
図１０に示されるように、メインキュー１５１は、プライオリティキュー１５１ａとノーマルキュー１５１ｂとを備える。ノーマルキュー１５１ｂは、優先度が「通常」であるコマンドが格納されるキューであり、プライオリティキュー１５１ａは、優先度が「通常」より高い「高優先」であるコマンドが格納されるキューである。
【０１４４】
一例として、第２の実施形態では、コマンド生成部１１１は、非同期リードコマンドをプライオリティキュー１５１ａに格納し、非同期リードコマンド以外のコマンドをノーマルキュー１５１ｂに格納することとする。
【０１４５】
キューブロック１５０ａ−０は、メインキュー１５１の他に、４つのプレーン＃０〜＃３に対応して４つのサブキュー１５４（サブキュー１５４−０〜１５４−３）を備える。また、キューブロック１５０ａは、デマルチプレクサ１５３、サブバンク調停機構１５５、およびマルチプレクサ１５６を備える。
【０１４６】
プライオリティキュー１５１ａは、デマルチプレクサ１５３の入力端子に接続されている。デマルチプレクサ１５３は、４つの出力端子を備え、当該４つの出力端子のそれぞれは、４つのサブキュー１５４のうちの１つと１対１に接続されている。
【０１４７】
デマルチプレクサ１５３は、プライオリティキュー１５１ａに非同期リードコマンドが入力されると、その非同期リードコマンドに付加情報として付されたプレーン番号に基づいて、あて先のプレーンに対応するサブキュー１５４に接続された出力端子を選択する。この動作によって、非同期リードコマンドは、宛て先のプレーンに対応するサブキュー１５４に入力される。
【０１４８】
サブバンク調停機構１５５は、４つの入力端子を備え、当該４つの入力端子のそれぞれには、４つのサブキュー１５４のうちの１つと１対１に接続されている。サブバンク調停機構１５５の出力端子は、マルチプレクサ１５６の入力端子に接続されている。
【０１４９】
サブバンク調停機構１５５は、調停部１１２からの選択信号に基づいて４つの入力端子から１つを選択する。これによって、選択された入力端子に接続されたサブキュー１５４からコマンドをデキューすることが可能となる。
【０１５０】
マルチプレクサ１５６は、２つの入力端子を備える。ノーマルキュー１５１ｂは、当該２つの入力端子のうちの一方に接続されている。当該２つの入力端子のうちの他方には、サブバンク調停機構１５５の出力端子が接続されている。
【０１５１】
マルチプレクサ１５６は、調停部１１２からの選択信号に基づいて２つの入力端子のうちの１つを選択する。ノーマルキュー１５１ｂに接続された入力端子が選択された場合には、ノーマルキュー１５１ｂからコマンドを送信することが可能となる。サブバンク調停機構１５５に接続された入力端子が選択された場合には、サブバンク調停機構１５５によって選択されたサブキュー１５４からコマンドを送信することが可能となる。
【０１５２】
マルチプレクサ１５６の出力端子は、バンク調停機構１６０（図５参照）の、４つのバンク＃０〜＃３に対応して設けられた４つの入力端子のうちの１つに接続される。
【０１５３】
調停部１１２は、選択信号によってマルチプレクサ１５６の入力端子を切り替えることによって、サブバンク調停の実行／非実行を切り替えることができる。具体的には、調停部１１２は、マルチプレクサ１５６にノーマルキュー１５１ｂに接続された入力端子を選択させることで、サブキュー１５４−０〜１５４−３に格納されたコマンドが出力されなくなるので、サブバンク調停を実行しないようにすることができる。
【０１５４】
また、調停部１１２は、マルチプレクサ１５６にサブバンク調停機構１５５に接続された入力端子を選択させることで、サブバンク調停を実行可能とすることができる。即ち、調停部１１２は、サブバンク調停を実行可能とした場合においては、選択信号によってサブバンク調停機構１５５の入力端子を切り替えることによって、サブバンク調停を実現する。
【０１５５】
第２の実施形態では、例えば、調停部１１２は、何れかのサブキュー１５４にコマンドが格納されている場合には、マルチプレクサ１５６の２つの入力端子のうちのサブバンク調停機構１５５に接続された入力端子を選択することによって、何れかのサブキュー１５４からコマンドを送信することを可能にする。その際には、調停部１１２は、サブバンク調停を実行する。
【０１５６】
また、調停部１１２は、コマンドが格納されたサブキュー１５４がなく、ノーマルキュー１５１ｂにコマンドが格納されている場合には、マルチプレクサ１５６の２つの入力端子のうちのノーマルキュー１５１ｂに接続された入力端子を選択する。
【０１５７】
これにより、コマンド生成部１１１がノーマルキュー１５１ｂにあるコマンドを格納し、プライオリティキュー１５１ａに非同期リードコマンドを格納した場合には、非同期リードコマンドを優先して実行することが可能となる。
【０１５８】
キューブロック１５０ａが上記のように構成されることで、例えばバンク＃０〜＃３のそれぞれに対応するメインキュー１５１と、バンク＃０の４つのプレーンのそれぞれに対応するサブキュー１５４にコマンドが格納されているケースにおいては、第２の実施形態の調停動作によれば、第１の実施形態と同様に、バンク＃０のサブキュー１５４−０、バンク＃０のサブキュー１５４−１、バンク＃０のサブキュー１５４−２、バンク＃０のサブキュー１５４−３、バンク＃０のメインキュー１５１、バンク＃１のメインキュー１５１、バンク＃２のメインキュー１５１、バンク＃３のメインキュー１５１、の順番でコマンド送信元のキューが選択される。 
【０１５９】
以上述べたように、コマンド生成部１１１は、非同期リードコマンドをプライオリティキュー１５１ａに格納し、非同期リードコマンド以外のコマンドをノーマルキュー１５１ｂに格納する。そして、デマルチプレクサ１５３は、プライオリティキュー１５１ａに格納されたコマンドを、４つのサブキュー１５４のうちのあて先のプレーンに対応したサブキュー１５４に移す。
【０１６０】
よって、第１の実施形態と同様、簡単な仕組みでライトと非同期リードとを実行することが可能となる。つまり、利便性が高いメモリシステムを得ることが可能となる。
【０１６１】
なお、コマンド生成部１１１は、非同期リードコマンド以外のコマンドをプライオリティキュー１５１ａに格納してもよい。その場合には、デマルチプレクサ１５３は、例えば、プライオリティキュー１５１ａに格納された、非同期リードコマンド以外のコマンドを、あて先のプレーンに対応したサブキュー１５４に移す。当該サブキュー１５４がロック機能を使用して他のプレーンに対応したサブキュー１５４に対する調停を行わないようにすることで、プライオリティキュー１５１ａに格納された非同期リードコマンド以外のコマンドを実行することが可能になる。
【０１６２】
また、非同期リードコマンド以外のコマンドが格納されたサブキュー１５４がサブバンク調停をロックした場合において、バンク調停はロックされてもよいしロックされなくてもよい。バンク調停がロックされないようにすることで、非同期リードコマンド以外のコマンドを実行するバンクによって他のバンクのコマンド実行が滞ることを防止することができる。
【０１６３】
（第３の実施形態）
第３の実施形態は、第２の実施形態のメモリシステム１に適用可能である。第３の実施形態では、ノーマルキュー１５１ｂに格納されたコマンドが実行中にプライオリティキュー１５１ａにコマンドが格納された場合、実行中のコマンドがサスペンドされて、プライオリティキュー１５１ａに格納されたコマンドが実行される。
【０１６４】
コマンド生成部１１１は、サスペンドフラグやレジュームフラグを付したコマンドをプライオリティキュー１５１ａに格納することができる。
【０１６５】
図１１は、第３の実施形態のプライオリティキュー１５１ａに格納されるコマンドのデータ構造の一例を示す図である。
【０１６６】
本図の例では、リードコマンド（非同期リードコマンド）は、データリードコマンド（Ｄｒｅａｄ）とデータアウトコマンド（Ｄｏｕｔ）との対によって構成される。データリードコマンドは、サブアレイ２１２から周辺回路２１３のページバッファにデータを読み出すためのコマンドであり、データアウトコマンドは、ページバッファからＮＡＮＤコントローラ１４０にデータを転送するためのコマンドである。なお、非同期リードコマンドは、データリードコマンドとデータアウトコマンドとに分割されていなくてもよい。
【０１６７】
コマンド生成部１１１は、プライオリティキュー１５１ａに複数のコマンドを格納する場合、当該複数のコマンドの先頭のコマンドに、サスペンドフラグ５１０を付す。サスペンドフラグ５１０は、メモリチップ２１０に実行中のコマンドをサスペンドさせるコマンドとして機能するフラグである。メモリチップ２１０は、サスペンドフラグ５１０付きのコマンドを受領した場合、実行中のコマンドをサスペンドし、その後、受領したコマンドを実行する。
【０１６８】
また、コマンド生成部１１１は、プライオリティキュー１５１ａに複数のコマンドを格納した場合、当該複数のコマンドの末尾のコマンドに、レジュームフラグ５２０を付す。レジュームフラグ５２０は、メモリチップ２１０にサスペンド中のコマンドを実行再開させるコマンドとして機能するフラグである。メモリチップ２１０は、レジュームフラグ５２０付きのコマンドを受領した場合、受領したコマンドを実行し、受領したコマンドの実行を完了した後、サスペンド中のコマンドの実行を再開する。
【０１６９】
図１１に示される例によれば、プライオリティキュー１５１ａには、先頭から順番に、サスペンドフラグ５１０が付された、プレーン＃０をあて先としたデータリードコマンド３３０ａと、プレーン＃０をあて先としたデータアウトコマンド３３０ｂと、プレーン＃１をあて先としたデータリードコマンド３３０ｃと、レジュームフラグ５２０が付された、プレーン＃１をあて先とした、データアウトコマンド３３０ｄと、が格納されている。
【０１７０】
なお、図１１に示されるように、プライオリティキュー１５１ａに格納される各コマンドには、第１および第２の実施形態と同様に、付加情報４１０（４１０ａ〜４１０ｄ）としてプレーン番号が付されている。図１１に示される、プライオリティキュー１５１ａに格納された複数のコマンドは、付加情報４１０として付されたプレーン番号に基づき、あて先のプレーンに対応したサブキュー１５４に移動せしめられる。
【０１７１】
図１２は、サブキュー１５４へのコマンドの移動の一例を説明するための図である。本図によれば、プレーン＃０を示す付加情報４１０ａ、４１０ｂが付加されていたコマンド３３０ａ、３３０ｂは、プライオリティキュー１５１ａからプレーン＃０に対応したサブキュー１５４−０に移動せしめられたことが読み取れる。また、プレーン＃１を示す付加情報４１０ｃ、４１０ｄが付加されたコマンド３３０ｃ、３３０ｄは、プライオリティキュー１５１ａからプレーン＃１に対応したサブキュー１５４−１に移動せしめられたことが読み取れる。
【０１７２】
なお、以上では、非同期リードコマンドにサスペンドフラグ５１０やレジュームフラグ５２０が付される例を説明した。コマンド生成部１１１は、プライオリティキュー１５１ａに複数のコマンドを格納する場合、先頭にサスペンドコマンドを格納し、末尾にレジュームコマンドを格納してもよい。その場合、メモリコントローラ１００は、サスペンドコマンドを、サブキュー１５４を介さずに送信し、その後、サブバンク調停を行って各サブキュー１５４をコマンド送信元として順次選択し、最後に、レジュームコマンドをサブキュー１５４を介さずに送信してもよい。
【０１７３】
以上述べたように構成されることで、メモリコントローラ１００は、１つのメモリチップ２１０が優先度が「通常」のコマンドを実行中に複数のサブキュー１５４のうちのいずれかに非同期リードコマンドが格納された場合、実行中のコマンドをサスペンドして複数のサブキューのそれぞれを順次、コマンド送信元として選択することができる。
【０１７４】
よって、非同期リードコマンドが生成されてから当該非同期リードコマンドの実行が完了するまでの時間を短縮することが可能となる。
【０１７５】
このように、第１〜第３の実施形態では、メモリコントローラ１００には、バンク（メモリチップ２１０）毎に、コマンドを受けるメインキュー１５１と、メモリチップ２１０が備える複数のプレーンに対応した複数のサブキュー１５４とが具備され、非同期リードコマンドはメインキュー１５１からあて先のプレーンに対応したサブキュー１５４に自動的に移動せしめられる。よって、複数プレーンで非同期に実行できないライト動作と、複数プレーンで非同期に実行できるリードと、の両方を簡単な仕組みで制御することが可能となる。よって、利便性が高いメモリシステムが得られる。
【０１７６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１７７】
１  メモリシステム、２  ホスト、１００  メモリコントローラ、１１０  ＣＰＵ、１１１  コマンド生成部、１１２  調停部、１４０，１４０−０〜１４０−３  ＮＡＮＤコントローラ、１５０，１５０ａ，１５０−０〜１５０−３  キューブロック、１５１  メインキュー、１５１ａ  プライオリティキュー、１５１ｂ  ノーマルキュー、１５２，１５３  デマルチプレクサ、１５４，１５４−０〜１５４−３  サブキュー、１５５  サブバンク調停機構、１６０  バンク調停機構、１５６  マルチプレクサ、２００  ＮＡＮＤメモリ、２１０  メモリチップ、２１１  電源系回路、２１２  サブアレイ、２１３  周辺回路、２２０  メモリセルアレイ、３００ａ〜３００ｄ  非同期リードコマンド、４００ａ〜４００ｄ，４１０ａ〜４１０ｄ  付加情報、５１０  サスペンドフラグ、５２０  レジュームフラグ。
【図１】
2020016954.tif 000003
【図２】
2020016954.tif 000004
【図３】
2020016954.tif 000005
【図４】
2020016954.tif 000006
【図５】
2020016954.tif 000007
【図６】
2020016954.tif 000008
【図７】
2020016954.tif 000009
【図８】
2020016954.tif 000010
【図９】
2020016954.tif 000011
【図１０】
2020016954.tif 000012
【図１１】
2020016954.tif 000013
【図１２】
2020016954.tif 000014