特許第6741585号(P6741585)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許6741585プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック
<>
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000002
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000003
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000004
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000005
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000006
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000007
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000008
  • 特許6741585-プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6741585
(24)【登録日】2020年7月29日
(45)【発行日】2020年8月19日
(54)【発明の名称】プログラム可能な遅延を用いてダイナミックランダムアクセスメモリ(DRAM)コマンドを生成するメモリ物理レイヤインタフェースロジック
(51)【国際特許分類】
   G06F 12/00 20060101AFI20200806BHJP
【FI】
   G06F12/00 564A
【請求項の数】16
【全頁数】20
(21)【出願番号】特願2016-558773(P2016-558773)
(86)(22)【出願日】2015年6月23日
(65)【公表番号】特表2017-523489(P2017-523489A)
(43)【公表日】2017年8月17日
(86)【国際出願番号】US2015037172
(87)【国際公開番号】WO2015200318
(87)【国際公開日】20151230
【審査請求日】2018年6月13日
(31)【優先権主張番号】14/318,065
(32)【優先日】2014年6月27日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】グレン エイ. ダース
(72)【発明者】
【氏名】ジェリー タルボット
【審査官】 後藤 彰
(56)【参考文献】
【文献】 特開2010−160724(JP,A)
【文献】 特開2009−086702(JP,A)
【文献】 特開2005−115657(JP,A)
【文献】 米国特許第07627730(US,B1)
【文献】 特開2006−260071(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
外部メモリ(210)の設計に基づくコマンドのタイミング要件を有する外部メモリに接続されたメモリ物理レイヤインタフェース(PHY)(140,205)と、
前記メモリPHYに関連して実装された複数のレジスタ(222)であって、少なくとも1つのコマンド(410,420,430,510,520,525)及び少なくとも1種類のプログラム可能な遅延時間(415,515,535,540)を示す少なくとも1つの命令ワード(300)を記憶する前記複数のレジスタ(222)と、
コントローラが開始ビットを書き込むことに応じて、前記少なくとも1つの命令ワードを読み出すことと、前記少なくとも1つの命令ワードに基づいて、高速プログラマブルコマンドシーケンス(420,430,525)を生成して前記外部メモリに提供し、前記コマンドを、前記少なくとも1種類のプログラム可能な遅延時間に基づいて遅延させることと、前記コマンドを実行することと、プログラム可能なトレーニングシーケンスに応じて、前記外部メモリによって生成された信号を受信することと、受信した信号に基づいて前記メモリPHYのリード/ライトパラメータを調整することと、前記プログラマブルコマンドシーケンスが終了すると判別したことに応じて、前記開始ビットを設定解除することと、を行うように前記メモリPHYに実装されたプログラム可能な第1トレーニングエンジン(220)と、を備え、
前記少なくとも1種類のプログラム可能な遅延時間は、前記外部メモリのタイミング要件に基づいており、前記コマンドを実行する前に経過する時間間隔である、
装置。
【請求項2】
記メモリPHYに関連して設定されたメモリロケーション(224)を備え、
前記第1トレーニングエンジンは、前記コントローラが前記開始ビットを前記メモリロケーションに書き込むと、前記少なくとも1つのコマンドの実行を開始する、請求項1に記載の装置。
【請求項3】
前記第1トレーニングエンジンは、前記少なくとも1種類の遅延時間を前記少なくとも1つのコマンドに基づいて決定し、前記コントローラは、前記少なくとも1つの命令ワードを前記複数のレジスタに書き込む、請求項2に記載の装置。
【請求項4】
前記少なくとも1つのコマンドは、第1コマンド、第2コマンド及び第3コマンドを含み、前記第1トレーニングエンジンは、前記第1コマンドを実行し、前記第1コマンドの実行から第1遅延時間が経過した後に前記第2コマンドを実行し、前記第2コマンドの実行から第2遅延時間が経過した後に前記第3コマンドを実行し、前記第1遅延時間及び前記第2遅延時間の合計は、前記第1コマンド及び前記第3コマンドについての遅延時間要求を満たす、請求項3に記載の装置。
【請求項5】
前記少なくとも1つの命令ワードは、少なくとも1種類のコマンド繰り返し回数を示し、前記少なくとも1種類のコマンド繰り返し回数は、前記少なくとも1つのコマンドの繰り返し回数を示す、請求項1に記載の装置。
【請求項6】
前記少なくとも1つの命令ワードは、前記外部メモリ内のアドレス、アルゴリズムアドレス生成制御、前記外部メモリ内のバンク及び終了ビットのうち少なくとも1つを示す、請求項1に記載の装置。
【請求項7】
前記メモリPHYと一体に設けられたコントローラ(215)を備え、前記コントローラは、前記外部メモリと通信する前記メモリPHYに対するトレーニングを、シードレストレーニングアルゴリズムに基づいて制御する、請求項1に記載の装置。
【請求項8】
制御信号が前記第1トレーニングエンジン(220)によって生成されると、トレーニングシーケンスを生成して前記外部メモリに提供する第2トレーニングエンジン(225)と、
前記外部メモリから受信したシーケンスを、前記第2トレーニングエンジン(225)が生成した前記トレーニングシーケンスと比較する第3トレーニングエンジンと、を備える、請求項1に記載の装置。
【請求項9】
メモリ物理レイヤインタフェース(PHY)(140)に実装された第1トレーニングエンジン(220)において、コントローラが開始ビットを書き込むことに応じて、少なくとも1つのコマンド及び少なくとも1種類のプログラム可能な遅延時間を示す少なくとも1つの命令ワードであって、前記少なくとも1種類のプログラム可能な遅延時間は、外部メモリのタイミング要件に基づいており、前記コマンドを実行する前に経過する時間間隔である、少なくとも1つの命令ワードを読み出すことと、
前記第1トレーニングエンジン(220)を用いて、前記外部メモリに提供される高速プログラマブルコマンドシーケンス(420,430,525)を、前記少なくとも1つの命令ワード(300)に基づいて生成することであって、前記コマンドを前記少なくとも1種類の遅延時間に基づいて遅延させ、前記少なくとも1つのコマンドは、第1コマンド、第2コマンド及び第3コマンドを含み、前記第1コマンドを実行することと、前記第1コマンドの実行から第1遅延時間が経過した後に前記第2コマンドを実行することと、前記第2コマンドの実行から第2遅延時間が経過した後に前記第3コマンドを実行することであって、前記第1遅延時間及び前記第2遅延時間の合計は、前記第1コマンド及び前記第3コマンドについての遅延時間要求を満たす、ことと、前記プログラマブルコマンドシーケンスが終了すると判別したことに応じて、前記開始ビットを設定解除することと、をさらに含む、ことと、
前記第1トレーニングエンジンにおいて、プログラム可能なコマンドのトレーニングシーケンスに応じて、前記外部メモリによって生成された信号を受信することと、
前記第1トレーニングエンジンにおいて、受信した信号に基づいて前記メモリPHYのリード/ライトパラメータを調整することと、を含む、
方法(600)。
【請求項10】
前記コントローラが、前記メモリPHYに設定されたメモリロケーション(224)に開始ビットを書き込むことをさらに含む、請求項9に記載の方法。
【請求項11】
前記少なくとも1種類の遅延時間を前記少なくとも1つのコマンドに基づいて決定することと、
前記少なくとも1つの命令ワードを複数のレジスタ(222)に書き込むことと、をさらに含む、請求項9に記載の方法。
【請求項12】
前記少なくとも1つのコマンドを、前記少なくとも1つの命令ワード内の少なくとも1種類のコマンド繰り返し回数で示された繰り返し回数だけ実行することであって、繰り返される前記少なくとも1つのコマンドを前記少なくとも1種類の遅延時間だけ遅延させる、ことをさらに含む、請求項9に記載の方法。
【請求項13】
前記少なくとも1つの命令ワードにアクセスする際に、前記外部メモリ内のアドレス、アルゴリズムアドレス生成パターン、前記外部メモリ内のバンク及び終了ビットのうち少なくとも1つを示す前記少なくとも1つの命令ワードにアクセスすることをさらに含む、請求項9に記載の方法。
【請求項14】
所定値の終了ビットを前記少なくとも1つの命令ワード内で検出すると、前記少なくとも1つのコマンドの実行を終了させることをさらに含む、請求項9に記載の方法。
【請求項15】
前記メモリPHYと一体に設けられたコントローラ(215)において、前記外部メモリと通信する前記メモリPHYに対するトレーニングを行うための制御信号を、シードレストレーニングアルゴリズムに基づいて生成することをさらに含む、請求項9に記載の装置。
【請求項16】
第2制御信号を前記第1トレーニングエンジンから第2トレーニングエンジン(225)に提供することであって、前記第2制御信号を前記第1トレーニングエンジンから受信すると、前記第2トレーニングエンジンがトレーニングシーケンスを生成して前記外部メモリに提供する、ことと、
第3制御信号を前記第1トレーニングエンジンから第3トレーニングエンジンに提供することであって、前記第3制御信号を受信すると、前記第3トレーニングエンジンが、前記外部メモリから受信したシーケンスを、前記第2トレーニングエンジンが生成した前記トレーニングシーケンスと比較する、ことと、をさらに含む、請求項15に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して処理システムに関し、具体的には、処理システムのメモリ物理レイヤインタフェースに関する。
【背景技術】
【0002】
システムオンチップ(systems-on-a-chip:SOC)等の処理システムは、メモリを用いて、データ又は命令を後に使用するために記憶する。例えば、SOCは、命令又はデータをメモリから読み出し、命令又はデータを用いて演算を実行し、結果をメモリに書き戻すことの可能な中央処理装置(CPU)、画像処理装置(GPU)、加速処理装置(APU)等の処理装置を含み得る。処理システムは、ダイナミックランダムアクセスメモリ(DRAM)等のメモリモジュールへのアクセスを制御するメモリ物理レイヤインタフェースを含む得る。DRAMを用いて情報を記憶することにより、処理システムの動作中に処理装置から記憶情報にアクセスできるようになっている。処理システムのメモリ物理レイヤインタフェースは、従来、「メモリPHY」と呼ばれている。メモリコントローラは、通常、メモリPHYの動作を制御するために用いられる。
【0003】
メモリPHYは、通常、DRAMからのデータの読み出し又はDRAMへのデータの書き込みを正確に行うことが可能になる前に、メモリPHYとDRAMとの間のインタフェースを介してやり取りされるシーケンスを用いてトレーニングされる。トレーニングシーケンスは、例えば、リードコマンド、ライトコマンド、起動コマンド、又は、他の演算を実行するのに用いられる他のコマンド等の複数のコマンドを含み得る。メモリPHY又はDRAMは、指定された遅延時間間隔で分離されたトレーニングシーケンスのコマンドを要求し得る。例えば、ライトコマンドの後にリードコマンドが続く場合には、DRAMは、ライトコマンドとリードコマンドとの間に8サイクルの遅延を要求し得る。遅延時間間隔は、異なるタイプのコマンド毎に異なっていてもよい。例えば、2つのライトコマンド間の遅延時間間隔は、ライトコマンドとリードコマンドとの間の遅延時間間隔と異なっていてもよい。また、遅延時間間隔は、異なる種類のDRAM毎に異なっていてもよく、新たなDRAM設計又はタイミング規格が導入された場合に変更されてもよい。
【0004】
本開示は、添付図面を参照することによってより良く理解され、本開示の多くの特徴及び利点が、この技術分野の当業者において明らかとなる。異なる図面で用いられる同じ符号は、同様又は同一のアイテムを示している。
【図面の簡単な説明】
【0005】
図1】いくつかの実施形態による、1つ以上の中央処理装置(CPU)プロセッサコアと画像処理装置(GPU)とを含む加速処理装置(APU)のブロック図である。
図2】いくつかの実施形態による、メモリPHYとDRAMとを含む処理装置の一部のブロック図である。
図3】いくつかの実施形態による、レジスタに記憶可能な命令ワードの一例を示すブロック図である。
図4】いくつかの実施形態による、トレーニングエンジンが発行し得るコマンドシーケンスを示す図である。
図5】いくつかの実施形態による、トレーニングエンジンが発行し得るコマンドシーケンスを示す図である。
図6】いくつかの実施形態による、コマンドシーケンスを実行する方法のフロー図である。
図7】いくつかの実施形態による、図1に示すAPU等の処理装置に実装され得るメモリPHYをトレーニングする方法のフロー図である。
図8】いくつかの実施形態による、処理システムの構成要素の少なくとも一部を実装する集積回路装置を設計及び製造する方法を示すフロー図である。
【発明を実施するための形態】
【0006】
従来のトレーニングシーケンスは、所定の遅延時間間隔で分離された所定のコマンドシーケンスを用いる。従って、従来のトレーニングシーケンスは、例えば異なるDRAM設計の異なるタイミング要求を考慮に入れるように変更することが不可能である。しかしながら、DRAMに発行されるコマンド間の遅延時間間隔は、本明細書で述べるように、異なるタイプのコマンド毎に異なっていてもよく、異なる種類のDRAM毎に異なっていてもよく、新たなDRAM設計が導入された場合に変更されてもよい。トレーニングシーケンスは、異なるメモリPHY又はDRAM設計のタイミング要求を考慮に入れるために、メモリPHYに実装されたプログラム可能なトレーニングエンジンによってフレキシブルに定義され得る。トレーニングエンジンは、命令ワードを用いてプログラム可能であり、命令ワードは、コマンドを指定するための第1フィールドと、コマンドを実行する前に経過する遅延時間間隔を指定するための第2フィールドと、を含む。また、命令ワードのいくつかの実施形態では、例えば、コマンドによって用いられるDRAMアドレス、コマンドによって用いられるDRAMバンク、コマンドの繰り返し回数等を指定するための他のフィールドが含まれてもよい。メモリPHYのいくつかの実施形態では、命令ワードを保持するレジスタと、レジスタに記憶された命令ワードの実行を開始するために書き込み可能な開始ビットと、を含む。
【0007】
遅延時間間隔を命令ワードに組み込むことによって、プログラマは、異なる種類のDRAMの要求を満たすトレーニングシーケンスを生成するだけでなく、将来のDRAM設計について未だ判明していない要求を満たすことの可能な将来のトレーニングシーケンスの開発を支援することができる。また、2つのコマンドを特定の遅延時間間隔で分離する必要があるが、メモリPHY又はDRAMのいくつかの実施形態では、別のタイプのコマンドを当該2つのコマンド間で実行することができる。したがって、コマンドに対応する命令ワードで指定される遅延時間間隔は、中間コマンドの実行を可能にするとともに、他の2つのコマンドについての遅延時間間隔の要求を満たすことの可能な値に設定することができる。
【0008】
図1は、いくつかの実施形態による、1つ以上の中央処理装置(CPU)プロセッサコア105,110と、画像処理装置(GPU)115と、を含む加速処理装置(APU)100のブロック図である。APU100は、システムオンチップ(SOC)として実装され得る。CPUプロセッサコア105,110は、命令を、個別に、同時に、又は、並列に実行することができる。図1に示すAPU100は、2つのCPUプロセッサコア105,110を含んでいるが、本開示の利益を享受する本技術分野の当業者であれば、APU100内のプロセッサコアの数が設計事項であることを理解できるであろう。APU100のいくつかの実施形態は、図1に示す2つのCPUプロセッサコア105,110よりも多い又は少ないCPUプロセッサコアを含み得る。GPU115は、ディスプレイに出力するのに用いられる視覚画像を生成するためのものである。また、GPU115のいくつかの実施形態は、複数の処理コア(図示省略)を含み得る。
【0009】
CPUプロセッサコア105は、ハードウェア、ファームウェア、ソフトウェア、又は、ハードウェア、ファームウェア及びソフトウェアの組み合わせとして実装することの可能な基本入出力システム(BIOS)120を含む。BIOS120のいくつかの実施形態は、例えばAPU100を含むシステムの電源が投入され又は当該システムが起動すると、APU100の構成要素を初期化又はテストするのに用いられる。BIOS120は、オペレーティングシステムを読み込むのに用いられてもよい。BIOS120が生成する命令又はコマンドは、1つ以上のデータパイプライン(図1では省略)を用いて、APU100内の他のロケーションに伝送され得る。BIOS120は、別の構成として、CPUプロセッサコア110内に実装されてもよいし、APU100内の他のロケーションに実装されてもよい。
【0010】
また、図1に示すAPU100は、他のSOCロジック125を含む。他のSOCロジック125のいくつかの実施形態は、アドレスを生成するとともに、メモリリードサイクル又はメモリライトサイクルを開始するDMAエンジン(図示省略)、メモリ間のデータ転送を行うDMAエンジン(図示省略)、又は、データをCPUプロセッサコア105,110間若しくはCPUプロセッサコアとGPU115との間で転送するDMAエンジン(図示省略)を含み得る。さらに、他のSOCロジック125は、ルーティングロジック、コヒーレンシロジック、又は、他の機能を実行するロジックを含んでもよい。他のSOCロジック125のいくつかの実施形態は、APU100と、外部のDRAM135等の他のメモリとの間のデータフローを調整するメモリコントローラ(MC)130を含む。メモリコントローラ130は、外部メモリからの情報の読み出し及び外部メモリへの情報の書き込みを制御するのに用いられるロジックを含む。また、メモリコントローラ130は、リフレッシュロジックを含んでもよく、このリフレッシュロジックを用いて情報をDRAMに定期的に再書き込みして、DRAMのメモリセル内の情報が保持されてもよい。
【0011】
メモリコントローラ130は、DRAM135等の他のメモリモジュールの動作を、メモリPHY140と呼ばれ得るメモリ物理レイヤインタフェース140を介して送信された信号を用いて制御してもよい。メモリPHY140は、APU100に接続され得る他のメモリモジュールの動作を決定する信号を駆動するのに用いられる回路を含む。例えば、メモリPHY140は、DRAM135等のメモリモジュールの一部からの読み出し、当該一部への書き込み、当該一部のリフレッシュ又は当該一部の消去を制御する信号を提供してもよい。メモリPHY140は、異なる動作点で動作可能であってもよく、これらの動作点は、メモリPHY140の動作周波数及び/又は動作電圧によって決定されてもよい。例えば、他のSOCロジック125は、メモリPHY140及び/又はメモリコントローラ130内の同期を決定するクロック信号と、メモリPHY140及び/又はメモリコントローラ130が用いる電圧を決定する基準電圧(VDD)150と、を提供するクロック145を含んでもよい。
【0012】
メモリPHY140をトレーニングして、メモリPHY140とDRAM135との間の通信中の読み出し性能又は書き込み性能を向上させる必要がある。したがって、メモリPHY140は、集積トレーニング制御ロジック155を含み、集積トレーニング制御ロジック155を用いて、トレーニングシーケンス又はコマンドの生成、トレーニングシーケンス又はコマンドのDRAM135への送信、シーケンス又はコマンドの送信に応じてDRAM135が生成した信号の受信、及び、DRAM135からの応答に基づくメモリPHY140のリードパラメータ/ライトパラメータの調整を行う。トレーニング制御ロジック155をメモリPHY140と一体に設けたことによって、BIOS120に実装されたアルゴリズムを用いてメモリPHY140をトレーニングする従来の方法と比較して多くの利点が得られる。トレーニング制御ロジック155によって用いられたトレーニングアルゴリズムの後処理及び/又はシーディング(seeding)を、BIOS120とメモリPHY140との間のデータパイプラインを介してトレーニングシーケンスを送信するのを不要にすることによって、軽減又は無くしてもよい。
【0013】
トレーニング制御ロジック155のいくつかの実施形態は、マイクロコントローラと、トレーニングシーケンスを生成するとともに、トレーニングシーケンスを用いてメモリPHY140の動作を構成する1つ以上のトレーニングエンジンと、を含む。例えば、トレーニング制御ロジック155は、高速プログラマブルコマンドシーケンスを生成してDRAM135に送るトレーニングエンジンを含んでもよい。また、トレーニング制御ロジック155は、1つ以上のコマンドを特定する情報を含む命令ワードを記憶する1つ以上のレジスタを備え(又は、当該1つ以上のレジスタにアクセスし)てもよく、当該1つ以上のコマンドを用いて、高速プログラマブルシーケンスを形成してもよい。さらに、命令ワードは、コマンドに関連する遅延時間を指定する情報だけでなく、他の情報を含んでもよい。よって、トレーニング制御ロジック155は、本明細書で述べるように、指定された遅延時間を、コマンドシーケンス内のコマンドと他のコマンドとの間に挿入することができる。
【0014】
図2は、いくつかの実施形態による、図1に示すメモリPHY140及びDRAM135等のメモリPHY205及びDRAM210を含む処理装置の一部200のブロック図である。メモリPHY205は、コントローラ215を含み、コントローラ215を用いて、DRAM210と通信するメモリPHY205に対するリードトレーニング及びライトトレーニングを、トレーニングアルゴリズムに基づいて制御する。コントローラ215のいくつかの実施形態は、ハードウェア、ファームウェア、ソフトウェア、又は、ハードウェア、ファームウェア及びソフトウェアの組み合わせとして実装されてもよい。コントローラ215は、いくつかの実施形態では、マイクロコントローラ215と呼ばれ得る。コントローラ215は、メモリPHY205と一体に設けられており、これにより、データパイプラインを介してメモリPHY205から分離されていないので、コントローラ215が実行するトレーニングアルゴリズムは、シードレストレーニングアルゴリズムとなり得る。本明細書で述べるように、シードレストレーニングアルゴリズムは、例えば返送信号を後処理するために、トレーニングアルゴリズムによって生成されたトレーニングシーケンス又はコマンドが通過する信号経路又はデータパイプラインを特徴付ける情報を用いて構成される必要がない。コントローラ215は、電源が投入された場合、垂直帰線周波数が変化した場合、電源状態が所定の周波数で定期的に移行した場合(例えば、アイドル状態と起動状態との間で)、又は、他のイベント若しくは信号が発生した場合に、トレーニングを開始してもよい。
【0015】
コントローラ215は、例えば図1に示すBIOS120等のBIOSと情報交換してもよい。いくつかの実施形態では、BIOSは、例えばローカルスタティックランダムアクセスメモリ(SRAM)等のメモリアレイを読み出すことによって、DRAM210に関連する構成情報を提供することによって、又は、システムが起動するとトレーニングシーケンスを開始するようにコントローラ215に指示することによって、コントローラ215を構成してもよい。しかしながら、コントローラ215が構成されると、コントローラ215のいくつかの実施形態は、メモリPHY205に対するトレーニングを、BIOSから殆ど独立して、且つ、BIOSからの入力が殆ど行われることなく制御することができる。例えば、コントローラ215は、BIOSから独立して動作し、且つ、メモリPHY205を、トレーニングコマンド又はトレーニングシーケンスをBIOSから受信することなくトレーニングすることの可能なトレーニングアルゴリズムを実行する。コントローラ215は、メモリPHY205に対するトレーニングを、BIOSからコントローラ215に対してデータパイプラインを介して送信される必要のある入力がBIOSから行われることなく制御することができるので、トレーニングアルゴリズムは、シードレストレーニングアルゴリズムとして実装することができる。
【0016】
コントローラ215は、アドレスコマンドステートマシン(ACSM)220と呼ばれ得る第1トレーニングエンジン220に接続されている。ACSM220は、メモリPHY205のトレーニング中にDRAM210に提供可能なコマンドを生成する。プログラム可能なコマンドは、メモリPHY205の集積部分としてハードウェアに実装される第1トレーニングエンジン220の実施形態に対応して「高速に(at speed)」生成することができる。ACSM220が生成するコマンドは、DRAM210の指定されたロケーションから情報を読み出すリードコマンドと、DRAM210の指定されたロケーションに情報を書き込むライトコマンドと、例えば起動コマンド等の他のコマンドと、を含んでもよい。ACSM220のいくつかの実施形態は、リードコマンド及びライトコマンドを同時に合成するループバックコマンドを生成してもよい。ループバックコマンドは、メモリPHY205の物理ピンに送られる信号を駆動する。この信号は、メモリPHY205を通過する経路に沿って返送される。したがって、DRAM210をメモリPHY205の物理ピンに接続するのを必要とせずに、ループバックコマンドを用いてメモリPHY205をテストすることができる。ACSM220のいくつかの実施形態は、ループコマンドを生成してもよく、ループコマンドは、1つ以上のコマンドを、指定された遅延時間をコマンド間に挟んで繰り返し実行することによって、実行中に単一命令をループ又は繰り返し、複数のコマンドを順次ループ等する。
【0017】
1つ以上のレジスタ222は、例えばACSM220によって読み出され又は書き込まれことによって、アクセス可能である。図2に示すレジスタ222は、ACSM220の外部に設けられている。しかしながら、いくつかの実施形態では、レジスタ222又はメモリロケーション224は、ACSM220内又は他のロケーションに設けられてもよい。レジスタ222のいくつかの実施形態は、ACSM220を構成又は制御するのに用いられる情報を記憶する物理レジスタと、命令ワード223を記憶するのに用いられる他の物理レジスタと、を含んでもよい。例えば、レジスタ222は、ACSM制御用の第1所定数の物理レジスタと、所定数の命令ワード223に関連する情報を記憶する第2所定数のレジスタと、を含んでもよい。第2所定数は、第1所定数より多くてもよい。各レジスタは、16ビットレジスタ又は他のサイズのレジスタであってもよい。
【0018】
レジスタ222は、命令ワード223を記憶するのに用いられる。命令ワード223の各々は、コマンドと、当該コマンドに関連するタイミング遅延時間と、を示す情報を含む。命令ワード223は、コントローラ215によってレジスタ222に書き込まれてもよい。タイミング遅延時間は、命令ワード内のコマンドと、他のコマンド(例えば、他の命令ワード223内のコマンド)との間に挿入される遅延時間を表している。タイミング遅延時間は、対応するコマンドを実行する前に、又は、対応するコマンドを実行した後に挿入されてもよい。いくつかの実施形態では、命令ワード223は、命令ワード内で示されたコマンドの繰り返し回数を示すコマンド繰り返し回数、例えばDRAM210等の外部メモリ内のアドレス、DRAM210にアクセスするためのアドレスを生成するのに使用可能なアルゴリズムアドレス生成制御情報、外部メモリ内のバンク等を含んでもよい。アルゴリズムアドレス生成制御情報は、ランダムに選択されたアドレスの多項式を定義するのに用いられる情報、アドレス、アドレスオフセット又はアドレス幅をインクリメントすることに関する情報、アドレスをローテーションするのに用いられる情報等を含んでもよい。
【0019】
レジスタ222のいくつかの実施形態は、1つ以上の制御ビットを記憶するメモリロケーション224を含んでもよい。この制御ビットを用いて、開始アドレス、シーケンスループアドレス等の情報を指定することができる。ACSM220は、コントローラ215が開始ビットの所定値をメモリロケーション224に書き込むと、1つ以上のコマンド又はコマンドシーケンスの実行を開始してもよい。レジスタ222に記憶された命令ワード223のいくつかの実施形態は、終了ビットを含んでもよい。終了ビットを用いて、コマンドシーケンスの実行を、特定値の終了ビットを命令ワードに書き込むことによって終了させることができる。
【0020】
コントローラ215は、PRBSパターンジェネレータチェッカ(PPGC)225と呼ばれ得る第2トレーニングエンジン225に接続されている。PPGC225のいくつかの実施形態は、プログラム可能であり、且つ、メモリPHY205をトレーニングするためにトレーニングシーケンスとして用いられるデータストリームを生成することができる。例えば、PPGC225は、コントローラ215から信号が送られると、任意の16ビット(又は16ビット未満)の多項式を表すデータストリームを生成してもよい。PPGC225のいくつかの実施形態は、トレーニングシーケンスを生成するのに用いられる別のジェネレータ235と、メモリPHY205とDRAM210との間を流れるトレーニングシーケンスを含むリードストリーム又はライトストリームの同期をチェックするのに用いられるチェッカ230と、を含む。PPGC225の動作は、ACSM220から受信した信号によって制御されてもよい。例えば、ACSM220は、ジェネレータ235にてトレーニングシーケンスを生成する等の動作を順次実行する信号を提供してもよい。
【0021】
コントローラ215は、データトレーニングステートマシン(DTSM)240と呼ばれ得る第3トレーニングエンジンに接続されている。DTSM240は、DRAM210から受信したトラフィックを、DRAM210に提供されたトレーニングシーケンスと比較して、メモリPHY205によって用いられるタイミングパラメータ又は電圧オフセットパラメータを調整するか否かを判断する。例えば、PPGC225は、メモリPHY205のリードトレーニング又はライトトレーニング中にDRAM210から返送されたシーケンスと比較するために、トレーニングシーケンスの表示(representations)をDTSM240に提供する。コントローラ215は、トレーニングループを開始する前に、DTSM240を構成して、メモリPHY205によって用いられるタイミングパラメータ又は電圧オフセットパラメータを制御してもよい。次に、コントローラ215は、ACSM220及びPPGC225をプログラムして、1つ以上のトレーニングシーケンスを駆動してもよい。次いで、DTSM240は、PPGC225によって生成されたトレーニングシーケンスを、DRAM210から受信したシーケンスと比較してもよい。例えば、DTSM240は、トレーニングシーケンス及び受信シーケンスを、複数の異なる遅延時間毎に関連付けてもよい。比較結果に基づいて、DTSM240は、タイミングパラメータ又は電圧オフセットパラメータを調整するか否かについて、例えば、これらのパラメータのうち1つ以上のパラメータをインクリメント又はデクリメントすることによって判断する。例えば、タイミングオフセットは、トレーニングシーケンス及び受信シーケンスの相関関係に基づいて導出された遅延時間に基づいて増加してもよいし、減少してもよい。DTSM240のいくつかの実施形態は、上限閾値比較ロジック又は下限閾値比較ロジックを備えるデータフィルタ又は2進加算器を実装して、データ輪郭アイポジション(data contour eye position)に一致するようにトレーニングすることができる。
【0022】
先入れ先出し(FIFO)バッファのセットを用いて、トレーニングシーケンスを、DRAM210に提供される前にバッファしてもよいし、受信シーケンスを、DRAM210から受信した後にバッファしてもよい。例えば、送信FIFOバッファ245のセットを用いて発信トラフィックをバッファしてもよいし、受信FIFOバッファ250のセットを用いて着信トラフィックをバッファしてもよい。1つ以上の受信機255を用いて、DRAM210に至るチャネルを介して信号を受信してもよいし、当該信号を受信FIFOバッファ250に提供してもよい。1つ以上のドライバ260,265を用いて、信号を、送信FIFOバッファ245からチャネルを介してDRAM210に送信してもよい。例えば、チャネル270で伝送されるデータ信号(DQ)又はタイミング信号(DQS)を、ドライバ260を用いて駆動してもよい。また、受信機255は、データ信号(DQ)又はタイミング信号(DQS)を、チャネル270を介して受信してもよい。別の例の場合、ドライバ265を用いて、アドレス(ADDR)又はコマンド(CMD)を、DRAM210に至るチャネル275を介して駆動してもよい。受信機255又はドライバ260,265によって用いられるタイミング遅延時間及び電圧オフセットは、調整されてもよい。
【0023】
メモリPHY205は、タイミング/電圧制御ロジック280を含む。DTSM240は、信号をタイミング/電圧制御ロジック280に提供して、タイミングパラメータに対する調整を指示してもよい。例えば、DTSM240は、タイミング/電圧制御ロジック280に指示して、タイミング遅延時間又は電圧オフセットを、DRAM210に提供されたトレーニングシーケンスとDRAM210から受信したシーケンスとの比較結果に基づいてインクリメント又はデクリメントしてもよい。次に、タイミング/電圧制御ロジック280は、制御信号を受信機255又はドライバ260,265に提供して、受信機255又はドライバ260,265が使用するタイミング遅延時間又は電圧オフセットを調整してもよい。タイミング/電圧制御ロジック280のいくつかの実施形態を用いて、タイミング遅延時間又は電圧オフセットを、受信イネーブル段階、書き込み平準化段階、リードトレーニング段階、ライトトレーニング段階、及び、メモリPHY205とDRAM210との間のインタフェースについてのデータアイ輪郭(data eye contour)の電圧レベルを決定する段階等の複数の段階で調整してもよい。
【0024】
図3は、いくつかの実施形態による、命令ワード300の一例を示すブロック図である。命令ワード300のいくつかの実施形態は、図2に示すレジスタ222に記憶された命令ワード223のように、レジスタに記憶されてもよい。命令ワード300は、リードコマンド、ライトコマンド、起動コマンド、又は、図2に示すメモリPHY205等のメモリPHYに対するトレーニングシーケンスの一部として実行可能な他のコマンド等のコマンドのタイプを示す情報を記憶するフィールド305を含む。また、命令ワード300は、フィールド305内で示されたコマンドに関連するコマンド遅延時間を示す情報を記憶するフィールド310を含む。フィールド310のいくつかの実施形態は、フィールド305内で示されたコマンドを実行する前、又は、コマンドを実行した後に経過する必要のあるサイクル数を示す情報を含んでもよい。
【0025】
さらに、命令ワード300のいくつかの実施形態は、フィールド305内で示されたコマンドを繰り返す必要のある回数を示すコマンド繰り返し回数を示す情報を記憶するフィールド315を含む。フィールド310内で示されたコマンド遅延時間は、コマンドを繰り返す毎に適用されてもよい。フィールド320は、フィールド305内で示されたコマンドに関連するアドレスを含んでもよい。アドレスは、外部メモリ(図2に示すDRAM210等)内のロケーションを指定してもよく、このロケーションからの読み出し又はこのロケーションへの書き込みを、コマンドの実行中に行うことができる、命令ワード300のいくつかの実施形態は、アルゴリズムアドレス生成制御情報等の他の情報を記憶する1つ以上のフィールド325を含んでもよく、アルゴリズムアドレス生成制御情報を用いて、外部メモリ、外部メモリ内のバンク、終了ビットにアクセスするためのアドレスを生成してもよい。終了ビットを用いて、コマンドシーケンスの実行を、終了ビットの特定値を命令ワード300等に書き込むことによって終了させてもよい。
【0026】
図4は、いくつかの実施形態による、図2に示すACSM220等のトレーニングエンジンが発行し得るコマンドシーケンス400を示す図である。横軸は、時間をクロックサイクル単位で表しており、矢印の方向で示されるように、左から右に向かって増加する。シーケンス400は、ブロック405から開始する。例えば、図2に示すコントローラ215等のコントローラが、情報をトレーニングエンジンに関連するメモリに情報を書き込むことによってトレーニングエンジンを構成したときに、シーケンス400が開始してもよい。次に、コントローラは、開始ビットを、図2に示すロケーション224等の特定のロケーションに書き込むことによって、シーケンス400をブロック405から開始させてもよい。次に、トレーニングエンジンは、命令ワードをレジスタから読み出してもよい。例えば、トレーニングエンジンは、開始アドレスポインタが指示するレジスタから命令ワードを読み出してもよい。命令ワードは、トレーニングエンジンによって実行されるコマンド、及び、当該コマンドに関連するコマンド遅延時間を示す情報を含む。コマンドの例としては、情報をDRAM等の外部メモリに書き込むのに用いられるライトコマンド、情報を外部メモリから読み出すのに用いられるリードコマンド、起動コマンド等が挙げられる。
【0027】
トレーニングエンジンが読み出す第1コマンドはライトコマンド410であり、ライトコマンド410は、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である遅延時間415が経過した後に実行される。次に、トレーニングエンジンは、次の命令ワードをレジスタから読み出してもよい。次の命令ワードは、次のコマンドがリードコマンド420であることを表す情報を含む。いくつかの実施形態では、情報を外部メモリに書き込むライトコマンドを実行する時点と、情報を外部メモリから読み出すリードコマンドを実行する時点と、の間で所定の時間長が経過する必要がある。必要な遅延時間は、トレーニングエンジンを実装するメモリPHYに接続された特定の種類のDRAM等の外部メモリの特性によって異なる。したがって、プログラマは、ライトコマンド410と、後続のリードコマンド420と、の間の適切なコマンド遅延時間を命令ワードのコマンド遅延時間フィールド内に指定してもよい。したがって、トレーニングエンジンは、リードコマンド420の実行を、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である時間間隔425だけ遅延させることができる。
【0028】
トレーニングエンジンは、後続の命令ワードをレジスタから読み出してもよい。いくつかの実施形態では、後続の命令ワードは、リードコマンド430を示す情報を含み、リードコマンド430を用いて、前のリードコマンド420に続いて外部メモリから情報を読み出す。所定の時間間隔は、2つの連続するリードコマンド420,430の実行タイミング間に経過する必要がある。この時間間隔は、命令ワード内のコマンド遅延時間フィールド内に示されてもよい。したがって、トレーニングエンジンは、リードコマンド430の実行を、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である時間間隔435だけ遅延させることができる。2つの連続するリードコマンド420,430間で経過する必要のある所定の時間間隔は、ライトコマンド410とリードコマンド420との間で経過する必要のある所定の時間間隔と異なっていてもよい。
【0029】
一般的に言えば、異なるタイプのコマンド間で経過する必要のある時間間隔は、コマンドのタイプ、コマンドを実行する順序、又は、コマンド、メモリPHY、若しくは、異なるデュユアルインラインメモリモジュール(DIMM)を含む外部メモリの他の特性によって異なる。例えば、異なるDIMMは、メモリPHYから異なる距離に配置することができ、これにより、メモリPHYと異なるDIMMとの間の通信では、異なる伝送遅延時間が生じる可能性がある。命令ワード内で示された遅延時間を用いて、異なる伝送遅延時間を考慮に入れることによって、例えば最も遠くに位置するDIMMに対してリードコマンドが発行された場合に返送された情報が、メモリPHYに近接して位置するDIMMに対して後続のリードコマンドが発行されたときに返送された情報と衝突するのを抑制する(又は、情報が返送された後にメモリPHYに到達する)ことができる。コマンド遅延時間フィールドを命令ワードに含めることによって、プログラマにフレキシビリティを与えて、コマンドシーケンス400を特定の実施形態の要求に合わせることができる。
【0030】
図5は、いくつかの実施形態による、図2に示すACSM220等のトレーニングエンジンが発行し得るコマンドシーケンス500を示す図である。横軸は、時間をクロックサイクル単位で表しており、矢印の方向で指示されるように、左から右に向かって増加する。シーケンス500は、ブロック505から開始する。例えば、シーケンス500は、コントローラが、図2に示すロケーション224等の特定のロケーションに開始ビットを書き込むことによって、開始してもよい。次に、トレーニングエンジンは、命令ワードをレジスタ(例えば、開始ポインタで指示されるレジスタ)から読み出してもよい。命令ワードは、トレーニングエンジンによって実行されるライトコマンド510を示す情報と、ライトコマンド510に関連するコマンド遅延時間と、を含む。ライトコマンド510は、命令ワード内のコマンド遅延時間で示された所定の時間間隔以上の時間長である遅延時間515が経過した後に実行される。
【0031】
次の2つのコマンドは、リードコマンド520と、1つ以上の他のコマンド525と、を含む。リードコマンド520は、ライトコマンド510に対して遅延時間530だけ遅らせて実行される必要がある。他のコマンド525は、ライトコマンド510又はリードコマンド520に対して特定の遅延時間だけ遅らせることなく実行することができ、又は、遅延時間530よりも非常に短い遅延時間だけ遅らせて実行することができる。したがって、リードコマンド520及び他のコマンド525に関連する命令ワード内の遅延時間535,540は、2つの遅延時間535,540の合計が遅延時間530以上の時間長となるように構成することができる。これにより、トレーニングエンジンは、他のコマンド525を、遅延時間535が経過した後に実行することができ、続いて、リードコマンド520を、遅延時間540が経過した後に実行することができる。よって、リードコマンド520を、ライトコマンド510に対して遅延時間530だけ遅らせて実行するという要求を満たすこともできる。
【0032】
図6は、いくつかの実施形態による、コマンドシーケンスを実行する方法600のフロー図である。方法600は、図2に示すACSM220等のトレーニングエンジンで実行することができる。ブロック605では、トレーニングエンジンが開始ビットを書き込むと方法600が開始する。ブロック610では、トレーニングエンジンは、トレーニングエンジンが保持する開始ポインタで指示されたレジスタ等のレジスタから命令ワードを読み出す。判断ブロック615では、トレーニングエンジンは、命令ワードが、命令ワードで示されたコマンドに関連するコマンド遅延時間を示す情報を含むか否かを判断する。情報を含んでいない場合には、トレーニングエンジンは、コマンドを制約なく発行することができ、コマンドは、ブロック620で実行され得る。情報を含んでいる場合には、トレーニングエンジンは、指定遅延時間以上の時間長である時間間隔が経過した後にコマンドを発行するように制約される。したがって、ブロック625では、トレーニングエンジンは、指定遅延時間以上の時間長だけ待機する。次に、トレーニングエンジンは、ブロック620で実行されるコマンドを発行し得る。
【0033】
命令ワードのいくつかの実施形態は、コマンド繰り返しフィールドを含んでもよく、コマンド繰り返しフィールドは、コマンド繰り返し回数を命令ワードにおいて示す。判断ブロック630では、トレーニングエンジンは、コマンドが、コマンド繰り返しフィールド内で示されたコマンド繰り返し回数よりも少ない繰り返し回数だけ繰り返されたか否かを判断する。繰り返し回数が、コマンドを少なくとも1回以上繰り返す必要があることを表すコマンド繰り返し回数よりも少ない場合には、トレーニングエンジンは、適切な遅延時間を判断ブロック615で決定し、場合によっては指定された遅延時間だけブロック625で待機した後に、コマンドをブロック620で実行する。方法600は、繰り返し回数がコマンド繰り返し回数よりも多くなるか、又は、コマンド繰り返し回数に等しくなると、判断ブロック630に進むことができる。トレーニングエンジンのいくつかの実施形態は、カウンタを保持して、コマンド繰り返し回数を追跡し続けることができる。
【0034】
判断ブロック635では、トレーニングエンジンは、コマンドシーケンスを現在の命令ワードで終了するか否かを判断する。いくつかの実施形態では、コマンドシーケンスは、終了ビットが現在の命令ワードに設定されると、終了してもよい。トレーニングエンジンは、コマンドシーケンスを終了させないと判断した場合に、例えば開始ポインタを次のレジスタに進めることによって、次の命令ワード(ブロック640)に進むことができる。次に、方法600はブロック610に進み、ブロック610では、次の命令ワードをレジスタから読み出す。トレーニングエンジンは、コマンドシーケンスを終了させると判断した場合に、コマンドシーケンスを終了させてもよい。方法600は、開始ビットをブロック645で設定解除することによって終了させることができる。
【0035】
図7は、いくつかの実施形態による、図1に示す加速処理装置100等の処理装置に実装可能なメモリPHYをトレーニングする方法700のフロー図である。方法700の実施形態は、図1に示すトレーニング制御ロジック155、又は、図2に示すコントローラ215、ACSM220,PPGC225,DTSM240及びタイミング/電圧制御ロジック280等のトレーニング制御ロジックにおいて実行することができる。
【0036】
ブロック705では、トレーニング制御ロジックは、受信イネーブルトレーニング(receive enable training)を実行してメモリPHYを有効にすることによって、DRAMとのインターフェースを介してデータを受信可能な時点を決定する。いくつかの実施形態は、受信イネーブルトレーニングを、リードコマンドを送信して選択アドレスをDRAMから読み出すことによって実行する。DRAMから受信した信号に含まれる対応するバブルシーケンスを生成するバブルシーケンス(sequence of bubbles)をリードコマンドに点在させる。次に、トレーニング制御ロジックは、DRAMから受信した信号をモニタリングして、メモリPHY内のコマンド生成時刻を、DRAMからのコマンド応答がメモリPHYに返送される時刻に一致させる。バブル間の時間間隔範囲は、最悪時の往復遅延時間に経路内の全ての内部メモリPHY遅延時間及びDRAM遅延時間を加算した値よりも大きくなるように時間長が設定される。これにより、応答がより速く又はより遅くなることに関連してコマンド応答について起こり得るエイリアシングを必ず回避することができる。メモリPHYは、受信イネーブルトレーニング段階において読み出し状態を常時保持するように構成することができる。例えば、コントローラ215は、ACSM220、PPGC225及びDTSM240を構成することができ、次いでトレーニング段階を開始することができる。ACSM220は、コマンド/アドレスを発行してトレーニングシーケンスをDRAM210に書き込むことができ、次に、コマンド/アドレスを発行してトレーニングシーケンスをDRAM210から読み戻すことができる。いくつかの実施形態では、情報は、コマンドが発行されるとDRAM210に実際に書き込まれることがなく、DQバスを無視する。返送DQSのみがモニタリングされる。したがって、発行コマンドは、リードコマンドと同様であるが、DTSM240は、何れのデータがコマンドに応答して返送されるかについて気付かない。DTSM240は、DRAM210から返送されるDQSストローブのタイミングを調整することにのみ注意する。トレーニングシーケンスは、PPGC225により生成され、DRAM210に提供することができる。次に、DTSM240は、DRAM210からの受信データをトレーニングシーケンスに関連付けて往復遅延時間を特定し、タイミング/電圧制御ロジック280に指示することにより、パラメータを受信機255及びドライバ260,265等の適切な受信機/ドライバについて調整して、検出した往復遅延時間をゼロにすることができる。
【0037】
ブロック710では、トレーニングロジックは、書き込み平準化を実行して、メモリPHYが用いるクロック信号を、DRAMが用いるクロック信号に一致させる。したがって、トレーニングロジックのいくつかの実施形態は、メモリPHYクロック信号及びタイミング(DQS)信号を送信することができ、タイミング(DQS)信号を用いて、DRAMにおけるクロック値をサンプリングする。次に、トレーニングロジックは、DQバスで返送されたDRAMクロックのサンプリング値を用いて、例えば遅延時間を生じさせてDQS信号の位相をDRAM内のメモリクロック位相に一致させることによって、メモリPHYクロック及びDRAMクロックを一致させる。例えば、コントローラ215から信号を受信すると、ACSM220はライトコマンドを生成することができ、このライトコマンドによって、立ち上がりエッジを含むメモリPHYクロック信号、及び、DRAM210に供給されるDQS信号にDRAM内のメモリクロックをサンプリングさせる。ライトコマンドは、本明細書で述べるように、レジスタ222から読み出される情報に基づいて生成することができる。次に、DRAMクロックのサンプリング値は、メモリPHY205に返送することができる。PPGC225内のチェッカ230は、内部比較値を生成し、この値をDTSM240に提供する。次に、DTSM240は、内部比較値を、DRAM210から受信したサンプリングクロック信号値と比較することができ、比較結果に基づいて調整信号を生成して、ライトDQS(ライトタイミング信号)をDRAM210内のクロックに一致させることができる。次に、DTSM240は、タイミング/電圧制御ロジック280に指示することによって、受信機255及びドライバ260,265についてタイミングパラメータを調整して、メモリPHYクロック及びDRAMクロックを同期させることができる。例えば、内部比較値が「0」であって、DRAMクロックのサンプリング値が「1」である場合には、DTSM240は、タイミング/電圧制御ロジック280に指示することによって、メモリPHY205のタイミングを所定の時間長だけ進めることができる。内部比較値が「1」であって、DRAMクロックのサンプリング値が「1」である場合には、DTSM240は、タイミング/電圧制御ロジック282に指示することによって、メモリPHY205のタイミングを所定の時間長だけ遅らせることができる。このプロセスを繰り返し行なって、メモリPHY205クロック及びDRAMクロックの同期を所定の許容範囲内に収めることができる。
【0038】
ブロック715では、トレーニングロジックは、リード/ライトフェーズトレーニングを実行して、データアイ輪郭の1次元時間領域境界を、メモリPHYとDRAMとの間のリード/ライトデータパスに基づいて決定する。したがって、トレーニングロジックのいくつかの実施形態は、一連のコマンドを送信して、トレーニングシーケンスをDRAM内のアドレスに書き込むことができ、次に、トレーニングシーケンスをDRAMのアドレス指定ロケーションから異なる遅延時間だけ遅らせて、ループ読み出しによって読み出し続けることによって、データアイ輪郭の1次元時間領域境界を決定することができる。例えば、コントローラ215から信号を受信すると、ACSM220は、コマンドを発行して、PPGC225が生成する1つ以上のシーケンスを、DRAM210内の1つ以上のアドレスに書き込むことができる。次に、ACSM220は、一連のリードコマンドをDRAM210内のアドレスに対して発行して、これらのリードコマンドを異なる遅延値でループする。コマンドシーケンスのいくつかの実施形態は、本明細書で説明するように、ACSM220によって、レジスタ222内の命令ワードから読み出される情報に基づいて生成することができる。次に、DTSM240は、ループリードコマンドの各コマンドに対応する受信シーケンスを、提供されたトレーニングシーケンスと比較することによって、データアイ輪郭の左端及び右端を求めることができる。次に、DTSM240は、タイミング/電圧制御ロジック280に指示することによって、タイミングパラメータ、例えば受信機255の位相を調整して、左端と右端との間の中間点等のデータアイ輪郭内の所定位置に一致させることができる。
【0039】
ブロック720では、トレーニングロジックは、2次元(2D)リード/ライトフェーズトレーニングを実行して、データアイ輪郭の電圧レベルを、メモリPHYとDRAMとの間のリード/ライトデータパスに基づいて求める。したがって、トレーニングロジックのいくつかの実施形態は、一連のリードコマンド/ライトコマンドを送信して、トレーニングシーケンスをDRAMから読み出し、DRAMに書き込むことができる。一連のリードコマンド/ライトコマンドは、異なるタイミング遅延時間及び異なる電圧オフセットを用いて実行することによって、データアイ輪郭の電圧レベルを求めることができる。例えば、コントローラ215から信号を受信すると、ACSM220は、コマンドを発行して、PPGC225が生成する1つ以上のシーケンスを、DRAM210内の1つ以上のアドレスに、初期タイミング遅延時間を用いて書き込むことができる。次に、ACSM220は、一連のループリードコマンドをDRAM210内のアドレスに対して発行することができる。リードコマンド/ライトコマンドは、異なる電圧オフセット値を受信機255又はドライバ260,265に提供することによって同時に発行することができる。コマンドシーケンスのいくつかの実施形態は、本明細書で説明するように、ACSM220によって、レジスタ222内の命令ワードから読み出される情報に基づいて生成することができる。次に、DTSM240は、ループリードコマンドの各コマンドに対応する受信シーケンスを、提供されたトレーニングシーケンスと比較することによって、初期タイミング遅延時間に対応するデータアイ輪郭の左端と右端との間の電圧レベルを求めることができる。タイミング遅延時間は変更することができ(例えば、インクリメント又はデクリメントする)、電圧レベルを求めるプロセスを繰り返すことができる。このプロセスを繰り返して、2次元データアイ輪郭を、タイミング遅延時間及び電圧レベルの範囲に亘って生成することができる。それとは別に、いくつかの実施形態は、電圧レベル及びループを、選択された電圧レベルに対応するタイミング遅延時間に亘って繰り返し選択することによって、2次元データアイ輪郭を生成することができる。
【0040】
DTSM240は、タイミング/電圧制御ロジック280に指示することにより、タイミング遅延及び電圧オフセットを受信機255又はドライバ260,265について調整して、最良の電圧レベル及びタイミング遅延時間を与えるデータアイ輪郭内の位置に一致させることができる。タイミング遅延時間又は電圧オフセットに対する調整範囲は、サンプリングトレーニングデータ内の適正サンプル及び不正サンプルの数に基づいて設定することができる。DTSM240のいくつかの実施形態は、最適なタイミング遅延時間及び電圧オフセットを、サンプリングトレーニングデータ内の不正サンプルに対する適正サンプルの所定の比に基づいて求めることができる。例えば、DTSM240は、タイミング遅延時間及び電圧オフセットを、メモリPHY205から受信した不正サンプル数に対する適正サンプル数の比が所定比と等しいか、又は所定比を下回るまで調整することができる。DTSM240のいくつかの実施形態は、所定比を用いて、データアイ輪郭の形状を、より良好な最適トレーニング位置を求めることができる予測値で変更することができる。例えば、2Dアイ輪郭は、所定比に基づいて拡大又は縮小させることができる。2Dデータアイ輪郭に対する他の変更も可能である。
【0041】
いくつかの実施形態では、上述した装置及び方法は、図1図7を参照して説明したメモリPHY等の1つ以上の集積回路(IC)装置(集積回路パッケージ又はマイクロチップとも呼ばれる)を含むシステムにおいて実現することができる。電子設計自動化(EDA)ソフトウェアツール及びコンピュータ支援設計(CAD)ソフトウェアツールは、これらのIC装置の設計及び製造に用いることができる。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表現される。1つ以上のソフトウェアプログラムは、コンピュータシステムが実行可能なコードを含むことによってコンピュータシステムを操作し、1つ以上のIC装置の回路を表すコードで動作させることによってプロセスの少なくとも一部を実行して、製造システムを設計又は適合させて回路を製造することができる。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムにアクセスできるコンピュータ可読記憶媒体に記憶される。同様に、IC装置の設計又は製造の1つ以上の工程を表すコードは、コンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶することができ、当該コードに対して、コンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスすることができる。
【0042】
コンピュータ可読記憶媒体は、使用時にコンピュータシステムからアクセスできる任意の記憶媒体、又は、記憶媒体の組み合わせを含むことによって、命令及び/又はデータをコンピュータシステムに提供することができる。このような記憶媒体としては、これらに限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ若しくは磁気ハードディスク)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、リードオンリメモリ(ROM)若しくはフラッシュメモリ)、又は、微小電子機械システム(MEMS)を利用した記憶媒体が挙げられる。コンピュータ可読記憶媒体は、コンピューティングシステムに内蔵することができ(例えば、システムRAM又はROM)、コンピューティングシステムに強固に取り付けることができ(例えば、磁気ハードドライブ)、コンピューティングシステムに着脱可能に取り付けることができ(例えば、光ディスク又はユニバーサルシリアルバス(USB)系フラッシュメモリ)、又は、コンピュータシステムに有線ネットワーク若しくは無線ネットワークを介して接続することができる(例えば、ネットワークアクセス可能なストレージ(NAS))。
【0043】
図8は、いくつかの実施形態による1つ以上の素子を搭載したIC装置を設計して製造する例示的な方法800を示すフロー図である。上述したように、以下のプロセスの各プロセスに対応して生成されるコードは、非一時的なコンピュータ可読記憶媒体に記憶され、他には、非一時的なコンピュータ可読記憶媒体で具現化されて、対応する設計ツール又は製造ツールによってアクセスし使用することができる。
【0044】
ブロック802では、IC装置の機能仕様を作成する。機能仕様(多くの場合、マイクロアーキテクチャ仕様(MAS)と呼ばれる)は、C、C++、SystemC、Simulink又はMATLABを含む多種多様なプログラミング言語又はモデリング言語のうち何れかの言語で表現することができる。
【0045】
ブロック804では、機能仕様を用いて、IC装置のハードウェアを表すハードウェア記述コードを生成する。いくつかの実施形態では、ハードウェア記述コードは、少なくとも1種類のハードウェア記述言語(HDL)を用いて表現され、ハードウェア記述言語(HDL)は、IC装置の回路をフォーマルに記述して設計するための多種多様なコンピュータ言語、仕様言語又はモデリング言語の何れかの言語を含む。生成されたHDLコードは、通常、IC装置の回路の動作、回路の設計及び体系、及び、IC装置の正しい動作をシミュレーションで検証するためのテストを表す。HDLの例としては、アナログHDL(AHDL)、Verilog HDL(ベリログHDL)、System Verilog HDL(システムベリログHDL)及びVHDLが挙げられる。IC装置に同期デジタル回路が搭載されている場合には、ハードウェア記述コードは、同期デジタル回路の動作を抽象的に表現したレジスタ転送レベル(RTL)コードを含むことができる。他の種類の回路の場合には、ハードウェア記述コードは、回路の動作を抽象的に表現したビヘイビアレベルコードを含むことができる。ハードウェア記述コードで表されるHDLモデルに対して、通常、設計検証に合格するために1回以上のシミュレーション及びデバッグ処理を実行する。
【0046】
ハードウェア記述コードで表される設計を検証した後、ブロック806では、合成ツールを用いてハードウェア記述コードを合成し、IC装置の回路の初期物理構造を表現又は定義するコードを生成する。いくつかの実施形態では、合成ツールは、回路素子(例えば、ゲート、トランジスタ、抵抗、キャパシタ、インダクタ、ダイオード等)と、回路素子間の接続網又は接続配線と、を含む1つ以上のネットリストを生成する。別の構成として、ネットリストの全部又は一部は、合成ツールを用いることなく手動で生成することができる。ハードウェア記述コードと同様に、ネットリストに対して、最終的な一連の1つ以上のネットリストを生成する前に、1回以上のテストプロセス及び検証プロセスを実行することができる。
【0047】
別の構成として、回路図編集設計ツールを用いてIC装置の回路図を生成し、次に、回路図把握ツールを用いて、結果的に得られる回路図を把握することができ、回路図の構成要素及び接続関係を表す1つ以上のネットリスト(コンピュータ可読媒体に記憶される)を生成することができる。次に、把握した回路図に対して、1回以上のシミュレーションを実行してテスト及び検証を行うことができる。
【0048】
ブロック808では、1つ以上のEDAツールが、ブロック806で生成されたネットリストを用いて、IC装置の回路の物理レイアウトを表すコードを生成する。このプロセスは、例えば配置ツールを含むことができ、この配置ツールは、ネットリストを使用してIC装置の回路の各素子の位置を決定又は固定する。さらに、配線ツールを配置プロセスに構築して、回路素子をネットリストに従って接続するために必要な配線を追加して引き回す。結果的に得られるコードは、IC装置の3次元モデルを表す。コードは、例えばグラフィックデータベースシステムII(GDSII)フォーマット等のデータベースファイルフォーマットで表すことができる。このフォーマットのデータは、通常、回路レイアウトに関する幾何学的形状、テキストラベル及び他の情報を階層形式で表す。
【0049】
ブロック810では、物理レイアウトコード(例えば、GDSIIコード)を製造設備に提供し、製造設備では、物理レイアウトコードを用いて、製造設備の製造ツールを構成又は適合させて(例えば、マスク作業を行うことにより)IC装置を製造する。すなわち、物理レイアウトコードは、1つ以上のコンピュータシステムに書き込むことができ、次にこれらのコンピュータシステムは、製造設備のツールの動作、又は、製造設備内で行われる製造処理のツールの動作を全部若しくは一部制御することができる。
【0050】
いくつかの実施形態では、上述した方法の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサにより実行することができる。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体で明確に具現化される1つ以上の実行可能命令セットを含む。ソフトウェアは、命令及び特定データを含むことができ、命令及び特定データを1つ以上のプロセッサが実行すると、1つ以上のプロセッサを操作して、上述した方法の1つ以上の態様を実行する。非一時的なコンピュータ可読記憶媒体としては、例えば磁気ディスク記憶装置若しくは光ディスク記憶装置、フラッシュメモリ等の固体記憶装置、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリ装置若しくは不揮発性メモリ装置等が挙げられる。非一時的なコンピュータ可読記憶媒体に記憶される実行可能命令は、1つ以上のプロセッサが解釈又は実行することができるソースコード、アセンブリ言語コード、オブジェクトコード又は他の命令形式で記憶することができる。
【0051】
概要を上述した操作又は構成要素の全てが必要であるわけではなく、特定の操作又は装置の一部は必要ではなく、1つ以上の更に別の操作を行ってもよい。また、構成要素を記載の構成要素の他に含めてもよいことに留意されたい。さらには、操作が列挙された順序は、必ずしもこれらの操作が行われる順序ではない。また、コンセプトが、特定の実施形態を参照して説明されている。しかしながら、本技術分野の当業者であれば、種々の変形及び変更を、以下の特許請求の範囲に記載される本開示の範囲から逸脱しない限り加えることができることを理解できる。したがって、本明細書及び図は、限定的な意味ではなく例示として捉えられるべきであり、全てのこのような変形は、本開示の範囲に含まれるべきである。
【0052】
効果、他の利点及び課題に対する解決手段について、特定の実施形態を参照しながら説明してきた。しかしながら、効果、利点、課題に対する解決手段、及び、全ての効果、利点又は解決手段をもたらすか更に顕著にする全ての特徴が、何れかの請求項又は全ての請求項の必須の特徴、必要な特徴又は基本的な特徴であると捉えられてはならない。さらに、開示された特定の実施形態は、開示した発明を、異なる態様で、且つ、本明細書において提示された示唆の恩恵を享受する本技術分野の当業者にとって明白な均等な態様で変更して実施することができることから、例示に過ぎない。以下の特許請求の範囲に記載される限定以外の限定を、本明細書において開示された構成又は設計の詳細に加えるものではない。したがって、開示された特定の実施形態は、変更又は改変することができ、全てのこのような変更が、開示した発明の範囲に含まれると考えられる。したがって、本明細書で要求する保護は、以下の特許請求の範囲に記載の通りである。
図1
図2
図3
図4
図5
図6
図7
図8