(57)【要約】      （修正有）【課題】シミュレートされたデバイスをテストするためのメモリベース通信プロトコルをシミュレートするための方法を提供する。【解決手段】方法は、共有メモリ空間において実装されるホストデータバッファの既知の位置にデータを格納する段階と、第１のプログラムの命令を実行して、インデックス、ＩＤ、およびメモリ位置を含むデータ構造を使用して共有メモリ空間にコマンドを格納する段階と、第２のプログラムの命令を実行して、ホストデータバッファからコマンドを読み出し、共有メモリ空間内のデータにアクセスして、インデックスによって示される位置のデータを使用して、ＩＤによって規定される動作を行い、動作の完了後に完了インジケータを第１のプログラムに送る段階と、を備える。【選択図】図６
2020198087.tif 000002
【特許請求の範囲】
【請求項１】
シミュレートされたデバイスをテストするためのメモリベース通信プロトコルをシミュレートするための方法であって、
ホストのデータバッファにデータを格納する段階であって、前記ホストはテスタシステムであり、前記ホストのデータバッファは、共有メモリ空間に実装される、段階と、
テスタシステムプログラムの命令を実行して、インデックス、ＩＤ、およびメモリ位置を含むデータ構造を使用して、前記共有メモリ空間にコマンドを格納する段階と、
ＤＵＴシミュレーションの命令を実行して、
前記共有メモリ空間から前記コマンドを読み出し、
前記共有メモリ空間のブロックにアクセスして、前記ＩＤによって規定される動作を行い、
前記動作の完了後、完了インジケータを前記テスタシステムプログラムに送る、
実行する段階であって、前記共有メモリ空間のブロックの位置は、前記インデックスによって示される、段階と
を備える方法。
【請求項２】
前記ＩＤは、前記コマンドがプログラム動作を含むことを示し、前記アクセスは、前記ブロックを読み出して、前記メモリ位置に書き込むデータを取得することであり、前記動作は、前記プログラム動作を行うことを含み、前記方法は、前記ＤＵＴシミュレーションの命令を実行して、前記コマンドに応答して前記データをディスクファイルに書き込む段階をさらに備える、
請求項１に記載の方法。
【請求項３】
前記ＩＤは、前記コマンドが読み出し動作を含むことを示し、前記アクセスは、前記メモリ位置から読み出したデータを格納することであり、前記動作は、前記読み出し動作を行うことを含み、前記方法は、前記ＤＵＴシミュレーションの命令を実行して、１または複数のディスクファイルにアクセスして前記メモリ位置のデータを読み出し、前記共有メモリ空間のブロックの前記ホストのデータバッファに格納する段階をさらに備える、
請求項１または２に記載の方法。
【請求項４】
前記テスタシステムプログラムの命令および前記ＤＵＴシミュレーションの命令は、Ｌｉｎｕｘベースのオペレーティングシステムによって管理される別個のプロセスとして実行される、
請求項１から３の何れか一項に記載の方法。
【請求項５】
前記動作の後に前記データを検証して、前記プログラム動作の後、エラーがないか前記シミュレートされたデバイスをテストする、検証する段階をさらに備える
請求項２に記載の方法。
【請求項６】
前記検証する段階は、前記データを予期される結果と比較する段階を有する、
請求項５に記載の方法。
【請求項７】
前記コマンドは、前記シミュレートされたデバイスのベースアドレスレジスタに格納される、
請求項１から６の何れか一項に記載の方法。
【請求項８】
前記テスタシステムプログラムの命令および前記ＤＵＴシミュレーションの命令は、同一のプロセッサによって実行される、
請求項４から７の何れか一項に記載の方法。
【請求項９】
前記共有メモリ空間は、物理メモリをエミュレートするメモリマップドファイルを有する、
請求項１から８の何れか一項に記載の方法。
【請求項１０】
前記メモリマップドファイルは、ｍｍａｐを使用してマッピングされたファイルを含む、
請求項９に記載の方法。
【請求項１１】
前記共有メモリ空間は、ＮＡＮＤフラッシュメモリをエミュレートするメモリマップドファイルを有する、
請求項１から１０の何れか一項に記載の方法。
【請求項１２】
前記メモリベース通信プロトコルは、ＰＣＩｅ通信バスプロトコルを利用する、
請求項１から１１の何れか一項に記載の方法。
【請求項１３】
シミュレートされたデバイスのプログラム動作をテストするためのメモリベース通信プロトコルをシミュレートするための方法であって、
ホストデータバッファにデータを格納する段階であって、前記ホストデータバッファは、共有メモリ空間に実装される、段階と、
テスタシステムプログラムの命令を実行して、第１のインデックス、プログラム動作のＩＤ、およびメモリ位置を含むデータ構造を使用して前記共有メモリ空間に前記プログラム動作を格納する段階と、
ＤＵＴシミュレーションの命令を実行して、
前記共有メモリ空間の前記プログラム動作にアクセスし、
前記第１のインデックスによって規定される、前記共有メモリ空間のブロックからデータを読み出し、
前記データを前記メモリ位置の１または複数のディスクファイルに書き込み、
前記データを前記メモリ位置に書き込んだ後に第１の完了インジケータを前記テスタシステムプログラムに送る、
実行する段階と、
前記テスタシステムプログラムの命令を実行して、第２のインデックス、読み出し動作を示すＩＤ、および前記メモリ位置を含むデータ構造を使用して前記共有メモリ空間に前記読み出し動作を格納する段階と、
前記ＤＵＴシミュレーションの命令を実行して、
前記メモリ位置から前記データを読み出し、
前記第２のインデックスにしたがって前記データを前記ホストデータバッファのブロックに書き込み、
前記データを前記第２のインデックスによって規定される前記ブロックに書き込んだ後、第２の完了インジケータを前記テスタシステムプログラムに送る、
実行する段階と
を備える方法。
【請求項１４】
前記読み出し動作の後に前記データを検証して、エラーがないか前記シミュレートされたデバイスをテストする、検証する段階をさらに備え、前記検証する段階は、前記データを予期される結果と比較する段階を有する、
請求項１３に記載の方法。
【請求項１５】
前記第１の完了インジケータは、前記テスタシステムプログラムが管理するキューに格納される、
請求項１３または１４に記載の方法。
【請求項１６】
前記メモリ位置は、ディスクのメモリ位置を参照し、前記メモリ位置は、フラッシュメモリをシミュレートするためのディスクファイルとして実装される、
請求項１３から１５の何れか一項に記載の方法。
【請求項１７】
テスト対象デバイスをシミュレートするためのシステムであって、
Ｌｉｎｕｘベースのオペレーティングシステムを実行するプロセッサと、
テスタシステムプログラムおよびＤＵＴシミュレーションプログラム用の共有メモリ空間を提供する、前記プロセッサと通信するメモリと
を備え、
前記テスタシステムプログラムおよび前記ＤＵＴシミュレーションプログラムの命令は、前記プロセッサによって実行され、前記プロセッサは、前記テスト対象デバイスのシミュレーションをテストするためのメモリベース通信プロトコルをシミュレートするための方法を行い、前記方法は、
データをホストのデータバッファに格納する段階であって、前記ホストはテスタシステムであり、前記ホストのデータバッファは共有メモリ空間において実装される、段階と、
前記テスタシステムプログラムの命令を実行して、インデックス、ＩＤ、およびメモリ位置を含むデータ構造を使用してコマンドを前記共有メモリ空間に格納する段階と、
前記ＤＵＴシミュレーションプログラムの命令を実行して、
前記共有メモリ空間から前記コマンドを読み出し、
前記共有メモリ空間のブロックにアクセスして、前記ＩＤによって規定される動作を行い、
前記動作の完了後、完了インジケータを前記テスタシステムプログラムに送る、
実行する段階であって、前記共有メモリ空間のブロックの位置は前記インデックスによって示される、段階とを備える、
システム。
【請求項１８】
前記方法は、前記動作の後に前記データを検証して、前記シミュレートされたデバイスをテストする、検証する段階をさらに備え、前記検証する段階は、前記動作の後に前記データを予期される結果と比較する段階を有する、
請求項１７に記載のシステム。
【請求項１９】
前記ＩＤは、前記コマンドがプログラム動作を含むことを示し、前記動作は、前記プログラム動作を行うことを含み、前記方法は、前記ＤＵＴシミュレーションプログラムの命令を実行して、前記コマンドに応答して、前記インデックスによって規定される、前記共有メモリ空間のブロックの前記データをディスクファイルに書き込む段階をさらに備える、
請求項１７または１８に記載のシステム。
【請求項２０】
前記ＩＤは、前記コマンドが読み出し動作を含むことを示し、前記動作は、前記読み出し動作を行うことを含み、前記方法は、前記ＤＵＴシミュレーションプログラムの命令を実行して、１または複数のディスクファイルにアクセスしてデータを読み出し、前記１または複数のディスクファイルの前記データを前記ホストのデータバッファの前記インデックスによって規定される位置に書き込む段階をさらに備える、
請求項１７から１９の何れか一項に記載のシステム。
【請求項２１】
前記テスタシステムプログラムの命令および前記ＤＵＴシミュレーションプログラムの命令は、別個のプロセスとして実行され、前記別個のプロセスは、前記Ｌｉｎｕｘベースのオペレーティングシステムによって管理される、
請求項１７から２０の何れか一項に記載のシステム。
【請求項２２】
前記メモリベース通信プロトコルは、ＰＣＩｅ通信バスプロトコルである、請求項１７から２１の何れか一項に記載のシステム。
【請求項２３】
シミュレートされたデバイスとメモリベース通信を行うためのシステムであって、
プロセッサと、
前記プロセッサに接続されたメモリと、
前記プロセッサによって実行されるテスタシステムプロセスと
を備え、
前記テスタシステムプロセスには、ホストデータバッファを含む共有メモリアドレス空間が割り当てられ、前記テスタシステムプロセスは、前記ホストデータバッファにデータを格納し、前記共有メモリアドレス空間にコマンドを格納することによってコマンドをデバイスプロセスに発行し、
前記デバイスプロセスは、デバイスをシミュレートするために前記プロセッサによって実行され、前記デバイスプロセスはコントローラを有し、前記コントローラは、
ディスクファイルからデータを読み出し、
データを前記ディスクファイルに書き込み、
前記共有メモリアドレス空間から前記コマンドを読み出し、
前記コマンドにしたがって動作を行うよう動作可能であり、前記コマンドは、
前記ホストデータバッファからインデックス付きデータを読み出し、前記インデックス付きデータを前記ディスクファイルに書き込むプログラム動作と、
前記ディスクファイルからデータを読み出し、インデックス値にしたがって前記データを前記ホストデータバッファに書き込む読み出し動作と、
前記ディスクファイルの１または複数を消去する消去動作とを含む、
システム。
【請求項２４】
前記テスタシステムプロセスはテスタシステムをシミュレートし、前記デバイスプロセスはテスト対象デバイスをシミュレートする、請求項２３に記載のシステム。
【請求項２５】
前記共有メモリアドレス空間は、前記テスタシステムと前記テスト対象デバイスとの間のＰＣＩｅバスをシミュレートする、請求項２４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概してデバイステスト分野に関する。より具体的には、本発明の実施形態は、テスト中にテスト対象デバイス（ＤＵＴ）をシミュレートするための方法およびシステムに関する。
【背景技術】
【０００２】
通常、テスト対象デバイスまたはテスト対象機器（ＤＵＴ）は、販売前に、デバイスの性能および一貫性を判断するためにテストされる。デバイスは、多種多様なテストケースを使用してテストすることができ、テストケースの結果は予期される出力結果と比較される。テストケースの結果が予期される出力値と一致しない場合、デバッグを行って、デバイスに起因するあらゆる不具合の特定および修正が試みられる。
【０００３】
ＤＵＴは通常、自動テスト装置または自動化テスト装置（ＡＴＥ）によってテストされる。ＡＴＥは、ソフトウェアおよびオートメーションを使用し複雑なテストを行って、テスト効率を向上させるのに使用できる。ＤＵＴは、コンピュータまたは他の電子デバイスなどの最終製品への統合が意図されたメモリデバイスまたはメモリコンポーネントであってよい。ＮＡＮＤフラッシュデバイスの開発過程で使用する既存のシステムレベルのテストソフトウェアは、具体的に、ＤＵＴ開発が完了間近となった後にテストされデバッグされるソフトウェアを必要とする。緊急の場合であっても、テストプログラムおよびソフトウェア製品は、顧客が提供する記憶デバイスが開発およびデバッグに対して準備が整うのを待つのが一般的であり、そのため、テスト用ソフトウェア開発の生産性は、デバイスがどの程度まで完成しているかによって律則されることになり、その結果、期限を逃し、十分にテストしないうちに製品を市場に出さざるを得ない場合がある。
【０００４】
さらに、ＤＵＴテストの既存の手法では、所与の時間にＤＵＴのいくつかの特性を変更することのみが可能であり、いくつかのバリエーションについては単独でテストすることしかできない。デバイス開発の完了に左右されず、実際のＤＵＴが手に入る前にテスト用ソフトウェアをテストおよびデバッグすることによって生産開発の効率を向上させることができ、膨大な数の可変要素をテストするようカスタマイズしてテストの堅牢性および拡張可能性を高めることのできる、ＤＵＴテストを行う方法が必要である。
【発明の概要】
【０００５】
本発明の実施形態は、デバイス開発の完了に依存せず、実際のＤＵＴが手に入る前にソフトウェアでシミュレートされたデバイスをテストおよびデバッグすることによって生産開発の効率を向上させることができ、膨大な数の可変要素をテストするようカスタマイズしてテストの堅牢性および拡張可能性を高めることのできる、ＤＵＴテストを行うシステムおよび方法を提供する。当該テストは、ＤＵＴの仕様にしたがってＡＰＩレベルで行うことができる。開発過程の早い段階でテストおよびデバッグを行うことによって、実際のデバイスをテストに利用可能となったときにデバッグおよび再設計がより小規模で済み、結果的にデバイスの納品日が早まる。
【０００６】
一実施形態において、シミュレートされたデバイスをテストするためのメモリベース通信プロトコルをシミュレートするための方法が開示される。当該方法は、データをホストデータバッファに格納する段階であって、ホストはテスタシステムであり、ホストデータバッファは共有メモリ空間において実装される、格納する段階と、テスタシステムプログラムの命令を実行して、インデックス、ＩＤ、およびメモリ位置を含むデータ構造を使用してコマンドを共有メモリ空間に格納する段階と、ＤＵＴシミュレーションプログラムの命令を実行して共有メモリ空間からコマンドを読み出し、共有メモリ空間のブロックにアクセスしてＩＤによって規定される動作を行い、動作完了後、テスタシステムプログラムに完了インジケータを送る段階であって、共有メモリのブロックの位置はインデックスによって示される、段階とを備える。
【０００７】
いくつかの実施形態によれば、ＩＤは、コマンドがプログラム動作を含むことを示し、アクセスは、ブロックを読み出して、メモリ位置に書き込むデータを取得することであり、動作はプログラム動作を行うことを含み、当該方法は、コマンドに応答してＤＵＴシミュレーションがデータをディスクファイルに書き込む段階をさらに備える。
【０００８】
いくつかの実施形態によれば、ＩＤは、コマンドが読み出し動作を含むことを示し、アクセスは、メモリ位置から読み出したデータを格納することであり、動作は読み出し動作を行うことを含み、当該方法は、ＤＵＴシミュレーションの命令を実行して、１または複数のディスクファイルにアクセスして当該メモリ位置のデータを読み出し、共有メモリの当該ブロックのホストデータバッファに格納する段階をさらに備える。
【０００９】
いくつかの実施形態によれば、テスタシステムプログラムの命令およびＤＵＴシミュレーションの命令は、Ｌｉｎｕｘ（登録商標）ベースのオペレーティングシステムが管理する別個のプロセスとして実行される。
【００１０】
いくつかの実施形態によれば、当該方法は、当該動作の後にデータを検証して、プログラム動作後、エラーがないかシミュレートされたデバイスをテストする、検証する段階を備える。
【００１１】
いくつかの実施形態によれば、検証する段階は、データを予期される結果と比較する段階を有する。
【００１２】
いくつかの実施形態によれば、コマンドは、シミュレートされたデバイスのベースアドレスレジスタに格納される。
【００１３】
いくつかの実施形態によれば、テスタプログラムの命令およびＤＵＴシミュレーションの命令は、同一のプロセッサによって実行される。
【００１４】
いくつかの実施形態によれば、共有メモリ空間は、物理メモリをエミュレートするメモリマップドファイルを含む。
【００１５】
いくつかの実施形態によれば、メモリマップドファイルは、ｍｍａｐを使用してマッピングされたファイルを含む。
【００１６】
いくつかの実施形態によれば、共有メモリ空間は、ＮＡＮＤフラッシュメモリをエミュレートするメモリマップドファイルを含む。
【００１７】
いくつかの実施形態によれば、メモリベース通信プロトコルは、ＰＣＩｅ通信バスプロトコルを利用する。
【００１８】
別の実施形態において、シミュレートされたデバイスのプログラム動作をテストするためのメモリベース通信プロトコルをシミュレートするための方法が開示される。当該方法は、データをホストデータバッファに格納する段階であって、ホストデータバッファは共有メモリ空間に実装される、格納する段階と、テスタシステムプログラムの命令を実行して、第１のインデックス、プログラム動作のＩＤ、およびメモリ位置を含むデータ構造を使用してプログラム動作を共有メモリ空間に格納する段階と、ＤＵＴシミュレーションの命令を実行して、共有メモリ空間のプログラム動作にアクセスし、共有メモリ空間の、第１のインデックスによって規定されるブロックからデータを読み出し、データを当該メモリ位置の１または複数のディスクファイルに書き込み、データを当該メモリ位置に書き込んだ後、第１の完了インジケータをテスタシステムプログラムに送る段階とを備える。当該方法は、テスタシステムプログラムの命令を実行して、第２のインデックス、読み出し動作を示すＩＤ、および記憶位置を含むデータ構造を使用して共有メモリ空間に読み出し動作を格納する段階と、ＤＵＴシミュレーションの命令を実行して、当該メモリ位置からデータを読み出し、第２のインデックスにしたがってデータをホストデータバッファのブロックに書き込み、第２のインデックスによって規定されるブロックにデータを書き込んだ後、第２の完了インジケータをテスタシステムプログラムに送る段階とをさらに備える。
【００１９】
いくつかの実施形態によれば、当該方法は、読み出し動作後にデータを検証して、エラーがないかシミュレートされたデバイスをテストする、検証する段階を備え、当該検証する段階は、データを予期される結果と比較する段階を有する。
【００２０】
いくつかの実施形態によれば、第１の完了インジケータは、テスタシステムプログラムが管理するキューに格納される。
【００２１】
いくつかの実施形態によれば、メモリ位置はディスクのメモリ位置を参照し、メモリ位置は、フラッシュメモリをシミュレートするためのディスクファイルとして実装される。
【００２２】
異なる実施形態において、テスト対象デバイスをシミュレートするためのシステムが開示される。当該システムは、Ｌｉｎｕｘベースのオペレーティングシステムを実行するプロセッサと、テスタシステムプログラムおよびＤＵＴシミュレーションプログラムに共有メモリ空間を提供する、プロセッサと通信するメモリとを備える。テスタシステムプログラムおよびＤＵＴシミュレーションプログラムの命令は、プロセッサによって実行され、プロセッサは、テスト対象デバイスのシミュレーションをテストするためのメモリベース通信プロトコルをシミュレートするための方法を行う。当該方法は、データをホストデータバッファに格納する段階であって、ホストはテスタシステムであり、ホストデータバッファは共有メモリ空間において実装される、格納する段階と、テスタシステムプログラムの命令を実行して、インデックス、ＩＤ、およびメモリ位置を含むデータ構造を使用してコマンドを共有メモリ空間に格納する段階と、ＤＵＴシミュレーションプログラムの命令を実行して共有メモリ空間からコマンドを読み出し、共有メモリ空間のブロックにアクセスしてＩＤによって規定される動作を行い、動作完了後、テスタシステムプログラムに完了インジケータを送る段階であって、共有メモリのブロックの位置はインデックスによって示される、段階とを備える。
【００２３】
いくつかの実施形態によれば、当該方法は、当該動作の後にデータを検証して、シミュレートされたデバイスをテストする、検証する段階を備え、当該検証する段階は、当該動作の後、データを予期される結果と比較する段階を有する。
【００２４】
いくつかの実施形態によれば、ＩＤは、コマンドがプログラム動作を含むことを示し、当該動作は、プログラム動作の実行を含み、ＤＵＴシミュレーションプログラムは、コマンドに応答して、共有メモリの、インデックスによって規定されるブロックのデータをディスクファイルに書き込む。
【００２５】
いくつかの実施形態によれば、ＩＤは、コマンドが読み出し動作を含むことを示し、当該動作は、読み出し動作の実行を含み、当該方法は、ＤＵＴシミュレーションプログラムの命令を実行して、１または複数のディスクファイルにアクセスしてデータを読み出し、ディスクファイルのデータをインデックスによって規定される位置のホストデータバッファに書き込む段階をさらに備える。
【００２６】
いくつかの実施形態によれば、テスタシステムプログラムの命令およびＤＵＴシミュレーションプログラムの命令は、別個のプロセスとして実行され、別個のプロセスは、Ｌｉｎｕｘベースのオペレーティングシステムによって管理される。
【００２７】
いくつかの実施形態によれば、メモリベース通信プロトコルは、ＰＣＩｅ通信バスプロトコルである。
【００２８】
異なる実施形態において、シミュレートされたデバイスとメモリベース通信を行うためのシステムが開示される。当該システムは、プロセッサと、プロセッサに接続されたメモリと、プロセッサによって実行されるテスタシステムプロセスとを備え、テスタシステムプロセスには、ホストデータバッファを含む共有メモリアドレス空間が割り当てられ、テスタシステムプロセスは、ホストデータバッファにデータを格納し、コマンドを共有メモリアドレス空間に格納することによってコマンドをデバイスプロセスに発行する。デバイスプロセスは、デバイスをシミュレートするためにプロセッサによって実行され、デバイスプロセスは、ディスクファイルからデータを読み出し、データをディスクファイルに書き込み、共有メモリアドレス空間からコマンドを読み出し、コマンドにしたがって動作を行うよう動作可能なコントローラを含む。コマンドは、ホストデータバッファからインデックス付きデータを読み出し、インデックス付きデータをディスクファイルに書き込むプログラム動作と、ディスクファイルからデータを読み出し、インデックス値にしたがってホストデータバッファにデータを書き込む読み出し動作と、ディスクファイルの１または複数を消去する消去動作とを含む。
【００２９】
いくつかの実施形態によれば、テスタシステムプロセスは、テスタシステムをシミュレートし、デバイスプロセスは、テスト対象デバイスをシミュレートする。
【００３０】
いくつかの実施形態によれば、共有メモリアドレス空間は、テスタシステムとテスト対象デバイスとの間のＰＣＩｅバスをシミュレートする。
【図面の簡単な説明】
【００３１】
添付図面は、本明細書に組み込まれ、本明細書の一部を成すものであり、本発明の実施形態を例示し、本明細書の記載とともに本発明の原理の説明に供する。
【００３２】
【図１】本発明の実施形態にしたがって示される、ＰＣＩｅデータバスを使用してデバイス（例えばＤＵＴ）をテストするよう構成される例示的なホストデバイスを含む例示的なデバイステストシステムのブロック図である。
【００３３】
【図２】本発明の実施形態に係る、シミュレートされたメモリベース通信プロトコル（例えば、ＰＣＩｅ、またはＰＣＩｅを使用して実装された通信プロトコル）を使用してシミュレートされたデバイスをテストするよう構成される例示的なテストプログラムを含む例示的なデバイステストシステムのブロック図である。
【００３４】
【図３】本発明の実施形態にしたがって示される、複数のシミュレートされたデバイスを同時にテストするための例示的なテスト環境のブロック図である。
【００３５】
【図４】本発明の実施形態に係る、物理ＤＵＴをテストするための例示的なソフトウェア階層を示すデータフロー図である。
【００３６】
【図５】本発明の実施形態にしたがって示される、メモリベース通信プロトコルをシミュレートして、シミュレートされたデバイスをテストするための例示的なソフトウェア階層を示すデータフロー図である。
【００３７】
【図６】本発明の実施形態にしたがって示される、動作を行って、シミュレートされたデバイスをテストするための例示的な一連のコンピュータ実装段階のフローチャートである。
【００３８】
【図７】本発明の実施形態にしたがって示される、プログラム動作および読み出し動作を行って、シミュレートされたデバイスをテストするための例示的な一連のコンピュータ実装段階のフローチャートである。
【００３９】
【図８】本発明の実施形態にしたがって示される、例示的なメモリベース通信プロトコルをシミュレートして、シミュレートされたデバイスをテストするためのブロック図およびデータフロー図である。
【００４０】
【図９】本発明の実施形態を実装してよい例示的なコンピュータプラットフォームを示す。
【発明を実施するための形態】
【００４１】
これより、いくつかの実施形態を詳細に参照する。主題を代替実施形態に関連して説明するが、それらは、請求項に記載の主題をこれらの実施形態に限定することを意図したものではないことが理解されるであろう。むしろ、請求項に記載の主題は、添付の特許請求の範囲によって定義される、請求項に記載の主題の主旨および範囲内に含まれ得る代替形態、変更形態、および均等物を網羅するよう意図される。
【００４２】
さらに、以下の詳細な説明では、多数の具体的な詳細を明らかにし、請求項に記載の主題への十分な理解を提供する。しかしながら、当業者であれば、それらの具体的な詳細またはその均等物がなくとも実施形態を実施し得ることを認識しているであろう。他の例では、主題の態様および特徴を不必要に曖昧にしないよう、周知の方法、手順、コンポーネント、および回路については詳述していない。 
【００４３】
以下に続く詳細な説明の諸部分においては、方法に関しての提示および記載がなされる。本方法の動作を説明する本明細書の図（例えば、図６および図７）において、段階および段階の順序付けを開示するが、そのような段階および順序付けは例示的なものである。実施形態は、その他のさまざまな段階または本明細書の図のフローチャートに記載されている段階のバリエーションの実行、および、本明細書において示され説明されるもの以外の順序での実行に良好に適合する。
【００４４】
詳細な説明においては、手順、段階、ロジックブロック、処理、およびその他の、コンピュータメモリに対して実行できるデータビット演算の記号表記に関して提示している部分もある。これらの説明および表記は、データ処理技術分野の当業者が彼らの研究の本質を他の当業者に最も効果的に伝えるために使用する手段である。ここでは概して、手順、コンピュータ実行段階、ロジックブロック、プロセスなどは、所望の結果を導く一連の自己矛盾のない段階または命令であると考えられる。そのような段階は、物理量を物理的に操作することを必要とする段階である。必ずではないが通常は、これらの物理量は、コンピュータシステムにおいて格納し、転送し、組み合わせ、比較し、その他操作することが可能な電気信号または磁気信号の形をとる。これらの信号は、主にはそれが慣例であるという理由から、ビット、値、要素、記号、文字、用語、または番号等で呼ぶことが時には都合がよいと分かっている。
【００４５】
しかしながら、これらのおよび同様の用語の全ては、適切な物理量と関連付けられるべきであり、これらの物理量に付された簡便なラベルに過ぎないことに留意されたい。特段の定めがない限り、以下の記載から明らかなように、本明細書全体を通して、「アクセスする」、「書き込む」、「含む」、「格納する」、「伝送する」、「関連付ける」、「特定する」、または「エンコードする」等といった用語を利用した記載は、コンピュータシステムのレジスタおよびメモリ内の物理的（電子的）な量として表されるデータを操作し、コンピュータシステムのメモリもしくはレジスタ、またはそのような情報を記憶する、伝送する、もしくは表示するその他のデバイス内の物理量として同様に表される他のデータへと変換するコンピュータシステムまたは同様の電子コンピューティングデバイスの動作およびプロセスを指すことが理解されよう。
【００４６】
［メモリベースプロトコルをシミュレートするためのシステムおよび方法］
本発明の実施形態は、テスト対象デバイスの開発の完了に依存せず、実際のＤＵＴが手に入る前にソフトウェアでシミュレートされたデバイスに対するテストソフトウェアをテストしデバッグすることによってテスト開発の効率を向上でき、膨大な数の可変要素をテストするようカスタマイズしてテストの堅牢性および拡張可能性を高めることのできる、ＤＵＴテストを実行するためのシステムおよび方法を提供する。当該テストは、ＤＵＴの仕様にしたがってＡＰＩレベルで行うことができる。開発過程の早い段階でテストおよびデバッグを行うことによって、実際のデバイスをテストに利用可能となったときに、テストソフトウェアのデバッグおよび再設計がより小規模で済み、結果的にデバイス納品日が早まる。
【００４７】
本発明の実施形態は、ＰＣＩｅ（ペリフェラルコンポーネントインターコネクトエクスプレス）データバスを使用してホストデバイス（テスタ）と通信するテスト対象のＮＡＮＤメモリデバイスをシミュレートするためのテストプログラムおよびソフトウェアシミュレータを実行する。ＰＣＩｅは、接続されたデバイスからの読み出しおよび書き込みのトランザクションを行うのに使用する、通常は複数のレーンを含むシリアルバスである。ＰＣＩｅを使用して行われる動作はパケット化され、パケットは、通常はアドレスを含み、任意選択で書き込むデータを含む。パケットは、順次ターゲットデバイスに転送され、ターゲットデバイスは書き込み命令をパケット解除し、含まれるデータで書き込み動作を実行する。読み出し動作は、ＤＵＴに格納されたデータを読み出す。読み出し動作の場合、パケットがターゲットデバイスに転送され、ターゲットデバイスは、データペイロードを含むＣｐｌＤ（データ付き完了（ｃｏｍｐｌｅｔｉｏｎ  ｗｉｔｈ  ｄａｔａ））パケットと称される特別なトランザクション層のパケットを作成することによって読み出し動作を実行し、要求元ＩＤを使用して、読み出し動作を発行した要求元にデータペイロードを返送する。プログラム動作および消去動作もまた、テスタによって頻繁に発行される。
【００４８】
コマンドを発行し、接続されたデバイス（例えばＤＵＴ）間でデータを転送するべく、メモリベース通信プロトコルが当該デバイスにとってアクセス可能な共有メモリ位置をマッピングする。メモリベース通信プロトコルは、ＰＣＩｅプロトコルなどのパケットベースプロトコルを使用して実装することができる。ＰＣＩｅプロトコルはメモリベースの機能を含み、既存のＰＣＩｅの通信バスを基に構築されたメモリベース通信プロトコルのテストは、ＤＵＴの基本動作がテスト中に明らかでないことが多いために特に困難な場合がある。場合によっては、プロトコルは、実行する機能またはメモリ動作のタイプが異なればメモリの異なる部分が使用されるように規定されてよく、ＤＵＴは、ホストデバイスが発行するコマンドに基づいて動作を行うことが予期される。本発明の実施形態は、Ｌｉｎｕｘベースのオペレーティングシステムによって実装されるｍｍａｐ共有メモリ技術などの共有メモリ技術を使用してメモリデバイス（例えばＮＡＮＤフラッシュデバイス）をシミュレートすることで、メモリデバイステスト用の、ＰＣＩｅなどのパケット化通信プロトコル、または既存のＰＣＩｅアーキテクチャに基づいて構築されたプロトコルをシミュレートすることができる。この場合、ＤＵＴおよびＰＣＩｅプロトコルの両方がシミュレートされ、テスタソフトウェア開発を容易にする。
【００４９】
ＰＣＩｅバスの１つの重要な設計的側面は、通常は、ホストにはＰＣＩｅデバイスがメモリマップドデバイスとして見えるという点である。したがって、デバイスはホストからパケット化データを受け取ることができ、ホストは特定のメモリアドレスから、または特定のメモリアドレスに、読み出しおよび書き込みを行うことによってデバイスと相互作用する。したがって、シミュレートされたデバイスが、ホストもアクセス可能なメモリにアクセスできる。本発明の実施形態の一態様は、共有メモリアクセスを使用して、シミュレートされたＤＵＴをテストするためのＰＣＩｅベースのプロトコルをシミュレートすることを含む。
【００５０】
本発明の実施形態は、Ｌｉｎｕｘベースのオペレーティングシステムを使用して実装されてよい。ここで、テストプログラムおよびシミュレートされたデバイスは、オペレーティングシステムによって制御される別個のプロセスとして存在する。両プロセスは、共有メモリアドレス空間にアクセスできる。さらに、複数のデバイスを別個のプロセスとしてシミュレートすることができ、複数のテストプログラムを（例えば、一機のシミュレートされたデバイスにつき１つ）実行して、テスト環境の速度および堅牢性を高めることができる。
【００５１】
本明細書において説明するいくつかの実施形態は、ＤＵＴが行う動作を検証して、ＤＵＴがデバイスの仕様にしたがって動作を行い、予期される結果を生成したか否かを判断するための方法または段階を含む。例えば、いくつかの実施形態によれば、ＤＵＴはデータをメモリ位置に書き込み（プログラム動作）、当該メモリ位置からデータを読み出して（読み出し動作）ホストメモリに返送し、テストプログラムは、データの書き込みおよび／または読み出しに成功したか否かを判断する。これは、ＤＵＴが読み出したデータを、デバイスの仕様にしたがって予期される結果と比較することによって実現されてよい。さらに、消去動作は、消去動作によって消去されるべきデータがメモリ内にもはや格納されていないことを確認することによって検証することができる。他の動作をプローブなどのテスト器具を使用して検証して、ＤＵＴの動作およびＤＵＴに格納されたデータを検出し定量化してよい。検証は、ＤＵＴの不具合を検出および／または修正するためのテストまたはデバッグのプロセスの一部として行うことができる。
【００５２】
図１に関して、例示的なデバイステストシステム１００が、本発明の実施形態にしたがって示される。デバイステストシステム１００は、ＰＣＩｅデータバス１４５を使用して物理デバイス１８０（例えばＤＵＴ）をテストするよう構成される例示的なホストデバイス１０５（テスタシステム）を備える。ホストデバイス１０５は、デバイス１８０の具体的な要件にしたがって当該デバイスをテストするよう設計されたテストプログラムを実行できる。ＰＣＩｅデータバス１４５は、ホストデバイス１０５が発行するコマンドまたは動作にしたがって、ホストデータバッファ１２０からデータを読み出し、ホストデータバッファ１２０にデータを書き込むべく、デバイスのコントローラ１５０によって使用される。例えば、デバイス１８０は、コントローラ１５０を使用してホスト１０５に対してＰＣＩｅ読み出し要求を発行することによってホストデータバッファ１２０のデータにアクセスでき（プログラム動作）、デバイス１８０は、コントローラ１５０を使用してホスト１０５に対してＰＣＩｅ書き込み要求を発行することによってホストデータバッファ１２０にデータを書き込むこと（読み出し動作）ができる。ホストデバイス１０５は、コントローラ１５０内に格納されたメモリの物理位置にマッピングされた共有メモリアドレス空間にコマンドを格納することによって、デバイス１８０のコントローラ１５０にコマンドを発行できる。例えば、コントローラ１５０は、共有アドレス空間１１５の位置にマッピングされた、コントローラ１５０の物理メモリに（例えば、ＰＣＩｅアドレス空間に）格納されたベースアドレスレジスタ（ＢＡＲ）からコマンドを読み出すことができる。
【００５３】
データは共有メモリ空間１１５のホストデータバッファ１２０のブロックに格納され、データのブロックは、インデックス値１２５にしたがってインデックス付けされる。データは、デバイス１８０をテストするよう具体的に構成された既知のデータパターンを含むことができる。ホスト１０５から発せられるコマンドは通常、コマンドで使用するためのメモリブロックを特定するインデックス値を含む。インデックス値はデバイス１８０のコントローラ１５０によって読み出されて、ホストメモリバッファ１２０内のデータ位置が決定される。コントローラがホストコマンドを実行中のとき、コントローラは、（ブロックからデータを取りだすこと、または、ブロックにデータを格納することの何れかを行うために）インデックス値によって特定されるデータブロックを使用する。コントローラ１５０が、ホストデバイス１０５が発行したコマンドに対応する動作を完了したとき、コントローラ１５０は、完了インジケータをホストデバイス１０５に送り、当該インジケータは完了キュー１３０に格納される。コマンドはＢＡＲ２空間（コマンドキュー）１４０Ｂ内にデータ構造として格納またはキュー追加され、データ構造は、ＩＤ値、インデックス値、メモリ位置、および他の引数を含んでよい。プログラムコマンドの場合、ホストデバイス１０５によって完了インジケータが読み出されたとき、ホストデータバッファ１２０に格納された対応するインデックスはクリアされ、新たなデータ用に再使用されてよい。読み出しコマンドの場合、完了インジケータは、ホストが処理のためにデータを利用可能であることをホスト１０５に知らせる。
【００５４】
ホストデータバッファ１２０、インデックス１２５、および完了キュー１３０は、ホストデバイスの物理メモリに格納され、メモリマップドデータ１１５としてコントローラ１５０がアクセス可能である。デバイス１８０はホストからパケット化データを受け取ることができ、ホストは特定のメモリアドレスから、または特定のメモリアドレスに、読み出しおよび書き込みを行うことによってデバイスと相互作用できる。したがって、デバイス１８０は、ホストもアクセス可能なメモリにアクセスできる。
【００５５】
いくつかの実施形態によれば、コントローラ１５０は、アドレス変換およびマッピングなどの特定のデータ、ならびにホストデバイス１０５が発行するコマンドを格納するための１または複数のＢＡＲにアクセスする。ベースアドレスレジスタ（例えば、ＢＡＲ０  １３５ＡおよびＢＡＲ２  １４０Ａ）は物理的にはコントローラ１５０内に格納されており、コントローラ１５０にとってアクセス可能なＰＣＩｅアドレス空間から、ホストデバイス上の共有メモリアドレス空間１１５にマッピングされる。例えば、ＢＡＲ０空間１３５Ｂは、ＰＣＩｅアドレス空間の物理メモリアドレスを格納でき、コントローラ１５０上のＢＡＲ０  １３５Ａにマッピングされる。プログラムコマンドをコントローラ１５０が受け取ったとき、コントローラはＢＡＲ０空間１３５Ｂから、コマンドのインデックスと関連付けられた物理メモリアドレスを読み出して、ＰＣＩｅアドレス空間からホストメモリに書き込む。ＢＡＲ２空間１４０Ｂは、ホストデバイス１０５が発行するコマンドがコントローラ１５０によって実行される前に当該コマンドを格納するためのコマンドキューとして使用できる。ＢＡＲ２  １４０Ａのデータは、ＰＣＩｅアドレス空間においてデバイス１８０のコントローラ１５０上に物理的に格納されており、ＢＡＲ２  １４０Ａにおいて、ホストデバイス上の共有メモリアドレス空間１１５にマッピングされる。 
【００５６】
コマンドは、コントローラ１５０がホストデバイス１０５から受け取ることができ、コマンドが実行される前にＢＡＲ２空間１４０Ｂのコマンドキューに格納（キュー追加）できること、および、コマンドは一般的に任意の順序で実行できることを理解されたい。言い換えると、コマンドは、ホストデバイス１０５が発行した順序またはコントローラ１５０が読み出した順序と同一の順序で実行されることは求められず、コントローラ１５０は、コマンド実行のための効率的な順序を決定できる。したがって、数個のコマンドをコマンドキューに格納でき、コントローラ１５０は、次にどのコマンドを実行するかを決定できる。
【００５７】
コントローラ１５０は、ＮＡＮＤダイ１７５と通信チャネル１６５を介して、およびＮＡＮＤダイ１９５と通信チャネル１７０を介して通信する。通信チャネル１６５および１７０は、それぞれが対応するダイと並行して通信するよう動作可能である。ＮＡＮＤダイは、ダイ１７５および１９５のプレーン、ブロック、ページ、およびセクタにデータを格納する。
【００５８】
いくつかの実施形態によれば、ＮＡＮＤダイ１７５および１９５はそれぞれ、コントローラ１５０がデータをダイに書き込む前にデータを格納するための各々のキューと通信する。例えば、通信チャネル１６５を介してＮＡＮＤダイ１７５に書き込まれる対象のデータは、キュー１８５に格納でき、通信チャネル１７０を介してＮＡＮＤダイ１９５に書き込まれる対象のデータは、キュー１９０に格納できる。ＮＡＮＤダイ１７５および１９５に書き込まれる対象のデータは、ＰＣＩｅバス１４５を介してコントローラ１５０がホストメモリ１２０から読み出すことができ、ＮＡＮＤダイ１７５および１９５から読み出されたデータは、当該データがホストメモリ１２０に書き込まれる前にキュー１８５および１９０に格納することができる。
【００５９】
フラッシュの記憶位置（例えば、ダイ１７５または１９５）にデータを書き込むべくプログラムコマンドが発行されるとき、ホスト１０５は、データをロードし、当該データを空きインデックス位置に書き込む。次に、ホスト１０５は、インデックス位置および記憶位置を含むプログラムコマンドを発行する。ＤＵＴ１８０は当該コマンドを処理し、インデックス（例えばインデックス１２５）からデータを読み出し、データを記憶位置に格納する。
【００６０】
ＤＵＴ１８０に格納されたデータを読み出すべく読み出しコマンドがホスト１０５によって発行されるとき、読み出しコマンドは、インデックス（例えばインデックス１２５）および記憶位置を含む。データは記憶位置から読み出され、ＤＵＴによってインデックスに書き込まれる。
【００６１】
ホストによって消去動作が発行されるとき、ＤＵＴ１８０は、消去コマンドに示された記憶位置のデータ（例えば、１または複数のディスクファイル）を消去する。消去対象のデータ量（例えば、ファイル数）を示すのには、長さフィールドまたはサイズフィールドを使用できる。
【００６２】
図２に関して、例示的なデバイステストシステム２００が、本発明の実施形態にしたがって示される。デバイステストシステム２００は、シミュレートされたデバイス２８０（例えば、シミュレートされたＤＵＴ）をメモリベース通信プロトコル（例えば、ＰＣＩｅ、またはＰＣＩｅを使用して実装される通信プロトコル）を使用してテストするよう構成される例示的なテストプログラム２１５を備える。当該メモリベース通信プロトコルもまた、シミュレートされる。テストプログラム２１５は概して、ホストデバイス１０５と同一の機能を行い、シミュレートされたデバイス２８０は、デバイス１８０の機能（図１参照）をエミュレートするよう構成することができる。図２では、テスタシステムおよびシミュレートされたＤＵＴ２８０の両方が、同一のＬｉｎｕｘベースコンピュータシステム２０５のそれぞれ異なる部分に実装される。
【００６３】
物理データバス（例えばＰＣＩｅ）を使用してテストプログラム２１５とシミュレートされたデバイス２８０との間でデータを転送するのではなく、共有メモリアドレス空間を利用して、テストプログラム２１５とシミュレートされたデバイス２８０との間でデータを共有し、ＰＣＩｅバスを効果的にシミュレートする。さらに、シミュレートされたデバイス２８０は、ディスクファイル２７５および２９５を使用して、コントローラ２５０が管理する、データ格納用ＮＡＮＤダイをシミュレートすることができる。コントローラ２５０は、共有メモリ空間からホストコマンドを読み出し、対応する動作を行う。例えば、コントローラは、共有メモリ空間２２０の（特定されたインデックスを含む）コマンドキュー２４５から読み出しコマンドにアクセスし、ディスクファイル２７５および／または２９５から対応するデータを読み出し、当該データをホストデータバッファ２２５へ、インデックスによって特定されるブロックに書き込むことができる。プログラムコマンドおよび消去コマンドについてもまた、シミュレートすることができる。このようにして、実際のデバイスが十分に開発され、またはプロトタイプが製造される前に、シミュレートされたデバイス２８０をテストプログラム２１５を使用してテストして、ＤＵＴ（例えば、図１のデバイス１８０）をテストしデバッグすることができる。いくつかの実施形態によれば、シミュレートされたデバイス２８０は、ＰＣＩｅ読み出し要求をテストプログラム２１５に発行することによって、テストプログラム２１５の共有メモリアドレス空間２２０から（プログラムコマンドからの）データを読み出し、また、シミュレートされたデバイス２９５は、ＰＣＩｅ書き込み要求をテストプログラム２１５に発行することによって、テストプログラム２１５の共有メモリアドレス空間２２０に（読み出しコマンドからの）データを書き込む。
【００６４】
テストプログラム２１５およびシミュレートされたデバイス２８０は、Ｌｉｎｕｘベースのオペレーティングシステム２１０を使用してＣＰＵ２０５によって実行されることが理解される。マッピングされたファイル（例えば、ｍｍａｐを使用してマッピングされたファイル）を使用した、テストプログラム２１５とシミュレートされたデバイス２８０との間でのデータおよびコマンドの転送について、ＰＣＩｅデータバスがソフトウェアでシミュレートされる。マッピングされたファイルは、共有物理メモリのようにふるまい、テストプログラム２１５およびシミュレートされたデバイス２８０の両方のメモリ空間において利用可能である。完了キュー２３５、インデックス２３０、ホストデータバッファ２２５、およびあらゆるＢＡＲを、マッピングされたファイルを使用して共有物理メモリとして実装することができる。このようにして、共有メモリ空間２２０のデータは、テストプログラム２１５およびシミュレートされたデバイス２８０の両方にとってアクセス可能である。例えば、コマンドは、共有メモリアドレス空間２２０のＢＡＲ２  ２４５Ａにコマンドを書き込むことによってテストプログラム２１５が発行でき、ここで、ＢＡＲ２  ２４５Ａのメモリ空間は、ＰＣＩｅアドレス空間にマッピングされ、ＢＡＲ２空間２４５Ｂにおいてコントローラ上に物理的に格納されるものであり、コントローラ２５０は、ＢＡＲ２空間２４５Ｂからコマンドを読み出して、対応する動作を実行する。
【００６５】
共有メモリアドレス空間２２０がデバイスのコントローラ２５０によってアクセスされて、テストプログラム２１５が発行するコマンドにしたがって、ホストデータバッファ２２５からデータが読み出され（プログラムコマンド）、ホストデータバッファ２２５にデータが書き込まれる（読み出しコマンド）。データは共有メモリアドレス空間２２０のホストデータバッファ２２５に格納され、当該データは、インデックス値２３０にしたがってインデックス付けされる。インデックス値は、デバイス２８０のコントローラ２５０によって読み出され、直近のコマンドと関連付けられた、ホストメモリバッファ２２５内のデータの位置が決定される。コントローラ２５０が、テストプログラム２１５が発行したコマンドに対応する動作を完了したとき、コントローラ２５０は、テストプログラム２１５に完了インジケータを送り、完了インジケータは、完了キュー２３５に格納される。完了インジケータは、それが関連付けられたコマンドを特定する。テストプログラム２１５が発行したコマンドは、共有メモリアドレス空間２２０に（例えば、ベースアドレスレジスタに）データ構造として格納され、データ構造は、ＩＤ値、インデックス値、メモリ位置、およびその他の引数（例えば、長さ、サイズなど）を含んでよい。完了インジケータがテストプログラム２１５によって読み出されたとき、コマンドがプログラムコマンドであるならば、ホストデータバッファ２２５に格納された対応するインデックスはクリアされ、新たなデータ用に再使用されてよい。コマンドが読み出しコマンドである場合は、ホストは、完了インジケータの受け取りに応じてデータにアクセスすることが可能である。
【００６６】
いくつかの実施形態によれば、コントローラ２５０は、アドレス変換およびマッピングなどの特定のデータ、ならびにテストプログラム２１５が発行するコマンドにアクセスするために１または複数のベースアドレスレジスタ（ＢＡＲ）にアクセスする。ベースアドレスレジスタ（例えば、ＢＡＲ０空間２４０ＢおよびＢＡＲ２空間２４５Ｂ）は、テストプログラム２１５の共有メモリアドレス空間にマッピングされ、読み出しコマンドの結果、ＰＣＩｅアドレス空間においてコントローラ２５０内に物理的に格納される。コマンドがプログラムコマンドである場合は、コントローラはインデックス値を使用して、データが読み出されるメモリアドレスを決定する。 
【００６７】
ＢＡＲ０空間２４０Ｂは、ホストデータバッファ２２５のデータにアクセスするために、コントローラ２５０のＰＣＩｅアドレス空間にマッピングされた物理メモリアドレスを格納できる。プログラムコマンドをコントローラ２５０が受け取ったとき、コントローラは、ＢＡＲ０空間２４０Ｂからコマンドのインデックスと関連付けられた物理メモリアドレスを読み出して、ホストメモリに書き込むための物理メモリアドレスを決定する。 
【００６８】
ＢＡＲ２  ２４５Ａは、テストプログラム２１５が発行したコマンドを、コントローラ２５０が実行する前に格納するためのコマンドキューとして使用することができる。コマンドは、コントローラ２５０がテストプログラム２１５から受け取ることができ、当該コマンドが実行される前にＢＡＲ２空間２４５Ｂのコマンドキューに格納できること、および、コマンドは任意の順序で実行できることを理解されたい。言い換えると、コマンドは、テストプログラム２１５が発行した順序、またはコントローラ２５０が読み出した順序と同一の順序で実行されることは求められず、コントローラ２５０は、コマンドの実行順序を決定できる。
【００６９】
コントローラ２５０は、データの格納にディスクファイル２７５および２９５を使用して、ＮＡＮＤダイ（例えば、図１のＮＡＮＤダイ１７５および１９５）をシミュレートする。当該ディスクファイルは、ＮＡＮＤフラッシュのブロックをエミュレートするやり方で書き込むことができる。ここで、ファイルはそれぞれ特定のブロックと関連付けられ、データのページおよびセクタを含む。ブロックを表すファイルを、各ＮＡＮＤダイのプレーンと関連付けることもできる。テストプログラム２１５によってコマンドが発行されるとき、ディスクファイル２７５または２９５に格納されたデータのメモリ位置をコマンドの引数に含めて、コマンドに応答してコントローラ２５０がどのデータにアクセスする（読み出す、または書き込む）べきかを示すことができる。このようにして、ＤＵＴそのものが物理的に生産され、従来の手段を使用してテスト可能となる前に、シミュレートされたデバイス２８０は、ＮＡＮＤフラッシュからの読み出し（およびＮＡＮＤフラッシュへの書き込み）に関してＤＵＴをエミュレートできる。
【００７０】
いくつかの実施形態によれば、ディスクファイル２７５に書き込まれる対象のデータはキュー２６５に格納され、ディスクファイル２９５に書き込まれる対象のデータはキュー２７０に格納される。ディスクファイル２７５および２９５に書き込まれる対象のデータは、コントローラ２５０によってホストメモリ２２５から読み出されてよく、最初にキュー２６５および２７０に書き込まれてよい。さらに、コントローラ２５０がディスクファイル２７５および２９５から読み出したデータは、当該データがホストメモリ２２５に書き込まれる前にキュー２６５および２７０に格納することができる。シミュレートされたＤＵＴ２８０を使用し、さらに上述のメモリマッピング技術によってＰＣＩｅバスをシミュレートすることによって、本発明は、実際の物理ＤＵＴが利用可能となる前にテストプログラム２１５を開発およびデバッグできる環境を可能にする。 
【００７１】
図３に関して、本発明の実施形態にしたがって、複数のシミュレートされたデバイスを同時にテストするための例示的なテスト環境３００が示される。テストワークステーション３０５が、テストスイート３１０を実行し、テストスイート３１０は、ユーザインタフェースと、ソフトウェア機能と、システムテストモジュール３１５とインタフェースをとるための制御ＡＰＩとを提供する。システムテストモジュール３１５は複数の組み込みプロセッサを有し、当該プロセッサはそれぞれＬｉｎｕｘベースのオペレーティングシステムを実行して、シミュレートされたデバイスをテストするためのテストサイトを提供する。
【００７２】
各テストサイトには、メモリベース通信プロトコルをシミュレートしてＤＵＴをテストするための独自のメモリマップドエリア（例えば、ｍｍａｐされたメモリ）が割り当てられる。例えば、テストサイト３２０は、複数のテストプログラムを実行して、最大８機のシミュレートされたＤＵＴ（例えば、Ｄｕｔ１〜Ｄｕｔ８）を同時にテストできる。ここで、各テストプログラムおよび各シミュレートされたＤＵＴは、Ｌｉｎｕｘベースのオペレーティングシステムによって別個のプロセスとして実行される。テストサイト３２５も、同時に８機のシミュレートされたＤＵＴ（例えば、Ｄｕｔ９〜Ｄｕｔ１６）および対応するテストプログラムを実行できる。システムテストモジュール３１５が有する組み込みプロセッサの数は、本発明の実施形態の範囲内で増減してよい。例えば、システムテストモジュール３１５は、Ｌｉｎｕｘベースのオペレーティングシステムを実行する組み込みプロセッサを最大９６個含んで、最大７６８機のＤＵＴを並行してテストできる。テストサイト３２０および３２５は、例えば、図２に示すテストプログラム２１５およびシミュレートされたデバイス２８０の複数のインスタンスを実行できる。
【００７３】
テストスイート３１０は、さまざまな動作状態をシミュレートするべく、ＤＵＴをテストするためのパラメータおよび構成を変更する機能を有することができる。例えば、ある一組のＤＵＴをある１つの構成を使用してテストでき、別の一組のＤＵＴを異なる構成を使用してテストでき、それらのＤＵＴの結果を比較して、これらの構成によって生じる結果がどのように異なるかを決定することができる。さらに、個々のＤＵＴは、迅速にエラーを検出し、素早いデバッグを行うために、さまざまな動作状態をシミュレートするよう構成することができる。
【００７４】
いくつかの実施形態によれば、テストスイート３１０は、シミュレートされたデバイスのストレステストを行うために、ランダムまたは擬似ランダムな遅延（例えば、読み出し遅延または書き込み遅延）を導入できる。
【００７５】
図４に関して、図１に示すシステム用のデータフロー図４００が示される。データフロー図４００は、テスト対象の物理デバイス４６５をテストするための例示的なソフトウェア階層またはソフトウェアスタックを示す。階層は、ホストシステムによって実行されるテストプログラム４０５を含み、特定のデバイス（ＤＵＴ）４６５に対してデバイステストを行うよう構成される。テストプログラム４０５は、デバイス４６５の具体的なテスト要件にしたがって、デバイス４６５の製造業者によって提供されることが多い。ＡＰＩライブラリ４１０は、テストプログラム４０５に機能を提供するアクセスライブラリを含み、当該機能は、デバイス４６５のハードウェアの制御に使用される。ＡＰＩライブラリ４１０の機能は、テストプログラム４０５によって呼び出され、ソフトウェアインタフェース４１５を介して実行される。ソフトウェアインタフェース４１５は、デバイス４６５の通信インタフェースと通信するよう動作可能なデバイスプロトコル（例えばＰＣＩｅ）であり、マシン別デバイスライブラリ４２０、カーネルインタフェース４２５、およびＬｉｎｕｘデバイスドライバ（カーネルモジュール）４３０を含む。ソフトウェアインタフェース４１５は、デバイスドライバ４４０を用いてインタフェース４３５を介して通信を行い、ルートコンプレックスデバイス４４５が、ホストシステムのプロセッサおよびメモリのサブシステムをデバイス４６５のＰＣＩｅコンポーネント４５０のＰＣＩｅスイッチファブリック４５５に接続する。メモリ管理ユニット４６０が、ホストシステムのメインメモリとデバイス４６５との間のインタフェース４３５を介したメモリアクセスを容易にする。
【００７６】
図５に関して、データフロー図５００は、図２に示すシステム用である、本発明の実施形態に係る、メモリベース通信プロトコルをシミュレートして、シミュレートされたデバイス５４０をテストするための例示的なソフトウェア階層またはソフトウェアスタックを示す。データフロー図４００と同様に、ＡＰＩライブラリ５１０の機能がテストプログラム５０５によって呼び出され、ソフトウェアインタフェース５１５を介して実行される。ソフトウェアインタフェース５１５は、シミュレートされたデバイス５４０とインタフェースをとり、マシン別デバイスライブラリ５２０およびカーネルインタフェース５２５を含む。カーネルインタフェース５２５は、ＰＣＩｅ、またはＰＣＩｅに基づいて構築されたメモリベースプロトコルなどのメモリベース通信プロトコルをエミュレートできるシミュレートされた通信プロトコル５３０と相互作用する。
【００７７】
シミュレートされたプロトコル５３０とシミュレートされたデバイス５４０との間の相互作用は、ｍｍａｐを使用して実装される共有メモリ５３５などの、Ｌｉｎｕｘベースのオペレーティングシステムの共有メモリ技術によって容易になる。共有メモリ５３５を使用して、テストプログラム５０５を実行するホストデバイスは、特定のメモリアドレスを使用してデータの読み出しおよび書き込みを行うことによって、シミュレートされたデバイス５４０と相互作用する。したがって、本発明の実施形態において、シミュレートされたデバイスをデバイスの開発が完了する前にテストするためのデータフロー５００を提供することにより、テスタソフトウェアを開発およびデバッグすることができる。これにより、物理デバイスが利用可能となる前に、ソフトウェアでシミュレートされたデバイスをテストしデバッグすることによってテスタソフトウェアの生産開発の効率を向上させることができ、膨大な数の可変要素をテストするようテスタソフトウェアをカスタマイズしてテストの堅牢性および拡張可能性を高めることができる。
【００７８】
図６に関して、本発明の実施形態にしたがって、シミュレートされたデバイスをテストするための例示的な一連のコンピュータ実装段階６００が示される。コンピュータ実装段階６００は、Ｌｉｎｕｘベースのオペレーティングシステムを使用して行われてよい。ここで、テストプログラムおよびシミュレートされたデバイスのプログラムは、オペレーティングシステムによって制御される別個のプログラムまたはプロセスとして存在する。両プロセスは、共有メモリアドレス空間にアクセスできる。さらに、複数のデバイスを別個のプロセスとしてシミュレートすることができ、複数のテストプログラムを（例えば、一機のシミュレートされたデバイスにつき１つ）実行して、テスト環境の速度および堅牢性を高めることができる。
【００７９】
段階６０５において、共有メモリ空間のホストメモリ（例えば、ホストデータバッファ）の特定の位置に、既知のデータパターンが格納される。当該共有メモリ空間のホストメモリへは、シミュレートされたデバイスと、シミュレートされたデバイスをテストするべく命令を実行するテストプログラムとがともにアクセス可能である。段階６１０において、テストプログラムが、共有メモリ空間にコマンドを格納する。コマンドは、インデックス、ＩＤ、メモリ位置、および任意選択で、データ長またはデータサイズなどの他の引数のフィールドを含むデータ構造に格納される。いくつかの実施形態によれば、コマンドは、シミュレートされたデバイスのコントローラによる実行のためにコマンドをキューに投入するべく、テストプログラムおよびシミュレートされたデバイスの両方にとってアクセス可能となるよう、メモリにマッピングされたＢＡＲに格納され、キューに投入されたコマンドは、任意の順序で実行されてよい。
【００８０】
段階６１５において、シミュレートされたデバイスが、共有メモリ空間のデータ構造からコマンドにアクセスする。コマンドへのアクセスは、データ構造からインデックス、ＩＤ、メモリ位置、および他の引数を読み出すことを含むことができる。
【００８１】
段階６２０において、シミュレートされたデバイスが、コマンドＩＤによって規定される動作を、インデックスが示すメモリ位置を使用して行う。段階６２０は通常、共有メモリアドレス空間のデータにアクセスすることを含む。段階６２０はさらに、シミュレートされたデバイスが共有メモリ位置（例えば、ＢＡＲ）にアクセスして、インデックスが示すデータの位置をホストメモリの物理メモリ位置にマッピングする物理アドレスマッピングをルックアップすることを含んでよい。以下でより十分に説明するように、動作には、プログラム動作、読み出し動作、消去動作などが含まれてよい。例えば、動作は、フラッシュメモリ（例えば、ＮＡＮＤフラッシュ）の１または複数のダイに対する読み出しおよび書き込みをシミュレートする方式によるディスクファイルに対するデータの読み出しまたは書き込みを含むことができる。動作はさらに、データをディスクファイルに書き込む前に、データを１または複数のキューに書き込むことを含んでよい。
【００８２】
ホストが発行したプログラム動作の場合、データ構造中のＩＤは、当該動作が、データ構造のインデックスによって示されるホストメモリ位置に予め格納されたデータを使用して、プログラム動作を実行することを含むことを示し、段階６２０は、シミュレートされたデバイスのコントローラが、インデックスによって示されるメモリ位置に応じたホストメモリ内のデータの読み出し要求（例えば、ＰＣＩｅ読み出し要求）を行うことをさらに含む。シミュレートされたデバイスのコントローラは、ホストメモリからデータを取得し、当該データを、同様にデータ構造中のメモリ位置によって示される位置の１または複数のディスクファイルに書き込む。データ構造中の長さフィールドまたはサイズフィールドは、ホストメモリから読み出されてディスクファイルに書き込まれる対象のデータ量を示すことができる。いくつかの実施形態によれば、書き込むデータの位置はインデックスによって示され、当該位置は共有メモリ空間（例えば、ＢＡＲ）において規定されるメモリマッピングにしたがって、ＰＣＩｅアドレス空間の物理メモリ位置に変換される。いくつかの実施形態によれば、ディスクファイルに書き込まれる対象のデータは、まずキューに書き込まれ、その後ディスクファイルに書き込まれる。プログラムコマンドが完了すると、ＤＵＴは完了インジケータを発行し、それによりホストはデータブロックを解放できる。
【００８３】
読み出し動作の場合、データ構造中のＩＤは、当該動作が、読み出し動作を実行して、デバイスの１または複数のディスクファイルに格納されたデータを取得することを含むことを示し、段階６２０は、シミュレートされたデバイスのコントローラが、データ構造中のメモリ位置によって示される位置の１または複数のディスクファイルからデータを取得し、さらに、提供されたインデックスにしたがって、ホストメモリ内の位置にデータを書き込むこと（例えば、ＰＣＩｅ書き込み要求を発行すること）をさらに含む。データ構造中の長さフィールドまたはサイズフィールドは、ディスクファイルから読み出されてホストメモリに書き込まれる対象のデータ量を示すことができる。いくつかの実施形態によれば、インデックスによって示されるデータを書き込むためのメモリ位置は、共有メモリ空間において（例えば、ＢＡＲにおいて）規定されるメモリマッピングにしたがって、ＰＣＩｅアドレス空間の物理メモリ位置に変換される。読み出し動作が完了すると、データが特定されたブロックにおいて利用可能である旨を、完了インジケータがホストに通知する。
【００８４】
消去動作の場合、データ構造中のＩＤは、当該動作が、消去動作を行ってデータを消去することを含むことを示し、段階６２０は、シミュレートされたデバイスのコントローラが、データ構造中のメモリ位置によって示される位置の１または複数のディスクファイルを消去することをさらに含む。データ構造中の長さフィールドまたはサイズフィールドは、消去対象のデータ量（例えば、ファイル量）を示すことができる。いくつかの実施形態によれば、各ディスクファイルはＮＡＮＤフラッシュメモリのブロックを表し、消去動作はブロック単位（ファイル単位）で行われる。いくつかの実施形態によれば、消去動作は、メモリから１または複数のディスクファイルを削除することを含む。
【００８５】
段階６２５において、シミュレートされたデバイスが、完了インジケータをテストプログラムに送り、動作が完了したことを示す。完了インジケータは、共有メモリ空間のＢＡＲに実装された完了キューに格納できる。さらに、プログラムコマンドの場合、段階６２５は、コマンド完了後、各インデックス位置を解放することを含むことができる。読み出しコマンドの場合、完了インジケータは、データが読み出し準備完了であることをホストに通知する。
【００８６】
図７に関して、本発明の実施形態にしたがって、シミュレートされたデバイスをテストするための例示的な一連のコンピュータ実装段階７００が示される。コンピュータ実装段階７００は、Ｌｉｎｕｘベースのオペレーティングシステムを使用して行われてよい。ここで、テストプログラムおよびシミュレートされたデバイスのプログラムは、オペレーティングシステムによって制御される別個のプログラムまたはプロセスとして存在する。両プロセスは、共有メモリ空間にアクセスできる。さらに、複数のデバイスを別個のプロセスとしてシミュレートすることができ、複数のテストプログラムを（例えば、一機のシミュレートされたデバイスにつき１つ）実行して、テスト環境の速度および堅牢性を高めることができる。
【００８７】
段階７０５において、共有メモリ空間のホストメモリ（例えば、ホストデータバッファ）の特定の位置に、既知のデータパターンが格納される。当該共有メモリ空間のホストメモリへは、シミュレートされたデバイスと、シミュレートされたデバイスをテストするべく命令を実行するテストプログラムとがともにアクセス可能である。
【００８８】
段階７１０において、ホストが、ＤＵＴにプログラムされる対象のデータをメモリブロックに格納し、テストプログラムが、プログラムコマンドを共有メモリ空間に格納する。コマンドは、インデックス、ＩＤ、メモリ位置、および任意選択で、データ長またはデータサイズなどの他の引数のフィールドを含むデータ構造に格納される。いくつかの実施形態によれば、コマンドは、シミュレートされたデバイスのコントローラによる実行の前にコマンドを格納するべく、テストプログラムおよびシミュレートされたデバイスの両方にとってアクセス可能なＢＡＲに格納され、格納されたコマンドは、任意の順序で実行されてよい。
【００８９】
段階７１５において、シミュレートされたデバイスが、共有メモリ空間からプログラムコマンドにアクセスする。コマンドにアクセスすることは、共有メモリ空間のデータ構造から、インデックス、ＩＤ、メモリ位置、および他の引数を読み出すことを含むことができる。
【００９０】
段階７２０において、シミュレートされたデバイスのコントローラが、共有メモリ空間からデータを読み出す。当該データは、段階７１０において共有メモリ空間に格納されたデータである。シミュレートされたデバイスが読み出したデータの位置は、インデックスによって示される。コントローラは、例えば、ＰＣＩｅ読み出し要求をテストプログラムに対して発行することによって、ホストメモリからデータを取得できる。段階７２０はさらに、シミュレートされたデバイスが共有メモリ位置（例えば、ＢＡＲ）にアクセスして、インデックスが示すデータの位置をホストメモリの物理メモリ位置にマッピングする物理アドレスマッピングをルックアップすることを含んでよい。
【００９１】
段階７２５において、シミュレートされたデバイスが、段階７２０において読み出したデータを、データ構造に格納されたメモリ位置が示す位置の１または複数のディスクファイルに書き込む。いくつかの実施形態によれば、ディスクファイルに書き込まれる対象のデータは、当該ディスクファイルに書き込まれる前に、まずキューに書き込まれる。
【００９２】
段階７３０において、シミュレートされたデバイスが、完了インジケータをテストプログラムに送り、プログラム動作が完了したことを示す。完了インジケータは、共有メモリ空間のＢＡＲに実装された完了キューに格納することができる。さらに、段階７３０は、プログラムコマンドが完了した後に、各インデックス位置を解放することを含んでよい。
【００９３】
任意選択的に、段階７３５〜７５０を行って、シミュレートされたデバイスに書き込んだデータを読み戻して、プログラム動作がエラーなく行われたことを検証することができる。
【００９４】
段階７３５において、インデックスと、当該コマンドが読み出し動作を含むことを示すＩＤと、段階７２５においてデータが書き込まれたメモリ位置とを有するデータ構造を使用して、テストプログラムが読み出しコマンドを共有メモリ空間に格納する。
【００９５】
段階７４０において、シミュレートされたデバイスが、共有メモリ空間から読み出しコマンドにアクセスする。当該コマンドにアクセスすることは、共有メモリ空間内のデータ構造から、インデックス、ＩＤ、メモリ位置、および他の引数を読み出すことを含むことができる。
【００９６】
段階７４５において、シミュレートされたデバイスが、読み出しコマンドに応答してメモリ位置からデータを読み出す。
【００９７】
段階７５０において、シミュレートされたデバイスが、インデックスにしたがって、ホストデータバッファ内の第２の位置にデータを書き込む。例えば、シミュレートされたデバイスはＰＣＩｅ書き込み要求を発行して、データをホストデータバッファに書き込むことができる。いくつかの実施形態によれば、書き込み位置はインデックスによって示され、当該位置は、共有メモリ空間に格納されたＢＡＲにおいて規定されたメモリマッピングにしたがって、ＰＣＩｅアドレス空間内の物理メモリ位置に変換される。
【００９８】
段階７５５において、シミュレートされたデバイスが、完了インジケータをテストプログラムに送り、書き込み動作が完了したことを示す。完了インジケータは、共有メモリ空間のＢＡＲに実装された完了キューに格納されてよい。さらに、段階７５５は、読み出しコマンドが完了した後に、各インデックス位置を解放することを含んでよい。
【００９９】
図８に関して、本発明の実施形態にしたがって、例示的なメモリベース通信プロトコルをシミュレートして、シミュレートされたデバイス８４０をテストするためのブロック図およびデータフロー図８００が示される。テストプログラム８１０およびデバイスシミュレーション８４０は、Ｌｉｎｕｘベースのオペレーティングシステム内のＣＰＵ８０５によって実行される。テストプログラム８１０およびデバイスシミュレーション８４０は、ＣＰＵ８０５によって別個のプロセスまたはプログラムとして実行されてよく、両プロセスまたはプログラムは、ホストデータバッファ８１５を含む共有メモリアドレス空間８２０にアクセスしてよい。デバイスシミュレーション８４０は、読み出しコマンドに応答してデータ８５５をテストプログラム８１０に送ることができ、デバイスシミュレーション８４０は、プログラムコマンドに応答して、ホストデータバッファ８１５から取得したデータ８５５を１または複数のディスクファイル８５０に書き込むことができる。動作完了後、デバイスシミュレーション８４０は完了インジケータ８６５を送り、完了インジケータは、完了キュー８２５に格納されてよい。
【０１００】
デバイスシミュレーション８４０は、テストプログラム８１０が発行したコマンド８６０に応答して動作（例えば、プログラム、読み出し、消去）を行う。それらのコマンドは、テストプログラム８１０およびデバイスシミュレーション８４０がともにアクセス可能な、ベースアドレスレジスタ８３０などの共有メモリ空間またはマッピングされたメモリ空間に格納できる。ベースアドレスレジスタ８５５が、ＰＣＩｅアドレス空間においてデバイスシミュレーション８４０のメモリに実装され、テストプログラム８１０のメモリ空間（ベースアドレスレジスタ８３０）にマッピングされる。コマンドは、ＩＤ、インデックス、メモリ位置、および他の引数のフィールドを含むデータ構造として格納されてよい。テストプログラム８１０によって発行されたコマンドは、コマンドキュー８４５に格納でき、デバイスシミュレーション８４０は、任意の順序でコマンドを実行できる。
【０１０１】
［例示的なコンピュータシステム］
本発明の実施形態は、デバイス開発の完了に依存せず、実際のＤＵＴが手に入る前にソフトウェアをテストしデバッグして開発の効率を向上させることができ、膨大な数の可変要素をテストするようカスタマイズしてテストの堅牢性および拡張可能性を高めることのできる、シミュレートされたＤＵＴのテストを行うための電子システムに関する。いくつかの実施形態は、テストプログラムと、ＰＣＩｅ（ペリフェラルコンポーネントインターコネクトエクスプレス）データバスを使用してホストデバイスと通信するＮＡＮＤメモリデバイスをシミュレートするためのソフトウェアシミュレータとを実行する。以下の記載では、本発明の実施形態を実装するためのプラットフォームとして使用可能な、電子システムまたはコンピュータシステムの一例について説明する。
【０１０２】
図９の例では、例示的なコンピュータシステム９１２（例えば、エージェントシステムまたは監視システム）は、ソフトウェアアプリケーションを実行するための中央演算処理装置（ＣＰＵ）９０１と、任意選択で、オペレーティングシステム（例えば、Ｌｉｎｕｘ、またはＬｉｎｕｘベースのオペレーティングシステム）とを備える。ランダムアクセスメモリ９０２およびリードオンリメモリ９０３が、ＣＰＵ９０１が使用するアプリケーションおよびデータを格納する。さらに、コンピュータシステム９１２のメモリ空間（例えば、ランダムアクセスメモリ９０２のメモリ空間）は、コマンドの発行およびデバイス間でのデータの転送のために、接続されたデバイス（例えば、ＤＵＴ）にとってアクセス可能な共有メモリ位置をマッピングするのに使用されてよく、ＰＣＩｅなどのパケットベースプロトコルを使用して実装されてよい。場合によっては、プロトコルは、実行する機能またはメモリ動作のタイプが異なればメモリの異なる部分が使用されるように規定されてよく、ＤＵＴは、ホストデバイスが発行するコマンドに基づいて動作を行うことが予期される。このようにして、本発明の実施形態は、共有メモリ技術を使用して、メモリデバイス（例えば、ＮＡＮＤフラッシュデバイス）をシミュレートして、メモリデバイステスト用のパケット化通信プロトコルをシミュレートすることができる。 
【０１０３】
データ記憶デバイス９０４は、アプリケーションおよびデータ用に不揮発性ストレージを提供し、固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリデバイス、および、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光記憶デバイスを含んでよい。任意選択的なユーザ入力９０６および９０７は、１または複数のユーザからの入力をコンピュータシステム９１２に伝えるデバイス（例えば、マウス、ジョイスティック、カメラ、タッチスクリーン、および／またはマイク）を含む。
【０１０４】
ＵＳＢまたはＢｌｕｅｔｏｏｔｈ（登録商標）などの有線通信および／または無線通信を含み、かつ、イントラネットまたはインターネット（例えば、８０２．１１無線規格）を含む電子通信ネットワークを介して、通信またはネットワークインタフェース９０８は、コンピュータシステム９１２が他のコンピュータシステム、ネットワーク、またはデバイスと通信することを可能にする。任意選択的な表示デバイス９１０は、コンピュータシステム９１２からの信号に応答して視覚情報を表示可能な任意のデバイスであってよく、例えばフラットパネルタッチセンサ式ディスプレイを含んでよい。コンピュータシステム９１２のコンポーネントは、１または複数のデータバス９００を介して接続されてよい。当該コンポーネントは、ＣＰＵ９０１、メモリ９０２／９０３、データストレージ９０４、ユーザ入力デバイス９０６、およびグラフィックスサブシステム９０５を含む。
【０１０５】
図９の実施形態において、任意選択的なグラフィックスサブシステム９０５が、データバスおよびコンピュータシステム９１２のコンポーネントと接続されてよい。グラフィックスシステムは、物理グラフィックス処理ユニット（ＧＰＵ）９０５およびグラフィックス／ビデオメモリを含んでよい。グラフィックスサブシステム９０５は、表示データを任意選択的な表示デバイス９１０に出力する。表示デバイス９１０は、ＨＤＭＩ（登録商標）、ＤＶＩ、ＤｉｓｐｌａｙＰｏｒｔ、ＶＧＡなどを使用してグラフィックスサブシステム９０５に通信可能に接続されてよい。
【０１０６】
いくつかの実施形態が、１または複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的状況で説明されてよい。通常、プログラムモジュールは、特定のタスクを行い、または特定の抽出データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、さまざまな実施形態においては必要に応じて組み合わされてよく、または分散されてもよい。
【０１０７】
本発明の実施形態の説明は、以上の通りである。本発明が特定の実施形態において説明されてきたが、本発明は、これらの実施形態によって限定されるものと解釈されるのではなく、むしろ、以下の特許請求の範囲にしたがって解釈されるべきであることを理解されたい。
【図１】
2020198087.tif 000003
【図２】
2020198087.tif 000004
【図３】
2020198087.tif 000005
【図４】
2020198087.tif 000006
【図５】
2020198087.tif 000007
【図６】
2020198087.tif 000008
【図７】
2020198087.tif 000009
【図８】
2020198087.tif 000010
【図９】
2020198087.tif 000011
【外国語明細書】
2020198087000001.pdf