(57)【要約】【課題】クロック信号に同期して動作するメモリにおけるクロック信号と制御信号との位相差を精度よく算出することが可能な半導体装置を提供すること。【解決手段】ＳｌａｖｅＤＬＬ１３は、制御信号を所定の範囲内で遅延して出力する。ＤＱＳ出力位相調整回路１２は、ＳｌａｖｅＤＬＬ１３に制御信号の遅延量を変更させながら得られたＤＤＲ３  ＤＩＭＭ２内のサンプリング回路からのサンプリング結果に基づいて、サンプリング回路のセットアップ時間またはホールド時間を満足しないことによって生じるサンプリング結果の不定の範囲を抽出する。そして、抽出された不定の範囲に基づいてクロック信号と制御信号との位相差を求め、制御信号の遅延量を調整する。したがって、クロック信号と制御信号との位相差を精度よく算出することが可能となる。【選択図】図１
2011253501.tif 000002
【特許請求の範囲】
【請求項１】
クロック信号に同期して動作し、制御信号の立ち上がりで前記クロック信号をサンプリングするサンプリング回路を有するメモリを制御する半導体装置であって、
前記制御信号を所定の範囲内で遅延して出力する遅延手段と、
前記遅延手段に前記制御信号の遅延量を変更させながら得られた前記サンプリング回路からのサンプリング結果に基づいて、前記サンプリング回路のセットアップ時間またはホールド時間を満足しないことによって生じるサンプリング結果の不定の範囲を抽出する抽出手段と、
前記抽出手段によって抽出された不定の範囲に基づいて前記クロック信号と前記制御信号との位相差を求め、前記制御信号の遅延量を調整する調整手段とを含む、半導体装置。
【請求項２】
前記抽出手段は、同じ遅延量の前記制御信号で得られた複数のサンプリング結果がすべて第１の値の場合に走査データを第１の状態とし、前記複数のサンプリング結果がすべて第２の値の場合に走査データを第２の状態とし、前記複数のサンプリング結果に前記第１の値と前記第２の値とが混在する場合に走査データを第３の状態とし、前記遅延手段による遅延量ごとに走査データを格納する走査データ格納手段と、
前記走査データ格納手段によって格納される走査データの中から所定間隔で状態が変化する箇所を第３の状態に置換して、前記走査データ格納手段に格納される走査データを更新する走査データ更新手段と、
前記走査データが変化する境界数が所定数以下となるまで前記所定間隔を増やしながら前記走査データ更新手段に走査データの更新を行なわせる境界数判定手段と、
前記更新された走査データの中の第３の状態が連続する範囲を前記不定の範囲として抽出する範囲抽出手段とを含む、請求項１記載の半導体装置。
【請求項３】
前記調整手段は、前記制御信号の立ち上がりが前記範囲抽出手段によって抽出された前記不定の範囲の中点と一致するように前記制御信号の遅延量を調整する、請求項２記載の半導体装置。
【請求項４】
前記調整手段は、前記メモリが保持するメモリモジュールの配置情報を読み出すことにより、前記制御信号の遅延量に所定量を加算するか否かを判定する、請求項１〜３のいずれかに記載の半導体装置。
【請求項５】
前記半導体装置はさらに、通常動作時の基準クロックとライトレベリング測定用クロックとのいずれかを選択して前記クロック信号として出力する選択手段を含む、請求項１〜４のいずれかに記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クロック信号に同期してデータの読み出しおよび書き込みが行なわれるメモリを制御する技術に関し、特に、制御信号とクロック信号との位相を調整してメモリを制御する半導体装置に関する。
【背景技術】
【０００２】
近年、コンピュータ、携帯端末などの高機能化、多機能化が進んでおり、それに伴ってメモリに対しても高速アクセスが要求されるようになってきている。ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）の高速化を図る１つの手法として、ＤＤＲ（Double Data Rate）を挙げることができる。ＤＤＲ  ＳＤＲＡＭにおいては、ＳＤＲＡＭをバンク構成とすることにより、外部バスの動作周波数に比べて内部バスの動作周波数を下げることができ、ＳＤＲＡＭに対して負担が少ない速度で動作させることができる。
【０００３】
このようなＤＤＲ  ＳＤＲＡＭのさらなる高速化が進んでおり、ＳＤＲＡＭを８バンク構成としたＤＤＲ３  ＳＤＲＡＭ（以下、ＤＤＲ３  ＤＩＭＭ（Dual Inline Memory Module）とも呼ぶ。）が開発されている。
【０００４】
ＤＤＲ３  ＳＤＲＡＭにおいては、各メモリモジュールにおける信号の波形品質の向上を図るために、各メモリモジュールの共通する信号線を１つのラインで数珠繋ぎにしたフライバイ・トポロジー（Fly-by Topology）が採用されている。この方式を採用することにより、ＤＩＭＭ内の配線の短縮を図ることができるが、その反面、クロックがＤＩＭＭ内の各メモリモジュールに伝播する時間に差が生じてしまい、クロック信号とデータストローブ（ＤＱＳ）信号との間に位相差が発生することになる。
【０００５】
そこで、ＤＩＭＭ内の各メモリモジュールを制御するメモリコントローラ側で、ＤＱＳ信号の入力タイミングをクロック信号の伝播遅延にあわせて遅らせるといった処理が必要になる。これに関連する技術として、下記の特許文献１〜３に開示された発明がある。
【０００６】
特許文献１は、伝送条件の悪化や不整合があってもデータ信号のラッチ動作を誤らないメモリインターフェース回路を提供することを目的とする。メモリインターフェース回路は、発振回路と遅延回路と位相比較器とデータラッチとを備え、クロックに同期してＤＱＳ信号とデータ信号とを出力するＤＤＲ−ＳＤＲＡＭを接続可能である。遅延回路は、発振回路が出力するクロックを遅延してリードクロックとして出力する。位相比較器は入力されたデータストローブ信号とリードクロックとの位相差を測定し、遅延回路は測定した位相差に従ってリードクロックの遅延時間を加減し、データラッチはリードクロックに同期してデータ信号を取り込む。
【０００７】
特許文献２は、クロック信号線がデイジーチェーンで配線された複数のメモリに対して、リード（read）動作の制御を行なう場合において、複数のメモリから出力されたデータ信号の入力時間を容易に揃えることを目的とする。メモリ制御回路は、ライトレベリング機能をそなえ、クロック信号線がデイジーチェーンで配線された複数のメモリに対して、クロック信号線を介してクロック信号を供給することにより、リード／ライト動作の制御を行なう。複数のメモリに対応してそれぞれ、ライト動作時において、メモリに出力するデータストローブ信号ＤＱＳを、ライトレベリング機能を用いて設定された第１遅延時間だけ遅延させる第１可変遅延部と、リード動作時において、メモリから入力されるデータ信号ＤＱを、第１遅延時間に基づいて設定された第２遅延時間だけ遅延させる第２可変遅延部とを備える。
【０００８】
特許文献３は、データを正しく取り込むことを目的とする。３つのＤＩＭＭからなるメモリ制御装置において、ＤＩＭＭが搭載されたＳＰＤ（Serial Presence Detect）にアクセスしてＤＩＭＭの枚数等を取得する。取得したＤＩＭＭの枚数等に従ってＤＩＭＭの同期クロックＣＬＫの遅延時間を設定し、このクロックに同期してデータを取り込む。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−０７１０１８号公報
【特許文献２】特開２００９−０７５６８２号公報
【特許文献３】特開２００２−２７８８２５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述のように、メモリコントローラ側で、ＤＱＳ信号の入力タイミングをクロック信号の伝播遅延にあわせて遅らせるといった処理が必要になる。ＤＤＲ３  ＳＤＲＡＭには、メモリコントローラがクロック信号とＤＱＳ信号との位相補正を行なう、いわゆるライトレべリングを補助する機能が用意されている。
【００１１】
ＤＤＲ３  ＳＤＲＡＭの各メモリモジュールには、ＤＱＳ信号の立ち上がりでクロック信号をサンプリングし、そのサンプリング結果をデータ（ＤＱ）信号に出力する機能が設けられている。メモリコントローラ側で、ＤＱＳ信号の位相をずらしながら各メモリモジュールからのサンプリング結果を取得し、サンプリング結果が“０”から“１”に変化するときの位相差をＤＱＳ信号の遅延量とする。
【００１２】
しかしながら、ＤＤＲ３  ＳＤＲＡＭ内に設けられた、ライトレべリングのためのサンプリング回路には、セットアップ（ｔＷＬＳ）時間、ホールド（ｔＷＬＨ）時間が規定されており、ＤＤＲ３−８００の場合にはそれぞれ３２５ｐｓ程度の値が規定されている。したがって、ｔＷＬＳ、ｔＷＬＨを満足しない状態でサンプリング回路が動作することが考えられ、クロック信号とＤＱＳ信号との間の位相差を精度よく測定することができないといった問題点があった。
【００１３】
また、クロック信号やＤＱＳ信号にノイズやジッタが入っている場合には、その影響でさらに調整精度が悪化するといった問題点もあった。
【００１４】
また、リードレべリングを行なわない場合には、ライトレべリングで測定した位相差を用いてデータ読み出しを行なう必要があるため、さらに精度が悪化してしまい、正しくデータを読み出すことができなくなるといった問題点もあった。
【００１５】
本発明は、上記問題点を解決するためになされたものであり、その目的は、クロック信号に同期して動作するメモリにおけるクロック信号と制御信号との位相差を精度よく算出することが可能な半導体装置を提供することである。
【課題を解決するための手段】
【００１６】
本発明の一実施例によれば、クロック信号に同期して動作し、制御信号の立ち上がりで前記クロック信号をサンプリングするサンプリング回路を有するメモリを制御する半導体装置が提供される。ＳｌａｖｅＤＬＬは、制御信号を所定の範囲内で遅延して出力する。ＤＱＳ出力位相調整回路は、ＳｌａｖｅＤＬＬに制御信号の遅延量を変更させながら得られたサンプリング回路からのサンプリング結果に基づいて、サンプリング回路のセットアップ時間またはホールド時間を満足しないことによって生じるサンプリング結果の不定の範囲を抽出する。そして、抽出された不定の範囲に基づいてクロック信号と制御信号との位相差を求め、制御信号の遅延量を調整する。
【発明の効果】
【００１７】
本発明の一実施例によれば、ＤＱＳ出力位相調整回路が、サンプリング回路のセットアップ時間またはホールド時間を満足しないことによって生じるサンプリング結果の不定の範囲を抽出してクロック信号と制御信号との位相差を求めるので、クロック信号と制御信号との位相差を精度よく算出することが可能となる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態における半導体装置を含んだシステムの構成例を示すブロック図である。
【図２】ＤＱＳ出力位相調整回路１２の処理手順を説明するためのフローチャートである。
【図３】ＤＱＳ出力位相調整回路１２内のスクリーニング処理を行なう部分の機能的構成を示すブロック図である。
【図４】図３に示すスクリーニング処理部の処理手順を説明するためのフローチャート（その１）である。
【図５】図３に示すスクリーニング処理部の処理手順を説明するためのフローチャート（その２）である。
【図６】図４および図５に示す処理によって走査データが更新されてゆくところを示す図である。
【図７】スクリーニング処理結果とＤＱＳ信号の遅延量との関係を示す図である。
【図８】本発明の第３の実施の形態における半導体装置を含んだシステムの構成例を示すブロック図である。
【発明を実施するための形態】
【００１９】
（第１の実施の形態）
図１は、本発明の第１の実施の形態における半導体装置を含んだシステムの構成例を示すブロック図である。このシステムは、半導体装置（以下、制御回路と呼ぶ。）１と、ＤＤＲ３  ＤＩＭＭ２とを含む。
【００２０】
ＤＤＲ３  ＤＩＭＭ２は、８つのＲａｍモジュール０〜７（２１−０〜２１−７）を含む。Ｒａｍモジュール０〜７（２１−０〜２１−７）のそれぞれがサンプリング回路を有しており、ライトレベリングモードにおいては、サンプリング回路のそれぞれがデータストローブ（ＤＱＳ）信号の立ち上がりでクロック信号をサンプリングし、そのサンプリング結果をデータ（ＤＱ）信号に出力する。
【００２１】
制御回路１は、ＤＤＲ３  ＤＩＭＭ２内のＲａｍモジュール０〜７（２１−０〜２１−７）のそれぞれに対応する８つのＤＱＳ信号を生成するが、ＤＱＳ信号のぞれぞれに対応するＲａｍモジュールから得られたサンプリング結果に基づいてクロック信号との位相差を求め、ＤＱＳ信号のそれぞれの遅延量を決定する。
【００２２】
制御回路１は、ＭａｓｔｅｒＤＬＬ（Delay Locked Loop）１１と、ＤＱＳ出力位相調整回路１２と、ＳｌａｖｅＤＬＬ１３と、ＲＥＡＤ  ＦＩＦＯ１４と、ＤＱ出力回路１５と、ＤＱＳ出力回路１６と、ＣＬＫ出力回路１７と、入出力バッファ１８および１９とを含む。
【００２３】
ＭａｓｔｅｒＤＬＬ１１は、環境（電源電圧、温度など）の変化や内的原因に起因して外部クロックと内部クロックとの間に発生する誤差を補正するための回路であり、位相差を検出した場合にはその遅延コードをＤＱＳ出力位相調整回路１２に出力する。
【００２４】
ＤＱＳ出力位相調整回路１２は、ＤＤＲ３  ＤＩＭＭ２内のＲａｍモジュール０〜７（２１−０〜２１−７）から出力されるＤＱ信号（サンプリング結果）に応じて、ＣＬＫ信号とそれぞれのＤＱＳ信号との位相差を求め、ＤＱＳ信号の遅延量をＭａｓｔｅｒＤＬＬ１１から出力される遅延コードに演算する。なお、このＤＱＳ出力位相調整回路１２の詳細については後述する。
【００２５】
ＳｌａｖｅＤＬＬ１３は、基準クロックを１８０°以上（半クロック以上）シフトさせることが可能な回路であり、ＤＱＳ出力位相調整回路１２から出力される遅延量に応じて基準クロックを遅延させる。
【００２６】
ＲＥＡＤ  ＦＩＦＯ１４は、ＳｌａｖｅＤＬＬ１３から出力されるクロック信号およびＤＤＲ３  ＤＩＭＭ２から出力されるＤＱＳ信号に応じて、ＤＤＲ３  ＤＩＭＭ２から読み出されたデータ（ＤＱ）を保持して外部に出力する。
【００２７】
ＤＱ出力回路１５は、ＳｌａｖｅＤＬＬ１３から出力されるクロック信号に応じて、ＤＤＲ３  ＤＩＭＭ２にデータ（ＤＱ）を出力する。
【００２８】
ＤＱＳ出力回路１６は、ＳｌａｖｅＤＬＬ１３から出力されるクロック信号に応じて、ＤＤＲ３  ＤＩＭＭ２内のＲａｍモジュール０〜７（２１−０〜２１−７）のそれぞれに与えるＤＱＳ信号を生成して出力する。
【００２９】
入出力バッファ１８は、ＤＱ出力回路１５から受けたデータ（ＤＱ）をＤＤＲ３  ＤＩＭＭ２に出力し、ＤＤＲ３  ＤＩＭＭ２から受けたデータ（ＤＱ）をＤＱＳ出力位相調整回路１２およびＲＥＡＤ  ＦＩＦＯ１４に出力する。
【００３０】
入出力バッファ１９は、ＤＱＳ出力回路１６から受けたＤＱＳ信号をＤＤＲ３  ＤＩＭＭ２に出力し、ＤＤＲ３  ＤＩＭＭ２から受けたＤＱＳ信号をＲＥＡＤ  ＦＩＦＯ１４に出力する。
【００３１】
図２は、ＤＱＳ出力位相調整回路１２の処理手順を説明するためのフローチャートである。まず、ＤＱＳ出力位相調整回路１２は、ＳｌａｖｅＤＬＬ１３に基準クロックの位相を０°から１８０°まで順次シフトさせることにより、ＤＤＲ３  ＤＩＭＭ２内のＲａｍモジュール０〜７（２１−０〜２１−７）のそれぞれに与えるＤＱＳ信号の位相を０°〜１８０°まで順次シフトさせる。そして、そのときにＤＤＲ３  ＤＩＭＭ２から出力されるデータ（ＤＱ）を取得することにより、１８０°区間の測定を行なう（Ｓ１）。
【００３２】
たとえば、１８０°の区間で６５個のサンプリングデータを得るのであれば、ＤＱＳ信号を１８０°／６５ずつシフトさせながら、１８０°区間の測定を行なう。なお、同一位相のＤＱＳ信号で複数回測定を行ない、すべてが“０”の場合には走査データを“０”とし、すべてが“１”の場合には走査データを“１”とし、“０”と“１”とが混在する場合には走査データを“ｂｏｔｈ”とする。
【００３３】
次に、ＤＱＳ出力位相調整回路１２は、測定結果のスクリーニングを行ない、Ｒａｍモジュール０〜７（２１−０〜２１−７）内のサンプリング回路のセットアップ時間またはホールド時間を満足しないことにより不定となっている範囲を特定する（Ｓ２）。なお、このスクリーニング処理の詳細は後述する。
【００３４】
最後に、ＤＱＳ出力位相調整回路１２は、スクリーニング処理によって得られた結果からＤＱＳ信号の遅延量を求め、ＭａｓｔｅｒＤＬＬ１１から出力される遅延コードとの演算を行ない、ＳｌａｖｅＤＬＬ１３による位相量を求める（Ｓ３）。
【００３５】
図３は、ＤＱＳ出力位相調整回路１２内のスクリーニング処理を行なう部分の機能的構成を示すブロック図である。なお、このスクリーニング処理部は、ハードウェアによって実現されてもよいし、ＣＰＵ（Central Processing Unit）がプログラムを実行することによって実現されてもよい。
【００３６】
スクリーニング処理部は、走査データ格納部３１と、走査データ取得部３２と、変化間隔算出部３３と、最小変化間隔抽出部３４と、境界数カウント部３５と、境界数判定部３６と、走査データ更新部３７とを含む。
【００３７】
走査データ格納部３１は、図２に示すフローチャートのステップＳ１で測定された走査データを格納する。上述のように、１８０°の区間で６５回サンプリングを行なう場合には、Ｒａｍモジュールのそれぞれに対応して、“０”、“１”、“ｂｏｔｈ”の何れかを示すデータが走査データ格納部３１に６５個格納されることになる。
【００３８】
走査データ取得部３２は、走査データ格納部３１に格納される走査データの中の、位相量が０°〜１８０°の走査データを順次取得して変化間隔算出部３３、境界数カウント部３５および走査データ更新部３７に出力する。
【００３９】
変化間隔算出部３３は、走査データ取得部３２によって順次取得される走査データが変化するときの間隔を算出し、その変化間隔を最小変化間隔抽出部３４および走査データ更新部３７に出力する。
【００４０】
最小変化間隔抽出部３４は、変化間隔算出部３３によって算出された変化間隔の中から最小変化間隔を抽出して、走査データ更新部３７に出力する。
【００４１】
境界数カウント部３５は、走査データ取得部３２によって順次取得される走査データが変化するときの境界数をカウントし、その境界数を境界数判定部３６に出力する。
【００４２】
境界数判定部３６は、境界数カウント部３５から受けた境界数に応じてスクリーニング処理を続行するか否かを判定する。そして、スクリーニング処理を終了する場合には、走査データ取得部３２にその旨を通知する。
【００４３】
走査データ更新部３７は、変化間隔算出部３３から出力される変化間隔および最小変化間隔抽出部３４から出力される最小変化間隔に基づいて、走査データ取得部３２によって取得された走査データを更新し、走査データ格納部３１に書き戻す。
【００４４】
図４および図５は、図３に示すスクリーニング処理部の処理手順を説明するためのフローチャートである。ここで、フローチャートに記載されている変数について簡単に説明する。ｍｉｎ＿ｉｎｔｅｒｖａｌ［６：０］は、走査データが変化するときの最小変化間隔を示す７ビットの情報である。
【００４５】
ｂｏｒｄｅｒ［２：０］は、走査データが変化するときの境界数を示す３ビットの情報である。ｄａｔ［６４：０］［１：０］は、６５個の走査データの内容を示す２ビットの情報である。走査データが“０”の場合には“０１”、走査データが“１”の場合には“１０”、走査データが“ｂｏｔｈ”の場合には“１１”が格納される。
【００４６】
ｐｒｅ＿ｓｔａｔｅ［１：０］は、前回の走査データの値を示す２ビットの情報である。ｐｒｅ＿ｓｔａｔｅ＿ｎｕｍ［７：０］は、前回の走査データの度数（位相量）に対応する値を示す８ビットの情報であり、０〜６４の値が設定される。実際の度数としては、その値に１８０°／６５を掛けたものとなる。
【００４７】
ｉｎｔｅｒｖａｌ［６：０］は、現在調査中の走査データの変化間隔を示す７ビットの情報である。ｃｏｕｎｔｅｒ［７：０］およびｃｏｕｎｔｅｒ２［７：０］は、走査データを順次取得するためのポインタとなる８ビットのカウンタである。
【００４８】
図４に示すフローチャートは、主に最小変化間隔の抽出と境界数の判定とを行なうものである。まず、ｍｉｎ＿ｉｎｔｅｒｖａｌ［６：０］に“７’ｈ３Ｆ”が設定され、ｂｏｒｄｅｒ［２：０］に“３’ｈ０”が設定され、ｃｏｕｎｔｅｒ［７：０］に“８’ｈ００”が設定されて、初期化が行なわれる（Ｓ１１）。なお、設定値の表記は、ＨＤＬ（Hardware Description Language）表記に準じている。
【００４９】
次に、走査データ取得部３２は、ｃｏｕｎｔｅｒの値が“０”であるか否かを判定する（Ｓ１２）。ｃｏｕｎｔｅｒの値が“０”であれば（Ｓ１２，Ｙｅｓ）、走査データ取得部３２は、走査データ格納部３１から走査データｄａｔ［０］［１：０］を取得してｐｒｅ＿ｓｔａｔｅ［１：０］に代入し、ｃｏｕｎｔｅｒの値“０”をｐｒｅ＿ｓｔａｔｅ＿ｎｕｍ［７：０］に代入し（Ｓ１３）、ステップＳ１４に処理が進む。また、ｃｏｕｎｔｅｒの値が“０”でなければ（Ｓ１２，Ｎｏ）、ステップＳ１４に処理が進む。
【００５０】
ステップＳ１４において、変化間隔算出部３３は、今回の走査データｄａｔ［ｃｏｕｎｔｅｒ］が前回の走査データｐｒｅ＿ｓｔａｔｅと同じであるか否かを判定する。同じであれば（Ｓ１４，Ｙｅｓ）、ステップＳ２０に処理が進む。
【００５１】
同じでなければ（Ｓ１４，Ｎｏ）、変化間隔算出部３３は、ｃｏｕｎｔｅｒの値からｐｒｅ＿ｓｔａｔｅ＿ｎｕｍの値を減算してｉｎｔｅｒｖａｌに代入する。また、境界数カウント部３５は、境界数ｂｏｒｄｅｒの値をインクリメントする（Ｓ１５）。なお、ｂｏｒｄｅｒ［２：０］の値が“３’ｈ７”となっている場合は、それ以上インクリメントをせずにオーバーフローしないように処理を行なう。
【００５２】
次に、前回の走査データの各ビットに対してＡＮＤ演算を行ない、“１’ｂ０”であるか否かが判定される（Ｓ１６）。演算結果が“０”でなければ、すなわち前回の走査データが“ｂｏｔｈ”であれば（Ｓ１６，Ｎｏ）、ステップＳ１９に処理が進む。
【００５３】
また、演算結果が“０”であれば、すなわち前回の走査データが“０”または“１”であれば（Ｓ１６，Ｙｅｓ）、最小変化間隔抽出部３４は、ｍｉｎ＿ｉｎｔｅｒｖａｌがｉｎｔｅｒｖａｌよりも大きいか否かを判定する（Ｓ１７）。ｍｉｎ＿ｉｎｔｅｒｖａｌがｉｎｔｅｒｖａｌ以下であれば（Ｓ１７，Ｎｏ）、ステップＳ１９に処理が進む。
【００５４】
ｍｉｎ＿ｉｎｔｅｒｖａｌがｉｎｔｅｒｖａｌよりも大きければ（Ｓ１７，Ｙｅｓ）、最小変化間隔抽出部３４は、ｍｉｎ＿ｉｎｔｅｒｖａｌにｉｎｔｅｒｖａｌの値を代入して最小変化間隔を更新し（Ｓ１８）、ステップＳ１９に処理が進む。
【００５５】
ステップＳ１９において、走査データ取得部３２は、ｃｏｕｎｔｅｒの値を前回の走査時の度数ｐｒｅ＿ｓｔａｔｅ＿ｎｕｍに代入し、走査データｄａｔ［ｃｏｕｎｔｅｒ］の値を前回の走査データｐｒｅ＿ｓｔａｔｅに代入する（Ｓ２０）。そして、走査データ取得部３２は、ｃｏｕｎｔｅｒの値をインクリメントする（Ｓ２１）。
【００５６】
次に、走査データ取得部３２は、ｃｏｕｎｔｅｒの値が“６４”よりも大きいか否かを判定する（Ｓ２２）。ｃｏｕｎｔｅｒの値が“６４”以下であれば（Ｓ２２，Ｎｏ）、ステップＳ１２に戻って以降の処理が繰り返される。
【００５７】
また、ｃｏｕｎｔｅｒの値が“６４”よりも大きければ（Ｓ２２，Ｙｅｓ）、境界数判定部３６は、ｂｏｒｄｅｒの値が“２”よりも大きいか否かを判定する（Ｓ２３）。ｂｏｒｄｅｒの値が“２”よりも大きければ（Ｓ２３，Ｙｅｓ）、図５のステップＳ２４に処理が進む。また、ｂｏｒｄｅｒの値が“２”以下であれば（Ｓ２３，Ｎｏ）、境界数判定部３６は、走査データ取得部３２に処理終了を通知し、処理が終了される。
【００５８】
図５に示すフローチャートは、主に変化間隔が最小変化間隔と一致する走査データを“ｂｏｔｈ”に置換するものである。ステップＳ２４において、ｃｏｕｎｔｅｒ［７：０］に“８’ｈ００”が設定されて、初期化が行なわれる（Ｓ２４）。
【００５９】
次に、走査データ取得部３２は、ｃｏｕｎｔｅｒの値が“０”であるか否かを判定する（Ｓ２５）。ｃｏｕｎｔｅｒの値が“０”であれば（Ｓ２５，Ｙｅｓ）、走査データ取得部３２は、走査データ格納部３１から走査データｄａｔ［０］［１：０］を取得してｐｒｅ＿ｓｔａｔｅ［１：０］に代入し、ｃｏｕｎｔｅｒの値“０”をｐｒｅ＿ｓｔａｔｅ＿ｎｕｍ［７：０］に代入し（Ｓ２６）、ステップＳ２７に処理が進む。また、ｃｏｕｎｔｅｒの値が“０”でなければ（Ｓ２５，Ｎｏ）、ステップＳ２７に処理が進む。
【００６０】
ステップＳ２７において、変化間隔算出部３３は、今回の走査データｄａｔ［ｃｏｕｎｔｅｒ］が前回の走査データｐｒｅ＿ｓｔａｔｅと同じであるか否かを判定する。同じであれば（Ｓ２７，Ｙｅｓ）、ステップＳ３６に処理が進む。
【００６１】
同じでなければ（Ｓ２７，Ｎｏ）、変化間隔算出部３３は、ｃｏｕｎｔｅｒの値からｐｒｅ＿ｓｔａｔｅ＿ｎｕｍの値を減算してｉｎｔｅｒｖａｌに代入して変化間隔を更新する（Ｓ２８）。
【００６２】
次に、最小変化間隔抽出部３４は、ｍｉｎ＿ｉｎｔｅｒｖａｌがｉｎｔｅｒｖａｌと同じであるか否かを判定する（Ｓ２９）。ｍｉｎ＿ｉｎｔｅｒｖａｌがｉｎｔｅｒｖａｌと同じでなければ（Ｓ２９，Ｎｏ）、ステップＳ３５に処理が進む。
【００６３】
ｍｉｎ＿ｉｎｔｅｒｖａｌがｉｎｔｅｒｖａｌと同じであれば（Ｓ３５，Ｙｅｓ）、前回の走査データの各ビットに対してＡＮＤ演算を行ない、“１’ｂ０”であるか否かが判定される（Ｓ３０）。演算結果が“０”でなければ、すなわち前回の走査データが“ｂｏｔｈ”であれば（Ｓ３０，Ｎｏ）、ステップＳ３５に処理が進む。
【００６４】
また、演算結果が“０”であれば、すなわち前回の走査データが“０”または“１”であれば（Ｓ３０，Ｙｅｓ）、走査データ更新部３７は、ｃｏｕｎｔｅｒ２［７：０］に前回の走査時の度数ｐｒｅ＿ｓｔａｔｅ＿ｎｕｍの値を代入する（Ｓ３１）。
【００６５】
次に、走査データ更新部３７は、走査データｄａｔ［ｃｏｕｎｔｅｒ２］に“２’ｂ１１”（ｂｏｔｈ）を代入して走査データを更新し、走査データ格納部３１に書き戻す（Ｓ３２）。そして、ｃｏｕｎｔｅｒ２の値をインクリメントし（Ｓ３３）、ｃｏｕｎｔｅｒ２の値がｃｏｕｎｔｅｒの値以上であるか否かを判定する（Ｓ３４）。ｃｏｕｎｔｅｒ２の値がｃｏｕｎｔｅｒの値未満であれば（Ｓ３４，Ｎｏ）、ステップＳ３２に戻って以降の処理を繰り返す。
【００６６】
また、ｃｏｕｎｔｅｒ２の値がｃｏｕｎｔｅｒの値以上であれば（Ｓ３４，Ｙｅｓ）、走査データ取得部３２は、ｃｏｕｎｔｅｒの値を前回の走査時の度数ｐｒｅ＿ｓｔａｔｅ＿ｎｕｍに代入し（Ｓ３５）、走査データｄａｔ［ｃｏｕｎｔｅｒ］の値を前回の走査データｐｒｅ＿ｓｔａｔｅに代入する（Ｓ３６）。そして、走査データ取得部３２は、ｃｏｕｎｔｅｒの値をインクリメントする（Ｓ３７）。
【００６７】
次に、走査データ取得部３２は、ｃｏｕｎｔｅｒの値が“６４”よりも大きいか否かを判定する（Ｓ３８）。ｃｏｕｎｔｅｒの値が“６４”以下であれば（Ｓ３８，Ｎｏ）、ステップＳ２５に戻って以降の処理が繰り返される。また、ｃｏｕｎｔｅｒの値が“６４”よりも大きければ（Ｓ３８，Ｙｅｓ）、図４のステップＳ１１に戻って以降の処理が繰り返される。
【００６８】
このようにして、境界数が２以下となるまで変化間隔と最小変化間隔とが一致する走査データが“ｂｏｔｈ”に置換され、Ｒａｍモジュール０〜７（２１−０〜２１−７）内のサンプリング回路のセットアップ時間またはホールド時間を満足しないことにより測定結果が不定となっている範囲を特定する。ここで、測定結果が不定となっているとは、測定結果が短い間隔で変化するか、同じ位相で測定したにもかかわらず測定結果が異なる値となっていることを指している。
【００６９】
図６は、図４および図５に示す処理によって走査データが更新されてゆくところを示す図である。図６の左側の“走査データ”の欄は、走査データ格納部３１に格納される最初の走査データを記載している。なお、図６においては、クロック信号の立ち上がり近辺の走査データのみを記載しているが、実際には６５個のデータがある。
【００７０】
図６の“１回目”の欄は、図４および図５に示す処理の１回目で走査データが更新された後の状態を記載している。走査データの変化間隔が最小変化間隔“１”と一致する箇所の値が“ｂｏｔｈ”に置換されている。
【００７１】
図６の“２回目”の欄は、図４および図５に示す処理の２回目で走査データが更新された後の状態を記載している。走査データの変化間隔が最小変化間隔“２”と一致する箇所の値が“ｂｏｔｈ”に置換されている。
【００７２】
図６の“３回目”の欄は、図４および図５に示す処理の３回目で走査データが更新された後の状態を記載している。走査データの変化間隔が最小変化間隔“３”と一致する箇所の値が“ｂｏｔｈ”に置換されている。この３回目の状態で、走査データが“０”から“ｂｏｔｈ”、“ｂｏｔｈ”から“１”に変化しており、境界数が“２”となっているため処理が終了されている。この３回目の“ｂｏｔｈ”が記載されている範囲が、サンプリング回路のセットアップ時間またはホールド時間を満足しないことにより測定結果が不定となっている範囲である。
【００７３】
図７は、スクリーニング処理結果とＤＱＳ信号の遅延量との関係を示す図である。たとえば、パターン（１２）〜（１４）は、クロック信号の立ち上がりが１８０°程度遅延している場合を示しており、ＤＱＳ信号の位相量が０°のときに、Ｔ１でＤＱＳ信号が立ち上がっていることを示している。Ｒａｍモジュール０〜７（２１−０〜２１−７）の中で、末端に配置されるＲａｍモジュール７（２１−７）がこのような状態に近いと考えられる。
【００７４】
パターン（１２）は、スクリーニング処理によって“０”から“１”に変化する１つの境界のみが検出された場合を示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが“０”から“１”に変化するポイントと一致するようにＤＱＳ信号の位相量（遅延量）が決定される。
【００７５】
パターン（１３）は、スクリーニング処理によって“０”から“ｂｏｔｈ”に変化する１つの境界のみが検出された場合を示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが“ｂｏｔｈ”の中点となるようにＤＱＳ信号の位相量（遅延量）が決定される。
【００７６】
パターン（１４）は、走査データがすべて“０”であって境界が検出されなかった場合を示している。このパターンにおいては、ＤＱＳ信号の位相量（遅延量）が１８０°と決定される。
【００７７】
パターン（４）〜（６）は、クロック信号の立ち上がりが少しだけ遅延している場合を示しており、ＤＱＳ信号の位相量が０°のときに、Ｔ２でＤＱＳ信号が立ち上がっていることを示している。
【００７８】
パターン（４）は、スクリーニング処理によって“ｂｏｔｈ”から“１”に変化し、さらに“１”から“０”に変化して２つの境界が検出された場合を示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが“ｂｏｔｈ”の中点である０°となるようにＤＱＳ信号の位相量（遅延量）が決定される。
【００７９】
パターン（５）は、スクリーニング処理によって“ｂｏｔｈ”から“１”に変化し、さらに“１”から“ｂｏｔｈ”に変化して２つの境界が検出された場合を示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが最初の“ｂｏｔｈ”の中点である０°となるようにＤＱＳ信号の位相量（遅延量）が決定される。
【００８０】
パターン（６）は、スクリーニング処理によって“ｂｏｔｈ”から“１”に変化する１つの境界のみが検出された場合を示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが“ｂｏｔｈ”の中点である０°となるようにＤＱＳ信号の位相量（遅延量）が決定される。
【００８１】
パターン（２）〜（３）は、クロック信号の立ち上がりよりもＤＱＳ信号の立ち上がりの方が遅延している場合を示しており、ＤＱＳ信号の位相量が０°のときに、Ｔ３でＤＱＳ信号が立ち上がっていることを示している。
【００８２】
パターン（２）は、スクリーニング処理によって“１”から“ｂｏｔｈ”に変化する１つの境界のみが検出された場合を示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが“ｂｏｔｈ”の中点から１８０°差し引いた値となるようにＤＱＳ信号の位相量（遅延量）が決定される。
【００８３】
パターン（３）は、走査データがすべて“１”であって境界が検出されなかった場合を示している。このパターンにおいては、ＤＱＳ信号の位相量（遅延量）が０°と決定される。
【００８４】
なお、図７においては、パターンごとに走査データの幅が異なるように記載されているが、これは走査データのパターン変化のみを主に示しているためであり、必ずしも走査データの幅が走査データの数に対応している訳ではない。
【００８５】
以上の説明においては、測定結果が不定となっている“ｂｏｔｈ”の中点と一致するようにＤＱＳ信号の遅延量を決定するとした。これは、サンプリング回路のセットアップ時間とホールド時間とが同じ場合を想定しているためである。セットアップ時間とホールド時間とが異なる場合には、“ｂｏｔｈ”の中点ではなく、その比率に応じて“ｂｏｔｈ”の範囲内で位相量を決定するようにすればよい。
【００８６】
以上説明したように、本実施の形態における半導体装置によれば、ＤＱＳ出力位相調整回路１２が、Ｒａｍモジュール０〜７（２１−０〜２１−７）内のサンプリング回路のセットアップ時間またはホールド時間を満足しないことにより不定となっている“ｂｏｔｈ”の範囲を特定し、ＤＱＳ信号の立ち上がりがその“ｂｏｔｈ”の範囲の中点となるように遅延量を決定するようにした。したがって、ＤＱＳ信号の遅延量を精度よく算出することが可能となった。
【００８７】
また、ＤＱＳ信号の遅延量を精度よく算出して位相を制御することができるため、リードレベリングを行なわない場合でもデータ読み出し時のＤＱＳ信号のタイミングの精度をある程度高く維持することができ、正しくデータを読み出すことが可能となった。
【００８８】
さらには、ＭａｓｔｅｒＤＬＬ１１およびＳｌａｖｅＤＬＬ１３によってクロック信号の位相を制御するようにしたので、環境変化によって生じる遅延変化を吸収することが可能となった。
【００８９】
（第２の実施の形態）
第１の実施の形態においては、クロック信号とＤＱＳ信号との位相差が１８０°以上となる場合には、位相差が０°近辺のパターンと同じパターンが現れることになる。たとえば、図７のパターン（２０）〜（３１）が、位相差が１８０°を超えた場合のものであり、パターン（１）〜（１９）と同様のパターンが現れるため、ＤＱＳ信号の遅延量を正しく算出することができなくなる。
【００９０】
本発明の第２の実施の形態においては、ＤＤＲ３  ＤＩＭＭ２が保持するＳＰＤ（Serial Presence Detect）情報を読み出してＤＩＭＭタイプを判定することによってＤＱＳ信号の遅延量を正しく算出するものである。なお、本発明の第２の実施の形態における制御回路の構成、スクリーニング処理の手順およびスクリーニング処理部の構成は、図１〜３に示すものと同様である。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【００９１】
ＤＱＳ出力位相調整回路１２は、スクリーニング処理後のパターンからＤＱＳ信号の遅延量を算出する際、ＤＤＲ３  ＤＩＭＭ２からＳＰＤ情報を読み出してＲａｍモジュールの配列数などを取得する。これによって、クロック信号の遅延量がある程度把握できるため、位相差が１８０°を超えると予想される場合には、ＤＱＳ信号の遅延量に１８０°を加算する。
【００９２】
たとえば、図７のパターン（２０）〜（３１）が１８０°を超える場合を示しているが、ＤＱＳ信号の遅延量を算出する際に、さらに１８０°を加算している。たとえば、パターン（２４）の場合、スクリーニング処理によって“１”から“ｂｏｔｈ”に変化して１つの境界のみが検出されたことを示している。このパターンにおいては、ＤＱＳ信号の立ち上がりが“ｂｏｔｈ”の中点に１８０°を加算したものとなるようにＤＱＳ信号の位相量（遅延量）が決定される。
【００９３】
以上説明したように、本実施の形態における半導体装置によれば、ＳＰＤ情報を参照することによってクロック信号の遅延量が１８０°を超えることが想定される場合には、さらに１８０°を加算してＤＱＳ信号の遅延量とするようにした。したがって、第１の実施の形態において説明した効果に加えて、ＤＱＳ信号の遅延量をさらに精度よく算出することが可能となった。
【００９４】
（第３の実施の形態）
第１および第２の実施に形態における半導体装置は、ＤＤＲ３−８００相当のＤＤＲ３  ＤＩＭＭを対象としており、さらに基準クロックの周波数が高くなった場合には、第１および第２の実施の形態において説明した方法ではＤＱＳ信号の遅延量を精度よく算出することができない。
【００９５】
本発明の第３の実施の形態における半導体装置においては、ライトレベリング時にのみ基準クロックをライトレベリング測定用クロックに切り替えるものである。なお、本発明の第３の実施の形態におけるスクリーニング処理の手順およびスクリーニング処理部の構成は、図２〜図３に示すものと同様である。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【００９６】
図８は、本発明の第３の実施の形態における半導体装置を含んだシステムの構成例を示すブロック図である。図１に示す第１の実施の形態における制御回路１と比較して、マルチプレクサ（ＭＵＸ）２０が追加されて点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【００９７】
通常動作時において、ＭＵＸ２０は、基準クロックを選択して出力する。また、ライトレベリング時において、ＭＵＸ２０は、ライトレベリング測定用クロックを選択して出力する。たとえば、基準クロックが８００ＭＨｚの場合には、ライトレベリング測定用クロックとして４００ＭＨｚのクロックが使用される。これによって、第１および第２の実施の形態において説明したものと同様の動作によって、ＤＱＳ信号の遅延量を算出することができる。
【００９８】
以上説明したように、本実施の形態における半導体装置によれば、ＭＵＸ２０が、基準クロックとライトレベリング測定用クロックとを切り替えるようにしたので、第１および第２の実施の形態において説明した効果に加えて、ＤＤＲ３−８００よりもさらに高速動作が可能となるＤＤＲ３−１６００などにも対応することが可能となった。
【００９９】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１００】
１  制御回路、２  ＤＤＲ３  ＤＩＭＭ、１１  ＭａｓｔｅｒＤＬＬ、１２  ＤＱＳ出力位相調整回路、１３  ＳｌａｖｅＤＬＬ、１４  ＲＥＡＤ  ＦＩＦＯ、１５  ＤＱ出力回路、１６  ＤＱＳ出力回路、１７  ＣＬＫ出力回路、１８，１９  入出力バッファ、２０  ＭＵＸ、２１−０〜２１−７  Ｒａｍモジュール、３１  走査データ格納部、３２  走査データ取得部、３３  変化間隔算出部、３４  最小変化間隔抽出部、３５  境界数カウント部、３６  境界数判定部、３７  走査データ更新部。
【図１】
2011253501.tif 000003
【図２】
2011253501.tif 000004
【図３】
2011253501.tif 000005
【図４】
2011253501.tif 000006
【図５】
2011253501.tif 000007
【図６】
2011253501.tif 000008
【図７】
2011253501.tif 000009
【図８】
2011253501.tif 000010