(57)【特許請求の範囲】
【請求項１】
クロック信号を設定値に応じて遅延させた遅延クロック信号を生成する遅延回路と、
外部ストローブ信号に応じてデータを受け取る期間に応じたマスク信号を生成する信号生成回路と、
前記遅延クロック信号と前記マスク信号を合成して内部ストローブ信号を生成する合成回路と、
前記内部ストローブ信号に応答して前記データをラッチするラッチ回路と、
前記マスク信号と前記内部ストローブ信号との位相関係に応じて前記内部ストローブ信号の位相を調整する調整回路と、
を有する受信回路。
【請求項２】
前記調整回路は、
前記マスク信号を遅延する第１の遅延回路と、
前記内部ストローブ信号を遅延する第２の遅延回路と、
前記第１の遅延回路の出力信号と前記第２の遅延回路の出力信号との位相を検出する位相検出部と、
前記位相検出部の検出結果に応じて、前記第１の遅延回路の出力信号の位相に前記第２の遅延回路の出力信号の位相を等しくするように更新コードを生成する演算部と、
前記更新コードに応じて前記第１の遅延回路の設定値を更新する制御部と、
を含む、請求項１に記載の受信回路。
【請求項３】
前記外部ストローブ信号のプリアンブルを検出して第１の信号を出力する検出回路と、
設定値に応じて前記第１の信号を遅延させて第２の信号を生成する第３の遅延回路と、を含み、
前記信号生成回路は、前記第２の信号に基づいて前記マスク信号を生成する、請求項２に記載の受信回路。
【請求項４】
前記調整回路は、前記更新コードに応じて前記第３の遅延回路の設定値を更新する第２の制御部を含む、請求項３に記載の受信回路。
【請求項５】
前記信号生成回路は、
前記第２の信号と前記外部ストローブ信号を合成してストローブ信号を生成する合成回路と、
前記ストローブ信号に応答して前記遅延クロック信号をカウントし、カウント値がデータ列に応じた設定値に達したときに終了信号を出力するカウンタと、
前記ストローブ信号と前記終了信号とに基づいて前記マスク信号を生成するマスク生成部と、
を含む、請求項３又は４に記載の受信回路。
【請求項６】
コア回路と、インタフェース回路とを有し、
前記コア回路は、前記インタフェース回路を介して対象回路からデータを読み出し、
前記インタフェース回路は、前記対象回路から出力されるデータとストローブ信号を受信する受信回路を有し、
前記受信回路は、
クロック信号を設定値に応じて遅延させた遅延クロック信号を生成する遅延回路と、
前記ストローブ信号に応じて前記データを受け取る期間に応じたマスク信号を生成する信号生成回路と、
前記遅延クロック信号と前記マスク信号を合成して内部ストローブ信号を生成する合成回路と、
前記内部ストローブ信号に応答して前記データをラッチするラッチ回路と、
前記マスク信号と前記内部ストローブ信号との位相関係に応じて前記内部ストローブ信号の位相を調整する調整回路と、
を含む、システム装置。
【請求項７】
クロック信号を設定値に応じて遅延させた遅延クロック信号を生成し、
外部ストローブ信号に応じてデータを受け取る期間に応じたマスク信号を生成し、
前記遅延クロック信号と前記マスク信号を合成して内部ストローブ信号を生成し、
前記内部ストローブ信号に応答して前記データをラッチし、
前記マスク信号と前記内部ストローブ信号との位相に応じて前記クロック信号を遅延する遅延時間を調整し、
前記クロック信号を遅延した信号に基づいて前記内部ストローブ信号を生成して遅延クロック信号を生成する内部ストローブ信号の位相を調整する、
ことを特徴とするタイミング調整方法。
【発明の詳細な説明】
【技術分野】
【０００１】
受信回路、システム装置、及びタイミング調整方法に関する。
【背景技術】
【０００２】
従来、半導体記憶装置としてＤＲＡＭ（Dynamic Random Access Memory）が用いられている。また、近年では、システムの動作速度の高速化に対応するため、クロックの立ち上がりと立ち下がりの双方でデータを入出力するダブルデータレート方式が採用されている。このような半導体記憶装置は、ＤＤＲ−ＳＤＲＡＭ（Double Data Rate Synchronous Dynamic Random Access Memory）、ＤＤＲ２−ＳＤＲＡＭやＤＤＲ３−ＳＤＲＡＭと呼ばれる。
【０００３】
例えばシステム装置がＤＤＲ−ＳＤＲＡＭ（メモリ）からデータを読み出す場合、ＤＤＲ−ＳＤＲＡＭは、リードデータと、そのリードデータに同期したデータストローブ信号を出力する。システム装置内の受信回路は、タイミングを調整したデータストローブ信号、又はクロック信号に基づいてリードデータを取り込む（例えば、特許文献１，２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３３４９４３号公報
【特許文献２】特開２０１０−１２２８４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、データ列ＤＱとストローブ信号ＤＱＳとの間の相対的なタイミングのずれは、システム回路の環境温度の変化や、システム回路の動作電源電圧の変化によっても生じる。このようなタイミングのずれは、リードデータに誤りを生じさせる。
【課題を解決するための手段】
【０００６】
本発明の一観点によれば、クロック信号を設定値に応じて遅延させた遅延クロック信号を生成する遅延回路と、外部ストローブ信号に応じてデータを受け取る期間に応じたマスク信号を生成する信号生成回路と、前記遅延クロック信号と前記マスク信号を合成して内部ストローブ信号を生成する合成回路と、前記内部ストローブ信号に応答して前記データをラッチするラッチ回路と、前記マスク信号と前記内部ストローブ信号との位相関係に応じて前記内部ストローブ信号の位相を調整する調整回路と、を有する。
【発明の効果】
【０００７】
本発明の一観点によれば、データを取り込むタイミングを調整することができる。
【図面の簡単な説明】
【０００８】
【図１】システムの概略ブロック図である。
【図２】メモリインタフェースの一部ブロック回路図である。
【図３】リード動作のタイミング図である。
【図４】タイミング調整に係る信号を示すタイミング図である。
【図５】タイミング調整に係る信号を示すタイミング図である。
【図６】タイミング調整に係る信号を示すタイミング図である。
【図７】トレーニングシーケンスを示すフローチャートである。
【図８】（ａ）（ｂ）はトレーニングシーケンスの説明図である。
【図９】トレーニングシーケンスにおけるタイミング図である。
【図１０】（ａ）〜（ｃ）は、トレーニングシーケンスの説明図である。
【発明を実施するための形態】
【０００９】
以下、一実施形態を添付図面に従って説明する。
図１に示すように、このシステムは、システム回路１０と、システム回路１０によりアクセスされるメモリ２０を有している。システム回路１０は、例えば１つのチップ（System on Chip：ＳｏＣ）であり、所定構造（例えば、ＢＧＡ:Ball Grid Array）のパッケージ（ＰＫＧ）に形成され、このパッケージは基板（例えば、プリント配線板（ＰＣＢ:Printed Circuit Board）に実装されている。メモリ２０は、同期式半導体記憶装置、例えばダブルデータレート方式のダイナミックランダムアクセスメモリ（Double Data Rate Synchronous Dynamic Random Access Memory:ＤＤＲ３−ＳＤＲＡＭ）である。メモリ２０は、チップを含む所定構造（例えば、ＢＧＡ）のパッケージに形成され、このパッケージは、上記の基板に実装されている。システム回路１０はシステム装置の一例であり、メモリ２０は対象回路の一例である。
【００１０】
システム回路１０のコア回路１１は、例えば中央処理装置（Central Processing Unit:ＣＰＵ）とメモリコントローラを有する回路である。コア回路１１は、クロック信号ＣＫをメモリ２０に供給する。また、コア回路１１は、メモリ２０に対するコマンドを、メモリインタフェース回路（メモリＩ／Ｆと表記）１２を介してメモリ２０に供給する。また、システム回路１０は、コマンドの種類に応じて、アドレス，データ等をメモリ２０に供給する。例えば、システム回路１０は、メモリ２０のデータを読み込むためのリードコマンドと、そのデータが格納されたアドレスをメモリインタフェース回路１２に出力する。また、コア回路１１は、メモリ２０にデータを書き込むためのライトコマンドと、データと、そのデータを格納するアドレスをメモリインタフェース回路１２に出力する。
【００１１】
メモリインタフェース回路１２は、メモリ２０に対して、クロック信号ＣＫに基づいて生成したストローブ信号ＤＱＳを出力する。また、メモリインタフェース回路１２は、ストローブ信号ＤＱＳに同期してデータ列ＤＱをメモリ２０に出力する。メモリ２０は、ライトコマンドに応答して、ストローブ信号ＤＱＳに基づいて取り込んだデータ列ＤＱを記憶する。また、メモリ２０は、リードコマンドに応答して、クロック信号ＣＫに基づいて生成したストローブ信号ＤＱＳ及びデータ列ＤＱを出力する。メモリインタフェース回路１２は、ストローブ信号ＤＱＳに基づいてデータ列ＤＱを取り込み、その取り込んだデータ列ＤＱをコア回路１１に出力する。
【００１２】
また、システム回路１０は、メモリインタフェース回路１２においてデータ列ＤＱを取り込むタイミングを調整するトレーニング回路１３を有している。トレーニング回路１３は、所定のタイミング（例えば、システム回路１０の動作開始時）に、データ列ＤＱを取り込むタイミングを調整する。例えば、トレーニング回路１３は、メモリインタフェース回路１２に含まれる遅延回路の遅延時間を変更して所定値のデータをメモリ２０から読み出す動作を繰り返すことにより、データを取り込むためのストローブ信号の位相を調整する。
【００１３】
次に、メモリインタフェース回路１２において、データ列ＤＱを取り込む回路部を説明する。
図２に示すように、データ列ＤＱは、メモリインタフェース回路１２の入力端子Ｐ１を介して、メモリインタフェース回路１２のバッファ回路３１に供給される。また、ストローブ信号ＤＱＳは、入力端子Ｐ２を介して、メモリインタフェース回路１２のバッファ回路３２に供給される。
【００１４】
バッファ回路３１の出力端子は、Ｄ型フリップフロップ回路（ＦＦ回路）３３，３４のデータ入力端子に接続されている。バッファ回路３１は、データ列ＤＱに応答して受信データ列ＲＤＱを出力する。Ｄ型フリップフロップ回路３３，３４はラッチ回路の一例である。
【００１５】
バッファ回路３２の出力端子は、アンド回路３５に接続されている。バッファ回路３２は、ストローブ信号ＤＱＳに応答して受信ストローブ信号ＲＤＳを出力する。
アンド回路３５には、マスク生成部３９と遅延同期ループ回路（Delay Locked Loop （ＤＬＬ）回路）４０により生成されたマスクシフト信号ＤＭＳが供給される。アンド回路３５は、受信ストローブ信号ＲＤＳとマスクシフト信号ＤＭＳとを互いに論理積演算し、演算結果に応じた内部ストローブ信号ＩＲＳを出力する。この内部ストローブ信号ＩＲＳは、カウンタ３６とマスク生成部３７に供給される。
【００１６】
マスク生成部３９は、内部ストローブ信号ＩＲＳに基づいてストローブマスク信号ＤＳＭを生成する。図１に示すストローブ信号ＤＱＳを伝達する伝送路は、双方向通信の伝送路として用いられ、通信されていないときにハイインピーダンス状態にある。伝送路のハイインピーダンス状態は、システム回路１０（メモリインタフェース回路１２）に含まれる通信回路とメモリ２０に含まれる通信回路により設定される。データを出力する通信回路とデータを入力する入力回路の設定により、伝送路は、大きく分けて、プリアンブル期間、データ送信期間、ポストアンブル期間、の３つの状態となる。例えば、図１に示すシステム回路１０は、データ入力に備えて終端回路（ＯＤＴ：On Die Termination）を有効にする。それにより、伝送路は、第１のレベル（例えば、伝送路の振幅の１／２のレベル）となり、第２のレベル（例えばＬレベル）へと遷移する。その後、メモリ２０は、クロック信号ＣＫに応じてストローブ信号ＤＱＳを変化させ、データ列ＤＱを出力する。所定数のデータ列ＤＱを出力すると、システム回路１０の終端回路（ＯＤＴ）により、伝送路は第２のレベルへと遷移する。その後、終端回路（ＯＤＴ）が無効状態に設定されると、伝送路はハイインピーダンス状態となる。図２に示すマスク生成部３９は、内部ストローブ信号ＩＲＳのレベルに基づいてプリアンブル期間（第２のレベル）を検出し、Ｈレベルのストローブマスク信号ＤＳＭを出力する。また、マスク生成部は、ポストアンブル（第２のレベルへの遷移）を検出し、Ｌレベルのストローブマスク信号ＤＳＭを出力する。マスク生成部３９は検出回路の一例である。なお、プリアンブルとポストアンブルを検出する検出回路をマスク生成部３９と別に備え、マスク生成部３９は検出回路の出力に応じてストローブマスク信号ＤＳＭを生成するようにしてもよい。
【００１７】
ＤＬＬ回路４０は、レジスタ４０ａに格納された設定値（遅延コードＤＣ１）に応じた時間だけ、入力信号（ストローブマスク信号ＤＳＭ）を遅延（位相シフト）したマスクシフト信号ＤＭＳを出力する。このマスクシフト信号ＤＭＳは、上記のアンド回路３５に供給される。
【００１８】
カウンタ３６には、バースト長（Burst Length：ＢＬ）ＢＬＮが例えば図１に示すコア回路１１から設定される。バースト長ＢＬＮはメモリ２０が連続的に入出力するデータの数であり、設定値は例えば「４」である。また、カウンタ３６には、ＤＬＬ回路４１によって内部クロック信号ＣＫ２から生成された内部クロック信号ＣＫＳが供給される。
【００１９】
内部クロック信号ＣＫ２の周波数は、メモリ２０に供給するクロック信号ＣＫの周波数と同じである。ＤＬＬ回路４１は、レジスタ４１ａに格納された設定値（遅延コードＤＣ２）に応じた時間だけ、内部クロック信号ＣＫ２を遅延させ、位相シフトした内部クロック信号ＣＫＳを生成する。
【００２０】
カウンタ３６は、内部クロック信号ＣＫＳに基づいて動作し、内部ストローブ信号ＩＲＳをカウントする。そして、カウンタ３６は、カウント値が設定されたバースト長ＢＬＮと等しくなると、終了検出信号ＢＬＥを出力する。この終了検出信号ＢＬＥは、マスク生成部３７に供給される。
【００２１】
マスク生成部３７は、終了検出信号ＢＬＥがＬレベルのとき、Ｈレベルの内部ストローブ信号ＩＲＳに応答してＨレベルの内部マスク信号ＣＫＭを出力する。これにより、マスク生成部３７は、内部ストローブ信号ＩＲＳの最初の立ち上がりタイミングで内部マスク信号ＣＫＭをＨレベルに立ち上げる。また、マスク生成部３７は、Ｈレベルの終了検出信号ＢＬＥに応答してＬレベルの内部マスク信号ＣＫＭを出力する。アンド回路３５，カウンタ３６，マスク生成部３７は第２の信号生成回路に含まれる。
【００２２】
アンド回路３８には、シフトされた内部クロック信号ＣＫＳと、マスク生成部３７から出力される内部マスク信号ＣＫＭが供給される。アンド回路３８は、内部クロック信号ＣＫＳと内部マスク信号ＣＫＭとを演算（論理積演算）し、演算結果に応じた内部ストローブ信号ＣＳＴを出力する。例えば、アンド回路３８は、Ｌレベルの内部マスク信号ＣＫＭに応答してＬレベルの内部ストローブ信号ＣＳＴを出力し、Ｈレベルの内部マスク信号ＣＫＭに応答して内部クロック信号ＣＫＳと実質的に等しいタイミングで立ち上がり／立ち下がる内部ストローブ信号ＣＳＴを出力する。ＤＬＬ回路４１とアンド回路３８は第１の信号生成回路に含まれる。アンド回路３８は合成回路の一例である。この内部ストローブ信号ＣＳＴは、フリップフロップ回路３３，３４のクロック入力端子に供給される。
【００２３】
フリップフロップ回路３３は、Ｈレベルの内部ストローブ信号ＣＳＴに応答して受信データ列ＲＤＱをラッチし、ラッチしたレベルと等しいレベルのリードデータＲＤ１を出力する。フリップフロップ回路３４は、Ｌレベルの内部ストローブ信号ＣＳＴに応答して受信データ列ＲＤＱをラッチし、ラッチしたレベルと等しいレベルのリードデータＲＤ２を出力する。
【００２４】
即ち、フリップフロップ回路３３は、内部ストローブ信号ＣＳＴの立ち上がりタイミングで、受信データ列ＲＤＱをラッチする。フリップフロップ回路３４は、内部ストローブ信号ＣＳＴの立ち下がりタイミングで、受信データ列ＲＤＱをラッチする。従って、フリップフロップ回路３３が受信データ列ＲＤＱをラッチするタイミングと、フリップフロップ回路３４が受信データ列ＲＤＱをラッチするタイミングは、互いに１８０度ずれている。
【００２５】
従って、メモリインタフェース回路１２に含まれる受信回路は、内部クロック信号ＣＫ２に基づいて生成した内部ストローブ信号ＣＳＴに応答してデータ列ＤＱ（受信データ列ＲＤＱ）を取り込む。従って、図１に示すシステム回路１０とメモリ２０との間の伝送路で発生するスキュ（Ｓｋｅｗ）の影響を受けることなくデータ列ＤＱを取り込むことができる。
【００２６】
内部ストローブ信号ＣＳＴは、シフトされた内部クロック信号ＣＫＳと等しいタイミングで変化する。内部クロック信号ＣＫＳは、内部クロック信号ＣＫ２に基づいて、ＤＬＬ回路４１により、レジスタ４１ａに記憶された設定値に従って生成される。
【００２７】
次に、内部クロック信号ＣＫＳとマスクシフト信号ＤＭＳのタイミングの調整を説明する。
上記マスク生成部３７により生成された内部マスク信号ＣＫＭは、調整回路５０のＤＬＬ回路５１に供給される。ＤＬＬ回路５１は、内部マスク信号ＣＫＭに第１の遅延量（例えば、内部クロック信号ＣＫ２の位相の２／４周期（１８０度）分）を与えて遅延マスク信号ＤＣＭを生成する。ＤＬＬ回路５１は第１の遅延回路の一例である。
【００２８】
上記アンド回路３８から出力される内部ストローブ信号ＣＳＴは、ＤＬＬ回路５２に供給される。ＤＬＬ回路５２は、内部ストローブ信号ＣＳＴに第２の遅延量（例えば、内部クロック信号ＣＫ２の位相の１／４周期（９０度）分）を与えて遅延ストローブ信号ＤＳＴを生成する。ＤＬＬ回路５２は第２の遅延回路の一例である。
【００２９】
位相検出部５３は、遅延ストローブ信号ＤＳＴと遅延マスク信号ＤＣＭとの位相関係を検出し、検出結果に応じた位相検出信号ＰＤＲを生成する。詳しくは、位相検出部５３は、遅延ストローブ信号ＤＳＴの最初の立ち上がりエッジ（１ｓｔ  Ｒｉｓｅ  Ｅｄｇｅ）と遅延マスク信号ＤＣＭの位相関係（ストローブ信号ＤＳＴの１ｓｔ  Ｒｉｓｅ  Ｅｄｇｅに対する遅延マスク信号ＤＣＭの進み・遅れ）を検出する。そして、位相検出部５３は、検出結果に応じたレベルの位相検出信号ＰＤＲを出力する。
【００３０】
上記したように、内部マスク信号ＣＫＭは、内部ストローブ信号ＩＲＳの最初の立ち上がりタイミングでＨレベルに立ち上がる。内部ストローブ信号ＩＲＳは、図１に示すメモリ２０から出力されるストローブ信号ＤＱＳに対応し、メモリ２０から出力されるデータ列ＤＱと同じ位相である。内部ストローブ信号ＣＳＴは、データ列ＤＱを取り込むために、後述するように、データ列ＤＱのデータウインドウの中央、つまり、データ列ＤＱから９０度位相が遅れている。従って、電源電圧の変動や周囲温度の変動が無いとき、遅延マスク信号ＤＣＭの位相は、遅延ストローブ信号ＤＳＴの位相と等しい。
【００３１】
例えば、図１に示すシステムにおいて、電源電圧の変動や周囲温度の変動により、チップ間の伝送路における遅延量が変化する。この遅延量の変化により、内部クロック信号ＣＫＳのタイミングに対し、受信ストローブ信号ＲＤＳのタイミングに進み又は遅れが生じる。受信ストローブ信号ＲＤＳの位相が内部クロック信号ＣＫＳよりも進むと、遅延ストローブ信号ＤＳＴの最初の立ち上がりタイミングにおいて、遅延マスク信号ＤＣＭはＨレベルである。このとき、位相検出部５３は、Ｈレベルの位相検出信号ＰＤＲを出力する。
【００３２】
受信ストローブ信号ＲＤＳの位相が内部クロック信号ＣＫＳよりも遅れると、遅延ストローブ信号ＤＳＴの最初の立ち上がりタイミングにおいて、遅延マスク信号ＤＣＭはＬレベルである。このとき、位相検出部５３は、Ｌレベルの位相検出信号ＰＤＲを出力する。
【００３３】
演算部５４は、位相検出部５３から出力される位相検出信号ＰＤＲに基づいて、更新コードＵＣを生成する。
そして、演算部５４は、データ列ＤＱの受け取りに影響しないタイミングで、各ＤＬＬ回路４０，４１のレジスタ４０ａ，４１ａの設定値を、生成した更新コードＵＣにより更新する。レジスタ４０ａ，４１ａの設定値の更新には、例えば、終了検出信号ＢＬＥが用いられる。終了検出信号ＢＬＥは、リードコマンドに対応するデータの受信（リード動作）が終了したことを示す。従って、演算部５４は、リード動作の終了を待って、レジスタ４０ａ，４１ａの設定値を更新する。
【００３４】
例えば、演算部５４は、カウンタ３６から出力される終了検出信号ＢＬＥに応答して更新コードＵＣを出力する。終了検出信号ＢＬＥは、リードコマンドに対応するデータの受信（リード動作）が終了したことを示す。従って、演算部５４は、リード動作の終了を待って、生成した更新コードＵＣを出力する。
【００３５】
第１のタイミング制御部５５と第２のタイミング制御部５６はそれぞれ、終了検出信号ＢＬＥを受け取る。第１のタイミング制御部５５は、終了検出信号ＢＬＥを所定時間遅延した信号に基づくタイミングで、更新コードＵＣに応じた遅延コードＤＣ１をレジスタ４０ａに格納する。同様に、第２のタイミング制御部５６は、終了検出信号ＢＬＥを所定時間遅延した信号に基づくタイミングで、更新コードＵＣに応じた遅延コードＤＣ２をレジスタ４１ａに格納する。終了検出信号ＢＬＥに対する遅延時間を調整することにより、第１のレジスタ４０ａに対する遅延コードＤＣ１の設定タイミングと、第２のレジスタ４１ａに対する遅延コードＤＣ２の設定タイミングを、同期させる。
【００３６】
次に、メモリインタフェース回路１２とトレーニング回路１３の動作を説明する。
［トレーニング処理の概要］
図１に示すメモリインタフェース回路１２及びトレーニング回路１３は、次に示す各処理を実行し、データ列ＤＱを取り込むタイミングを調整する。
（ａ）システム起動。
（ｂ）ゲートトレーニング（Gate Traning）。
（ｃ）データアイトレーニング（Data Eye Traning）。
（ｄ）遅延コード算出（Read Delay Code Cal.）。
（ｅ）遅延コード更新（Read Delay Code Update）。
【００３７】
トレーニング回路１３は、上記（ｂ）の処理を実行し、図２に示すＤＬＬ回路４０のレジスタ４０ａに格納する設定値を調整する。また、トレーニング回路１３は、上記（ｃ）の処理を実行し、図２に示すＤＬＬ回路４１のレジスタ４１ａに格納する設定値を調整する。メモリインタフェース回路１２は、上記（ｄ），（ｅ）の処理を繰り返し実行し、レジスタ４０ａ，４１ａの設定値を調整する。
【００３８】
［タイミング調整（１）］
次に、上記（ｃ）データアイトレーニング（Data Eye Traning）の動作を説明する。
図１に示すトレーニング回路１３は、図７に示すフローチャートに従ってメモリインタフェース回路１２を介してメモリ２０をアクセスし、データ列ＤＱを取り込むタイミングを調整する。
【００３９】
先ず、初期化処理において、内部クロック信号ＣＫＳを生成するＤＬＬ回路４１のレジスタ４１ａに格納した遅延値Ｎを初期値（＝０）にセットする（ステップ６１）。
次いで、判定処理において、所定の遅延値Ｎまで処理を終了したか否かを判定する（ステップ６２）。例えば、遅延値Ｎを初期値（＝０）から所定の遅延時間（Ｄｅｌａｙ）に対応する値まで変更する。遅延時Ｎと遅延時間（Ｄｅｌａｙ）の一例を図８（ａ）に示す。この例では、遅延時間を８段階に調整する。従って、遅延値Ｎが「８」になるまで、次に示す処理を繰り返し実行する。
【００４０】
次いで、遅延値設定処理（Ｄｅｌａｙ  Ｓｅｔ）において、遅延値Ｎを図２に示すレジスタ４１ａに設定する（ステップ６３）。図８（ａ）に示す例では、遅延値Ｎが初期値（＝０）のとき、図２に示すＤＬＬ回路４１は、内部クロック信号ＣＫ２に対して、「０」の遅延時間、即ち内部クロック信号ＣＫ２と同じタイミングの内部クロック信号ＣＫＳを生成する。そして、遅延値Ｎを最大（＝７）としたとき、図２に示すＤＬＬ回路４１は、内部クロック信号ＣＫ２に対して、「１４０ｐｓｅｃ（ピコ秒）」の遅延時間、内部クロック信号ＣＫ２から遅れたタイミングの内部クロック信号ＣＫＳを生成する。
【００４１】
次いで、書き込み処理（Ｗｒｉｔｅ）において、ライトコマンドにより、図１に示すメモリインタフェース回路１２を介してメモリ２０に対して書き込み動作を行う（ステップ６４）。このとき、書き込むデータ列は、連続する複数のデータをそれぞれ識別可能に設定され、例えば、８ビットのデータ列ＤＱの各ビットは「０１０１０１０１」である。これにより、連続するデータ（例えば、データＤ０（＝０）とデータＤ１（＝１））を識別することが可能となる。
【００４２】
次いで、読み出し処理（Ｒｅａｄ）において、リードコマンドにより、先に書き込んだデータを読み出す（ステップ６５）。
次いで、読み出したデータが書き込んだデータと一致している（Ｐａｓｓ）か異なる（Ｆａｉｌ）かを判定し、判定結果をレジスタに順次格納する（ステップ６６）。
【００４３】
次いで、遅延値Ｎを切り替え（Ｎ＝Ｎ＋１）（ステップ６７）、ステップ６２へ遷移する。
ステップ６２において、所定数（例えば「８」）のデータ列ＤＱの読み込みを終了すると（判定：ＹＥＳ）、ステップ６６において順次記憶した判定結果に基づいて、図２に示すＤＬＬ回路４１の遅延値を設定する（ステップ６８）。例えば、パス領域（パスと判定した複数の遅延値Ｎ）の中央の遅延値を、設定値として図２に示すレジスタ４１ａに設定する。例えば、図８（ｂ）に示すように、遅延値Ｎが「１」から「５」の領域においてパス（Ｐａｓｓ）と判定した。従って、「１」から「５」の領域の中央の遅延値Ｎ（＝３）を算出し、その算出した遅延値を図２に示すレジスタ４１ａに設定する。
【００４４】
なお、上記したタイミング調整において、内部クロック信号ＣＫＳの調整範囲を１周期とし、遅延時間の調整ステップは、可能な限り小さいほうがよい。
例えば、図９に示すように、遅延値Ｎが初期値（＝０）における内部クロック信号ＣＫＳ（実線で示す波形）に対して、遅延値Ｎを準時増加し、タイミングが互いに異なる複数の内部クロック信号ＣＫＳ（破線で示す波形）を生成する。タイミングが異なる複数の内部クロック信号ＣＫＳの立ち上がりエッジのタイミングで、図１に示すメモリ２０から読み出したデータ列ＤＱを取り込み、そのデータ（リードデータ）と、メモリ２０に書き込んだデータ（ライトデータ）とを比較する。両データが一致しているときパス（Ｐａｓｓ）と判定し、両データが互いに異なるときフェイル（Ｆａｉｌ）と判定する。
【００４５】
パスと判定した内部クロック信号ＣＫＳに対応する複数の遅延値Ｎのうちの中央の値を設定値とする。従って、内部クロック信号ＣＫＳの遅延時間を調整するステップ（遅延時間）は、細かい（短い）ほうがよい。これにより、データ列ＤＱを取り込むフリップフロップ回路３３，３４において、セットアップ（Ｓｅｔｕｐ）におけるタイミングマージンと、ホールド（Ｈｏｌｄ）におけるタイミングマージンを、互いに等しくすることができる。
【００４６】
また、上記したタイミング調整において、複数（例えばバースト長と等しい数）のデータが連続するデータ列ＤＱのうち、パス−フェイルの判定に、先頭のデータを除くデータ、つまり２つ目以降のデータを用いるとよい。２つ目以降のデータを用いて内部ストローブ信号ＣＳＴ（内部クロック信号ＣＫＳ）のタイミング調整を行うことで、データが有効な期間（データウインド）の中央付近に、内部ストローブ信号ＣＳＴのエッジを合わせることができる。
【００４７】
即ち、図２に示すアンド回路３８は、Ｌレベルの内部マスク信号ＣＫＭに応答してＬレベルの内部ストローブ信号ＣＳＴを出力し、Ｈレベルの内部マスク信号ＣＫＭに応答して内部クロック信号ＣＫＳと等しいレベルの内部ストローブ信号ＣＳＴを出力する。内部マスク信号ＣＫＭの立ち上がりタイミングは、ストローブ信号ＤＱＳの立ち上がりタイミングに対応し、ストローブ信号ＤＱＳの立ち上がりタイミングは、データ列ＤＱのタイミングと等しい。従って、図１０（ａ）に示すように、内部マスク信号ＣＫＭの立ち上がりからデータ列ＤＱ（データＤ０）のパス−フェイルを判定することで、パスと判定する期間、つまりデータウインドウの開始と終了を判定することができる。
【００４８】
しかし、図１０（ｂ）に示すように、何らかの要因によって内部マスク信号ＣＫＭの立ち上がりタイミングが遅れると、データＤ０の途中から判定を行うことになる。その結果、データＤ０のデータウインドウを正しく判定することができない。このように判定したデータウインドウによって調整される内部ストローブ信号ＣＳＴの立ち上がりタイミングは、正しいデータウインドウの中央から遅れることになり、ホールド（Ｈｏｌｄ）のタイミングマージンが少なくなる。
【００４９】
このため、図１０（ｃ）に示すように、データＤ１に対してパス−フェイル判定を行うことで、データＤ１に対してパスと判定する期間、つまりデータウインドウの開始と終了を正しく判定することができる。これにより、データが有効な期間（データウインドウ）の中央付近に内部ストローブ信号ＣＳＴのエッジを合わせることができる。そして、セットアップ（Ｓｅｔｕｐ）におけるタイミングマージンと、ホールド（Ｈｏｌｄ）におけるタイミングマージンを、互いに等しくすることができる。
【００５０】
［データの取り込み］
次に、データ列ＤＱを取り込む動作を説明する。
図３に示すように、受信ストローブ信号ＲＤＳのプリアンブル（Ｌレベルへの遷移）を検出し、Ｈレベルのストローブマスク信号ＤＳＭを生成する。
【００５１】
Ｈレベルのストローブマスク信号ＤＳＭに基づいて、受信ストローブ信号ＲＤＳに応じて内部ストローブ信号ＩＲＳが出力される。
マスク生成部３７は、内部ストローブ信号ＩＲＳの最初の立ち上がりエッジを検出すると、Ｈレベルの内部マスク信号ＣＫＭを出力する。アンド回路３８は、Ｈレベルの内部マスク信号ＣＫＭに基づいて、内部クロック信号ＣＫＳに応じた内部ストローブ信号ＣＳＴを出力する。この内部ストローブ信号ＣＳＴの立ち上がりのタイミングと立ち下がりのタイミングでそれぞれ受信データ列ＲＤＱがラッチされ、データＤ０〜Ｄ７として出力される。
【００５２】
カウンタ３６は、Ｈレベルの内部ストローブ信号ＩＲＳに応答して、内部クロック信号ＣＫＳのサイクル数（パルス数）をカウントする。そのカウント値がバースト長ＢＬＮと等しくなると、内部ストローブ信号ＩＲＳの立ち下がりに基づいてＨレベルの終了検出信号ＢＬＥが出力される。
【００５３】
マスク生成部３７は、Ｈレベルの終了検出信号ＢＬＥに基づいて、Ｌレベルの内部マスク信号ＣＫＭを出力する。アンド回路３８は、Ｌレベルの内部マスク信号ＣＫＭに応答してＬレベルの内部ストローブ信号ＣＳＴを出力する。
【００５４】
［タイミングの調整（２）］
次に、上記の（ｄ）遅延コード算出と（ｅ）遅延コード更新の動作を説明する。
図４に示すように、内部マスク信号ＣＫＭをＤＬＬ回路５１により第１の遅延時間（例えば、内部クロック信号ＣＫ２の位相１８０°分）遅らせ、遅延マスク信号ＤＣＭを生成する。内部ストローブ信号ＣＳＴをＤＬＬ回路５２により第２の遅延時間（例えば、内部クロック信号ＣＫ２の位相９０°分）遅らせ、遅延ストローブ信号ＤＳＴを生成する。
【００５５】
図２に示す位相検出部５３は、遅延ストローブ信号ＤＳＴと遅延マスク信号ＤＣＭの位相関係を検出する。例えば、位相検出部５３は、遅延ストローブ信号ＤＳＴの最初の立ち上がりエッジを検出し、その立ち上がりエッジのタイミングにおける遅延マスク信号ＤＣＭのレベルを検出する。そして、位相検出部５３は、検出した遅延マスク信号ＤＣＭのレベルに応じたレベルの位相検出信号ＰＤＲを出力する。例えば、位相検出部５３は、Ｈレベルの遅延マスク信号ＤＣＭを検出するとＨレベルの位相検出信号ＰＤＲを出力し、Ｌレベルの遅延マスク信号ＤＣＭを検出するとＬレベルの位相検出信号ＰＤＲを出力する。
【００５６】
演算部５４は、Ｈレベルの位相検出信号ＰＤＲに基づいて、次のリード時に、マスクシフト信号ＤＭＳと内部クロック信号ＣＫＳを生成する遅延時間を増加させるか減少させるかを判定し、更新コードＵＣを生成する。更新コードＵＣは例えば１ビットの信号であり、遅延時間を増加させるときに「１」の更新コードＵＣを生成し、遅延時間を減少させるときに「０」の更新コードＵＣを生成する。
【００５７】
タイミング制御部５５は、演算部５４から出力される更新コードＵＣに基づいて、レジスタ４０ａの設定値を更新する。同様に、タイミング制御部５６は、演算部５４から出力される更新コードＵＣに基づいて、レジスタ４１ａの設定値を更新する。レジスタ４０ａ，４１ａに格納された設定値は、上記の［タイミング調整（１）］において説明したように、トレーニング回路１３により実行されるデータアイトレーニングにおいて設定されている。
【００５８】
システム装置の動作環境（周辺温度）や動作電源の電圧が変動（ＶＴ変動）すると、内部ストローブ信号ＣＳＴのタイミングと、データ列ＤＱ及びストローブ信号ＤＱＳのタイミングとが、相対的に変化する。内部マスク信号ＣＫＭは、ストローブ信号ＤＱＳに基づいて生成され、受信データ列ＲＤＱと同様に変化する。
【００５９】
例えば、図５に示すように、受信ストローブ信号ＲＤＳ（内部マスク信号ＣＫＭ）が早くなると、遅延ストローブ信号ＤＳＴの最初の立ち上がりエッジのタイミングにおいて、遅延マスク信号ＤＣＭはＨレベルであるため、Ｈレベルの位相検出信号ＰＤＲが出力される。演算部５４は、Ｈレベルの位相検出信号ＰＤＲに基づいて、次のリード時に、内部クロック信号ＣＫＳを生成するための遅延時間を減少させるように「１」（Ｈレベル）の更新コードＵＣを出力する。
【００６０】
図２に示すタイミング制御部５６は、演算部５４から出力される更新コードＵＣに基づいて、レジスタ４１ａの設定値を更新（減少）する。例えば、タイミング制御部５６は、レジスタ４１ａの設定値に対し、所定の調整ステップを減算した値をレジスタ４１ａに格納する、つまり、レジスタ４１ａの設定値を減少させる。これにより、ＤＬＬ回路４１は、内部クロック信号ＣＫ２に基づいて、設定値に応じた遅延時間にて生成される内部クロック信号ＣＫＳのタイミングが早くなる。
【００６１】
同様に、タイミング制御部５５は、演算部５４から出力される更新コードＵＣに基づいて、レジスタ４０ａの設定値を更新（減少）する。これにより、ＤＬＬ回路４０は、ストローブマスク信号ＤＳＭに基づいて、設定値に応じた遅延時間にて生成されるマスクシフト信号ＤＭＳのタイミングが早くなる。
【００６２】
また、図６に示すように、受信ストローブ信号ＲＤＳ（内部マスク信号ＣＫＭ）が遅くなると、遅延ストローブ信号ＤＳＴの最初の立ち上がりエッジのタイミングにおいて、遅延マスク信号ＤＣＭはＬレベルであるため、Ｌレベルの位相検出信号ＰＤＲが出力される。演算部５４は、Ｌレベルの位相検出信号ＰＤＲに基づいて、次のリード時に、内部クロック信号ＣＫＳを生成するための遅延時間を増加させるように「０」（Ｈレベル）の更新コードＵＣを出力する。
【００６３】
図２に示すタイミング制御部５６は、演算部５４から出力される更新コードＵＣに基づいて、レジスタ４１ａの設定値を更新する。例えば、タイミング制御部５６は、レジスタ４１ａの設定値から、所定の調整ステップを加算した値をレジスタ４１ａに格納する、つまり、レジスタ４１ａの設定値を増加させる。これにより、ＤＬＬ回路４１は、内部クロック信号ＣＫ２に基づいて、設定値に応じた遅延時間にて生成される内部クロック信号ＣＫＳのタイミングが遅くなる。
【００６４】
同様に、タイミング制御部５５は、演算部５４から出力される更新コードＵＣに基づいて、レジスタ４０ａの設定値を更新（増加）する。これにより、ＤＬＬ回路４０は、ストローブマスク信号ＤＳＭに基づいて、設定値に応じた遅延時間にて生成されるマスクシフト信号ＤＭＳのタイミングが遅くなる。
【００６５】
このように、調整回路５０は、遅延マスク信号ＤＣＭの位相と、遅延ストローブ信号ＤＳＴの位相を等しくするように、内部クロック信号ＣＫＳを生成するＤＬＬ回路４１の遅延量（レジスタ４１ａに格納される設定値）を調整する。これにより、内部マスク信号ＣＫＭと内部クロック信号ＣＫＳの位相差、つまり内部マスク信号ＣＫＭと内部ストローブ信号ＣＳＴの位相差が９０度となり、内部ストローブ信号ＣＳＴのエッジタイミングは、データ列ＤＱ（受信データ列ＲＤＱ）のデータウインドウにおける中央となる。
【００６６】
以上記述したように、本実施形態によれば、以下の効果を奏する。
（１）内部クロック信号ＣＫ２をＤＬＬ回路４１により遅延して内部クロック信号ＣＫＳを生成する。その内部クロック信号ＣＫＳを、ストローブ信号ＤＱＳに基づいて生成した内部マスク信号ＣＫＭによりマスクして内部ストローブ信号ＣＳＴを生成する。そして、フリップフロップ回路３３は、内部ストローブ信号ＣＳＴの立ち上がりエッジのタイミングで受信データ列ＲＤＱをラッチしてリードデータＲＤ１を出力し、フリップフロップ回路３４は、内部ストローブ信号ＣＳＴの立ち下がりエッジのタイミングで受信データ列ＲＤＱをラッチしてリードデータＲＤ２を出力する。
【００６７】
従って、このメモリインタフェース回路１２は、メモリ２０とメモリインタフェース回路１２との間の伝送路における信号反射やクロストークノイズなどの要因に起因するタイミングマージンの減少を抑制することができる。
【００６８】
（２）メモリインタフェース回路１２の受信回路は、データ列ＤＱと同期したストローブ信号ＤＱＳに基づいて、データ列ＤＱを受け取る期間に応じた内部マスク信号ＣＫＭを生成する。調整回路５０は、内部マスク信号ＣＫＭと内部ストローブ信号ＣＳＴの位相関係に応じて、内部ストローブ信号ＣＳＴの位相を調整する。従って、ＶＴ変動により内部マスク信号ＣＫＭのタイミング、つまりデータ列ＤＱのタイミングに応じて、そのデータ列ＤＱをラッチするための内部ストローブ信号ＣＳＴの位相を調整することで、データ列ＤＱを取り込むタイミングマージンの減少を抑制し、正しいデータを取り込むことができる。
【００６９】
（３）メモリインタフェース回路１２は、内部ストローブ信号ＩＲＳに応答してクロック信号ＣＫＳをカウントするカウンタ３６を備え、このカウンタ３６は、カウント値がバースト長ＢＬＮと等しくなると、終了検出信号ＢＬＥを出力する。調整回路５０の演算部５４は、終了検出信号ＢＬＥに応じて更新コードＵＣを出力する。タイミング制御部５６は、終了検出信号ＢＬＥに応じて、内部クロック信号ＣＫＳを生成するＤＬＬ回路４１のレジスタ４１ａに格納された設定値を、更新コードＵＣに応じて更新する。従って、メモリインタフェース回路は、メモリ２０からデータ列ＤＱを受け取る毎に、内部クロック信号ＣＫＳ、つまり内部ストローブ信号ＣＳＴのタイミングを調整する。従って、ＶＴ変動に追従して内部ストローブ信号ＣＳＴのタイミングを合わせることができる。また、メモリ２０からデータを読み出す毎にタイミングを調整するため、動作中にトレーニング回路１３を動作させてタイミング調整を行う必要がない。従って、タイミング調整のためにコア回路１１の読み出し動作を抑制（停止）させる必要が無く、メモリ２０からのデータ読み出しに対するオーバーヘッドを低減することができる。
【００７０】
尚、上記各実施形態は、以下の態様で実施してもよい。
・図１に示すシステムにおいて、システム回路１０とメモリ２０の少なくとも一方をチップが直接基板に実装されてもよい。
【００７１】
・内部クロック信号ＣＫ２に基づいて生成した内部ストローブ信号ＣＳＴの立ち上がりエッジと立ち下がりエッジのタイミングでデータ列ＤＱを取り込むメモリインタフェース回路１２に具体化したが、内部ストローブ信号ＣＳＴの立ち上がりエッジのタイミング、又は立ち下がりエッジのタイミングでデータ列ＤＱを取り込むメモリインタフェース回路に具体化してもよい。
【００７２】
・メモリインタフェース回路１２に限定されず、データ列ＤＱとストローブ信号ＤＱＳにより通信を行う装置に具体化してもよい。
・上記実施形態では、内部マスク信号ＣＫＭと内部ストローブ信号ＣＳＴの位相差が、データ列ＤＱを取り込むために好適な位相差（例えば内部クロック信号ＣＫ２の１／４周期（９０度））であるか否かを検出可能であれば、図２に示すＤＬＬ回路５１，５２の遅延量は、上記の実施形態で説明した遅延量に限定されない。例えば、内部マスク信号ＣＫＭを９０度遅延させた信号と、内部ストローブ信号ＣＳＴを位相検出部５３に供給するようにする。例えば、ＤＬＬ回路５１の遅延量を４５度分とし、ＤＬＬ回路５２の遅延量を１３５度分（＝９０度＋４５度）としてもよい。また、ＤＬＬ回路５１の遅延量を９０度分とし、ＤＬＬ回路５２の遅延量を０度分としてもよい。
【符号の説明】
【００７３】
３３，３４  ラッチ回路
３６  カウンタ
３７，３９  マスク生成部
４０，４１  遅延同期ループ回路（ＤＬＬ回路）
５０  調整回路
５１，５２  遅延同期ループ回路（ＤＬＬ回路）
５３  位相検出部
５４  演算部
５５，５６  タイミング制御部
ＣＫ２  クロック信号
ＣＳＴ  内部ストローブ信号
ＣＫＭ  マスク信号
ＤＱ  データ列
Ｄ０〜Ｄ７  データ
ＤＱＳ  ストローブ信号
【図１】
0005708258.tif 000002
【図２】
0005708258.tif 000003
【図３】
0005708258.tif 000004
【図４】
0005708258.tif 000005
【図５】
0005708258.tif 000006
【図６】
0005708258.tif 000007
【図７】
0005708258.tif 000008
【図８】
0005708258.tif 000009
【図９】
0005708258.tif 000010
【図１０】
0005708258.tif 000011