(57)【特許請求の範囲】
【請求項１】
外部メモリ（２１０）の設計に基づくコマンドのタイミング要件を有する外部メモリに接続されたメモリ物理レイヤインタフェース（ＰＨＹ）（１４０，２０５）と、
前記メモリＰＨＹに関連して実装された複数のレジスタ（２２２）であって、少なくとも１つのコマンド（４１０，４２０，４３０，５１０，５２０，５２５）及び少なくとも１種類のプログラム可能な遅延時間（４１５，５１５，５３５，５４０）を示す少なくとも１つの命令ワード（３００）を記憶する前記複数のレジスタ（２２２）と、
コントローラが開始ビットを書き込むことに応じて、前記少なくとも１つの命令ワードを読み出すことと、前記少なくとも１つの命令ワードに基づいて、高速プログラマブルコマンドシーケンス（４２０，４３０，５２５）を生成して前記外部メモリに提供し、前記コマンドを、前記少なくとも１種類のプログラム可能な遅延時間に基づいて遅延させることと、前記コマンドを実行することと、プログラム可能なトレーニングシーケンスに応じて、前記外部メモリによって生成された信号を受信することと、受信した信号に基づいて前記メモリＰＨＹのリード／ライトパラメータを調整することと、前記プログラマブルコマンドシーケンスが終了すると判別したことに応じて、前記開始ビットを設定解除することと、を行うように前記メモリＰＨＹに実装されたプログラム可能な第１トレーニングエンジン（２２０）と、を備え、
前記少なくとも１種類のプログラム可能な遅延時間は、前記外部メモリのタイミング要件に基づいており、前記コマンドを実行する前に経過する時間間隔である、
装置。
【請求項２】
前記メモリＰＨＹに関連して設定されたメモリロケーション（２２４）を備え、
前記第１トレーニングエンジンは、前記コントローラが前記開始ビットを前記メモリロケーションに書き込むと、前記少なくとも１つのコマンドの実行を開始する、請求項１に記載の装置。
【請求項３】
前記第１トレーニングエンジンは、前記少なくとも１種類の遅延時間を前記少なくとも１つのコマンドに基づいて決定し、前記コントローラは、前記少なくとも１つの命令ワードを前記複数のレジスタに書き込む、請求項２に記載の装置。
【請求項４】
前記少なくとも１つのコマンドは、第１コマンド、第２コマンド及び第３コマンドを含み、前記第１トレーニングエンジンは、前記第１コマンドを実行し、前記第１コマンドの実行から第１遅延時間が経過した後に前記第２コマンドを実行し、前記第２コマンドの実行から第２遅延時間が経過した後に前記第３コマンドを実行し、前記第１遅延時間及び前記第２遅延時間の合計は、前記第１コマンド及び前記第３コマンドについての遅延時間要求を満たす、請求項３に記載の装置。
【請求項５】
前記少なくとも１つの命令ワードは、少なくとも１種類のコマンド繰り返し回数を示し、前記少なくとも１種類のコマンド繰り返し回数は、前記少なくとも１つのコマンドの繰り返し回数を示す、請求項１に記載の装置。
【請求項６】
前記少なくとも１つの命令ワードは、前記外部メモリ内のアドレス、アルゴリズムアドレス生成制御、前記外部メモリ内のバンク及び終了ビットのうち少なくとも１つを示す、請求項１に記載の装置。
【請求項７】
前記メモリＰＨＹと一体に設けられたコントローラ（２１５）を備え、前記コントローラは、前記外部メモリと通信する前記メモリＰＨＹに対するトレーニングを、シードレストレーニングアルゴリズムに基づいて制御する、請求項１に記載の装置。
【請求項８】
制御信号が前記第１トレーニングエンジン（２２０）によって生成されると、トレーニングシーケンスを生成して前記外部メモリに提供する第２トレーニングエンジン（２２５）と、
前記外部メモリから受信したシーケンスを、前記第２トレーニングエンジン（２２５）が生成した前記トレーニングシーケンスと比較する第３トレーニングエンジンと、を備える、請求項１に記載の装置。
【請求項９】
メモリ物理レイヤインタフェース（ＰＨＹ）（１４０）に実装された第１トレーニングエンジン（２２０）において、コントローラが開始ビットを書き込むことに応じて、少なくとも１つのコマンド及び少なくとも１種類のプログラム可能な遅延時間を示す少なくとも１つの命令ワードであって、前記少なくとも１種類のプログラム可能な遅延時間は、外部メモリのタイミング要件に基づいており、前記コマンドを実行する前に経過する時間間隔である、少なくとも１つの命令ワードを読み出すことと、
前記第１トレーニングエンジン（２２０）を用いて、前記外部メモリに提供される高速プログラマブルコマンドシーケンス（４２０，４３０，５２５）を、前記少なくとも１つの命令ワード（３００）に基づいて生成することであって、前記コマンドを前記少なくとも１種類の遅延時間に基づいて遅延させ、前記少なくとも１つのコマンドは、第１コマンド、第２コマンド及び第３コマンドを含み、前記第１コマンドを実行することと、前記第１コマンドの実行から第１遅延時間が経過した後に前記第２コマンドを実行することと、前記第２コマンドの実行から第２遅延時間が経過した後に前記第３コマンドを実行することであって、前記第１遅延時間及び前記第２遅延時間の合計は、前記第１コマンド及び前記第３コマンドについての遅延時間要求を満たす、ことと、前記プログラマブルコマンドシーケンスが終了すると判別したことに応じて、前記開始ビットを設定解除することと、をさらに含む、ことと、
前記第１トレーニングエンジンにおいて、プログラム可能なコマンドのトレーニングシーケンスに応じて、前記外部メモリによって生成された信号を受信することと、
前記第１トレーニングエンジンにおいて、受信した信号に基づいて前記メモリＰＨＹのリード／ライトパラメータを調整することと、を含む、
方法（６００）。
【請求項１０】
前記コントローラが、前記メモリＰＨＹに設定されたメモリロケーション（２２４）に開始ビットを書き込むことをさらに含む、請求項９に記載の方法。
【請求項１１】
前記少なくとも１種類の遅延時間を前記少なくとも１つのコマンドに基づいて決定することと、
前記少なくとも１つの命令ワードを複数のレジスタ（２２２）に書き込むことと、をさらに含む、請求項９に記載の方法。
【請求項１２】
前記少なくとも１つのコマンドを、前記少なくとも１つの命令ワード内の少なくとも１種類のコマンド繰り返し回数で示された繰り返し回数だけ実行することであって、繰り返される前記少なくとも１つのコマンドを前記少なくとも１種類の遅延時間だけ遅延させる、ことをさらに含む、請求項９に記載の方法。
【請求項１３】
前記少なくとも１つの命令ワードにアクセスする際に、前記外部メモリ内のアドレス、アルゴリズムアドレス生成パターン、前記外部メモリ内のバンク及び終了ビットのうち少なくとも１つを示す前記少なくとも１つの命令ワードにアクセスすることをさらに含む、請求項９に記載の方法。
【請求項１４】
所定値の終了ビットを前記少なくとも１つの命令ワード内で検出すると、前記少なくとも１つのコマンドの実行を終了させることをさらに含む、請求項９に記載の方法。
【請求項１５】
前記メモリＰＨＹと一体に設けられたコントローラ（２１５）において、前記外部メモリと通信する前記メモリＰＨＹに対するトレーニングを行うための制御信号を、シードレストレーニングアルゴリズムに基づいて生成することをさらに含む、請求項９に記載の装置。
【請求項１６】
第２制御信号を前記第１トレーニングエンジンから第２トレーニングエンジン（２２５）に提供することであって、前記第２制御信号を前記第１トレーニングエンジンから受信すると、前記第２トレーニングエンジンがトレーニングシーケンスを生成して前記外部メモリに提供する、ことと、
第３制御信号を前記第１トレーニングエンジンから第３トレーニングエンジンに提供することであって、前記第３制御信号を受信すると、前記第３トレーニングエンジンが、前記外部メモリから受信したシーケンスを、前記第２トレーニングエンジンが生成した前記トレーニングシーケンスと比較する、ことと、をさらに含む、請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して処理システムに関し、具体的には、処理システムのメモリ物理レイヤインタフェースに関する。
【背景技術】
【０００２】
システムオンチップ（systems-on-a-chip：ＳＯＣ）等の処理システムは、メモリを用いて、データ又は命令を後に使用するために記憶する。例えば、ＳＯＣは、命令又はデータをメモリから読み出し、命令又はデータを用いて演算を実行し、結果をメモリに書き戻すことの可能な中央処理装置（ＣＰＵ）、画像処理装置（ＧＰＵ）、加速処理装置（ＡＰＵ）等の処理装置を含み得る。処理システムは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のメモリモジュールへのアクセスを制御するメモリ物理レイヤインタフェースを含む得る。ＤＲＡＭを用いて情報を記憶することにより、処理システムの動作中に処理装置から記憶情報にアクセスできるようになっている。処理システムのメモリ物理レイヤインタフェースは、従来、「メモリＰＨＹ」と呼ばれている。メモリコントローラは、通常、メモリＰＨＹの動作を制御するために用いられる。
【０００３】
メモリＰＨＹは、通常、ＤＲＡＭからのデータの読み出し又はＤＲＡＭへのデータの書き込みを正確に行うことが可能になる前に、メモリＰＨＹとＤＲＡＭとの間のインタフェースを介してやり取りされるシーケンスを用いてトレーニングされる。トレーニングシーケンスは、例えば、リードコマンド、ライトコマンド、起動コマンド、又は、他の演算を実行するのに用いられる他のコマンド等の複数のコマンドを含み得る。メモリＰＨＹ又はＤＲＡＭは、指定された遅延時間間隔で分離されたトレーニングシーケンスのコマンドを要求し得る。例えば、ライトコマンドの後にリードコマンドが続く場合には、ＤＲＡＭは、ライトコマンドとリードコマンドとの間に８サイクルの遅延を要求し得る。遅延時間間隔は、異なるタイプのコマンド毎に異なっていてもよい。例えば、２つのライトコマンド間の遅延時間間隔は、ライトコマンドとリードコマンドとの間の遅延時間間隔と異なっていてもよい。また、遅延時間間隔は、異なる種類のＤＲＡＭ毎に異なっていてもよく、新たなＤＲＡＭ設計又はタイミング規格が導入された場合に変更されてもよい。
【０００４】
本開示は、添付図面を参照することによってより良く理解され、本開示の多くの特徴及び利点が、この技術分野の当業者において明らかとなる。異なる図面で用いられる同じ符号は、同様又は同一のアイテムを示している。
【図面の簡単な説明】
【０００５】
【図１】いくつかの実施形態による、１つ以上の中央処理装置（ＣＰＵ）プロセッサコアと画像処理装置（ＧＰＵ）とを含む加速処理装置（ＡＰＵ）のブロック図である。
【図２】いくつかの実施形態による、メモリＰＨＹとＤＲＡＭとを含む処理装置の一部のブロック図である。
【図３】いくつかの実施形態による、レジスタに記憶可能な命令ワードの一例を示すブロック図である。
【図４】いくつかの実施形態による、トレーニングエンジンが発行し得るコマンドシーケンスを示す図である。
【図５】いくつかの実施形態による、トレーニングエンジンが発行し得るコマンドシーケンスを示す図である。
【図６】いくつかの実施形態による、コマンドシーケンスを実行する方法のフロー図である。
【図７】いくつかの実施形態による、図１に示すＡＰＵ等の処理装置に実装され得るメモリＰＨＹをトレーニングする方法のフロー図である。
【図８】いくつかの実施形態による、処理システムの構成要素の少なくとも一部を実装する集積回路装置を設計及び製造する方法を示すフロー図である。
【発明を実施するための形態】
【０００６】
従来のトレーニングシーケンスは、所定の遅延時間間隔で分離された所定のコマンドシーケンスを用いる。従って、従来のトレーニングシーケンスは、例えば異なるＤＲＡＭ設計の異なるタイミング要求を考慮に入れるように変更することが不可能である。しかしながら、ＤＲＡＭに発行されるコマンド間の遅延時間間隔は、本明細書で述べるように、異なるタイプのコマンド毎に異なっていてもよく、異なる種類のＤＲＡＭ毎に異なっていてもよく、新たなＤＲＡＭ設計が導入された場合に変更されてもよい。トレーニングシーケンスは、異なるメモリＰＨＹ又はＤＲＡＭ設計のタイミング要求を考慮に入れるために、メモリＰＨＹに実装されたプログラム可能なトレーニングエンジンによってフレキシブルに定義され得る。トレーニングエンジンは、命令ワードを用いてプログラム可能であり、命令ワードは、コマンドを指定するための第１フィールドと、コマンドを実行する前に経過する遅延時間間隔を指定するための第２フィールドと、を含む。また、命令ワードのいくつかの実施形態では、例えば、コマンドによって用いられるＤＲＡＭアドレス、コマンドによって用いられるＤＲＡＭバンク、コマンドの繰り返し回数等を指定するための他のフィールドが含まれてもよい。メモリＰＨＹのいくつかの実施形態では、命令ワードを保持するレジスタと、レジスタに記憶された命令ワードの実行を開始するために書き込み可能な開始ビットと、を含む。
【０００７】
遅延時間間隔を命令ワードに組み込むことによって、プログラマは、異なる種類のＤＲＡＭの要求を満たすトレーニングシーケンスを生成するだけでなく、将来のＤＲＡＭ設計について未だ判明していない要求を満たすことの可能な将来のトレーニングシーケンスの開発を支援することができる。また、２つのコマンドを特定の遅延時間間隔で分離する必要があるが、メモリＰＨＹ又はＤＲＡＭのいくつかの実施形態では、別のタイプのコマンドを当該２つのコマンド間で実行することができる。したがって、コマンドに対応する命令ワードで指定される遅延時間間隔は、中間コマンドの実行を可能にするとともに、他の２つのコマンドについての遅延時間間隔の要求を満たすことの可能な値に設定することができる。
【０００８】
図１は、いくつかの実施形態による、１つ以上の中央処理装置（ＣＰＵ）プロセッサコア１０５，１１０と、画像処理装置（ＧＰＵ）１１５と、を含む加速処理装置（ＡＰＵ）１００のブロック図である。ＡＰＵ１００は、システムオンチップ（ＳＯＣ）として実装され得る。ＣＰＵプロセッサコア１０５，１１０は、命令を、個別に、同時に、又は、並列に実行することができる。図１に示すＡＰＵ１００は、２つのＣＰＵプロセッサコア１０５，１１０を含んでいるが、本開示の利益を享受する本技術分野の当業者であれば、ＡＰＵ１００内のプロセッサコアの数が設計事項であることを理解できるであろう。ＡＰＵ１００のいくつかの実施形態は、図１に示す２つのＣＰＵプロセッサコア１０５，１１０よりも多い又は少ないＣＰＵプロセッサコアを含み得る。ＧＰＵ１１５は、ディスプレイに出力するのに用いられる視覚画像を生成するためのものである。また、ＧＰＵ１１５のいくつかの実施形態は、複数の処理コア（図示省略）を含み得る。
【０００９】
ＣＰＵプロセッサコア１０５は、ハードウェア、ファームウェア、ソフトウェア、又は、ハードウェア、ファームウェア及びソフトウェアの組み合わせとして実装することの可能な基本入出力システム（ＢＩＯＳ）１２０を含む。ＢＩＯＳ１２０のいくつかの実施形態は、例えばＡＰＵ１００を含むシステムの電源が投入され又は当該システムが起動すると、ＡＰＵ１００の構成要素を初期化又はテストするのに用いられる。ＢＩＯＳ１２０は、オペレーティングシステムを読み込むのに用いられてもよい。ＢＩＯＳ１２０が生成する命令又はコマンドは、１つ以上のデータパイプライン（図１では省略）を用いて、ＡＰＵ１００内の他のロケーションに伝送され得る。ＢＩＯＳ１２０は、別の構成として、ＣＰＵプロセッサコア１１０内に実装されてもよいし、ＡＰＵ１００内の他のロケーションに実装されてもよい。
【００１０】
また、図１に示すＡＰＵ１００は、他のＳＯＣロジック１２５を含む。他のＳＯＣロジック１２５のいくつかの実施形態は、アドレスを生成するとともに、メモリリードサイクル又はメモリライトサイクルを開始するＤＭＡエンジン（図示省略）、メモリ間のデータ転送を行うＤＭＡエンジン（図示省略）、又は、データをＣＰＵプロセッサコア１０５，１１０間若しくはＣＰＵプロセッサコアとＧＰＵ１１５との間で転送するＤＭＡエンジン（図示省略）を含み得る。さらに、他のＳＯＣロジック１２５は、ルーティングロジック、コヒーレンシロジック、又は、他の機能を実行するロジックを含んでもよい。他のＳＯＣロジック１２５のいくつかの実施形態は、ＡＰＵ１００と、外部のＤＲＡＭ１３５等の他のメモリとの間のデータフローを調整するメモリコントローラ（ＭＣ）１３０を含む。メモリコントローラ１３０は、外部メモリからの情報の読み出し及び外部メモリへの情報の書き込みを制御するのに用いられるロジックを含む。また、メモリコントローラ１３０は、リフレッシュロジックを含んでもよく、このリフレッシュロジックを用いて情報をＤＲＡＭに定期的に再書き込みして、ＤＲＡＭのメモリセル内の情報が保持されてもよい。
【００１１】
メモリコントローラ１３０は、ＤＲＡＭ１３５等の他のメモリモジュールの動作を、メモリＰＨＹ１４０と呼ばれ得るメモリ物理レイヤインタフェース１４０を介して送信された信号を用いて制御してもよい。メモリＰＨＹ１４０は、ＡＰＵ１００に接続され得る他のメモリモジュールの動作を決定する信号を駆動するのに用いられる回路を含む。例えば、メモリＰＨＹ１４０は、ＤＲＡＭ１３５等のメモリモジュールの一部からの読み出し、当該一部への書き込み、当該一部のリフレッシュ又は当該一部の消去を制御する信号を提供してもよい。メモリＰＨＹ１４０は、異なる動作点で動作可能であってもよく、これらの動作点は、メモリＰＨＹ１４０の動作周波数及び／又は動作電圧によって決定されてもよい。例えば、他のＳＯＣロジック１２５は、メモリＰＨＹ１４０及び／又はメモリコントローラ１３０内の同期を決定するクロック信号と、メモリＰＨＹ１４０及び／又はメモリコントローラ１３０が用いる電圧を決定する基準電圧（ＶＤＤ）１５０と、を提供するクロック１４５を含んでもよい。
【００１２】
メモリＰＨＹ１４０をトレーニングして、メモリＰＨＹ１４０とＤＲＡＭ１３５との間の通信中の読み出し性能又は書き込み性能を向上させる必要がある。したがって、メモリＰＨＹ１４０は、集積トレーニング制御ロジック１５５を含み、集積トレーニング制御ロジック１５５を用いて、トレーニングシーケンス又はコマンドの生成、トレーニングシーケンス又はコマンドのＤＲＡＭ１３５への送信、シーケンス又はコマンドの送信に応じてＤＲＡＭ１３５が生成した信号の受信、及び、ＤＲＡＭ１３５からの応答に基づくメモリＰＨＹ１４０のリードパラメータ／ライトパラメータの調整を行う。トレーニング制御ロジック１５５をメモリＰＨＹ１４０と一体に設けたことによって、ＢＩＯＳ１２０に実装されたアルゴリズムを用いてメモリＰＨＹ１４０をトレーニングする従来の方法と比較して多くの利点が得られる。トレーニング制御ロジック１５５によって用いられたトレーニングアルゴリズムの後処理及び／又はシーディング（seeding）を、ＢＩＯＳ１２０とメモリＰＨＹ１４０との間のデータパイプラインを介してトレーニングシーケンスを送信するのを不要にすることによって、軽減又は無くしてもよい。
【００１３】
トレーニング制御ロジック１５５のいくつかの実施形態は、マイクロコントローラと、トレーニングシーケンスを生成するとともに、トレーニングシーケンスを用いてメモリＰＨＹ１４０の動作を構成する１つ以上のトレーニングエンジンと、を含む。例えば、トレーニング制御ロジック１５５は、高速プログラマブルコマンドシーケンスを生成してＤＲＡＭ１３５に送るトレーニングエンジンを含んでもよい。また、トレーニング制御ロジック１５５は、１つ以上のコマンドを特定する情報を含む命令ワードを記憶する１つ以上のレジスタを備え（又は、当該１つ以上のレジスタにアクセスし）てもよく、当該１つ以上のコマンドを用いて、高速プログラマブルシーケンスを形成してもよい。さらに、命令ワードは、コマンドに関連する遅延時間を指定する情報だけでなく、他の情報を含んでもよい。よって、トレーニング制御ロジック１５５は、本明細書で述べるように、指定された遅延時間を、コマンドシーケンス内のコマンドと他のコマンドとの間に挿入することができる。
【００１４】
図２は、いくつかの実施形態による、図１に示すメモリＰＨＹ１４０及びＤＲＡＭ１３５等のメモリＰＨＹ２０５及びＤＲＡＭ２１０を含む処理装置の一部２００のブロック図である。メモリＰＨＹ２０５は、コントローラ２１５を含み、コントローラ２１５を用いて、ＤＲＡＭ２１０と通信するメモリＰＨＹ２０５に対するリードトレーニング及びライトトレーニングを、トレーニングアルゴリズムに基づいて制御する。コントローラ２１５のいくつかの実施形態は、ハードウェア、ファームウェア、ソフトウェア、又は、ハードウェア、ファームウェア及びソフトウェアの組み合わせとして実装されてもよい。コントローラ２１５は、いくつかの実施形態では、マイクロコントローラ２１５と呼ばれ得る。コントローラ２１５は、メモリＰＨＹ２０５と一体に設けられており、これにより、データパイプラインを介してメモリＰＨＹ２０５から分離されていないので、コントローラ２１５が実行するトレーニングアルゴリズムは、シードレストレーニングアルゴリズムとなり得る。本明細書で述べるように、シードレストレーニングアルゴリズムは、例えば返送信号を後処理するために、トレーニングアルゴリズムによって生成されたトレーニングシーケンス又はコマンドが通過する信号経路又はデータパイプラインを特徴付ける情報を用いて構成される必要がない。コントローラ２１５は、電源が投入された場合、垂直帰線周波数が変化した場合、電源状態が所定の周波数で定期的に移行した場合（例えば、アイドル状態と起動状態との間で）、又は、他のイベント若しくは信号が発生した場合に、トレーニングを開始してもよい。
【００１５】
コントローラ２１５は、例えば図１に示すＢＩＯＳ１２０等のＢＩＯＳと情報交換してもよい。いくつかの実施形態では、ＢＩＯＳは、例えばローカルスタティックランダムアクセスメモリ（ＳＲＡＭ）等のメモリアレイを読み出すことによって、ＤＲＡＭ２１０に関連する構成情報を提供することによって、又は、システムが起動するとトレーニングシーケンスを開始するようにコントローラ２１５に指示することによって、コントローラ２１５を構成してもよい。しかしながら、コントローラ２１５が構成されると、コントローラ２１５のいくつかの実施形態は、メモリＰＨＹ２０５に対するトレーニングを、ＢＩＯＳから殆ど独立して、且つ、ＢＩＯＳからの入力が殆ど行われることなく制御することができる。例えば、コントローラ２１５は、ＢＩＯＳから独立して動作し、且つ、メモリＰＨＹ２０５を、トレーニングコマンド又はトレーニングシーケンスをＢＩＯＳから受信することなくトレーニングすることの可能なトレーニングアルゴリズムを実行する。コントローラ２１５は、メモリＰＨＹ２０５に対するトレーニングを、ＢＩＯＳからコントローラ２１５に対してデータパイプラインを介して送信される必要のある入力がＢＩＯＳから行われることなく制御することができるので、トレーニングアルゴリズムは、シードレストレーニングアルゴリズムとして実装することができる。
【００１６】
コントローラ２１５は、アドレスコマンドステートマシン（ＡＣＳＭ）２２０と呼ばれ得る第１トレーニングエンジン２２０に接続されている。ＡＣＳＭ２２０は、メモリＰＨＹ２０５のトレーニング中にＤＲＡＭ２１０に提供可能なコマンドを生成する。プログラム可能なコマンドは、メモリＰＨＹ２０５の集積部分としてハードウェアに実装される第１トレーニングエンジン２２０の実施形態に対応して「高速に（at speed）」生成することができる。ＡＣＳＭ２２０が生成するコマンドは、ＤＲＡＭ２１０の指定されたロケーションから情報を読み出すリードコマンドと、ＤＲＡＭ２１０の指定されたロケーションに情報を書き込むライトコマンドと、例えば起動コマンド等の他のコマンドと、を含んでもよい。ＡＣＳＭ２２０のいくつかの実施形態は、リードコマンド及びライトコマンドを同時に合成するループバックコマンドを生成してもよい。ループバックコマンドは、メモリＰＨＹ２０５の物理ピンに送られる信号を駆動する。この信号は、メモリＰＨＹ２０５を通過する経路に沿って返送される。したがって、ＤＲＡＭ２１０をメモリＰＨＹ２０５の物理ピンに接続するのを必要とせずに、ループバックコマンドを用いてメモリＰＨＹ２０５をテストすることができる。ＡＣＳＭ２２０のいくつかの実施形態は、ループコマンドを生成してもよく、ループコマンドは、１つ以上のコマンドを、指定された遅延時間をコマンド間に挟んで繰り返し実行することによって、実行中に単一命令をループ又は繰り返し、複数のコマンドを順次ループ等する。
【００１７】
１つ以上のレジスタ２２２は、例えばＡＣＳＭ２２０によって読み出され又は書き込まれことによって、アクセス可能である。図２に示すレジスタ２２２は、ＡＣＳＭ２２０の外部に設けられている。しかしながら、いくつかの実施形態では、レジスタ２２２又はメモリロケーション２２４は、ＡＣＳＭ２２０内又は他のロケーションに設けられてもよい。レジスタ２２２のいくつかの実施形態は、ＡＣＳＭ２２０を構成又は制御するのに用いられる情報を記憶する物理レジスタと、命令ワード２２３を記憶するのに用いられる他の物理レジスタと、を含んでもよい。例えば、レジスタ２２２は、ＡＣＳＭ制御用の第１所定数の物理レジスタと、所定数の命令ワード２２３に関連する情報を記憶する第２所定数のレジスタと、を含んでもよい。第２所定数は、第１所定数より多くてもよい。各レジスタは、１６ビットレジスタ又は他のサイズのレジスタであってもよい。
【００１８】
レジスタ２２２は、命令ワード２２３を記憶するのに用いられる。命令ワード２２３の各々は、コマンドと、当該コマンドに関連するタイミング遅延時間と、を示す情報を含む。命令ワード２２３は、コントローラ２１５によってレジスタ２２２に書き込まれてもよい。タイミング遅延時間は、命令ワード内のコマンドと、他のコマンド（例えば、他の命令ワード２２３内のコマンド）との間に挿入される遅延時間を表している。タイミング遅延時間は、対応するコマンドを実行する前に、又は、対応するコマンドを実行した後に挿入されてもよい。いくつかの実施形態では、命令ワード２２３は、命令ワード内で示されたコマンドの繰り返し回数を示すコマンド繰り返し回数、例えばＤＲＡＭ２１０等の外部メモリ内のアドレス、ＤＲＡＭ２１０にアクセスするためのアドレスを生成するのに使用可能なアルゴリズムアドレス生成制御情報、外部メモリ内のバンク等を含んでもよい。アルゴリズムアドレス生成制御情報は、ランダムに選択されたアドレスの多項式を定義するのに用いられる情報、アドレス、アドレスオフセット又はアドレス幅をインクリメントすることに関する情報、アドレスをローテーションするのに用いられる情報等を含んでもよい。
【００１９】
レジスタ２２２のいくつかの実施形態は、１つ以上の制御ビットを記憶するメモリロケーション２２４を含んでもよい。この制御ビットを用いて、開始アドレス、シーケンスループアドレス等の情報を指定することができる。ＡＣＳＭ２２０は、コントローラ２１５が開始ビットの所定値をメモリロケーション２２４に書き込むと、１つ以上のコマンド又はコマンドシーケンスの実行を開始してもよい。レジスタ２２２に記憶された命令ワード２２３のいくつかの実施形態は、終了ビットを含んでもよい。終了ビットを用いて、コマンドシーケンスの実行を、特定値の終了ビットを命令ワードに書き込むことによって終了させることができる。
【００２０】
コントローラ２１５は、ＰＲＢＳパターンジェネレータチェッカ（ＰＰＧＣ）２２５と呼ばれ得る第２トレーニングエンジン２２５に接続されている。ＰＰＧＣ２２５のいくつかの実施形態は、プログラム可能であり、且つ、メモリＰＨＹ２０５をトレーニングするためにトレーニングシーケンスとして用いられるデータストリームを生成することができる。例えば、ＰＰＧＣ２２５は、コントローラ２１５から信号が送られると、任意の１６ビット（又は１６ビット未満）の多項式を表すデータストリームを生成してもよい。ＰＰＧＣ２２５のいくつかの実施形態は、トレーニングシーケンスを生成するのに用いられる別のジェネレータ２３５と、メモリＰＨＹ２０５とＤＲＡＭ２１０との間を流れるトレーニングシーケンスを含むリードストリーム又はライトストリームの同期をチェックするのに用いられるチェッカ２３０と、を含む。ＰＰＧＣ２２５の動作は、ＡＣＳＭ２２０から受信した信号によって制御されてもよい。例えば、ＡＣＳＭ２２０は、ジェネレータ２３５にてトレーニングシーケンスを生成する等の動作を順次実行する信号を提供してもよい。
【００２１】
コントローラ２１５は、データトレーニングステートマシン（ＤＴＳＭ）２４０と呼ばれ得る第３トレーニングエンジンに接続されている。ＤＴＳＭ２４０は、ＤＲＡＭ２１０から受信したトラフィックを、ＤＲＡＭ２１０に提供されたトレーニングシーケンスと比較して、メモリＰＨＹ２０５によって用いられるタイミングパラメータ又は電圧オフセットパラメータを調整するか否かを判断する。例えば、ＰＰＧＣ２２５は、メモリＰＨＹ２０５のリードトレーニング又はライトトレーニング中にＤＲＡＭ２１０から返送されたシーケンスと比較するために、トレーニングシーケンスの表示（representations）をＤＴＳＭ２４０に提供する。コントローラ２１５は、トレーニングループを開始する前に、ＤＴＳＭ２４０を構成して、メモリＰＨＹ２０５によって用いられるタイミングパラメータ又は電圧オフセットパラメータを制御してもよい。次に、コントローラ２１５は、ＡＣＳＭ２２０及びＰＰＧＣ２２５をプログラムして、１つ以上のトレーニングシーケンスを駆動してもよい。次いで、ＤＴＳＭ２４０は、ＰＰＧＣ２２５によって生成されたトレーニングシーケンスを、ＤＲＡＭ２１０から受信したシーケンスと比較してもよい。例えば、ＤＴＳＭ２４０は、トレーニングシーケンス及び受信シーケンスを、複数の異なる遅延時間毎に関連付けてもよい。比較結果に基づいて、ＤＴＳＭ２４０は、タイミングパラメータ又は電圧オフセットパラメータを調整するか否かについて、例えば、これらのパラメータのうち１つ以上のパラメータをインクリメント又はデクリメントすることによって判断する。例えば、タイミングオフセットは、トレーニングシーケンス及び受信シーケンスの相関関係に基づいて導出された遅延時間に基づいて増加してもよいし、減少してもよい。ＤＴＳＭ２４０のいくつかの実施形態は、上限閾値比較ロジック又は下限閾値比較ロジックを備えるデータフィルタ又は２進加算器を実装して、データ輪郭アイポジション（data contour eye position）に一致するようにトレーニングすることができる。
【００２２】
先入れ先出し（ＦＩＦＯ）バッファのセットを用いて、トレーニングシーケンスを、ＤＲＡＭ２１０に提供される前にバッファしてもよいし、受信シーケンスを、ＤＲＡＭ２１０から受信した後にバッファしてもよい。例えば、送信ＦＩＦＯバッファ２４５のセットを用いて発信トラフィックをバッファしてもよいし、受信ＦＩＦＯバッファ２５０のセットを用いて着信トラフィックをバッファしてもよい。１つ以上の受信機２５５を用いて、ＤＲＡＭ２１０に至るチャネルを介して信号を受信してもよいし、当該信号を受信ＦＩＦＯバッファ２５０に提供してもよい。１つ以上のドライバ２６０，２６５を用いて、信号を、送信ＦＩＦＯバッファ２４５からチャネルを介してＤＲＡＭ２１０に送信してもよい。例えば、チャネル２７０で伝送されるデータ信号（ＤＱ）又はタイミング信号（ＤＱＳ）を、ドライバ２６０を用いて駆動してもよい。また、受信機２５５は、データ信号（ＤＱ）又はタイミング信号（ＤＱＳ）を、チャネル２７０を介して受信してもよい。別の例の場合、ドライバ２６５を用いて、アドレス（ＡＤＤＲ）又はコマンド（ＣＭＤ）を、ＤＲＡＭ２１０に至るチャネル２７５を介して駆動してもよい。受信機２５５又はドライバ２６０，２６５によって用いられるタイミング遅延時間及び電圧オフセットは、調整されてもよい。
【００２３】
メモリＰＨＹ２０５は、タイミング／電圧制御ロジック２８０を含む。ＤＴＳＭ２４０は、信号をタイミング／電圧制御ロジック２８０に提供して、タイミングパラメータに対する調整を指示してもよい。例えば、ＤＴＳＭ２４０は、タイミング／電圧制御ロジック２８０に指示して、タイミング遅延時間又は電圧オフセットを、ＤＲＡＭ２１０に提供されたトレーニングシーケンスとＤＲＡＭ２１０から受信したシーケンスとの比較結果に基づいてインクリメント又はデクリメントしてもよい。次に、タイミング／電圧制御ロジック２８０は、制御信号を受信機２５５又はドライバ２６０，２６５に提供して、受信機２５５又はドライバ２６０，２６５が使用するタイミング遅延時間又は電圧オフセットを調整してもよい。タイミング／電圧制御ロジック２８０のいくつかの実施形態を用いて、タイミング遅延時間又は電圧オフセットを、受信イネーブル段階、書き込み平準化段階、リードトレーニング段階、ライトトレーニング段階、及び、メモリＰＨＹ２０５とＤＲＡＭ２１０との間のインタフェースについてのデータアイ輪郭（data eye contour）の電圧レベルを決定する段階等の複数の段階で調整してもよい。
【００２４】
図３は、いくつかの実施形態による、命令ワード３００の一例を示すブロック図である。命令ワード３００のいくつかの実施形態は、図２に示すレジスタ２２２に記憶された命令ワード２２３のように、レジスタに記憶されてもよい。命令ワード３００は、リードコマンド、ライトコマンド、起動コマンド、又は、図２に示すメモリＰＨＹ２０５等のメモリＰＨＹに対するトレーニングシーケンスの一部として実行可能な他のコマンド等のコマンドのタイプを示す情報を記憶するフィールド３０５を含む。また、命令ワード３００は、フィールド３０５内で示されたコマンドに関連するコマンド遅延時間を示す情報を記憶するフィールド３１０を含む。フィールド３１０のいくつかの実施形態は、フィールド３０５内で示されたコマンドを実行する前、又は、コマンドを実行した後に経過する必要のあるサイクル数を示す情報を含んでもよい。
【００２５】
さらに、命令ワード３００のいくつかの実施形態は、フィールド３０５内で示されたコマンドを繰り返す必要のある回数を示すコマンド繰り返し回数を示す情報を記憶するフィールド３１５を含む。フィールド３１０内で示されたコマンド遅延時間は、コマンドを繰り返す毎に適用されてもよい。フィールド３２０は、フィールド３０５内で示されたコマンドに関連するアドレスを含んでもよい。アドレスは、外部メモリ（図２に示すＤＲＡＭ２１０等）内のロケーションを指定してもよく、このロケーションからの読み出し又はこのロケーションへの書き込みを、コマンドの実行中に行うことができる、命令ワード３００のいくつかの実施形態は、アルゴリズムアドレス生成制御情報等の他の情報を記憶する１つ以上のフィールド３２５を含んでもよく、アルゴリズムアドレス生成制御情報を用いて、外部メモリ、外部メモリ内のバンク、終了ビットにアクセスするためのアドレスを生成してもよい。終了ビットを用いて、コマンドシーケンスの実行を、終了ビットの特定値を命令ワード３００等に書き込むことによって終了させてもよい。
【００２６】
図４は、いくつかの実施形態による、図２に示すＡＣＳＭ２２０等のトレーニングエンジンが発行し得るコマンドシーケンス４００を示す図である。横軸は、時間をクロックサイクル単位で表しており、矢印の方向で示されるように、左から右に向かって増加する。シーケンス４００は、ブロック４０５から開始する。例えば、図２に示すコントローラ２１５等のコントローラが、情報をトレーニングエンジンに関連するメモリに情報を書き込むことによってトレーニングエンジンを構成したときに、シーケンス４００が開始してもよい。次に、コントローラは、開始ビットを、図２に示すロケーション２２４等の特定のロケーションに書き込むことによって、シーケンス４００をブロック４０５から開始させてもよい。次に、トレーニングエンジンは、命令ワードをレジスタから読み出してもよい。例えば、トレーニングエンジンは、開始アドレスポインタが指示するレジスタから命令ワードを読み出してもよい。命令ワードは、トレーニングエンジンによって実行されるコマンド、及び、当該コマンドに関連するコマンド遅延時間を示す情報を含む。コマンドの例としては、情報をＤＲＡＭ等の外部メモリに書き込むのに用いられるライトコマンド、情報を外部メモリから読み出すのに用いられるリードコマンド、起動コマンド等が挙げられる。
【００２７】
トレーニングエンジンが読み出す第１コマンドはライトコマンド４１０であり、ライトコマンド４１０は、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である遅延時間４１５が経過した後に実行される。次に、トレーニングエンジンは、次の命令ワードをレジスタから読み出してもよい。次の命令ワードは、次のコマンドがリードコマンド４２０であることを表す情報を含む。いくつかの実施形態では、情報を外部メモリに書き込むライトコマンドを実行する時点と、情報を外部メモリから読み出すリードコマンドを実行する時点と、の間で所定の時間長が経過する必要がある。必要な遅延時間は、トレーニングエンジンを実装するメモリＰＨＹに接続された特定の種類のＤＲＡＭ等の外部メモリの特性によって異なる。したがって、プログラマは、ライトコマンド４１０と、後続のリードコマンド４２０と、の間の適切なコマンド遅延時間を命令ワードのコマンド遅延時間フィールド内に指定してもよい。したがって、トレーニングエンジンは、リードコマンド４２０の実行を、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である時間間隔４２５だけ遅延させることができる。
【００２８】
トレーニングエンジンは、後続の命令ワードをレジスタから読み出してもよい。いくつかの実施形態では、後続の命令ワードは、リードコマンド４３０を示す情報を含み、リードコマンド４３０を用いて、前のリードコマンド４２０に続いて外部メモリから情報を読み出す。所定の時間間隔は、２つの連続するリードコマンド４２０，４３０の実行タイミング間に経過する必要がある。この時間間隔は、命令ワード内のコマンド遅延時間フィールド内に示されてもよい。したがって、トレーニングエンジンは、リードコマンド４３０の実行を、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である時間間隔４３５だけ遅延させることができる。２つの連続するリードコマンド４２０，４３０間で経過する必要のある所定の時間間隔は、ライトコマンド４１０とリードコマンド４２０との間で経過する必要のある所定の時間間隔と異なっていてもよい。
【００２９】
一般的に言えば、異なるタイプのコマンド間で経過する必要のある時間間隔は、コマンドのタイプ、コマンドを実行する順序、又は、コマンド、メモリＰＨＹ、若しくは、異なるデュユアルインラインメモリモジュール（ＤＩＭＭ）を含む外部メモリの他の特性によって異なる。例えば、異なるＤＩＭＭは、メモリＰＨＹから異なる距離に配置することができ、これにより、メモリＰＨＹと異なるＤＩＭＭとの間の通信では、異なる伝送遅延時間が生じる可能性がある。命令ワード内で示された遅延時間を用いて、異なる伝送遅延時間を考慮に入れることによって、例えば最も遠くに位置するＤＩＭＭに対してリードコマンドが発行された場合に返送された情報が、メモリＰＨＹに近接して位置するＤＩＭＭに対して後続のリードコマンドが発行されたときに返送された情報と衝突するのを抑制する（又は、情報が返送された後にメモリＰＨＹに到達する）ことができる。コマンド遅延時間フィールドを命令ワードに含めることによって、プログラマにフレキシビリティを与えて、コマンドシーケンス４００を特定の実施形態の要求に合わせることができる。
【００３０】
図５は、いくつかの実施形態による、図２に示すＡＣＳＭ２２０等のトレーニングエンジンが発行し得るコマンドシーケンス５００を示す図である。横軸は、時間をクロックサイクル単位で表しており、矢印の方向で指示されるように、左から右に向かって増加する。シーケンス５００は、ブロック５０５から開始する。例えば、シーケンス５００は、コントローラが、図２に示すロケーション２２４等の特定のロケーションに開始ビットを書き込むことによって、開始してもよい。次に、トレーニングエンジンは、命令ワードをレジスタ（例えば、開始ポインタで指示されるレジスタ）から読み出してもよい。命令ワードは、トレーニングエンジンによって実行されるライトコマンド５１０を示す情報と、ライトコマンド５１０に関連するコマンド遅延時間と、を含む。ライトコマンド５１０は、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である遅延時間５１５が経過した後に実行される。
【００３１】
次の２つのコマンドは、リードコマンド５２０と、１つ以上の他のコマンド５２５と、を含む。リードコマンド５２０は、ライトコマンド５１０に対して遅延時間５３０だけ遅らせて実行される必要がある。他のコマンド５２５は、ライトコマンド５１０又はリードコマンド５２０に対して特定の遅延時間だけ遅らせることなく実行することができ、又は、遅延時間５３０よりも非常に短い遅延時間だけ遅らせて実行することができる。したがって、リードコマンド５２０及び他のコマンド５２５に関連する命令ワード内の遅延時間５３５，５４０は、２つの遅延時間５３５，５４０の合計が遅延時間５３０以上の時間長となるように構成することができる。これにより、トレーニングエンジンは、他のコマンド５２５を、遅延時間５３５が経過した後に実行することができ、続いて、リードコマンド５２０を、遅延時間５４０が経過した後に実行することができる。よって、リードコマンド５２０を、ライトコマンド５１０に対して遅延時間５３０だけ遅らせて実行するという要求を満たすこともできる。
【００３２】
図６は、いくつかの実施形態による、コマンドシーケンスを実行する方法６００のフロー図である。方法６００は、図２に示すＡＣＳＭ２２０等のトレーニングエンジンで実行することができる。ブロック６０５では、トレーニングエンジンが開始ビットを書き込むと方法６００が開始する。ブロック６１０では、トレーニングエンジンは、トレーニングエンジンが保持する開始ポインタで指示されたレジスタ等のレジスタから命令ワードを読み出す。判断ブロック６１５では、トレーニングエンジンは、命令ワードが、命令ワードで示されたコマンドに関連するコマンド遅延時間を示す情報を含むか否かを判断する。情報を含んでいない場合には、トレーニングエンジンは、コマンドを制約なく発行することができ、コマンドは、ブロック６２０で実行され得る。情報を含んでいる場合には、トレーニングエンジンは、指定遅延時間以上の時間長である時間間隔が経過した後にコマンドを発行するように制約される。したがって、ブロック６２５では、トレーニングエンジンは、指定遅延時間以上の時間長だけ待機する。次に、トレーニングエンジンは、ブロック６２０で実行されるコマンドを発行し得る。
【００３３】
命令ワードのいくつかの実施形態は、コマンド繰り返しフィールドを含んでもよく、コマンド繰り返しフィールドは、コマンド繰り返し回数を命令ワードにおいて示す。判断ブロック６３０では、トレーニングエンジンは、コマンドが、コマンド繰り返しフィールド内で示されたコマンド繰り返し回数よりも少ない繰り返し回数だけ繰り返されたか否かを判断する。繰り返し回数が、コマンドを少なくとも１回以上繰り返す必要があることを表すコマンド繰り返し回数よりも少ない場合には、トレーニングエンジンは、適切な遅延時間を判断ブロック６１５で決定し、場合によっては指定された遅延時間だけブロック６２５で待機した後に、コマンドをブロック６２０で実行する。方法６００は、繰り返し回数がコマンド繰り返し回数よりも多くなるか、又は、コマンド繰り返し回数に等しくなると、判断ブロック６３０に進むことができる。トレーニングエンジンのいくつかの実施形態は、カウンタを保持して、コマンド繰り返し回数を追跡し続けることができる。
【００３４】
判断ブロック６３５では、トレーニングエンジンは、コマンドシーケンスを現在の命令ワードで終了するか否かを判断する。いくつかの実施形態では、コマンドシーケンスは、終了ビットが現在の命令ワードに設定されると、終了してもよい。トレーニングエンジンは、コマンドシーケンスを終了させないと判断した場合に、例えば開始ポインタを次のレジスタに進めることによって、次の命令ワード（ブロック６４０）に進むことができる。次に、方法６００はブロック６１０に進み、ブロック６１０では、次の命令ワードをレジスタから読み出す。トレーニングエンジンは、コマンドシーケンスを終了させると判断した場合に、コマンドシーケンスを終了させてもよい。方法６００は、開始ビットをブロック６４５で設定解除することによって終了させることができる。
【００３５】
図７は、いくつかの実施形態による、図１に示す加速処理装置１００等の処理装置に実装可能なメモリＰＨＹをトレーニングする方法７００のフロー図である。方法７００の実施形態は、図１に示すトレーニング制御ロジック１５５、又は、図２に示すコントローラ２１５、ＡＣＳＭ２２０，ＰＰＧＣ２２５，ＤＴＳＭ２４０及びタイミング／電圧制御ロジック２８０等のトレーニング制御ロジックにおいて実行することができる。
【００３６】
ブロック７０５では、トレーニング制御ロジックは、受信イネーブルトレーニング（receive enable training）を実行してメモリＰＨＹを有効にすることによって、ＤＲＡＭとのインターフェースを介してデータを受信可能な時点を決定する。いくつかの実施形態は、受信イネーブルトレーニングを、リードコマンドを送信して選択アドレスをＤＲＡＭから読み出すことによって実行する。ＤＲＡＭから受信した信号に含まれる対応するバブルシーケンスを生成するバブルシーケンス（sequence of bubbles）をリードコマンドに点在させる。次に、トレーニング制御ロジックは、ＤＲＡＭから受信した信号をモニタリングして、メモリＰＨＹ内のコマンド生成時刻を、ＤＲＡＭからのコマンド応答がメモリＰＨＹに返送される時刻に一致させる。バブル間の時間間隔範囲は、最悪時の往復遅延時間に経路内の全ての内部メモリＰＨＹ遅延時間及びＤＲＡＭ遅延時間を加算した値よりも大きくなるように時間長が設定される。これにより、応答がより速く又はより遅くなることに関連してコマンド応答について起こり得るエイリアシングを必ず回避することができる。メモリＰＨＹは、受信イネーブルトレーニング段階において読み出し状態を常時保持するように構成することができる。例えば、コントローラ２１５は、ＡＣＳＭ２２０、ＰＰＧＣ２２５及びＤＴＳＭ２４０を構成することができ、次いでトレーニング段階を開始することができる。ＡＣＳＭ２２０は、コマンド／アドレスを発行してトレーニングシーケンスをＤＲＡＭ２１０に書き込むことができ、次に、コマンド／アドレスを発行してトレーニングシーケンスをＤＲＡＭ２１０から読み戻すことができる。いくつかの実施形態では、情報は、コマンドが発行されるとＤＲＡＭ２１０に実際に書き込まれることがなく、ＤＱバスを無視する。返送ＤＱＳのみがモニタリングされる。したがって、発行コマンドは、リードコマンドと同様であるが、ＤＴＳＭ２４０は、何れのデータがコマンドに応答して返送されるかについて気付かない。ＤＴＳＭ２４０は、ＤＲＡＭ２１０から返送されるＤＱＳストローブのタイミングを調整することにのみ注意する。トレーニングシーケンスは、ＰＰＧＣ２２５により生成され、ＤＲＡＭ２１０に提供することができる。次に、ＤＴＳＭ２４０は、ＤＲＡＭ２１０からの受信データをトレーニングシーケンスに関連付けて往復遅延時間を特定し、タイミング／電圧制御ロジック２８０に指示することにより、パラメータを受信機２５５及びドライバ２６０，２６５等の適切な受信機／ドライバについて調整して、検出した往復遅延時間をゼロにすることができる。
【００３７】
ブロック７１０では、トレーニングロジックは、書き込み平準化を実行して、メモリＰＨＹが用いるクロック信号を、ＤＲＡＭが用いるクロック信号に一致させる。したがって、トレーニングロジックのいくつかの実施形態は、メモリＰＨＹクロック信号及びタイミング（ＤＱＳ）信号を送信することができ、タイミング（ＤＱＳ）信号を用いて、ＤＲＡＭにおけるクロック値をサンプリングする。次に、トレーニングロジックは、ＤＱバスで返送されたＤＲＡＭクロックのサンプリング値を用いて、例えば遅延時間を生じさせてＤＱＳ信号の位相をＤＲＡＭ内のメモリクロック位相に一致させることによって、メモリＰＨＹクロック及びＤＲＡＭクロックを一致させる。例えば、コントローラ２１５から信号を受信すると、ＡＣＳＭ２２０はライトコマンドを生成することができ、このライトコマンドによって、立ち上がりエッジを含むメモリＰＨＹクロック信号、及び、ＤＲＡＭ２１０に供給されるＤＱＳ信号にＤＲＡＭ内のメモリクロックをサンプリングさせる。ライトコマンドは、本明細書で述べるように、レジスタ２２２から読み出される情報に基づいて生成することができる。次に、ＤＲＡＭクロックのサンプリング値は、メモリＰＨＹ２０５に返送することができる。ＰＰＧＣ２２５内のチェッカ２３０は、内部比較値を生成し、この値をＤＴＳＭ２４０に提供する。次に、ＤＴＳＭ２４０は、内部比較値を、ＤＲＡＭ２１０から受信したサンプリングクロック信号値と比較することができ、比較結果に基づいて調整信号を生成して、ライトＤＱＳ（ライトタイミング信号）をＤＲＡＭ２１０内のクロックに一致させることができる。次に、ＤＴＳＭ２４０は、タイミング／電圧制御ロジック２８０に指示することによって、受信機２５５及びドライバ２６０，２６５についてタイミングパラメータを調整して、メモリＰＨＹクロック及びＤＲＡＭクロックを同期させることができる。例えば、内部比較値が「０」であって、ＤＲＡＭクロックのサンプリング値が「１」である場合には、ＤＴＳＭ２４０は、タイミング／電圧制御ロジック２８０に指示することによって、メモリＰＨＹ２０５のタイミングを所定の時間長だけ進めることができる。内部比較値が「１」であって、ＤＲＡＭクロックのサンプリング値が「１」である場合には、ＤＴＳＭ２４０は、タイミング／電圧制御ロジック２８２に指示することによって、メモリＰＨＹ２０５のタイミングを所定の時間長だけ遅らせることができる。このプロセスを繰り返し行なって、メモリＰＨＹ２０５クロック及びＤＲＡＭクロックの同期を所定の許容範囲内に収めることができる。
【００３８】
ブロック７１５では、トレーニングロジックは、リード／ライトフェーズトレーニングを実行して、データアイ輪郭の１次元時間領域境界を、メモリＰＨＹとＤＲＡＭとの間のリード／ライトデータパスに基づいて決定する。したがって、トレーニングロジックのいくつかの実施形態は、一連のコマンドを送信して、トレーニングシーケンスをＤＲＡＭ内のアドレスに書き込むことができ、次に、トレーニングシーケンスをＤＲＡＭのアドレス指定ロケーションから異なる遅延時間だけ遅らせて、ループ読み出しによって読み出し続けることによって、データアイ輪郭の１次元時間領域境界を決定することができる。例えば、コントローラ２１５から信号を受信すると、ＡＣＳＭ２２０は、コマンドを発行して、ＰＰＧＣ２２５が生成する１つ以上のシーケンスを、ＤＲＡＭ２１０内の１つ以上のアドレスに書き込むことができる。次に、ＡＣＳＭ２２０は、一連のリードコマンドをＤＲＡＭ２１０内のアドレスに対して発行して、これらのリードコマンドを異なる遅延値でループする。コマンドシーケンスのいくつかの実施形態は、本明細書で説明するように、ＡＣＳＭ２２０によって、レジスタ２２２内の命令ワードから読み出される情報に基づいて生成することができる。次に、ＤＴＳＭ２４０は、ループリードコマンドの各コマンドに対応する受信シーケンスを、提供されたトレーニングシーケンスと比較することによって、データアイ輪郭の左端及び右端を求めることができる。次に、ＤＴＳＭ２４０は、タイミング／電圧制御ロジック２８０に指示することによって、タイミングパラメータ、例えば受信機２５５の位相を調整して、左端と右端との間の中間点等のデータアイ輪郭内の所定位置に一致させることができる。
【００３９】
ブロック７２０では、トレーニングロジックは、２次元（２Ｄ）リード／ライトフェーズトレーニングを実行して、データアイ輪郭の電圧レベルを、メモリＰＨＹとＤＲＡＭとの間のリード／ライトデータパスに基づいて求める。したがって、トレーニングロジックのいくつかの実施形態は、一連のリードコマンド／ライトコマンドを送信して、トレーニングシーケンスをＤＲＡＭから読み出し、ＤＲＡＭに書き込むことができる。一連のリードコマンド／ライトコマンドは、異なるタイミング遅延時間及び異なる電圧オフセットを用いて実行することによって、データアイ輪郭の電圧レベルを求めることができる。例えば、コントローラ２１５から信号を受信すると、ＡＣＳＭ２２０は、コマンドを発行して、ＰＰＧＣ２２５が生成する１つ以上のシーケンスを、ＤＲＡＭ２１０内の１つ以上のアドレスに、初期タイミング遅延時間を用いて書き込むことができる。次に、ＡＣＳＭ２２０は、一連のループリードコマンドをＤＲＡＭ２１０内のアドレスに対して発行することができる。リードコマンド／ライトコマンドは、異なる電圧オフセット値を受信機２５５又はドライバ２６０，２６５に提供することによって同時に発行することができる。コマンドシーケンスのいくつかの実施形態は、本明細書で説明するように、ＡＣＳＭ２２０によって、レジスタ２２２内の命令ワードから読み出される情報に基づいて生成することができる。次に、ＤＴＳＭ２４０は、ループリードコマンドの各コマンドに対応する受信シーケンスを、提供されたトレーニングシーケンスと比較することによって、初期タイミング遅延時間に対応するデータアイ輪郭の左端と右端との間の電圧レベルを求めることができる。タイミング遅延時間は変更することができ（例えば、インクリメント又はデクリメントする）、電圧レベルを求めるプロセスを繰り返すことができる。このプロセスを繰り返して、２次元データアイ輪郭を、タイミング遅延時間及び電圧レベルの範囲に亘って生成することができる。それとは別に、いくつかの実施形態は、電圧レベル及びループを、選択された電圧レベルに対応するタイミング遅延時間に亘って繰り返し選択することによって、２次元データアイ輪郭を生成することができる。
【００４０】
ＤＴＳＭ２４０は、タイミング／電圧制御ロジック２８０に指示することにより、タイミング遅延及び電圧オフセットを受信機２５５又はドライバ２６０，２６５について調整して、最良の電圧レベル及びタイミング遅延時間を与えるデータアイ輪郭内の位置に一致させることができる。タイミング遅延時間又は電圧オフセットに対する調整範囲は、サンプリングトレーニングデータ内の適正サンプル及び不正サンプルの数に基づいて設定することができる。ＤＴＳＭ２４０のいくつかの実施形態は、最適なタイミング遅延時間及び電圧オフセットを、サンプリングトレーニングデータ内の不正サンプルに対する適正サンプルの所定の比に基づいて求めることができる。例えば、ＤＴＳＭ２４０は、タイミング遅延時間及び電圧オフセットを、メモリＰＨＹ２０５から受信した不正サンプル数に対する適正サンプル数の比が所定比と等しいか、又は所定比を下回るまで調整することができる。ＤＴＳＭ２４０のいくつかの実施形態は、所定比を用いて、データアイ輪郭の形状を、より良好な最適トレーニング位置を求めることができる予測値で変更することができる。例えば、２Ｄアイ輪郭は、所定比に基づいて拡大又は縮小させることができる。２Ｄデータアイ輪郭に対する他の変更も可能である。
【００４１】
いくつかの実施形態では、上述した装置及び方法は、図１〜図７を参照して説明したメモリＰＨＹ等の１つ以上の集積回路（ＩＣ）装置（集積回路パッケージ又はマイクロチップとも呼ばれる）を含むシステムにおいて実現することができる。電子設計自動化（ＥＤＡ）ソフトウェアツール及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールは、これらのＩＣ装置の設計及び製造に用いることができる。これらの設計ツールは、通常、１つ以上のソフトウェアプログラムとして表現される。１つ以上のソフトウェアプログラムは、コンピュータシステムが実行可能なコードを含むことによってコンピュータシステムを操作し、１つ以上のＩＣ装置の回路を表すコードで動作させることによってプロセスの少なくとも一部を実行して、製造システムを設計又は適合させて回路を製造することができる。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムにアクセスできるコンピュータ可読記憶媒体に記憶される。同様に、ＩＣ装置の設計又は製造の１つ以上の工程を表すコードは、コンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶することができ、当該コードに対して、コンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスすることができる。
【００４２】
コンピュータ可読記憶媒体は、使用時にコンピュータシステムからアクセスできる任意の記憶媒体、又は、記憶媒体の組み合わせを含むことによって、命令及び／又はデータをコンピュータシステムに提供することができる。このような記憶媒体としては、これらに限定されないが、光媒体（例えば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（登録商標）ディスク）、磁気媒体（例えば、フロッピー（登録商標）ディスク、磁気テープ若しくは磁気ハードディスク）、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）若しくはキャッシュ）、不揮発性メモリ（例えば、リードオンリメモリ（ＲＯＭ）若しくはフラッシュメモリ）、又は、微小電子機械システム（ＭＥＭＳ）を利用した記憶媒体が挙げられる。コンピュータ可読記憶媒体は、コンピューティングシステムに内蔵することができ（例えば、システムＲＡＭ又はＲＯＭ）、コンピューティングシステムに強固に取り付けることができ（例えば、磁気ハードドライブ）、コンピューティングシステムに着脱可能に取り付けることができ（例えば、光ディスク又はユニバーサルシリアルバス（ＵＳＢ）系フラッシュメモリ）、又は、コンピュータシステムに有線ネットワーク若しくは無線ネットワークを介して接続することができる（例えば、ネットワークアクセス可能なストレージ（ＮＡＳ））。
【００４３】
図８は、いくつかの実施形態による１つ以上の素子を搭載したＩＣ装置を設計して製造する例示的な方法８００を示すフロー図である。上述したように、以下のプロセスの各プロセスに対応して生成されるコードは、非一時的なコンピュータ可読記憶媒体に記憶され、他には、非一時的なコンピュータ可読記憶媒体で具現化されて、対応する設計ツール又は製造ツールによってアクセスし使用することができる。
【００４４】
ブロック８０２では、ＩＣ装置の機能仕様を作成する。機能仕様（多くの場合、マイクロアーキテクチャ仕様（ＭＡＳ）と呼ばれる）は、Ｃ、Ｃ＋＋、ＳｙｓｔｅｍＣ、Ｓｉｍｕｌｉｎｋ又はＭＡＴＬＡＢを含む多種多様なプログラミング言語又はモデリング言語のうち何れかの言語で表現することができる。
【００４５】
ブロック８０４では、機能仕様を用いて、ＩＣ装置のハードウェアを表すハードウェア記述コードを生成する。いくつかの実施形態では、ハードウェア記述コードは、少なくとも１種類のハードウェア記述言語（ＨＤＬ）を用いて表現され、ハードウェア記述言語（ＨＤＬ）は、ＩＣ装置の回路をフォーマルに記述して設計するための多種多様なコンピュータ言語、仕様言語又はモデリング言語の何れかの言語を含む。生成されたＨＤＬコードは、通常、ＩＣ装置の回路の動作、回路の設計及び体系、及び、ＩＣ装置の正しい動作をシミュレーションで検証するためのテストを表す。ＨＤＬの例としては、アナログＨＤＬ（ＡＨＤＬ）、Ｖｅｒｉｌｏｇ  ＨＤＬ（ベリログＨＤＬ）、Ｓｙｓｔｅｍ  Ｖｅｒｉｌｏｇ  ＨＤＬ（システムベリログＨＤＬ）及びＶＨＤＬが挙げられる。ＩＣ装置に同期デジタル回路が搭載されている場合には、ハードウェア記述コードは、同期デジタル回路の動作を抽象的に表現したレジスタ転送レベル（ＲＴＬ）コードを含むことができる。他の種類の回路の場合には、ハードウェア記述コードは、回路の動作を抽象的に表現したビヘイビアレベルコードを含むことができる。ハードウェア記述コードで表されるＨＤＬモデルに対して、通常、設計検証に合格するために１回以上のシミュレーション及びデバッグ処理を実行する。
【００４６】
ハードウェア記述コードで表される設計を検証した後、ブロック８０６では、合成ツールを用いてハードウェア記述コードを合成し、ＩＣ装置の回路の初期物理構造を表現又は定義するコードを生成する。いくつかの実施形態では、合成ツールは、回路素子（例えば、ゲート、トランジスタ、抵抗、キャパシタ、インダクタ、ダイオード等）と、回路素子間の接続網又は接続配線と、を含む１つ以上のネットリストを生成する。別の構成として、ネットリストの全部又は一部は、合成ツールを用いることなく手動で生成することができる。ハードウェア記述コードと同様に、ネットリストに対して、最終的な一連の１つ以上のネットリストを生成する前に、１回以上のテストプロセス及び検証プロセスを実行することができる。
【００４７】
別の構成として、回路図編集設計ツールを用いてＩＣ装置の回路図を生成し、次に、回路図把握ツールを用いて、結果的に得られる回路図を把握することができ、回路図の構成要素及び接続関係を表す１つ以上のネットリスト（コンピュータ可読媒体に記憶される）を生成することができる。次に、把握した回路図に対して、１回以上のシミュレーションを実行してテスト及び検証を行うことができる。
【００４８】
ブロック８０８では、１つ以上のＥＤＡツールが、ブロック８０６で生成されたネットリストを用いて、ＩＣ装置の回路の物理レイアウトを表すコードを生成する。このプロセスは、例えば配置ツールを含むことができ、この配置ツールは、ネットリストを使用してＩＣ装置の回路の各素子の位置を決定又は固定する。さらに、配線ツールを配置プロセスに構築して、回路素子をネットリストに従って接続するために必要な配線を追加して引き回す。結果的に得られるコードは、ＩＣ装置の３次元モデルを表す。コードは、例えばグラフィックデータベースシステムＩＩ（ＧＤＳＩＩ）フォーマット等のデータベースファイルフォーマットで表すことができる。このフォーマットのデータは、通常、回路レイアウトに関する幾何学的形状、テキストラベル及び他の情報を階層形式で表す。
【００４９】
ブロック８１０では、物理レイアウトコード（例えば、ＧＤＳＩＩコード）を製造設備に提供し、製造設備では、物理レイアウトコードを用いて、製造設備の製造ツールを構成又は適合させて（例えば、マスク作業を行うことにより）ＩＣ装置を製造する。すなわち、物理レイアウトコードは、１つ以上のコンピュータシステムに書き込むことができ、次にこれらのコンピュータシステムは、製造設備のツールの動作、又は、製造設備内で行われる製造処理のツールの動作を全部若しくは一部制御することができる。
【００５０】
いくつかの実施形態では、上述した方法の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサにより実行することができる。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体で明確に具現化される１つ以上の実行可能命令セットを含む。ソフトウェアは、命令及び特定データを含むことができ、命令及び特定データを１つ以上のプロセッサが実行すると、１つ以上のプロセッサを操作して、上述した方法の１つ以上の態様を実行する。非一時的なコンピュータ可読記憶媒体としては、例えば磁気ディスク記憶装置若しくは光ディスク記憶装置、フラッシュメモリ等の固体記憶装置、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、又は、他の不揮発性メモリ装置若しくは不揮発性メモリ装置等が挙げられる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能命令は、１つ以上のプロセッサが解釈又は実行することができるソースコード、アセンブリ言語コード、オブジェクトコード又は他の命令形式で記憶することができる。
【００５１】
概要を上述した操作又は構成要素の全てが必要であるわけではなく、特定の操作又は装置の一部は必要ではなく、１つ以上の更に別の操作を行ってもよい。また、構成要素を記載の構成要素の他に含めてもよいことに留意されたい。さらには、操作が列挙された順序は、必ずしもこれらの操作が行われる順序ではない。また、コンセプトが、特定の実施形態を参照して説明されている。しかしながら、本技術分野の当業者であれば、種々の変形及び変更を、以下の特許請求の範囲に記載される本開示の範囲から逸脱しない限り加えることができることを理解できる。したがって、本明細書及び図は、限定的な意味ではなく例示として捉えられるべきであり、全てのこのような変形は、本開示の範囲に含まれるべきである。
【００５２】
効果、他の利点及び課題に対する解決手段について、特定の実施形態を参照しながら説明してきた。しかしながら、効果、利点、課題に対する解決手段、及び、全ての効果、利点又は解決手段をもたらすか更に顕著にする全ての特徴が、何れかの請求項又は全ての請求項の必須の特徴、必要な特徴又は基本的な特徴であると捉えられてはならない。さらに、開示された特定の実施形態は、開示した発明を、異なる態様で、且つ、本明細書において提示された示唆の恩恵を享受する本技術分野の当業者にとって明白な均等な態様で変更して実施することができることから、例示に過ぎない。以下の特許請求の範囲に記載される限定以外の限定を、本明細書において開示された構成又は設計の詳細に加えるものではない。したがって、開示された特定の実施形態は、変更又は改変することができ、全てのこのような変更が、開示した発明の範囲に含まれると考えられる。したがって、本明細書で要求する保護は、以下の特許請求の範囲に記載の通りである。
【図１】
0006741585.tif 000002
【図２】
0006741585.tif 000003
【図３】
0006741585.tif 000004
【図４】
0006741585.tif 000005
【図５】
0006741585.tif 000006
【図６】
0006741585.tif 000007
【図７】
0006741585.tif 000008
【図８】
0006741585.tif 000009