(第1実施形態)
以下、第1実施形態を図1〜図7に従って説明する。
図1に示すように、システムは、システム回路10(システム装置)と、システム回路10によってアクセスされるメモリ20(対象回路)とを有している。システム回路10は、例えば1つのチップ(半導体集積回路装置:LSI)である。メモリ20は、同期式の半導体記憶装置、例えばダブルレート方式のダイナミックランダムアクセスメモリ(Double Data Rate Synchronous Dynamic Random Access Memory:DDR−SDRAM)である。なお、本実施形態のメモリ20では、バースト長が4ワードに設定されている。
次に、システム回路10の内部構成例を説明する。
コア回路11は、実行する処理に応じて、メモリ20のデータを読み込むためのリード要求と、そのデータが格納されたアドレスとをメモリコントローラ12に出力する。また、コア回路11は、メモリ20にデータを書き込むためのライト要求と、そのデータを格納するアドレスとをメモリコントローラ12に出力する。なお、コア回路11は、例えば中央処理装置(Central Processing Unit:CPU)である。
メモリコントローラ12は、当該メモリコントローラ12の内部クロック信号CLK(図2参照)を、インタフェース回路13を介して相補のクロック信号CK,XCKとしてメモリ20に供給する。
また、メモリコントローラ12は、コア回路11からの要求に応じて、インタフェース回路13を介してメモリ20をアクセスする。例えばコア回路11からの要求がリード要求の場合には、メモリコントローラ12は、インタフェース回路13を介してコマンドCMD(ここでは、リードコマンド)及びアドレスをメモリ20に供給する。すると、メモリ20は、リードコマンドに応答し、該当アドレスから読み出したデータ列DQと、そのデータ列DQに同期したデータストローブ信号DQSとを、インタフェース回路13を介してメモリコントローラ12に出力する。このとき、メモリ20は、相補のクロック信号CK,XCKに同期してデータ列DQをバースト出力する、すなわちメモリコントローラ12の内部クロック信号CLK(図2参照)の2倍の周波数でデータ列DQをバースト出力する。一方、コア回路11からの要求がライト要求の場合には、メモリコントローラ12は、インタフェース回路13を介してライトコマンド、データ列DQ、データストローブ信号DQS、及びデータ列DQを書き込むアドレスをメモリ20に供給する。すると、メモリ20は、該当するアドレスにデータ列DQを記憶する。
メモリ20とインタフェース回路13との間では、データストローブ信号DQSによりデータ列DQの授受が行われる。すなわち、インタフェース回路13は、リード動作時に、メモリ20から供給されるデータストローブ信号DQSのタイミングを調整し、タイミング調整されたデータストローブ信号DQSに同期してデータ列DQを取り込み、その取り込んだデータ列DQをメモリコントローラ12に出力する。また、インタフェース回路13は、ライト動作時に、メモリコントローラ12から受け取ったデータ列DQ及びデータストローブ信号DQSをメモリ20に出力する。
次に、このインタフェース回路13の内部構成例を図2に従って説明する。
送信回路30内のコマンド送信回路31は、メモリコントローラ12から入力されるリードコマンドReadに基づいて、リードデータイネーブル信号(以下、単に「イネーブル信号」とも言う。)RENを生成する。具体的には、コマンド送信回路31は、リードコマンドReadの入力に応答してHレベルとなるイネーブル信号RENを生成する。そして、コマンド送信回路31は、受信回路40内の切替回路49にイネーブル信号RENを送信するとともに、メモリ20にリードコマンドReadを送信する。
バッファ回路32は、メモリコントローラ12から供給される内部クロック信号CLKに基づいて、その内部クロック信号CLKに同期した上記クロック信号CK,XCKを生成する。そして、バッファ回路32は、クロック信号CK,XCKをメモリ20に供給する。
続いて、インタフェース回路13が有する受信回路40の内部構成例を説明する。
受信回路40内の遅延回路41には、メモリ20からデータストローブ信号DQSが供給される。この遅延回路41は、データストローブ信号DQSを互いに異なる所定時間だけ遅延させた遅延データストローブ信号(以下、単に「遅延信号」とも言う。)DQS1,DQS2,DQS3を生成する。
ここで、比較例として、データストローブ信号DQSの各立ち上がりエッジに同じ遅延量を与えた場合に発生する問題点について説明する。すなわち、データストローブ信号DQSを所定時間だけ遅延した遅延信号DQSdによってデータ列DQの奇数番目のデータをラッチする場合には、データ転送レートの上昇や電源電圧の低下等に起因して以下のような問題が発生することが本発明者らの考察やシミュレーション等によって明らかにされた。
詳述すると、図19(a)に示すようにデータ転送レートが低い場合には、データストローブ信号DQSは十分な振幅が得られる。しかし、図19(b)に示すようにデータ転送レートが高くなると、データストローブ信号DQSでは十分な振幅が得られなくなる。すなわち、データ転送レートが高くなると、データストローブ信号DQSでは、プリアンブル期間後のトグルが開始された後において、信号レベルが所望のLレベルまで下がらずに、次のHレベルへの立ち上がりが開始されることになる。すると、データストローブ信号DQSでは、データ列DQを取り込むのに有効な立ち上がりエッジのうち、プリアンブル期間に続く先頭の立ち上がりエッジの波形が他の立ち上がりエッジの波形と異なる(図19(b)の先頭立ち上がりエッジの隣に示された破線波形は、先頭以外の立ち上がりエッジの波形を参考として示したものである)。これは、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとにおいて、前の信号レベルの状態が異なることに起因している。すなわち、先頭立ち上がりエッジでは、その前にLレベルが約1サイクル続くプリアンブル期間があるのに対し、先頭以外の立ち上がりエッジでは、その前の信号レベルがHレベルとLレベルとを繰り返している。このように前の信号レベルの状態が異なることに起因して、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なっている。換言すると、符号間干渉(ISI:Inter Symbol Interference)の影響によって、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なっている。この符号間干渉は、データ転送レートが高くなるほど大きくなり、上述のようにデータ転送レートの上昇に伴ってデータストローブ信号DQSが十分な振幅を得られなくなると、その影響が波形の違いとして顕著に現れる。
なお、低電圧化のために電源電圧を下げた場合には、データストローブ信号DQSを駆動する出力トランジスタの駆動能力を大きくすることが困難であるため、上述した符号間干渉の影響がより顕著に現れる。
さらに、図20に示すように、データ転送レートを高く、且つ電源電圧を低下させた場合のデータストローブ信号DQSの信号波形についてシミュレーションした結果からも、上述した問題が発生することが明らかにされた。すなわち、このシミュレーション結果から明らかなように、データストローブ信号DQSの信号波形は、立ち上がりエッジの波形が2つのグループ、つまり先頭立ち上がりエッジの波形(実線参照)と先頭以外の立ち上がりエッジの波形(破線参照)とに分かれている。換言すると、先頭立ち上がりエッジの波形が先頭以外の立ち上がりエッジの波形と異なっている。なお、データストローブ信号DQSの立ち下がりエッジについても、同様に2つのグループに分かれている。また、図20においては、複数の信号波形が重なっているが、便宜上、1本の線で示している。
そして、このようにデータストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なると、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとでは、データ列DQを取り込むためにデータストローブ信号DQSに与える最適なタイミング調整量(遅延量)が異なることになる。
詳述すると、まず、最適な遅延量とは、データ列DQをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングでデータストローブ信号DQSのエッジが生じるように、データストローブ信号DQSのタイミングを調整するための遅延量のことである。より具体的には、最適な遅延量とは、図21に示すように、上記セットアップタイムTsのマージンであるセットアップマージンTsmとホールドタイムThのマージンThmであるホールドマージンとが等しくなる最適なタイミングでデータストローブ信号DQSのエッジが生じるように、データストローブ信号DQSのタイミングを調整するための遅延量のことである。換言すると、データストローブ信号DQSのエッジのタイミングを最適なタイミングまでずらすのに必要な遅延量が最適な遅延量であると言える。
このため、データストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なると、図21に示すように、先頭立ち上がりエッジのタイミングを最適なタイミングまでずらすのに必要な遅延量Td1と先頭以外の立ち上がりエッジのタイミングを最適なタイミングまでずらすのに必要な遅延量Td2とが異なることになる。具体的には、図21に示すようにデータストローブ信号DQSの先頭立ち上がりエッジの立ち上がりタイミングがそれ以外の立ち上がりエッジの立ち上がりタイミングよりも遅くなると、遅延量Td1が遅延量Td2よりも小さくなる。したがって、例えば図21に示すように、データストローブ信号DQSの各立ち上がりエッジに対して単一の遅延量Td2を与える場合には、先頭立ち上がりエッジに対する遅延量がデータ有効ウィンドウに対して適切な遅延量ではないため、先頭立ち上がりエッジによってデータ列DQを正しくラッチできない場合がある。詳しくは、上記遅延量Td2を有する遅延信号DQSdの各立ち上がりエッジでデータ列DQの奇数番目のデータをラッチする場合には、遅延信号DQSdの2番目の立ち上がりエッジがデータ列DQの3番目のデータD2をラッチするための最適なタイミングで発生するため、そのデータD2を正しくラッチすることができる。しかし、上記遅延量Td2がデータストローブ信号DQSの先頭立ち上がりエッジに対する最適な遅延量Td1よりも大きいため、遅延信号DQSdの先頭立ち上がりエッジが先頭データD0をラッチするための最適なタイミングよりも遅く発生する。このとき、図21に示すように、遅延信号DQSdの先頭立ち上がりエッジからデータ列DQが変化するタイミングまでの時間Th1がホールドタイムThよりも短くなると、ホールドエラーとなり、先頭データD0を正しくラッチできないという問題が発生する。
そこで、図2に示すように、本実施形態の遅延回路41は、先頭立ち上がりエッジ(第1方向の第1遷移)用の第1遅延回路42と、先頭以外の立ち上がりエッジ(第1方向の第2遷移)用の第2遅延回路43と、立ち下がりエッジ用の第3遅延回路44とを有している。
第1遅延回路42は、図3に示すように、データストローブ信号DQSに第1の遅延量T1を与えて第1遅延信号DQS1を生成する。具体的には、第1遅延回路42は、データストローブ信号DQSのプリアンブル期間に続く先頭の立ち上がりエッジのタイミングを、データ列DQの先頭データD0をラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとするように、データストローブ信号DQSに第1の遅延量T1を与える。より具体的には、第1遅延回路42は、データストローブ信号DQSの先頭の立ち上がりエッジのタイミングを、先頭データD0に対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号DQSに第1の遅延量T1を与える。上記第1の遅延量T1は、予めシミュレーション等によって設定された遅延時間である。ここでは、信号の立ち上がり部分の中央を基準点とし、データストローブ信号DQSの基準点から第1遅延信号DQS1の基準点までの時間が上記第1の遅延量T1となる。このように、第1遅延回路42は、先頭立ち上がりエッジ用にデータストローブ信号DQSのタイミングを調整した第1遅延信号DQS1を生成する。
第2遅延回路43は、データストローブ信号DQSに第2の遅延量T2(例えば、信号DQSの位相の90度分)を与えて第2遅延信号DQS2を生成する。具体的には、第2遅延回路43は、データストローブ信号DQSの2番目以降の立ち上がりエッジのタイミングを、データ列DQの先頭データD0以外の奇数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとなるように、データストローブ信号DQSに第2の遅延量T2を与える。より具体的には、第2遅延回路43は、データストローブ信号DQSの2番目以降の立ち上がりエッジのタイミングを、先頭データD0以外の奇数番目のデータに対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号DQSに第2の遅延量T2を与える。ここで、第2の遅延量T2は、上記第1の遅延量T1よりも長い時間である。また、この第2の遅延量T2は、予めシミュレーション等によって設定された遅延時間である。このように、第2遅延回路43は、先頭立ち上がりエッジ以外の立ち上がりエッジ用にデータストローブ信号DQSのタイミングを調整した第2遅延信号DQS2を生成する。
図2に示す第3遅延回路44は、データストローブ信号DQSに第3の遅延量を与えて第3遅延信号DQS3を生成する。具体的には、第3遅延回路44は、上記第2遅延信号DQS2を論理反転させた第3遅延信号DQS3を生成する。すなわち、第3遅延回路44は、データ列DQの偶数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで立ち上がりエッジ(第2遅延信号DQS2の立ち下がりエッジ)で発生するように、データストローブ信号DQSを遅延させた第3遅延信号DQS3を生成する。このように、第3遅延回路44は、立ち下がりエッジ用にデータストローブ信号DQSのタイミングを調整した第3遅延信号DQS3を生成する。
ラッチ回路45には、メモリ20からデータ列DQが供給される。具体的には、ラッチ回路45には、バースト長に応じた数のデータを有するデータ列DQがデータストローブ信号DQSに同期して連続的に入力される。このラッチ回路45は、メモリ20からダブルデータレートで出力されるデータ列DQを、メモリコントローラ12におけるクロック信号CLKの速度に合わせるための回路である。このラッチ回路45は、複数のラッチ回路、つまり第1ラッチ回路46と第2ラッチ回路47と第3ラッチ回路48とを有している。
第1ラッチ回路46は、第1遅延信号DQS1の立ち上がりエッジに同期してデータ列DQをラッチし、そのラッチデータDL1を選択回路S1に出力する。
第2ラッチ回路47は、第2遅延信号DQS2の立ち上がりエッジに同期してデータ列DQをラッチし、そのラッチデータを選択回路S1又はメモリコントローラ12に出力する。具体的には、第2ラッチ回路47は、データ列DQの先頭データD0や5番目のデータD4等についてラッチした場合には、そのラッチデータDL2を選択回路S1に出力する。また、第2ラッチ回路47は、データ列DQの3番目のデータD2や7番目のデータD6等についてラッチした場合には、そのラッチデータDL13をメモリコントローラ12に直接出力する(なお、詳細については、後述する図4の説明を参照)。
第3ラッチ回路48は、第3遅延信号DQS3の立ち上がりエッジ(第2遅延信号DQS2の立ち下がりエッジ)に同期してデータ列DQをラッチし、そのラッチデータDL12,DL14をメモリコントローラ12に出力する。
このようにして、ラッチ回路45では、データストローブ信号DQSの立ち上がりエッジと立ち下がりエッジとに同期して、ダブルデータレートでのデータ列DQの取り込みが実現される。
選択回路S1は、切替回路49から入力される選択信号CSに応じて、第1ラッチ回路46からのラッチデータDL1及び第2ラッチ回路47からのラッチデータDL2のいずれか一方を選択して受信する。具体的には、選択回路S1は、Hレベルの選択信号CSに応答して、第1ラッチ回路46からのラッチデータDL1(第1遅延信号DQS1によってラッチされたラッチデータDL1)を選択して受信する。また、選択回路S1は、Lレベルの選択信号CSに応答して、第2ラッチ回路47からのラッチデータDL2(第2遅延信号DQS2によってラッチされたラッチデータDL2)を選択して受信する。そして、選択回路S1は、選択して受信したデータをラッチデータDL11としてメモリコントローラ12に出力する。
切替回路49は、送信回路30内のコマンド送信回路31から入力するイネーブル信号RENに基づいて上記選択信号CSを生成する。具体的には、切替回路49は、イネーブル信号RENに応答して、その信号RENの入力から所定時間経過後に所定時間だけHレベルとなる選択信号CSを生成する。より具体的には、選択信号CSは、データ列DQの先頭データD0がラッチデータDL1として選択回路S1に入力される前にHレベルに立ち上がる。さらに、選択信号CSは、データ列DQの先頭データD0が選択回路S1から出力された後であって、例えばデータ列DQの3番目以降の奇数番目データ(本例では、5番目のデータD4)がラッチデータDL2として選択回路S1に入力される前にLレベルに立ち下がる。なお、イネーブル信号RENの入力から先頭データD0がラッチデータDL1として選択回路S1に入力されるまでの時間は、メモリ20のリードレイテンシや回路構成等に基づいて予めシミュレーションによって求めることができる。このため、イネーブル信号RENの入力から選択信号CSをHレベルに立ち上げるまでの時間は、例えばメモリ20のリードレイテンシの長さ毎に予めシミュレーション等によって設定されている。
この選択信号CSに応じて、上記選択回路S1では、第1遅延信号DQS1によってラッチされた先頭データD0がラッチデータDL1として受信され、第2遅延信号DQS2によってラッチされた3番目以降の奇数番目データがラッチデータDL2として受信される。ここで、図3に示すように、第1遅延信号DQS1は、その先頭立ち上がりエッジがデータ列DQの先頭データD0をラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで発生するようにタイミングが調整されている。このため、この第1遅延信号DQS1によって先頭データD0をラッチすることにより(図3の上段の「DQ」参照)、セットアップタイム及びホールドタイムを確実に確保することができ、上記先頭データD0を確実にラッチすることができる。したがって、選択回路S1は、先頭データD0が確実にラッチされたラッチデータDL1を受信することができる。一方、第2遅延信号DQS2は、その先頭立ち上がりエッジ以外の立ち上がりエッジがデータ列DQの3番目以降の奇数番目データをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで発生するようにタイミングが調整されている。このため、この第2遅延信号DQS2によって3番目以降の奇数番目データをラッチすることにより(図3の下段の「DQ」参照)、セットアップタイム及びホールドタイムを確実に確保することができ、上記奇数番目データを確実にラッチすることができる。したがって、選択回路S1は、3番目以降の奇数番目データが確実にラッチされたラッチデータDL2を受信することができる。
このように、受信回路40では、データ列DQの先頭データD0を第1遅延信号DQS1によりラッチし、データ列DQの3番目以降の奇数番目データを第2遅延信号DQS2によりラッチすることによって、全ての奇数番目データを確実にラッチすることができる。換言すると、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量を第1の遅延量T1とし、先頭以外の立ち上がりエッジに対するタイミング調整量を上記第1の遅延量T1とは異なる第2の遅延量T2とすることにより、全ての奇数番目データを確実にラッチすることができる。
なお、第1遅延信号DQS1の先頭以外の立ち上がりエッジは、データ列DQの3番目以降の奇数番目データをラッチするための最適なタイミングよりも早く発生する。このため、第1ラッチ回路46では、セットアップタイムが不足し、3番目以降の奇数番目データを正しくラッチできない場合がある。同様に、第2遅延信号DQS2の先頭立ち上がりエッジは、データ列DQの先頭データD0をラッチするための最適なタイミングよりも遅く発生する。このため、第2ラッチ回路47では、ホールドタイムが不足し、データ列DQの先頭データD0を正しくラッチできない場合がある。
次に、受信回路40の具体的構成例を図4に従って説明する。
図4に示すように、バッファ回路B1には、メモリ20からデータ列DQが供給される。このバッファ回路B1の出力端子は、D−フリップフロップ回路(FF回路)F1,F3,F5,F6,F8の入力端子に接続されている。
バッファ回路B2には、メモリ20からデータストローブ信号DQSが供給される。このバッファ回路B2の出力端子は、遅延同期ループ(Delay Locked Loop:DLL)回路41aに接続されている。なお、バッファ回路B1,B2は、入力信号に対して出力信号のレベルが実質的に変更されないため、出力信号に入力信号と同じ符号を用いて説明する。
DLL回路41aは、遅延回路41の一例である。すなわち、DLL回路41aは、第1遅延回路42、第2遅延回路43及び第3遅延回路44としての機能を有し、第1〜第3遅延信号DQS1〜DQS3を生成する。そして、DLL回路41aは、第1遅延信号DQS1をアンド回路A1に出力し、第2遅延信号DQS2をアンド回路A3,A6に出力し、第3遅延信号DQS3をアンド回路A2,A4,A5,A7,A8に出力する。
アンド回路A1には、第1遅延信号DQS1と併せて、第1イネーブル信号EN1が入力される。このアンド回路A1は、第1遅延信号DQS1と第1イネーブル信号EN1とを論理積演算した結果を持つ信号をFF回路F1のクロック端子に出力する。具体的には、アンド回路A1は、Lレベルの第1イネーブル信号EN1が入力されている場合には、第1遅延信号DQS1に関わらず、Lレベルの出力信号を出力する。一方、アンド回路A1は、Hレベルの第1イネーブル信号EN1が入力されている場合に、第1遅延信号DQS1を出力信号としてFF回路F1に出力する。すなわち、第1イネーブル信号EN1がHレベルのときに、第1遅延信号DQS1が有効にされてFF回路F1に出力される。ここで、第1イネーブル信号EN1は、例えばデータ列DQの先頭データD0及び2番目のデータD1が受信回路40に入力されるときにHレベルとなる信号である。
FF回路F1は、アンド回路A1の出力信号の立ち上がりエッジ、つまり第1イネーブル信号EN1がHレベルであるときの第1遅延信号DQS1の立ち上がりエッジに同期してデータ列DQをラッチする。そして、FF回路F1は、そのラッチレベルと等しいレベルのラッチデータDL1aを、次段のFF回路F2の入力端子に出力する。
アンド回路A2には、第3遅延信号DQS3と併せて、第1イネーブル信号EN1が供給される。このアンド回路A2の出力端子は、FF回路F2のクロック端子に接続されている。
FF回路F2は、アンド回路A2の出力信号の立ち上がりエッジ、つまり第1イネーブル信号EN1がHレベルであるときの第3遅延信号DQS3の立ち上がりエッジに同期してラッチデータDL1aをラッチする。そして、FF回路F2は、そのラッチレベルと等しいレベルのラッチデータDL1を選択回路S1に出力する。なお、本実施形態では、FF回路F1,F2及びアンド回路A1,A2が第1ラッチ回路46として機能する。
アンド回路A3には、第2遅延信号DQS2と併せて、第1イネーブル信号EN1が供給される。このアンド回路A3の出力端子は、FF回路F3のクロック端子に接続されている。
FF回路F3は、アンド回路A3の出力信号の立ち上がりエッジ、つまり第1イネーブル信号EN1がHレベルであるときの第2遅延信号DQS2の立ち上がりエッジに同期してデータ列DQをラッチする。そして、FF回路F3は、そのラッチレベルと等しいレベルのラッチデータDL2aを、次段のFF回路F4の入力端子に出力する。
アンド回路A4には、第3遅延信号DQS3と併せて、第1イネーブル信号EN1が供給される。このアンド回路A4の出力端子は、FF回路F4のクロック端子に接続されている。
FF回路F4は、アンド回路A4の出力信号の立ち上がりエッジ、つまり第1イネーブル信号EN1がHレベルであるときの第3遅延信号DQS3の立ち上がりエッジに同期してラッチデータDL2aをラッチする。そして、FF回路F4は、そのラッチレベルと等しいレベルのラッチデータDL2を選択回路S1に出力する。なお、本実施形態では、FF回路F3,F4及びアンド回路A3,A4が第2ラッチ回路47として機能する。
選択回路S1は、切替回路49からのHレベルの選択信号CSに応答して、FF回路F2からのラッチデータDL1を選択して受信し、その受信したデータをラッチデータDL11としてメモリコントローラ12内のFF回路F9の入力端子に出力する。また、選択回路S1は、Lレベルの選択信号CSに応答して、FF回路F4からのラッチデータDL2を選択して受信し、その受信したデータをラッチデータDL11としてFF回路F9に出力する。
アンド回路A5には、第3遅延信号DQS3と併せて、第1イネーブル信号EN1が供給される。このアンド回路A5の出力端子は、FF回路F5のクロック端子に接続されている。
FF回路F5は、アンド回路A5の出力信号の立ち上がりエッジ、つまり第1イネーブル信号EN1がHレベルであるときの第3遅延信号DQS3の立ち上がりエッジに同期してデータ列DQをラッチする。そして、FF回路F5は、そのラッチレベルと等しいレベルのラッチデータDL12を、メモリコントローラ12内のFF回路F10の入力端子に出力する。
アンド回路A6には、第2遅延信号DQS2と併せて、第2イネーブル信号EN2が供給される。このアンド回路A6は、第2遅延信号DQS2と第2イネーブル信号EN2とを論理積演算した結果を持つ信号をFF回路F6のクロック端子に出力する。すなわち、第2イネーブル信号EN2がHレベルのときに、第2遅延信号DQS2が有効にされてFF回路F6に出力される。ここで、第2イネーブル信号EN2は、例えばデータ列DQの3番目のデータD2及び4番目のデータD3が受信回路40に入力されるときにHレベルとなる信号である。
FF回路F6は、アンド回路A6の出力信号の立ち上がりエッジ、つまり第2イネーブル信号EN2がHレベルであるときの第2遅延信号DQS2の立ち上がりエッジに同期してデータ列DQをラッチする。そして、FF回路F6は、そのラッチレベルと等しいレベルのラッチデータDL13aを、次段のFF回路F7の入力端子に出力する。
アンド回路A7には、第3遅延信号DQS3と併せて、第2イネーブル信号EN2が供給される。このアンド回路A7の出力端子は、FF回路F7のクロック端子に接続されている。
FF回路F7は、アンド回路A7の出力信号の立ち上がりエッジ、つまり第2イネーブル信号EN2がHレベルであるときの第3遅延信号DQS3の立ち上がりエッジに同期してラッチデータDL13aをラッチする。そして、FF回路F7は、そのラッチレベルと等しいレベルのラッチデータDL13を、メモリコントローラ12内のFF回路F11の入力端子に出力する。なお、本実施形態では、FF回路F6,F7及びアンド回路A6,A7も第2ラッチ回路47として機能する。
アンド回路A8には、第3遅延信号DQS3と併せて、第2イネーブル信号EN2が供給される。このアンド回路A8の出力端子は、FF回路F8のクロック端子に接続されている。
FF回路F8は、アンド回路A8の出力信号の立ち上がりエッジ、つまり第2イネーブル信号EN2がHレベルであるときの第3遅延信号DQS3の立ち上がりエッジに同期してデータ列DQをラッチする。そして、FF回路F8は、そのラッチレベルと等しいレベルのラッチデータDL14を、メモリコントローラ12内のFF回路F12の入力端子に出力する。なお、本実施形態では、FF回路F5,F8及びアンド回路A5,A8が第3ラッチ回路48として機能する。
メモリコントローラ12内のアンド回路A9〜A12には、メモリコントローラ12の内部クロック信号CLKが供給される。ここで、内部クロック信号CLKは、例えば図示しないPLL(Phase Locked Loop)等によって生成される。
アンド回路A9,A10には、第3イネーブル信号EN3が供給される。これらアンド回路A9,A10は、クロック信号CLKと第3イネーブル信号EN3とを論理積演算した結果を持つ信号をFF回路F9,F10のクロック端子にそれぞれ出力する。アンド回路A11,A12には、第4イネーブル信号EN4が供給される。これらアンド回路A11,A12は、クロック信号CLKと第4イネーブル信号EN4とを論理積演算した結果を持つ信号をFF回路F11,F12のクロック端子にそれぞれ出力する。ここで、上記第3イネーブル信号EN3は、図7に示すように、データD0,D1がそれぞれFF回路F2,F5に確実にラッチされる期間にHレベルとなり、データD4,D5がそれぞれFF回路F4,F5に確実にラッチされる期間に再びHレベルとなる信号である。また、第4イネーブル信号EN4は、データD2,D3がそれぞれFF回路F7,F8に確実にラッチされる期間にHレベルとなり、データD6,D7がそれぞれFF回路F7,F8に確実にラッチされる期間に再びHレベルとなる信号である。これら第3イネーブル信号EN3及び第4イネーブル信号EN4は、リードコマンドReadの発行をトリガにしてHレベルに立ち上がる信号である。また、リードコマンドReadの発行から第3及び第4イネーブル信号EN3,EN4がHレベルに立ち上がるまでの時間は、上記選択信号CSと同様に、例えばメモリ20のリードレイテンシの長さ毎に予めシミュレーション等によってそれぞれ設定されている。
なお、選択信号CSは、リードコマンドRead発行後の第3イネーブル信号EN3の最初の立ち上がりエッジよりも前に立ち上がり、第3イネーブル信号EN3の最初の立ち下がりエッジに同期して立ち下がるように生成されているとも言える。すなわち、選択信号CS及び第3イネーブル信号EN3は、選択信号CSがHレベルの期間に上記第3イネーブル信号EN3の最初のHレベルのパルス期間が発生するように、且つ選択信号CSがHレベルの期間に上記第3イネーブル信号EN3の2番目以降のHレベルのパルス期間が発生しないように生成されている。さらに、選択信号CS及び第3イネーブル信号EN3は、選択信号CSがLレベルの期間に上記第3イネーブル信号EN3の最初のHレベルのパルス期間が発生しないように生成されている。これらにより、リードコマンドRead発行後の第3イネーブル信号EN3の最初のHレベルのパルス期間では、常に選択信号CSがHレベルとなり、第3イネーブル信号EN3の2番目以降のHレベルのパルス期間では、常に選択信号CSがLレベルとなる。
FF回路F9は、アンド回路A9の出力信号の立ち上がりエッジ、つまり第3イネーブル信号EN3がHレベルであるときのクロック信号CLKの立ち上がりエッジに同期してラッチデータDL11をラッチする。ここで、リードコマンドRead発行後の第3イネーブル信号EN3の最初のHレベルのパルス期間では、常に選択信号CSがHレベルとなるため、FF回路F2からのラッチデータDL1がラッチデータDL11としてFF回路F9にラッチされる。また、リードコマンドRead発行後の第3イネーブル信号EN3の2番目以降のHレベルのパルス期間では、常に選択信号CSがLレベルとなるため、FF回路F4からのラッチデータDL2がラッチデータDL11としてFF回路F9にラッチされる。そして、FF回路F9は、そのラッチレベルと等しいレベルのリードデータRD1を出力する。
FF回路F10は、アンド回路A10の出力信号の立ち上がりエッジ、つまり第3イネーブル信号EN3がHレベルであるときのクロック信号CLKの立ち上がりエッジに同期してラッチデータDL12をラッチする。そして、FF回路F10は、そのラッチレベルと等しいレベルのリードデータRD2を出力する。
FF回路F11は、アンド回路A11の出力信号の立ち上がりエッジ、つまり第4イネーブル信号EN4がHレベルであるときのクロック信号CLKの立ち上がりエッジに同期してラッチデータDL13をラッチする。そして、FF回路F11は、そのラッチレベルと等しいレベルのリードデータRD3を出力する。
FF回路F12は、アンド回路A12の出力信号の立ち上がりエッジ、つまり第4イネーブル信号EN4がHレベルであるときのクロック信号CLKの立ち上がりエッジに同期してラッチデータDL14をラッチする。そして、FF回路F12は、そのラッチレベルと等しいレベルのリードデータRD4を出力する。
これらFF回路F9〜F12及びアンド回路A9〜A12において、メモリコントローラ12内部での処理が可能なように、受信回路40にてラッチされたデータ列DQがメモリコントローラ12の内部クロック信号CLKに乗せ換えられる。
次に、切替回路49の内部構成例とその動作を図5及び図6に従って説明する。なお、図6(a)において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
ところで、本実施形態のメモリ20では、カラムアドレスストローブ(Column Address Strobe:CAS)信号から次のCAS信号までのタイミング制限であるカラムコマンド間隔tCCDは2サイクルである。このため、リードコマンドReadは、2サイクルごとにしか入力することができない。すなわち、上記カラムコマンド間隔tCCDは、コマンドCMDの最小入力サイクルとも言える。そこで、以下の説明では、コマンドCMDの最小入力サイクルのことを、最小入力サイクルtCCDとも言う。このような最小入力サイクルtCCDごとにリードコマンドReadが入力される場合には、図6(a)に示すように、1つ目の第1リードコマンドRead1に対応するバーストリード(データD0〜D3)が終わった直後に、2つ目の第2リードコマンドRead2に対応するバーストリード(データD4〜D7)が開始される。このため、第1リードコマンドRead1に対して最小入力サイクルtCCDで入力された第2リードコマンドRead2に対応するデータストローブ信号DQSの先頭立ち上がりエッジ(破線枠参照)の前のプリアンブル期間は消失する。したがって、このときの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形は略等しくなる。これにより、第2リードコマンドRead2に対応するデータストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対する最適なタイミング調整量(遅延量)は略等しくなる。
そこで、本実施形態の切替回路49は、最小入力サイクルtCCDよりも長い間隔でリードコマンドReadが入力される場合にはHレベルの選択信号CSを生成する。その一方で、切替回路49は、最小入力サイクルtCCDでリードコマンドReadが入力される場合にはLレベルの選択信号CSを生成する。
図5に示すように、切替回路49において、コマンド送信回路31(図2参照)から出力されるリードデータイネーブル信号RENは、FF回路F20の入力端子とアンド回路A20とに供給される。ここで、本実施形態のイネーブル信号RENは、リードコマンドReadに応答して、クロック信号CLKの2サイクル分(最小入力サイクルtCCD分)だけHレベルとなる信号である(図6(a)の時刻t3でHレベルとなる信号REN参照)。このため、図6(a)に示すように最小入力サイクルtCCDでリードコマンドReadが発行される場合には、イネーブル信号RENは4サイクル(2サイクル+2サイクル)分だけHレベルとなる(時刻t1でHレベルとなる信号REN参照)。
図5に示すように、FF回路F20のクロック端子には、上記クロック信号CLKが供給される。このFF回路F20は、クロック信号CLKの立ち上がりエッジに同期してイネーブル信号RENをラッチし、そのラッチレベルと等しいレベルの出力信号をFF回路F21の入力端子に出力する。
FF回路F21のクロック端子には、クロック信号CLKが供給される。このFF回路F21は、クロック信号CLKの立ち上がりエッジに同期してFF回路F20の出力信号をラッチし、そのラッチレベルと等しいレベルの遅延信号RENdをインバータ回路I20に出力する。これらFF回路F20,F21によってイネーブル信号RENが2クロック分遅延された遅延信号RENdが生成され、その遅延信号RENdがインバータ回路I20に供給される。
インバータ回路I20は、遅延信号RENdを論理反転した信号をアンド回路A20に出力する。
アンド回路A20は、イネーブル信号RENとインバータ回路I20の出力信号とを論理積演算した結果を持つ出力信号CSaをFF回路F22の入力端子に出力する。具体的には、アンド回路A20は、図6(a)の時刻t1や時刻t3に示すように、イネーブル信号RENがHレベルで、遅延信号RENdがLレベルである場合に、アンド回路A20は、2サイクルだけHレベルとなる出力信号CSaを出力する。一方、アンド回路A20は、図6(a)の時刻t2に示すように、イネーブル信号RENがHレベルで、遅延信号RENdがHレベルである場合に、アンド回路A20は、Lレベルの出力信号CSaを出力する。
別の言い方をすると、アンド回路A20は、図6(b)に示すように、当該サイクル(n)にHレベルのイネーブル信号RENが入力された場合に、その1サイクル前(n−1)にHレベルのイネーブル信号RENが入力されているか否かに応じて出力信号CSaを出力する。
詳述すると、アンド回路A20は、当該サイクルのイネーブル信号RENがHレベルで、1サイクル前のイネーブル信号RENがLレベルである場合に、Hレベルの出力信号CSaを出力する。すなわち、2サイクル前にリードコマンドReadが入力されていない場合、つまり最小入力サイクルtCCDよりも長い間隔でリードコマンドReadが入力された場合には、アンド回路A20からHレベルの出力信号CSaが出力される。これにより、データストローブ信号DQSの先頭立ち上がりエッジの前にプリアンブル期間が存在する場合に、データストローブ信号DQSの立ち上がりエッジのタイミング調整量を切り替えるためのHレベルの出力信号CSa(選択信号CS)を生成することができる。
一方、アンド回路A20は、当該サイクルのイネーブル信号RENがHレベルで、1サイクル前のイネーブル信号RENがHレベルである場合に、Lレベルの出力信号CSaを出力する。すなわち、2サイクル前にリードコマンドReadが入力されている場合、つまり最小入力サイクルtCCDでリードコマンドReadが入力された場合には、アンド回路A20からLレベルの出力信号CSaが出力される。これにより、データストローブ信号DQSの先頭立ち上がりエッジの前のプリアンブル期間が存在しない場合には、Lレベルの選択信号CSが生成される。このLレベルの選択信号CSに応答して、選択回路S1では、最小入力サイクルtCCDで入力されるリードコマンドReadに対応する第2遅延信号DQS2の先頭立ち上がりエッジ及び2番目以降の立ち上がりエッジによってラッチされた全ての奇数番目データがラッチデータDL2として入力される。このため、この場合には、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量と、先頭以外の立ち上がりエッジに対するタイミング調整量とが等しくなる。
そして、アンド回路A20の出力信号CSaは、所定段(ここでは、5段)のFF回路F22〜F26によって所定クロック分(ここでは、4.5クロック分)遅延され、選択信号CSとして上記選択回路S1に供給される。詳述すると、FF回路F22〜F25のクロック端子にはクロック信号CLKが供給されるとともに、FF回路F26の反転クロック端子にはクロック信号CLKが供給される。また、FF回路F23,F24,F25,F26の入力端子には、前段のFF回路F22,F23,F24,F25の出力信号がそれぞれ供給される。そして、最終段のFF回路F26の出力信号が選択信号CSとして選択回路S1に供給される。なお、上記出力信号CSaに対する遅延時間は、予めシミュレーション等によって設定された時間である。
次に、このように構成されたインタフェース回路13(とくに、受信回路40)の動作を図7にしたがって説明する。なお、図7において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
今、時刻t5においてメモリコントローラ12から第1リードコマンドRead1が入力され、さらに2サイクル後の時刻t6において第2リードコマンドRead2が入力されると、4サイクル分だけHレベルとなるイネーブル信号RENが生成される。このように先行する第1リードコマンドRead1に対して最小入力サイクルtCCDで第2リードコマンドRead2が入力された場合には、1つ目の第1リードコマンドRead1に対してのみHレベルの出力信号CSaが生成される。そして、その出力信号CSaが所定クロック分だけ遅延されて選択信号CSとして選択回路S1に入力される(時刻t9参照)。
上記第1リードコマンドRead1に応答してメモリ20からデータ列DQとしてデータD0〜D3が連続的に出力され、第2リードコマンドRead2に応答してデータD4〜D7が連続的に出力される。また、上記先頭データD0が入力される時刻t8よりも1サイクル前の時刻t7において、メモリ20から入力されるデータストローブ信号DQSがハイインピーダンス状態からLレベルに遷移する(プリアンブル)。その後、プリアンブル期間が経過すると(時刻t8)、メモリ20から入力されるデータ列DQに同期してデータストローブ信号DQSがLレベルからHレベルに遷移する(第1方向の第1遷移)。このようなデータストローブ信号DQSを第1の遅延量T1だけ遅延させて第1遅延信号DQS1が生成され、この第1遅延信号DQS1がFF回路F1へのデータ列DQの取り込みに用いられる。また、上記データストローブ信号DQSを第2の遅延量T2だけ遅延させて第2遅延信号DQS2が生成され、この第2遅延信号DQS2がFF回路F3,F6へのデータ列DQの取り込みに用いられる。さらに、上記遅延信号DQS2を論理反転させて第3遅延信号DQS3が生成され、この第3遅延信号DQS3がFF回路F2,F4,F5,F7,F8へのデータ列DQの取り込みに用いられる。
詳述すると、データ列DQの先頭データD0が第1遅延信号DQS1の先頭立ち上がりエッジでFF回路F1に取り込まれる。このとき、第1遅延信号DQS1の先頭立ち上がりエッジがデータ列DQの先頭データD0をラッチするための最適なタイミングで発生するように、第1遅延信号DQS1のタイミングが調整されている。このため、FF回路F1では、セットアップタイム及びホールドタイムを確実に確保することができ、先頭データD0を確実にラッチすることができる。なお、第2遅延信号DQS2の先頭立ち上がりエッジが先頭データD0をラッチするための最適なタイミングからずれるため、FF回路F3では、先頭データD0を正しくラッチすることができない。
続いて、第3遅延信号DQS3の先頭立ち上がりエッジ(第2遅延信号DQS2の先頭立ち下がりエッジ)で先頭データD0がFF回路F2にシフトされ、同時にFF回路F5にデータD1が取り込まれる。
次に、データ列DQの3番目以降の奇数番目データであるデータD2が第2遅延信号DQS2の2番目の立ち上がりエッジでFF回路F6に取り込まれる。続いて、第3遅延信号DQS3の2番目の立ち上がりエッジでデータD2がFF回路F7にシフトされ、同時にFF回路F8にデータD3が取り込まれる。
続いて、第3イネーブル信号EN3が立ち上がった後にクロック信号CLKが立ち上がると、そのクロック信号CLKの立ち上がりエッジで選択回路S1から出力されるラッチデータDL11がFF回路F9に取り込まれる。それと同時にデータD1がFF回路F5からFF回路F10にシフトされる。このとき、選択回路S1は、上記第1リードコマンドRead1に応答して生成されたHレベルの選択信号CSに基づいて、FF回路F2から入力されるラッチデータDL1を選択して受信している。このため、FF回路F9には、FF回路F2からのラッチデータDL1、つまり第1遅延信号DQS1によってラッチされたデータD0が取り込まれる。
次いで、第4イネーブル信号EN4が立ち上がった後のクロック信号CLKの立ち上がりエッジでデータD2がFF回路F7からFF回路F11にシフトされ、同時にデータD3がFF回路F8からFF回路F12にシフトされる。
一方、データ列DQの5番目のデータD4(つまり、2つ目の第2リードコマンドRead2に対応する先頭データ)は、第2遅延信号DQS2の3番目の立ち上がりエッジ(つまり、第2リードコマンドRead2に対応する先頭の立ち上がりエッジ)でFF回路F3に取り込まれる。このとき、第2遅延信号DQS2の3番目の立ち上がりエッジがデータ列DQのデータD4をラッチするための最適なタイミングで発生するように、第2遅延信号DQS2のタイミングが調整されている。このため、FF回路F3では、セットアップタイム及びホールドタイムを確実に確保することができ、上記データD4を確実にラッチすることができる。なお、第1遅延信号DQS1の3番目の立ち上がりエッジはデータD4をラッチするための最適なタイミングからずれるため、FF回路F1では、データD4を正しくラッチすることができない。
続いて、第3遅延信号DQS3の3番目の立ち上がりエッジでデータD4がFF回路F4にシフトされ、同時にFF回路F5にデータD5が取り込まれる。
次に、データ列DQのデータD6が第2遅延信号DQS2の4番目の立ち上がりエッジでFF回路F6に取り込まれる。続いて、第3遅延信号DQS3の4番目の立ち上がりエッジでデータD6がFF回路F7にシフトされ、同時にFF回路F8にデータD7が取り込まれる。
次に、第3イネーブル信号EN3が立ち上がった後にクロック信号CLKが立ち上がると、そのクロック信号CLKの立ち上がりエッジで選択回路S1から出力されるラッチデータDL11がFF回路F9に取り込まれる。それと同時にデータD5がFF回路F5からFF回路F10にシフトされる。このとき、選択回路S1は、上記第2リードコマンドRead2に応答して生成されたLレベルの選択信号CSに基づいて、FF回路F4から入力されるラッチデータDL2を選択して受信している。このため、FF回路F9には、FF回路F4からのラッチデータDL2、つまり第2遅延信号DQS2によってラッチされたデータD4が取り込まれる。
次いで、第4イネーブル信号EN4が立ち上がった後のクロック信号CLKの立ち上がりエッジでデータD6がFF回路F7からFF回路F11にシフトされ、同時にデータD7がFF回路F8からFF回路F12にシフトされる。
以上のように、データ列DQの先頭データD0は第1遅延信号DQS1の先頭立ち上がりエッジによってラッチされるとともに、3番目以降の奇数番目データ、つまり3番目、5番目及び7番目のデータD2,D4,D6は第2遅延信号DQS2の2番目以降の立ち上がりエッジによってラッチされる。換言すると、データストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量が異なる遅延量に切り替えられている。
以上説明した本実施形態によれば、以下の効果を奏することができる。
(1)データストローブ信号DQSのプリアンブル期間に続く先頭の立ち上がりエッジに対するタイミング調整量を第1の遅延量T1とし、先頭以外の立ち上がりエッジに対するタイミング調整量を上記第1の遅延量T1とは異なる第2の遅延量T2とした。これにより、符号間干渉の影響等によってデータストローブ信号DQSの先頭立ち上がりエッジと先頭以外の立ち上がりエッジとの波形が異なる場合であっても、それぞれの立ち上がりエッジを、対応するデータをラッチするための最適なタイミングに位相合わせすることができる。すなわち、データ列DQとデータストローブ信号DQS(遅延信号DQS1〜DQS3)とのタイミングずれを抑制することができ、タイミングエラーの発生を抑制することができる。したがって、データ転送レートの上昇に起因してデータ列DQのデータ有効ウィンドウが狭くなった場合であっても、データストローブ信号DQSに基づいてデータ列DQを正しくラッチすることができる。
(2)リードコマンドReadに応答して、データストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量を切り替えるための選択信号CSを生成するようにした。ここで、上述したように、メモリコントローラ12でリードコマンドReadが発行されると、メモリ20からデータ列DQが出力される。このため、データ列DQの先頭データD0は、常にコマンド送信回路31にリードコマンドReadが入力されてから、すなわちコマンド送信回路31からイネーブル信号RENが出力されてから、ラッチ回路45に入力されることになる。したがって、このイネーブル信号RENの入力をトリガとしてHレベルの選択信号CSを生成することにより、データ列DQの先頭データD0がラッチデータDL1として選択回路S1に入力される前に上記選択信号CSを確実にHレベルに立ち上げることができる。換言すると、データストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量の切り替えを確実に行うことができる。
(3)先行する第1リードコマンドRead1に対して最小入力サイクルtCCDで発行された第2リードコマンドRead2に応答して、その第2リードコマンドRead2に対応する第2遅延信号DQS2の先頭立ち上がりエッジ及びそれ以外の立ち上がりエッジによってラッチされたデータを選択するための選択信号CSを生成するようにした。これにより、プリアンブル状態が発生せずにデータストローブ信号DQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が略等しくなる場合には、両立ち上がりエッジのタイミング調整量を等しくすることができる。したがって、タイミング調整量の切り替えが不要な場合に、データストローブ信号DQSの先頭立ち上がりエッジと先頭以外の立ち上がりエッジとに対するタイミング調整量が異なる遅延量に設定されることを抑制することができる。
(4)選択回路S1を、ラッチ回路45の後段側に設けるようにした。すなわち、ラッチ回路45においてダブルデータレートでデータ列DQが取り込まれた後に、第1遅延信号DQS1によってラッチされたデータ列DQ及び第2遅延信号DQS2によってラッチされたデータ列DQのいずれか一方を選択するようにした。これにより、ラッチ回路45でラッチしたデータ列DQをメモリコントローラ12の内部クロック信号CLKに乗せ換える際に、つまりラッチ回路45に比べて動作タイミングに比較的に余裕がある際に、データストローブ信号DQSのタイミング調整量の切り替えを行うことができる。
(第2実施形態)
以下、第2実施形態を図8〜図12に従って説明する。この実施形態のインタフェース回路13Aは、受信回路50の内部構成が上記第1実施形態と異なっている。具体的には、受信回路50では、リードコマンドReadの入力間隔(発行間隔)に応じて、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量の設定を変更する点が上記第1実施形態と異なっている。以下、第1実施形態との相違点を中心に説明する。なお、先の図1〜図7に示した部材と同一の部材にはそれぞれ同一の符号を付して示し、それら各要素についての詳細な説明は省略する。
図8に示すように、受信回路50の遅延回路51には、メモリ20からデータストローブ信号DQSが供給される。この遅延回路51は、第1〜第4遅延回路52〜55を有している。
第1遅延回路52は、図12に示すように、データストローブ信号DQSに第1の遅延量T11を与えて第1遅延信号DQS11を生成する。第1遅延信号DQS11は、リードコマンドReadの入力間隔が3サイクルである場合のデータストローブ信号DQSの先頭立ち上がりエッジが先頭データD0をラッチするための最適なタイミングで発生するように、データストローブ信号DQSのタイミングが調整された信号である。上記第1の遅延量T11は、予めシミュレーション等によって設定された時間である。
第2遅延回路53は、データストローブ信号DQSに第2の遅延量T12を与えて第2遅延信号DQS12を生成する。第2遅延信号DQS12は、リードコマンドReadの入力間隔が4サイクル以上である場合のデータストローブ信号DQSの先頭立ち上がりエッジが先頭データD0をラッチするための最適なタイミングで発生するように、データストローブ信号DQSのタイミングが調整された信号である。上記第2の遅延量T12は、上記第1の遅延量T11よりも長い時間である。この第2の遅延量T12は、予めシミュレーション等によって設定された時間である。
第3遅延回路54は、データストローブ信号DQSに第3の遅延量T13(例えば、信号DQSの位相の90度分)を与えて第3遅延信号DQS13を生成する。具体的には、第3遅延回路54は、データストローブ信号DQSの2番目以降の立ち上がりエッジのタイミングを、データ列DQにおける3番目以降の奇数番目データをラッチするための最適なタイミングとするように、データストローブ信号DQSを第3の遅延量T13を与える。ここで、第3の遅延量T13は、上記第2の遅延量T12よりも長い時間である。
図8に示す第4遅延回路55は、上記第3遅延信号DQS13を論理反転させた第4遅延信号DQS14を生成する。すなわち、第4遅延回路55は、データ列DQの偶数番目のデータをラッチするための最適なタイミングで立ち上がりエッジ(第3遅延信号DQS13の立ち下がりエッジ)が発生するように、データストローブ信号DQSを遅延させた第4遅延信号DQS14を生成する。
ラッチ回路56には、メモリ20からデータ列DQが供給される。このラッチ回路56は、第1〜第4ラッチ回路57〜60を有している。
第1ラッチ回路57は、第1遅延信号DQS11の立ち上がりエッジに同期してデータ列DQをラッチし、そのラッチデータDL21を選択回路S2に出力する。第2ラッチ回路58は、第2遅延信号DQS12の立ち上がりエッジに同期してデータ列DQをラッチし、そのラッチデータDL22を選択回路S2に出力する。第3ラッチ回路59は、第3遅延信号DQS13の立ち上がりエッジに同期してデータ列DQをラッチし、そのラッチデータDL23を選択回路S3に出力する。第4ラッチ回路60は、第4遅延信号DQS14の立ち上がりエッジ(第3遅延信号DQS13の立ち下がりエッジ)に同期してデータ列DQをラッチし、そのラッチデータDL24をメモリコントローラ12に出力する。
選択回路S2は、切替回路61内の第2切替回路63から入力される第2選択信号CS2に応じて、第1ラッチ回路57からのラッチデータDL21及び第2ラッチ回路58からのラッチデータDL22のいずれか一方を選択して受信する。具体的には、選択回路S2は、Hレベルの第2選択信号CS2に応答して、第1ラッチ回路57からのラッチデータDL21を選択して受信する。また、選択回路S2は、Lレベルの第2選択信号CS2に応答して、第2ラッチ回路58からのラッチデータDL22を選択して受信する。そして、選択回路S2は、選択して受信したラッチデータをラッチデータDL25として選択回路S3に出力する。
選択回路S3は、切替回路61内の第1切替回路62から入力される第1選択信号CS1に応じて、選択回路S2からのラッチデータDL25及び第3ラッチ回路59からのラッチデータDL23のいずれか一方を選択して受信する。具体的には、選択回路S3は、Hレベルの第1選択信号CS1に応答して、選択回路S2からのラッチデータDL25を選択して受信する。また、選択回路S3は、Lレベルの第1選択信号CS1に応答して、第3ラッチ回路59からのラッチデータDL23を選択して受信する。そして、選択回路S3は、選択して受信したラッチデータをラッチデータDL26としてメモリコントローラ12に出力する。
切替回路61は、上記第1切替回路62と上記第2切替回路63とを有している。第1切替回路62は、送信回路30内のコマンド送信回路31から入力するリードデータイネーブル信号RENに基づいて上記第1選択信号CS1を生成する。なお、この第1選択信号CS1は、上記第1実施形態の選択信号CSと同様の信号である。
第2切替回路63は、上記イネーブル信号RENに基づいてリードコマンドReadの入力間隔(発行間隔)を検出し、その検出結果に応じて上記第2選択信号CS2を生成する。具体的には、第2切替回路63は、リードコマンドReadの入力間隔が所定サイクル数である場合には、Hレベルの第2選択信号CS2を生成する。ここで、上記所定サイクル数は、例えば3サイクル、すなわち最小入力サイクルtCCD(2サイクル)に1サイクルを加えたサイクル数である。なお、このときの第2選択信号CS2は、データ列DQの先頭データD0がラッチデータDL21として選択回路S2に入力される前にHレベルに立ち上がる。その一方で、第2切替回路63は、リードコマンドReadの入力間隔が上記所定サイクル数よりも長い(4サイクル以上の)場合には、Lレベルの第2選択信号CS2を生成する。なお、このときの第2選択信号CS2は、データ列DQの先頭データD0がラッチデータDL21として選択回路S2に入力される前にLレベルに立ち下がる。
ここで、切替回路61の内部構成例を図9にしたがって説明する。
図9に示すように、切替回路61において、コマンド送信回路31から出力されるイネーブル信号RENは、FF回路F30の入力端子とアンド回路A30,A31とに供給される。本実施形態のイネーブル信号RENは、図11に示すように、1つのリードコマンドReadに応答して、クロック信号CLKの2サイクル分(最小入力サイクルtCCD分)だけHレベルとなる信号である。
図9に示すように、FF回路F30のクロック端子には、上記クロック信号CLKが供給される。このFF回路F30は、クロック信号CLKの立ち上がりエッジに同期してイネーブル信号RENをラッチする。そして、FF回路F30は、そのラッチレベルと等しいレベルの遅延信号RENd1を、FF回路F31の入力端子とアンド回路A30,A31の反転入力端子とに出力する。これにより、1クロック分遅延されたイネーブル信号RENが論理反転されてアンド回路A30,A31に供給される。すなわち、上記遅延信号RENd1は、1サイクル前のイネーブル信号RENに相当する。
FF回路F31のクロック端子には、クロック信号CLKが供給される。このFF回路F31は、クロック信号CLKの立ち上がりエッジに同期して遅延信号RENd1をラッチし、そのラッチレベルと等しいレベルの遅延信号RENd2をアンド回路A31に出力する。これにより、2クロック分遅延されたイネーブル信号RENがアンド回路A31に供給される。すなわち、上記遅延信号RENd2は、2サイクル前のイネーブル信号RENに相当する。
アンド回路A30は、イネーブル信号RENと遅延信号RENd1とを論理積演算した結果を持つ第1選択信号CS1を出力する。換言すると、アンド回路A30は、図10に示すように、当該サイクル(n)にHレベルのイネーブル信号RENが入力された場合に、その1サイクル前(n−1)にHレベルのイネーブル信号RENが入力されているか否かに応じて第1選択信号CS1を生成する。
詳述すると、アンド回路A30は、当該サイクルのイネーブル信号RENがHレベルで、1サイクル前のイネーブル信号REN(遅延信号RENd1)がHレベルである場合に、Lレベルの第1選択信号CS1を生成する。すなわち、アンド回路A30は、最小入力サイクルtCCDでリードコマンドReadが入力された場合には、Lレベルの第1選択信号CS1を生成する。一方、アンド回路A30は、当該サイクルのイネーブル信号RENがHレベルで、遅延信号RENd1がLレベルである場合に、Hレベルの第1選択信号CS1を生成する。すなわち、アンド回路A30は、最小入力サイクルtCCDよりも長い間隔でリードコマンドReadが入力された場合には、Hレベルの第1選択信号CS1を生成する。
そして、このアンド回路A30にて生成された第1選択信号CS1は、所定時間遅延されて上記選択回路S3に供給される。なお、この所定時間は、例えばメモリ20のリードレイテンシの長さ毎に予めシミュレーション等によって設定されている。
アンド回路A31は、イネーブル信号RENと、遅延信号RENd1を論理反転させた信号と、遅延信号RENd2とを論理積演算した結果を持つ第2選択信号CS2を出力する。具体的には、アンド回路A31は、図11の時刻t12に示すように、イネーブル信号RENがHレベル、遅延信号RENd1がLレベル、遅延信号RENd2がHレベルである場合に、Hレベルの第2選択信号CS2を生成する。一方、アンド回路A31は、時刻t13に示すように、イネーブル信号RENがHレベル、遅延信号RENd1がLレベル、遅延信号RENd2がLレベルである場合に、Lレベルの第2選択信号CS2を生成する。
別の言い方をすると、アンド回路A31は、図10に示すように、当該サイクルにHレベルのイネーブル信号RENが入力された場合に、その1サイクル前及び2サイクル前(n−2)のイネーブル信号RENの信号レベルに応じて第2選択信号CS2を生成する。
詳述すると、アンド回路A31は、当該サイクルのイネーブル信号RENがHレベル、その1サイクル前のイネーブル信号RENがLレベルで、2サイクル前のイネーブル信号RENがHレベルの場合に、Hレベルの第2選択信号CS2を生成する。すなわち、アンド回路A31は、最小入力サイクルtCCDである2サイクル前にリードコマンドReadが発行されておらず、3サイクル前にリードコマンドReadが発行されている場合に、Hレベルの第2選択信号CS2を生成する。
一方、アンド回路A31は、当該サイクルのイネーブル信号RENがHレベル、その1サイクル前のイネーブル信号RENがLレベルで、2サイクル前のイネーブル信号RENがLレベルの場合に、Lレベルの第2選択信号CS2を生成する。すなわち、アンド回路A31は、3サイクル前までにリードコマンドReadが発行されていない場合に、Lレベルの第2選択信号CS2を生成する。
そして、このアンド回路A31にて生成された第2選択信号CS2は、所定時間遅延されて上記選択回路S2に供給される。なお、この所定時間は、例えばメモリ20のリードレイテンシの長さ毎に予めシミュレーション等によって設定されている。
次に、このように構成されたインタフェース回路13A(とくに、受信回路50)の動作について図11及び図12に従って説明する。なお、図11及び図12において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
今、時刻t10においてリードコマンドRead1が入力され、その2サイクル後の時刻t11においてリードコマンドRead2が入力される。すると、時刻t11において、第1切替回路62にてLレベルの第1選択信号CS1が生成される。このLレベルの第1選択信号CS1に応答して、選択回路S3は、第3ラッチ回路59からのラッチデータDL23を選択して受信する。このため、この場合のリードコマンドRead2に対応するデータ列DQの先頭データ(図12のデータD4参照)については、第3遅延信号DQS13によってラッチされたラッチデータDL23がメモリコントローラ12に出力される。したがって、最小入力サイクルtCCDで入力されるリードコマンドRead2に対応するデータストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量は、先頭以外の立ち上がりエッジに対するタイミング調整量と等しい第3の遅延量T13となる。
次に、時刻t11の3サイクル後の時刻t12においてリードコマンドRead3が入力されると、Hレベルの第1選択信号CS1が生成されるとともに、Hレベルの第2選択信号CS2が生成される。このHレベルの第2選択信号CS2に応答して、選択回路S2は、第1ラッチ回路57からのラッチデータDL21を選択して受信し、そのラッチデータDL21をラッチデータDL25として選択回路S3に出力する。さらに、上記Hレベルの第1選択信号CS1に応答して、選択回路S3は、選択回路S2からのラッチデータDL25を選択して受信し、そのラッチデータDL25をメモリコントローラ12に出力する。このため、この場合のリードコマンドRead3に対応するデータ列DQの先頭データD0(図12の時刻t22参照)については、第1遅延信号DQS11によってラッチされたラッチデータDL21がメモリコントローラ12に出力される。したがって、3サイクル間隔で入力されるリードコマンドRead3に対応するデータストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量は、上記第1の遅延量T11となる。
次に、図11の時刻t12の4サイクル後の時刻t13においてリードコマンドRead4が入力されると、Hレベルの第1選択信号CS1が生成されるとともに、Lレベルの第2選択信号CS2が生成される。このLレベルの第2選択信号CS2に応答して、選択回路S2は、第2ラッチ回路58からのラッチデータDL22を選択して受信し、そのラッチデータDL22をラッチデータDL25として選択回路S3に出力する。さらに、上記Hレベルの第1選択信号CS1に応答して、選択回路S3は、選択回路S2からのラッチデータDL25を選択して受信し、そのラッチデータDL25をメモリコントローラ12に出力する。このため、この場合のリードコマンドRead4に対応するデータ列DQの先頭データD0(図12の時刻t25参照)については、第2遅延信号DQS12によってラッチされたラッチデータDL22がメモリコントローラ12に出力される。したがって、4サイクル間隔で入力されるリードコマンドRead4に対応するデータストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量は、上記第2の遅延量T12となる。
このように、本実施形態では、リードコマンドの入力間隔(発行間隔)に応じて、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量の設定が変更される。そのようにタイミング調整量を変更する理由を以下に説明する。
詳述すると、データストローブ信号DQSは、いわゆるバス信号である。このため、データ列DQを取り込むのに有効な期間、データ列DQを取り込むのに有効な先頭立ち上がりエッジに先立つプリアンブル期間及び最後の立ち下がりの後に存在する約0.5サイクルのLレベル期間(ポストアンブル期間)における論理は確定しているが、その他の期間はハイインピーダンス状態となる。したがって、図12に示すように、データストローブ信号DQSは、ポストアンブル後に、Lレベルからハイインピーダンス(Hi−Z)状態に遷移する。このHi−Z状態では、データストローブ信号DQSは、外部に接続される終端抵抗(図示略)により、例えばHレベル及びLレベルの中間の電圧に設定される(期間TH1の破線参照)。
但し、上述したように、このHi−Z状態にはポストアンブル状態(Lレベル)から遷移されるため、図12に示すように、データストローブ信号DQSは、ポストアンブル後、そのLレベルから中間の電圧まで徐々に近づいていく。このとき、データ転送レートが高くなってクロック信号CLKの周波数が高くなると、Hi−Z状態となる期間TH1が短くなる。これに伴って、リードコマンドReadの入力間隔が短い場合には、Hi−Z状態となる期間TH1が短くなるため(時刻t20〜t21)、その期間TH1内にデータストローブ信号DQSが上記中間の電圧まで上昇せずに、次のプリアンブル状態に遷移する。これに対し、リードコマンドReadの入力間隔が十分に長い場合には、Hi−Z状態となる期間TH1が長くなるため(時刻t23〜t24)、その期間TH1内にデータストローブ信号DQSが上記中間の電圧まで上昇し、次のプリアンブル状態に遷移する。このようにリードコマンドReadの入力間隔によって、Hi−Z状態が変化し、プリアンブル状態の波形が変わることになる。さらに、このプリアンブル状態の波形の違いに起因して、データストローブ信号DQSの先頭立ち上がりエッジの波形も異なるようになる(破線で示す立ち上がりエッジは、先頭以外の立ち上がりエッジの波形を参考として示したものである)。このため、リードコマンドReadの入力間隔に応じて、データストローブ信号DQSの先頭立ち上がりエッジに対する最適なタイミング調整量が異なることになる。
したがって、本実施形態のように、リードコマンドReadの入力間隔に応じて、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量(遅延量)を変更することによって、データ列DQを確実に取り込むことができる。
具体的には、リードコマンドReadの入力間隔が短い場合(入力間隔が3サイクルの場合)の先頭データD0(時刻t22参照)については、遅延量の小さい第1の遅延量T11を有する第1遅延信号DQS11によってラッチするようにした。ここで、第1遅延信号DQS11は、リードコマンドReadの入力間隔が3サイクルである場合のデータストローブ信号DQSの先頭立ち上がりエッジが先頭データD0をラッチするための最適なタイミングで発生するように、そのタイミングが調整されている。このため、時刻t22に入力される先頭データD0を第1遅延信号DQS11の先頭立ち上がりエッジでラッチすることにより、セットアップタイムおよびホールドタイムを確実に確保することができ、上記先頭データD0を確実にラッチすることができる。
その一方で、リードコマンドReadの入力間隔が長い場合(入力間隔が4サイクル以上の場合)の先頭データD0(時刻t25参照)については、第1の遅延量T11よりも大きい第2の遅延量T12を有する第2遅延信号DQS12によってラッチするようにした。ここで、第2遅延信号DQS12は、リードコマンドReadの入力間隔が4サイクル以上である場合のデータストローブ信号DQSの先頭立ち上がりエッジが先頭データD0をラッチするための最適なタイミングで発生するように、そのタイミングが調整されている。このため、時刻t25に入力される先頭データD0を第2遅延信号DQS12の先頭立ち上がりエッジでラッチすることにより、セットアップタイムおよびホールドタイムを確実に確保することができ、上記先頭データD0を確実にラッチすることができる。
以上説明した本実施形態によれば、第1実施形態の(1)〜(4)の効果に加えて以下の効果を奏する。
(5)リードコマンドReadの入力間隔(発行間隔)に応じて、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量(遅延量)の設定を変更するようにした。これにより、リードコマンドReadの入力間隔に応じて、データストローブ信号DQSの先頭立ち上がりエッジの波形が異なる場合であっても、その時々の先頭立ち上がりエッジを、先頭データD0をラッチするための最適なタイミングに位相合わせすることができる。したがって、データ列DQのデータ有効ウィンドウが狭くなった場合であっても、タイミングエラーの発生を抑制することができ、データストローブ信号DQSに基づいてデータ列DQを正しくラッチすることができる。
(第3実施形態)
以下、第3実施形態を図13〜図15に従って説明する。なお、先の図1〜図12に示した部材と同一の部材にはそれぞれ同一の符号を付して示し、それら各要素についての詳細な説明は省略する。
上記第1及び第2実施形態では、システム回路10のインタフェース回路13,13Aにおいてリードデータ列DQを取り込む際のリードデータストローブ信号DQSのタイミングを調整する受信回路40,50について説明した。これに対し、本実施形態では、メモリ20においてライトデータ列(データ列)WDQを取り込む際のライトデータストローブ信号(データストローブ信号)WDQSのタイミングを調整する受信回路70について説明する。
まず、メモリ20の内部構成例について図13に従って説明する。
図13に示すように、メモリ20は、クロック入力回路21と、データ送受信回路22と、コマンドデコーダ23と、コマンド受信回路24と、制御回路25と、アドレス入力回路26と、メモリコア27とを有している。
クロック入力回路21は、メモリコントローラ12から供給される相補のクロック信号CK,XCKを各回路22,23,26に出力する。
データ送受信回路22は、受信回路70と、送信回路(図示略)とを有している。受信回路70は、ライト動作時に、メモリコントローラ12から供給されるデータ列WDQを、メモリコントローラ12から供給されるデータストローブ信号WDQSの立ち上がりエッジと立ち下がりエッジに同期して受信する。そして、受信回路70は、受信したデータ列WDQをメモリコア27内の読出/書込回路84に出力する。ここで、データストローブ信号WDQSは、図14に示すように、データ列WDQよりも例えば位相が90度遅延されてメモリコントローラ12から供給される。
また、データ送受信回路22(送信回路)は、リード動作時に、メモリコア27から順次供給されるデータを、クロック信号CKの立ち上がりエッジ及び立ち下がりエッジに同期してメモリコントローラ12に出力する。さらに、この送信回路は、上記データに同期したデータストローブ信号をメモリコントローラ12に出力する。
コマンドデコーダ23は、外部制御信号(例えば、チップセレクト信号、ロウアドレスストローブ信号、コラムアドレスストローブ信号やライトイネーブル信号など)を、クロック信号CKの立ち上がりエッジに同期して受信する。コマンドデコーダ23は、受信した外部制御信号の論理レベルの組み合わせに応じて認識した所定のコマンドCMD(例えば、ライトコマンドWriteやリードコマンドRead等)を、コマンド受信回路24と制御回路25に出力する。
コマンド受信回路24は、コマンドデコーダ23から入力されるコマンドCMDがライトコマンドWriteである場合に、そのライトコマンドWriteの入力に応答してHレベルとなるライトデータイネーブル信号(イネーブル信号)WENを生成する。そして、コマンド受信回路24は、イネーブル信号WENを受信回路70内の切替回路79に出力する。
制御回路25は、リードコマンドRead及びライトコマンドWriteに応答して、メモリコア27の読み出し動作及び書き込み動作を実行するための制御信号を出力する。
アドレス入力回路26は、メモリコントローラ12から供給されるアドレス信号ADDをクロック信号CKの立ち上がりエッジ及び立ち下がりエッジに同期して順次受信する。アドレス入力回路26は、受信したアドレス信号ADDに応じて、行アドレス信号RADDを行デコーダ82に出力するとともに、列アドレス信号CADDを列デコーダ83に出力する。
メモリコア27内のメモリアレイ81は、複数行複数列に配置された複数のメモリセル(図示略)を有している。各メモリセルは、1ビットのデータを記憶する。なお、各メモリセルは、ワード線とビット線との交差部分に形成される。
行デコーダ82は、行アドレス信号RADDに基づいて、メモリアレイ81のワード線を選択する。列デコーダ83は、列アドレス信号CADDに基づいて、メモリアレイ81のビット線を選択する。
読出/書込回路84は、ライト動作時に、データ送受信回路22の受信回路70から入力されるデータ列WDQを、行デコーダ82及び列デコーダ83によって選択されたメモリセルに書き込む。また、読出/書込回路84は、リード動作時に、行デコーダ82及び列デコーダ83によって選択されたメモリセルからデータを読み出し、その読み出したデータをデータ送受信回路22の送信回路に出力する。
次に、受信回路70の内部構成例を説明する。
遅延回路71には、メモリコントローラ12からライトデータストローブ信号WDQSが供給される。この遅延回路71は、第1遅延回路72と、第2遅延回路73と、第3遅延回路74とを有している。
第1遅延回路72は、データストローブ信号WDQSに第1の遅延量を与えて第1遅延信号WDQS1を生成する。具体的には、第1遅延回路72は、データストローブ信号WDQSのプリアンブル期間に続く先頭の立ち上がりエッジのタイミングを、データ列WDQの先頭データD0をラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとするように、データストローブ信号WDQSに第1の遅延量を与える。より具体的には、第1遅延回路72は、データストローブ信号WDQSの先頭の立ち上がりエッジのタイミングを、先頭データD0に対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号WDQSに第1の遅延量を与える。上記第1の遅延量は、予めシミュレーション等によって設定された遅延時間であり、本実施形態では0(ゼロ)である。
第2遅延回路73は、図15に示すように、データストローブ信号WDQSに第2の遅延量T21を与えて第2遅延信号WDQS2を生成する。具体的には、第2遅延回路73は、データストローブ信号WDQSの2番目以降の立ち上がりエッジのタイミングを、データ列WDQの先頭データD0以外の奇数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとなるように、データストローブ信号WDQSに第2の遅延量T21を与える。より具体的には、第2遅延回路73は、データストローブ信号WDQSの2番目以降の立ち上がりエッジのタイミングを、先頭データD0以外の奇数番目のデータに対するセットアップマージンとホールドマージンとが等しくなるタイミングとするように、データストローブ信号WDQSに第2の遅延量T21を与える。上記第2の遅延量T21は、予めシミュレーション等によって設定された遅延時間である。
図13に示す第3遅延回路74は、上記第2遅延信号WDQS2を論理反転させて第3遅延信号WDQS3を生成する。すなわち、第3遅延回路74は、データ列WDQの偶数番目のデータをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングで立ち上がりエッジ(第2遅延信号WDQS2の立ち下がりエッジ)が発生するように、データストローブ信号WDQSを遅延させた第3遅延信号WDQS3を生成する。
ラッチ回路75には、メモリコントローラ12からデータ列WDQが供給される。このラッチ回路75は、第1〜第3ラッチ回路76〜78を有している。
第1ラッチ回路76は、第1遅延信号WDQS1(データストローブ信号WDQS)の立ち上がりエッジに同期してデータ列WDQをラッチし、そのラッチデータDL31を選択回路S4に出力する。第2ラッチ回路77は、第2遅延信号WDQS2の立ち上がりエッジに同期してデータ列WDQをラッチし、そのラッチデータDL32を選択回路S4に出力する。第3ラッチ回路78は、第3遅延信号WDQS3の立ち上がりエッジ(第2遅延信号WDQS2の立ち下がりエッジ)に同期してデータ列WDQをラッチし、そのラッチデータDL33を読出/書込回路84に出力する。
このようにして、ラッチ回路75では、データストローブ信号WDQSの立ち上がりエッジと立ち下がりエッジとに同期して、ダブルデータレートでのデータ列WDQの取り込みが実現される。
選択回路S4は、切替回路79から入力される選択信号CS3に応じて、第1ラッチ回路76からのラッチデータDL31及び第2ラッチ回路77からのラッチデータDL32のいずれか一方を選択して受信する。具体的には、選択回路S4は、Hレベルの選択信号CS3に応答して、第1ラッチ回路76からのラッチデータDL31を選択して受信する。また、選択回路S4は、Lレベルの選択信号CS3に応答して、第2ラッチ回路77からのラッチデータDL32を選択して受信する。そして、選択回路S4は、選択して受信したラッチデータを読出/書込回路84に出力する。
切替回路79は、上記コマンド受信回路24から入力するライトデータイネーブル信号WENに基づいて上記選択信号CS3を生成する。具体的には、切替回路79は、コマンドCMDの最小入力サイクルtCCD(ここでは、2サイクル)よりも長い間隔でライトコマンドWriteが入力される場合には、Hレベルのイネーブル信号WENに応答してHレベルの選択信号CS3を生成する。このときの選択信号CS3は、データ列WDQの先頭データD0がラッチデータDL31として選択回路S4に入力される前にHレベルに立ち上がる。また、この選択信号CS3は、上記先頭データD0がラッチデータDL31として選択回路S4から出力された後であって、例えば上記先頭データD0以外の奇数番目データがラッチデータDL32として選択回路S4に入力される前にLレベルに立ち下がる。その一方で、切替回路79は、最小入力サイクルtCCDでライトコマンドWriteが入力された場合には、Lレベルの選択信号CS3を生成する。なお、イネーブル信号WENの入力から先頭データD0がラッチデータDL31として選択回路S4に入力されるまでの時間は、ライトレイテンシや回路構成等に基づいて予めシミュレーションによって求めることができる。このため、イネーブル信号WENの入力から選択信号CS3をHレベルに立ち上げるまでの時間は、例えばライトレイテンシの長さ毎に予めシミュレーション等によって設定されている。
この選択信号CS3に応じて、選択回路S4では、第1遅延信号WDQS1によってラッチされた先頭データD0がラッチデータDL31として受信され、第2遅延信号WDQS2によってラッチされた3番目以降の奇数番目データがラッチデータDL32として受信される。これにより、本実施形態では、データストローブ信号WDQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量が異なる遅延量に切り替えられる。このようにタイミング調整量を切り替える理由を、図15を参照して以下に説明する。なお、図15において、縦軸及び横軸は、説明を簡潔にするため、適宜拡大、縮小して示している。
例えば図15に示すように、プリアンブル期間の存在するデータストローブ信号WDQSでは、リード動作時と同様に、符号間干渉の影響等によって、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なる場合がある(破線波形は2番目の立ち上がりエッジの波形を参考として示したものである)。さらに、データ列WDQとデータストローブ信号WDQSの配線の遅延時間の違い等に起因して、データストローブ信号WDQSの先頭立ち上がりエッジがデータ列WDQの先頭データD0をラッチするための最適なタイミングに発生する場合がある。このような場合には、データストローブ信号WDQSの2番目以降の立ち上がりエッジが、3番目以降の奇数番目データ(例えば3番目のデータD2)をラッチするための最適なタイミングからずれて発生してしまう。このため、データストローブ信号WDQSをサンプリングクロックとした場合には、セットアップタイムが不足し、3番目以降の奇数番目データを正しくラッチすることができない。
これに対し、本実施形態では、データストローブ信号WDQSの2番目以降の立ち上がりエッジのタイミングを、3番目以降の奇数番目データをラッチするためのセットアップタイム及びホールドタイムを満たすタイミングとするように、データストローブ信号WDQSを第2の遅延量T21だけ遅延させた第2遅延信号WDQS2を生成した。さらに、その第2遅延信号WDQS2の2番目以降の立ち上がりエッジによって3番目以降の奇数番目データをラッチするようにした。これにより、符号間干渉の影響等によって各立ち上がりエッジ間で波形が異なる場合であっても、データ列WDQの各データを確実にラッチすることができる。
以上説明した本実施形態によれば、上記第1実施形態の(1)〜(3)と同様の効果を奏する。
(他の実施形態)
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・上記各実施形態では、ラッチ回路45,56,74の後段側に選択回路S1,S2,S3,S4をそれぞれ設けるようにした。これに限らず、例えばラッチ回路45,56,74の前段側に選択回路S1,S2,S3,S4をそれぞれ設けるようにしてもよい。
例えば図16に示されるように、DLL回路41a(遅延回路41)の後段に選択回路S5を設けるようにしてもよい。この場合の選択回路S5には、DLL回路41aから第1遅延信号DQS1と第2遅延信号DQS2とが入力される。選択回路S5は、Hレベルの選択信号CSに応じて第1遅延信号DQS1を選択し、Lレベルの選択信号CSに応じて第2遅延信号DQS2を選択する。そして、選択回路S5は、選択した遅延信号をアンド回路A1を介してFF回路F1,F6のクロック端子に出力する。ここで、上記Hレベルの選択信号CSは、データ列DQの先頭データD0がFF回路F1に入力される前に立ち上がり、先頭データD0以外の奇数番目データ(ここでは、3番目のデータD2)がFF回路F6に入力される前に立ち下がる。これにより、先頭データD0が第1遅延信号DQS1によってFF回路F1でラッチされ、先頭データD0以外の奇数番目データが第2遅延信号DQS2によってFF回路F1,F6でラッチされる。換言すると、データストローブ信号DQSの先頭立ち上がりエッジに対するタイミング調整量と、先頭以外の立ち上がりエッジに対するタイミング調整量とを異なる遅延量に切り替えることができる。
・上記第1及び第2実施形態では、リードコマンドReadに応答して、具体的にはリードコマンドReadに応答してHレベルとなるイネーブル信号RENの入力をトリガにしてHレベルの選択信号CS,CS1を生成するようにした。これに限らず、リードコマンドReadに応答して、例えばリードコマンドReadに応じて発生するデータストローブ信号DQSのプリアンブル状態への遷移に応答して、Hレベルの選択信号CS,CS1を生成するようにしてもよい。
例えば図16に示されるように、データストローブ信号DQSのプリアンブルを検出するプリアンブル検出回路65を設け、その検出回路65から選択回路S5に対して上記選択信号CSと同様の選択信号CS5を出力するようにしてもよい。検出回路65では、例えばデータストローブ信号DQSとその信号DQSと相補な信号とについて、Hレベル検出用の閾値電圧とLレベル検出用の閾値電圧との比較を行うことによって、データストローブ信号DQSのプリアンブルへの遷移を検知することができる。そして、検出回路65は、データストローブ信号DQSのプリアンブルの検出に応答してHレベルの選択信号CS5を生成する。すなわち、この構成では、データストローブ信号DQSの先頭立ち上がりエッジの前に発生するプリアンブルの検出をトリガとしてHレベルの選択信号CS5が生成される。したがって、このような構成であっても、データ列DQの先頭データD0がFF回路F1に入力される前に上記選択信号CS5を確実にHレベルに立ち上げることができる。
・上記第1実施形態における受信回路40を、例えば図17に示されるような構成に具体化してもよい。すなわち、この受信回路40では、ラッチ回路46がFF回路46aを含み、ラッチ回路47がFF回路47aを含み、ラッチ回路48がFF回路48aを含む。このFF回路46aは、第1遅延信号DQS1の立ち上がりエッジに同期してデータ列DQをラッチする。FF回路47aは、第2遅延信号DQS2の立ち上がりエッジに同期してデータ列DQをラッチする。FF回路48aは、第3遅延信号DQS3の立ち上がりエッジに同期してデータ列DQをラッチする。選択回路S1は、Hレベルの選択信号CSに応答して、FF回路46aからのラッチデータDL1をラッチデータDL11として出力する一方、Lレベルの選択信号CSに応答して、FF回路47aからのラッチデータDL2をラッチデータDL11として出力する。ここで、Hレベルの選択信号CSは、データ列DQの先頭データD0がラッチデータDL1として選択回路S1に入力される前にHレベルに立ち上がる。さらに、Hレベルの選択信号CSは、先頭データD0が選択回路S1から出力された後であって、3番目の奇数番目データD2がラッチデータDL2として選択回路S1に入力される前にLレベルに立ち下がる。
・上記各実施形態では、データストローブ信号DQSの各立ち上がりエッジのタイミング調整量を、データストローブ信号DQSに与える遅延量で調整するようにした。これに限らず、例えばデータ列DQに与える遅延量を調整することにより、データストローブ信号DQSの各立ち上がりエッジのタイミング調整量を相対的に調整するようにしてもよい。
・上記第2実施形態では、先頭立ち上がりエッジとそれ以外の立ち上がりエッジとでタイミング調整量を切り替え、さらにその先頭立ち上がりエッジのタイミング調整量をリードコマンドReadの発行間隔に応じて変更するようにした。これに限らず、例えば単にリードコマンドReadの発行間隔に応じて、先頭立ち上がりエッジのタイミング調整量を変更するようにしてもよい。このような構成であっても、少なくとも上記第2実施形態の(5)の効果を奏することができる。
・上記各実施形態では、データストローブ信号DQS,WDQSの先頭立ち上がりエッジとそれ以外の立ち上がりエッジとに対するタイミング調整量を異なる遅延量に設定するようにした。これに限らず、例えばデータストローブ信号DQS,WDQSの2番目の立ち上がりエッジと3番目の立ち上がりエッジとに対するタイミング調整量を異なる遅延量に設定するようにしてもよい。あるいは、例えばデータストローブ信号DQS,WDQSの各立ち上がりエッジに対するタイミング調整量をそれぞれ異なる遅延量に設定するようにしてもよい。この構成によれば、上述した符号間干渉や他の要因によってデータストローブ信号DQS,WDQSの各立ち上がりエッジの波形が互いに異なる場合であっても、各立ち上がりエッジの波形に合わせてタイミング調整量を切り替えることができる。これにより、タイミングエラーの発生を好適に抑制することができる。
また、データストローブ信号DQSの立ち下がりエッジについても、立ち上がりエッジと同様のタイミング調整を行うようにしてもよい。
・上記各実施形態では、選択信号CSを、リードコマンドReadの発行後の第3イネーブル信号EN3の最初の立ち上がりエッジよりも前に立ち上がり、第3イネーブル信号EN3の最初の立ち下がりエッジに同期して立ち下がるように生成した。これに限らず、例えば選択信号CSを、リードコマンドReadの発行後の第3イネーブル信号EN3の最初の立ち上がりエッジに同期して立ち上がるように生成してもよい。また、選択信号CSを、第3イネーブル信号EN3の最初の立ち上がりよりも後であって、第3イネーブル信号EN3の2番目の立ち上がりエッジよりも前に立ち下がるように生成してもよい。
・上記各実施形態における遅延回路41,51,71は、データストローブ信号DQS,WDQSを所定時間だけ遅延させることのできる構成であれば、DLL回路に特に制限されない。
・上記第1実施形態では、第2遅延信号DQS2を論理反転させて第3遅延信号DQS3を生成するようにした。これに限らず、例えば第2遅延信号DQSの位相を180度遅延させて第3遅延信号DQS3を生成するようにしてもよい。但し、この場合には、第3遅延信号DQS3の各立ち上がりエッジの波形はデータストローブ信号DQSの各立ち上がりエッジの波形に相当する。このため、第3遅延信号DQS3では、その先頭立ち上がりエッジとそれ以外の立ち上がりエッジとの波形が異なることになる。そこで、さらに第1遅延信号DQSの位相を180度遅延させた第4遅延信号を生成し、その第4遅延信号でデータ列DQの2番目のデータD1をラッチし、上記第3遅延信号DQS3で4番目のデータD3をラッチするようにしてもよい。これにより、全ての偶数番目のデータについても確実にラッチすることができる。なお、上記第2実施形態における第4遅延信号DQS14や上記第3実施形態における第2遅延信号WDQS2についても、上記第3遅延信号DQS3と同様のことが言える。
・上記第1及び第2実施形態では、メモリ20から出力されるデータ列DQをデータストローブ信号DQSに基づいて受信する受信回路40,50に具体化した。これに限らず、例えばメモリ以外の回路から出力される信号(入力信号)をストローブ信号に基づいて受信する受信回路、例えば通信用の回路から出力される信号をストローブ信号に基づいて受信する受信回路に具体化してもよい。