(57)【特許請求の範囲】
【請求項１】
ライト時に外部から受け取ったライトデータをメモリデバイスへ出力するデータ出力バッファと、
ライト時に外部から受け取ったクロック信号の位相を遅らせたライトストローブ信号を、ストローブ信号出力バッファを介して前記メモリデバイスへ出力する書き込み遅延調整装置と、
前記クロック信号に同期して、前記外部からの前記ライトデータをラッチする第１のラッチと、
リード時に前記メモリデバイスから受け取ったリードデータを出力するデータ入力バッファと、
リード時にストローブ信号入力バッファを介して前記メモリデバイスから受け取ったリードストローブ信号の位相を遅らせた遅延リードストローブ信号を出力し、ライト時に前記ストローブ信号入力バッファを介して前記ストローブ信号出力バッファからループバックされたライトストローブ信号を遅延させた遅延ライトストローブ信号を出力する読み出し遅延調整装置と、
リード時に前記データ入力バッファからの前記リードデータを前記遅延リードストローブ信号に同期してラッチし、ライト時に前記データ入力バッファを介して前記データ出力バッファからループバックされた前記ライトデータを前記遅延ライトストローブ信号に同期してラッチする第２のラッチと、
ライト時に前記第１のラッチの出力と前記第２のラッチの出力とを比較し、比較結果を比較結果信号として出力する比較器と、
前記ライトストローブ信号又は前記リードストローブ信号を遅延させるために前記読み出し遅延調整装置に設定される遅延値が格納されたレジスタ部と、
前記比較結果信号に応じて、前記レジスタ部に格納された前記遅延値を更新するレジスタ制御部と、
前記レジスタ制御部により制御され、前記レジスタ部に格納された前記遅延値を読み出し、読み出した前記遅延値を前記読み出し遅延調整装置に設定する遅延選択部と、を備える、
メモリインターフェース回路。
【請求項２】
前記比較器は、複数の前記ライトデータに対応した複数の比較動作を行い、複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致するか否か、又は一致しないか否かを判断することを特徴とする、
請求項１に記載のメモリインターフェース回路。
【請求項３】
前記レジスタ部に格納された前記遅延値は初期化動作により初期化され、
前記初期化動作時に、前記レジスタ制御部は、前記リードデータのラッチタイミングを調整するキャリブレーション動作を行うことにより、前記第２のラッチが前記リードデータを適正にラッチできる最も遅いタイミングに対応する第１の遅延値を決定し、
前記初期化動作後のライト時に、
前記レジスタ制御部は、前記複数の比較結果に基づいて前記第１の遅延値を更新し、
リード時には、前記遅延選択部は、前記レジスタ部に格納された前記第１の遅延値を読み出し、読み出した前記第１の遅延値に対応した遅延値を前記読み出し遅延調整装置に設定する、
請求項１又は２に記載のメモリインターフェース回路。
【請求項４】
前記レジスタ制御部は、
前記初期化動作時に、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する最も遅いタイミングに対応する遅延値である第２の遅延値を決定し、
前記初期化動作後のライト時における当該メモリインターフェース回路の状態変化による前記第２の遅延値の変動を検出し、
前記第２の遅延値の変動に連動して前記第１の遅延値を変化させることを特徴とする、
請求項３に記載のメモリインターフェース回路。
【請求項５】
前記レジスタ制御部は、
前記初期化動作時に、
前記第２の遅延値に対応するタイミングよりも遅く、かつ、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致しない最も早いタイミングに対応する遅延値である第３の遅延値を決定し、
前記初期化動作後のライト時に、
前記第３の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行い、前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する比較結果が１以上存在する場合には前記第２の遅延値を１ステップ遅い値に更新し、
前記第２の遅延値を更新した場合には、更新された前記第２の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行い、前記第１のラッチの出力値と前記第２のラッチの出力値とが一致しない比較結果が１以上存在する場合には前記第２の遅延値を１ステップ早い値に更新し、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する場合には前記第１の遅延値及び前記第３の遅延値を１ステップ遅い値に更新し、
前記第２の遅延値を更新しなかった場合には、前記第２の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行い、前記第１のラッチの出力値と前記第２のラッチの出力値とが一致しない比較結果が１以上存在する場合には前記第１の遅延値及び前記第２の遅延値を１ステップ早い値に更新し、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する場合には前記第１〜３の遅延値をそのまま保持することを特徴とする、
請求項４に記載のメモリインターフェース回路。
【請求項６】
前記レジスタ制御部は、
前記初期化動作時に、前記レジスタ制御部は、前記リードデータのラッチタイミングを調整するキャリブレーション動作を行うことにより、前記第２のラッチが前記リードデータを適正にラッチできる最も早いタイミングに対応する第４の遅延値を決定し、
前記第１の遅延値及び前記第４の遅延値に応じてリード時の遅延値の初期値を決定し、
前記初期化動作後のライト時に、
前記レジスタ制御部は、前記複数の比較結果に基づいて前記第４の遅延値を更新し、
リード時には、前記遅延選択部は、前記レジスタ部に格納された前記第４の遅延値を読み出し、読み出した前記第１及び第４の遅延値に対応した遅延値を前記読み出し遅延調整装置に設定する、
請求項３乃至５のいずれか一項に記載のメモリインターフェース回路。
【請求項７】
前記レジスタ制御部は、
前記初期化動作時に、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する最も早いタイミングに対応する遅延値である第５の遅延値を決定し、
前記初期化動作後のライト時における当該メモリインターフェース回路の状態変化による前記第５の遅延値の変動を検出し、
前記第５の遅延値の変動に連動して前記第４の遅延値を変化させることを特徴とする、
請求項６に記載のメモリインターフェース回路。
【請求項８】
前記レジスタ制御部は、
前記初期化動作時に、
前記第５の遅延値に対応するタイミングよりも早く、かつ、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致しない最も遅いタイミングに対応する遅延値である第６の遅延値を決定し、
前記初期化動作後のライト時に、
前記第６の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行い、前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する比較結果が１以上存在する場合には前記第５の遅延値を１ステップ早い値に更新し、
前記第５の遅延値を更新した場合には、更新された前記第５の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行い、前記第１のラッチの出力値と前記第２のラッチの出力値とが一致しない比較結果が１以上存在する場合には前記第５の遅延値を１ステップ遅い値に更新し、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する場合には前記第４の遅延値及び前記第６の遅延値を１ステップ早い値に更新し、
前記第５の遅延値を更新しなかった場合には、前記第５の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行い、前記第１のラッチの出力値と前記第２のラッチの出力値とが一致しない比較結果が１以上存在する場合には前記第４の遅延値及び前記第５の遅延値を１ステップ遅い値に更新し、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する場合には前記第４〜６の遅延値をそのまま保持することを特徴とする、
請求項７に記載のメモリインターフェース回路。
【請求項９】
前記比較器は、前記第１のラッチの出力値と前記第２のラッチの出力値を前記遅延ライトストローブ信号の半サイクルだけタイミングを遅らせた値とを比較し、
前記遅延選択部が前記遅延調整装置に設定する遅延値は、前記比較器が前記第２のラッチの出力値のタイミングを遅らせることなく、前記第１のラッチの出力値と前記第２のラッチの出力値とを比較する場合と比較して、前記遅延ライトストローブ信号の半サイクルだけタイミングを早めた値である、
請求項１に記載のメモリインターフェース回路。
【請求項１０】
前記レジスタ制御部は、
前記初期化動作時に、前記リードデータのラッチタイミングを調整するキャリブレーション動作を行うことにより、前記第２のラッチが前記リードデータを適正にラッチできる最も早いタイミングに対応する第４の遅延値を決定することを特徴とする、
請求項８に記載のメモリインターフェース回路。
【請求項１１】
前記レジスタ制御部は、
更新された前記第４の遅延値と前記第４の遅延値の初期値とを比較し、更新された前記第４の遅延値と前記第４の遅延値の初期値とが所定の値以上乖離している場合には外部の制御回路へ信号を出力し、
外部の制御回路は、前記信号に応じて前記レジスタ部を制御することにより、前記第４〜６の遅延値を初期化することを特徴とする、
請求項１０に記載のメモリインターフェース回路。
【請求項１２】
前記初期化動作時に、
前記書き込み遅延調整装置は、前記クロック信号をそのまま前記ライトストローブ信号として出力し、
前記第４の遅延値は、当該第４の遅延値を前記読み出し遅延調整装置に設定して前記複数の比較動作を行った場合に、前記複数の比較結果の全てにおいて前記第１のラッチの出力値と前記第２のラッチの出力値とが一致する最も早いタイミングに対応する値であることを特徴とする、
請求項１１に記載のメモリインターフェース回路。
【請求項１３】
リード時の前記遅延値は、前記第１の遅延値及び前記第４の遅延値の中間値であることを特徴とする、
請求項６乃至８及び１０乃至１２のいずれか一項に記載のメモリインターフェース回路。
【請求項１４】
請求項３乃至８及び１０乃至１３のいずれか一項に記載のメモリインターフェース回路と、
前記メモリインターフェース回路を制御する制御回路と、
前記メモリインターフェース回路及び制御回路を制御するＣＰＵと、を備え、
前記制御回路は、前記レジスタ制御部から出力される遅延値モニタ信号により前記レジスタ部に格納された前記遅延値を監視し、前記レジスタ部に格納された前記遅延値が予め定められた基準値よりも大きくなった場合には、前記ＣＰＵに割り込み信号を出力し、
前記ＣＰＵは、前記割り込み信号を受け取ると、前記メモリデバイスのアクセス要求が無い時に前記制御回路に対して初期化動作要求を行い、
前記制御回路は、前記初期化動作要求に応じて前記レジスタ制御部に遅延制御信号を出力することにより、前記メモリインターフェース回路に前記初期化動作を行わせることを特徴とする、
半導体装置。
【請求項１５】
請求項１４に記載の前記半導体装置が組み込まれたことを特徴とする、
応用装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリインターフェース回路及び半導体装置に関し、特に通常のメモリアクセス動作中にタイミング調整を行うメモリインターフェース回路及び半導体装置に関する。
【背景技術】
【０００２】
近年のコンピュータシステムでは、処理の増大に対応するため、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）が用いられている。具体的には、ＤＤＲ（Double-Data-Rate）２−ＳＤＲＡＭやＤＤＲ３−ＳＤＲＡＭなどの高速メモリデバイスが登場している。例えば、ＤＤＲ３−ＳＤＲＡＭでは、ストローブ信号の立ち上がり又は立下りに同期して、データ信号の入力又は出力が行われる。
【０００３】
このようなメモリデバイスを搭載したシステムでは、システム系の温度変化や電圧変化などの状態変化に伴い、ストローブ信号とデータ信号との間に、タイミングのずれが生じる。このタイミングのずれにより、データ信号を正しく取得できない自体が発生してしまう。そのため、ＤＤＲ３−ＳＤＲＡＭなどでは、書き込みや読み出しなどの通常のメモリアクセス動作を停止し、ストローブ信号とデータ信号との間のタイミング調整を行うキャリブレーション動作が頻繁に実行される。ところが、キャリブレーション動作が実行されている際には、データの書き込み／読み出しを行えないので、データの高速入出力の妨げとなってしまう。
【０００４】
このような問題に対して、通常のメモリアクセス動作中にストローブ信号とデータ信号との間のタイミング調整を行うメモリインターフェースが提案されている（特許文献１）。図２４は、通常のメモリアクセス動作中にストローブ信号とデータ信号との間のタイミング調整を行うメモリインターフェースの例を示す機能ブロック図である。
【０００５】
メモリシステム１１００は、メモリデバイス１１０１およびメモリインターフェース１１０２から構成される。メモリデバイス１１０１とメモリインターフェース１１０２は少なくとも、データ信号線１１１２とストローブ信号線１１１３により接続される。
【０００６】
メモリデバイス１１０１は、ストローブ信号の立ち上がりエッジまたは立下りエッジのいずれか一方でデータをラッチするＳＤＲ（Ｓｉｎｇｌｅ Ｄａｔａ Ｒａｔｅ）−ＳＤＲＡＭでもよく、また、ストローブ信号の立ち上がりエッジおよび立下りエッジの両方でデータをラッチするＤＤＲ（Ｄｏｕｂｌｅ Ｄａｔａ Ｒａｔｅ）−ＳＤＲＡＭでもよい。
【０００７】
以下では、簡明のため、ストローブ信号の立ち上がりエッジまたは立下りエッジの一方に関係する構成および動作について説明する。
【０００８】
データ信号線１１１２は、メモリインターフェース１１０２からメモリデバイス１１０１に書き込むデータ、およびメモリデバイス１１０１から読み出すデータを転送するのに使用され、一般的には双方向の信号線である。図２４ではデータ信号線は１本であるが、ストローブ信号線１１１３に対応する複数のデータ信号線で構成されていてもかまわない。
【０００９】
ストローブ信号線１１１３は、メモリインターフェース１１０２からメモリデバイス１１０１にデータを書き込む場合に、メモリインターフェース１１０２からメモリデバイス１１０１へのライトストローブ信号を出力するために使用される。逆に、メモリインターフェース１１０２がメモリデバイス１１０１からデータを読み出す場合には、メモリデバイス１１０１からメモリインターフェース１１０２へのリードストローブ信号を出力するために使用され、一般的には双方向の信号線である。
【００１０】
メモリインターフェース１１０２は、第一のデータラッチ部１１０３、第一の可変遅延部１１０４、第一の遅延制御部１１０５、第二のデータラッチ部１１０６、第二の可変遅延部１１０７、第二の遅延制御部１１０８、比較器１１０９、遅延判定部１１１０、トグル検出器１１１１、方向制御部１１１４を含む。
【００１１】
メモリデバイス１１０１にＤＤＲ−ＳＤＲＡＭを用いる場合は、メモリインターフェース１１０２におけるこれらの構成要素を、１本のストローブ信号線１１１３に対して、ストローブ信号の立ち上がりエッジおよび立下りエッジのそれぞれに対応して２組設けることにより、ストローブ信号の立ち上がりエッジおよび立下りエッジのそれぞれについて独立にタイミング調整を行うことができる。
【００１２】
データ信号線１１１２は前述のとおり、一般的に双方向信号であるので、その場合、方向制御部１１１４を用いて、応用装置からライトデータ１１１５を転送する方向と、第一のデータラッチ部１１０３および第二のデータラッチ部１１０６へリードデータを転送する方向に制御される。
【００１３】
応用装置は、メモリインターフェース１１０２を介してメモリデバイス１１０１を利用する回路であり、本発明では応用装置の機能を限定しない。応用装置は、メモリインターフェース１１０２から、リードデータ１１１６を受け取る。応用装置は、一例としてＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）であってもよい。
【００１４】
第一のデータラッチ部１１０３は、第一の可変遅延部１１０４を通じて遅延されたストローブ信号線１１１３から伝わったストローブ信号を用いて、方向制御部１１１４を通じて伝わったデータをラッチする。ラッチした情報は、応用装置に伝わり使用されるだけでなく、比較器１１０９に送られる。
【００１５】
第二のデータラッチ部１１０６は、第二の可変遅延部１１０７を通じて遅延されたストローブ信号線１１１３から伝わったストローブ信号を用いて、方向制御部１１１４を通じて伝わったデータをラッチする。ラッチした情報は、比較器１１０９に送られ、さらにトグル検出器１１１１にも送られる。
【００１６】
第一の可変遅延部１１０４は、データ信号線１１１２および方向制御部１１１４を通じて第一のデータラッチ部１１０３に送られるデータ信号に対する、ストローブ信号線１１１３を通じて伝わるストローブ信号のタイミングの調整を行う。第一の可変遅延部１１０４は遅延量を変更可能な遅延ラインを含んでいる。これによりタイミング調整を行うことができる。
【００１７】
第二の可変遅延部１１０７は、データ信号線１１１２および方向制御部１１１４を通じて第二のデータラッチ部１１０６に送られるデータ信号に対する、ストローブ信号線１１１３を通じて伝わるストローブ信号のタイミングの調整を行う。可変遅延部１１０７は遅延量を変更可能な遅延ラインを含んでいる。これによりタイミング調整を行うことができる。
【００１８】
第一の遅延制御部１１０５は、遅延判定部１１１０から送られる遅延設定量から、第一の可変遅延部１１０４に内蔵される遅延ラインの調整量を計算し、第一の可変遅延部１１０４に設定を行う。
【００１９】
第二の遅延制御部１１０８は、遅延判定部１１１０から送られる遅延設定量から、第二の可変遅延部１１０７に内蔵される遅延ラインの調整量を計算し、第二の可変遅延部１１０７に設定を行う。
【００２０】
比較器１１０９は、第一のデータラッチ部１１０３でラッチしたデータの値と、第二のデータラッチ部１１０６でラッチしたデータの値の比較を行い、一致しているかしていないかの結果を遅延判定部１１１０に送る。
【００２１】
遅延判定部１１１０は、比較器１１０９からの結果と、その時の第一の遅延制御部１１０５の遅延設定量と、第二の遅延制御部１１０８の遅延設定量を記録する。この記録から第一の遅延制御部１１０５と第二の遅延制御部１１０８の適切な遅延設定量を更新し、設定を行う。
【００２２】
このメモリシステム１１００は、予めキャリブレーションされた第一のデータラッチ部１１０３が、第一の可変遅延部１１０４を介して遅延したストローブ信号に同期して、リードデータをラッチする。一方、第二のデータラッチ部１１０６は、第二の可変遅延部１１０７を介して遅延したストローブ信号に同期して、リードデータをラッチする。そして、第一のデータラッチ部１１０３の出力がトグルしたタイミングで、第一のデータラッチ部１１０３の出力値と第２の第二のデータラッチ部１１０６とを比較する。
【００２３】
第一のデータラッチ部１１０３の出力値と第二のデータラッチ部１１０６が一致する場合には、第二の可変遅延部１１０７における遅延量を、第二の遅延制御部１１０８を介して、第一の可変遅延部１１０４における遅延量に対して差が広がるように調整する。この調整動作は、第一のデータラッチ部１１０３の出力値と第二のデータラッチ部１１０６とが一致しなくなるまで行われる。これにより、第一のデータラッチ部１１０３の出力値及び第二のデータラッチ部１１０６の出力値の一致／不一致の境界となる遅延量を知ることができる。
【００２４】
第一のデータラッチ部１１０３の出力値と第二のデータラッチ部１１０６の出力値が一致しない場合には、第二の可変遅延部１１０７における遅延量を、第二の遅延制御部１１０８を介して、第一の可変遅延部１１０４における遅延量に対して差が小さくなるように調整する。この調整動作は、第１のデータラッチの出力値と第二のデータラッチ部１１０６の出力値とが一致するまで行われる。これにより、第一のデータラッチ部１１０３の出力値及び第二のデータラッチ部１１０６の出力値の一致／不一致の境界となる遅延量を知ることができる。
【００２５】
そして、第一のデータラッチ部１１０３及び第二のデータラッチ部１１０６の出力値の一致／不一致の境界となる遅延量に対して、安全余裕を加味した遅延量を算出される。ＤＲＡＭにおいて一般的に行われるリフレッシュ中に、第一の遅延制御部１１０５を介して、この安全余裕を加味した遅延量を第一の可変遅延部１１０４に設定する。これにより、第一の可変遅延部１１０４に設定する遅延量を更新できる。その結果、キャリブレーション動作を繰り返すことなく、ストローブ信号とデータ信号との間のタイミング調整を行うことができるとしている。
【００２６】
また、位相インターポレータを用いることにより、ストローブ信号とデータ信号との間のタイミング調整を行うメモリシステムが提案されている（特許文献２）。
【先行技術文献】
【特許文献】
【００２７】
【特許文献１】特開２０１０−８６４１５号公報
【特許文献２】特開２０１０−２６８９６号公報
【発明の概要】
【発明が解決しようとする課題】
【００２８】
ところが、特許文献１に開示されるようなメモリインターフェースでは、第一の可変遅延部１１０４の遅延量を調整するためだけのブロックが存在する。すなわち、第二のデータラッチ部１１０６、第二の可変遅延部１１０７、第二の遅延制御部１１０８、比較器１１０９、遅延判定部１１１０及びトグル検出器１１１１は、第一の可変遅延部１１０４の遅延量の調整にのみ機能し、データの書き込み／読み出しには寄与しない。換言すれば、特許文献１に開示されるようなメモリインターフェースを採用するならば、データの書き込み／読み出しには寄与しないブロックを組み込まなければならない。その結果、メモリインターフェースの回路規模が増大してしまう。よって、メモリシステムの小型化の実現を妨げる原因となる。
【００２９】
また、特許文献２に開示されたメモリシステムにおいても、同様に、データの書き込み／読み出しには寄与しない位相インターポレータを組み込まなければならない。従って、上述のメモリインターフェースと同様の問題が生じる。
【課題を解決するための手段】
【００３０】
本発明の一態様であるメモリインターフェース回路は、ライト時に外部から受け取ったライトデータをメモリデバイスへ出力するデータ出力バッファと、ライト時に外部から受け取ったクロック信号の位相を遅らせたライトストローブ信号を、ストローブ信号出力バッファを介して前記メモリデバイスへ出力する書き込み遅延調整装置と、前記クロック信号に同期して、前記外部からの前記ライトデータをラッチする第１のラッチと、リード時に前記メモリデバイスから受け取ったリードデータを出力するデータ入力バッファと、リード時にストローブ信号入力バッファを介して前記メモリデバイスから受け取ったリードストローブ信号の位相を遅らせた遅延リードストローブ信号を出力し、ライト時に前記ストローブ信号入力バッファを介して前記ストローブ信号出力バッファからループバックされたライトストローブ信号を遅延させた遅延ライトストローブ信号を出力する読み出し遅延調整装置と、リード時に前記データ入力バッファからの前記リードデータを前記遅延リードストローブ信号に同期してラッチし、ライト時に前記データ入力バッファを介して前記データ出力バッファからループバックされた前記ライトデータを前記遅延ライトストローブ信号に同期してラッチする第２のラッチと、ライト時に前記第１のラッチの出力と前記第２のラッチの出力とを比較し、比較結果を比較結果信号として出力する比較器と、前記ライトストローブ信号又は前記リードストローブ信号を遅延させるために前記読み出し遅延調整装置に設定される遅延値が格納されたレジスタ部と、前記比較結果信号に応じて、前記レジスタ部に格納された前記遅延値を更新するレジスタ制御部と、前記レジスタ制御部により制御され、前記レジスタ部に格納された前記遅延値を前記読み出し遅延調整装置に設定する遅延選択部と、を備えるものである。
【００３１】
このメモリインターフェース回路は、前記ライトデータをループバックさせることにより、リード時に前記読み出し遅延調整装置に設定するリード時遅延値を、ライト時に最適化することができる。そのため、ライト時又はリード時などにおける通常のメモリアクセス動作を中断して、頻繁にキャリブレーション動作を行う必要が無い。また、ライト時のループバック動作を利用しているので、キャリブレーション動作にしか用いられない余分な回路を設ける必要が無い。その結果、通常のメモリアクセスを中断することなくストローブ信号とデータ信号との間のタイミング調整することができる、小型のメモリインターフェース回路を実現することができる。
【発明の効果】
【００３２】
本発明によれば、通常のメモリアクセスを中断することなくストローブ信号とデータ信号との間のタイミング調整することができる、小型のメモリインターフェース回路を提供することができる。
【図面の簡単な説明】
【００３３】
【図１】実施の形態１にかかるメモリインターフェース回路１００を含む半導体装置１２０の構成を示す回路ブロック図である。
【図２】実施の形態１にかかるレジスタファイル４５の値ｔＡ〜ｔＤと比較器４１のループバックテスト時の比較結果との関係を示す図である。
【図３】実施の形態１にかかるメモリインターフェース回路１００の動作を示すフローチャートである。
【図４】実施の形態１の初期化フェーズ２００における動作を示すフローチャートである。
【図５】実施の形態１の第１の初期化処理３００における動作を示すフローチャートである。
【図６】実施の形態１の第１の初期化処理３００における信号のタイミング例を示すタイミングチャートである。
【図７】実施の形態１の第２の初期化処理４００における動作を示すフローチャートである。
【図８】実施の形態１の第２の初期化処理４００における信号のタイミング例を示すタイミングチャートである。
【図９】実施の形態１の第３の初期化処理５００における動作を示すフローチャートである。
【図１０】実施の形態１の第１のフェーズ２０１の動作を示すフローチャートである。
【図１１】実施の形態１の第２のフェーズ２０２の動作を示すフローチャートである。
【図１２】実施の形態１の第３のフェーズ２０３の動作を示すフローチャートである。
【図１３】実施の形態１の第４のフェーズ２０４の動作を示すフローチャートである。
【図１４】実施の形態２にかかるメモリインターフェース回路１４０を含む半導体装置１５０の構成を示す回路ブロック図である。
【図１５】実施の形態２にかかるメモリインターフェース回路１４０の動作を示すフローチャートである。
【図１６】実施の形態２の初期化フェーズ２１０における動作を示すフローチャートである。
【図１７】実施の形態２の第１の初期化処理３１０における動作を示すフローチャートである。
【図１８】実施の形態２の第１の初期化処理３１０における信号のタイミング例を示すタイミングチャートである。
【図１９】実施の形態２の第１のフェーズ２１１の動作を示すフローチャートである。
【図２０】実施の形態２の第２のフェーズ２１２の動作を示すフローチャートである。
【図２１】実施の形態３にかかるメモリインターフェース回路１６０を含む半導体装置１７０の構成を示す回路ブロック図である。
【図２２】実施の形態３にかかるメモリインターフェース回路１６０の動作を示すフローチャートである。
【図２３】実施の形態４にかかるメモリシステム１０００の構成を示すブロック図である。
【図２４】通常のメモリアクセス動作中にストローブ信号とデータ信号との間のタイミング調整を行うメモリインターフェースの例を示す機能ブロック図である。
【発明を実施するための形態】
【００３４】
以下、図面を参照して本発明の実施の形態について説明する。各図面においては、同一要素には同一の符号が付されており、必要に応じて重複説明は省略される。
【００３５】
実施の形態１
まず、実施の形態１にかかるメモリインターフェース回路について説明する。実施の形態１では、ＤＤＲ３−ＳＤＲＡＭが用いられる場合を例として説明する。図１は、実施の形態１にかかるメモリインターフェース回路１００を含む半導体装置１２０の構成を示す回路ブロック図である。半導体装置１２０は、メモリインターフェース回路１００及び外部回路１１０を有する。半導体装置１２０は、外部のメモリデバイス１３０と接続され、メモリコントローラとして機能する。上述の通り、本実施の形態では、ＤＤＲ３−ＳＤＲＡＭがメモリデバイス１３０として用いられる。メモリインターフェース回路１００は、外部回路１１０とメモリデバイス１３０との間のデータのやり取りを仲介する。
【００３６】
続いて、メモリインターフェース回路１００の構成について、詳細に説明する。ライトデータ出力バッファ２１の入力は、ライトデータ信号線５１を介して、外部回路１１０と接続される。ライトデータ出力バッファ２１の出力は、リードデータ入力バッファ２２の入力及びデータ端子６１と接続される。データ端子６１は、単数又は複数のデータ信号線７１を介して、メモリデバイス１３０と接続される。リードデータ入力バッファ２２の出力は、リードデータラッチ１１の入力と接続される。リードデータラッチ１１の出力は、リードデータ信号線５２を介して、外部回路１１０と接続される。
【００３７】
書き込み遅延調整装置（Ｗｒｉｔｅ  Ｄｅｌａｙ−Ｌｏｃｋｅｄ  Ｌｏｏｐ、以下ＷＤＬＬと表記）３１の入力は、クロック信号線５３を介して、外部回路１１０と接続される。ＷＤＬＬ３１の出力は、ストローブ信号出力バッファ２３の入力と接続される。ストローブ信号出力バッファ２３の出力は、ストローブ信号入力バッファ２４の入力及びストローブ端子６２と接続される。ストローブ端子６２は、単数又は複数のストローブ信号線７２を介して、メモリデバイス１３０と接続される。ストローブ信号入力バッファ２４の出力は、読み出し遅延調整装置（Ｒｅａｄ  Ｄｅｌａｙ−Ｌｏｃｋｅｄ  Ｌｏｏｐ、以下ＲＤＬＬと表記）３２の入力と接続される。ＲＤＬＬ３２の出力は、リードデータラッチ１１のイネーブル入力と接続される。
【００３８】
ＷＤＬＬ３１は、入力されるクロック信号ＣＬＫの位相を９０°遅らせたライトストローブ信号ＷＤＱＳを出力する。ＲＤＬＬ３２は、入力される信号の位相を遅らせた信号を出力する。
【００３９】
期待値取得用ラッチ１２の入力は、ライトデータ信号線５１を介して、外部回路１１０と接続される。期待値取得用ラッチ１２のイネーブル入力は、クロック信号線５３を介して、外部回路１１０と接続される。
【００４０】
比較器４１は、２つの入力を有する。比較器４１の一方の入力は、リードデータラッチ１１の出力（結果値ｖａｌ１）と接続される。比較器４１の他方の入力は、期待値取得用ラッチ１２の出力（期待値ｖａｌ２）と接続される。比較器４１の比較結果は、比較結果信号４６として、レジスタ制御部４２に出力される。レジスタ制御部４２は、比較結果信号４６又は遅延制御信号線５４を介して入力される遅延制御信号ＤＣＳに応じて、レジスタ部４３又は遅延選択部４４に制御信号を出力する。
【００４１】
レジスタ部４３には、レジスタファイル４５が格納されている。レジスタファイル４５は、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ、ループバック右開口部ｔＣ、ループバック右Ｆａｉｌ確定値ｔＤ、左開口部推定値ｔＥ、右開口部推定値ｔＦ及びリード時遅延値ｔＧの各値を含んでいる。これらの値の役割及び決定方法については、後述する。これらのレジスタファイル４５の値ｔＡ〜ｔＧは、レジスタ制御部４２からの制御信号Ｓ１により、初期化され、又は更新される。また、外部回路１１０は、レジスタファイル４５の値ｔＡ〜ｔＧを監視するため、遅延値モニタ信号線５５を介して、レジスタファイル４５の値ｔＡ〜ｔＧを遅延値モニタ信号ＤＭＳとして読み出す。
【００４２】
遅延選択部４４は、レジスタ制御部４２からの制御信号Ｓ２に応じて、レジスタ部４３からレジスタファイル４５の値ｔＡ〜ｔＧのいずれかを読み出す。そして、読み出した値を、ＲＤＬＬ３２の遅延量として設定する。ＲＤＬＬ３２は、遅延選択部４４によって設定された遅延量（レジスタファイル４５の値ｔＡ〜ｔＧのいずれか）を、ＲＤＬＬ３２に入力される信号に与える。
【００４３】
続いて、メモリインターフェース回路１００のライト時及びリード時の動作の概要について説明する。まず、リード時について説明する。リード時には、メモリデバイス１３０からリードデータ入力バッファ２２へ、リードデータＲＤが出力される。リードデータＲＤは、データレートと同じ周波数にて読み出される。また、リードデータＲＤは、例えばバースト長が８のデータ信号として出力される。
【００４４】
また、ストローブ信号入力バッファ２４を介して、メモリデバイス１３０からＲＤＬＬ３２へ、リードストローブ信号ＲＤＱＳが供給される。リードストローブ信号ＲＤＱＳは、データレートと同じ周波数にて供給される。また、リードストローブ信号ＲＤＱＳは、例えば差動リードストローブ信号として供給される。図１においては、説明の便宜のため、リードストローブ信号ＲＤＱＳを１本の信号として表示している。
【００４５】
ＲＤＬＬ３２は、リードストローブ信号ＲＤＱＳにリード時遅延値ｔＧを与えた、遅延リードストローブ信号ＲＤＱＳ＿ｄを、リードデータラッチ１１へ出力する。この際、ＲＤＬＬ３２には、前もってリード時遅延値ｔＧが設定されている。
【００４６】
リードデータラッチ１１は、遅延リードストローブ信号ＲＤＱＳ＿ｄに同期して、リードデータＲＤをラッチする。そして、リードデータラッチ１１は、ラッチしたリードデータＲＤを外部回路１１０へ出力する。これにより、メモリデバイス１３０からデータが読み出される。
【００４７】
次いで、ライト時について説明する。ライト時には、ライトデータ出力バッファ２１を介して、外部回路１１０からメモリデバイス１３０へライトデータＷＤが供給される。また、外部回路１１０からＷＤＬＬ３１へ、クロック信号ＣＬＫが供給される。ＷＤＬＬ３１は、クロック信号ＣＬＫの位相を９０°遅らせた信号を、ライトストローブ信号ＷＤＱＳとしてメモリデバイス１３０へ出力する。ライトデータＷＤは、ライトストローブ信号ＷＤＱＳに同期してメモリデバイス１３０に書き込まれる。
【００４８】
また、ライトデータＷＤは、リードデータ入力バッファ２２を介して、リードデータラッチ１１へループバックされる。ライトストローブ信号ＷＤＱＳは、ストローブ信号入力バッファ２４を介して、ＲＤＬＬ３２へ入力される。ＲＤＬＬ３２は、ライトストローブ信号ＷＤＱＳに対して、レジスタファイル４５の値ｔＡ〜ｔＦのいずれかの遅延を与えることにより、遅延ライトストローブ信号ＷＤＱＳ＿ｄを生成する。遅延ライトストローブ信号ＷＤＱＳ＿ｄはリードデータラッチ１１へ出力される。
【００４９】
リードデータラッチ１１は、遅延ライトストローブ信号ＷＤＱＳ＿ｄに同期して、ループバックされたライトデータＷＤをラッチする。そして、リードデータラッチ１１は、ラッチしたライトデータＷＤを、結果値ｖａｌ１として、比較器４１へ出力する。
【００５０】
さらに、期待値取得用ラッチ１２が、クロック信号ＣＬＫに同期してライトデータＷＤをラッチする。そして、期待値取得用ラッチ１２は、ラッチしたライトデータＷＤを、期待値ｖａｌ２として、比較器４１へ出力する。
【００５１】
比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。これにより、結果値ｖａｌ１と期待値ｖａｌ２とが一致する（以下、ＰＡＳＳと表記する）か、あるいは結果値ｖａｌ１と期待値ｖａｌ２とが一致しない（以下、ＦＡＩＬと表記する）か、が判断される。比較器４１は、比較結果信号４６を、レジスタ制御部４２へ出力する。レジスタ制御部４２は、比較結果信号４６に応じて、レジスタ部４３及び遅延選択部４４を操作することにより、ＲＤＬＬ３２に設定する遅延値を決定する。
【００５２】
すなわち、メモリインターフェース回路１００は、ループバックされたライトデータＷＤの値（結果値ｖａｌ１）と、ループバックを受けないライトデータＷＤ（期待値ｖａｌ２）と、を比較する。この比較は同じデータ同士を比較しているので、結果値ｖａｌ１と期待値ｖａｌ２とは、本来一致するはずである。ところが、ループバックされたライトデータＷＤは、リードデータ入力バッファ２２からリードデータラッチ１１までの経路を余計に伝搬しなければならない。
【００５３】
ところが、半導体装置１２０の温度変化などにより、このリード時の経路の状態は変化する。この変化により、リードデータラッチ１１のラッチタイミングがずれてしまう場合が有る。すなわち、ＲＤＬＬ３２から供給される遅延リードストローブ信号ＲＤＱＳ＿ｄの位相が適切でない場合が生じる。この場合には、ＲＤＬＬ３２に設定する遅延値を調整し、適切な遅延リードストローブ信号ＲＤＱＳ＿ｄを供給すればよい。つまり、メモリインターフェース回路１００は、結果値ｖａｌ１と期待値ｖａｌ２との比較結果（ループバック動作時の比較結果）に応じて、ＲＤＬＬ３２に設定する遅延値を調整することが可能である。なお、ＲＤＬＬ３２の遅延値の調整は、ライトデータＷＤだけでなく、ライトデータＷＤと同じ経路を介して供給されるテストデータを用いることも可能である。
【００５４】
次に、実施の形態１にかかるレジスタファイルの値ｔＡ〜ｔＧの役割について説明する。まず、レジスタファイル４５の値ｔＡ〜ｔＤについて説明する。レジスタファイル４５の値ｔＡ〜ｔＤは、メモリインターフェース回路１００における、ライト時のライトデータＷＤのループバック動作（以下、ループバックテスト）により設定される値である。
【００５５】
図２は、レジスタファイル４５の値ｔＡ〜ｔＤと比較器４１のループバックテスト時の比較結果との関係を示す図である。図２に示すように、ループバックテスト時のＲＤＬＬ３２に設定する遅延値に応じて、比較器４１の比較結果は変動する。区間Ｄ３は、ループバックテストを複数回行っても、全ての回において、結果値ｖａｌ１と期待値ｖａｌ２とが一致する結果（以下、ＡＬＬ−ＰＡＳＳと表記する）が得られる遅延値の区間である。つまり、区間Ｄ３内の遅延値をＲＤＬＬ３２に設定してループバック動作を複数回行うと、全てＰＡＳＳとなる。
【００５６】
ここで、ループバックテストの結果について説明する。以下では、ＤＤＲ３−ＳＤＲＡＭにおいて、ライトデータＷＤがバースト長８のデータ信号として供給される場合を例として説明する。バースト長８のデータ信号は、連続する８ビットのデータにより構成される。比較器４１は、８ビットのそれぞれのビットについて、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。よって、比較器４１は、８ビットのデータに対して、８回の比較動作を行う。
【００５７】
また、バースト長８のデータを１セットとすると、ライトデータ供給時には、複数セットのデータが供給される。例えば、４セットのデータが供給される場合には、比較器４１は、（バースト長）×（セット数）＝８×４＝３２ビットのそれぞれのビットについて、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。よって、比較器４１は、供給された３２ビットのデータに対して、３２回の比較動作を行う。
【００５８】
すなわち、比較器４１は、供給されるライトデータＷＤのそれぞれのビットに対して、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。上述の例のように、ライトデータＷＤのビット数が３２ビットである場合、ＡＬＬ−ＰＡＳＳとは、３２回の比較動作の全てにおいて、結果値ｖａｌ１と期待値ｖａｌ２とが一致する場合を意味する。
【００５９】
同様に、３２回の比較動作の全てにおいて、結果値ｖａｌ１と期待値ｖａｌ２とが不一致となる場合を、以下ではＡＬＬ−ＦＡＩＬとする。また、ＡＬＬ−ＰＡＳＳの近傍領域において３２回の比較動作を行った結果、少なくとも１回の比較結果がＦＡＩＬとなり、その他の比較結果がＰＡＳＳとなる場合を、ＯＮＥ−ＦＡＩＬとする。さらに、ＡＬＬ−ＦＡＩＬの近傍領域において３２回の比較動作を行った結果、少なくとも１回の比較結果がＰＡＳＳとなり、他の比較結果がＦＡＩＬとなる場合、ＯＮＥ−ＰＡＳＳとする。
【００６０】
なお、上述の例ではライトデータＷＤがバースト長８のデータ信号として供給される場合について説明した。しかしながら、ライトデータＷＤの供給形態はこの例に限られるものではない。すなわち、ライトデータＷＤは、任意のバースト長で供給することが可能である。また、供給されるデータのセット数も、任意の数とすることが可能である。さらに、上述の例は、ライトデータＷＤだけでなく、ライトデータＷＤと同じ経路を介して供給されるテストデータ及びリードデータＲＤに適用することが可能である。
【００６１】
区間Ｄ１及びＤ５は、ループバックテストを複数回行った場合に、全ての回において、結果値ｖａｌ１と期待値ｖａｌ２とが一致しない結果の比較結果が得られる遅延値の区間である。つまり、区間Ｄ１又はＤ５内の遅延値をＲＤＬＬ３２に設定してループバック動作を複数回行うと、全てＦＡＩＬとなる。
【００６２】
区間Ｄ２及びＤ４は、ループバックテストを複数回行った場合に、ＰＡＳＳ及びＦＡＩＬの双方の比較結果が得られる遅延値の区間である。つまり、区間Ｄ２又はＤ４内の遅延値をＲＤＬＬ３２に設定してループバック動作を複数回行うと、ＰＡＳＳとなることもあれば、ＦＡＩＬとなることもある。区間Ｄ２及びＤ４は、比較結果に偶然性が作用する区間である。この偶然性は、主としてジッタによる信号の揺らぎが原因である。
【００６３】
ループバック左Ｆａｉｌ確定値ｔＡは、区間Ｄ１における最大の遅延値である。すなわち、ループバック動作時のＲＤＬＬ３２に、ループバック左Ｆａｉｌ確定値ｔＡを遅延値として設定すると、比較器４１の比較結果はＡＬＬ−ＦＡＩＬとなる。従って、ＲＤＬＬ３２にループバック左Ｆａｉｌ確定値ｔＡよりも１ステップ遅い遅延値を設定すると、もはやＡＬＬ−ＦＡＩＬの比較結果を得ることはできない。なお、ここでいう１ステップとは、ＲＤＬＬ３２に設定する遅延値の最小の調整ピッチを意味する。
【００６４】
ループバック左開口部ｔＢは、区間Ｄ３における最小の遅延値である。すなわち、ループバック動作時のＲＤＬＬ３２に、ループバック左開口部ｔＢを遅延値として設定すると、比較器４１の比較結果はＡＬＬ−ＰＡＳＳとなる。従って、ＲＤＬＬ３２にループバック左開口部ｔＢよりも１ステップ早い遅延値を設定すると、もはやＡＬＬ−ＰＡＳＳの比較結果を得ることはできない。
【００６５】
ループバック右開口部ｔＣは、区間Ｄ３における最大の遅延値である。すなわち、ループバック動作時のＲＤＬＬ３２に、ループバック右開口部ｔＣを遅延値として設定すると、比較器４１の比較結果はＡＬＬ−ＰＡＳＳとなる。従って、ＲＤＬＬ３２にループバック右開口部ｔＣよりも１ステップ遅い遅延値を設定すると、もはやＡＬＬ−ＰＡＳＳの比較結果を得ることはできない。
【００６６】
ループバック右Ｆａｉｌ確定値ｔＤは、区間Ｄ５における最小の遅延値である。すなわち、ループバック動作時のＲＤＬＬ３２に、ループバック右Ｆａｉｌ確定値ｔＤを遅延値として設定すると、比較器４１の比較結果はＡＬＬ−ＦＡＩＬとなる。従って、ＲＤＬＬ３２にループバック右Ｆａｉｌ確定値ｔＤよりも１ステップ早い遅延値を設定すると、もはやＡＬＬ−ＦＡＩＬの比較結果を得ることはできない。
【００６７】
続いて、左開口部推定値ｔＥ及び右開口部推定値ｔＦについて説明する。左開口部推定値ｔＥ及び右開口部推定値ｔＦは、通常のキャリブレーションを行うことにより設定される値である。すなわち、テストデータを予め書き込み、書き込んだテストデータを読み出す動作を行う。そして、書き込んだテストデータと、読み出したデータと、を比較することで、左開口部推定値ｔＥ及び右開口部推定値ｔＦが決定される。
【００６８】
具体的には、書き込んだテストデータを読み出す際、リードデータラッチ１１は、ＲＤＬＬ３２から供給される遅延リードストローブ信号ＲＤＱＳ＿ｄに同期して、読み出したテストデータをラッチする。このとき、ＲＤＬＬ３２に設定する遅延値に応じて、比較器４１の比較結果は変動する。すなわち、ＲＤＬＬ３２に設定される遅延値が適正範囲内であれば、キャリブレーションを何度行っても、比較結果はＡＬＬ−ＰＡＳＳとなる。一方、ＲＤＬＬ３２に設定される遅延値が適正範囲外であれば、比較結果がＦＡＩＬとなる場合が生じる。
【００６９】
左開口部推定値ｔＥは、キャリブレーション動作においてＡＬＬ−ＰＡＳＳの結果が得られる最小の遅延値である。すなわち、キャリブレーション動作時のＲＤＬＬ３２に、左開口部推定値ｔＥを遅延値として設定すると、比較器４１の比較結果はＡＬＬ−ＰＡＳＳとなる。
【００７０】
右開口部推定値ｔＦは、ＡＬＬ−ＰＡＳＳの結果が得られる最大の遅延値である。すなわち、キャリブレーション動作時のＲＤＬＬ３２に、右開口部推定値ｔＦを遅延値として設定すると、比較器４１の比較結果はＡＬＬ−ＰＡＳＳとなる。
【００７１】
すなわち、左開口部推定値ｔＥ及び右開口部推定値ｔＦは、メモリデバイス１３０からデータを適切に読み出すことができる遅延値の下限及び上限を示している。このことは、リードデータＲＤの読み出し時（リード時）についても同様に成り立つ。従って、換言すれば、左開口部推定値ｔＥ及び右開口部推定値ｔＦは、メモリデバイス１３０からリードデータＲＤを適切に読み出すことができる遅延値の下限及び上限を示している。
【００７２】
続いて、リード時遅延値ｔＧについて説明する。リード時遅延値ｔＧは、左開口部推定値ｔＥ及び右開口部推定値ｔＦに基づいて算出される値である。本実施の形態では、リード時遅延値ｔＧは、左開口部推定値ｔＥ及び右開口部推定値ｔＦの中間値が設定される。従って、リード時のＲＤＬＬ３２にリード時遅延値ｔＧを設定することで、適切にリードデータＲＤを読み出すことが可能となる。
【００７３】
ところが、半導体装置１２０の信号伝達特性は、半導体装置１２０やメモリデバイス１３０などの温度変化などの状態変化により影響を受ける。この影響により、半導体装置１２０の信号伝達特性が変動するため、状態変化が起こる環境下で適切なリードデータＲＤの読み出しを継続するには、リード時遅延値ｔＧを適宜調整することが必要になる。
【００７４】
メモリインターフェース回路１００では、リード時遅延値ｔＧを調整するために、ライト時のループバックテストにより、ｔＡ〜ｔＤを決定する。そして、ｔＡ〜ｔＤの値に基づいて、左開口部推定値ｔＥ及び右開口部推定値ｔＦを推定する。つまり、ライト時のループバックテストに基づいて、リード時遅延値ｔＧが逐次更新されてゆく。
【００７５】
次に、レジスタファイルの値ｔＡ〜ｔＧの決定方法について、詳細に説明する。図３は、実施の形態１にかかるメモリインターフェース回路１００の動作を示すフローチャートである。図３に示すように、メモリインターフェース回路１００の動作は、初期化フェーズ２００と通常動作フェーズ（第１〜第４のフェーズ２０１〜２０４）に大別される。初期化フェーズ２００においては、レジスタファイルの値ｔＡ〜ｔＧの初期値設定が行われる。通常動作フェーズ（第１〜第４のフェーズ２０１〜２０４）では、通常のデータの書き込み及び読み出しが行われる。加えて、通常動作フェーズ（第１〜第４のフェーズ２０１〜２０４）では、データの書き込み時（ライト時）に、レジスタファイルの値ｔＡ〜ｔＧの調整が行われる。なお、第１〜４のフェーズ２０１〜２０４は、ループ処理として実行される。
【００７６】
まず、初期化フェーズ２００について説明する。図４は、初期化フェーズ２００における動作を示すフローチャートである。図４に示すように、初期化フェーズ２００では、第１の初期化処理３００、第２初期化処理４００及び第３の初期化処理５００が行われる。
【００７７】
第１の初期化処理３００について説明する。図５は、第１の初期化処理３００における動作を示すフローチャートである。第１の初期化処理３００では、ループバック左Ｆａｉｌ確定値ｔＡ及びループバック左開口部ｔＢの初期値が設定される。初期化フェーズ２００が開始される間には、半導体装置１２０はリセット状態となっている。この状態で、レジスタ制御部４２はリセット状態の解除を待つ（フェーズ３０１）。
【００７８】
リセット状態が解除されると、レジスタ制御部４２は、レジスタファイル４５に、ｔＡ〜ｔＧの仮初期値を設定する（フェーズ３０２）。ここで、ｔＡ〜ｔＧの仮初期値は、予め決めておいた任意の値とすることができる。また、ｔＡ〜ｔＧの仮初期値は、レジスタ制御部４２が、入力される遅延制御信号ＤＣＳに応じて決定してもよい。その後、第１のバッファ制御信号ＳＢ１により、ライトデータ出力バッファ２１、ストローブ信号出力バッファ２３を有効化する。第２のバッファ制御信号ＳＢ２により、リードデータ入力バッファ２２、ストローブ信号入力バッファ２４を有効化する。ライトデータ出力バッファ２１、リードデータ入力バッファ２２、ストローブ信号出力バッファ２３及びストローブ信号入力バッファ２４は、第１の初期化処理３００及び第２初期化処理４００を通じて、有効化されたまま保持される。
【００７９】
続いて、ループバック左開口部ｔＢの初期値を設定する処理が行われる。レジスタ制御部４２は、遅延制御信号ＤＣＳに応じて遅延選択部４４を操作し、レジスタファイル４５から読み出したループバック左開口部ｔＢの仮初期値を、ＲＤＬＬ３２の遅延値として設定する。そして、外部回路１１０から、ライトデータ信号線５１を介して、任意のテストデータが供給される。テストデータは、ライトデータＷＤ又はリードデータＲＤと同様に、所定のバースト長を有するバーストデータとして供給される。さらに、テストデータは、順次供給されるＮ（Ｎは、２以上の整数）組のバーストデータとして供給される。テストデータは、ライトデータ出力バッファ２１、リードデータ入力バッファ２２を通じて、リードデータラッチ１１にループバックされる。同時に、テストデータは、期待値取得用ラッチ１２にも入力される。すなわち、ＲＤＬＬ３２にループバック左開口部ｔＢを設定した状態において、ループバックテストを実行する。
【００８０】
リードデータラッチ１１は、ＲＤＬＬ３２からの遅延リードストローブ信号ＲＤＱＳ＿ｄに同期して、ループバックされたテストデータをラッチする。そして、リードデータラッチ１１は、ラッチしたデータを、結果値ｖａｌ１として、比較器４１へ出力する。
【００８１】
期待値取得用ラッチ１２は、クロック信号ＣＬＫに同期して、テストデータをラッチする。そして、期待値取得用ラッチ１２は、ラッチしたデータを、期待値ｖａｌ２として、比較器４１へ出力する。
【００８２】
比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、Ｎ組のバーストデータに対して、Ｎ回の比較を繰り返し、Ｎ通りの比較結果を出力する。なお、繰り返しの回数Ｎは、ジッタ成分による比較結果の不安定性を反映できるならば、任意の回数でよい（フェーズ３０３）。
【００８３】
レジスタ制御部４２は、比較器４１の比較結果を評価する。Ｎ回の比較動作の結果がＡＬＬ−ＰＡＳＳである場合には、レジスタ制御部４２は、レジスタファイル４５のループバック左開口部ｔＢの値を、仮初期値に対して１ステップ早い値に更新する（フェーズ３０４）。そして、ループバック左開口部ｔＢの値を更新した後は、再度フェーズ３０３へ戻る。フェーズ３０３に戻ると、レジスタ制御部４２は、更新されたループバック左開口部ｔＢの値を、ＲＤＬＬ３２の遅延値として設定する。つまり、Ｎ回の比較結果のうち少なくとも１つがＦＡＩＬとなる遅延値が見つかるまで、フェーズ３０３及びフェーズ３０４が繰り返し実行される。これにより、ループバック左開口部ｔＢの初期値として、区間Ｄ３における最小の遅延値を設定することができる。
【００８４】
なお、ループバック左開口部ｔＢの仮初期値に対して、ＯＮＥ−ＦＡＩＬの比較結果が得られる場合が有り得る。この場合、ループバック左開口部ｔＢの仮初期値は、早すぎる値に設定されていると推定できる。よって、ループバック左開口部ｔＢの仮初期値に、より遅い値を設定して、第１の初期化処理３００をやり直す。これにより、ループバック左開口部ｔＢの初期値を適切に設定することができる。
【００８５】
また、ループバック左開口部ｔＢの値を、ＲＤＬＬ３２に設定可能な最小の値まで早めてもＡＬＬ−ＰＡＳＳの比較結果しか得られない場合について検討する。この場合、ＲＤＬＬ３２に設定可能な最小の値を、ループバック左開口部ｔＢの値として設定することが可能である。さらに、繰り返し回数やテストデータを変更して、第１の初期化処理３００をやり直すこともできる。
【００８６】
続いて、ループバック左Ｆａｉｌ確定値ｔＡの初期値を設定する処理が行われる。レジスタ制御部４２は、遅延制御信号ＤＣＳに応じて遅延選択部４４を操作し、レジスタファイル４５から読み出したループバック左Ｆａｉｌ確定値ｔＡの仮初期値を、ＲＤＬＬ３２の遅延値として設定する。この状態において、比較器４１は、フェーズ３０３と同様に、順次供給されるＮ組のバーストデータ（テストデータ）について比較動作を行う（フェーズ３０５）。すなわち、ＲＤＬＬ３２にループバック左Ｆａｉｌ確定値ｔＡを設定した状態において、ループバックテストを実行する。
【００８７】
レジスタ制御部４２は、比較器４１の比較結果を評価する。Ｎ回の比較動作の結果のうち少なくとも１つがＰＡＳＳとなる場合には、レジスタ制御部４２は、レジスタファイル４５のループバック左Ｆａｉｌ確定値ｔＡの値を、仮初期値に対して１ステップ早い値に更新する（フェーズ３０６）。そして、ループバック左Ｆａｉｌ確定値ｔＡの値を更新した後は、再度フェーズ３０５へ戻る。フェーズ３０５に戻ると、レジスタ制御部４２は、更新されたループバック左Ｆａｉｌ確定値ｔＡの値を、ＲＤＬＬ３２の遅延値として設定する。つまり、Ｎ回の比較結果がＡＬＬ−ＦＡＩＬとなる遅延値が見つかるまで、フェーズ３０５及びフェーズ３０６が繰り返し実行される。これにより、ループバック左Ｆａｉｌ確定値ｔＡとして、区間Ｄ１における最大の遅延値を設定することができる。
【００８８】
ここで、第１の初期化処理３００においてＲＤＬＬ３２に設定する遅延値について考察する。ここでは、リードデータラッチ１１は、遅延ライトストローブ信号ＷＤＱＳ＿ｄが遷移するタイミング（立ち上がり／立ち下がり）で、ループバックされたテストデータをラッチするもとのとする。図６は、第１の初期化処理３００における信号のタイミング例を示すタイミングチャートである。ループバック左Ｆａｉｌ確定値ｔＡ及びループバック左開口部ｔＢの初期値を決定するには、図６に示すように、本来はクロック信号ＣＬＫの立ち上がりタイミングＴ１付近を探索する必要がある。しかし、遅延ライトストローブ信号ＷＤＱＳ＿ｄは、ＲＤＬＬ３２でライトストローブ信号ＷＤＱＳを遅延させることにより生成されたものである。また、ライトストローブ信号ＷＤＱＳは、ＷＤＬＬ３１により、クロック信号ＣＬＫに対して９０°遅延している。ＲＤＬＬ３２でライトストローブ信号ＷＤＱＳの位相を早めることは物理的に不可能であるので、このままではタイミングＴ１付近での探索を行うことはできない。
【００８９】
そのため、ＲＤＬＬ３２では、ライトストローブ信号ＷＤＱＳの位相を大きく遅延させ、クロック信号ＣＬＫに対してほぼ１周期遅れの遅延ライトストローブ信号ＷＤＱＳ＿ｄを生成する。これにより、遅延ライトストローブ信号ＷＤＱＳ＿ｄの立ち上がりをタイミングＴ１付近に位置させることができる。その結果、リードデータラッチ１１は、タイミングＴ１付近で、ループバックされたテストデータＤａｔａをラッチすることができる。つまり、ループバック左Ｆａｉｌ確定値ｔＡ及びループバック左開口部ｔＢは、２７０°前後の比較的大きな値を有することとなる。
【００９０】
次いで、第２の初期化処理４００について説明する。図７は、第２の初期化処理４００における動作を示すフローチャートである。まず、ループバック右開口部ｔＣの初期値を設定する処理が行われる。レジスタ制御部４２は、遅延制御信号ＤＣＳに応じて遅延選択部４４を操作し、レジスタファイル４５から読み出したループバック右開口部ｔＣの仮初期値を、ＲＤＬＬ３２の遅延値として設定する。この状態おいて、比較器４１は、第１の初期化処理３００のフェーズ３０３と同様に、順次供給されるＮ組のバーストデータ（テストデータ）について比較動作を行う（フェーズ４０１）。すなわち、ＲＤＬＬ３２にループバック右開口部ｔＣを設定した状態において、ループバックテストを実行する。
【００９１】
レジスタ制御部４２は、比較器４１の比較結果を評価する。Ｎ回の比較動作の結果がＡＬＬ−ＰＡＳＳである場合には、レジスタ制御部４２は、レジスタファイル４５のループバック右開口部ｔＣの値を、仮初期値に対して１ステップ遅い値に更新する（フェーズ４０２）。そして、ループバック右開口部ｔＣの値を更新した後は、再度フェーズ４０１へ戻る。フェーズ４０１に戻ると、レジスタ制御部４２は、更新されたループバック右開口部ｔＣの値を、ＲＤＬＬ３２の遅延値として設定する。つまり、Ｎ回の比較動作の結果がＯＮＥ−ＦＡＩＬとなる遅延値が見つかるまで、フェーズ４０１及びフェーズ４０２が繰り返し実行される。これにより、ループバック右開口部ｔＣとして、区間Ｄ３における最大の遅延値を設定することができる。
【００９２】
なお、ループバック右開口部ｔＣの仮初期値に対して、ＯＮＥ−ＦＡＩＬの比較結果が得られる場合が有り得る。この場合、ループバック右開口部ｔＣの仮初期値は、遅すぎる値に設定されていると推定できる。よって、ループバック右開口部ｔＣの仮初期値に、より早い値を設定して、第２の初期化処理４００をやり直す。これにより、ループバック右開口部ｔＣの初期値を適切に決定することができる。
【００９３】
続いて、まず、ループバック右Ｆａｉｌ確定値ｔＤの初期値を設定する処理が行われる。レジスタ制御部４２は、遅延制御信号ＤＣＳに応じて遅延選択部４４を操作し、レジスタファイル４５から読み出したループバック右Ｆａｉｌ確定値ｔＤの仮初期値を、ＲＤＬＬ３２の遅延値として設定する。この状態おいて、比較器４１は、フェーズ４０１と同様に、順次供給されるＮ組のバーストデータ（テストデータ）について比較動作を行う（フェーズ４０３）。すなわち、ＲＤＬＬ３２にループバック右Ｆａｉｌ確定値ｔＤを設定した状態において、ループバックテストを実行する。
【００９４】
レジスタ制御部４２は、比較器４１の比較結果を評価する。Ｎ回の比較動作の結果がＯＮＥ−ＰＡＳＳである場合には、レジスタ制御部４２は、レジスタファイル４５のループバック右Ｆａｉｌ確定値ｔＤの値を、仮初期値に対して１ステップ遅い値に更新する（フェーズ４０４）。そして、ループバック右Ｆａｉｌ確定値ｔＤの値を更新した後は、再度フェーズ４０３へ戻る。フェーズ４０３に戻ると、レジスタ制御部４２は、更新されたループバック右Ｆａｉｌ確定値ｔＤの値を、ＲＤＬＬ３２の遅延値として設定する。つまり、Ｎ回の比較動作の結果がＡＬＬ−ＦＡＩＬとなる遅延値が見つかるまで、フェーズ４０３及びフェーズ４０４が繰り返し実行される。これにより、ループバック右Ｆａｉｌ確定値ｔＤとして、区間Ｄ５における最小の遅延値を設定することができる。
【００９５】
ここで、第２の初期化処理４００においてＲＤＬＬ３２に設定する遅延値について考察する。ここでは、リードデータラッチ１１は、遅延ライトストローブ信号ＷＤＱＳ＿ｄが遷移するタイミング（立ち上がり／立ち下がり）で、ループバックされたテストデータをラッチするもとのとする。図８は、第２の初期化処理４００における信号のタイミング例を示すタイミングチャートである。ループバック右開口部ｔＣ及びループバック右Ｆａｉｌ確定値ｔＤの初期値を決定するには、図８に示すように、本来はクロック信号ＣＬＫの立ち下がりタイミングＴ２付近を探索する必要がある。ここで、遅延ライトストローブ信号ＷＤＱＳ＿ｄは、ＲＤＬＬ３２でライトストローブ信号ＷＤＱＳを遅延させることにより生成されたものである。また、ライトストローブ信号ＷＤＱＳは、ＷＤＬＬ３１により、クロック信号ＣＬＫに対して９０°遅延している。よって、ＲＤＬＬ３２において、ライトストローブ信号ＷＤＱＳの位相をさらに遅延させることにより、遅延ライトストローブ信号ＷＤＱＳ＿ｄの立ち上がりを、タイミングＴ２付近に位置させることができる。その結果、リードデータラッチ１１は、タイミングＴ２付近で、ループバックされたテストデータＤａｔａをラッチすることができる。
【００９６】
つまり、ループバック右開口部ｔＣ及びループバック右Ｆａｉｌ確定値ｔＤは、９０°前後の値を有することとなる。従って、本構成では、ループバック右開口部ｔＣ及びループバック右Ｆａｉｌ確定値ｔＤの値は、ループバック左Ｆａｉｌ確定値ｔＡ及びループバック左開口部ｔＢと比較して、小さな値が設定されることとなる。
【００９７】
次いで、第３の初期化処理５００について説明する。図９は、第３の初期化処理５００における動作を示すフローチャートである。第３の初期化処理５００では、外部回路１１０から供給されるテストデータを、メモリデバイス１３０に書き込む。この際、書き込む対象となるデータを期待値として予めラッチしておく。その後、書き込んだデータを読み出す。この際、読み出したデータを、期待値と比較するデータとしてラッチする。そして、比較器４１において、２つのラッチデータを比較することを特徴とする。
【００９８】
まず、左開口部推定値ｔＥの初期値を設定する処理が行われる。まず、半導体装置１２０は、テストデータのライト動作を行う。よって、第１のバッファ制御信号ＳＢ１により、ライトデータ出力バッファ２１及びストローブ信号出力バッファ２３を有効化する。第２のバッファ制御信号ＳＢ２により、リードデータ入力バッファ２２及びストローブ信号入力バッファ２４を無効化する。
【００９９】
そして、外部回路１１０は、ライトデータ出力バッファ２１へテストデータを出力する。メモリデバイス１３０は、ストローブ信号線７２を介して供給されるライトストローブ信号ＷＤＱＳに応じて、テストデータが書き込まれる。同時に、テストデータは、期待値取得用ラッチ１２にも供給される。期待値取得用ラッチ１２は、クロック信号ＣＬＫに同期して、テストデータを期待値ｖａｌ２としてラッチする。
【０１００】
次いで、半導体装置１２０は、テストデータのリード動作を行う。よって、第２のバッファ制御信号ＳＢ２により、リードデータ入力バッファ２２及びストローブ信号入力バッファ２４を有効化する。第１のバッファ制御信号ＳＢ１により、ライトデータ出力バッファ２１及びストローブ信号出力バッファ２３を無効化する。
【０１０１】
レジスタ制御部４２は、遅延制御信号ＤＣＳに応じて遅延選択部４４を操作し、レジスタファイル４５から読み出した左開口部推定値ｔＥの仮初期値を、ＲＤＬＬ３２の遅延値として設定する。そして、メモリインターフェース回路は、データ信号線７１を介して、メモリデバイス１３０に書き込まれたテストデータが供給される。テストデータはリードデータＲＤと同様に、所定のバースト長を有するバーストデータとして供給される。さらに、テストデータは、順次供給されるＮ組のバーストデータとして供給される。
【０１０２】
読み出されたテストデータは、リードデータ入力バッファ２２を通じて、リードデータラッチ１１に供給される。リードデータラッチ１１は、ＲＤＬＬ３２から供給される遅延リードストローブ信号ＲＤＱＳ＿ｄに同期して、読み出されたテストデータを結果値ｖａｌ１としてラッチする。
【０１０３】
比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、Ｎ組のテストデータに対してＮ回の比較を繰り返し、Ｎ通りの比較結果を出力する（フェーズ５０１）。
【０１０４】
Ｎ回の比較動作の結果がＡＬＬ−ＰＡＳＳである場合には、レジスタ制御部４２は、レジスタファイル４５の左開口部推定値ｔＥの値を、仮初期値に対して１ステップ早い値に更新する（フェーズ５０２）。そして、左開口部推定値ｔＥの値を更新した後は、再度フェーズ５０１へ戻る。フェーズ５０１に戻ると、レジスタ制御部４２は、更新された左開口部推定値ｔＥの値を、ＲＤＬＬ３２の遅延値として設定する。つまり、Ｎ回の比較動作の結果がＯＮＥ−ＦＡＩＬとなる遅延値が見つかるまで、フェーズ５０１及びフェーズ５０２が繰り返し実行される。これにより、左開口部推定値ｔＥとして、区間Ｄ３における最小の遅延値を設定することができる。
【０１０５】
なお、左開口部推定値ｔＥの仮初期値に対して、ＯＮＥ−ＦＡＩＬの比較結果が得られる場合が有り得る。この場合、ループバック右開口部ｔＣの場合と同様の対処をとることができる。すなわち、左開口部推定値ｔＥの仮初期値として、より速い値を設定する。そして、第３の初期化処理５００をやり直すことにより、左開口部推定値ｔＥの初期値を適切に決定することができる。
【０１０６】
続いて、右開口部推定値ｔＦの初期値を設定する処理が行われる。レジスタ制御部４２は、遅延選択部４４を制御して、レジスタファイル４５の右開口部推定値ｔＦの仮初期値を、ＲＤＬＬ３２に設定する。この状態において、比較器４１は、フェーズ５０１と同様に、順次供給されるＮ組のテストデータについて比較動作を行う（フェーズ５０３）。
【０１０７】
Ｎ回の比較動作がＡＬＬ−ＰＡＳＳである場合には、レジスタ制御部４２は、レジスタファイル４５の右開口部推定値ｔＦの値を、仮初期値に対して１ステップ遅い値に更新する（フェーズ５０４）。そして、右開口部推定値ｔＦの値を更新した後は、再度フェーズ５０３へ戻る。レジスタ制御部４２は、更新された右開口部推定値ｔＦの値を、ＲＤＬＬ３２の遅延値として設定する。つまり、Ｎ回の比較動作の結果がＯＮＥ−ＦＡＩＬとなる遅延値が見つかるまで、フェーズ５０３及びフェーズ５０４が繰り返し実行される。これにより、右開口部推定値ｔＦとして、区間Ｄ３における最大の遅延値を設定することができる。
【０１０８】
その後、レジスタ制御部４２は、通常のリード時に用いるリード時遅延値ｔＧの初期値を算出する（フェーズ５０５）。この際算出されるリード時遅延値ｔＧは、以下の式（１）で表される。
ｔＧ＝（ｔＥ＋ｔＦ）／２  ・・・（１）
以上をもって、初期化フェーズ２００が終了する。これにより、レジスタファイル４５の値ｔＡ〜ｔＧの初期値が設定される。
【０１０９】
ここで、第３の初期化処理５００においてＲＤＬＬ３２に設定する遅延値について考察する。左開口部推定値ｔＥは、第１の初期化処理３００における場合と同様に、比較的大きな値が設定される。右開口部推定値ｔＦは、第２の初期化処理４００における場合と同様に、左開口部推定値ｔＥと比較して、小さな値が設定される。
【０１１０】
次に、通常動作フェーズ（第１〜４のフェーズ２０１〜２０４）について説明する。第１〜４のフェーズ２０１〜２０４についてはループ処理が行われるが、以下では説明の明確化のため、初期化フェーズ２００完了直後の場合について説明する。
【０１１１】
第１のフェーズ２０１について説明する。図１０は、第１のフェーズ２０１の動作を示すフローチャートである。まず、外部回路１１０において、半導体装置１２０に対するライト動作の要求の有無が判断される（フェーズ６０１）。判断結果は、遅延制御信号ＤＣＳにより、外部回路１１０からレジスタ制御部４２へ伝達される。
【０１１２】
ライト動作の要求が無いと判断した場合、すなわちリード時には、レジスタ制御部４２は、遅延選択部４４を制御して、ＲＤＬＬ３２にリード時遅延値ｔＧの初期値を設定する。よって、リードデータＲＤには、ＲＤＬＬ３２により、リード時遅延値ｔＧの初期値に対応する遅延が付加される（フェーズ６０２）。すなわち、リード時遅延値ｔＧを用いた、通常のリード動作が実行される。
【０１１３】
一方、ライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部４２は、遅延選択部４４を制御して、レジスタファイル４５のループバック左Ｆａｉｌ確定値ｔＡの初期値をＲＤＬＬ３２に設定する。そして、第１のバッファ制御信号ＳＢ１により、ライトデータ出力バッファ２１、ストローブ信号出力バッファ２３を有効化する。第２のバッファ制御信号ＳＢ２により、リードデータ入力バッファ２２、ストローブ信号入力バッファ２４を有効化する。なお、第１〜４のフェーズ２０１〜２０４のライト時には、ライトデータ出力バッファ２１、リードデータ入力バッファ２２、ストローブ信号出力バッファ２３及びストローブ信号入力バッファ２４は有効化された状態で保持される。
【０１１４】
その後、ライトデータＷＤが、外部回路１１０からメモリインターフェース回路１００に供給される。ライトデータＷＤは、メモリデバイス１３０に書き込まれるとともに、期待値取得用ラッチ１２により期待値ｖａｌ２としてラッチされる。また、ライトデータＷＤは、リードデータラッチ１１にループバックされる。ループバックされたリードデータＲＤは、結果値ｖａｌ１としてラッチされる。比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、複数のライトデータに対して比較を繰り返す。（フェーズ６０３）。
【０１１５】
続いて、レジスタ制御部４２は、比較結果を参照する。このとき、ＲＤＬＬ３２にはループバック左Ｆａｉｌ確定値ｔＡの初期値が設定されているので、比較結果はＡＬＬ−ＦＡＩＬとなると仮定することができる。しかし、半導体装置１２０の特性やジッタの変動により、比較結果がＡＬＬ−ＦＡＩＬではなく、ＯＮＥ−ＰＡＳＳとなる場合が生じる。比較結果がＯＮＥ−ＰＡＳＳとなった場合には、上述の仮定は否定される。なお、ライトデータＷＤに変化が無い場合についても、ＯＮＥ−ＰＡＳＳの結果が得られる場合がある。この場合にも、上述の仮定が否定される結果が得られる。
【０１１６】
上述の仮定が否定される場合について検討する。この場合、半導体装置１２０の特性変動により、ループバック左Ｆａｉｌ確定値ｔＡが、初期値よりも早い値にシフトしてしまったことが推測できる。その結果、ループバック左開口部ｔＢも、同様に初期値より早い値にシフトしてしまったと推測できる。そこで、ＯＮＥ−ＰＡＳＳの比較結果が得られる場合には、レジスタ制御部４２は、ループバック左開口部ｔＢの値を、１ステップ早い値に更新する（フェーズ６０４）。その後、ループバック左開口部ｔＢが妥当であるかを確認するため、第２のフェーズ２０２のステップ２０２ｂへ進む。
【０１１７】
一方、上記仮定の通り、ＡＬＬ−ＦＡＩＬの比較結果が得られる場合には、ループバック左Ｆａｉｌ確定値ｔＡ及びループバック左開口部ｔＢの値をそのまま保持する。その後、第２のフェーズ２０２のステップ２０２ａへ進む。
【０１１８】
次に、第２のフェーズ２０２について説明する。図１１は、第２のフェーズ２０２の動作を示すフローチャートである。まず、第１のフェーズ６０１による仮定が正しい場合に対応する、ステップ２０２ａから開始されるフェーズ７０１〜７０４について説明する。フェーズ７０１及び７０２は、フェーズ６０１及び６０２とそれぞれ同じであるので、説明を省略する。
【０１１９】
半導体装置１２０に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部４２は、遅延選択部４４を制御して、第１のフェーズ２０１においてそのまま保持されたループバック左開口部ｔＢの初期値を、ＲＤＬＬ３２に設定する。そして、第１のバッファ制御信号ＳＢ１により、ライトデータ出力バッファ２１、ストローブ信号出力バッファ２３を有効化する。第２のバッファ制御信号ＳＢ２により、リードデータ入力バッファ２２、ストローブ信号入力バッファ２４を有効化する。
【０１２０】
それと同時に、ライトデータＷＤが、外部回路１１０からメモリインターフェース回路１００に供給される。ライトデータＷＤは、メモリデバイス１３０に書き込まれるとともに、期待値取得用ラッチ１２により期待値ｖａｌ２としてラッチされる。また、ライトデータＷＤは、リードデータラッチ１１にループバックされる。ループバックされたリードデータＲＤは、結果値ｖａｌ１としてラッチされる。比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、複数のライトデータに対して比較を繰り返す。（フェーズ７０３）。
【０１２１】
続いて、レジスタ制御部４２は、比較結果を参照する。このとき、ＲＤＬＬ３２にはループバック左開口部ｔＢの初期値が設定されている。よって、比較器４１における比較結果は、ＡＬＬ−ＰＡＳＳとなると仮定することができる。しかし、半導体装置１２０の特性やジッタの変動により、比較結果がＡＬＬ−ＰＡＳＳではなく、ＯＮＥ−ＦＡＩＬとなる場合が生じる。比較結果がＯＮＥ−ＦＡＩＬとなった場合には、上述の仮定は否定される。
【０１２２】
上述の仮定が否定される場合について検討する。この場合、半導体装置１２０の特性変動により、ループバック左開口部ｔＢが、初期値よりも遅い値にシフトしてしまったことが推測できる。その結果、左開口部推定値ｔＥも、同様に初期値より遅い値にシフトしてしまったと推測できる。そこで、ＯＮＥ−ＦＡＩＬの比較結果が得られる場合には、ループバック左開口部ｔＢの値を、１ステップ遅い値に更新する。これにより、ループバック左開口部ｔＢが決定される。また、ループバック左開口部ｔＢに連動して、左開口部推定値ｔＥにも同様の変動が生じているものと推定することができる。従って、左開口部推定値ｔＥの値も、１ステップ遅い値に更新する（フェーズ７０４）。
【０１２３】
この際、第１のフェーズ２０１のフェーズ６０３におけるループバック左Ｆａｉｌ確定値ｔＡについてのループバックテストではＡＬＬ−ＦＡＩＬの結果が得られているので、ループバック左Ｆａｉｌ確定値ｔＡの値は一応正しいものとして、そのまま保持する。なお、ループバック左Ｆａｉｌ確定値ｔＡの値が早い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ６０３→ステップ２０２ａ→フェーズ７０１→フェーズ７０３→フェーズ７０４の手順が繰り換えされ、その結果、ループバック左開口部ｔＢは、フェーズ７０３においてＡＬＬ−ＰＡＳＳとなるループバック左開口部ｔＢに収束する。また、ループバック左Ｆａｉｌ確定値ｔＡの値が遅い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ６０３→フェーズ６０４→ステップ２０２ｂ→フェーズ７０５→フェーズ７０７→フェーズ７０９の手順が繰り換えされ、その結果、ループバック左Ｆａｉｌ確定値ｔＡは、フェーズ６０３においてＡＬＬ−ＦＡＩＬとなる値に収束する。但し、フェーズ７０４において、ループバック左開口部ｔＢに連動してループバック左Ｆａｉｌ確定値ｔＡの値を１ステップ遅らせても、通常動作フェーズを繰り返して得られる効果は同等である。
【０１２４】
一方、上記仮定の通り、ＡＬＬ−ＰＡＳＳの比較結果が得られる場合には、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥの値をそのまま保持する。その後、第３のフェーズ２０３へ進む。
【０１２５】
次いで、第１のフェーズ２０１による仮定が誤りであった場合に対応する、ステップ２０２ｂから開始されるフェーズ７０５〜７０９について説明する。フェーズ７０５及び７０６は、フェーズ６０１及び６０２とそれぞれ同じであるので、説明を省略する。
【０１２６】
半導体装置１２０に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部４２は、遅延選択部４４を制御して、レジスタファイル４５のループバック左開口部ｔＢの値をＲＤＬＬ３２に設定する。この際設定されるループバック左開口部ｔＢの値は、第１のフェーズで初期値から１ステップ早められた値である。また、フェーズ７０３と同様に、ライトデータ出力バッファ２１、リードデータ入力バッファ２２、ストローブ信号出力バッファ２３及びストローブ信号入力バッファ２４を有効化する。
【０１２７】
それと同時に、ライトデータＷＤが、外部回路１１０からメモリインターフェース回路１００に供給される。ライトデータＷＤは、メモリデバイス１３０に書き込まれるとともに、期待値取得用ラッチ１２により期待値ｖａｌ２としてラッチされる。また、ライトデータＷＤは、リードデータラッチ１１にループバックされる。ループバックされたリードデータＲＤは、結果値ｖａｌ１としてラッチされる。比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、複数のライトデータに対して比較を繰り返す。（フェーズ７０７）。
【０１２８】
続いて、レジスタ制御部４２は、比較結果を参照する。このとき、ＲＤＬＬ３２には初期値から１ステップ早められたループバック左開口部ｔＢが設定されている。よって、比較結果は、ＡＬＬ−ＰＡＳＳとなると仮定することができる。しかし、半導体装置１２０の特性やジッタの変動により、比較器４１における比較結果がＡＬＬ−ＰＡＳＳではなく、ＯＮＥ−ＦＡＩＬとなる場合が生じる。比較結果がＯＮＥ−ＦＡＩＬとなった場合には、上述の仮定は否定される。
【０１２９】
上述の仮定が否定される場合について検討する。この場合、ループバック左開口部ｔＢは、本来設定されるべき値よりも早い値であると推測できる。つまり、第１のフェーズ２０１で行われたループバック左開口部ｔＢを１ステップ早める処置は、ジッタによる偶然性が影響した処置であり、妥当でないと判断できる。よって、第１のフェーズ２０１の処理を取り消すため、レジスタ制御部４２は、ループバック左開口部ｔＢの値を１ステップ遅い値に更新する。すなわち、ループバック左開口部ｔＢは初期値に戻される（フェーズ７０８）。
【０１３０】
なお、上述の通り、ライトデータＷＤに変化が無い場合についても、第１のフェーズ２０１による仮定が誤りであると判断される場合がある。この場合でも、第１のフェーズ２０１で行われた処理を取り消すため、レジスタ制御部４２は、ループバック左開口部ｔＢの値を１ステップ遅い値に更新する。従って、ライトデータＷＤに起因する仮定検証の不備についても是正を図ることができる。
【０１３１】
一方、上記仮定が正しい場合について検討する。この場合、第１のフェーズ２０１で行われた、ループバック左開口部ｔＢを１ステップ早める処置は妥当であったと判断できる。よって、ループバック左開口部ｔＢを１ステップ早めた処置に対応させるため、ループバック左Ｆａｉｌ確定値ｔＡ及び左開口部推定値ｔＥの値を、１ステップ早い値に更新する（フェーズ７０９）。これにより、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥを適切な値に設定することができる。
【０１３２】
次に、第３のフェーズ２０３について説明する。図１２は、第３のフェーズ２０３の動作を示すフローチャートである。フェーズ８０１及び８０２は、フェーズ６０１及び６０２とそれぞれ同じであるので、説明を省略する。
【０１３３】
半導体装置１２０に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部４２は、遅延選択部４４を制御して、ループバック右Ｆａｉｌ確定値ｔＤの初期値を、ＲＤＬＬ３２に設定する。そして、第１のバッファ制御信号により、ライトデータ出力バッファ２１、ストローブ信号出力バッファ２３を有効化する。第２のバッファ制御信号により、リードデータ入力バッファ２２、ストローブ信号入力バッファ２４を有効化する。
【０１３４】
それと同時に、ライトデータＷＤが、外部回路１１０からメモリインターフェース回路１００に供給される。ライトデータＷＤは、メモリデバイス１３０に書き込まれるとともに、期待値取得用ラッチ１２により期待値ｖａｌ２としてラッチされる。また、ライトデータＷＤは、リードデータラッチ１１にループバックされる。ループバックされたリードデータＲＤは、結果値ｖａｌ１としてラッチされる。比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、複数のライトデータに対して比較を繰り返す。（フェーズ８０３）。
【０１３５】
続いて、レジスタ制御部４２は、比較結果を参照する。このとき、ＲＤＬＬ３２にはループバック右Ｆａｉｌ確定値ｔＤの初期値が設定されている。よって、比較器４１における比較結果は、ＡＬＬ−ＦＡＩＬとなると仮定することができる。しかし、半導体装置１２０の特性やジッタの変動により、比較器４１における比較結果がＡＬＬ−ＦＡＩＬではなく、ＯＮＥ−ＰＡＳＳとなる場合が生じる。比較結果がＯＮＥ−ＰＡＳＳとなった場合には、上述の仮定は否定される。なお、ライトデータＷＤに変化が無い場合についても、ＯＮＥ−ＰＡＳＳの結果が得られる場合がある。この場合にも、上述の仮定が否定される結果が得られる。
【０１３６】
上述の仮定が否定される場合について検討する。この場合、半導体装置１２０の特性変動により、ループバック右Ｆａｉｌ確定値ｔＤは、初期値よりも遅い値にシフトしてしまったことが推測できる。その結果、ループバック右開口部ｔＣも、同様に初期値よりも遅い値にシフトしてしまったと推測できる。そこで、ＯＮＥ−ＰＡＳＳの比較結果が得られる場合には、ループバック右開口部ｔＣの値を、１ステップ遅い値に更新する（フェーズ８０４）。その後、ループバック右Ｆａｉｌ確定値ｔＤの値が妥当であるかを確認するため、第４のフェーズ２０４のステップ２０４ｂへ進む。
【０１３７】
一方、上記仮定の通り、ＡＬＬ−ＦＡＩＬの比較結果が得られる場合には、ループバック右Ｆａｉｌ確定値ｔＤを初期値のまま保持する。その後、第４のフェーズ２０４のステップ２０４ａへ進む。
【０１３８】
次に、第４のフェーズ２０４について説明する。図１３は、第４のフェーズ２０４の動作を示すフローチャートである。まず、第３のフェーズ２０３による仮定が正しい場合に対応する、ステップ２０４ａから開始するフェーズ９０１〜９０４について説明する。フェーズ９０１及び９０２は、フェーズ６０１及び６０２とそれぞれ同じであるので、説明を省略する。
【０１３９】
半導体装置１２０に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部４２は、遅延選択部４４を制御して、第３のフェーズ２０３でそのまま保持されたループバック右開口部ｔＣの初期値を、ＲＤＬＬ３２に設定する。そして、第１のバッファ制御信号ＳＢ１により、ライトデータ出力バッファ２１、ストローブ信号出力バッファ２３を有効化する。第２のバッファ制御信号ＳＢ２により、リードデータ入力バッファ２２、ストローブ信号入力バッファ２４を有効化する。
【０１４０】
それと同時に、ライトデータＷＤが、外部回路１１０からメモリインターフェース回路１００に供給される。ライトデータＷＤは、メモリデバイス１３０に書き込まれるとともに、期待値取得用ラッチ１２により期待値ｖａｌ２としてラッチされる。また、ライトデータＷＤは、リードデータラッチ１１にループバックされる。ループバックされたリードデータＲＤは、結果値ｖａｌ１としてラッチされる。比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、複数のライトデータに対して比較を繰り返す（フェーズ９０３）。
【０１４１】
続いて、レジスタ制御部４２は、比較結果を参照する。このとき、ＲＤＬＬ３２にはループバック右開口部ｔＣの初期値が設定されている。よって、比較器４１における比較結果は、ＡＬＬ−ＰＡＳＳとなると仮定することができる。しかし、半導体装置１２０の特性やジッタの変動により、比較器４１における比較結果がＡＬＬ−ＰＡＳＳではなく、ＯＮＥ−ＦＡＩＬとなる場合が生じる。比較結果がＯＮＥ−ＦＡＩＬとなった場合には、上述の仮定は否定される。
【０１４２】
上述の仮定が否定される場合について検討する。この場合、半導体装置１２０の特性変動により、ループバック右開口部ｔＣが、初期値よりも早い値にシフトしてしまったことが推測できる。その結果、右開口部推定値ｔＦも、同様に初期値より早い値にシフトしてしまったと推測できる。そこで、ＯＮＥ−ＦＡＩＬの比較結果が得られる場合には、ループバック右開口部ｔＣ及び右開口部推定値ｔＦの値を、１ステップ早い値に更新する（フェーズ９０４）。その後、フェーズ９１０へ進む。
【０１４３】
この際、第３のフェーズ２０３のフェーズ８０３におけるループバック右Ｆａｉｌ確定値ｔＤについてのループバックテストではＡＬＬ−ＦＡＩＬの結果が得られているので、ループバック右Ｆａｉｌ確定値ｔＤの値は一応正しいものとして、そのまま保持する。なお、ループバック右Ｆａｉｌ確定値ｔＤの値が早い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ８０３→ステップ２０４ａ→フェーズ９０１→フェーズ９０３→フェーズ９０４の手順が繰り換えされ、その結果、ループバック右開口部ｔＣは、フェーズ９０３においてＡＬＬ−ＰＡＳＳとなるループバック右開口部ｔＣに収束する。また、ループバック右Ｆａｉｌ確定値ｔＤの値が遅い値にシフトしていたとしても、通常動作フェーズを繰り返すことで是正される。つまり、フェーズ８０３→フェーズ８０４→ステップ２０４ｂ→フェーズ９０５→フェーズ９０７→フェーズ９０９の手順が繰り換えされ、その結果、ループバック右Ｆａｉｌ確定値ｔＤは、フェーズ８０３においてＡＬＬ−ＦＡＩＬとなる値に収束する。但し、フェーズ９０４において、ループバック右開口部ｔＣに連動してループバック右Ｆａｉｌ確定値ｔＤの値を１ステップ遅らせても、通常動作フェーズを繰り返して得られる効果は同等である。
【０１４４】
一方、上記仮定の通り、ＡＬＬ−ＰＡＳＳの比較結果が得られる場合には、ループバック右開口部ｔＣ及び右開口部推定値ｔＦの値は適切であると判断することができる。従って、ループバック右Ｆａｉｌ確定値ｔＤ、ループバック右開口部ｔＣ及び右開口部推定値ｔＦをそのまま保持する。その後、フェーズ９１０へ進む。
【０１４５】
次いで、第３のフェーズ２０３による仮定が誤りである場合に対応する、フェーズ９０５〜９０９について説明する。フェーズ９０５及び９０６は、フェーズ６０１及び６０２とそれぞれ同じであるので、説明を省略する。
【０１４６】
半導体装置１２０に対するライト動作の要求が有ると判断した場合、すなわちライト時には、ループバックテストを行う。レジスタ制御部４２は、遅延選択部４４を制御して、レジスタファイル４５のループバック右開口部ｔＣの値をＲＤＬＬ３２に設定する。この際設定されるループバック右開口部ｔＣの値は、第３のフェーズ２０３で初期値から１ステップ遅くされた値である。また、フェーズ７０３と同様に、ライトデータ出力バッファ２１、リードデータ入力バッファ２２、ストローブ信号出力バッファ２３及びストローブ信号入力バッファ２４を有効化する。
【０１４７】
それと同時に、ライトデータＷＤが、外部回路１１０からメモリインターフェース回路１００に供給される。ライトデータＷＤは、メモリデバイス１３０に書き込まれるとともに、期待値取得用ラッチ１２により期待値ｖａｌ２としてラッチされる。また、ライトデータＷＤは、リードデータラッチ１１にループバックされる。ループバックされたリードデータＲＤは、結果値ｖａｌ１としてラッチされる。比較器４１は、結果値ｖａｌ１と期待値ｖａｌ２とを比較する。比較器４１は、複数のライトデータに対して比較を繰り返す（フェーズ９０７）。
【０１４８】
続いて、レジスタ制御部４２は、比較結果を参照する。このとき、ＲＤＬＬ３２には初期値から１ステップ遅くされたループバック右開口部ｔＣが設定されている。よって、比較器４１における比較結果は、ＡＬＬ−ＰＡＳＳとなると仮定することができる。しかし、半導体装置１２０の特性やジッタの変動により、比較器４１における比較結果がＡＬＬ−ＰＡＳＳではなく、ＯＮＥ−ＦＡＩＬとなる場合が生じる。比較結果がＯＮＥ−ＦＡＩＬとなった場合には、上述の仮定は否定される。
【０１４９】
上述の仮定が否定される場合について検討する。この場合、ループバック右開口部ｔＣは、本来設定されるべき値よりも遅い値であると推測できる。つまり、第３のフェーズ２０３で行われた、ループバック右開口部ｔＣを１ステップ遅くする処置は、ジッタによる偶然性が影響した処置であり、妥当でないと判断できる。よって、第３のフェーズ２０３で行われた処理を取り消すため、レジスタ制御部４２は、ループバック右開口部ｔＣの値を１ステップ早い値に更新する。すなわち、ループバック右開口部ｔＣは初期値に戻される（フェーズ９０８）。その後、フェーズ９１０へ進む。
【０１５０】
なお、上述の通り、ライトデータＷＤに変化が無い場合についても、第３のフェーズ２０３による仮定が誤りであると判断される場合がある。この場合でも、第３のフェーズ２０３で行われた処理を取り消すため、レジスタ制御部４２は、ループバック右開口部ｔＣの値を１ステップ早い値に更新する。従って、ライトデータＷＤに起因する仮定検証の不備についても是正を図ることができる。
【０１５１】
一方、上記仮定が正しい場合について検討する。この場合、第３のフェーズ２０３で行われた、ループバック右開口部ｔＣを１ステップ遅くする処置は妥当であったと判断できる。よって、ループバック右開口部ｔＣを１ステップ遅くする処置に対応させるため、ループバック右Ｆａｉｌ確定値ｔＤ及び右開口部推定値ｔＦの値を、１ステップ遅い値に更新する。また、ループバック左開口部ｔＢに連動して、左開口部推定値ｔＥにも同様の変動が生じているものと推定することができる。従って、左開口部推定値ｔＥの値も、１ステップ遅い値に更新する（フェーズ９０９）。これにより、ループバック右開口部ｔＣ、ループバック右Ｆａｉｌ確定値ｔＤ及び右開口部推定値ｔＦを適切な値に設定することができる。その後、フェーズ９１０へ進む。
【０１５２】
最後に、第４のフェーズで設定した最新の左開口部推定値ｔＥ及び右開口部推定値ｔＦの値と上述の式（１）とに基づき、リード時遅延値ｔＧを算出する（フェーズ９１０）。
【０１５３】
以上のステップを経て、ライト時に供給されるライトデータをループバックすることにより、メモリインターフェース回路１００は、リード時遅延値ｔＧを最適の値に維持することが可能となる。従って、メモリインターフェース回路１００を用いる場合には、リードデータのタイミングキャリブレーションを行うための期間を設ける必要がない。すなわち、メモリインターフェース回路１００は、通常のライト動作中にリードデータのタイミングキャリブレーションを併せて実行するため、メモリデバイスを高速に駆動することが可能となる。
【０１５４】
本構成によれば、図２４に示すメモリシステム１１００の様に、リードデータのラッチタイミングを行うためにのみ用いる回路を設ける必要がない。そのため、本構成によれば、通常のメモリインターフェースと比べて、小型の回路規模を有するメモリインターフェース回路を実現することができる。
【０１５５】
また、高速インターフェースデバイスでは、特性変動を抑制することが必要である。そのため、データの書き込み／読み出しに関与するラッチ等の機能ブロックを構成するトランジスタには、大きな面積を有するトランジスタが用いられる。その結果、図２４に示すメモリシステム１１００のように、第二のデータラッチ部１１０６などの大規模なブロックを有する場合には、回路面積が大きくなる。一方、本構成によれば、このような大規模なブロックを設ける必要がないので、回路規模抑制の観点から更に有利である。
【０１５６】
もっとも、本構成では、レジスタ部を設けなければならない。しかし、レジスタ部４３は単に値ｔＡ〜ｔＧを保持すれば足りるので、小規模な回路構成（例えば、ｎｍオーダー）で実現することができる。これに対し、第二のデータラッチ部１１０６などの大規模なブロックについては、例えばμｍオーダーの回路規模を有する。従って、レジスタ部４３を設けたとしても、回路規模抑制の妨げとなることは無い。従って、メモリインターフェース回路１００にレジスタ部４３を設けたとしても、従来の構成と比べて、十分に回路規模を削減することが可能となる。
【０１５７】
さらに、図２４に示すメモリシステム１１００では、第一のデータラッチ部１１０３、第一の可変遅延部１１０４及び第一の遅延制御部１１０５で構成される系と、第二のデータラッチ部１１０６、第二の可変遅延部１１０７及び第二の遅延制御部１１０８で構成される系と、の特性を一致させる必要が有る。ところが、これらのブロックは物理的に分離して形成されるので、現実には２つの系の特性を厳密に合わせることはできない。そのため、メモリシステム１１００においてタイミング調整を行ったとしても、２つの系の特性のずれにより、長結果の信頼性に問題が有る恐れがある。本構成では、第二のデータラッチ部１１０６、第二の可変遅延部１１０７及び第二の遅延制御部１１０８で構成される系に相当するブロックを設ける必要が無いので、上記の問題を考慮する必要が無い。
【０１５８】
さらに、図２４に示すメモリシステム１１００では、リードデータのトグルを検出する必要がある。そのため、メモリデバイス１１０１にデータが書き込まれていない場合や、トグルが無いデータについては、タイミング調整を行うことができない。そのため、別途データのトグルが無い場合の対策が必要となる。一方、本構成では、ライトデータを用いてループバックテストを行うので、メモリデバイスにデータが書き込まれていない場合や、トグルが無いデータしか得られない場合を考慮する必要が無い点で有利である。
【０１５９】
本構成においては、初期化フェーズ中に、レジスタファイル４５の各値の初期値設定が行われる。この際、メモリインターフェース回路１００には、外部回路１１０からテストデータが供給される。このテストデータは、メモリデバイス１３０にも出力される。しかし、初期化フェーズ中にはメモリデバイス（ＤＤＲ３−ＳＤＲＡＭ）は、書き込み禁止状態となっているため、メモリデバイスにはテストデータは書き込まれない。この書き込み禁止状態の制御については、ＤＤＲ３−ＳＤＲＡＭの標準規格において定められている。
【０１６０】
換言すれば、メモリインターフェース回路１００が組み込まれた半導体装置１２０のデータ端子６１及びストローブ端子６２は、初期化フェーズ中でも電圧が変動する。データ端子６１及びストローブ端子６２の電圧は、テスタなどにより容易に観測することができる。一方、通常のメモリコントローラにおいては、初期化フェーズなどの、ライト時／リード時以外の場合に、データ端子６１又はストローブ端子６２の電圧が変動することは無い。従って、ライト時及びリード時以外の場合に、データ端子又はストローブ端子の電圧を観測することにより、半導体装置内にメモリインターフェース回路１００が組み込まれているか否かを識別することが可能である。
【０１６１】
実施の形態２
次に、実施の形態２にかかるメモリインターフェース回路について説明する。図１４は、実施の形態２にかかるメモリインターフェース回路１４０を含む半導体装置１５０の構成を示す回路ブロック図である。半導体装置１５０は、半導体装置１２０のメモリインターフェース回路１００を、メモリインターフェース回路１４０に置き換えた構成を有する。その他の半導体装置１５０の構成は、半導体装置１２０と同様であるので、説明を省略する。
【０１６２】
実施の形態１にかかるメモリインターフェース回路１００では、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥに大きな値を設定しなければならない。そうすると、ＲＤＬＬ３２の回路規模が大きくなってしまう。これに対し、本実施の形態にかかるメモリインターフェース回路１４０は、ＲＤＬＬ３２に設定するループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥを、メモリインターフェース回路１００と比較して小さくできることが特徴である。
【０１６３】
メモリインターフェース回路１４０は、メモリインターフェース回路１００の比較器４１を、シフト機能付き比較器４７に置き換えた構成を有する。シフト機能付き比較器４７は、期待値ｖａｌ２に対する結果値ｖａｌ１の比較タイミングをシフトさせる機能を有する。具体的には、シフト機能付き比較器４７は、例えば遅延制御信号ＤＣＳに応じて、リードデータラッチ１１がラッチした結果値ｖａｌ１を１／２サイクル（１８０°）遅らせたシフト結果値ｖａｌ１＿１８０と、期待値取得用ラッチ１２がラッチした期待値ｖａｌ２と、を比較する。メモリインターフェース回路１４０のその他の構成は、メモリインターフェース回路１００と同様であるので、説明を省略する。
【０１６４】
続いて、メモリインターフェース回路１４０の動作について説明する。図１５は、実施の形態２にかかるメモリインターフェース回路１４０の動作を示すフローチャートである。図１５に示すメモリインターフェース回路１４０の動作は、メモリインターフェース回路１００の初期化フェーズ２００、第１のフェーズ２０１及び第２のフェーズ２０２を、それぞれ初期化フェーズ２１０、第１のフェーズ２１１及び第２のフェーズ２１２に置換したものである。
【０１６５】
初期化フェーズ２１０について説明する。図１６は、初期化フェーズ２１０における動作を示すフローチャートである。図１６に示すように、初期化フェーズ２１０は、メモリインターフェース回路１００の第１の初期化処理３００を、第１の初期化処理３１０に置き換えたものである。以下では、相違点である第１の初期化処理３１０について説明する。
【０１６６】
図１７は、第１の初期化処理３１０における動作を示すフローチャートである。第１の初期化処理３１０は、メモリインターフェース回路１００のフェーズ３０３及びフェーズ３０５を、フェーズ３１３及びフェーズ３１５に置き換えたものである。フェーズ３１３及びフェーズ３１５では、ＲＤＬＬ３２は、ライトストローブ信号ＷＤＱＳの位相を約９０°遅らせる。図１８は、第１の初期化処理３１０における信号のタイミング例を示すタイミングチャートである。ＲＤＬＬ３２により、遅延ライトストローブ信号ＷＤＱＳ＿ｄの立ち上がり（タイミングＴ４）は、ライトストローブ信号ＷＤＱＳの立ち上がり（タイミングＴ３）から９０°遅れる。
【０１６７】
この状態で、シフト機能付き比較器４７は、上述の半サイクル遅れの比較動作を行う。つまり、シフト機能付き比較器４７は、タイミングＴ５のタイミングでラッチされた値を、結果値ｖａｌ１として比較動作を行う。これにより、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢの初期値の探索が可能となる。この場合、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢは、９０°前後の値となる。第１の初期化処理３１０におけるその他の動作については、第１の初期化処理３００と同様であるので、説明を省略する。
【０１６８】
次いで、第１のフェーズ２１１について説明する。図１９は、第１のフェーズ２１１における動作を示すフローチャートである。第１のフェーズ２１１は、メモリインターフェース回路１００の第１のフェーズ２０１のフェーズ６０３を、フェーズ６１３に置き換えたものである。フェーズ６１３では、第１の初期化処理３１０のフェーズ３１３及びフェーズ３１５と同様に、シフト機能付き比較器４７による半サイクル遅れの比較動作が行われる。従って、この場合も、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢは、９０°前後の値となる。第１のフェーズ２１１におけるその他の動作については、第１のフェーズ２０１と同様であるので、説明を省略する。
【０１６９】
次いで、第２のフェーズ２１２について説明する。図２０は、第２のフェーズ２１２における動作を示すフローチャートである。第２のフェーズ２１２は、メモリインターフェース回路１００の第２のフェーズ２０２のフェーズ７０３及び７０７を、それぞれフェーズ７１３及び７１７に置き換えたものである。フェーズ７１３及び７１７では、第１の初期化処理３１０のフェーズ３１３及びフェーズ３１５と同様に、シフト機能付き比較器４７による半サイクル遅れの比較動作が行われる。従って、この場合も、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥは、９０°前後の値となる。第１のフェーズ２１２におけるその他の動作については、第２のフェーズ２０２と同様であるので、説明を省略する。
【０１７０】
すなわち、本構成によれば、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥの値を、実施の形態１にかかるメモリインターフェース回路１００と比べて、小さくすることができる。その結果、ＲＤＬＬ３２の回路面積を抑制し、メモリインターフェース回路１４０を小型化することが可能となる。
【０１７１】
実施の形態３
次に、実施の形態３にかかるメモリインターフェース回路について説明する。図２１は、実施の形態３にかかるメモリインターフェース回路１６０を含む半導体装置１７０の構成を示す回路ブロック図である。半導体装置１７０は、半導体装置１２０のメモリインターフェース回路１００を、メモリインターフェース回路１６０に置き換えた構成を有する。その他の半導体装置１７０の構成は、半導体装置１２０と同様であるので、説明を省略する。
【０１７２】
メモリインターフェース回路１６０は、メモリインターフェース回路１００のＷＤＬＬ３１を、バイパス機能付きＷＤＬＬ３３に置き換えた構成を有する。また、レジスタファイル４５をレジスタファイル４８に置き換えている。バイパス機能付きＷＤＬＬ３３は、遅延制御信号ＤＣＳに応じて、クロック信号ＣＬＫをそのままバイパスして出力する機能を有する。
【０１７３】
レジスタファイル４８は、レジスタファイル４５と比べて、右開口部推定値の初期値ｔＨが追加されている。
【０１７４】
続いて、実施の形態３にかかるメモリインターフェース回路１６０の動作について説明する。図２２は、実施の形態３にかかるメモリインターフェース回路１６０の動作を示すフローチャートである。初期化フェーズ２２０では、第２の初期化処理４００及び第３の初期化処理５００が行われる。すなわち、メモリインターフェース回路１６０は、メモリインターフェース回路１００と比較して、第１の初期化処理３００が省略される。
【０１７５】
初期化フェーズ２２０の終了後、レジスタ制御部４２は、レジスタ部４３を制御して、右開口部推定値ｔＦの初期値を、右開口部推定値の初期値ｔＨとして記憶させる（フェーズ２０５）。
【０１７６】
その後、メモリインターフェース回路１００と同様に、第３のフェーズ２０３及び第４のフェーズ２０４を行う。すなわち、メモリインターフェース回路１６０は、メモリインターフェース回路１００と比較して、第１のフェーズ２０１及び第２のフェーズ２０２が省略される。尚、第３のフェーズ２０３及び第４のフェーズ２０４は、右開口部推定値の初期値ｔＨは初期値から変化しないとの仮定の下で行われる。
【０１７７】
続いて、レジスタ制御部４２は、第３のフェーズ２０３及び第４のフェーズ２０４を通じて求めた最新の右開口部推定値ｔＦの値と、右開口部推定値の初期値ｔＨと、を比較する（フェーズ２０６）。これにより、レジスタ制御部４２は、右開口部推定値ｔＦの値が、右開口部推定値の初期値ｔＨから、何ステップ乖離しているかを判断する。ここで、レジスタ制御部４２には、判断の基準となる基準ステップ数Ｍが予め設定されている。
【０１７８】
右開口部推定値の初期値ｔＨからの右開口部推定値ｔＦの値の乖離量がＭステップよりも小さい場合には、第３のフェーズ２０３に戻り、処理を繰り返す。一方、右開口部推定値の初期値ｔＨからの右開口部推定値ｔＦの値の乖離量がＭステップ以上である場合には、フェーズ２０７に進む。
【０１７９】
フェーズ２０７では、レジスタ制御部４２は、外部回路１１０がメモリインターフェース回路の初期化を許可するかどうかを照会する。初期化が許可されない場合には、第３のフェーズに戻り、処理を繰り返す。初期化が許可される場合には、初期化フェーズ２１０に戻り、初期化を実行する。
【０１８０】
メモリインターフェース回路１６０では、開口部の右側の境界に着目し、通常のメモリアクセス動作中における遅延量の変化を、初期値と比較する。そして、比較結果が許容範囲（すなわち、初期値からの遅延量の乖離がＭステップよりも小さい）内に収まるか否かを監視する。その結果、比較結果が許容範囲外にあると判断した場合に、キャリブレーションを行うものである。
【０１８１】
なお、リード時遅延値ｔＧを算出するには、左開口部推定値ｔＥを決定することが必要である。左開口部推定値ｔＥを決定するには、例えば、実施の形態１にかかる初期化フェーズ２００を実行することにより可能である。この際、左開口部推定値ｔＥを決定するには、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢを決定することが必要である。しかし、初期化フェーズ中は、ライトデータを利用する必要がないので、ライトストローブ信号を自由に生成してもよい。
【０１８２】
すなわち、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥを決定する際には、バイパス機能付きＷＤＬＬ３３により、クロック信号ＣＬＫの位相を遅らせることなく、そのままライトストローブ信号ＷＤＱＳとして出力することができる。この場合、ループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥを探索するためには、ＲＤＬＬ３２は、ライトストローブ信号ＷＤＱＳにわずかな遅延量を与えるだけでよい。従って、ＲＤＬＬ３２に設定される遅延量を、実施の形態１と比べて、大きく抑制することができる。
【０１８３】
本構成によれば、大きな値を設定しなければならないループバック左Ｆａｉｌ確定値ｔＡ、ループバック左開口部ｔＢ及び左開口部推定値ｔＥを取り扱う必要が無い。従って、実施の形態２と同様に、ＲＤＬＬ３２の回路規模を抑制することが可能となる。
【０１８４】
実施の形態４
次に、実施の形態４にかかるメモリシステム１０００について説明する。図２３は、実施の形態４にかかるメモリシステム１０００の構成を示すブロック図である。メモリシステム１０００は、半導体装置１９０とメモリデバイス１３０とを有する。メモリシステム１０００は、半導体装置１９０が組み込まれた応用装置として構成される。
【０１８５】
半導体装置１９０は、メモリインターフェース回路１８０及び外部回路１１０を有する。外部回路１１０は、制御回路１１１及びＣＰＵ１１２を有する。また、外部回路１１０には、制御回路１１１及びその他の機能ブロック１１３が搭載されてもよい。メモリインターフェース回路１８０には、上述のメモリインターフェース回路１００、１４０及び１６０のいずれかが用いられる。
【０１８６】
ＣＰＵ１１２は、半導体装置１９０全体の動作を制御する。制御回路１１１は、メモリインターフェース回路１８０及びメモリデバイス１３０を制御するのと同時に、これらの状態を監視している。
【０１８７】
制御回路１１１は、メモリインターフェース回路１８０及びメモリデバイス１３０の状態を監視して、キャリブレーションのやり直しが必要であるか否かを判断する。具体的には、遅延値モニタ信号ＤＭＳを用いて、レジスタファイルの値を監視する。そして、レジスタファイルの値が基準範囲を逸脱した場合には、制御回路１１１は、ＣＰＵ１１２へ割り込み信号１１４を出力し、ＣＰＵ１１２に対して割り込み処理要求を行う。
【０１８８】
ＣＰＵ１１２は、割り込み信号１１４を受け取ると、ＣＰＵ１１２内のメモリ空間から、キャリブレーションのためのメモリ空間を割り当てる。ＣＰＵ１１２は、メモリバンド幅が足りない場合には、一時的に機能を制限することで使用しているメモリバンド幅を削り、制御回路１１１に間欠キャリブレーション要求を出す。
【０１８９】
間欠キャリブレーション要求を受けた制御回路１１１は、メモリアクセスが無い時に、実施の形態１における初期化フェーズ２００と同様の手順で、メモリインターフェース回路１８０の初期化（間欠キャリブレーション）を実行する。
【０１９０】
制御回路１１１は、遅延値モニタ信号ＤＭＳを通じて、メモリインターフェース回路１８０の間欠キャリブレーションの終了を検出する。検出後、制御回路１１１は間欠キャリブレーションの終了を、割り込み信号１１４によりＣＰＵ１１２へ通知する。
【０１９１】
ＣＰＵ１１２は、間欠キャリブレーション終了の通知を受けたら、間欠キャリブレーションに割り当てていたメモリ空間を開放する。その後、ＣＰＵ１１２は、通常動作に復帰する。
【０１９２】
すなわち、本構成によれば、メモリインターフェース回路１８０の状態に応じて、メモリインターフェース回路１８０を適宜初期化することが可能である。これにより、温度などの状態変化が激しい場合でも、その変化に追随した動作を行うことができる。
【０１９３】
なお、本構成では、メモリシステム１０００から一時的にメモリ空間とメモリバンド幅を切り離して間欠キャリブレーションをしている。よって、間欠キャリブレーション中は一時的に処理能力が低下するものの、メモリアクセス動作を妨げることは無い。従って、メモリアクセスの高速化を犠牲にすることなく、メモリアクセス動作を安定化させることが可能である。
【０１９４】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、ＷＤＬＬ及びＲＤＬＬは、適宜遅延値を調整可能であるならば、ＤＬＬ以外の他のブロックに置き換えることが可能である。
【０１９５】
また、実施の形態４にかかる半導体装置１９０を組み込むのはメモリシステムに限られず、メモリシステム以外の他の応用装置に組み込むことができるのは勿論である。
【符号の説明】
【０１９６】
ＣＬＫ    クロック信号
Ｄ１〜Ｄ５  区間
ＤＣＳ  遅延制御信号
ＤＭＳ  遅延値モニタ信号
Ｄａｔａ  テストデータ
Ｍ  基準ステップ数
ＲＤ  リードデータ
ＲＤＱＳ  リードストローブ信号
ＲＤＱＳ＿ｄ  遅延リードストローブ信号
Ｓ１、Ｓ２  制御信号
ＳＢ１、ＳＢ２  バッファ制御信号
ＷＤ  ライトデータ
ＷＤＱＳ  ライトストローブ信号
ＷＤＱＳ＿ｄ  遅延ライトストローブ信号
ｔＡ  ループバック左Ｆａｉｌ確定値確定値
ｔＢ  ループバック左開口部
ｔＣ  ループバック右開口部
ｔＤ  ループバック右Ｆａｉｌ確定値確定値
ｔＥ  左開口部推定値
ｔＦ  右開口部推定値
ｔＧ  リード時遅延値
ｔＨ  右開口部推定値の初期値
ｖａｌ１  結果値
ｖａｌ１＿１８０  シフト結果値
ｖａｌ２  期待値
１１  リードデータラッチ
１２  期待値取得用ラッチ
２１  ライトデータ出力バッファ
２２  リードデータ入力バッファ
２３  ストローブ信号出力バッファ
２４  ストローブ信号入力バッファ
３１、３３  書き込み遅延調整装置（ＷＤＬＬ）
３２  読み出し遅延調整装置（ＲＤＬＬ）
４１  比較器
４２  レジスタ制御部
４３  レジスタ部
４４  遅延選択部
４５  レジスタファイル
４６  比較結果信号
４７  シフト機能付き比較器
４８  レジスタファイル
５１  ライトデータ信号線
５２  リードデータ信号線
５３  クロック信号線
５４  遅延制御信号線
５５  遅延値モニタ信号線
６１  データ端子
６２  ストローブ端子
７１  データ信号線
７２  ストローブ信号線
１００、１４０、１６０、１８０  メモリインターフェース回路
１１０  外部回路
１１１  制御回路
１１３  機能ブロック
１１４  割り込み信号
１２０、１４０、１７０、１９０  半導体装置
１３０  メモリデバイス
２００、２１０、２２０  初期化フェーズ
２０１  第１のフェーズ
２０２  第２のフェーズ
２０３  第３のフェーズ
２０４  第４のフェーズ
３００、３１０  第１の初期化処理
４００  第２の初期化処理
５００  第３の初期化処理
１０００、１１００  メモリシステム
１１０１  メモリデバイス
１１０２  メモリインターフェース
１１０３  第一のデータラッチ部
１１０４  第一の可変遅延部
１１０５  第一の遅延制御部
１１０６  第二のデータラッチ部
１１０７  第二の可変遅延部
１１０８  第二の遅延制御部
１１０９  比較器
１１１０  遅延判定部
１１１１  トグル検出器
１１１２  データ信号線
１１１３  ストローブ信号線
１１１４  方向制御部
１１１５  ライトデータ
１１１６  リードデータ
【図１】
0005653177.tif 000002
【図２】
0005653177.tif 000003
【図３】
0005653177.tif 000004
【図４】
0005653177.tif 000005
【図５】
0005653177.tif 000006
【図６】
0005653177.tif 000007
【図７】
0005653177.tif 000008
【図８】
0005653177.tif 000009
【図９】
0005653177.tif 000010
【図１０】
0005653177.tif 000011
【図１１】
0005653177.tif 000012
【図１２】
0005653177.tif 000013
【図１３】
0005653177.tif 000014
【図１４】
0005653177.tif 000015
【図１５】
0005653177.tif 000016
【図１６】
0005653177.tif 000017
【図１７】
0005653177.tif 000018
【図１８】
0005653177.tif 000019
【図１９】
0005653177.tif 000020
【図２０】
0005653177.tif 000021
【図２１】
0005653177.tif 000022
【図２２】
0005653177.tif 000023
【図２３】
0005653177.tif 000024
【図２４】
0005653177.tif 000025