(57)【特許請求の範囲】
【請求項１】
ストローブ信号のプリアンブル期間に続く前記ストローブ信号の第１方向の第１遷移のタイミングを、前記ストローブ信号に同期し連続して入力されるデータ列の先頭のデータに対するセットアップタイム及びホールドタイムを満たすタイミングにする第１の遅延量を前記ストローブ信号に与える第１の遅延回路と、
前記ストローブ信号の前記第１遷移よりも後に到来する前記第１方向の第２遷移のタイミングを、前記データ列における前記先頭のデータとは異なる奇数番目のデータに対するセットアップタイム及びホールドタイムのタイミングにする前記第１の遅延量とは異なる第２の遅延量を前記ストローブ信号に与える第２の遅延回路と、
前記第１遷移に応答して前記先頭のデータをラッチし、前記第２遷移に応答して前記奇数番目のデータをラッチするラッチ回路と、
を含むことを特徴とする受信回路。
【請求項２】
送信側に対する前記データのリクエストに応答して、前記第１の遅延量を有する前記ストローブ信号の前記第１方向の遷移でラッチされたデータと、前記第２の遅延量を有する前記ストローブ信号の前記第１方向の遷移でラッチされたデータとのいずれか一方を選択する選択回路を有することを特徴とする請求項１に記載の受信回路。
【請求項３】
送信側に対する前記データのリクエストに応答して、前記第１の遅延量を有する前記ストローブ信号及び前記第２の遅延量を有する前記ストローブ信号を選択的に前記ラッチ回路に出力する選択回路を有することを特徴とする請求項１に記載の受信回路。
【請求項４】
前記データのリクエストは、前記受信回路に接続されたメモリに対して出力されるリードコマンドであって、
前記データのリクエストの発行から所定時間経過後に、前記選択回路による選択を切り替える選択信号を出力する切替回路を有することを特徴とする請求項２又は３に記載の受信回路。
【請求項５】
前記切替回路は、前記リードコマンドの発行間隔に応じて、前記第１の遅延量の設定を変更することを特徴とする請求項４に記載の受信回路。
【請求項６】
コア回路と、コントローラと、インタフェース回路とを有し、
前記コア回路は、前記コントローラを介して前記インタフェース回路に接続された対象回路からデータを読み出し、
前記インタフェース回路は、前記対象回路から出力されるデータを、前記対象回路から出力されるストローブ信号に基づいて受信する受信回路を有し、
前記受信回路は、
前記ストローブ信号のプリアンブル期間に続く前記ストローブ信号の第１方向の第１遷移のタイミングを、前記ストローブ信号に同期し連続して入力されるデータ列の先頭のデータに対するセットアップタイム及びホールドタイムのタイミングにする第１の遅延量を前記ストローブ信号に与える第１の遅延回路と、
前記ストローブ信号の前記第１遷移よりも後に到来する前記第１方向の第２遷移のタイミングを、前記データ列における前記先頭のデータとは異なる奇数番目のデータに対するセットアップタイム及びホールドタイムのタイミングにする前記第１の遅延量とは異なる第２の遅延量を前記ストローブ信号に与える第２の遅延回路と、
前記第１遷移に応答して前記先頭のデータをラッチし、前記第２遷移に応答して前記奇数番目のデータをラッチするラッチ回路と、
を含むことを特徴とするシステム装置。
【請求項７】
ストローブ信号のプリアンブル期間に続く前記ストローブ信号の第１方向の第１遷移のタイミングを、前記ストローブ信号に同期し連続して入力されるデータ列の先頭のデータに対するセットアップタイム及びホールドタイムのタイミングにする第１の遅延量を前記ストローブ信号に与える第１の遅延回路と、
前記ストローブ信号の前記第１遷移よりも後に到来する前記第１方向の第２遷移のタイミングを、前記データ列における前記先頭のデータとは異なる奇数番目のデータに対するセットアップタイム及びホールドタイムのタイミングにする前記第１の遅延量とは異なる第２の遅延量を前記ストローブ信号に与える第２の遅延回路と、
前記第１遷移に応答して前記先頭のデータをラッチし、前記第２遷移に応答して前記奇数番目のデータをラッチするラッチ回路と、
を有する受信回路を含むことを特徴とする半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、受信回路、システム装置及び半導体記憶装置に関するものである。
【背景技術】
【０００２】
従来、半導体記憶装置としてＤＲＡＭ（Dynamic Random Access Memory）が用いられている。また、近年では、システムの動作速度の高速化に対応するため、クロックの立ち上がりと立ち下がりの双方でデータを入出力するダブルデータレート方式が採用されている。このような半導体記憶装置は、ＤＤＲ−ＳＤＲＡＭ（Double Data Rate Synchronous Dynamic Random Access Memory）、ＤＤＲ２−ＳＤＲＡＭやＤＤＲ３−ＳＤＲＡＭと呼ばれる。
【０００３】
例えばシステム装置がＤＤＲ−ＳＤＲＡＭ（メモリ）からデータを読み出す場合、ＤＤＲ−ＳＤＲＡＭは、リードデータを出力するとともに、そのリードデータに同期したデータストローブ信号を出力する。システム装置内の受信回路では、データストローブ信号のタイミングを調整し、そのタイミング調整されたデータストローブ信号に基づいてリードデータを取り込む。
【０００４】
図１８は、システム装置に備えられた従来の受信回路９０の一例を示す回路図である（例えば、特許文献１参照）。
この受信回路９０のフリップフロップ回路（ＦＦ回路）９１，９２の入力端子には、データ列ＤＱが入力される。また、遅延回路９３には、データ列ＤＱに同期したデータストローブ信号ＤＱＳが入力される。遅延回路９３は、データストローブ信号ＤＱＳの立ち上がりエッジがデータ列ＤＱのデータ有効期間（データ有効ウィンドウ）の中央付近に来るように、データストローブ信号ＤＱＳを所定時間遅延させて遅延信号ＤＱＳｄを生成する。ここで、データ列ＤＱのデータ有効期間（データ有効ウィンドウ）は、レシーバ側で確実にデータをサンプリングできる期間のことである。この遅延信号ＤＱＳｄは、ＦＦ回路９１のクロック端子に入力されるとともに、インバータ回路９４により論理反転されて反転信号ＤＱＳＸとしてＦＦ回路９２のクロック端子に入力される。ＦＦ回路９１は、遅延信号ＤＱＳｄの立ち上がりエッジでデータ列ＤＱを取り込む。また、ＦＦ回路９２は、反転信号ＤＱＳＸの立ち上がりエッジ（遅延信号ＤＱＳｄの立ち下がりエッジ）に応答してデータ列ＤＱを取り込む。このように、これらＦＦ回路９１，９２によって、データストローブ信号ＤＱＳ（遅延信号ＤＱＳｄ）の立ち上がりエッジと立ち下がりエッジに同期して、データ列ＤＱを取り込むことができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−８５６５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データストローブ信号ＤＱＳの各エッジにおいて、転送状態に依存して、対応するデータ列ＤＱを基準としたエッジの立ち上がり（立ち下がり）までのタイミングに差があると、各エッジに同じ遅延を与えた場合にデータ有効ウィンドウに対してタイミングマージンが厳しいエッジが生じることがあり、データ列ＤＱが正しく取り込めないことがある。
【課題を解決するための手段】
【０００７】
本発明の一観点によれば、ストローブ信号のプリアンブル期間に続く前記ストローブ信号の第１方向の第１遷移のタイミングを、前記ストローブ信号に同期し連続して入力されるデータ列の先頭のデータに対するセットアップタイム及びホールドタイムを満たすタイミングにする第１の遅延量を前記ストローブ信号に与える第１の遅延回路と、前記ストローブ信号の前記第１遷移よりも後に到来する前記第１方向の第２遷移のタイミングを、前記データ列における前記先頭のデータとは異なる奇数番目のデータに対するセットアップタイム及びホールドタイムのタイミングにする前記第１の遅延量とは異なる第２の遅延量を前記ストローブ信号に与える第２の遅延回路と、前記第１遷移に応答して前記先頭のデータをラッチし、前記第２遷移に応答して前記奇数番目のデータをラッチするラッチ回路と、を含む。
【発明の効果】
【０００８】
本発明の一観点によれば、タイミングエラーの発生を抑制することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】システムの概略ブロック図。
【図２】第１実施形態のインタフェース回路を示すブロック図。
【図３】第１実施形態の遅延回路の動作を示す波形図。
【図４】第１実施形態の受信回路の内部構成例を示すブロック回路図。
【図５】切替回路の内部構成例を示す回路図。
【図６】（ａ）、（ｂ）は、切替回路の動作を示す説明図。
【図７】第１実施形態のインタフェース回路の動作を示す波形図。
【図８】第２実施形態のインタフェース回路を示すブロック図。
【図９】第２実施形態の切替回路の内部構成例を示す回路図。
【図１０】第２実施形態の切替回路の動作を示すテーブル。
【図１１】第２実施形態の切替回路の動作を示す波形図。
【図１２】第２実施形態のインタフェース回路の動作を示す波形図。
【図１３】第３実施形態のメモリの内部構成例を示すブロック図。
【図１４】第３実施形態のメモリの動作を示す波形図。
【図１５】第３実施形態のメモリの動作を示す波形図。
【図１６】変形例の受信回路の内部構成例を示すブロック回路図。
【図１７】変形例の受信回路の内部構成例を示すブロック回路図。
【図１８】従来の受信回路を示すブロック回路図。
【図１９】（ａ）、（ｂ）は、データストローブ信号の波形を説明するための波形図。
【図２０】データストローブ信号の波形についてのシミュレーション結果。
【図２１】従来のデータとデータストローブ信号との関係を示す波形図。
【発明を実施するための形態】
【００１０】
（第１実施形態）
以下、第１実施形態を図１〜図７に従って説明する。
図１に示すように、システムは、システム回路１０（システム装置）と、システム回路１０によってアクセスされるメモリ２０（対象回路）とを有している。システム回路１０は、例えば１つのチップ（半導体集積回路装置：ＬＳＩ）である。メモリ２０は、同期式の半導体記憶装置、例えばダブルレート方式のダイナミックランダムアクセスメモリ（Double Data Rate Synchronous Dynamic Random Access Memory：ＤＤＲ−ＳＤＲＡＭ）である。なお、本実施形態のメモリ２０では、バースト長が４ワードに設定されている。
【００１１】
次に、システム回路１０の内部構成例を説明する。
コア回路１１は、実行する処理に応じて、メモリ２０のデータを読み込むためのリード要求と、そのデータが格納されたアドレスとをメモリコントローラ１２に出力する。また、コア回路１１は、メモリ２０にデータを書き込むためのライト要求と、そのデータを格納するアドレスとをメモリコントローラ１２に出力する。なお、コア回路１１は、例えば中央処理装置（Central Processing Unit:ＣＰＵ）である。
【００１２】
メモリコントローラ１２は、当該メモリコントローラ１２の内部クロック信号ＣＬＫ（図２参照）を、インタフェース回路１３を介して相補のクロック信号ＣＫ，ＸＣＫとしてメモリ２０に供給する。
【００１３】
また、メモリコントローラ１２は、コア回路１１からの要求に応じて、インタフェース回路１３を介してメモリ２０をアクセスする。例えばコア回路１１からの要求がリード要求の場合には、メモリコントローラ１２は、インタフェース回路１３を介してコマンドＣＭＤ（ここでは、リードコマンド）及びアドレスをメモリ２０に供給する。すると、メモリ２０は、リードコマンドに応答し、該当アドレスから読み出したデータ列ＤＱと、そのデータ列ＤＱに同期したデータストローブ信号ＤＱＳとを、インタフェース回路１３を介してメモリコントローラ１２に出力する。このとき、メモリ２０は、相補のクロック信号ＣＫ，ＸＣＫに同期してデータ列ＤＱをバースト出力する、すなわちメモリコントローラ１２の内部クロック信号ＣＬＫ（図２参照）の２倍の周波数でデータ列ＤＱをバースト出力する。一方、コア回路１１からの要求がライト要求の場合には、メモリコントローラ１２は、インタフェース回路１３を介してライトコマンド、データ列ＤＱ、データストローブ信号ＤＱＳ、及びデータ列ＤＱを書き込むアドレスをメモリ２０に供給する。すると、メモリ２０は、該当するアドレスにデータ列ＤＱを記憶する。
【００１４】
メモリ２０とインタフェース回路１３との間では、データストローブ信号ＤＱＳによりデータ列ＤＱの授受が行われる。すなわち、インタフェース回路１３は、リード動作時に、メモリ２０から供給されるデータストローブ信号ＤＱＳのタイミングを調整し、タイミング調整されたデータストローブ信号ＤＱＳに同期してデータ列ＤＱを取り込み、その取り込んだデータ列ＤＱをメモリコントローラ１２に出力する。また、インタフェース回路１３は、ライト動作時に、メモリコントローラ１２から受け取ったデータ列ＤＱ及びデータストローブ信号ＤＱＳをメモリ２０に出力する。
【００１５】
次に、このインタフェース回路１３の内部構成例を図２に従って説明する。
送信回路３０内のコマンド送信回路３１は、メモリコントローラ１２から入力されるリードコマンドＲｅａｄに基づいて、リードデータイネーブル信号（以下、単に「イネーブル信号」とも言う。）ＲＥＮを生成する。具体的には、コマンド送信回路３１は、リードコマンドＲｅａｄの入力に応答してＨレベルとなるイネーブル信号ＲＥＮを生成する。そして、コマンド送信回路３１は、受信回路４０内の切替回路４９にイネーブル信号ＲＥＮを送信するとともに、メモリ２０にリードコマンドＲｅａｄを送信する。
【００１６】
バッファ回路３２は、メモリコントローラ１２から供給される内部クロック信号ＣＬＫに基づいて、その内部クロック信号ＣＬＫに同期した上記クロック信号ＣＫ，ＸＣＫを生成する。そして、バッファ回路３２は、クロック信号ＣＫ，ＸＣＫをメモリ２０に供給する。
【００１７】
続いて、インタフェース回路１３が有する受信回路４０の内部構成例を説明する。
受信回路４０内の遅延回路４１には、メモリ２０からデータストローブ信号ＤＱＳが供給される。この遅延回路４１は、データストローブ信号ＤＱＳを互いに異なる所定時間だけ遅延させた遅延データストローブ信号（以下、単に「遅延信号」とも言う。）ＤＱＳ１，ＤＱＳ２，ＤＱＳ３を生成する。
【００１８】
ここで、比較例として、データストローブ信号ＤＱＳの各立ち上がりエッジに同じ遅延量を与えた場合に発生する問題点について説明する。すなわち、データストローブ信号ＤＱＳを所定時間だけ遅延した遅延信号ＤＱＳｄによってデータ列ＤＱの奇数番目のデータをラッチする場合には、データ転送レートの上昇や電源電圧の低下等に起因して以下のような問題が発生することが本発明者らの考察やシミュレーション等によって明らかにされた。
【００１９】
詳述すると、図１９（ａ）に示すようにデータ転送レートが低い場合には、データストローブ信号ＤＱＳは十分な振幅が得られる。しかし、図１９（ｂ）に示すようにデータ転送レートが高くなると、データストローブ信号ＤＱＳでは十分な振幅が得られなくなる。すなわち、データ転送レートが高くなると、データストローブ信号ＤＱＳでは、プリアンブル期間後のトグルが開始された後において、信号レベルが所望のＬレベルまで下がらずに、次のＨレベルへの立ち上がりが開始されることになる。すると、データストローブ信号ＤＱＳでは、データ列ＤＱを取り込むのに有効な立ち上がりエッジのうち、プリアンブル期間に続く先頭の立ち上がりエッジの波形が他の立ち上がりエッジの波形と異なる（図１９（ｂ）の先頭立ち上がりエッジの隣に示された破線波形は、先頭以外の立ち上がりエッジの波形を参考として示したものである）。これは、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとにおいて、前の信号レベルの状態が異なることに起因している。すなわち、先頭立ち上がりエッジでは、その前にＬレベルが約１サイクル続くプリアンブル期間があるのに対し、先頭以外の立ち上がりエッジでは、その前の信号レベルがＨレベルとＬレベルとを繰り返している。このように前の信号レベルの状態が異なることに起因して、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なっている。換言すると、符号間干渉（ＩＳＩ：Inter Symbol Interference）の影響によって、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なっている。この符号間干渉は、データ転送レートが高くなるほど大きくなり、上述のようにデータ転送レートの上昇に伴ってデータストローブ信号ＤＱＳが十分な振幅を得られなくなると、その影響が波形の違いとして顕著に現れる。
【００２０】
なお、低電圧化のために電源電圧を下げた場合には、データストローブ信号ＤＱＳを駆動する出力トランジスタの駆動能力を大きくすることが困難であるため、上述した符号間干渉の影響がより顕著に現れる。
【００２１】
さらに、図２０に示すように、データ転送レートを高く、且つ電源電圧を低下させた場合のデータストローブ信号ＤＱＳの信号波形についてシミュレーションした結果からも、上述した問題が発生することが明らかにされた。すなわち、このシミュレーション結果から明らかなように、データストローブ信号ＤＱＳの信号波形は、立ち上がりエッジの波形が２つのグループ、つまり先頭立ち上がりエッジの波形（実線参照）と先頭以外の立ち上がりエッジの波形（破線参照）とに分かれている。換言すると、先頭立ち上がりエッジの波形が先頭以外の立ち上がりエッジの波形と異なっている。なお、データストローブ信号ＤＱＳの立ち下がりエッジについても、同様に２つのグループに分かれている。また、図２０においては、複数の信号波形が重なっているが、便宜上、１本の線で示している。
【００２２】
そして、このようにデータストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なると、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとでは、データ列ＤＱを取り込むためにデータストローブ信号ＤＱＳに与える最適なタイミング調整量（遅延量）が異なることになる。
【００２３】
詳述すると、まず、最適な遅延量とは、データ列ＤＱをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングでデータストローブ信号ＤＱＳのエッジが生じるように、データストローブ信号ＤＱＳのタイミングを調整するための遅延量のことである。より具体的には、最適な遅延量とは、図２１に示すように、上記セットアップタイムＴｓのマージンであるセットアップマージンＴｓｍとホールドタイムＴｈのマージンＴｈｍであるホールドマージンとが等しくなる最適なタイミングでデータストローブ信号ＤＱＳのエッジが生じるように、データストローブ信号ＤＱＳのタイミングを調整するための遅延量のことである。換言すると、データストローブ信号ＤＱＳのエッジのタイミングを最適なタイミングまでずらすのに必要な遅延量が最適な遅延量であると言える。
【００２４】
このため、データストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なると、図２１に示すように、先頭立ち上がりエッジのタイミングを最適なタイミングまでずらすのに必要な遅延量Ｔｄ１と先頭以外の立ち上がりエッジのタイミングを最適なタイミングまでずらすのに必要な遅延量Ｔｄ２とが異なることになる。具体的には、図２１に示すようにデータストローブ信号ＤＱＳの先頭立ち上がりエッジの立ち上がりタイミングがそれ以外の立ち上がりエッジの立ち上がりタイミングよりも遅くなると、遅延量Ｔｄ１が遅延量Ｔｄ２よりも小さくなる。したがって、例えば図２１に示すように、データストローブ信号ＤＱＳの各立ち上がりエッジに対して単一の遅延量Ｔｄ２を与える場合には、先頭立ち上がりエッジに対する遅延量がデータ有効ウィンドウに対して適切な遅延量ではないため、先頭立ち上がりエッジによってデータ列ＤＱを正しくラッチできない場合がある。詳しくは、上記遅延量Ｔｄ２を有する遅延信号ＤＱＳｄの各立ち上がりエッジでデータ列ＤＱの奇数番目のデータをラッチする場合には、遅延信号ＤＱＳｄの２番目の立ち上がりエッジがデータ列ＤＱの３番目のデータＤ２をラッチするための最適なタイミングで発生するため、そのデータＤ２を正しくラッチすることができる。しかし、上記遅延量Ｔｄ２がデータストローブ信号ＤＱＳの先頭立ち上がりエッジに対する最適な遅延量Ｔｄ１よりも大きいため、遅延信号ＤＱＳｄの先頭立ち上がりエッジが先頭データＤ０をラッチするための最適なタイミングよりも遅く発生する。このとき、図２１に示すように、遅延信号ＤＱＳｄの先頭立ち上がりエッジからデータ列ＤＱが変化するタイミングまでの時間Ｔｈ１がホールドタイムＴｈよりも短くなると、ホールドエラーとなり、先頭データＤ０を正しくラッチできないという問題が発生する。
【００２５】
そこで、図２に示すように、本実施形態の遅延回路４１は、先頭立ち上がりエッジ（第１方向の第１遷移）用の第１遅延回路４２と、先頭以外の立ち上がりエッジ（第１方向の第２遷移）用の第２遅延回路４３と、立ち下がりエッジ用の第３遅延回路４４とを有している。
【００２６】
第１遅延回路４２は、図３に示すように、データストローブ信号ＤＱＳに第１の遅延量Ｔ１を与えて第１遅延信号ＤＱＳ１を生成する。具体的には、第１遅延回路４２は、データストローブ信号ＤＱＳのプリアンブル期間に続く先頭の立ち上がりエッジのタイミングを、データ列ＤＱの先頭データＤ０をラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとするように、データストローブ信号ＤＱＳに第１の遅延量Ｔ１を与える。より具体的には、第１遅延回路４２は、データストローブ信号ＤＱＳの先頭の立ち上がりエッジのタイミングを、先頭データＤ０に対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号ＤＱＳに第１の遅延量Ｔ１を与える。上記第１の遅延量Ｔ１は、予めシミュレーション等によって設定された遅延時間である。ここでは、信号の立ち上がり部分の中央を基準点とし、データストローブ信号ＤＱＳの基準点から第１遅延信号ＤＱＳ１の基準点までの時間が上記第１の遅延量Ｔ１となる。このように、第１遅延回路４２は、先頭立ち上がりエッジ用にデータストローブ信号ＤＱＳのタイミングを調整した第１遅延信号ＤＱＳ１を生成する。
【００２７】
第２遅延回路４３は、データストローブ信号ＤＱＳに第２の遅延量Ｔ２（例えば、信号ＤＱＳの位相の９０度分）を与えて第２遅延信号ＤＱＳ２を生成する。具体的には、第２遅延回路４３は、データストローブ信号ＤＱＳの２番目以降の立ち上がりエッジのタイミングを、データ列ＤＱの先頭データＤ０以外の奇数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとなるように、データストローブ信号ＤＱＳに第２の遅延量Ｔ２を与える。より具体的には、第２遅延回路４３は、データストローブ信号ＤＱＳの２番目以降の立ち上がりエッジのタイミングを、先頭データＤ０以外の奇数番目のデータに対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号ＤＱＳに第２の遅延量Ｔ２を与える。ここで、第２の遅延量Ｔ２は、上記第１の遅延量Ｔ１よりも長い時間である。また、この第２の遅延量Ｔ２は、予めシミュレーション等によって設定された遅延時間である。このように、第２遅延回路４３は、先頭立ち上がりエッジ以外の立ち上がりエッジ用にデータストローブ信号ＤＱＳのタイミングを調整した第２遅延信号ＤＱＳ２を生成する。
【００２８】
図２に示す第３遅延回路４４は、データストローブ信号ＤＱＳに第３の遅延量を与えて第３遅延信号ＤＱＳ３を生成する。具体的には、第３遅延回路４４は、上記第２遅延信号ＤＱＳ２を論理反転させた第３遅延信号ＤＱＳ３を生成する。すなわち、第３遅延回路４４は、データ列ＤＱの偶数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで立ち上がりエッジ（第２遅延信号ＤＱＳ２の立ち下がりエッジ）で発生するように、データストローブ信号ＤＱＳを遅延させた第３遅延信号ＤＱＳ３を生成する。このように、第３遅延回路４４は、立ち下がりエッジ用にデータストローブ信号ＤＱＳのタイミングを調整した第３遅延信号ＤＱＳ３を生成する。
【００２９】
ラッチ回路４５には、メモリ２０からデータ列ＤＱが供給される。具体的には、ラッチ回路４５には、バースト長に応じた数のデータを有するデータ列ＤＱがデータストローブ信号ＤＱＳに同期して連続的に入力される。このラッチ回路４５は、メモリ２０からダブルデータレートで出力されるデータ列ＤＱを、メモリコントローラ１２におけるクロック信号ＣＬＫの速度に合わせるための回路である。このラッチ回路４５は、複数のラッチ回路、つまり第１ラッチ回路４６と第２ラッチ回路４７と第３ラッチ回路４８とを有している。
【００３０】
第１ラッチ回路４６は、第１遅延信号ＤＱＳ１の立ち上がりエッジに同期してデータ列ＤＱをラッチし、そのラッチデータＤＬ１を選択回路Ｓ１に出力する。
第２ラッチ回路４７は、第２遅延信号ＤＱＳ２の立ち上がりエッジに同期してデータ列ＤＱをラッチし、そのラッチデータを選択回路Ｓ１又はメモリコントローラ１２に出力する。具体的には、第２ラッチ回路４７は、データ列ＤＱの先頭データＤ０や５番目のデータＤ４等についてラッチした場合には、そのラッチデータＤＬ２を選択回路Ｓ１に出力する。また、第２ラッチ回路４７は、データ列ＤＱの３番目のデータＤ２や７番目のデータＤ６等についてラッチした場合には、そのラッチデータＤＬ１３をメモリコントローラ１２に直接出力する（なお、詳細については、後述する図４の説明を参照）。
【００３１】
第３ラッチ回路４８は、第３遅延信号ＤＱＳ３の立ち上がりエッジ（第２遅延信号ＤＱＳ２の立ち下がりエッジ）に同期してデータ列ＤＱをラッチし、そのラッチデータＤＬ１２，ＤＬ１４をメモリコントローラ１２に出力する。
【００３２】
このようにして、ラッチ回路４５では、データストローブ信号ＤＱＳの立ち上がりエッジと立ち下がりエッジとに同期して、ダブルデータレートでのデータ列ＤＱの取り込みが実現される。
【００３３】
選択回路Ｓ１は、切替回路４９から入力される選択信号ＣＳに応じて、第１ラッチ回路４６からのラッチデータＤＬ１及び第２ラッチ回路４７からのラッチデータＤＬ２のいずれか一方を選択して受信する。具体的には、選択回路Ｓ１は、Ｈレベルの選択信号ＣＳに応答して、第１ラッチ回路４６からのラッチデータＤＬ１（第１遅延信号ＤＱＳ１によってラッチされたラッチデータＤＬ１）を選択して受信する。また、選択回路Ｓ１は、Ｌレベルの選択信号ＣＳに応答して、第２ラッチ回路４７からのラッチデータＤＬ２（第２遅延信号ＤＱＳ２によってラッチされたラッチデータＤＬ２）を選択して受信する。そして、選択回路Ｓ１は、選択して受信したデータをラッチデータＤＬ１１としてメモリコントローラ１２に出力する。
【００３４】
切替回路４９は、送信回路３０内のコマンド送信回路３１から入力するイネーブル信号ＲＥＮに基づいて上記選択信号ＣＳを生成する。具体的には、切替回路４９は、イネーブル信号ＲＥＮに応答して、その信号ＲＥＮの入力から所定時間経過後に所定時間だけＨレベルとなる選択信号ＣＳを生成する。より具体的には、選択信号ＣＳは、データ列ＤＱの先頭データＤ０がラッチデータＤＬ１として選択回路Ｓ１に入力される前にＨレベルに立ち上がる。さらに、選択信号ＣＳは、データ列ＤＱの先頭データＤ０が選択回路Ｓ１から出力された後であって、例えばデータ列ＤＱの３番目以降の奇数番目データ（本例では、５番目のデータＤ４）がラッチデータＤＬ２として選択回路Ｓ１に入力される前にＬレベルに立ち下がる。なお、イネーブル信号ＲＥＮの入力から先頭データＤ０がラッチデータＤＬ１として選択回路Ｓ１に入力されるまでの時間は、メモリ２０のリードレイテンシや回路構成等に基づいて予めシミュレーションによって求めることができる。このため、イネーブル信号ＲＥＮの入力から選択信号ＣＳをＨレベルに立ち上げるまでの時間は、例えばメモリ２０のリードレイテンシの長さ毎に予めシミュレーション等によって設定されている。
【００３５】
この選択信号ＣＳに応じて、上記選択回路Ｓ１では、第１遅延信号ＤＱＳ１によってラッチされた先頭データＤ０がラッチデータＤＬ１として受信され、第２遅延信号ＤＱＳ２によってラッチされた３番目以降の奇数番目データがラッチデータＤＬ２として受信される。ここで、図３に示すように、第１遅延信号ＤＱＳ１は、その先頭立ち上がりエッジがデータ列ＤＱの先頭データＤ０をラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで発生するようにタイミングが調整されている。このため、この第１遅延信号ＤＱＳ１によって先頭データＤ０をラッチすることにより（図３の上段の「ＤＱ」参照）、セットアップタイム及びホールドタイムを確実に確保することができ、上記先頭データＤ０を確実にラッチすることができる。したがって、選択回路Ｓ１は、先頭データＤ０が確実にラッチされたラッチデータＤＬ１を受信することができる。一方、第２遅延信号ＤＱＳ２は、その先頭立ち上がりエッジ以外の立ち上がりエッジがデータ列ＤＱの３番目以降の奇数番目データをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで発生するようにタイミングが調整されている。このため、この第２遅延信号ＤＱＳ２によって３番目以降の奇数番目データをラッチすることにより（図３の下段の「ＤＱ」参照）、セットアップタイム及びホールドタイムを確実に確保することができ、上記奇数番目データを確実にラッチすることができる。したがって、選択回路Ｓ１は、３番目以降の奇数番目データが確実にラッチされたラッチデータＤＬ２を受信することができる。
【００３６】
このように、受信回路４０では、データ列ＤＱの先頭データＤ０を第１遅延信号ＤＱＳ１によりラッチし、データ列ＤＱの３番目以降の奇数番目データを第２遅延信号ＤＱＳ２によりラッチすることによって、全ての奇数番目データを確実にラッチすることができる。換言すると、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量を第１の遅延量Ｔ１とし、先頭以外の立ち上がりエッジに対するタイミング調整量を上記第１の遅延量Ｔ１とは異なる第２の遅延量Ｔ２とすることにより、全ての奇数番目データを確実にラッチすることができる。
【００３７】
なお、第１遅延信号ＤＱＳ１の先頭以外の立ち上がりエッジは、データ列ＤＱの３番目以降の奇数番目データをラッチするための最適なタイミングよりも早く発生する。このため、第１ラッチ回路４６では、セットアップタイムが不足し、３番目以降の奇数番目データを正しくラッチできない場合がある。同様に、第２遅延信号ＤＱＳ２の先頭立ち上がりエッジは、データ列ＤＱの先頭データＤ０をラッチするための最適なタイミングよりも遅く発生する。このため、第２ラッチ回路４７では、ホールドタイムが不足し、データ列ＤＱの先頭データＤ０を正しくラッチできない場合がある。
【００３８】
次に、受信回路４０の具体的構成例を図４に従って説明する。
図４に示すように、バッファ回路Ｂ１には、メモリ２０からデータ列ＤＱが供給される。このバッファ回路Ｂ１の出力端子は、Ｄ−フリップフロップ回路（ＦＦ回路）Ｆ１，Ｆ３，Ｆ５，Ｆ６，Ｆ８の入力端子に接続されている。
【００３９】
バッファ回路Ｂ２には、メモリ２０からデータストローブ信号ＤＱＳが供給される。このバッファ回路Ｂ２の出力端子は、遅延同期ループ（Delay Locked Loop：ＤＬＬ）回路４１ａに接続されている。なお、バッファ回路Ｂ１，Ｂ２は、入力信号に対して出力信号のレベルが実質的に変更されないため、出力信号に入力信号と同じ符号を用いて説明する。
【００４０】
ＤＬＬ回路４１ａは、遅延回路４１の一例である。すなわち、ＤＬＬ回路４１ａは、第１遅延回路４２、第２遅延回路４３及び第３遅延回路４４としての機能を有し、第１〜第３遅延信号ＤＱＳ１〜ＤＱＳ３を生成する。そして、ＤＬＬ回路４１ａは、第１遅延信号ＤＱＳ１をアンド回路Ａ１に出力し、第２遅延信号ＤＱＳ２をアンド回路Ａ３，Ａ６に出力し、第３遅延信号ＤＱＳ３をアンド回路Ａ２，Ａ４，Ａ５，Ａ７，Ａ８に出力する。
【００４１】
アンド回路Ａ１には、第１遅延信号ＤＱＳ１と併せて、第１イネーブル信号ＥＮ１が入力される。このアンド回路Ａ１は、第１遅延信号ＤＱＳ１と第１イネーブル信号ＥＮ１とを論理積演算した結果を持つ信号をＦＦ回路Ｆ１のクロック端子に出力する。具体的には、アンド回路Ａ１は、Ｌレベルの第１イネーブル信号ＥＮ１が入力されている場合には、第１遅延信号ＤＱＳ１に関わらず、Ｌレベルの出力信号を出力する。一方、アンド回路Ａ１は、Ｈレベルの第１イネーブル信号ＥＮ１が入力されている場合に、第１遅延信号ＤＱＳ１を出力信号としてＦＦ回路Ｆ１に出力する。すなわち、第１イネーブル信号ＥＮ１がＨレベルのときに、第１遅延信号ＤＱＳ１が有効にされてＦＦ回路Ｆ１に出力される。ここで、第１イネーブル信号ＥＮ１は、例えばデータ列ＤＱの先頭データＤ０及び２番目のデータＤ１が受信回路４０に入力されるときにＨレベルとなる信号である。
【００４２】
ＦＦ回路Ｆ１は、アンド回路Ａ１の出力信号の立ち上がりエッジ、つまり第１イネーブル信号ＥＮ１がＨレベルであるときの第１遅延信号ＤＱＳ１の立ち上がりエッジに同期してデータ列ＤＱをラッチする。そして、ＦＦ回路Ｆ１は、そのラッチレベルと等しいレベルのラッチデータＤＬ１ａを、次段のＦＦ回路Ｆ２の入力端子に出力する。
【００４３】
アンド回路Ａ２には、第３遅延信号ＤＱＳ３と併せて、第１イネーブル信号ＥＮ１が供給される。このアンド回路Ａ２の出力端子は、ＦＦ回路Ｆ２のクロック端子に接続されている。
【００４４】
ＦＦ回路Ｆ２は、アンド回路Ａ２の出力信号の立ち上がりエッジ、つまり第１イネーブル信号ＥＮ１がＨレベルであるときの第３遅延信号ＤＱＳ３の立ち上がりエッジに同期してラッチデータＤＬ１ａをラッチする。そして、ＦＦ回路Ｆ２は、そのラッチレベルと等しいレベルのラッチデータＤＬ１を選択回路Ｓ１に出力する。なお、本実施形態では、ＦＦ回路Ｆ１，Ｆ２及びアンド回路Ａ１，Ａ２が第１ラッチ回路４６として機能する。
【００４５】
アンド回路Ａ３には、第２遅延信号ＤＱＳ２と併せて、第１イネーブル信号ＥＮ１が供給される。このアンド回路Ａ３の出力端子は、ＦＦ回路Ｆ３のクロック端子に接続されている。
【００４６】
ＦＦ回路Ｆ３は、アンド回路Ａ３の出力信号の立ち上がりエッジ、つまり第１イネーブル信号ＥＮ１がＨレベルであるときの第２遅延信号ＤＱＳ２の立ち上がりエッジに同期してデータ列ＤＱをラッチする。そして、ＦＦ回路Ｆ３は、そのラッチレベルと等しいレベルのラッチデータＤＬ２ａを、次段のＦＦ回路Ｆ４の入力端子に出力する。
【００４７】
アンド回路Ａ４には、第３遅延信号ＤＱＳ３と併せて、第１イネーブル信号ＥＮ１が供給される。このアンド回路Ａ４の出力端子は、ＦＦ回路Ｆ４のクロック端子に接続されている。
【００４８】
ＦＦ回路Ｆ４は、アンド回路Ａ４の出力信号の立ち上がりエッジ、つまり第１イネーブル信号ＥＮ１がＨレベルであるときの第３遅延信号ＤＱＳ３の立ち上がりエッジに同期してラッチデータＤＬ２ａをラッチする。そして、ＦＦ回路Ｆ４は、そのラッチレベルと等しいレベルのラッチデータＤＬ２を選択回路Ｓ１に出力する。なお、本実施形態では、ＦＦ回路Ｆ３，Ｆ４及びアンド回路Ａ３，Ａ４が第２ラッチ回路４７として機能する。
【００４９】
選択回路Ｓ１は、切替回路４９からのＨレベルの選択信号ＣＳに応答して、ＦＦ回路Ｆ２からのラッチデータＤＬ１を選択して受信し、その受信したデータをラッチデータＤＬ１１としてメモリコントローラ１２内のＦＦ回路Ｆ９の入力端子に出力する。また、選択回路Ｓ１は、Ｌレベルの選択信号ＣＳに応答して、ＦＦ回路Ｆ４からのラッチデータＤＬ２を選択して受信し、その受信したデータをラッチデータＤＬ１１としてＦＦ回路Ｆ９に出力する。
【００５０】
アンド回路Ａ５には、第３遅延信号ＤＱＳ３と併せて、第１イネーブル信号ＥＮ１が供給される。このアンド回路Ａ５の出力端子は、ＦＦ回路Ｆ５のクロック端子に接続されている。
【００５１】
ＦＦ回路Ｆ５は、アンド回路Ａ５の出力信号の立ち上がりエッジ、つまり第１イネーブル信号ＥＮ１がＨレベルであるときの第３遅延信号ＤＱＳ３の立ち上がりエッジに同期してデータ列ＤＱをラッチする。そして、ＦＦ回路Ｆ５は、そのラッチレベルと等しいレベルのラッチデータＤＬ１２を、メモリコントローラ１２内のＦＦ回路Ｆ１０の入力端子に出力する。
【００５２】
アンド回路Ａ６には、第２遅延信号ＤＱＳ２と併せて、第２イネーブル信号ＥＮ２が供給される。このアンド回路Ａ６は、第２遅延信号ＤＱＳ２と第２イネーブル信号ＥＮ２とを論理積演算した結果を持つ信号をＦＦ回路Ｆ６のクロック端子に出力する。すなわち、第２イネーブル信号ＥＮ２がＨレベルのときに、第２遅延信号ＤＱＳ２が有効にされてＦＦ回路Ｆ６に出力される。ここで、第２イネーブル信号ＥＮ２は、例えばデータ列ＤＱの３番目のデータＤ２及び４番目のデータＤ３が受信回路４０に入力されるときにＨレベルとなる信号である。
【００５３】
ＦＦ回路Ｆ６は、アンド回路Ａ６の出力信号の立ち上がりエッジ、つまり第２イネーブル信号ＥＮ２がＨレベルであるときの第２遅延信号ＤＱＳ２の立ち上がりエッジに同期してデータ列ＤＱをラッチする。そして、ＦＦ回路Ｆ６は、そのラッチレベルと等しいレベルのラッチデータＤＬ１３ａを、次段のＦＦ回路Ｆ７の入力端子に出力する。
【００５４】
アンド回路Ａ７には、第３遅延信号ＤＱＳ３と併せて、第２イネーブル信号ＥＮ２が供給される。このアンド回路Ａ７の出力端子は、ＦＦ回路Ｆ７のクロック端子に接続されている。
【００５５】
ＦＦ回路Ｆ７は、アンド回路Ａ７の出力信号の立ち上がりエッジ、つまり第２イネーブル信号ＥＮ２がＨレベルであるときの第３遅延信号ＤＱＳ３の立ち上がりエッジに同期してラッチデータＤＬ１３ａをラッチする。そして、ＦＦ回路Ｆ７は、そのラッチレベルと等しいレベルのラッチデータＤＬ１３を、メモリコントローラ１２内のＦＦ回路Ｆ１１の入力端子に出力する。なお、本実施形態では、ＦＦ回路Ｆ６，Ｆ７及びアンド回路Ａ６，Ａ７も第２ラッチ回路４７として機能する。
【００５６】
アンド回路Ａ８には、第３遅延信号ＤＱＳ３と併せて、第２イネーブル信号ＥＮ２が供給される。このアンド回路Ａ８の出力端子は、ＦＦ回路Ｆ８のクロック端子に接続されている。
【００５７】
ＦＦ回路Ｆ８は、アンド回路Ａ８の出力信号の立ち上がりエッジ、つまり第２イネーブル信号ＥＮ２がＨレベルであるときの第３遅延信号ＤＱＳ３の立ち上がりエッジに同期してデータ列ＤＱをラッチする。そして、ＦＦ回路Ｆ８は、そのラッチレベルと等しいレベルのラッチデータＤＬ１４を、メモリコントローラ１２内のＦＦ回路Ｆ１２の入力端子に出力する。なお、本実施形態では、ＦＦ回路Ｆ５，Ｆ８及びアンド回路Ａ５，Ａ８が第３ラッチ回路４８として機能する。
【００５８】
メモリコントローラ１２内のアンド回路Ａ９〜Ａ１２には、メモリコントローラ１２の内部クロック信号ＣＬＫが供給される。ここで、内部クロック信号ＣＬＫは、例えば図示しないＰＬＬ（Phase Locked Loop）等によって生成される。
【００５９】
アンド回路Ａ９，Ａ１０には、第３イネーブル信号ＥＮ３が供給される。これらアンド回路Ａ９，Ａ１０は、クロック信号ＣＬＫと第３イネーブル信号ＥＮ３とを論理積演算した結果を持つ信号をＦＦ回路Ｆ９，Ｆ１０のクロック端子にそれぞれ出力する。アンド回路Ａ１１，Ａ１２には、第４イネーブル信号ＥＮ４が供給される。これらアンド回路Ａ１１，Ａ１２は、クロック信号ＣＬＫと第４イネーブル信号ＥＮ４とを論理積演算した結果を持つ信号をＦＦ回路Ｆ１１，Ｆ１２のクロック端子にそれぞれ出力する。ここで、上記第３イネーブル信号ＥＮ３は、図７に示すように、データＤ０，Ｄ１がそれぞれＦＦ回路Ｆ２，Ｆ５に確実にラッチされる期間にＨレベルとなり、データＤ４，Ｄ５がそれぞれＦＦ回路Ｆ４，Ｆ５に確実にラッチされる期間に再びＨレベルとなる信号である。また、第４イネーブル信号ＥＮ４は、データＤ２，Ｄ３がそれぞれＦＦ回路Ｆ７，Ｆ８に確実にラッチされる期間にＨレベルとなり、データＤ６，Ｄ７がそれぞれＦＦ回路Ｆ７，Ｆ８に確実にラッチされる期間に再びＨレベルとなる信号である。これら第３イネーブル信号ＥＮ３及び第４イネーブル信号ＥＮ４は、リードコマンドＲｅａｄの発行をトリガにしてＨレベルに立ち上がる信号である。また、リードコマンドＲｅａｄの発行から第３及び第４イネーブル信号ＥＮ３，ＥＮ４がＨレベルに立ち上がるまでの時間は、上記選択信号ＣＳと同様に、例えばメモリ２０のリードレイテンシの長さ毎に予めシミュレーション等によってそれぞれ設定されている。
【００６０】
なお、選択信号ＣＳは、リードコマンドＲｅａｄ発行後の第３イネーブル信号ＥＮ３の最初の立ち上がりエッジよりも前に立ち上がり、第３イネーブル信号ＥＮ３の最初の立ち下がりエッジに同期して立ち下がるように生成されているとも言える。すなわち、選択信号ＣＳ及び第３イネーブル信号ＥＮ３は、選択信号ＣＳがＨレベルの期間に上記第３イネーブル信号ＥＮ３の最初のＨレベルのパルス期間が発生するように、且つ選択信号ＣＳがＨレベルの期間に上記第３イネーブル信号ＥＮ３の２番目以降のＨレベルのパルス期間が発生しないように生成されている。さらに、選択信号ＣＳ及び第３イネーブル信号ＥＮ３は、選択信号ＣＳがＬレベルの期間に上記第３イネーブル信号ＥＮ３の最初のＨレベルのパルス期間が発生しないように生成されている。これらにより、リードコマンドＲｅａｄ発行後の第３イネーブル信号ＥＮ３の最初のＨレベルのパルス期間では、常に選択信号ＣＳがＨレベルとなり、第３イネーブル信号ＥＮ３の２番目以降のＨレベルのパルス期間では、常に選択信号ＣＳがＬレベルとなる。
【００６１】
ＦＦ回路Ｆ９は、アンド回路Ａ９の出力信号の立ち上がりエッジ、つまり第３イネーブル信号ＥＮ３がＨレベルであるときのクロック信号ＣＬＫの立ち上がりエッジに同期してラッチデータＤＬ１１をラッチする。ここで、リードコマンドＲｅａｄ発行後の第３イネーブル信号ＥＮ３の最初のＨレベルのパルス期間では、常に選択信号ＣＳがＨレベルとなるため、ＦＦ回路Ｆ２からのラッチデータＤＬ１がラッチデータＤＬ１１としてＦＦ回路Ｆ９にラッチされる。また、リードコマンドＲｅａｄ発行後の第３イネーブル信号ＥＮ３の２番目以降のＨレベルのパルス期間では、常に選択信号ＣＳがＬレベルとなるため、ＦＦ回路Ｆ４からのラッチデータＤＬ２がラッチデータＤＬ１１としてＦＦ回路Ｆ９にラッチされる。そして、ＦＦ回路Ｆ９は、そのラッチレベルと等しいレベルのリードデータＲＤ１を出力する。
【００６２】
ＦＦ回路Ｆ１０は、アンド回路Ａ１０の出力信号の立ち上がりエッジ、つまり第３イネーブル信号ＥＮ３がＨレベルであるときのクロック信号ＣＬＫの立ち上がりエッジに同期してラッチデータＤＬ１２をラッチする。そして、ＦＦ回路Ｆ１０は、そのラッチレベルと等しいレベルのリードデータＲＤ２を出力する。
【００６３】
ＦＦ回路Ｆ１１は、アンド回路Ａ１１の出力信号の立ち上がりエッジ、つまり第４イネーブル信号ＥＮ４がＨレベルであるときのクロック信号ＣＬＫの立ち上がりエッジに同期してラッチデータＤＬ１３をラッチする。そして、ＦＦ回路Ｆ１１は、そのラッチレベルと等しいレベルのリードデータＲＤ３を出力する。
【００６４】
ＦＦ回路Ｆ１２は、アンド回路Ａ１２の出力信号の立ち上がりエッジ、つまり第４イネーブル信号ＥＮ４がＨレベルであるときのクロック信号ＣＬＫの立ち上がりエッジに同期してラッチデータＤＬ１４をラッチする。そして、ＦＦ回路Ｆ１２は、そのラッチレベルと等しいレベルのリードデータＲＤ４を出力する。
【００６５】
これらＦＦ回路Ｆ９〜Ｆ１２及びアンド回路Ａ９〜Ａ１２において、メモリコントローラ１２内部での処理が可能なように、受信回路４０にてラッチされたデータ列ＤＱがメモリコントローラ１２の内部クロック信号ＣＬＫに乗せ換えられる。
【００６６】
次に、切替回路４９の内部構成例とその動作を図５及び図６に従って説明する。なお、図６（ａ）において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
【００６７】
ところで、本実施形態のメモリ２０では、カラムアドレスストローブ（Column Address Strobe:ＣＡＳ）信号から次のＣＡＳ信号までのタイミング制限であるカラムコマンド間隔ｔＣＣＤは２サイクルである。このため、リードコマンドＲｅａｄは、２サイクルごとにしか入力することができない。すなわち、上記カラムコマンド間隔ｔＣＣＤは、コマンドＣＭＤの最小入力サイクルとも言える。そこで、以下の説明では、コマンドＣＭＤの最小入力サイクルのことを、最小入力サイクルｔＣＣＤとも言う。このような最小入力サイクルｔＣＣＤごとにリードコマンドＲｅａｄが入力される場合には、図６（ａ）に示すように、１つ目の第１リードコマンドＲｅａｄ１に対応するバーストリード（データＤ０〜Ｄ３）が終わった直後に、２つ目の第２リードコマンドＲｅａｄ２に対応するバーストリード（データＤ４〜Ｄ７）が開始される。このため、第１リードコマンドＲｅａｄ１に対して最小入力サイクルｔＣＣＤで入力された第２リードコマンドＲｅａｄ２に対応するデータストローブ信号ＤＱＳの先頭立ち上がりエッジ（破線枠参照）の前のプリアンブル期間は消失する。したがって、このときの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形は略等しくなる。これにより、第２リードコマンドＲｅａｄ２に対応するデータストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対する最適なタイミング調整量（遅延量）は略等しくなる。
【００６８】
そこで、本実施形態の切替回路４９は、最小入力サイクルｔＣＣＤよりも長い間隔でリードコマンドＲｅａｄが入力される場合にはＨレベルの選択信号ＣＳを生成する。その一方で、切替回路４９は、最小入力サイクルｔＣＣＤでリードコマンドＲｅａｄが入力される場合にはＬレベルの選択信号ＣＳを生成する。
【００６９】
図５に示すように、切替回路４９において、コマンド送信回路３１（図２参照）から出力されるリードデータイネーブル信号ＲＥＮは、ＦＦ回路Ｆ２０の入力端子とアンド回路Ａ２０とに供給される。ここで、本実施形態のイネーブル信号ＲＥＮは、リードコマンドＲｅａｄに応答して、クロック信号ＣＬＫの２サイクル分（最小入力サイクルｔＣＣＤ分）だけＨレベルとなる信号である（図６（ａ）の時刻ｔ３でＨレベルとなる信号ＲＥＮ参照）。このため、図６（ａ）に示すように最小入力サイクルｔＣＣＤでリードコマンドＲｅａｄが発行される場合には、イネーブル信号ＲＥＮは４サイクル（２サイクル＋２サイクル）分だけＨレベルとなる（時刻ｔ１でＨレベルとなる信号ＲＥＮ参照）。
【００７０】
図５に示すように、ＦＦ回路Ｆ２０のクロック端子には、上記クロック信号ＣＬＫが供給される。このＦＦ回路Ｆ２０は、クロック信号ＣＬＫの立ち上がりエッジに同期してイネーブル信号ＲＥＮをラッチし、そのラッチレベルと等しいレベルの出力信号をＦＦ回路Ｆ２１の入力端子に出力する。
【００７１】
ＦＦ回路Ｆ２１のクロック端子には、クロック信号ＣＬＫが供給される。このＦＦ回路Ｆ２１は、クロック信号ＣＬＫの立ち上がりエッジに同期してＦＦ回路Ｆ２０の出力信号をラッチし、そのラッチレベルと等しいレベルの遅延信号ＲＥＮｄをインバータ回路Ｉ２０に出力する。これらＦＦ回路Ｆ２０，Ｆ２１によってイネーブル信号ＲＥＮが２クロック分遅延された遅延信号ＲＥＮｄが生成され、その遅延信号ＲＥＮｄがインバータ回路Ｉ２０に供給される。
【００７２】
インバータ回路Ｉ２０は、遅延信号ＲＥＮｄを論理反転した信号をアンド回路Ａ２０に出力する。
アンド回路Ａ２０は、イネーブル信号ＲＥＮとインバータ回路Ｉ２０の出力信号とを論理積演算した結果を持つ出力信号ＣＳａをＦＦ回路Ｆ２２の入力端子に出力する。具体的には、アンド回路Ａ２０は、図６（ａ）の時刻ｔ１や時刻ｔ３に示すように、イネーブル信号ＲＥＮがＨレベルで、遅延信号ＲＥＮｄがＬレベルである場合に、アンド回路Ａ２０は、２サイクルだけＨレベルとなる出力信号ＣＳａを出力する。一方、アンド回路Ａ２０は、図６（ａ）の時刻ｔ２に示すように、イネーブル信号ＲＥＮがＨレベルで、遅延信号ＲＥＮｄがＨレベルである場合に、アンド回路Ａ２０は、Ｌレベルの出力信号ＣＳａを出力する。
【００７３】
別の言い方をすると、アンド回路Ａ２０は、図６（ｂ）に示すように、当該サイクル（ｎ）にＨレベルのイネーブル信号ＲＥＮが入力された場合に、その１サイクル前（ｎ−１）にＨレベルのイネーブル信号ＲＥＮが入力されているか否かに応じて出力信号ＣＳａを出力する。
【００７４】
詳述すると、アンド回路Ａ２０は、当該サイクルのイネーブル信号ＲＥＮがＨレベルで、１サイクル前のイネーブル信号ＲＥＮがＬレベルである場合に、Ｈレベルの出力信号ＣＳａを出力する。すなわち、２サイクル前にリードコマンドＲｅａｄが入力されていない場合、つまり最小入力サイクルｔＣＣＤよりも長い間隔でリードコマンドＲｅａｄが入力された場合には、アンド回路Ａ２０からＨレベルの出力信号ＣＳａが出力される。これにより、データストローブ信号ＤＱＳの先頭立ち上がりエッジの前にプリアンブル期間が存在する場合に、データストローブ信号ＤＱＳの立ち上がりエッジのタイミング調整量を切り替えるためのＨレベルの出力信号ＣＳａ（選択信号ＣＳ）を生成することができる。
【００７５】
一方、アンド回路Ａ２０は、当該サイクルのイネーブル信号ＲＥＮがＨレベルで、１サイクル前のイネーブル信号ＲＥＮがＨレベルである場合に、Ｌレベルの出力信号ＣＳａを出力する。すなわち、２サイクル前にリードコマンドＲｅａｄが入力されている場合、つまり最小入力サイクルｔＣＣＤでリードコマンドＲｅａｄが入力された場合には、アンド回路Ａ２０からＬレベルの出力信号ＣＳａが出力される。これにより、データストローブ信号ＤＱＳの先頭立ち上がりエッジの前のプリアンブル期間が存在しない場合には、Ｌレベルの選択信号ＣＳが生成される。このＬレベルの選択信号ＣＳに応答して、選択回路Ｓ１では、最小入力サイクルｔＣＣＤで入力されるリードコマンドＲｅａｄに対応する第２遅延信号ＤＱＳ２の先頭立ち上がりエッジ及び２番目以降の立ち上がりエッジによってラッチされた全ての奇数番目データがラッチデータＤＬ２として入力される。このため、この場合には、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量と、先頭以外の立ち上がりエッジに対するタイミング調整量とが等しくなる。
【００７６】
そして、アンド回路Ａ２０の出力信号ＣＳａは、所定段（ここでは、５段）のＦＦ回路Ｆ２２〜Ｆ２６によって所定クロック分（ここでは、４．５クロック分）遅延され、選択信号ＣＳとして上記選択回路Ｓ１に供給される。詳述すると、ＦＦ回路Ｆ２２〜Ｆ２５のクロック端子にはクロック信号ＣＬＫが供給されるとともに、ＦＦ回路Ｆ２６の反転クロック端子にはクロック信号ＣＬＫが供給される。また、ＦＦ回路Ｆ２３，Ｆ２４，Ｆ２５，Ｆ２６の入力端子には、前段のＦＦ回路Ｆ２２，Ｆ２３，Ｆ２４，Ｆ２５の出力信号がそれぞれ供給される。そして、最終段のＦＦ回路Ｆ２６の出力信号が選択信号ＣＳとして選択回路Ｓ１に供給される。なお、上記出力信号ＣＳａに対する遅延時間は、予めシミュレーション等によって設定された時間である。
【００７７】
次に、このように構成されたインタフェース回路１３（とくに、受信回路４０）の動作を図７にしたがって説明する。なお、図７において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
【００７８】
今、時刻ｔ５においてメモリコントローラ１２から第１リードコマンドＲｅａｄ１が入力され、さらに２サイクル後の時刻ｔ６において第２リードコマンドＲｅａｄ２が入力されると、４サイクル分だけＨレベルとなるイネーブル信号ＲＥＮが生成される。このように先行する第１リードコマンドＲｅａｄ１に対して最小入力サイクルｔＣＣＤで第２リードコマンドＲｅａｄ２が入力された場合には、１つ目の第１リードコマンドＲｅａｄ１に対してのみＨレベルの出力信号ＣＳａが生成される。そして、その出力信号ＣＳａが所定クロック分だけ遅延されて選択信号ＣＳとして選択回路Ｓ１に入力される（時刻ｔ９参照）。
【００７９】
上記第１リードコマンドＲｅａｄ１に応答してメモリ２０からデータ列ＤＱとしてデータＤ０〜Ｄ３が連続的に出力され、第２リードコマンドＲｅａｄ２に応答してデータＤ４〜Ｄ７が連続的に出力される。また、上記先頭データＤ０が入力される時刻ｔ８よりも１サイクル前の時刻ｔ７において、メモリ２０から入力されるデータストローブ信号ＤＱＳがハイインピーダンス状態からＬレベルに遷移する（プリアンブル）。その後、プリアンブル期間が経過すると（時刻ｔ８）、メモリ２０から入力されるデータ列ＤＱに同期してデータストローブ信号ＤＱＳがＬレベルからＨレベルに遷移する（第１方向の第１遷移）。このようなデータストローブ信号ＤＱＳを第１の遅延量Ｔ１だけ遅延させて第１遅延信号ＤＱＳ１が生成され、この第１遅延信号ＤＱＳ１がＦＦ回路Ｆ１へのデータ列ＤＱの取り込みに用いられる。また、上記データストローブ信号ＤＱＳを第２の遅延量Ｔ２だけ遅延させて第２遅延信号ＤＱＳ２が生成され、この第２遅延信号ＤＱＳ２がＦＦ回路Ｆ３，Ｆ６へのデータ列ＤＱの取り込みに用いられる。さらに、上記遅延信号ＤＱＳ２を論理反転させて第３遅延信号ＤＱＳ３が生成され、この第３遅延信号ＤＱＳ３がＦＦ回路Ｆ２，Ｆ４，Ｆ５，Ｆ７，Ｆ８へのデータ列ＤＱの取り込みに用いられる。
【００８０】
詳述すると、データ列ＤＱの先頭データＤ０が第１遅延信号ＤＱＳ１の先頭立ち上がりエッジでＦＦ回路Ｆ１に取り込まれる。このとき、第１遅延信号ＤＱＳ１の先頭立ち上がりエッジがデータ列ＤＱの先頭データＤ０をラッチするための最適なタイミングで発生するように、第１遅延信号ＤＱＳ１のタイミングが調整されている。このため、ＦＦ回路Ｆ１では、セットアップタイム及びホールドタイムを確実に確保することができ、先頭データＤ０を確実にラッチすることができる。なお、第２遅延信号ＤＱＳ２の先頭立ち上がりエッジが先頭データＤ０をラッチするための最適なタイミングからずれるため、ＦＦ回路Ｆ３では、先頭データＤ０を正しくラッチすることができない。
【００８１】
続いて、第３遅延信号ＤＱＳ３の先頭立ち上がりエッジ（第２遅延信号ＤＱＳ２の先頭立ち下がりエッジ）で先頭データＤ０がＦＦ回路Ｆ２にシフトされ、同時にＦＦ回路Ｆ５にデータＤ１が取り込まれる。
【００８２】
次に、データ列ＤＱの３番目以降の奇数番目データであるデータＤ２が第２遅延信号ＤＱＳ２の２番目の立ち上がりエッジでＦＦ回路Ｆ６に取り込まれる。続いて、第３遅延信号ＤＱＳ３の２番目の立ち上がりエッジでデータＤ２がＦＦ回路Ｆ７にシフトされ、同時にＦＦ回路Ｆ８にデータＤ３が取り込まれる。
【００８３】
続いて、第３イネーブル信号ＥＮ３が立ち上がった後にクロック信号ＣＬＫが立ち上がると、そのクロック信号ＣＬＫの立ち上がりエッジで選択回路Ｓ１から出力されるラッチデータＤＬ１１がＦＦ回路Ｆ９に取り込まれる。それと同時にデータＤ１がＦＦ回路Ｆ５からＦＦ回路Ｆ１０にシフトされる。このとき、選択回路Ｓ１は、上記第１リードコマンドＲｅａｄ１に応答して生成されたＨレベルの選択信号ＣＳに基づいて、ＦＦ回路Ｆ２から入力されるラッチデータＤＬ１を選択して受信している。このため、ＦＦ回路Ｆ９には、ＦＦ回路Ｆ２からのラッチデータＤＬ１、つまり第１遅延信号ＤＱＳ１によってラッチされたデータＤ０が取り込まれる。
【００８４】
次いで、第４イネーブル信号ＥＮ４が立ち上がった後のクロック信号ＣＬＫの立ち上がりエッジでデータＤ２がＦＦ回路Ｆ７からＦＦ回路Ｆ１１にシフトされ、同時にデータＤ３がＦＦ回路Ｆ８からＦＦ回路Ｆ１２にシフトされる。
【００８５】
一方、データ列ＤＱの５番目のデータＤ４（つまり、２つ目の第２リードコマンドＲｅａｄ２に対応する先頭データ）は、第２遅延信号ＤＱＳ２の３番目の立ち上がりエッジ（つまり、第２リードコマンドＲｅａｄ２に対応する先頭の立ち上がりエッジ）でＦＦ回路Ｆ３に取り込まれる。このとき、第２遅延信号ＤＱＳ２の３番目の立ち上がりエッジがデータ列ＤＱのデータＤ４をラッチするための最適なタイミングで発生するように、第２遅延信号ＤＱＳ２のタイミングが調整されている。このため、ＦＦ回路Ｆ３では、セットアップタイム及びホールドタイムを確実に確保することができ、上記データＤ４を確実にラッチすることができる。なお、第１遅延信号ＤＱＳ１の３番目の立ち上がりエッジはデータＤ４をラッチするための最適なタイミングからずれるため、ＦＦ回路Ｆ１では、データＤ４を正しくラッチすることができない。
【００８６】
続いて、第３遅延信号ＤＱＳ３の３番目の立ち上がりエッジでデータＤ４がＦＦ回路Ｆ４にシフトされ、同時にＦＦ回路Ｆ５にデータＤ５が取り込まれる。
次に、データ列ＤＱのデータＤ６が第２遅延信号ＤＱＳ２の４番目の立ち上がりエッジでＦＦ回路Ｆ６に取り込まれる。続いて、第３遅延信号ＤＱＳ３の４番目の立ち上がりエッジでデータＤ６がＦＦ回路Ｆ７にシフトされ、同時にＦＦ回路Ｆ８にデータＤ７が取り込まれる。
【００８７】
次に、第３イネーブル信号ＥＮ３が立ち上がった後にクロック信号ＣＬＫが立ち上がると、そのクロック信号ＣＬＫの立ち上がりエッジで選択回路Ｓ１から出力されるラッチデータＤＬ１１がＦＦ回路Ｆ９に取り込まれる。それと同時にデータＤ５がＦＦ回路Ｆ５からＦＦ回路Ｆ１０にシフトされる。このとき、選択回路Ｓ１は、上記第２リードコマンドＲｅａｄ２に応答して生成されたＬレベルの選択信号ＣＳに基づいて、ＦＦ回路Ｆ４から入力されるラッチデータＤＬ２を選択して受信している。このため、ＦＦ回路Ｆ９には、ＦＦ回路Ｆ４からのラッチデータＤＬ２、つまり第２遅延信号ＤＱＳ２によってラッチされたデータＤ４が取り込まれる。
【００８８】
次いで、第４イネーブル信号ＥＮ４が立ち上がった後のクロック信号ＣＬＫの立ち上がりエッジでデータＤ６がＦＦ回路Ｆ７からＦＦ回路Ｆ１１にシフトされ、同時にデータＤ７がＦＦ回路Ｆ８からＦＦ回路Ｆ１２にシフトされる。
【００８９】
以上のように、データ列ＤＱの先頭データＤ０は第１遅延信号ＤＱＳ１の先頭立ち上がりエッジによってラッチされるとともに、３番目以降の奇数番目データ、つまり３番目、５番目及び７番目のデータＤ２，Ｄ４，Ｄ６は第２遅延信号ＤＱＳ２の２番目以降の立ち上がりエッジによってラッチされる。換言すると、データストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量が異なる遅延量に切り替えられている。
【００９０】
以上説明した本実施形態によれば、以下の効果を奏することができる。
（１）データストローブ信号ＤＱＳのプリアンブル期間に続く先頭の立ち上がりエッジに対するタイミング調整量を第１の遅延量Ｔ１とし、先頭以外の立ち上がりエッジに対するタイミング調整量を上記第１の遅延量Ｔ１とは異なる第２の遅延量Ｔ２とした。これにより、符号間干渉の影響等によってデータストローブ信号ＤＱＳの先頭立ち上がりエッジと先頭以外の立ち上がりエッジとの波形が異なる場合であっても、それぞれの立ち上がりエッジを、対応するデータをラッチするための最適なタイミングに位相合わせすることができる。すなわち、データ列ＤＱとデータストローブ信号ＤＱＳ（遅延信号ＤＱＳ１〜ＤＱＳ３）とのタイミングずれを抑制することができ、タイミングエラーの発生を抑制することができる。したがって、データ転送レートの上昇に起因してデータ列ＤＱのデータ有効ウィンドウが狭くなった場合であっても、データストローブ信号ＤＱＳに基づいてデータ列ＤＱを正しくラッチすることができる。
【００９１】
（２）リードコマンドＲｅａｄに応答して、データストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量を切り替えるための選択信号ＣＳを生成するようにした。ここで、上述したように、メモリコントローラ１２でリードコマンドＲｅａｄが発行されると、メモリ２０からデータ列ＤＱが出力される。このため、データ列ＤＱの先頭データＤ０は、常にコマンド送信回路３１にリードコマンドＲｅａｄが入力されてから、すなわちコマンド送信回路３１からイネーブル信号ＲＥＮが出力されてから、ラッチ回路４５に入力されることになる。したがって、このイネーブル信号ＲＥＮの入力をトリガとしてＨレベルの選択信号ＣＳを生成することにより、データ列ＤＱの先頭データＤ０がラッチデータＤＬ１として選択回路Ｓ１に入力される前に上記選択信号ＣＳを確実にＨレベルに立ち上げることができる。換言すると、データストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量の切り替えを確実に行うことができる。
【００９２】
（３）先行する第１リードコマンドＲｅａｄ１に対して最小入力サイクルｔＣＣＤで発行された第２リードコマンドＲｅａｄ２に応答して、その第２リードコマンドＲｅａｄ２に対応する第２遅延信号ＤＱＳ２の先頭立ち上がりエッジ及びそれ以外の立ち上がりエッジによってラッチされたデータを選択するための選択信号ＣＳを生成するようにした。これにより、プリアンブル状態が発生せずにデータストローブ信号ＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が略等しくなる場合には、両立ち上がりエッジのタイミング調整量を等しくすることができる。したがって、タイミング調整量の切り替えが不要な場合に、データストローブ信号ＤＱＳの先頭立ち上がりエッジと先頭以外の立ち上がりエッジとに対するタイミング調整量が異なる遅延量に設定されることを抑制することができる。
【００９３】
（４）選択回路Ｓ１を、ラッチ回路４５の後段側に設けるようにした。すなわち、ラッチ回路４５においてダブルデータレートでデータ列ＤＱが取り込まれた後に、第１遅延信号ＤＱＳ１によってラッチされたデータ列ＤＱ及び第２遅延信号ＤＱＳ２によってラッチされたデータ列ＤＱのいずれか一方を選択するようにした。これにより、ラッチ回路４５でラッチしたデータ列ＤＱをメモリコントローラ１２の内部クロック信号ＣＬＫに乗せ換える際に、つまりラッチ回路４５に比べて動作タイミングに比較的に余裕がある際に、データストローブ信号ＤＱＳのタイミング調整量の切り替えを行うことができる。
【００９４】
（第２実施形態）
以下、第２実施形態を図８〜図１２に従って説明する。この実施形態のインタフェース回路１３Ａは、受信回路５０の内部構成が上記第１実施形態と異なっている。具体的には、受信回路５０では、リードコマンドＲｅａｄの入力間隔（発行間隔）に応じて、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量の設定を変更する点が上記第１実施形態と異なっている。以下、第１実施形態との相違点を中心に説明する。なお、先の図１〜図７に示した部材と同一の部材にはそれぞれ同一の符号を付して示し、それら各要素についての詳細な説明は省略する。
【００９５】
図８に示すように、受信回路５０の遅延回路５１には、メモリ２０からデータストローブ信号ＤＱＳが供給される。この遅延回路５１は、第１〜第４遅延回路５２〜５５を有している。
【００９６】
第１遅延回路５２は、図１２に示すように、データストローブ信号ＤＱＳに第１の遅延量Ｔ１１を与えて第１遅延信号ＤＱＳ１１を生成する。第１遅延信号ＤＱＳ１１は、リードコマンドＲｅａｄの入力間隔が３サイクルである場合のデータストローブ信号ＤＱＳの先頭立ち上がりエッジが先頭データＤ０をラッチするための最適なタイミングで発生するように、データストローブ信号ＤＱＳのタイミングが調整された信号である。上記第１の遅延量Ｔ１１は、予めシミュレーション等によって設定された時間である。
【００９７】
第２遅延回路５３は、データストローブ信号ＤＱＳに第２の遅延量Ｔ１２を与えて第２遅延信号ＤＱＳ１２を生成する。第２遅延信号ＤＱＳ１２は、リードコマンドＲｅａｄの入力間隔が４サイクル以上である場合のデータストローブ信号ＤＱＳの先頭立ち上がりエッジが先頭データＤ０をラッチするための最適なタイミングで発生するように、データストローブ信号ＤＱＳのタイミングが調整された信号である。上記第２の遅延量Ｔ１２は、上記第１の遅延量Ｔ１１よりも長い時間である。この第２の遅延量Ｔ１２は、予めシミュレーション等によって設定された時間である。
【００９８】
第３遅延回路５４は、データストローブ信号ＤＱＳに第３の遅延量Ｔ１３（例えば、信号ＤＱＳの位相の９０度分）を与えて第３遅延信号ＤＱＳ１３を生成する。具体的には、第３遅延回路５４は、データストローブ信号ＤＱＳの２番目以降の立ち上がりエッジのタイミングを、データ列ＤＱにおける３番目以降の奇数番目データをラッチするための最適なタイミングとするように、データストローブ信号ＤＱＳを第３の遅延量Ｔ１３を与える。ここで、第３の遅延量Ｔ１３は、上記第２の遅延量Ｔ１２よりも長い時間である。
【００９９】
図８に示す第４遅延回路５５は、上記第３遅延信号ＤＱＳ１３を論理反転させた第４遅延信号ＤＱＳ１４を生成する。すなわち、第４遅延回路５５は、データ列ＤＱの偶数番目のデータをラッチするための最適なタイミングで立ち上がりエッジ（第３遅延信号ＤＱＳ１３の立ち下がりエッジ）が発生するように、データストローブ信号ＤＱＳを遅延させた第４遅延信号ＤＱＳ１４を生成する。
【０１００】
ラッチ回路５６には、メモリ２０からデータ列ＤＱが供給される。このラッチ回路５６は、第１〜第４ラッチ回路５７〜６０を有している。
第１ラッチ回路５７は、第１遅延信号ＤＱＳ１１の立ち上がりエッジに同期してデータ列ＤＱをラッチし、そのラッチデータＤＬ２１を選択回路Ｓ２に出力する。第２ラッチ回路５８は、第２遅延信号ＤＱＳ１２の立ち上がりエッジに同期してデータ列ＤＱをラッチし、そのラッチデータＤＬ２２を選択回路Ｓ２に出力する。第３ラッチ回路５９は、第３遅延信号ＤＱＳ１３の立ち上がりエッジに同期してデータ列ＤＱをラッチし、そのラッチデータＤＬ２３を選択回路Ｓ３に出力する。第４ラッチ回路６０は、第４遅延信号ＤＱＳ１４の立ち上がりエッジ（第３遅延信号ＤＱＳ１３の立ち下がりエッジ）に同期してデータ列ＤＱをラッチし、そのラッチデータＤＬ２４をメモリコントローラ１２に出力する。
【０１０１】
選択回路Ｓ２は、切替回路６１内の第２切替回路６３から入力される第２選択信号ＣＳ２に応じて、第１ラッチ回路５７からのラッチデータＤＬ２１及び第２ラッチ回路５８からのラッチデータＤＬ２２のいずれか一方を選択して受信する。具体的には、選択回路Ｓ２は、Ｈレベルの第２選択信号ＣＳ２に応答して、第１ラッチ回路５７からのラッチデータＤＬ２１を選択して受信する。また、選択回路Ｓ２は、Ｌレベルの第２選択信号ＣＳ２に応答して、第２ラッチ回路５８からのラッチデータＤＬ２２を選択して受信する。そして、選択回路Ｓ２は、選択して受信したラッチデータをラッチデータＤＬ２５として選択回路Ｓ３に出力する。
【０１０２】
選択回路Ｓ３は、切替回路６１内の第１切替回路６２から入力される第１選択信号ＣＳ１に応じて、選択回路Ｓ２からのラッチデータＤＬ２５及び第３ラッチ回路５９からのラッチデータＤＬ２３のいずれか一方を選択して受信する。具体的には、選択回路Ｓ３は、Ｈレベルの第１選択信号ＣＳ１に応答して、選択回路Ｓ２からのラッチデータＤＬ２５を選択して受信する。また、選択回路Ｓ３は、Ｌレベルの第１選択信号ＣＳ１に応答して、第３ラッチ回路５９からのラッチデータＤＬ２３を選択して受信する。そして、選択回路Ｓ３は、選択して受信したラッチデータをラッチデータＤＬ２６としてメモリコントローラ１２に出力する。
【０１０３】
切替回路６１は、上記第１切替回路６２と上記第２切替回路６３とを有している。第１切替回路６２は、送信回路３０内のコマンド送信回路３１から入力するリードデータイネーブル信号ＲＥＮに基づいて上記第１選択信号ＣＳ１を生成する。なお、この第１選択信号ＣＳ１は、上記第１実施形態の選択信号ＣＳと同様の信号である。
【０１０４】
第２切替回路６３は、上記イネーブル信号ＲＥＮに基づいてリードコマンドＲｅａｄの入力間隔（発行間隔）を検出し、その検出結果に応じて上記第２選択信号ＣＳ２を生成する。具体的には、第２切替回路６３は、リードコマンドＲｅａｄの入力間隔が所定サイクル数である場合には、Ｈレベルの第２選択信号ＣＳ２を生成する。ここで、上記所定サイクル数は、例えば３サイクル、すなわち最小入力サイクルｔＣＣＤ（２サイクル）に１サイクルを加えたサイクル数である。なお、このときの第２選択信号ＣＳ２は、データ列ＤＱの先頭データＤ０がラッチデータＤＬ２１として選択回路Ｓ２に入力される前にＨレベルに立ち上がる。その一方で、第２切替回路６３は、リードコマンドＲｅａｄの入力間隔が上記所定サイクル数よりも長い（４サイクル以上の）場合には、Ｌレベルの第２選択信号ＣＳ２を生成する。なお、このときの第２選択信号ＣＳ２は、データ列ＤＱの先頭データＤ０がラッチデータＤＬ２１として選択回路Ｓ２に入力される前にＬレベルに立ち下がる。
【０１０５】
ここで、切替回路６１の内部構成例を図９にしたがって説明する。
図９に示すように、切替回路６１において、コマンド送信回路３１から出力されるイネーブル信号ＲＥＮは、ＦＦ回路Ｆ３０の入力端子とアンド回路Ａ３０，Ａ３１とに供給される。本実施形態のイネーブル信号ＲＥＮは、図１１に示すように、１つのリードコマンドＲｅａｄに応答して、クロック信号ＣＬＫの２サイクル分（最小入力サイクルｔＣＣＤ分）だけＨレベルとなる信号である。
【０１０６】
図９に示すように、ＦＦ回路Ｆ３０のクロック端子には、上記クロック信号ＣＬＫが供給される。このＦＦ回路Ｆ３０は、クロック信号ＣＬＫの立ち上がりエッジに同期してイネーブル信号ＲＥＮをラッチする。そして、ＦＦ回路Ｆ３０は、そのラッチレベルと等しいレベルの遅延信号ＲＥＮｄ１を、ＦＦ回路Ｆ３１の入力端子とアンド回路Ａ３０，Ａ３１の反転入力端子とに出力する。これにより、１クロック分遅延されたイネーブル信号ＲＥＮが論理反転されてアンド回路Ａ３０，Ａ３１に供給される。すなわち、上記遅延信号ＲＥＮｄ１は、１サイクル前のイネーブル信号ＲＥＮに相当する。
【０１０７】
ＦＦ回路Ｆ３１のクロック端子には、クロック信号ＣＬＫが供給される。このＦＦ回路Ｆ３１は、クロック信号ＣＬＫの立ち上がりエッジに同期して遅延信号ＲＥＮｄ１をラッチし、そのラッチレベルと等しいレベルの遅延信号ＲＥＮｄ２をアンド回路Ａ３１に出力する。これにより、２クロック分遅延されたイネーブル信号ＲＥＮがアンド回路Ａ３１に供給される。すなわち、上記遅延信号ＲＥＮｄ２は、２サイクル前のイネーブル信号ＲＥＮに相当する。
【０１０８】
アンド回路Ａ３０は、イネーブル信号ＲＥＮと遅延信号ＲＥＮｄ１とを論理積演算した結果を持つ第１選択信号ＣＳ１を出力する。換言すると、アンド回路Ａ３０は、図１０に示すように、当該サイクル（ｎ）にＨレベルのイネーブル信号ＲＥＮが入力された場合に、その１サイクル前（ｎ−１）にＨレベルのイネーブル信号ＲＥＮが入力されているか否かに応じて第１選択信号ＣＳ１を生成する。
【０１０９】
詳述すると、アンド回路Ａ３０は、当該サイクルのイネーブル信号ＲＥＮがＨレベルで、１サイクル前のイネーブル信号ＲＥＮ（遅延信号ＲＥＮｄ１）がＨレベルである場合に、Ｌレベルの第１選択信号ＣＳ１を生成する。すなわち、アンド回路Ａ３０は、最小入力サイクルｔＣＣＤでリードコマンドＲｅａｄが入力された場合には、Ｌレベルの第１選択信号ＣＳ１を生成する。一方、アンド回路Ａ３０は、当該サイクルのイネーブル信号ＲＥＮがＨレベルで、遅延信号ＲＥＮｄ１がＬレベルである場合に、Ｈレベルの第１選択信号ＣＳ１を生成する。すなわち、アンド回路Ａ３０は、最小入力サイクルｔＣＣＤよりも長い間隔でリードコマンドＲｅａｄが入力された場合には、Ｈレベルの第１選択信号ＣＳ１を生成する。
【０１１０】
そして、このアンド回路Ａ３０にて生成された第１選択信号ＣＳ１は、所定時間遅延されて上記選択回路Ｓ３に供給される。なお、この所定時間は、例えばメモリ２０のリードレイテンシの長さ毎に予めシミュレーション等によって設定されている。
【０１１１】
アンド回路Ａ３１は、イネーブル信号ＲＥＮと、遅延信号ＲＥＮｄ１を論理反転させた信号と、遅延信号ＲＥＮｄ２とを論理積演算した結果を持つ第２選択信号ＣＳ２を出力する。具体的には、アンド回路Ａ３１は、図１１の時刻ｔ１２に示すように、イネーブル信号ＲＥＮがＨレベル、遅延信号ＲＥＮｄ１がＬレベル、遅延信号ＲＥＮｄ２がＨレベルである場合に、Ｈレベルの第２選択信号ＣＳ２を生成する。一方、アンド回路Ａ３１は、時刻ｔ１３に示すように、イネーブル信号ＲＥＮがＨレベル、遅延信号ＲＥＮｄ１がＬレベル、遅延信号ＲＥＮｄ２がＬレベルである場合に、Ｌレベルの第２選択信号ＣＳ２を生成する。
【０１１２】
別の言い方をすると、アンド回路Ａ３１は、図１０に示すように、当該サイクルにＨレベルのイネーブル信号ＲＥＮが入力された場合に、その１サイクル前及び２サイクル前（ｎ−２）のイネーブル信号ＲＥＮの信号レベルに応じて第２選択信号ＣＳ２を生成する。
【０１１３】
詳述すると、アンド回路Ａ３１は、当該サイクルのイネーブル信号ＲＥＮがＨレベル、その１サイクル前のイネーブル信号ＲＥＮがＬレベルで、２サイクル前のイネーブル信号ＲＥＮがＨレベルの場合に、Ｈレベルの第２選択信号ＣＳ２を生成する。すなわち、アンド回路Ａ３１は、最小入力サイクルｔＣＣＤである２サイクル前にリードコマンドＲｅａｄが発行されておらず、３サイクル前にリードコマンドＲｅａｄが発行されている場合に、Ｈレベルの第２選択信号ＣＳ２を生成する。
【０１１４】
一方、アンド回路Ａ３１は、当該サイクルのイネーブル信号ＲＥＮがＨレベル、その１サイクル前のイネーブル信号ＲＥＮがＬレベルで、２サイクル前のイネーブル信号ＲＥＮがＬレベルの場合に、Ｌレベルの第２選択信号ＣＳ２を生成する。すなわち、アンド回路Ａ３１は、３サイクル前までにリードコマンドＲｅａｄが発行されていない場合に、Ｌレベルの第２選択信号ＣＳ２を生成する。
【０１１５】
そして、このアンド回路Ａ３１にて生成された第２選択信号ＣＳ２は、所定時間遅延されて上記選択回路Ｓ２に供給される。なお、この所定時間は、例えばメモリ２０のリードレイテンシの長さ毎に予めシミュレーション等によって設定されている。
【０１１６】
次に、このように構成されたインタフェース回路１３Ａ（とくに、受信回路５０）の動作について図１１及び図１２に従って説明する。なお、図１１及び図１２において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
【０１１７】
今、時刻ｔ１０においてリードコマンドＲｅａｄ１が入力され、その２サイクル後の時刻ｔ１１においてリードコマンドＲｅａｄ２が入力される。すると、時刻ｔ１１において、第１切替回路６２にてＬレベルの第１選択信号ＣＳ１が生成される。このＬレベルの第１選択信号ＣＳ１に応答して、選択回路Ｓ３は、第３ラッチ回路５９からのラッチデータＤＬ２３を選択して受信する。このため、この場合のリードコマンドＲｅａｄ２に対応するデータ列ＤＱの先頭データ（図１２のデータＤ４参照）については、第３遅延信号ＤＱＳ１３によってラッチされたラッチデータＤＬ２３がメモリコントローラ１２に出力される。したがって、最小入力サイクルｔＣＣＤで入力されるリードコマンドＲｅａｄ２に対応するデータストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量は、先頭以外の立ち上がりエッジに対するタイミング調整量と等しい第３の遅延量Ｔ１３となる。
【０１１８】
次に、時刻ｔ１１の３サイクル後の時刻ｔ１２においてリードコマンドＲｅａｄ３が入力されると、Ｈレベルの第１選択信号ＣＳ１が生成されるとともに、Ｈレベルの第２選択信号ＣＳ２が生成される。このＨレベルの第２選択信号ＣＳ２に応答して、選択回路Ｓ２は、第１ラッチ回路５７からのラッチデータＤＬ２１を選択して受信し、そのラッチデータＤＬ２１をラッチデータＤＬ２５として選択回路Ｓ３に出力する。さらに、上記Ｈレベルの第１選択信号ＣＳ１に応答して、選択回路Ｓ３は、選択回路Ｓ２からのラッチデータＤＬ２５を選択して受信し、そのラッチデータＤＬ２５をメモリコントローラ１２に出力する。このため、この場合のリードコマンドＲｅａｄ３に対応するデータ列ＤＱの先頭データＤ０（図１２の時刻ｔ２２参照）については、第１遅延信号ＤＱＳ１１によってラッチされたラッチデータＤＬ２１がメモリコントローラ１２に出力される。したがって、３サイクル間隔で入力されるリードコマンドＲｅａｄ３に対応するデータストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量は、上記第１の遅延量Ｔ１１となる。
【０１１９】
次に、図１１の時刻ｔ１２の４サイクル後の時刻ｔ１３においてリードコマンドＲｅａｄ４が入力されると、Ｈレベルの第１選択信号ＣＳ１が生成されるとともに、Ｌレベルの第２選択信号ＣＳ２が生成される。このＬレベルの第２選択信号ＣＳ２に応答して、選択回路Ｓ２は、第２ラッチ回路５８からのラッチデータＤＬ２２を選択して受信し、そのラッチデータＤＬ２２をラッチデータＤＬ２５として選択回路Ｓ３に出力する。さらに、上記Ｈレベルの第１選択信号ＣＳ１に応答して、選択回路Ｓ３は、選択回路Ｓ２からのラッチデータＤＬ２５を選択して受信し、そのラッチデータＤＬ２５をメモリコントローラ１２に出力する。このため、この場合のリードコマンドＲｅａｄ４に対応するデータ列ＤＱの先頭データＤ０（図１２の時刻ｔ２５参照）については、第２遅延信号ＤＱＳ１２によってラッチされたラッチデータＤＬ２２がメモリコントローラ１２に出力される。したがって、４サイクル間隔で入力されるリードコマンドＲｅａｄ４に対応するデータストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量は、上記第２の遅延量Ｔ１２となる。
【０１２０】
このように、本実施形態では、リードコマンドの入力間隔（発行間隔）に応じて、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量の設定が変更される。そのようにタイミング調整量を変更する理由を以下に説明する。
【０１２１】
詳述すると、データストローブ信号ＤＱＳは、いわゆるバス信号である。このため、データ列ＤＱを取り込むのに有効な期間、データ列ＤＱを取り込むのに有効な先頭立ち上がりエッジに先立つプリアンブル期間及び最後の立ち下がりの後に存在する約０．５サイクルのＬレベル期間（ポストアンブル期間）における論理は確定しているが、その他の期間はハイインピーダンス状態となる。したがって、図１２に示すように、データストローブ信号ＤＱＳは、ポストアンブル後に、Ｌレベルからハイインピーダンス（Ｈｉ−Ｚ）状態に遷移する。このＨｉ−Ｚ状態では、データストローブ信号ＤＱＳは、外部に接続される終端抵抗（図示略）により、例えばＨレベル及びＬレベルの中間の電圧に設定される（期間ＴＨ１の破線参照）。
【０１２２】
但し、上述したように、このＨｉ−Ｚ状態にはポストアンブル状態（Ｌレベル）から遷移されるため、図１２に示すように、データストローブ信号ＤＱＳは、ポストアンブル後、そのＬレベルから中間の電圧まで徐々に近づいていく。このとき、データ転送レートが高くなってクロック信号ＣＬＫの周波数が高くなると、Ｈｉ−Ｚ状態となる期間ＴＨ１が短くなる。これに伴って、リードコマンドＲｅａｄの入力間隔が短い場合には、Ｈｉ−Ｚ状態となる期間ＴＨ１が短くなるため（時刻ｔ２０〜ｔ２１）、その期間ＴＨ１内にデータストローブ信号ＤＱＳが上記中間の電圧まで上昇せずに、次のプリアンブル状態に遷移する。これに対し、リードコマンドＲｅａｄの入力間隔が十分に長い場合には、Ｈｉ−Ｚ状態となる期間ＴＨ１が長くなるため（時刻ｔ２３〜ｔ２４）、その期間ＴＨ１内にデータストローブ信号ＤＱＳが上記中間の電圧まで上昇し、次のプリアンブル状態に遷移する。このようにリードコマンドＲｅａｄの入力間隔によって、Ｈｉ−Ｚ状態が変化し、プリアンブル状態の波形が変わることになる。さらに、このプリアンブル状態の波形の違いに起因して、データストローブ信号ＤＱＳの先頭立ち上がりエッジの波形も異なるようになる（破線で示す立ち上がりエッジは、先頭以外の立ち上がりエッジの波形を参考として示したものである）。このため、リードコマンドＲｅａｄの入力間隔に応じて、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対する最適なタイミング調整量が異なることになる。
【０１２３】
したがって、本実施形態のように、リードコマンドＲｅａｄの入力間隔に応じて、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量（遅延量）を変更することによって、データ列ＤＱを確実に取り込むことができる。
【０１２４】
具体的には、リードコマンドＲｅａｄの入力間隔が短い場合（入力間隔が３サイクルの場合）の先頭データＤ０（時刻ｔ２２参照）については、遅延量の小さい第１の遅延量Ｔ１１を有する第１遅延信号ＤＱＳ１１によってラッチするようにした。ここで、第１遅延信号ＤＱＳ１１は、リードコマンドＲｅａｄの入力間隔が３サイクルである場合のデータストローブ信号ＤＱＳの先頭立ち上がりエッジが先頭データＤ０をラッチするための最適なタイミングで発生するように、そのタイミングが調整されている。このため、時刻ｔ２２に入力される先頭データＤ０を第１遅延信号ＤＱＳ１１の先頭立ち上がりエッジでラッチすることにより、セットアップタイムおよびホールドタイムを確実に確保することができ、上記先頭データＤ０を確実にラッチすることができる。
【０１２５】
その一方で、リードコマンドＲｅａｄの入力間隔が長い場合（入力間隔が４サイクル以上の場合）の先頭データＤ０（時刻ｔ２５参照）については、第１の遅延量Ｔ１１よりも大きい第２の遅延量Ｔ１２を有する第２遅延信号ＤＱＳ１２によってラッチするようにした。ここで、第２遅延信号ＤＱＳ１２は、リードコマンドＲｅａｄの入力間隔が４サイクル以上である場合のデータストローブ信号ＤＱＳの先頭立ち上がりエッジが先頭データＤ０をラッチするための最適なタイミングで発生するように、そのタイミングが調整されている。このため、時刻ｔ２５に入力される先頭データＤ０を第２遅延信号ＤＱＳ１２の先頭立ち上がりエッジでラッチすることにより、セットアップタイムおよびホールドタイムを確実に確保することができ、上記先頭データＤ０を確実にラッチすることができる。
【０１２６】
以上説明した本実施形態によれば、第１実施形態の（１）〜（４）の効果に加えて以下の効果を奏する。
（５）リードコマンドＲｅａｄの入力間隔（発行間隔）に応じて、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量（遅延量）の設定を変更するようにした。これにより、リードコマンドＲｅａｄの入力間隔に応じて、データストローブ信号ＤＱＳの先頭立ち上がりエッジの波形が異なる場合であっても、その時々の先頭立ち上がりエッジを、先頭データＤ０をラッチするための最適なタイミングに位相合わせすることができる。したがって、データ列ＤＱのデータ有効ウィンドウが狭くなった場合であっても、タイミングエラーの発生を抑制することができ、データストローブ信号ＤＱＳに基づいてデータ列ＤＱを正しくラッチすることができる。
【０１２７】
（第３実施形態）
以下、第３実施形態を図１３〜図１５に従って説明する。なお、先の図１〜図１２に示した部材と同一の部材にはそれぞれ同一の符号を付して示し、それら各要素についての詳細な説明は省略する。
【０１２８】
上記第１及び第２実施形態では、システム回路１０のインタフェース回路１３，１３Ａにおいてリードデータ列ＤＱを取り込む際のリードデータストローブ信号ＤＱＳのタイミングを調整する受信回路４０，５０について説明した。これに対し、本実施形態では、メモリ２０においてライトデータ列（データ列）ＷＤＱを取り込む際のライトデータストローブ信号（データストローブ信号）ＷＤＱＳのタイミングを調整する受信回路７０について説明する。
【０１２９】
まず、メモリ２０の内部構成例について図１３に従って説明する。
図１３に示すように、メモリ２０は、クロック入力回路２１と、データ送受信回路２２と、コマンドデコーダ２３と、コマンド受信回路２４と、制御回路２５と、アドレス入力回路２６と、メモリコア２７とを有している。
【０１３０】
クロック入力回路２１は、メモリコントローラ１２から供給される相補のクロック信号ＣＫ，ＸＣＫを各回路２２，２３，２６に出力する。
データ送受信回路２２は、受信回路７０と、送信回路（図示略）とを有している。受信回路７０は、ライト動作時に、メモリコントローラ１２から供給されるデータ列ＷＤＱを、メモリコントローラ１２から供給されるデータストローブ信号ＷＤＱＳの立ち上がりエッジと立ち下がりエッジに同期して受信する。そして、受信回路７０は、受信したデータ列ＷＤＱをメモリコア２７内の読出／書込回路８４に出力する。ここで、データストローブ信号ＷＤＱＳは、図１４に示すように、データ列ＷＤＱよりも例えば位相が９０度遅延されてメモリコントローラ１２から供給される。
【０１３１】
また、データ送受信回路２２（送信回路）は、リード動作時に、メモリコア２７から順次供給されるデータを、クロック信号ＣＫの立ち上がりエッジ及び立ち下がりエッジに同期してメモリコントローラ１２に出力する。さらに、この送信回路は、上記データに同期したデータストローブ信号をメモリコントローラ１２に出力する。
【０１３２】
コマンドデコーダ２３は、外部制御信号（例えば、チップセレクト信号、ロウアドレスストローブ信号、コラムアドレスストローブ信号やライトイネーブル信号など）を、クロック信号ＣＫの立ち上がりエッジに同期して受信する。コマンドデコーダ２３は、受信した外部制御信号の論理レベルの組み合わせに応じて認識した所定のコマンドＣＭＤ（例えば、ライトコマンドＷｒｉｔｅやリードコマンドＲｅａｄ等）を、コマンド受信回路２４と制御回路２５に出力する。
【０１３３】
コマンド受信回路２４は、コマンドデコーダ２３から入力されるコマンドＣＭＤがライトコマンドＷｒｉｔｅである場合に、そのライトコマンドＷｒｉｔｅの入力に応答してＨレベルとなるライトデータイネーブル信号（イネーブル信号）ＷＥＮを生成する。そして、コマンド受信回路２４は、イネーブル信号ＷＥＮを受信回路７０内の切替回路７９に出力する。
【０１３４】
制御回路２５は、リードコマンドＲｅａｄ及びライトコマンドＷｒｉｔｅに応答して、メモリコア２７の読み出し動作及び書き込み動作を実行するための制御信号を出力する。
アドレス入力回路２６は、メモリコントローラ１２から供給されるアドレス信号ＡＤＤをクロック信号ＣＫの立ち上がりエッジ及び立ち下がりエッジに同期して順次受信する。アドレス入力回路２６は、受信したアドレス信号ＡＤＤに応じて、行アドレス信号ＲＡＤＤを行デコーダ８２に出力するとともに、列アドレス信号ＣＡＤＤを列デコーダ８３に出力する。
【０１３５】
メモリコア２７内のメモリアレイ８１は、複数行複数列に配置された複数のメモリセル（図示略）を有している。各メモリセルは、１ビットのデータを記憶する。なお、各メモリセルは、ワード線とビット線との交差部分に形成される。
【０１３６】
行デコーダ８２は、行アドレス信号ＲＡＤＤに基づいて、メモリアレイ８１のワード線を選択する。列デコーダ８３は、列アドレス信号ＣＡＤＤに基づいて、メモリアレイ８１のビット線を選択する。
【０１３７】
読出／書込回路８４は、ライト動作時に、データ送受信回路２２の受信回路７０から入力されるデータ列ＷＤＱを、行デコーダ８２及び列デコーダ８３によって選択されたメモリセルに書き込む。また、読出／書込回路８４は、リード動作時に、行デコーダ８２及び列デコーダ８３によって選択されたメモリセルからデータを読み出し、その読み出したデータをデータ送受信回路２２の送信回路に出力する。
【０１３８】
次に、受信回路７０の内部構成例を説明する。
遅延回路７１には、メモリコントローラ１２からライトデータストローブ信号ＷＤＱＳが供給される。この遅延回路７１は、第１遅延回路７２と、第２遅延回路７３と、第３遅延回路７４とを有している。
【０１３９】
第１遅延回路７２は、データストローブ信号ＷＤＱＳに第１の遅延量を与えて第１遅延信号ＷＤＱＳ１を生成する。具体的には、第１遅延回路７２は、データストローブ信号ＷＤＱＳのプリアンブル期間に続く先頭の立ち上がりエッジのタイミングを、データ列ＷＤＱの先頭データＤ０をラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとするように、データストローブ信号ＷＤＱＳに第１の遅延量を与える。より具体的には、第１遅延回路７２は、データストローブ信号ＷＤＱＳの先頭の立ち上がりエッジのタイミングを、先頭データＤ０に対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号ＷＤＱＳに第１の遅延量を与える。上記第１の遅延量は、予めシミュレーション等によって設定された遅延時間であり、本実施形態では０（ゼロ）である。
【０１４０】
第２遅延回路７３は、図１５に示すように、データストローブ信号ＷＤＱＳに第２の遅延量Ｔ２１を与えて第２遅延信号ＷＤＱＳ２を生成する。具体的には、第２遅延回路７３は、データストローブ信号ＷＤＱＳの２番目以降の立ち上がりエッジのタイミングを、データ列ＷＤＱの先頭データＤ０以外の奇数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとなるように、データストローブ信号ＷＤＱＳに第２の遅延量Ｔ２１を与える。より具体的には、第２遅延回路７３は、データストローブ信号ＷＤＱＳの２番目以降の立ち上がりエッジのタイミングを、先頭データＤ０以外の奇数番目のデータに対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号ＷＤＱＳに第２の遅延量Ｔ２１を与える。上記第２の遅延量Ｔ２１は、予めシミュレーション等によって設定された遅延時間である。
【０１４１】
図１３に示す第３遅延回路７４は、上記第２遅延信号ＷＤＱＳ２を論理反転させて第３遅延信号ＷＤＱＳ３を生成する。すなわち、第３遅延回路７４は、データ列ＷＤＱの偶数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで立ち上がりエッジ（第２遅延信号ＷＤＱＳ２の立ち下がりエッジ）が発生するように、データストローブ信号ＷＤＱＳを遅延させた第３遅延信号ＷＤＱＳ３を生成する。
【０１４２】
ラッチ回路７５には、メモリコントローラ１２からデータ列ＷＤＱが供給される。このラッチ回路７５は、第１〜第３ラッチ回路７６〜７８を有している。
第１ラッチ回路７６は、第１遅延信号ＷＤＱＳ１（データストローブ信号ＷＤＱＳ）の立ち上がりエッジに同期してデータ列ＷＤＱをラッチし、そのラッチデータＤＬ３１を選択回路Ｓ４に出力する。第２ラッチ回路７７は、第２遅延信号ＷＤＱＳ２の立ち上がりエッジに同期してデータ列ＷＤＱをラッチし、そのラッチデータＤＬ３２を選択回路Ｓ４に出力する。第３ラッチ回路７８は、第３遅延信号ＷＤＱＳ３の立ち上がりエッジ（第２遅延信号ＷＤＱＳ２の立ち下がりエッジ）に同期してデータ列ＷＤＱをラッチし、そのラッチデータＤＬ３３を読出／書込回路８４に出力する。
【０１４３】
このようにして、ラッチ回路７５では、データストローブ信号ＷＤＱＳの立ち上がりエッジと立ち下がりエッジとに同期して、ダブルデータレートでのデータ列ＷＤＱの取り込みが実現される。
【０１４４】
選択回路Ｓ４は、切替回路７９から入力される選択信号ＣＳ３に応じて、第１ラッチ回路７６からのラッチデータＤＬ３１及び第２ラッチ回路７７からのラッチデータＤＬ３２のいずれか一方を選択して受信する。具体的には、選択回路Ｓ４は、Ｈレベルの選択信号ＣＳ３に応答して、第１ラッチ回路７６からのラッチデータＤＬ３１を選択して受信する。また、選択回路Ｓ４は、Ｌレベルの選択信号ＣＳ３に応答して、第２ラッチ回路７７からのラッチデータＤＬ３２を選択して受信する。そして、選択回路Ｓ４は、選択して受信したラッチデータを読出／書込回路８４に出力する。
【０１４５】
切替回路７９は、上記コマンド受信回路２４から入力するライトデータイネーブル信号ＷＥＮに基づいて上記選択信号ＣＳ３を生成する。具体的には、切替回路７９は、コマンドＣＭＤの最小入力サイクルｔＣＣＤ（ここでは、２サイクル）よりも長い間隔でライトコマンドＷｒｉｔｅが入力される場合には、Ｈレベルのイネーブル信号ＷＥＮに応答してＨレベルの選択信号ＣＳ３を生成する。このときの選択信号ＣＳ３は、データ列ＷＤＱの先頭データＤ０がラッチデータＤＬ３１として選択回路Ｓ４に入力される前にＨレベルに立ち上がる。また、この選択信号ＣＳ３は、上記先頭データＤ０がラッチデータＤＬ３１として選択回路Ｓ４から出力された後であって、例えば上記先頭データＤ０以外の奇数番目データがラッチデータＤＬ３２として選択回路Ｓ４に入力される前にＬレベルに立ち下がる。その一方で、切替回路７９は、最小入力サイクルｔＣＣＤでライトコマンドＷｒｉｔｅが入力された場合には、Ｌレベルの選択信号ＣＳ３を生成する。なお、イネーブル信号ＷＥＮの入力から先頭データＤ０がラッチデータＤＬ３１として選択回路Ｓ４に入力されるまでの時間は、ライトレイテンシや回路構成等に基づいて予めシミュレーションによって求めることができる。このため、イネーブル信号ＷＥＮの入力から選択信号ＣＳ３をＨレベルに立ち上げるまでの時間は、例えばライトレイテンシの長さ毎に予めシミュレーション等によって設定されている。
【０１４６】
この選択信号ＣＳ３に応じて、選択回路Ｓ４では、第１遅延信号ＷＤＱＳ１によってラッチされた先頭データＤ０がラッチデータＤＬ３１として受信され、第２遅延信号ＷＤＱＳ２によってラッチされた３番目以降の奇数番目データがラッチデータＤＬ３２として受信される。これにより、本実施形態では、データストローブ信号ＷＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量が異なる遅延量に切り替えられる。このようにタイミング調整量を切り替える理由を、図１５を参照して以下に説明する。なお、図１５において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
【０１４７】
例えば図１５に示すように、プリアンブル期間の存在するデータストローブ信号ＷＤＱＳでは、リード動作時と同様に、符号間干渉の影響等によって、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なる場合がある（破線波形は２番目の立ち上がりエッジの波形を参考として示したものである）。さらに、データ列ＷＤＱとデータストローブ信号ＷＤＱＳの配線の遅延時間の違い等に起因して、データストローブ信号ＷＤＱＳの先頭立ち上がりエッジがデータ列ＷＤＱの先頭データＤ０をラッチするための最適なタイミングに発生する場合がある。このような場合には、データストローブ信号ＷＤＱＳの２番目以降の立ち上がりエッジが、３番目以降の奇数番目データ（例えば３番目のデータＤ２）をラッチするための最適なタイミングからずれて発生してしまう。このため、データストローブ信号ＷＤＱＳをサンプリングクロックとした場合には、セットアップタイムが不足し、３番目以降の奇数番目データを正しくラッチすることができない。
【０１４８】
これに対し、本実施形態では、データストローブ信号ＷＤＱＳの２番目以降の立ち上がりエッジのタイミングを、３番目以降の奇数番目データをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとするように、データストローブ信号ＷＤＱＳを第２の遅延量Ｔ２１だけ遅延させた第２遅延信号ＷＤＱＳ２を生成した。さらに、その第２遅延信号ＷＤＱＳ２の２番目以降の立ち上がりエッジによって３番目以降の奇数番目データをラッチするようにした。これにより、符号間干渉の影響等によって各立ち上がりエッジ間で波形が異なる場合であっても、データ列ＷＤＱの各データを確実にラッチすることができる。
【０１４９】
以上説明した本実施形態によれば、上記第１実施形態の（１）〜（３）と同様の効果を奏する。
（他の実施形態）
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
【０１５０】
・上記各実施形態では、ラッチ回路４５，５６，７４の後段側に選択回路Ｓ１，Ｓ２，Ｓ３，Ｓ４をそれぞれ設けるようにした。これに限らず、例えばラッチ回路４５，５６，７４の前段側に選択回路Ｓ１，Ｓ２，Ｓ３，Ｓ４をそれぞれ設けるようにしてもよい。
【０１５１】
例えば図１６に示されるように、ＤＬＬ回路４１ａ（遅延回路４１）の後段に選択回路Ｓ５を設けるようにしてもよい。この場合の選択回路Ｓ５には、ＤＬＬ回路４１ａから第１遅延信号ＤＱＳ１と第２遅延信号ＤＱＳ２とが入力される。選択回路Ｓ５は、Ｈレベルの選択信号ＣＳに応じて第１遅延信号ＤＱＳ１を選択し、Ｌレベルの選択信号ＣＳに応じて第２遅延信号ＤＱＳ２を選択する。そして、選択回路Ｓ５は、選択した遅延信号をアンド回路Ａ１を介してＦＦ回路Ｆ１，Ｆ６のクロック端子に出力する。ここで、上記Ｈレベルの選択信号ＣＳは、データ列ＤＱの先頭データＤ０がＦＦ回路Ｆ１に入力される前に立ち上がり、先頭データＤ０以外の奇数番目データ（ここでは、３番目のデータＤ２）がＦＦ回路Ｆ６に入力される前に立ち下がる。これにより、先頭データＤ０が第１遅延信号ＤＱＳ１によってＦＦ回路Ｆ１でラッチされ、先頭データＤ０以外の奇数番目データが第２遅延信号ＤＱＳ２によってＦＦ回路Ｆ１，Ｆ６でラッチされる。換言すると、データストローブ信号ＤＱＳの先頭立ち上がりエッジに対するタイミング調整量と、先頭以外の立ち上がりエッジに対するタイミング調整量とを異なる遅延量に切り替えることができる。
【０１５２】
・上記第１及び第２実施形態では、リードコマンドＲｅａｄに応答して、具体的にはリードコマンドＲｅａｄに応答してＨレベルとなるイネーブル信号ＲＥＮの入力をトリガにしてＨレベルの選択信号ＣＳ，ＣＳ１を生成するようにした。これに限らず、リードコマンドＲｅａｄに応答して、例えばリードコマンドＲｅａｄに応じて発生するデータストローブ信号ＤＱＳのプリアンブル状態への遷移に応答して、Ｈレベルの選択信号ＣＳ，ＣＳ１を生成するようにしてもよい。
【０１５３】
例えば図１６に示されるように、データストローブ信号ＤＱＳのプリアンブルを検出するプリアンブル検出回路６５を設け、その検出回路６５から選択回路Ｓ５に対して上記選択信号ＣＳと同様の選択信号ＣＳ５を出力するようにしてもよい。検出回路６５では、例えばデータストローブ信号ＤＱＳとその信号ＤＱＳと相補な信号とについて、Ｈレベル検出用の閾値電圧とＬレベル検出用の閾値電圧との比較を行うことによって、データストローブ信号ＤＱＳのプリアンブルへの遷移を検知することができる。そして、検出回路６５は、データストローブ信号ＤＱＳのプリアンブルの検出に応答してＨレベルの選択信号ＣＳ５を生成する。すなわち、この構成では、データストローブ信号ＤＱＳの先頭立ち上がりエッジの前に発生するプリアンブルの検出をトリガとしてＨレベルの選択信号ＣＳ５が生成される。したがって、このような構成であっても、データ列ＤＱの先頭データＤ０がＦＦ回路Ｆ１に入力される前に上記選択信号ＣＳ５を確実にＨレベルに立ち上げることができる。
【０１５４】
・上記第１実施形態における受信回路４０を、例えば図１７に示されるような構成に具体化してもよい。すなわち、この受信回路４０では、ラッチ回路４６がＦＦ回路４６ａを含み、ラッチ回路４７がＦＦ回路４７ａを含み、ラッチ回路４８がＦＦ回路４８ａを含む。このＦＦ回路４６ａは、第１遅延信号ＤＱＳ１の立ち上がりエッジに同期してデータ列ＤＱをラッチする。ＦＦ回路４７ａは、第２遅延信号ＤＱＳ２の立ち上がりエッジに同期してデータ列ＤＱをラッチする。ＦＦ回路４８ａは、第３遅延信号ＤＱＳ３の立ち上がりエッジに同期してデータ列ＤＱをラッチする。選択回路Ｓ１は、Ｈレベルの選択信号ＣＳに応答して、ＦＦ回路４６ａからのラッチデータＤＬ１をラッチデータＤＬ１１として出力する一方、Ｌレベルの選択信号ＣＳに応答して、ＦＦ回路４７ａからのラッチデータＤＬ２をラッチデータＤＬ１１として出力する。ここで、Ｈレベルの選択信号ＣＳは、データ列ＤＱの先頭データＤ０がラッチデータＤＬ１として選択回路Ｓ１に入力される前にＨレベルに立ち上がる。さらに、Ｈレベルの選択信号ＣＳは、先頭データＤ０が選択回路Ｓ１から出力された後であって、３番目の奇数番目データＤ２がラッチデータＤＬ２として選択回路Ｓ１に入力される前にＬレベルに立ち下がる。
【０１５５】
・上記各実施形態では、データストローブ信号ＤＱＳの各立ち上がりエッジのタイミング調整量を、データストローブ信号ＤＱＳに与える遅延量で調整するようにした。これに限らず、例えばデータ列ＤＱに与える遅延量を調整することにより、データストローブ信号ＤＱＳの各立ち上がりエッジのタイミング調整量を相対的に調整するようにしてもよい。
【０１５６】
・上記第２実施形態では、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとでタイミング調整量を切り替え、さらにその先頭立ち上がりエッジのタイミング調整量をリードコマンドＲｅａｄの発行間隔に応じて変更するようにした。これに限らず、例えば単にリードコマンドＲｅａｄの発行間隔に応じて、先頭立ち上がりエッジのタイミング調整量を変更するようにしてもよい。このような構成であっても、少なくとも上記第２実施形態の（５）の効果を奏することができる。
【０１５７】
・上記各実施形態では、データストローブ信号ＤＱＳ，ＷＤＱＳの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量を異なる遅延量に設定するようにした。これに限らず、例えばデータストローブ信号ＤＱＳ，ＷＤＱＳの２番目の立ち上がりエッジと３番目の立ち上がりエッジとに対するタイミング調整量を異なる遅延量に設定するようにしてもよい。あるいは、例えばデータストローブ信号ＤＱＳ，ＷＤＱＳの各立ち上がりエッジに対するタイミング調整量をそれぞれ異なる遅延量に設定するようにしてもよい。この構成によれば、上述した符号間干渉や他の要因によってデータストローブ信号ＤＱＳ，ＷＤＱＳの各立ち上がりエッジの波形が互いに異なる場合であっても、各立ち上がりエッジの波形に合わせてタイミング調整量を切り替えることができる。これにより、タイミングエラーの発生を好適に抑制することができる。
【０１５８】
また、データストローブ信号ＤＱＳの立ち下がりエッジについても、立ち上がりエッジと同様のタイミング調整を行うようにしてもよい。
・上記各実施形態では、選択信号ＣＳを、リードコマンドＲｅａｄの発行後の第３イネーブル信号ＥＮ３の最初の立ち上がりエッジよりも前に立ち上がり、第３イネーブル信号ＥＮ３の最初の立ち下がりエッジに同期して立ち下がるように生成した。これに限らず、例えば選択信号ＣＳを、リードコマンドＲｅａｄの発行後の第３イネーブル信号ＥＮ３の最初の立ち上がりエッジに同期して立ち上がるように生成してもよい。また、選択信号ＣＳを、第３イネーブル信号ＥＮ３の最初の立ち上がりよりも後であって、第３イネーブル信号ＥＮ３の２番目の立ち上がりエッジよりも前に立ち下がるように生成してもよい。
【０１５９】
・上記各実施形態における遅延回路４１，５１，７１は、データストローブ信号ＤＱＳ，ＷＤＱＳを所定時間だけ遅延させることのできる構成であれば、ＤＬＬ回路に特に制限されない。
【０１６０】
・上記第１実施形態では、第２遅延信号ＤＱＳ２を論理反転させて第３遅延信号ＤＱＳ３を生成するようにした。これに限らず、例えば第２遅延信号ＤＱＳの位相を１８０度遅延させて第３遅延信号ＤＱＳ３を生成するようにしてもよい。但し、この場合には、第３遅延信号ＤＱＳ３の各立ち上がりエッジの波形はデータストローブ信号ＤＱＳの各立ち上がりエッジの波形に相当する。このため、第３遅延信号ＤＱＳ３では、その先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なることになる。そこで、さらに第１遅延信号ＤＱＳの位相を１８０度遅延させた第４遅延信号を生成し、その第４遅延信号でデータ列ＤＱの２番目のデータＤ１をラッチし、上記第３遅延信号ＤＱＳ３で４番目のデータＤ３をラッチするようにしてもよい。これにより、全ての偶数番目のデータについても確実にラッチすることができる。なお、上記第２実施形態における第４遅延信号ＤＱＳ１４や上記第３実施形態における第２遅延信号ＷＤＱＳ２についても、上記第３遅延信号ＤＱＳ３と同様のことが言える。
【０１６１】
・上記第１及び第２実施形態では、メモリ２０から出力されるデータ列ＤＱをデータストローブ信号ＤＱＳに基づいて受信する受信回路４０，５０に具体化した。これに限らず、例えばメモリ以外の回路から出力される信号（入力信号）をストローブ信号に基づいて受信する受信回路、例えば通信用の回路から出力される信号をストローブ信号に基づいて受信する受信回路に具体化してもよい。
【符号の説明】
【０１６２】
１０  システム回路（システム装置）
１１  コア論理回路（コア回路）
１２  メモリコントローラ（コントローラ）
１３，１３Ａ  インタフェース回路
２０  メモリ（対象回路、半導体記憶装置）
４０，５０，７０  受信回路
４２，５２，５３，７２  遅延回路（第１の遅延回路）
４３，５４，７３  遅延回路（第２の遅延回路）
４５，５６，７５  ラッチ回路
４６，４７，５７，５８，７６，７７  ラッチ回路
４９，６２，６３，７９  切替回路
Ｓ１，Ｓ２，Ｓ３，Ｓ４，Ｓ５  選択回路
Ｒｅａｄ  リードコマンド（データのリクエスト）
【図１】
0005633297.tif 000002
【図２】
0005633297.tif 000003
【図３】
0005633297.tif 000004
【図４】
0005633297.tif 000005
【図５】
0005633297.tif 000006
【図６】
0005633297.tif 000007
【図７】
0005633297.tif 000008
【図８】
0005633297.tif 000009
【図９】
0005633297.tif 000010
【図１０】
0005633297.tif 000011
【図１１】
0005633297.tif 000012
【図１２】
0005633297.tif 000013
【図１３】
0005633297.tif 000014
【図１４】
0005633297.tif 000015
【図１５】
0005633297.tif 000016
【図１６】
0005633297.tif 000017
【図１７】
0005633297.tif 000018
【図１８】
0005633297.tif 000019
【図１９】
0005633297.tif 000020
【図２０】
0005633297.tif 000021
【図２１】
0005633297.tif 000022