以下、図面を参照して本発明の実施の形態について説明する。各図面においては、同一要素には同一の符号が付されており、必要に応じて重複説明は省略される。
実施の形態1
まず、実施の形態1にかかるメモリインターフェース回路について説明する。実施の形態1では、DDR3−SDRAMが用いられる場合を例として説明する。図1は、実施の形態1にかかるメモリインターフェース回路100を含む半導体装置120の構成を示す回路ブロック図である。半導体装置120は、メモリインターフェース回路100及び外部回路110を有する。半導体装置120は、外部のメモリデバイス130と接続され、メモリコントローラとして機能する。上述の通り、本実施の形態では、DDR3−SDRAMがメモリデバイス130として用いられる。メモリインターフェース回路100は、外部回路110とメモリデバイス130との間のデータのやり取りを仲介する。
続いて、メモリインターフェース回路100の構成について、詳細に説明する。ライトデータ出力バッファ21の入力は、ライトデータ信号線51を介して、外部回路110と接続される。ライトデータ出力バッファ21の出力は、リードデータ入力バッファ22の入力及びデータ端子61と接続される。データ端子61は、単数又は複数のデータ信号線71を介して、メモリデバイス130と接続される。リードデータ入力バッファ22の出力は、リードデータラッチ11の入力と接続される。リードデータラッチ11の出力は、リードデータ信号線52を介して、外部回路110と接続される。
書き込み遅延調整装置(Write Delay−Locked Loop、以下WDLLと表記)31の入力は、クロック信号線53を介して、外部回路110と接続される。WDLL31の出力は、ストローブ信号出力バッファ23の入力と接続される。ストローブ信号出力バッファ23の出力は、ストローブ信号入力バッファ24の入力及びストローブ端子62と接続される。ストローブ端子62は、単数又は複数のストローブ信号線72を介して、メモリデバイス130と接続される。ストローブ信号入力バッファ24の出力は、読み出し遅延調整装置(Read Delay−Locked Loop、以下RDLLと表記)32の入力と接続される。RDLL32の出力は、リードデータラッチ11のイネーブル入力と接続される。
WDLL31は、入力されるクロック信号CLKの位相を90°遅らせたライトストローブ信号WDQSを出力する。RDLL32は、入力される信号の位相を遅らせた信号を出力する。
期待値取得用ラッチ12の入力は、ライトデータ信号線51を介して、外部回路110と接続される。期待値取得用ラッチ12のイネーブル入力は、クロック信号線53を介して、外部回路110と接続される。
比較器41は、2つの入力を有する。比較器41の一方の入力は、リードデータラッチ11の出力(結果値val1)と接続される。比較器41の他方の入力は、期待値取得用ラッチ12の出力(期待値val2)と接続される。比較器41の比較結果は、比較結果信号46として、レジスタ制御部42に出力される。レジスタ制御部42は、比較結果信号46又は遅延制御信号線54を介して入力される遅延制御信号DCSに応じて、レジスタ部43又は遅延選択部44に制御信号を出力する。
レジスタ部43には、レジスタファイル45が格納されている。レジスタファイル45は、ループバック左Fail確定値tA、ループバック左開口部tB、ループバック右開口部tC、ループバック右Fail確定値tD、左開口部推定値tE、右開口部推定値tF及びリード時遅延値tGの各値を含んでいる。これらの値の役割及び決定方法については、後述する。これらのレジスタファイル45の値tA〜tGは、レジスタ制御部42からの制御信号S1により、初期化され、又は更新される。また、外部回路110は、レジスタファイル45の値tA〜tGを監視するため、遅延値モニタ信号線55を介して、レジスタファイル45の値tA〜tGを遅延値モニタ信号DMSとして読み出す。
遅延選択部44は、レジスタ制御部42からの制御信号S2に応じて、レジスタ部43からレジスタファイル45の値tA〜tGのいずれかを読み出す。そして、読み出した値を、RDLL32の遅延量として設定する。RDLL32は、遅延選択部44によって設定された遅延量(レジスタファイル45の値tA〜tGのいずれか)を、RDLL32に入力される信号に与える。
続いて、メモリインターフェース回路100のライト時及びリード時の動作の概要について説明する。まず、リード時について説明する。リード時には、メモリデバイス130からリードデータ入力バッファ22へ、リードデータRDが出力される。リードデータRDは、データレートと同じ周波数にて読み出される。また、リードデータRDは、例えばバースト長が8のデータ信号として出力される。
また、ストローブ信号入力バッファ24を介して、メモリデバイス130からRDLL32へ、リードストローブ信号RDQSが供給される。リードストローブ信号RDQSは、データレートと同じ周波数にて供給される。また、リードストローブ信号RDQSは、例えば差動リードストローブ信号として供給される。図1においては、説明の便宜のため、リードストローブ信号RDQSを1本の信号として表示している。
RDLL32は、リードストローブ信号RDQSにリード時遅延値tGを与えた、遅延リードストローブ信号RDQS_dを、リードデータラッチ11へ出力する。この際、RDLL32には、前もってリード時遅延値tGが設定されている。
リードデータラッチ11は、遅延リードストローブ信号RDQS_dに同期して、リードデータRDをラッチする。そして、リードデータラッチ11は、ラッチしたリードデータRDを外部回路110へ出力する。これにより、メモリデバイス130からデータが読み出される。
次いで、ライト時について説明する。ライト時には、ライトデータ出力バッファ21を介して、外部回路110からメモリデバイス130へライトデータWDが供給される。また、外部回路110からWDLL31へ、クロック信号CLKが供給される。WDLL31は、クロック信号CLKの位相を90°遅らせた信号を、ライトストローブ信号WDQSとしてメモリデバイス130へ出力する。ライトデータWDは、ライトストローブ信号WDQSに同期してメモリデバイス130に書き込まれる。
また、ライトデータWDは、リードデータ入力バッファ22を介して、リードデータラッチ11へループバックされる。ライトストローブ信号WDQSは、ストローブ信号入力バッファ24を介して、RDLL32へ入力される。RDLL32は、ライトストローブ信号WDQSに対して、レジスタファイル45の値tA〜tFのいずれかの遅延を与えることにより、遅延ライトストローブ信号WDQS_dを生成する。遅延ライトストローブ信号WDQS_dはリードデータラッチ11へ出力される。
リードデータラッチ11は、遅延ライトストローブ信号WDQS_dに同期して、ループバックされたライトデータWDをラッチする。そして、リードデータラッチ11は、ラッチしたライトデータWDを、結果値val1として、比較器41へ出力する。
さらに、期待値取得用ラッチ12が、クロック信号CLKに同期してライトデータWDをラッチする。そして、期待値取得用ラッチ12は、ラッチしたライトデータWDを、期待値val2として、比較器41へ出力する。
比較器41は、結果値val1と期待値val2とを比較する。これにより、結果値val1と期待値val2とが一致する(以下、PASSと表記する)か、あるいは結果値val1と期待値val2とが一致しない(以下、FAILと表記する)か、が判断される。比較器41は、比較結果信号46を、レジスタ制御部42へ出力する。レジスタ制御部42は、比較結果信号46に応じて、レジスタ部43及び遅延選択部44を操作することにより、RDLL32に設定する遅延値を決定する。
すなわち、メモリインターフェース回路100は、ループバックされたライトデータWDの値(結果値val1)と、ループバックを受けないライトデータWD(期待値val2)と、を比較する。この比較は同じデータ同士を比較しているので、結果値val1と期待値val2とは、本来一致するはずである。ところが、ループバックされたライトデータWDは、リードデータ入力バッファ22からリードデータラッチ11までの経路を余計に伝搬しなければならない。
ところが、半導体装置120の温度変化などにより、このリード時の経路の状態は変化する。この変化により、リードデータラッチ11のラッチタイミングがずれてしまう場合が有る。すなわち、RDLL32から供給される遅延リードストローブ信号RDQS_dの位相が適切でない場合が生じる。この場合には、RDLL32に設定する遅延値を調整し、適切な遅延リードストローブ信号RDQS_dを供給すればよい。つまり、メモリインターフェース回路100は、結果値val1と期待値val2との比較結果(ループバック動作時の比較結果)に応じて、RDLL32に設定する遅延値を調整することが可能である。なお、RDLL32の遅延値の調整は、ライトデータWDだけでなく、ライトデータWDと同じ経路を介して供給されるテストデータを用いることも可能である。
次に、実施の形態1にかかるレジスタファイルの値tA〜tGの役割について説明する。まず、レジスタファイル45の値tA〜tDについて説明する。レジスタファイル45の値tA〜tDは、メモリインターフェース回路100における、ライト時のライトデータWDのループバック動作(以下、ループバックテスト)により設定される値である。
図2は、レジスタファイル45の値tA〜tDと比較器41のループバックテスト時の比較結果との関係を示す図である。図2に示すように、ループバックテスト時のRDLL32に設定する遅延値に応じて、比較器41の比較結果は変動する。区間D3は、ループバックテストを複数回行っても、全ての回において、結果値val1と期待値val2とが一致する結果(以下、ALL−PASSと表記する)が得られる遅延値の区間である。つまり、区間D3内の遅延値をRDLL32に設定してループバック動作を複数回行うと、全てPASSとなる。
ここで、ループバックテストの結果について説明する。以下では、DDR3−SDRAMにおいて、ライトデータWDがバースト長8のデータ信号として供給される場合を例として説明する。バースト長8のデータ信号は、連続する8ビットのデータにより構成される。比較器41は、8ビットのそれぞれのビットについて、結果値val1と期待値val2とを比較する。よって、比較器41は、8ビットのデータに対して、8回の比較動作を行う。
また、バースト長8のデータを1セットとすると、ライトデータ供給時には、複数セットのデータが供給される。例えば、4セットのデータが供給される場合には、比較器41は、(バースト長)×(セット数)=8×4=32ビットのそれぞれのビットについて、結果値val1と期待値val2とを比較する。よって、比較器41は、供給された32ビットのデータに対して、32回の比較動作を行う。
すなわち、比較器41は、供給されるライトデータWDのそれぞれのビットに対して、結果値val1と期待値val2とを比較する。上述の例のように、ライトデータWDのビット数が32ビットである場合、ALL−PASSとは、32回の比較動作の全てにおいて、結果値val1と期待値val2とが一致する場合を意味する。
同様に、32回の比較動作の全てにおいて、結果値val1と期待値val2とが不一致となる場合を、以下ではALL−FAILとする。また、ALL−PASSの近傍領域において32回の比較動作を行った結果、少なくとも1回の比較結果がFAILとなり、その他の比較結果がPASSとなる場合を、ONE−FAILとする。さらに、ALL−FAILの近傍領域において32回の比較動作を行った結果、少なくとも1回の比較結果がPASSとなり、他の比較結果がFAILとなる場合、ONE−PASSとする。
なお、上述の例ではライトデータWDがバースト長8のデータ信号として供給される場合について説明した。しかしながら、ライトデータWDの供給形態はこの例に限られるものではない。すなわち、ライトデータWDは、任意のバースト長で供給することが可能である。また、供給されるデータのセット数も、任意の数とすることが可能である。さらに、上述の例は、ライトデータWDだけでなく、ライトデータWDと同じ経路を介して供給されるテストデータ及びリードデータRDに適用することが可能である。
区間D1及びD5は、ループバックテストを複数回行った場合に、全ての回において、結果値val1と期待値val2とが一致しない結果の比較結果が得られる遅延値の区間である。つまり、区間D1又はD5内の遅延値をRDLL32に設定してループバック動作を複数回行うと、全てFAILとなる。
区間D2及びD4は、ループバックテストを複数回行った場合に、PASS及びFAILの双方の比較結果が得られる遅延値の区間である。つまり、区間D2又はD4内の遅延値をRDLL32に設定してループバック動作を複数回行うと、PASSとなることもあれば、FAILとなることもある。区間D2及びD4は、比較結果に偶然性が作用する区間である。この偶然性は、主としてジッタによる信号の揺らぎが原因である。
ループバック左Fail確定値tAは、区間D1における最大の遅延値である。すなわち、ループバック動作時のRDLL32に、ループバック左Fail確定値tAを遅延値として設定すると、比較器41の比較結果はALL−FAILとなる。従って、RDLL32にループバック左Fail確定値tAよりも1ステップ遅い遅延値を設定すると、もはやALL−FAILの比較結果を得ることはできない。なお、ここでいう1ステップとは、RDLL32に設定する遅延値の最小の調整ピッチを意味する。
ループバック左開口部tBは、区間D3における最小の遅延値である。すなわち、ループバック動作時のRDLL32に、ループバック左開口部tBを遅延値として設定すると、比較器41の比較結果はALL−PASSとなる。従って、RDLL32にループバック左開口部tBよりも1ステップ早い遅延値を設定すると、もはやALL−PASSの比較結果を得ることはできない。
ループバック右開口部tCは、区間D3における最大の遅延値である。すなわち、ループバック動作時のRDLL32に、ループバック右開口部tCを遅延値として設定すると、比較器41の比較結果はALL−PASSとなる。従って、RDLL32にループバック右開口部tCよりも1ステップ遅い遅延値を設定すると、もはやALL−PASSの比較結果を得ることはできない。
ループバック右Fail確定値tDは、区間D5における最小の遅延値である。すなわち、ループバック動作時のRDLL32に、ループバック右Fail確定値tDを遅延値として設定すると、比較器41の比較結果はALL−FAILとなる。従って、RDLL32にループバック右Fail確定値tDよりも1ステップ早い遅延値を設定すると、もはやALL−FAILの比較結果を得ることはできない。
続いて、左開口部推定値tE及び右開口部推定値tFについて説明する。左開口部推定値tE及び右開口部推定値tFは、通常のキャリブレーションを行うことにより設定される値である。すなわち、テストデータを予め書き込み、書き込んだテストデータを読み出す動作を行う。そして、書き込んだテストデータと、読み出したデータと、を比較することで、左開口部推定値tE及び右開口部推定値tFが決定される。
具体的には、書き込んだテストデータを読み出す際、リードデータラッチ11は、RDLL32から供給される遅延リードストローブ信号RDQS_dに同期して、読み出したテストデータをラッチする。このとき、RDLL32に設定する遅延値に応じて、比較器41の比較結果は変動する。すなわち、RDLL32に設定される遅延値が適正範囲内であれば、キャリブレーションを何度行っても、比較結果はALL−PASSとなる。一方、RDLL32に設定される遅延値が適正範囲外であれば、比較結果がFAILとなる場合が生じる。
左開口部推定値tEは、キャリブレーション動作においてALL−PASSの結果が得られる最小の遅延値である。すなわち、キャリブレーション動作時のRDLL32に、左開口部推定値tEを遅延値として設定すると、比較器41の比較結果はALL−PASSとなる。
右開口部推定値tFは、ALL−PASSの結果が得られる最大の遅延値である。すなわち、キャリブレーション動作時のRDLL32に、右開口部推定値tFを遅延値として設定すると、比較器41の比較結果はALL−PASSとなる。
すなわち、左開口部推定値tE及び右開口部推定値tFは、メモリデバイス130からデータを適切に読み出すことができる遅延値の下限及び上限を示している。このことは、リードデータRDの読み出し時(リード時)についても同様に成り立つ。従って、換言すれば、左開口部推定値tE及び右開口部推定値tFは、メモリデバイス130からリードデータRDを適切に読み出すことができる遅延値の下限及び上限を示している。
続いて、リード時遅延値tGについて説明する。リード時遅延値tGは、左開口部推定値tE及び右開口部推定値tFに基づいて算出される値である。本実施の形態では、リード時遅延値tGは、左開口部推定値tE及び右開口部推定値tFの中間値が設定される。従って、リード時のRDLL32にリード時遅延値tGを設定することで、適切にリードデータRDを読み出すことが可能となる。
ところが、半導体装置120の信号伝達特性は、半導体装置120やメモリデバイス130などの温度変化などの状態変化により影響を受ける。この影響により、半導体装置120の信号伝達特性が変動するため、状態変化が起こる環境下で適切なリードデータRDの読み出しを継続するには、リード時遅延値tGを適宜調整することが必要になる。
メモリインターフェース回路100では、リード時遅延値tGを調整するために、ライト時のループバックテストにより、tA〜tDを決定する。そして、tA〜tDの値に基づいて、左開口部推定値tE及び右開口部推定値tFを推定する。つまり、ライト時のループバックテストに基づいて、リード時遅延値tGが逐次更新されてゆく。
次に、レジスタファイルの値tA〜tGの決定方法について、詳細に説明する。図3は、実施の形態1にかかるメモリインターフェース回路100の動作を示すフローチャートである。図3に示すように、メモリインターフェース回路100の動作は、初期化フェーズ200と通常動作フェーズ(第1〜第4のフェーズ201〜204)に大別される。初期化フェーズ200においては、レジスタファイルの値tA〜tGの初期値設定が行われる。通常動作フェーズ(第1〜第4のフェーズ201〜204)では、通常のデータの書き込み及び読み出しが行われる。加えて、通常動作フェーズ(第1〜第4のフェーズ201〜204)では、データの書き込み時(ライト時)に、レジスタファイルの値tA〜tGの調整が行われる。なお、第1〜4のフェーズ201〜204は、ループ処理として実行される。
まず、初期化フェーズ200について説明する。図4は、初期化フェーズ200における動作を示すフローチャートである。図4に示すように、初期化フェーズ200では、第1の初期化処理300、第2初期化処理400及び第3の初期化処理500が行われる。
第1の初期化処理300について説明する。図5は、第1の初期化処理300における動作を示すフローチャートである。第1の初期化処理300では、ループバック左Fail確定値tA及びループバック左開口部tBの初期値が設定される。初期化フェーズ200が開始される間には、半導体装置120はリセット状態となっている。この状態で、レジスタ制御部42はリセット状態の解除を待つ(フェーズ301)。
リセット状態が解除されると、レジスタ制御部42は、レジスタファイル45に、tA〜tGの仮初期値を設定する(フェーズ302)。ここで、tA〜tGの仮初期値は、予め決めておいた任意の値とすることができる。また、tA〜tGの仮初期値は、レジスタ制御部42が、入力される遅延制御信号DCSに応じて決定してもよい。その後、第1のバッファ制御信号SB1により、ライトデータ出力バッファ21、ストローブ信号出力バッファ23を有効化する。第2のバッファ制御信号SB2により、リードデータ入力バッファ22、ストローブ信号入力バッファ24を有効化する。ライトデータ出力バッファ21、リードデータ入力バッファ22、ストローブ信号出力バッファ23及びストローブ信号入力バッファ24は、第1の初期化処理300及び第2初期化処理400を通じて、有効化されたまま保持される。
続いて、ループバック左開口部tBの初期値を設定する処理が行われる。レジスタ制御部42は、遅延制御信号DCSに応じて遅延選択部44を操作し、レジスタファイル45から読み出したループバック左開口部tBの仮初期値を、RDLL32の遅延値として設定する。そして、外部回路110から、ライトデータ信号線51を介して、任意のテストデータが供給される。テストデータは、ライトデータWD又はリードデータRDと同様に、所定のバースト長を有するバーストデータとして供給される。さらに、テストデータは、順次供給されるN(Nは、2以上の整数)組のバーストデータとして供給される。テストデータは、ライトデータ出力バッファ21、リードデータ入力バッファ22を通じて、リードデータラッチ11にループバックされる。同時に、テストデータは、期待値取得用ラッチ12にも入力される。すなわち、RDLL32にループバック左開口部tBを設定した状態において、ループバックテストを実行する。
リードデータラッチ11は、RDLL32からの遅延リードストローブ信号RDQS_dに同期して、ループバックされたテストデータをラッチする。そして、リードデータラッチ11は、ラッチしたデータを、結果値val1として、比較器41へ出力する。
期待値取得用ラッチ12は、クロック信号CLKに同期して、テストデータをラッチする。そして、期待値取得用ラッチ12は、ラッチしたデータを、期待値val2として、比較器41へ出力する。
比較器41は、結果値val1と期待値val2とを比較する。比較器41は、N組のバーストデータに対して、N回の比較を繰り返し、N通りの比較結果を出力する。なお、繰り返しの回数Nは、ジッタ成分による比較結果の不安定性を反映できるならば、任意の回数でよい(フェーズ303)。
レジスタ制御部42は、比較器41の比較結果を評価する。N回の比較動作の結果がALL−PASSである場合には、レジスタ制御部42は、レジスタファイル45のループバック左開口部tBの値を、仮初期値に対して1ステップ早い値に更新する(フェーズ304)。そして、ループバック左開口部tBの値を更新した後は、再度フェーズ303へ戻る。フェーズ303に戻ると、レジスタ制御部42は、更新されたループバック左開口部tBの値を、RDLL32の遅延値として設定する。つまり、N回の比較結果のうち少なくとも1つがFAILとなる遅延値が見つかるまで、フェーズ303及びフェーズ304が繰り返し実行される。これにより、ループバック左開口部tBの初期値として、区間D3における最小の遅延値を設定することができる。
なお、ループバック左開口部tBの仮初期値に対して、ONE−FAILの比較結果が得られる場合が有り得る。この場合、ループバック左開口部tBの仮初期値は、早すぎる値に設定されていると推定できる。よって、ループバック左開口部tBの仮初期値に、より遅い値を設定して、第1の初期化処理300をやり直す。これにより、ループバック左開口部tBの初期値を適切に設定することができる。
また、ループバック左開口部tBの値を、RDLL32に設定可能な最小の値まで早めてもALL−PASSの比較結果しか得られない場合について検討する。この場合、RDLL32に設定可能な最小の値を、ループバック左開口部tBの値として設定することが可能である。さらに、繰り返し回数やテストデータを変更して、第1の初期化処理300をやり直すこともできる。
続いて、ループバック左Fail確定値tAの初期値を設定する処理が行われる。レジスタ制御部42は、遅延制御信号DCSに応じて遅延選択部44を操作し、レジスタファイル45から読み出したループバック左Fail確定値tAの仮初期値を、RDLL32の遅延値として設定する。この状態において、比較器41は、フェーズ303と同様に、順次供給されるN組のバーストデータ(テストデータ)について比較動作を行う(フェーズ305)。すなわち、RDLL32にループバック左Fail確定値tAを設定した状態において、ループバックテストを実行する。
レジスタ制御部42は、比較器41の比較結果を評価する。N回の比較動作の結果のうち少なくとも1つがPASSとなる場合には、レジスタ制御部42は、レジスタファイル45のループバック左Fail確定値tAの値を、仮初期値に対して1ステップ早い値に更新する(フェーズ306)。そして、ループバック左Fail確定値tAの値を更新した後は、再度フェーズ305へ戻る。フェーズ305に戻ると、レジスタ制御部42は、更新されたループバック左Fail確定値tAの値を、RDLL32の遅延値として設定する。つまり、N回の比較結果がALL−FAILとなる遅延値が見つかるまで、フェーズ305及びフェーズ306が繰り返し実行される。これにより、ループバック左Fail確定値tAとして、区間D1における最大の遅延値を設定することができる。
ここで、第1の初期化処理300においてRDLL32に設定する遅延値について考察する。ここでは、リードデータラッチ11は、遅延ライトストローブ信号WDQS_dが遷移するタイミング(立ち上がり/立ち下がり)で、ループバックされたテストデータをラッチするもとのとする。図6は、第1の初期化処理300における信号のタイミング例を示すタイミングチャートである。ループバック左Fail確定値tA及びループバック左開口部tBの初期値を決定するには、図6に示すように、本来はクロック信号CLKの立ち上がりタイミングT1付近を探索する必要がある。しかし、遅延ライトストローブ信号WDQS_dは、RDLL32でライトストローブ信号WDQSを遅延させることにより生成されたものである。また、ライトストローブ信号WDQSは、WDLL31により、クロック信号CLKに対して90°遅延している。RDLL32でライトストローブ信号WDQSの位相を早めることは物理的に不可能であるので、このままではタイミングT1付近での探索を行うことはできない。
そのため、RDLL32では、ライトストローブ信号WDQSの位相を大きく遅延させ、クロック信号CLKに対してほぼ1周期遅れの遅延ライトストローブ信号WDQS_dを生成する。これにより、遅延ライトストローブ信号WDQS_dの立ち上がりをタイミングT1付近に位置させることができる。その結果、リードデータラッチ11は、タイミングT1付近で、ループバックされたテストデータDataをラッチすることができる。つまり、ループバック左Fail確定値tA及びループバック左開口部tBは、270°前後の比較的大きな値を有することとなる。
次いで、第2の初期化処理400について説明する。図7は、第2の初期化処理400における動作を示すフローチャートである。まず、ループバック右開口部tCの初期値を設定する処理が行われる。レジスタ制御部42は、遅延制御信号DCSに応じて遅延選択部44を操作し、レジスタファイル45から読み出したループバック右開口部tCの仮初期値を、RDLL32の遅延値として設定する。この状態おいて、比較器41は、第1の初期化処理300のフェーズ303と同様に、順次供給されるN組のバーストデータ(テストデータ)について比較動作を行う(フェーズ401)。すなわち、RDLL32にループバック右開口部tCを設定した状態において、ループバックテストを実行する。
レジスタ制御部42は、比較器41の比較結果を評価する。N回の比較動作の結果がALL−PASSである場合には、レジスタ制御部42は、レジスタファイル45のループバック右開口部tCの値を、仮初期値に対して1ステップ遅い値に更新する(フェーズ402)。そして、ループバック右開口部tCの値を更新した後は、再度フェーズ401へ戻る。フェーズ401に戻ると、レジスタ制御部42は、更新されたループバック右開口部tCの値を、RDLL32の遅延値として設定する。つまり、N回の比較動作の結果がONE−FAILとなる遅延値が見つかるまで、フェーズ401及びフェーズ402が繰り返し実行される。これにより、ループバック右開口部tCとして、区間D3における最大の遅延値を設定することができる。
なお、ループバック右開口部tCの仮初期値に対して、ONE−FAILの比較結果が得られる場合が有り得る。この場合、ループバック右開口部tCの仮初期値は、遅すぎる値に設定されていると推定できる。よって、ループバック右開口部tCの仮初期値に、より早い値を設定して、第2の初期化処理400をやり直す。これにより、ループバック右開口部tCの初期値を適切に決定することができる。
続いて、まず、ループバック右Fail確定値tDの初期値を設定する処理が行われる。レジスタ制御部42は、遅延制御信号DCSに応じて遅延選択部44を操作し、レジスタファイル45から読み出したループバック右Fail確定値tDの仮初期値を、RDLL32の遅延値として設定する。この状態おいて、比較器41は、フェーズ401と同様に、順次供給されるN組のバーストデータ(テストデータ)について比較動作を行う(フェーズ403)。すなわち、RDLL32にループバック右Fail確定値tDを設定した状態において、ループバックテストを実行する。
レジスタ制御部42は、比較器41の比較結果を評価する。N回の比較動作の結果がONE−PASSである場合には、レジスタ制御部42は、レジスタファイル45のループバック右Fail確定値tDの値を、仮初期値に対して1ステップ遅い値に更新する(フェーズ404)。そして、ループバック右Fail確定値tDの値を更新した後は、再度フェーズ403へ戻る。フェーズ403に戻ると、レジスタ制御部42は、更新されたループバック右Fail確定値tDの値を、RDLL32の遅延値として設定する。つまり、N回の比較動作の結果がALL−FAILとなる遅延値が見つかるまで、フェーズ403及びフェーズ404が繰り返し実行される。これにより、ループバック右Fail確定値tDとして、区間D5における最小の遅延値を設定することができる。
ここで、第2の初期化処理400においてRDLL32に設定する遅延値について考察する。ここでは、リードデータラッチ11は、遅延ライトストローブ信号WDQS_dが遷移するタイミング(立ち上がり/立ち下がり)で、ループバックされたテストデータをラッチするもとのとする。図8は、第2の初期化処理400における信号のタイミング例を示すタイミングチャートである。ループバック右開口部tC及びループバック右Fail確定値tDの初期値を決定するには、図8に示すように、本来はクロック信号CLKの立ち下がりタイミングT2付近を探索する必要がある。ここで、遅延ライトストローブ信号WDQS_dは、RDLL32でライトストローブ信号WDQSを遅延させることにより生成されたものである。また、ライトストローブ信号WDQSは、WDLL31により、クロック信号CLKに対して90°遅延している。よって、RDLL32において、ライトストローブ信号WDQSの位相をさらに遅延させることにより、遅延ライトストローブ信号WDQS_dの立ち上がりを、タイミングT2付近に位置させることができる。その結果、リードデータラッチ11は、タイミングT2付近で、ループバックされたテストデータDataをラッチすることができる。
つまり、ループバック右開口部tC及びループバック右Fail確定値tDは、90°前後の値を有することとなる。従って、本構成では、ループバック右開口部tC及びループバック右Fail確定値tDの値は、ループバック左Fail確定値tA及びループバック左開口部tBと比較して、小さな値が設定されることとなる。
次いで、第3の初期化処理500について説明する。図9は、第3の初期化処理500における動作を示すフローチャートである。第3の初期化処理500では、外部回路110から供給されるテストデータを、メモリデバイス130に書き込む。この際、書き込む対象となるデータを期待値として予めラッチしておく。その後、書き込んだデータを読み出す。この際、読み出したデータを、期待値と比較するデータとしてラッチする。そして、比較器41において、2つのラッチデータを比較することを特徴とする。
まず、左開口部推定値tEの初期値を設定する処理が行われる。まず、半導体装置120は、テストデータのライト動作を行う。よって、第1のバッファ制御信号SB1により、ライトデータ出力バッファ21及びストローブ信号出力バッファ23を有効化する。第2のバッファ制御信号SB2により、リードデータ入力バッファ22及びストローブ信号入力バッファ24を無効化する。
そして、外部回路110は、ライトデータ出力バッファ21へテストデータを出力する。メモリデバイス130は、ストローブ信号線72を介して供給されるライトストローブ信号WDQSに応じて、テストデータが書き込まれる。同時に、テストデータは、期待値取得用ラッチ12にも供給される。期待値取得用ラッチ12は、クロック信号CLKに同期して、テストデータを期待値val2としてラッチする。
次いで、半導体装置120は、テストデータのリード動作を行う。よって、第2のバッファ制御信号SB2により、リードデータ入力バッファ22及びストローブ信号入力バッファ24を有効化する。第1のバッファ制御信号SB1により、ライトデータ出力バッファ21及びストローブ信号出力バッファ23を無効化する。
レジスタ制御部42は、遅延制御信号DCSに応じて遅延選択部44を操作し、レジスタファイル45から読み出した左開口部推定値tEの仮初期値を、RDLL32の遅延値として設定する。そして、メモリインターフェース回路は、データ信号線71を介して、メモリデバイス130に書き込まれたテストデータが供給される。テストデータはリードデータRDと同様に、所定のバースト長を有するバーストデータとして供給される。さらに、テストデータは、順次供給されるN組のバーストデータとして供給される。
読み出されたテストデータは、リードデータ入力バッファ22を通じて、リードデータラッチ11に供給される。リードデータラッチ11は、RDLL32から供給される遅延リードストローブ信号RDQS_dに同期して、読み出されたテストデータを結果値val1としてラッチする。
比較器41は、結果値val1と期待値val2とを比較する。比較器41は、N組のテストデータに対してN回の比較を繰り返し、N通りの比較結果を出力する(フェーズ501)。
N回の比較動作の結果がALL−PASSである場合には、レジスタ制御部42は、レジスタファイル45の左開口部推定値tEの値を、仮初期値に対して1ステップ早い値に更新する(フェーズ502)。そして、左開口部推定値tEの値を更新した後は、再度フェーズ501へ戻る。フェーズ501に戻ると、レジスタ制御部42は、更新された左開口部推定値tEの値を、RDLL32の遅延値として設定する。つまり、N回の比較動作の結果がONE−FAILとなる遅延値が見つかるまで、フェーズ501及びフェーズ502が繰り返し実行される。これにより、左開口部推定値tEとして、区間D3における最小の遅延値を設定することができる。
なお、左開口部推定値tEの仮初期値に対して、ONE−FAILの比較結果が得られる場合が有り得る。この場合、ループバック右開口部tCの場合と同様の対処をとることができる。すなわち、左開口部推定値tEの仮初期値として、より速い値を設定する。そして、第3の初期化処理500をやり直すことにより、左開口部推定値tEの初期値を適切に決定することができる。
続いて、右開口部推定値tFの初期値を設定する処理が行われる。レジスタ制御部42は、遅延選択部44を制御して、レジスタファイル45の右開口部推定値tFの仮初期値を、RDLL32に設定する。この状態において、比較器41は、フェーズ501と同様に、順次供給されるN組のテストデータについて比較動作を行う(フェーズ503)。
N回の比較動作がALL−PASSである場合には、レジスタ制御部42は、レジスタファイル45の右開口部推定値tFの値を、仮初期値に対して1ステップ遅い値に更新する(フェーズ504)。そして、右開口部推定値tFの値を更新した後は、再度フェーズ503へ戻る。レジスタ制御部42は、更新された右開口部推定値tFの値を、RDLL32の遅延値として設定する。つまり、N回の比較動作の結果がONE−FAILとなる遅延値が見つかるまで、フェーズ503及びフェーズ504が繰り返し実行される。これにより、右開口部推定値tFとして、区間D3における最大の遅延値を設定することができる。
その後、レジスタ制御部42は、通常のリード時に用いるリード時遅延値tGの初期値を算出する(フェーズ505)。この際算出されるリード時遅延値tGは、以下の式(1)で表される。
tG=(tE+tF)/2 ・・・(1)
以上をもって、初期化フェーズ200が終了する。これにより、レジスタファイル45の値tA〜tGの初期値が設定される。
ここで、第3の初期化処理500においてRDLL32に設定する遅延値について考察する。左開口部推定値tEは、第1の初期化処理300における場合と同様に、比較的大きな値が設定される。右開口部推定値tFは、第2の初期化処理400における場合と同様に、左開口部推定値tEと比較して、小さな値が設定される。
次に、通常動作フェーズ(第1〜4のフェーズ201〜204)について説明する。第1〜4のフェーズ201〜204についてはループ処理が行われるが、以下では説明の明確化のため、初期化フェーズ200完了直後の場合について説明する。
第1のフェーズ201について説明する。図10は、第1のフェーズ201の動作を示すフローチャートである。まず、外部回路110において、半導体装置120に対するライト動作の要求の有無が判断される(フェーズ601)。判断結果は、遅延制御信号DCSにより、外部回路110からレジスタ制御部42へ伝達される。
ライト動作の要求が無いと判断した場合、すなわちリード時には、レジスタ制御部42は、遅延選択部44を制御して、RDLL32にリード時遅延値tGの初期値を設定する。よって、リードデータRDには、RDLL32により、リード時遅延値tGの初期値に対応する遅延が付加される(フェーズ602)。すなわち、リード時遅延値tGを用いた、通常のリード動作が実行される。
一方、ライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部42は、遅延選択部44を制御して、レジスタファイル45のループバック左Fail確定値tAの初期値をRDLL32に設定する。そして、第1のバッファ制御信号SB1により、ライトデータ出力バッファ21、ストローブ信号出力バッファ23を有効化する。第2のバッファ制御信号SB2により、リードデータ入力バッファ22、ストローブ信号入力バッファ24を有効化する。なお、第1〜4のフェーズ201〜204のライト時には、ライトデータ出力バッファ21、リードデータ入力バッファ22、ストローブ信号出力バッファ23及びストローブ信号入力バッファ24は有効化された状態で保持される。
その後、ライトデータWDが、外部回路110からメモリインターフェース回路100に供給される。ライトデータWDは、メモリデバイス130に書き込まれるとともに、期待値取得用ラッチ12により期待値val2としてラッチされる。また、ライトデータWDは、リードデータラッチ11にループバックされる。ループバックされたリードデータRDは、結果値val1としてラッチされる。比較器41は、結果値val1と期待値val2とを比較する。比較器41は、複数のライトデータに対して比較を繰り返す。(フェーズ603)。
続いて、レジスタ制御部42は、比較結果を参照する。このとき、RDLL32にはループバック左Fail確定値tAの初期値が設定されているので、比較結果はALL−FAILとなると仮定することができる。しかし、半導体装置120の特性やジッタの変動により、比較結果がALL−FAILではなく、ONE−PASSとなる場合が生じる。比較結果がONE−PASSとなった場合には、上述の仮定は否定される。なお、ライトデータWDに変化が無い場合についても、ONE−PASSの結果が得られる場合がある。この場合にも、上述の仮定が否定される結果が得られる。
上述の仮定が否定される場合について検討する。この場合、半導体装置120の特性変動により、ループバック左Fail確定値tAが、初期値よりも早い値にシフトしてしまったことが推測できる。その結果、ループバック左開口部tBも、同様に初期値より早い値にシフトしてしまったと推測できる。そこで、ONE−PASSの比較結果が得られる場合には、レジスタ制御部42は、ループバック左開口部tBの値を、1ステップ早い値に更新する(フェーズ604)。その後、ループバック左開口部tBが妥当であるかを確認するため、第2のフェーズ202のステップ202bへ進む。
一方、上記仮定の通り、ALL−FAILの比較結果が得られる場合には、ループバック左Fail確定値tA及びループバック左開口部tBの値をそのまま保持する。その後、第2のフェーズ202のステップ202aへ進む。
次に、第2のフェーズ202について説明する。図11は、第2のフェーズ202の動作を示すフローチャートである。まず、第1のフェーズ601による仮定が正しい場合に対応する、ステップ202aから開始されるフェーズ701〜704について説明する。フェーズ701及び702は、フェーズ601及び602とそれぞれ同じであるので、説明を省略する。
半導体装置120に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部42は、遅延選択部44を制御して、第1のフェーズ201においてそのまま保持されたループバック左開口部tBの初期値を、RDLL32に設定する。そして、第1のバッファ制御信号SB1により、ライトデータ出力バッファ21、ストローブ信号出力バッファ23を有効化する。第2のバッファ制御信号SB2により、リードデータ入力バッファ22、ストローブ信号入力バッファ24を有効化する。
それと同時に、ライトデータWDが、外部回路110からメモリインターフェース回路100に供給される。ライトデータWDは、メモリデバイス130に書き込まれるとともに、期待値取得用ラッチ12により期待値val2としてラッチされる。また、ライトデータWDは、リードデータラッチ11にループバックされる。ループバックされたリードデータRDは、結果値val1としてラッチされる。比較器41は、結果値val1と期待値val2とを比較する。比較器41は、複数のライトデータに対して比較を繰り返す。(フェーズ703)。
続いて、レジスタ制御部42は、比較結果を参照する。このとき、RDLL32にはループバック左開口部tBの初期値が設定されている。よって、比較器41における比較結果は、ALL−PASSとなると仮定することができる。しかし、半導体装置120の特性やジッタの変動により、比較結果がALL−PASSではなく、ONE−FAILとなる場合が生じる。比較結果がONE−FAILとなった場合には、上述の仮定は否定される。
上述の仮定が否定される場合について検討する。この場合、半導体装置120の特性変動により、ループバック左開口部tBが、初期値よりも遅い値にシフトしてしまったことが推測できる。その結果、左開口部推定値tEも、同様に初期値より遅い値にシフトしてしまったと推測できる。そこで、ONE−FAILの比較結果が得られる場合には、ループバック左開口部tBの値を、1ステップ遅い値に更新する。これにより、ループバック左開口部tBが決定される。また、ループバック左開口部tBに連動して、左開口部推定値tEにも同様の変動が生じているものと推定することができる。従って、左開口部推定値tEの値も、1ステップ遅い値に更新する(フェーズ704)。
この際、第1のフェーズ201のフェーズ603におけるループバック左Fail確定値tAについてのループバックテストではALL−FAILの結果が得られているので、ループバック左Fail確定値tAの値は一応正しいものとして、そのまま保持する。なお、ループバック左Fail確定値tAの値が早い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ603→ステップ202a→フェーズ701→フェーズ703→フェーズ704の手順が繰り換えされ、その結果、ループバック左開口部tBは、フェーズ703においてALL−PASSとなるループバック左開口部tBに収束する。また、ループバック左Fail確定値tAの値が遅い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ603→フェーズ604→ステップ202b→フェーズ705→フェーズ707→フェーズ709の手順が繰り換えされ、その結果、ループバック左Fail確定値tAは、フェーズ603においてALL−FAILとなる値に収束する。但し、フェーズ704において、ループバック左開口部tBに連動してループバック左Fail確定値tAの値を1ステップ遅らせても、通常動作フェーズを繰り返して得られる効果は同等である。
一方、上記仮定の通り、ALL−PASSの比較結果が得られる場合には、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEの値をそのまま保持する。その後、第3のフェーズ203へ進む。
次いで、第1のフェーズ201による仮定が誤りであった場合に対応する、ステップ202bから開始されるフェーズ705〜709について説明する。フェーズ705及び706は、フェーズ601及び602とそれぞれ同じであるので、説明を省略する。
半導体装置120に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部42は、遅延選択部44を制御して、レジスタファイル45のループバック左開口部tBの値をRDLL32に設定する。この際設定されるループバック左開口部tBの値は、第1のフェーズで初期値から1ステップ早められた値である。また、フェーズ703と同様に、ライトデータ出力バッファ21、リードデータ入力バッファ22、ストローブ信号出力バッファ23及びストローブ信号入力バッファ24を有効化する。
それと同時に、ライトデータWDが、外部回路110からメモリインターフェース回路100に供給される。ライトデータWDは、メモリデバイス130に書き込まれるとともに、期待値取得用ラッチ12により期待値val2としてラッチされる。また、ライトデータWDは、リードデータラッチ11にループバックされる。ループバックされたリードデータRDは、結果値val1としてラッチされる。比較器41は、結果値val1と期待値val2とを比較する。比較器41は、複数のライトデータに対して比較を繰り返す。(フェーズ707)。
続いて、レジスタ制御部42は、比較結果を参照する。このとき、RDLL32には初期値から1ステップ早められたループバック左開口部tBが設定されている。よって、比較結果は、ALL−PASSとなると仮定することができる。しかし、半導体装置120の特性やジッタの変動により、比較器41における比較結果がALL−PASSではなく、ONE−FAILとなる場合が生じる。比較結果がONE−FAILとなった場合には、上述の仮定は否定される。
上述の仮定が否定される場合について検討する。この場合、ループバック左開口部tBは、本来設定されるべき値よりも早い値であると推測できる。つまり、第1のフェーズ201で行われたループバック左開口部tBを1ステップ早める処置は、ジッタによる偶然性が影響した処置であり、妥当でないと判断できる。よって、第1のフェーズ201の処理を取り消すため、レジスタ制御部42は、ループバック左開口部tBの値を1ステップ遅い値に更新する。すなわち、ループバック左開口部tBは初期値に戻される(フェーズ708)。
なお、上述の通り、ライトデータWDに変化が無い場合についても、第1のフェーズ201による仮定が誤りであると判断される場合がある。この場合でも、第1のフェーズ201で行われた処理を取り消すため、レジスタ制御部42は、ループバック左開口部tBの値を1ステップ遅い値に更新する。従って、ライトデータWDに起因する仮定検証の不備についても是正を図ることができる。
一方、上記仮定が正しい場合について検討する。この場合、第1のフェーズ201で行われた、ループバック左開口部tBを1ステップ早める処置は妥当であったと判断できる。よって、ループバック左開口部tBを1ステップ早めた処置に対応させるため、ループバック左Fail確定値tA及び左開口部推定値tEの値を、1ステップ早い値に更新する(フェーズ709)。これにより、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEを適切な値に設定することができる。
次に、第3のフェーズ203について説明する。図12は、第3のフェーズ203の動作を示すフローチャートである。フェーズ801及び802は、フェーズ601及び602とそれぞれ同じであるので、説明を省略する。
半導体装置120に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部42は、遅延選択部44を制御して、ループバック右Fail確定値tDの初期値を、RDLL32に設定する。そして、第1のバッファ制御信号により、ライトデータ出力バッファ21、ストローブ信号出力バッファ23を有効化する。第2のバッファ制御信号により、リードデータ入力バッファ22、ストローブ信号入力バッファ24を有効化する。
それと同時に、ライトデータWDが、外部回路110からメモリインターフェース回路100に供給される。ライトデータWDは、メモリデバイス130に書き込まれるとともに、期待値取得用ラッチ12により期待値val2としてラッチされる。また、ライトデータWDは、リードデータラッチ11にループバックされる。ループバックされたリードデータRDは、結果値val1としてラッチされる。比較器41は、結果値val1と期待値val2とを比較する。比較器41は、複数のライトデータに対して比較を繰り返す。(フェーズ803)。
続いて、レジスタ制御部42は、比較結果を参照する。このとき、RDLL32にはループバック右Fail確定値tDの初期値が設定されている。よって、比較器41における比較結果は、ALL−FAILとなると仮定することができる。しかし、半導体装置120の特性やジッタの変動により、比較器41における比較結果がALL−FAILではなく、ONE−PASSとなる場合が生じる。比較結果がONE−PASSとなった場合には、上述の仮定は否定される。なお、ライトデータWDに変化が無い場合についても、ONE−PASSの結果が得られる場合がある。この場合にも、上述の仮定が否定される結果が得られる。
上述の仮定が否定される場合について検討する。この場合、半導体装置120の特性変動により、ループバック右Fail確定値tDは、初期値よりも遅い値にシフトしてしまったことが推測できる。その結果、ループバック右開口部tCも、同様に初期値よりも遅い値にシフトしてしまったと推測できる。そこで、ONE−PASSの比較結果が得られる場合には、ループバック右開口部tCの値を、1ステップ遅い値に更新する(フェーズ804)。その後、ループバック右Fail確定値tDの値が妥当であるかを確認するため、第4のフェーズ204のステップ204bへ進む。
一方、上記仮定の通り、ALL−FAILの比較結果が得られる場合には、ループバック右Fail確定値tDを初期値のまま保持する。その後、第4のフェーズ204のステップ204aへ進む。
次に、第4のフェーズ204について説明する。図13は、第4のフェーズ204の動作を示すフローチャートである。まず、第3のフェーズ203による仮定が正しい場合に対応する、ステップ204aから開始するフェーズ901〜904について説明する。フェーズ901及び902は、フェーズ601及び602とそれぞれ同じであるので、説明を省略する。
半導体装置120に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部42は、遅延選択部44を制御して、第3のフェーズ203でそのまま保持されたループバック右開口部tCの初期値を、RDLL32に設定する。そして、第1のバッファ制御信号SB1により、ライトデータ出力バッファ21、ストローブ信号出力バッファ23を有効化する。第2のバッファ制御信号SB2により、リードデータ入力バッファ22、ストローブ信号入力バッファ24を有効化する。
それと同時に、ライトデータWDが、外部回路110からメモリインターフェース回路100に供給される。ライトデータWDは、メモリデバイス130に書き込まれるとともに、期待値取得用ラッチ12により期待値val2としてラッチされる。また、ライトデータWDは、リードデータラッチ11にループバックされる。ループバックされたリードデータRDは、結果値val1としてラッチされる。比較器41は、結果値val1と期待値val2とを比較する。比較器41は、複数のライトデータに対して比較を繰り返す(フェーズ903)。
続いて、レジスタ制御部42は、比較結果を参照する。このとき、RDLL32にはループバック右開口部tCの初期値が設定されている。よって、比較器41における比較結果は、ALL−PASSとなると仮定することができる。しかし、半導体装置120の特性やジッタの変動により、比較器41における比較結果がALL−PASSではなく、ONE−FAILとなる場合が生じる。比較結果がONE−FAILとなった場合には、上述の仮定は否定される。
上述の仮定が否定される場合について検討する。この場合、半導体装置120の特性変動により、ループバック右開口部tCが、初期値よりも早い値にシフトしてしまったことが推測できる。その結果、右開口部推定値tFも、同様に初期値より早い値にシフトしてしまったと推測できる。そこで、ONE−FAILの比較結果が得られる場合には、ループバック右開口部tC及び右開口部推定値tFの値を、1ステップ早い値に更新する(フェーズ904)。その後、フェーズ910へ進む。
この際、第3のフェーズ203のフェーズ803におけるループバック右Fail確定値tDについてのループバックテストではALL−FAILの結果が得られているので、ループバック右Fail確定値tDの値は一応正しいものとして、そのまま保持する。なお、ループバック右Fail確定値tDの値が早い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ803→ステップ204a→フェーズ901→フェーズ903→フェーズ904の手順が繰り換えされ、その結果、ループバック右開口部tCは、フェーズ903においてALL−PASSとなるループバック右開口部tCに収束する。また、ループバック右Fail確定値tDの値が遅い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ803→フェーズ804→ステップ204b→フェーズ905→フェーズ907→フェーズ909の手順が繰り換えされ、その結果、ループバック右Fail確定値tDは、フェーズ803においてALL−FAILとなる値に収束する。但し、フェーズ904において、ループバック右開口部tCに連動してループバック右Fail確定値tDの値を1ステップ遅らせても、通常動作フェーズを繰り返して得られる効果は同等である。
一方、上記仮定の通り、ALL−PASSの比較結果が得られる場合には、ループバック右開口部tC及び右開口部推定値tFの値は適切であると判断することができる。従って、ループバック右Fail確定値tD、ループバック右開口部tC及び右開口部推定値tFをそのまま保持する。その後、フェーズ910へ進む。
次いで、第3のフェーズ203による仮定が誤りである場合に対応する、フェーズ905〜909について説明する。フェーズ905及び906は、フェーズ601及び602とそれぞれ同じであるので、説明を省略する。
半導体装置120に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部42は、遅延選択部44を制御して、レジスタファイル45のループバック右開口部tCの値をRDLL32に設定する。この際設定されるループバック右開口部tCの値は、第3のフェーズ203で初期値から1ステップ遅くされた値である。また、フェーズ703と同様に、ライトデータ出力バッファ21、リードデータ入力バッファ22、ストローブ信号出力バッファ23及びストローブ信号入力バッファ24を有効化する。
それと同時に、ライトデータWDが、外部回路110からメモリインターフェース回路100に供給される。ライトデータWDは、メモリデバイス130に書き込まれるとともに、期待値取得用ラッチ12により期待値val2としてラッチされる。また、ライトデータWDは、リードデータラッチ11にループバックされる。ループバックされたリードデータRDは、結果値val1としてラッチされる。比較器41は、結果値val1と期待値val2とを比較する。比較器41は、複数のライトデータに対して比較を繰り返す(フェーズ907)。
続いて、レジスタ制御部42は、比較結果を参照する。このとき、RDLL32には初期値から1ステップ遅くされたループバック右開口部tCが設定されている。よって、比較器41における比較結果は、ALL−PASSとなると仮定することができる。しかし、半導体装置120の特性やジッタの変動により、比較器41における比較結果がALL−PASSではなく、ONE−FAILとなる場合が生じる。比較結果がONE−FAILとなった場合には、上述の仮定は否定される。
上述の仮定が否定される場合について検討する。この場合、ループバック右開口部tCは、本来設定されるべき値よりも遅い値であると推測できる。つまり、第3のフェーズ203で行われた、ループバック右開口部tCを1ステップ遅くする処置は、ジッタによる偶然性が影響した処置であり、妥当でないと判断できる。よって、第3のフェーズ203で行われた処理を取り消すため、レジスタ制御部42は、ループバック右開口部tCの値を1ステップ早い値に更新する。すなわち、ループバック右開口部tCは初期値に戻される(フェーズ908)。その後、フェーズ910へ進む。
なお、上述の通り、ライトデータWDに変化が無い場合についても、第3のフェーズ203による仮定が誤りであると判断される場合がある。この場合でも、第3のフェーズ203で行われた処理を取り消すため、レジスタ制御部42は、ループバック右開口部tCの値を1ステップ早い値に更新する。従って、ライトデータWDに起因する仮定検証の不備についても是正を図ることができる。
一方、上記仮定が正しい場合について検討する。この場合、第3のフェーズ203で行われた、ループバック右開口部tCを1ステップ遅くする処置は妥当であったと判断できる。よって、ループバック右開口部tCを1ステップ遅くする処置に対応させるため、ループバック右Fail確定値tD及び右開口部推定値tFの値を、1ステップ遅い値に更新する。また、ループバック左開口部tBに連動して、左開口部推定値tEにも同様の変動が生じているものと推定することができる。従って、左開口部推定値tEの値も、1ステップ遅い値に更新する(フェーズ909)。これにより、ループバック右開口部tC、ループバック右Fail確定値tD及び右開口部推定値tFを適切な値に設定することができる。その後、フェーズ910へ進む。
最後に、第4のフェーズで設定した最新の左開口部推定値tE及び右開口部推定値tFの値と上述の式(1)とに基づき、リード時遅延値tGを算出する(フェーズ910)。
以上のステップを経て、ライト時に供給されるライトデータをループバックすることにより、メモリインターフェース回路100は、リード時遅延値tGを最適の値に維持することが可能となる。従って、メモリインターフェース回路100を用いる場合には、リードデータのタイミングキャリブレーションを行うための期間を設ける必要がない。すなわち、メモリインターフェース回路100は、通常のライト動作中にリードデータのタイミングキャリブレーションを併せて実行するため、メモリデバイスを高速に駆動することが可能となる。
本構成によれば、図24に示すメモリシステム1100の様に、リードデータのラッチタイミングを行うためにのみ用いる回路を設ける必要がない。そのため、本構成によれば、通常のメモリインターフェースと比べて、小型の回路規模を有するメモリインターフェース回路を実現することができる。
また、高速インターフェースデバイスでは、特性変動を抑制することが必要である。そのため、データの書き込み/読み出しに関与するラッチ等の機能ブロックを構成するトランジスタには、大きな面積を有するトランジスタが用いられる。その結果、図24に示すメモリシステム1100のように、第二のデータラッチ部1106などの大規模なブロックを有する場合には、回路面積が大きくなる。一方、本構成によれば、このような大規模なブロックを設ける必要がないので、回路規模抑制の観点から更に有利である。
もっとも、本構成では、レジスタ部を設けなければならない。しかし、レジスタ部43は単に値tA〜tGを保持すれば足りるので、小規模な回路構成(例えば、nmオーダー)で実現することができる。これに対し、第二のデータラッチ部1106などの大規模なブロックについては、例えばμmオーダーの回路規模を有する。従って、レジスタ部43を設けたとしても、回路規模抑制の妨げとなることは無い。従って、メモリインターフェース回路100にレジスタ部43を設けたとしても、従来の構成と比べて、十分に回路規模を削減することが可能となる。
さらに、図24に示すメモリシステム1100では、第一のデータラッチ部1103、第一の可変遅延部1104及び第一の遅延制御部1105で構成される系と、第二のデータラッチ部1106、第二の可変遅延部1107及び第二の遅延制御部1108で構成される系と、の特性を一致させる必要が有る。ところが、これらのブロックは物理的に分離して形成されるので、現実には2つの系の特性を厳密に合わせることはできない。そのため、メモリシステム1100においてタイミング調整を行ったとしても、2つの系の特性のずれにより、長結果の信頼性に問題が有る恐れがある。本構成では、第二のデータラッチ部1106、第二の可変遅延部1107及び第二の遅延制御部1108で構成される系に相当するブロックを設ける必要が無いので、上記の問題を考慮する必要が無い。
さらに、図24に示すメモリシステム1100では、リードデータのトグルを検出する必要がある。そのため、メモリデバイス1101にデータが書き込まれていない場合や、トグルが無いデータについては、タイミング調整を行うことができない。そのため、別途データのトグルが無い場合の対策が必要となる。一方、本構成では、ライトデータを用いてループバックテストを行うので、メモリデバイスにデータが書き込まれていない場合や、トグルが無いデータしか得られない場合を考慮する必要が無い点で有利である。
本構成においては、初期化フェーズ中に、レジスタファイル45の各値の初期値設定が行われる。この際、メモリインターフェース回路100には、外部回路110からテストデータが供給される。このテストデータは、メモリデバイス130にも出力される。しかし、初期化フェーズ中にはメモリデバイス(DDR3−SDRAM)は、書き込み禁止状態となっているため、メモリデバイスにはテストデータは書き込まれない。この書き込み禁止状態の制御については、DDR3−SDRAMの標準規格において定められている。
換言すれば、メモリインターフェース回路100が組み込まれた半導体装置120のデータ端子61及びストローブ端子62は、初期化フェーズ中でも電圧が変動する。データ端子61及びストローブ端子62の電圧は、テスタなどにより容易に観測することができる。一方、通常のメモリコントローラにおいては、初期化フェーズなどの、ライト時/リード時以外の場合に、データ端子61又はストローブ端子62の電圧が変動することは無い。従って、ライト時及びリード時以外の場合に、データ端子又はストローブ端子の電圧を観測することにより、半導体装置内にメモリインターフェース回路100が組み込まれているか否かを識別することが可能である。
実施の形態2
次に、実施の形態2にかかるメモリインターフェース回路について説明する。図14は、実施の形態2にかかるメモリインターフェース回路140を含む半導体装置150の構成を示す回路ブロック図である。半導体装置150は、半導体装置120のメモリインターフェース回路100を、メモリインターフェース回路140に置き換えた構成を有する。その他の半導体装置150の構成は、半導体装置120と同様であるので、説明を省略する。
実施の形態1にかかるメモリインターフェース回路100では、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEに大きな値を設定しなければならない。そうすると、RDLL32の回路規模が大きくなってしまう。これに対し、本実施の形態にかかるメモリインターフェース回路140は、RDLL32に設定するループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEを、メモリインターフェース回路100と比較して小さくできることが特徴である。
メモリインターフェース回路140は、メモリインターフェース回路100の比較器41を、シフト機能付き比較器47に置き換えた構成を有する。シフト機能付き比較器47は、期待値val2に対する結果値val1の比較タイミングをシフトさせる機能を有する。具体的には、シフト機能付き比較器47は、例えば遅延制御信号DCSに応じて、リードデータラッチ11がラッチした結果値val1を1/2サイクル(180°)遅らせたシフト結果値val1_180と、期待値取得用ラッチ12がラッチした期待値val2と、を比較する。メモリインターフェース回路140のその他の構成は、メモリインターフェース回路100と同様であるので、説明を省略する。
続いて、メモリインターフェース回路140の動作について説明する。図15は、実施の形態2にかかるメモリインターフェース回路140の動作を示すフローチャートである。図15に示すメモリインターフェース回路140の動作は、メモリインターフェース回路100の初期化フェーズ200、第1のフェーズ201及び第2のフェーズ202を、それぞれ初期化フェーズ210、第1のフェーズ211及び第2のフェーズ212に置換したものである。
初期化フェーズ210について説明する。図16は、初期化フェーズ210における動作を示すフローチャートである。図16に示すように、初期化フェーズ210は、メモリインターフェース回路100の第1の初期化処理300を、第1の初期化処理310に置き換えたものである。以下では、相違点である第1の初期化処理310について説明する。
図17は、第1の初期化処理310における動作を示すフローチャートである。第1の初期化処理310は、メモリインターフェース回路100のフェーズ303及びフェーズ305を、フェーズ313及びフェーズ315に置き換えたものである。フェーズ313及びフェーズ315では、RDLL32は、ライトストローブ信号WDQSの位相を約90°遅らせる。図18は、第1の初期化処理310における信号のタイミング例を示すタイミングチャートである。RDLL32により、遅延ライトストローブ信号WDQS_dの立ち上がり(タイミングT4)は、ライトストローブ信号WDQSの立ち上がり(タイミングT3)から90°遅れる。
この状態で、シフト機能付き比較器47は、上述の半サイクル遅れの比較動作を行う。つまり、シフト機能付き比較器47は、タイミングT5のタイミングでラッチされた値を、結果値val1として比較動作を行う。これにより、ループバック左Fail確定値tA、ループバック左開口部tBの初期値の探索が可能となる。この場合、ループバック左Fail確定値tA、ループバック左開口部tBは、90°前後の値となる。第1の初期化処理310におけるその他の動作については、第1の初期化処理300と同様であるので、説明を省略する。
次いで、第1のフェーズ211について説明する。図19は、第1のフェーズ211における動作を示すフローチャートである。第1のフェーズ211は、メモリインターフェース回路100の第1のフェーズ201のフェーズ603を、フェーズ613に置き換えたものである。フェーズ613では、第1の初期化処理310のフェーズ313及びフェーズ315と同様に、シフト機能付き比較器47による半サイクル遅れの比較動作が行われる。従って、この場合も、ループバック左Fail確定値tA、ループバック左開口部tBは、90°前後の値となる。第1のフェーズ211におけるその他の動作については、第1のフェーズ201と同様であるので、説明を省略する。
次いで、第2のフェーズ212について説明する。図20は、第2のフェーズ212における動作を示すフローチャートである。第2のフェーズ212は、メモリインターフェース回路100の第2のフェーズ202のフェーズ703及び707を、それぞれフェーズ713及び717に置き換えたものである。フェーズ713及び717では、第1の初期化処理310のフェーズ313及びフェーズ315と同様に、シフト機能付き比較器47による半サイクル遅れの比較動作が行われる。従って、この場合も、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEは、90°前後の値となる。第1のフェーズ212におけるその他の動作については、第2のフェーズ202と同様であるので、説明を省略する。
すなわち、本構成によれば、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEの値を、実施の形態1にかかるメモリインターフェース回路100と比べて、小さくすることができる。その結果、RDLL32の回路面積を抑制し、メモリインターフェース回路140を小型化することが可能となる。
実施の形態3
次に、実施の形態3にかかるメモリインターフェース回路について説明する。図21は、実施の形態3にかかるメモリインターフェース回路160を含む半導体装置170の構成を示す回路ブロック図である。半導体装置170は、半導体装置120のメモリインターフェース回路100を、メモリインターフェース回路160に置き換えた構成を有する。その他の半導体装置170の構成は、半導体装置120と同様であるので、説明を省略する。
メモリインターフェース回路160は、メモリインターフェース回路100のWDLL31を、バイパス機能付きWDLL33に置き換えた構成を有する。また、レジスタファイル45をレジスタファイル48に置き換えている。バイパス機能付きWDLL33は、遅延制御信号DCSに応じて、クロック信号CLKをそのままバイパスして出力する機能を有する。
レジスタファイル48は、レジスタファイル45と比べて、右開口部推定値の初期値tHが追加されている。
続いて、実施の形態3にかかるメモリインターフェース回路160の動作について説明する。図22は、実施の形態3にかかるメモリインターフェース回路160の動作を示すフローチャートである。初期化フェーズ220では、第2の初期化処理400及び第3の初期化処理500が行われる。すなわち、メモリインターフェース回路160は、メモリインターフェース回路100と比較して、第1の初期化処理300が省略される。
初期化フェーズ220の終了後、レジスタ制御部42は、レジスタ部43を制御して、右開口部推定値tFの初期値を、右開口部推定値の初期値tHとして記憶させる(フェーズ205)。
その後、メモリインターフェース回路100と同様に、第3のフェーズ203及び第4のフェーズ204を行う。すなわち、メモリインターフェース回路160は、メモリインターフェース回路100と比較して、第1のフェーズ201及び第2のフェーズ202が省略される。尚、第3のフェーズ203及び第4のフェーズ204は、右開口部推定値の初期値tHは初期値から変化しないとの仮定の下で行われる。
続いて、レジスタ制御部42は、第3のフェーズ203及び第4のフェーズ204を通じて求めた最新の右開口部推定値tFの値と、右開口部推定値の初期値tHと、を比較する(フェーズ206)。これにより、レジスタ制御部42は、右開口部推定値tFの値が、右開口部推定値の初期値tHから、何ステップ乖離しているかを判断する。ここで、レジスタ制御部42には、判断の基準となる基準ステップ数Mが予め設定されている。
右開口部推定値の初期値tHからの右開口部推定値tFの値の乖離量がMステップよりも小さい場合には、第3のフェーズ203に戻り、処理を繰り返す。一方、右開口部推定値の初期値tHからの右開口部推定値tFの値の乖離量がMステップ以上である場合には、フェーズ207に進む。
フェーズ207では、レジスタ制御部42は、外部回路110がメモリインターフェース回路の初期化を許可するかどうかを照会する。初期化が許可されない場合には、第3のフェーズに戻り、処理を繰り返す。初期化が許可される場合には、初期化フェーズ210に戻り、初期化を実行する。
メモリインターフェース回路160では、開口部の右側の境界に着目し、通常のメモリアクセス動作中における遅延量の変化を、初期値と比較する。そして、比較結果が許容範囲(すなわち、初期値からの遅延量の乖離がMステップよりも小さい)内に収まるか否かを監視する。その結果、比較結果が許容範囲外にあると判断した場合に、キャリブレーションを行うものである。
なお、リード時遅延値tGを算出するには、左開口部推定値tEを決定することが必要である。左開口部推定値tEを決定するには、例えば、実施の形態1にかかる初期化フェーズ200を実行することにより可能である。この際、左開口部推定値tEを決定するには、ループバック左Fail確定値tA、ループバック左開口部tBを決定することが必要である。しかし、初期化フェーズ中は、ライトデータを利用する必要がないので、ライトストローブ信号を自由に生成してもよい。
すなわち、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEを決定する際には、バイパス機能付きWDLL33により、クロック信号CLKの位相を遅らせることなく、そのままライトストローブ信号WDQSとして出力することができる。この場合、ループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEを探索するためには、RDLL32は、ライトストローブ信号WDQSにわずかな遅延量を与えるだけでよい。従って、RDLL32に設定される遅延量を、実施の形態1と比べて、大きく抑制することができる。
本構成によれば、大きな値を設定しなければならないループバック左Fail確定値tA、ループバック左開口部tB及び左開口部推定値tEを取り扱う必要が無い。従って、実施の形態2と同様に、RDLL32の回路規模を抑制することが可能となる。
実施の形態4
次に、実施の形態4にかかるメモリシステム1000について説明する。図23は、実施の形態4にかかるメモリシステム1000の構成を示すブロック図である。メモリシステム1000は、半導体装置190とメモリデバイス130とを有する。メモリシステム1000は、半導体装置190が組み込まれた応用装置として構成される。
半導体装置190は、メモリインターフェース回路180及び外部回路110を有する。外部回路110は、制御回路111及びCPU112を有する。また、外部回路110には、制御回路111及びその他の機能ブロック113が搭載されてもよい。メモリインターフェース回路180には、上述のメモリインターフェース回路100、140及び160のいずれかが用いられる。
CPU112は、半導体装置190全体の動作を制御する。制御回路111は、メモリインターフェース回路180及びメモリデバイス130を制御するのと同時に、これらの状態を監視している。
制御回路111は、メモリインターフェース回路180及びメモリデバイス130の状態を監視して、キャリブレーションのやり直しが必要であるか否かを判断する。具体的には、遅延値モニタ信号DMSを用いて、レジスタファイルの値を監視する。そして、レジスタファイルの値が基準範囲を逸脱した場合には、制御回路111は、CPU112へ割り込み信号114を出力し、CPU112に対して割り込み処理要求を行う。
CPU112は、割り込み信号114を受け取ると、CPU112内のメモリ空間から、キャリブレーションのためのメモリ空間を割り当てる。CPU112は、メモリバンド幅が足りない場合には、一時的に機能を制限することで使用しているメモリバンド幅を削り、制御回路111に間欠キャリブレーション要求を出す。
間欠キャリブレーション要求を受けた制御回路111は、メモリアクセスが無い時に、実施の形態1における初期化フェーズ200と同様の手順で、メモリインターフェース回路180の初期化(間欠キャリブレーション)を実行する。
制御回路111は、遅延値モニタ信号DMSを通じて、メモリインターフェース回路180の間欠キャリブレーションの終了を検出する。検出後、制御回路111は間欠キャリブレーションの終了を、割り込み信号114によりCPU112へ通知する。
CPU112は、間欠キャリブレーション終了の通知を受けたら、間欠キャリブレーションに割り当てていたメモリ空間を開放する。その後、CPU112は、通常動作に復帰する。
すなわち、本構成によれば、メモリインターフェース回路180の状態に応じて、メモリインターフェース回路180を適宜初期化することが可能である。これにより、温度などの状態変化が激しい場合でも、その変化に追随した動作を行うことができる。
なお、本構成では、メモリシステム1000から一時的にメモリ空間とメモリバンド幅を切り離して間欠キャリブレーションをしている。よって、間欠キャリブレーション中は一時的に処理能力が低下するものの、メモリアクセス動作を妨げることは無い。従って、メモリアクセスの高速化を犠牲にすることなく、メモリアクセス動作を安定化させることが可能である。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、WDLL及びRDLLは、適宜遅延値を調整可能であるならば、DLL以外の他のブロックに置き換えることが可能である。
また、実施の形態4にかかる半導体装置190を組み込むのはメモリシステムに限られず、メモリシステム以外の他の応用装置に組み込むことができるのは勿論である。