(57)【要約】【課題】データ信号の取り込みの誤動作を低減する。【解決手段】メモリから受信するデータストローブ信号を遅延する第１の可変遅延回路と，メモリから受信しデータストローブ信号に同期するデータ信号を可変遅延し，前記第１の可変遅延回路の遅延量と異なる遅延量を設定できる第２の可変遅延回路とを有するメモリコントローラ。【選択図】図１０
2015138485.tif 000002
【特許請求の範囲】
【請求項１】
メモリから受信するデータストローブ信号を遅延する第１の可変遅延回路（DL3）と，
前記メモリから受信し前記データストローブ信号に同期するデータ信号を可変遅延し，前記第１の可変遅延回路の遅延量と異なる遅延量を設定できる第２の可変遅延回路とを有するメモリコントローラ。
【請求項２】
請求項１において，更に，
前記第２の可変遅延回路で遅延した遅延データ信号を内部クロックに応答してラッチする第１のデータ信号ラッチ回路と，
前記データストローブ信号と前記内部クロックとの位相差を検出し，前記位相差を低減するように，前記第１の可変遅延回路の遅延量に対応する第１の可変遅延設定値を生成する位相比較部と，
前記第１のデータ信号ラッチ回路のセットアップマージンとホールドマージンを増大するようなオフセット値を前記第１の可変遅延設定値に加算して，前記第２の可変遅延回路の遅延量に対応する第２の可変遅延設定値を生成する加算器とを有するメモリコントローラ。
【請求項３】
請求項１または２において，
前記位相比較部が前記位相差が最小値になるような前記第１の可変遅延設定値を生成した状態で，前記第１のデータ信号ラッチ回路がラッチした既知データについての遅延データ信号が前記既知データと一致する，前記オフセット値の最大値と最小値の中間値が，前記オフセット値として設定されるメモリコントローラ。
【請求項４】
請求項１，２または３において，
前記内部クロックは，前記データストローブ信号のN倍（Nは正の整数）の周波数を有し，
更に，前記内部クロックをN分周し（360／N）×Mから（360／N）×（M+1）(Mは０から(N-1)の整数)の位相期間で一方のレベルになるN個のタイミングクロックを生成するクロックジェネレータと，
前記第１の可変遅延設定値の上位ビットに応じて前記N個のタイミングクロックから第１のタイミングクロックを選択する第１のセレクタと，
前記第２の可変遅延設定値の上位ビットに応じて前記N個のタイミングクロックから第２のタイミングクロックを選択する第２のセレクタとを有し，
前記第１の可変遅延回路は，前記第１の可変遅延設定値の下位ビットに応じた前記遅延量を有し，
前記第２の可変遅延回路は，前記第２の可変遅延設定値の下位ビットに応じた前記遅延量を有し，
前記位相比較部は，前記第１のタイミングクロックが前記一方のレベルになる期間で前記位相差を検出し，
前記第１のデータ信号ラッチ回路は，前記第２のタイミングクロックの前記一方のレベルになる期間で前記内部クロックに応答して前記遅延データ信号をラッチするメモリコントローラ。
【請求項５】
請求項１または２において，
更に，受信した前記データ信号を前記データストローブ信号の第１，第２のタイミングエッジでそれぞれラッチする第２，第３のデータ信号ラッチ回路を有し，
前記第２の可変遅延回路は，前記第２，第３のデータ信号ラッチ回路がラッチしたデータ信号をそれぞれ遅延する１対の第２の可変遅延回路を有し，
前記第１のデータ信号ラッチ回路は，前記１対の第２の可変遅延回路がそれぞれ遅延させた遅延データ信号をそれぞれラッチする１対の第１のデータ信号ラッチ回路を有するメモリコントローラ。
【請求項６】
演算処理部と，
前記演算処理部が要求するメモリアクセス要求に応答して，メモリにメモリアクセスを実行するメモリコントローラとを有し，
前記メモリコントローラは，
前記メモリから受信するデータストローブ信号を遅延する第１の可変遅延回路（DL3）と，
前記メモリから受信し前記データストローブ信号に同期するデータ信号を可変遅延し，前記第１の可変遅延回路の遅延量と異なる遅延量を設定できる第２の可変遅延回路（DL1,2）と
を有する情報処理装置。
【請求項７】
請求項６において，前記メモリコントローラは，更に，
前記第２の可変遅延回路で遅延した遅延データ信号を内部クロックに応答してラッチする第１のデータ信号ラッチ回路(66,68)と，
前記データストローブ信号と前記内部クロックとの位相差を検出し，前記位相差を低減するように，前記第１の可変遅延回路の遅延量に対応する第１の可変遅延設定値(DQPHASE-1)を生成する位相比較部(25)と，
前記第１のデータ信号ラッチ回路のセットアップマージンとホールドマージンを増大するようなオフセット値を前記第１の可変遅延設定値に加算して，前記第２の可変遅延回路の遅延量に対応する第２の可変遅延設定値(DQPHASE-2)を生成する加算器(99)とを有する情報処理装置。
【請求項８】
請求項６または７において，
前記位相比較部が前記位相差が最小値になるような前記第１の可変遅延設定値を生成した状態で，前記第１のデータ信号ラッチ回路がラッチした既知データについての遅延データ信号が前記既知データと一致する，前記オフセット値の最大値と最小値の中間値を，前記演算処理部が検出し，前記オフセット値として設定する情報処理装置。
【請求項９】
メモリから受信するデータストローブ信号を遅延する第１の可変遅延回路と，
前記メモリから受信し前記データストローブ信号に同期するデータ信号を可変遅延する第２の可変遅延回路と，
前記第２の可変遅延回路で遅延した遅延データ信号を内部クロックに応答してラッチする第１のデータ信号ラッチ回路と，
前記データストローブ信号と前記内部クロックとの位相差を検出し，前記位相差を低減するように，前記第１の可変遅延回路の遅延量に対応する第１の可変遅延設定値を生成する位相比較部と，
前記第１のデータ信号ラッチ回路のセットアップマージンとホールドマージンを増大するようなオフセット値を前記第１の可変遅延設定値に加算して，前記第２の可変遅延回路の遅延量に対応する第２の可変遅延設定値を生成する加算器とを有するメモリコントローラの制御方法であって，
前記位相比較部が前記位相差が最小値になるような前記第１の可変遅延設定値を生成した状態で，前記第１のデータ信号ラッチ回路がラッチした既知データについての遅延データ信号が前記既知データと一致する，前記オフセット値の最大値と最小値の中間値を，前記オフセット値として設定する工程を有するメモリコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，メモリコントローラ及び情報処理装置に関する。
【背景技術】
【０００２】
メモリコントローラは，演算処理装置（CPUチップ）に内蔵され，演算処理部（CPUコア）からのメモリアクセス要求に応答して，メインメモリへのメモリアクセスを制御する。または，メモリコントローラは，演算処理装置（CPUチップ）とメインメモリとの間に設けられ，演算処理装置からのメモリアクセスを制御する。
【０００３】
メインメモリとして，DDR（Double Data Rate）型のSDRAM（SDRAM：Synchronous Dynamic Random Access Memory）が広く利用されている。DDR型のSDRAMは，メモリコントローラからクロックを受信し，そのクロックに基づいて生成したデータストローブ信号（以下DQS信号）と，DQS信号の立ち上がりエッジと立ち下がりエッジに同期したデータ信号（以下DQ信号）とをメモリコントローラに返信する。そして，メモリコントローラは，DQS信号の立ち上がりエッジと立ち下がりエッジのタイミングを利用して，DQ信号のHレベルまたはLレベルをラッチする（または取り込む）。
【０００４】
DDR型のSDRAMは，例えばDDR3以降の規格では，メモリコントローラ２０はクロックCLKをメインメモリ３０内の複数のメモリチップに対してデイジーチェーンに接続する。そのため，各メモリチップから返信されるDQS信号の位相は，ばらばらであり一致していない。
【０００５】
そこで，メモリコントローラ内の信号受信回路に，DQS信号とDQ信号を遅延する可変遅延回路を設け，受信したDQS信号の位相が基準の内部クロックの位相と一致するようにDQS信号可変遅延回路の遅延量を設定し，同じ設定遅延量をDQ信号可変遅延回路にも設定し，DQ信号の位相を内部クロックの位相と擬似的に同期させることが提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１１／０７７５７３号
【特許文献２】特開２０１０−１２２８４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら，DQS信号の位相を内部クロックの位相と一致するようにDQS信号の可変遅延回路の遅延量を設定して，それと同じ遅延量をDQ信号の可変遅延回路に設定したとしても，DQS信号の可変遅延回路と，DQ信号の可変遅延回路との間には，特性のばらつきがあり，また，DQS信号の回路構成とDQ信号の回路構成とが異なり，且つチップ上の異なる位置に配置されているので，DQ信号の位相も内部クロックの位相と一致しない場合がある。
【０００８】
その結果，位相調整済みのDQ信号を内部クロックのタイミングでラッチすると，そのラッチ回路のセットアップマージンとホールドマージンが最大値にならない場合がある。その結果，DQ信号のデータの取り込みエラーを招く場合がある。
【０００９】
そこで，一つの実施の形態における目的は，DQ信号のデータの取り込みエラーを低減できるメモリコントローラ及び情報処理装置を提供することにある。
【課題を解決するための手段】
【００１０】
実施の形態の第１の側面は，メモリから受信するデータストローブ信号を遅延する第１の可変遅延回路と，
前記メモリから受信し前記データストローブ信号に同期するデータ信号を可変遅延し，前記第１の可変遅延回路の遅延量と異なる遅延量を設定できる第２の可変遅延回路とを有するメモリコントローラである。
【発明の効果】
【００１１】
第１の側面によれば，DQ信号のデータの取り込みエラーを低減できる。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態におけるメモリコントローラと，演算処理装置（CPUチップ）と，メインメモリとを有する情報処理装置の構成例を示す図である。
【図２】DQ信号受信回路の構成の一例を示す図である。
【図３】DQ信号受信回路の動作を示すタイミングチャート図である。
【図４】クロックジェネレータ３４の回路を示す図である。
【図５】クロックジェネレータ３４が生成する信号波形を示す図である。
【図６】位相比較部２５の詳細な回路を示す図である。
【図７】位相比較部２５と位相調整部２４とによる動作のフローチャート図である。
【図８】位相比較部２５内の位相判定部５８の動作を説明する図である。
【図９】図２のDQ信号受信回路の問題点を説明する図である。
【図１０】本実施の形態におけるDQ信号受信回路を示す図である。
【図１１】本実施の形態におけるオフセット値の設定例を示す図である。
【図１２】本実施の形態におけるCPUによるオフセット値設定工程のフローチャート図である。
【図１３】オフセット上限値と下限値と最適値の例を示す図である。
【発明を実施するための形態】
【００１３】
図１は，本実施の形態におけるメモリコントローラと，演算処理装置（CPUチップ）と，メインメモリとを有する情報処理装置の構成例を示す図である。図１の（Ａ）には，演算処理部（CPUコア）１２とメモリコントローラ２０とを有する演算処理装置（CPUチップ）１０と，メインメモリ３０とを有する情報処理装置（コンピュータシステム）が示されている。演算処理部（CPUコア）１２は，メモリコントローラ２０に対してメモリアクセス要求を発行し，メモリコントローラ２０はメモリアクセス要求に応答して，メインメモリ３０に対して図示しないコマンドとアドレスとクロックCLKを送信する。一方，メインメモリ３０は，読み出し要求の場合に，供給されたクロックCLKに基づいて生成したデータストローブ信号DQS（以下DQS信号）と，DQS信号の立ち上がりエッジと立ち下がりエッジに同期したデータ信号DQ(以下DQ信号）とを，メモリコントローラ２０に返信する。メモリコントローラ２０は，DQ信号受信回路２１を有し，DQ信号受信回路２１は，受信したDQS信号の位相に基づいてDQ信号を取り込む（ラッチする）。そして，メモリコントローラ２０は取り込んだDQ信号を演算処理部（CPUコア）１２に送信する。
【００１４】
図１の（Ｂ）には，演算処理部（CPUコア）１２を内蔵する演算処理装置（CPUチップ）１０と，演算処理装置１０とは異なるチップで構成されるメモリコントローラ２０と，メインメモリ３０とを有する情報処理装置が示されている。演算処理部（CPUコア）１２と，メモリコントローラ２０と，メインメモリ３０とのメモリアクセスに関する動作は，図１の（Ａ）と同様である。
【００１５】
DDR型のSDRAMは，DDR3以降の規格では，メモリコントローラ２０はクロックCLKをメインメモリ３０内の複数のメモリチップに対してデイジーチェーンに接続する。その結果，各メモリチップから返信されるDQS信号の位相は，ばらばらであり一致していない。
【００１６】
そこで，メモリコントローラ２０内のDQ信号受信回路２１は，DQ信号をDQS信号の位相に基づいて取り込む（ラッチする）とともに，DQS信号の位相とメモリコントローラ内の内部クロックとの位相との位相差が最小値になるように，取り込んだDQ信号の位相を可変調整し，位相調整されたDQ信号を内部クロックの位相に基づいて取り込む（ラッチする）。つまり，DQ信号受信回路２１は，DQ信号を，DQS信号のタイミングからメモリコントローラ２０や演算処理部１２側のクロックのタイミングに乗り換える処理を行う。
【００１７】
［DQ信号受信回路の概略説明］
図２は，DQ信号受信回路の構成の一例を示す図である。図３は，DQ信号受信回路の動作を示すタイミングチャート図である。
【００１８】
DQ信号受信回路２１は，内部クロックI_CLKからN（Nは正の整数）種類の位相，例えば４種類の位相を有する位相付きクロックCLK_0-270を生成するクロックジェネレータ３４とセレクタ３６を有するクロック生成部３７を有する。クロック生成部３７は，複数のメモリチップから受信するDQS信号の位相ばらつきが，内部クロックI_CLKの１周期を超える場合に，最適な位相付きクロックCLK_0-270を選択して，選択された位相付きクロックとDQS信号との位相を一致させるために設けられる。位相付きクロックについては後で詳述する。
【００１９】
更に，DQ信号受信回路２１は，位相付きクロックCLK_270に応答して内部クロックI_CLKをＮ分周した信号I_CLK/Nをラッチするラッチ回路３８とそのラッチした信号を差動クロックCKとして出力する出力バッファ４０とを有するクロック出力部４１とを有する。
【００２０】
また，DQ信号受信回路２１は，メインメモリ３０内のあるメモリチップから送信される差動のデータストローブ信号DQS，DQSxを入力するDQS入力バッファ４２と，同じメモリチップから送信される単相のデータ信号DQを入力するDQ入力バッファ４８とを有する。
【００２１】
メインメモリ３０内の各メモリチップは，クロックCKを受信する入力バッファ３１と，受信したクロックCKに基づいてDQS信号を出力するDQS信号を出力するDQS出力バッファ３２と，DQS信号の立ち上がりエッジと立ち下がりエッジに同期したDQ信号を出力するDQ出力バッファ３３とを有する。そして，メインメモリ３０内の各メモリチップは，DQS信号DQS,DQSxとDQ信号とをペアにして，メモリコントローラ２０に送信する。
【００２２】
このDQS信号は，メモリコントローラの内部クロックI_CLKの，１／N倍，例えば１／４倍の周波数（４倍の周期）を有する。しかし， DQ信号受信回路２１が受信するDQS信号と，内部クロックI_CLKの位相とは非同期であり，メモリ３０とDQ信号受信回路２１との間の伝送路の遅延時間が予想できない時間であるので，それらの位相差も予め予測できない。
【００２３】
したがって，メモリコントローラ２０内のDQ信号受信回路２１は，第１に，受信したDQS信号とDQ信号の位相は同期しているので，受信したDQS信号の立ち上がりエッジと立ち下がりエッジの位相に基づいて，DQ信号のHレベルまたはLレベルをラッチするDQ信号ラッチ回路５２，５４を含むDQ信号取り込み回路５５を有する。
【００２４】
第２に，DQ信号受信回路２１は，DQS信号の位相と内部クロックI_CLKの位相とが非同期であるので，内部クロックI_CLKとDQS信号の位相差を検出する位相検出部２５と，検出した位相差を減らす遅延，望ましくは最小値にする遅延を与えてDQ信号の位相を調整する位相調整部２４と，内部クロックI_CLKと位相差が減るように，望ましくは最小値になるように位相調整されたDQ信号を内部クロックI_CLKでラッチして，DQ信号のタイミングをDQS信号の位相から内部クロックI_CLKの位相に乗り換えるクロック乗り換え回路２９とを有する。
【００２５】
DQ信号取り込み回路５５は，９０°位相シフト回路４４が入力バッファ４２の出力の内部DQS信号dqsを９０°位相シフトした９０°位相シフト信号dqs90の両エッジのタイミングで，DQ入力バッファ４８が入力したDQ信号をラッチするDQ信号ラッチ回路５２，５４を有する。ラッチ回路５２は，９０°位相シフト信号dqs90の立ち上がりエッジに同期してDQ信号をラッチし，ラッチ回路５４は，９０°位相シフト信号dqs90の立ち下がりエッジに同期してDQ信号をラッチする。
【００２６】
位相調整部２４は，９０°位相シフトしたDQS信号dqs90を遅延して遅延DQS信号ddqsを生成する第３の可変遅延回路DL3と，ラッチ回路５２，５４でラッチされたDQ信号dqeven,dqoddを遅延して遅延DQ信号ddqeven,ddqoddを生成する第１，第２の可変遅延回路DL1,DL2とを有する。これらの可変遅延回路DL1,DL2,DL3は，後述する位相比較部２５が生成する可変遅延設定値DQPHASEに基づいて位相を進めたり遅らせたりする。
【００２７】
さらに，DQ信号受信回路２１は，DQS信号の位相と内部クロックI_CLKの位相とを比較して，位相調整用の可変遅延設定値DQPHASEを生成する位相比較部２５を有する。可変遅延設定値DQPHASEは，DQS信号と内部クロックI_CLKの位相差に対応して位相差を減らすように，望ましくは最小値になるようにする遅延量を示す値である。この可変遅延設定値DQPHASEは，上位ビットがセレクタ３６に供給される。それにより，セレクタ３６は，４つの位相付きクロックCLK_0-CLK_270からDQS信号の位相に最も近い内部クロックI_CLKの立ち下がりエッジの位相を選択する位相付きクロックを選択する。また，可変遅延設定値DQPHASEは，下位ビットが第１，第２，第３の可変遅延回路DL1,DL2,DL3に供給される，それにより，DQS信号dqs90と，DQ信号dqeven,dqoddは，可変遅延設定値DQPHASEの下位ビットに対応する遅延時間だけ遅延される。
【００２８】
［クロック生成部３７］
位相比較部２５の詳細を説明する前に，クロック生成部３７について説明する。クロック生成部３７は，クロックジェネレータ３４とセレクタ３６とを有する。
【００２９】
図４は，クロックジェネレータ３４の回路を示す図である。また，図５は，クロックジェネレータ３４が生成する信号波形を示す図である。クロックジェネレータ３４は，内部クロックI_CLKに応答して動作するリングオシレータを有し，リングオシレータは２つのフリップフロップFF1,FF2をリング状に接続して構成される。フリップフロップFF1の非反転出力はフリップフロップFF2の入力に接続され，フリップフロップFF2の反転出力はフリップフロップFF1の入力に接続される。そして，リングオシレータは，図５に示すように，内部クロックI_CLKを４分周して４倍の周期を有する４相クロックQ0-Q3を生成する。
【００３０】
図５に示すように，内部クロックI_CLKの連続する立ち下がりエッジを０°，９０°，１８０°，２７０°とすると，４相クロックQ0,Q1,Q2,Q3の立ち下がりエッジは，それぞれ，０°，９０°，１８０°，２７０°と一致する。そして，４相クロックQ0,Q1,Q2,Q3の周波数及び位相は，DQS信号の周波数及び位相と同じである。
【００３１】
さらに，図４のクロックジェネレータ３４は，４つのORゲートOR0,OR1,OR2,OR3を有し，各ORゲートは，１対の４相クロックQ3/Q0,Q0/Q1,Q1/Q2,Q2/Q3をそれぞれ入力し，位相付きクロックCLK_0,CLK_90,CLK_180,CLK_270を出力する。位相付きクロックCLK_0,CLK_90,CLK_180,CLK_270は，立ち下がりエッジがそれぞれ内部クロックI_CLKの０°，９０°，１８０°，２７０°の立ち下がりエッジと一致し，内部クロックI_CLKの１周期に対応するLレベル期間と３周期に対応するHレベル期間とを有する。
【００３２】
内部クロックI_CLKが，DQS信号のN倍（Nは正の整数）の周波数を有する場合，クロックジェネレータ３４は，N（=２n）分周したクロックからN個の位相付きクロックを生成する。その場合，クロックジェネレータ３４は，n個のフリップフロップを接続したリングオシレータでN相のクロックを生成し，N相のクロックを組み合わせて，DQS信号に対するN個の位相を有し（360／N）×Mから（360／N）×（M+1）(Mは０から(N-1)の整数)の位相期間で一方のレベルになるN個のタイミングクロックを生成する。
【００３３】
［位相比較部］
図６は，位相比較部２５の詳細な回路を示す図である。位相比較部２５は，前述のとおり，DQS信号と内部クロックI_CLKとの位相を比較し，位相差が減るように，望ましくは最小値になるような可変遅延設定値QDPHASEを生成する。但し，DQS信号は内部クロックI_CLKの４倍の周期を有するので，DQS信号の立ち下がりエッジと最も近いタイミングの内部クロックI_CLKの立ち下がりエッジとで位相比較をするために，クロックジェネレータ３４が４つの位相付きクロックCLK_0,CLK_90,CLK_180,CLK_270を生成し，セレクタ３６がいずれかの位相付きクロックを選択する。その選択された位相付きクロックの立ち下がりエッジがイネーブルクロックとして位相比較部２５に供給される。そして，位相比較部２５は，イネーブルクロックがLレベルの期間中の内部クロックI_CLKの立ち下がりエッジと，DQS信号の立ち下がりエッジとを位相比較する。
【００３４】
位相比較部２５は，遅延DQS信号ddqsを微少な固定幅だけ遅延する遅延回路DL4と，遅延回路DL4の入力ddqs(a)と出力ddqs(b)を，位相付きクロックCLK_0-270のLレベル期間中に，内部クロックI_CLKの立ち下がりエッジに同期してラッチするラッチ回路５６とを有する。つまり，位相付きクロックCLK_0-270のLレベルにより，ラッチ回路５６がイネーブル状態になる。
【００３５】
さらに，位相比較部２５は，ラッチ回路５６がラッチしたddqs(a),ddqs(b)のデータである位相情報１，２に基づいて，遅延DQS信号ddqsの立ち下がりエッジと内部クロックI_CLKの立ち下がりエッジとの間の位相差を判定する位相判定部５８を有する。そして，位相比較部２５は，位相判定部５８の位相判定結果に基づいて，位相差を減らすように可変遅延設定値DQPHASEを生成する可変遅延制御部５９を有する。
【００３６】
次に，位相比較部２５の動作について説明する。図７は，位相比較部２５と位相調整部２４とによる動作のフローチャート図である。図８は，位相比較部２５内の位相判定部５８の動作を説明する図である。
【００３７】
図７のフローチャート図に示されるとおり，位相比較部２５の位相判定部５８は，遅延DQS信号ddqsの立ち下がりエッジと，位相付きクロックCLK_0-270のLレベル期間中の内部クロックI_CLKの立ち下がりエッジとの位相比較を行う（S1)。位相判定結果が進みの場合（S2の進み），可変遅延制御部５９は可変遅延回路DL3の可変遅延設定値DQPHASEを＋１して可変遅延回路DL3の遅延量を増加する（S3)。位相判定結果が遅れの場合（S2の遅れ），可変遅延制御部５９は可変遅延回路DL3の可変遅延設定値DQPHASEを−１して可変遅延回路DL3の遅延量を減少する（S4）。
【００３８】
そして，位相判定部５８は，上記の位相比較S1，位相判定S2，可変遅延設定値の調整S3,S4を，位相判定S2で位相が一致（位相差ゼロまたは最小値）になるまで繰り返す。位相判定S2で位相が一致したこと（または位相差が最小値になったこと）が検出されれば，位相比較部２５と位相調整部２４とによる位相調整動作は終了する。可変遅延設定値DQPHASEは，第１，第２の可変遅延回路DL1,DL2にも供給され，その出力である遅延DQ信号ddqeven,ddqoddの位相は，内部クロックI_CLKの立ち下がりエッジの位相と一致するまたは最も近づく。
【００３９】
図６に戻り，可変遅延回路DL3が９０°位相シフトDQS信号dqs90を可変遅延設定値DQPHASEだけ遅延して遅延DQS信号ddqs(a)を出力し，更に，可変遅延回路DL4が遅延DQS信号ddqs(a)を微小な固定遅延だけ遅延してもう一つの遅延DQS信号ddqs(b)を出力する。
【００４０】
図８の位相比較部２５の位相判定部５８の動作説明図に示されるとおり，ラッチ回路５６は，位相付きクロックCLK_270のLレベル期間中の内部クロックI_CLKの立ち下がりエッジに同期して，２つの遅延DQS信号ddqs(a),ddqs(b)をラッチする。図８の例では，位相付きクロックCLK_270のLレベル期間中の内部クロックI_CLKの立ち下がりエッジで，遅延DQS信号ddqs(a),ddqs(b)をラッチしている。そして，位相判定部５８が，ラッチ回路５６によりラッチされた位相情報２，１に基づいて，遅延DQS信号ddqs(a),ddqs(b)の立ち下がりエッジが内部クロックI_CLKの立ち下がりエッジに対して位相が進んでいるか遅れているか一致（または最も近接）しているかを検出する。
【００４１】
図８の位相比較真理値表に示されるように，ラッチ回路５６がラッチした位相情報２，１が「００」の場合は，遅延DQS信号ddqs(a),ddqs(b)の立ち下がりエッジが内部クロックI_CLKの立ち下がりエッジに対して位相が進んでいることを示す。また，「１０」の場合は一致していることを示し，「１１」の場合は遅れていることを示す。ただし，「０１」の場合は異常状態であり無視する。
【００４２】
［DQ信号受信回路の動作］
図２のDQ信号受信回路の動作について，図３のタイミングチャートを参照して説明する。図３のタイミングチャートは，既にDQS信号ddqs(a)と内部クロックI_CLKの位相が一致または最も近接するように位相調整済みの状態の動作を示している。
【００４３】
DQ信号受信回路２１は，受信したDQ信号dqsを９０°位相シフト回路４４で９０°位相シフトして，９０°位相シフト信号dqs90を生成する。図３中に矢印（１）で示すとおりである。そして，DQ信号ラッチ回路５２は，９０°位相シフト信号dqs90の立ち上がりエッジに同期してDQ信号の偶数番目のデータをラッチし，DQ信号ラッチ回路５４は，９０°位相シフト信号dqs90の立ち下がりエッジに同期してDQ信号の奇数番目のデータをラッチする。図３中に矢印（２）で示すとおりである。
【００４４】
次に，位相調整部２４の第３の可変遅延回路DL3が９０°位相シフト信号dqs90を可変遅延設定値DQPHASEに対応した遅延量だけ遅延させて，遅延DQS信号ddqsを生成する。図３中の矢印（３）参照。
【００４５】
位相比較部２５のラッチ回路５６は，位相付きクロックCLK_270に対応するevenイネーブル信号evenenがLレベルの期間中の内部クロックI_CLKの立ち下がりエッジ（図３中８番目の立ち下がりエッジ）で，遅延DQS信号ddqs(a),ddqs(b)をラッチする。そして，位相判定部５８と可変遅延制御部５９が，遅延DQS信号ddqs(a)の立ち下がりエッジと内部クロックI_CLKの８番目の立ち下がりエッジとの位相が近づくまたは一致若しくは最も近接するように（位相差が減るまたはゼロ若しくは最小値になるように），位相遅延設定値DQPHASEを生成する。
【００４６】
位相が一致若しくは最も近接した結果，図３では，第３の可変遅延回路DL3で遅延量DL3遅延した遅延DQS信号ddqsの立ち下がりエッジが，内部クロックI_CLKの８番目の立ち下がりエッジと，位相が一致若しくは最も近接している。
【００４７】
第１，第２の可変遅延回路DL1,DL2は，可変遅延設定値DAPHASEに対応する遅延量DL1,DL2で，ラッチしたDQ信号dqeven,dqoddを内部クロックI_CLKの１０番目，１２番目の立ち下がりエッジまでそれぞれ遅延して，遅延DQ信号ddqeven,ddqoddを出力する。図３中（４）を参照。
【００４８】
そして，クロック乗り換え回路２９内のラッチ回路６６は，データd02の遅延DQ信号ddqevenを，位相付きクロックCLK_270に対応するevenイネーブル信号evenenがLレベルの期間中の内部クロックI_CLKの１２番目の立ち下がりエッジでラッチして，内部同期DQ信号Idqeven(d02)を出力する。同様に，ラッチ回路６８は，データd03の遅延DQ信号ddqoddを，位相付きクロックCLK_90に対応するoddイネーブル信号oddenがLレベルの期間中の内部クロックI_CLKの１４番目の立ち下がりエッジでラッチして，内部同期DQ信号Idqodd(d03)を出力する。図３中の矢印（５）参照。これにより，DQ信号は，DQS信号のタイミングから内部クロックI_CLKのタイミングに乗り換えを完了する。
【００４９】
次に，セレクタ３１は，図５の４分周クロックQ0に対応するセレクト信号SELが立ち上がるタイミング（内部クロックI_CLKの１４番目の立ち下がりエッジ）で，内部同期DQ信号Idqeven(d02)を選択し，セレクト信号SELが立ち下がるタイミング（内部クロックI_CLKの１６番目の立ち下がるエッジ）で，内部同期信号DQ信号Idqodd(d03)を選択する。図３中の矢印（６）参照。これで，セレクタ３１の出力であるDQ出力信号dqoは，2倍の周波数に変換される。
【００５０】
さらに，ラッチ回路７４は，内部クロックI_CLKの立ち下がりエッジで，セレクタ３１が選択したDQ出力信号dqoをラッチし，DQ信号としてCPU１２に出力する。このDQ出力信号dqoは，メインメモリ３０から受信したDQ信号と同様にDQS信号の１／２周期毎に変化するデータ信号と同じ周期であり，内部クロックI_CLKの立ち下がりエッジに同期するデータ信号である。
【００５１】
ここで，クロックジェネレータ３４が，位相付きクロックCLK_0，CLK_90，CLK_180，CLK_270を生成する意義について説明する。図２のDQ信号受信回路２１において，位相調整回路２４内の可変遅延回路DL3は，DQS信号の位相を内部クロックI_CLKの位相と一致または最も近接させるための微調整用回路である。一方，クロックジェネレータ３４とセレクタ３６は，DQS信号の位相を内部クロックI_CLKの位相と一致させるための粗調整用回路である。
【００５２】
すなわち，位相調整回路２４内の可変遅延回路DL1,DL2,DL3は，可変遅延設定値DQPHASEの下位ビットに対応する遅延量であり，DQS信号の位相を９０°の範囲内で位相調整するに必要な遅延量しか持っていない。それにより，可変遅延回路の回路規模を小さくすることができる。一方で，セレクタ３６には，可変遅延設定値DQPHASEの上位２ビットが供給され，可変遅延設定値DQPHASEが微調整範囲を超えて変化したことに応答して，その上位２ビットが変化してセレクタ３６を切り替え，位相付きクロックを＋９０°または−９０°位相が異なるものに切り替える。その場合，可変遅延設定値DQPHASEのうち，可変遅延回路DL3に供給する下位ビットはリセットされる。
【００５３】
このように，４つの位相付きクロックCLK_0-270を適宜選択して内部クロックI_CLKの立ち下がりエッジを選択できるようにすることで，DQS信号の位相ずれが内部クロックI_CLKの１周期（または，DL3の遅延調整可能範囲）を超える場合でも，同じ可変遅延回路DL1,DL2,DL3を利用して，DQS信号の立ち下がりエッジが内部クロックI_CLKの立ち下がりエッジと一致または最も近接するように位相調整することができる。
【００５４】
［本実施の形態のDQ信号受信回路］
図９は，図２のDQ信号受信回路の問題点を説明する図である。図９には，図２と同じDQ信号受信回路２１が示されている。DQ信号受信回路２１は，受信したDQS信号の位相を９０°位相シフトしたDQS信号dqs90を第３の可変遅延回路DL3で遅延し，その遅延DQS信号ddqsの立ち下がりエッジと，内部クロックI_CLKの立ち下がりエッジの位相が一致または最も近接するように制御する。したがって，ノードN1に生成される９０°位相シフトしたDQS信号dqs90をノードN3まで伝播させ，ノードN2に生成される内部クロックI_CLKをノードN3まで伝播させ，伝播してきた遅延DQS信号ddqsと内部クロックI_CLKの位相をノードN3で一致または最も近接するように制御する。
【００５５】
一方，DQ信号については，ラッチ回路６６，６８が，ノードN4で遅延DQ信号ddqeven, ddqoddを内部クロックI_CLKの立ち下がりエッジに応答してラッチする。したがって，遅延DQ信号ddqeven, ddqoddのラッチタイミングは，DQ信号側は，ノードN1からノードN4までの信号伝播時間と，クロック側は，ノードN2からノードN4までの信号伝播時間の影響を受ける。そして，ノードN1からN3までの信号伝播時間とノードN2からN3までの信号伝播時間は，ノードN1からN4までの信号伝播時間とノードN2からN4までの信号伝播時間と，ミクロ的には同じではない。
【００５６】
また，第３の可変遅延回路DL3と第１，第２の可変遅延回路DL1,DL2とは，チップ上の異なる位置に，異なる向きに，そして，場合によっては比較的遠い位置に配置されるので周囲の回路からの影響力も異なり，たとえ同じ回路であっても，互いの遅延特性が異なる。
【００５７】
さらに，第３の可変遅延回路DL3と第１，第２の可変遅延回路DL1,DL2のそれぞれの前段回路構成と，後段回路構成とが異なることによっても，ノードN4でのタイミング関係が，ノードN3でのタイミング関係と異なることが発生する。
【００５８】
その結果，DQS信号と内部クロックI_CLKの位相を一致または最も近接させた遅延設定値DQPHASEでDQ信号を遅延させたとしても，ラッチ回路６６，６８は，必ずしも遅延DQ信号ddqeven, ddqoddのセットアップマージンとホールドマージンとが最大化するタイミングで，内部クロックI_CLKの立ち下がりエッジを受信するとは限らない。もし，内部クロックI_CLKの立ち下がりエッジの受信タイミングが，遅延DQ信号ddqeven，ddqoddの中心タイミングからずれていると，ラッチ回路６６，６８におけるセットアップマージンまたはホールドマージンのいずれかが小さくなり，誤ったデータをラッチするリスクが増大する。特に，DDR型のSDRAMの場合，DQS信号の周波数がより高周波化しており，誤ったデータをラッチするリスクが高まっている。
【００５９】
図１０は，本実施の形態におけるDQ信号受信回路を示す図である。図１０のDQ信号受信回路２１が，図２のDQ信号受信回路と異なる構成は，DQS信号を遅延する可変遅延回路DL3の遅延量を設定する第１の可変遅延設定値DQPHASE-1にオフセットを加算して，DQ信号を遅延する可変遅延回路DL1,DL2に対する第２の可変遅延設定値DQPHASE-2を生成するオフセット加算器９９を有することにある。それに伴って，DQ信号受信回路２１は，DQ信号をラッチするための制御信号evenen,odden,selを，オフセットが加算された第２の可変遅延設定値DQPHASE-2の上位2ビットに基づいて選択する第２のセレクタ３６−２を有する。
【００６０】
CPU１２は，トレーニング期間において，位相比較部２５により位相差をゼロまたは最小値にする第１の可変遅延設定値DQPHASE-1を検出した状態で，オフセット最適値を検出する。すなわち，CPU１２は，オフセット加算器９９にセットするオフセット値OFFSETを＋方向と−方向に変化させながら，メインメモリ３０から既知のデータを読み出し，読み出したDQ信号が期待値と一致するか否かを判定することで，オフセット下限値と上限値を求める。そして，CPU１２は，求めたオフセット下限値と上限値からオフセット最適値を算出し，そのオフセット最適値をオフセット加算器９９に設定する。オフセット最適値は，例えばオフセット下限値と上限値の中央値である。
【００６１】
その結果，DQS信号とDQ信号の位相のずれが補正され，ラッチ回路６６，６８におけるセットアップマージンとホールドマージンとが最大化され，データ読み込みエラーを抑制することができる。しかも，CPU１２が既知のデータを読み出しながら最適なオフセット値を検出することができるので，DQ信号受信回路２１内に最適オフセット値を検出する専用回路を必要としない。
【００６２】
図１０のDQ信号受信回路２１において，図２と同様に，受信したDQS信号dqsを９０°位相シフトする９０°位相シフト回路４４と，９０°位相シフト信号dqs90の立ち上がりエッジと立ち下がりエッジで受信したDQ信号をラッチするラッチ回路５２と５４と，第１の可変遅延設定値DQPHASE-1の下位ビットに対応する遅延量，９０°位相シフト信号dqs90を遅延する第３の可変遅延回路DL3を有する位相調整部２４と，遅延DQ信号ddqsの立ち下がりエッジと内部クロックI_CLKの立ち下がりエッジとの位相差を検出し，検出した位相差を減少するように第１の可変遅延設定値DQPHASE-1を生成する位相比較部２５と，内部クロックI_CLKの立ち下がりエッジでラッチするラッチ回路７４とを有し，それらの動作は，図２−図８と同様である。したがって，それらによる位相比較と位相調整の動作についての説明は省略する。
【００６３】
図１０のDQ信号受信回路２１では，図２と異なり，第２，第３の可変遅延回路DL2,DL3は，第２の可変遅延設定値DQPHASE-2の下位ビットに基づく遅延量，ラッチされたDQ信号dqeven,dqoddを遅延し，第２のセレクタ３６−２が第２の可変遅延設定値DQPHASE-2の上位ビットに基づいて選択したイネーブル信号evenen,oddenのLレベルの期間で，内部クロックI_CLKの立ち下がりエッジに応答して遅延DQ信号ddqeven,ddqoddをラッチするラッチ回路６６，６８と，同じく選択した選択信号selに基づいて内部クロックI_CLKでラッチしたDQ信号Idqeven,Idqoddを選択するセレクタ３１とを有する。第２の可変遅延設定値DQPHASE-2の上位ビットは，加算器９９がオフセット値OFFSETを加算したことにより，第１の可変遅延設定値DQPHASE-1の上位ビットとは異なる場合がある。以下，これらについての動作の説明をする。
【００６４】
図１１は，本実施の形態におけるオフセット値の設定例を示す図である。図１１には，図３の破線部７０に示した遅延DQ信号ddqs,遅延DQS信号ddqeven,ddqoddと,イネーブル信号evenen,oddenとが示されている。また，図１１には，（２）オフセット値OFFSETがゼロの場合と，（１）オフセット値OFFSETがある場合（負の値）における遅延DQS信号ddqeven,ddqoddが示されている。
【００６５】
すなわち，図１１において，内部クロックI_CLKの２２番目の立ち下がりエッジと，遅延DQS信号ddqsの立ち上がりエッジとで，位相が一致または最も近接するように位相調整されている。そして，図中（２）に示されるとおり，第１の可変遅延設定値QDPHASEにオフセット値OFFSET=0を加算した第２の可変遅延設定値DQPHASE-2で可変遅延された遅延DQ信号ddqeven,ddqoddに対する，内部クロックI_CLKの２２番目の立ち下がりエッジに対するセットアップ量はホールド量より狭くなっている。そのため，DQ信号の取り込み動作が誤動作するリスクが増大する。
【００６６】
なお，セットアップ量から規格上必要なセットアップ時間を除いた時間がセットアップマージンであり，ホールド量から規格上必要なホールド時間を除いた時間がホールドマージンである。
【００６７】
一方，DQS信号の立ち下がりエッジと内部クロックI_CLKの立ち下がりエッジの位相を一致または最も近接するように位相調整されて第１の可変遅延設定値DQPHASE-1が確定した状態で，図中（１）に示されるとおり，オフセット値OFFSETを負側に変更することで，第２の可変遅延設定値DQPHASE-2で可変遅延された遅延DQ信号ddqeven,ddqoddに対する，内部クロックI_CLKの２２番目の立ち下がりエッジに対するセットアップ量とホールド量とが同等になり，セットアップマージンとホールドマージンとが最大化される。つまり，図１１において（１）オフセット値OFFSETありの場合は，第２の可変遅延設定値DQPHASE-2で可変遅延された遅延DQ信号ddqeven,ddqoddは，それぞれ，内部クロックI_CLKの20,22番目の立ち下がりエッジから24,26番目の立ち下がりエッジまでデータd02,d03を保持し，ラッチ回路６６，６８がラッチするタイミングである内部クロックI_CLKの22,24番目の立ち下がりエッジは，そのデータ保持期間のほぼ中心位置になっている。
【００６８】
図１１の（２）OFFSETなしの例のように，セットアップ量がホールド量より大きい場合は，オフセット値OFFSETを正側にすることで，同様に，セットアップ量とホール量とを等しい値にして最大化することができる。
【００６９】
図１２は，本実施の形態におけるCPUによるオフセット値設定工程のフローチャート図である。CPU１２は，メモリ３０内に展開したオフセット値設定プログラムを実行して，図１２のオフセット値設定工程を実行する。そして，CPUによるオフセット値設定工程は，例えば，電源起動時において実行される。または，動作環境，例えば温度などが変化したタイミングで実行してもよい。
【００７０】
事前処理として，CPU１２は，メモリ３０に対するリード要求を繰り返し，DQ信号受信回路２１は，メモリ３０から供給されるDQS信号と内部クロックI_CLKとの位相を一致または最も近接させるようにDQS信号の位相調整を行い，第１の可変遅延設定値DQPHASE-1を確定する。
【００７１】
そのように事前にDQS信号と内部クロックI_CLKの位相を一致または最も近接させる第１の可変遅延設定値DQPHASE-1を確定した状態で，CPU１２は，メモリ３０の所定のアドレスに予め決められたデータを書込む（S10）。そして，オフセット上限値を求める工程S11-S15と，オフセット下限値を求める工程S21-S25とを実行する。いずれの工程を先に行っても良い。
【００７２】
オフセット上限値を求める工程S11-S15では，CPU１２は，オフセット値をOFFSET=0に設定し（S11），メモリ３０から先に書込んだ既知のデータを読み出す（S12）。そして，DQ信号受信回路２１では，第２，第３の可変遅延回路DL1,DL2が，読み出されたDQ信号を， OFFSET=0の場合の第２の可変遅延設定値DQPHASE-2の下位ビットの遅延量で遅延し，ラッチ回路６６，６８が，第2の可変遅延設定値DQPHASE-2の上位ビットで選択したイネーブル信号evenen,oddenのL期間において，遅延DQ信号ddqeven,ddqoddを内部クロックI_CLKの立ち下がりエッジでラッチし，CPU１２に送信する。
【００７３】
CPU１２は，受信データと既知のデータとを比較し（S13），一致している場合はオフセット値OFFSETを増加させる（S14）。そして，新たに設定したオフセット値による第２の可変遅延設定値DQPHASE-2で，CPU１２は，再度メモリ３０から既知のデータを読み出し（S12），受信データと既知のデータとを比較する（S13）。このように，CPU１２は，工程S12-S14を受信データが既知のデータと不一致になるまで繰り返す。そして，受信データが既知のデータと不一致になる前のオフセット値OFFSETをオフセット上限値として記憶する（S15）。
【００７４】
次に，オフセット下限値を求める工程S21-S25では，CPU１２は，オフセット値をOFFSET=0に設定し（S21），メモリ３０から先に書込んだ既知のデータを読み出す（S22）。そして，DQ信号受信回路２１では，第２，第３の可変遅延回路DL1,DL2が，読み出されたDQ信号を， OFFSET=0の場合の第２の可変遅延設定値DQPHASE-2の下位ビットの遅延量で遅延し，ラッチ回路６６，６８が，第2の可変遅延設定値DQPHASE-2の上位ビットで選択したイネーブル信号evenen,oddenのL期間において，遅延DQ信号を内部クロックI_CLKの立ち下がりエッジでラッチし，CPU１２に送信する。
【００７５】
CPU１２は，受信データと既知のデータとを比較し（S23），一致している場合はオフセット値OFFSETを減少させる（S24）。つまり，オフセット値OFFSETは負側に増加される。そして，新たに設定したオフセット値による第２の可変遅延設定値DQPHASE-2で，CPU１２は，再度メモリ３０から既知のデータを読み出し（S22），受信データと既知のデータとを比較する（S23）。このように，CPU１２は，工程S22-S24を受信データが既知のデータと不一致になるまで繰り返す。そして，受信データが既知のデータと不一致になる前のオフセット値OFFSETをオフセット下限値として記憶する（S25）。
【００７６】
最後に，CPU１２は，例えば，オフセット上限値と下限値の中間値を，オフセット最適値として演算で求めて（S26），そのオフセット最適値をオフセット加算器９９内のレジスタに設定する（S27）。
【００７７】
図１３は，オフセット上限値と下限値と最適値の例を示す図である。図１３には，横軸のオフセット値に対して，読み出されたデータと既知の期待値との一致を丸（○）で示し，不一致をXで示す。例１では，オフセット下限値が−４，上限値が＋６であり，最適値は（−４＋６）／２＝＋１となる。例２では，オフセット下限値が−６，上限値が＋３であり，最適値は（−６＋３）／２＝−１または−２となる。いずれを最適値にするかについては，予め決定しておく。
【００７８】
また，本実施の形態において，オフセット最適値をオフセット上限値と下限値の中間値以外の値にしてもよい。例えば，ラッチ回路６６，６８の特性上，セットアップタイムよりホールドタイムを長くする必要がある場合は，それに対応させて，オフセット最適値をオフセット上限値と下限値の中間値よりややずらした値にして，セットアップマージンとホールドマージンを最大化するようにしてもよい。
【００７９】
以上のオフセットOFFSETを最適値に設定した結果，図１１の（１）のオフセット最適値のように，遅延DQ信号dqeven,dqoddをラッチするラッチ回路６６，６８の，内部クロックI_CLKの22,24番目の立ち下がりタイミングに対するセットアップマージンとホールドマージンとが最大値になり，DQ信号の取り込み動作の誤動作を抑制することができる。
【００８０】
本実施の形態によれば，DQ信号受信回路２１にオフセット加算器９９と，第２のセレクタ３６−２を設けるだけでよく，最適なオフセット値の検出と設定を行う回路を設ける必要はない。最適なオフセット値の検出と設定は，トレーニング期間中に，CPU１２がメモリ３０に対して読み出し動作を繰り返して行うことができる。
【符号の説明】
【００８１】
１２：CPU
２１：メモリコントローラ内のDQ信号受信回路
２４：位相調整部
２５：位相比較部
３０：メモリ
３４：クロックジェネレータ
３６：第１のセレクタ
３６−２：第２のセレクタ
５２，５４：第2のDQ信号ラッチ回路
６６，６８：第１のDQ信号ラッチ回路
９９：オフセット加算器
DQS:データストローブ信号
DQ：データ信号
DL3:第１の可変遅延回路
DL1,DL2:第２の可変遅延回路
DQPHASE-1:第１の可変遅延設定値
DQPHASE-2:第２の可変遅延設定値
OFFSET:オフセット値
【図１】
2015138485.tif 000003
【図２】
2015138485.tif 000004
【図３】
2015138485.tif 000005
【図４】
2015138485.tif 000006
【図５】
2015138485.tif 000007
【図６】
2015138485.tif 000008
【図７】
2015138485.tif 000009
【図８】
2015138485.tif 000010
【図９】
2015138485.tif 000011
【図１０】
2015138485.tif 000012
【図１１】
2015138485.tif 000013
【図１２】
2015138485.tif 000014
【図１３】
2015138485.tif 000015