図1は実施の形態に係る半導体記憶装置1の構成を示す図である。本実施の形態に係る半導体記憶装置1は、記憶装置2と、当該記憶装置2を制御する制御装置3とを備えている。記憶装置2は、例えばDDR型のSDRAMである。制御装置3は、例えばASIC(application specific integrated circuit)で構成されている。記憶装置2と制御装置3は一つのパッケージに収められても良いし、別々のパッケージに収められても良い。後者の場合には、記憶装置2と制御装置3は例えばプリント基板上に搭載されて、当該プリント基板上の配線によって互いに接続される。制御装置3は、記憶装置2に対してデータを書き込み、記憶装置2からデータを読み出す。制御装置3と記憶装置2とは、様々な信号線SLによって互いに接続されており、当該信号線SLを使用して信号のやり取りを行う。信号線SLの種類としては、データ線、データストローブ線、クロック線、アドレス線等が存在する。
制御装置3は、図2に示されるように、クロック生成回路4と、記憶装置3からデータを読み出すデータリード回路5とを備えている。クロック生成回路4は、差動信号を構成する、互いに相補的な2つのクロック信号CLK,CLBを生成して記憶装置2に出力する。クロック信号CLKはデータリード回路5にも出力される。またクロック生成回路4は、制御装置3の内部で使用されるP(≧2)個の内部クロック信号CLK2[0]〜CLK2[P−1](内部クロック信号CLK2[P−1:0])を生成して出力する。P個の内部クロック信号CLK2[0]〜CLK2[P−1]は互いに位相が異なっており、データリード回路5で使用される。内部クロック信号CLK2[0]〜CLK2[P−1]のそれぞれの周波数は、クロック信号CLK,CLKBの周波数の2倍となっている。クロック信号CLK,CLKBの周波数は例えば1GHz程度となっている。
データリード回路5は、クロック信号CLKに同期して動作を行う。データリード回路5は記憶装置2に対してリードコマンドRDCを出力する。
記憶装置2は、クロック信号CLK,CLKBに同期して動作を行う。記憶装置2は、データリード回路5からリードコマンドRDCが入力されると、データストローブ線DQSLを駆動するともに、データ線DQL[0]〜DQL[7](データ線DQL[7:0]))に8ビットのリードデータをそれぞれ出力する。データリード回路5は、データストローブ線DQSLのデータストローブ信号DQSを取り込み、取り込んだデータストローブ信号DQSを使用して、データ線DQL[0]〜DQL[7]のデータ信号DQ[0]〜DQ[7](データ信号DQ[7:0]))が示す8ビットのリードデータを取得する。
以後、データ線DQL[0]〜DQL[7]を特に区別する必要がないときには、[]を削除してそれぞれを「データ線DQL」と呼ぶ。また、データ信号DQ[0]〜DQ[7]を特に区別する必要がないときには、[]を削除してそれぞれを「データ信号DQ」と呼ぶ。以下に登場する、符号に[]を有する信号、値及びデータ等についても同様である。本実施の形態では、データ線DQLが8つ設けられているが、データ線DQLの数はこれ以外であっても良い。
データストローブ線DQSL及びデータ線DQLは双方向の信号線である。制御装置3は記憶装置2に対してデータを書き込む際には、データストローブ線DQSLを駆動するとともに、データ線DQLにライトデータを出力する。制御装置3及び記憶装置2の両方がデータストローブ線DQSLを駆動していないときには、データストローブ信号DQSの信号レベルは不定となる。同様に、制御装置3及び記憶装置2の両方がデータ線DQLを駆動していないときには、データ信号DQの信号レベルは不定となる。以後、「データストローブ信号DQS」と言えば、記憶装置2からデータが読み出される際のデータストローブ信号DQSを意味する。また「データ信号DQ」と言えば、記憶装置2からデータが読み出される際のデータ信号DQを意味する。
図3はクロック信号CLK、リードコマンドRDC、データストローブ信号DQS及びデータ信号DQの関係の一例を示す図である。記憶装置2は、リードコマンドRDCが入力されると、各データ線DQLにバーストデータを出力する。
図3に示されるように、データリード回路5が、クロック信号CLKのあるライズエッジRE0でリードコマンドRDCを出力すると、記憶装置2は、例えば、当該ライズエッジRE0の次のライズエッジRE1で、信号レベルが不定のデータストローブ信号DQSをLowレベルに固定する。そして、記憶装置2は、その次のライズエッジRE2から、クロック信号CLKにエッジが現れるたびにデータストローブ信号DQSの信号レベルを反転させる。したがって、データストローブ信号DQSのエッジが現れる周波数は、クロック信号CLKの周波数と同じである。つまり、ライズエッジとフォールエッジが交互に現れているデータストローブ信号DQSの周波数はクロック信号CLKの周波数と同じである。クロック信号CLKのライズエッジRE1から次のライズエッジRE2までの間、データストローブ信号DQSが示すLowレベルの信号は「プリアンブル」と呼ばれる。以後、「データストローブ信号DQSの周波数」と言えば、図3のように、ライズエッジとフォールエッジが交互に現れているデータストローブ信号DQSの周波数を意味する。また「データストローブ信号DQSの周期」と言えば、ライズエッジとフォールエッジが交互に現れているデータストローブ信号DQSでのライズエッジ間の時間的長さ(フォールエッジ間の時間的長さ)を意味する。
記憶装置2は、データストローブ信号DQSの各エッジでリードデータRDをデータ線DQLに出力する。これにより、1回のリードコマンドRDCの発行によって、データ信号DQには複数のリードデータRDが含まれる。リードデータRDの出力は、データストローブ信号DQSのエッジで開始し、次のリードデータRDの出力は、データストローブ信号DQSの次のエッジで開始する。データストローブ信号DQSのエッジのタイミングがジッタにより変化する場合には、当該エッジに対応するリードデータRDの出力タイミングもそれに応じて変化する。つまり、データストローブ信号DQSのエッジのタイミングが遅れると、その分、当該エッジに対応するリードデータRDの出力タイミングも遅れる。また、データストローブ信号DQSのエッジのタイミングが早まると、その分、当該エッジに対応するリードデータRDの出力タイミングも早まる。
なお、DDR2等の規格によれば、データストローブ信号DQSのあるエッジで出力されるリードデータRDの値は、当該エッジから第1期間までと、当該エッジの次のエッジから第2期間前までとが不定となっている。したがって、DDR2等の規格の上では、データストローブ信号DQSのあるエッジで出力されるリードデータRDの値は、当該エッジと次のエッジの間の中央付近では確定している。
図3の例では、データストローブ信号DQSには、ライズエッジ及びフォールエッジの両方を含めて8回エッジが現れている。したがって、データ線DQLには、リードデータRDが連続して8回出力されている。データ線DQLにはリードデータRD0〜RD7が出力されている。本例では、リードデータRDのバースト数が“8”となっているが、これ以外であっても良い。
リードデータRDのバースト出力は、データストローブ信号DQSのフォールエッジで終了する。データストローブ信号DQSのフォールエッジで最後のリードデータRDの出力が開始すると、図3のように、データストローブ信号DQSはクロック信号CLKの半サイクル分だけLowレベルとなった後(ポストアンブル)、不定となる。
図3の例では、リードコマンドRDCが出力されるタイミング(クロック信号CLKのライズエッジRE0)から、データストローブ信号DQSにおいて最初のライズエッジが現れるまでの遅延時間が、クロック信号CLKの2サイクル分となっているが、これ以外であっても良い。また、リードコマンドRDCが連続して発行される場合には、データストローブ信号DQSには8回よりも多い回数エッジが現れ、記憶装置2からは8個よりも多い数のリードデータRDが連続して出力されることもある。
データリード回路5は、データストローブ信号DQSに現れるエッジを検出し、その検出結果に基づいて、データ信号DQが示す、当該エッジに対応するリードデータRDを取得する。以下に本実施の形態に係るデータリード回路5について説明するが、その前に、当該データリード回路5と比較される比較対象リード回路900について説明する。
<比較対象リード回路>
図4は比較対象リード回路900の構成を示す図である。比較対象リード回路900は、本実施の形態に係るデータリード回路5と同様に、データストローブ信号DQSのエッジを検出し、その検出結果に基づいて、データ信号DQが示す、当該エッジに対応するリードデータRDを取得する。
図4に示されるように、比較対象リード回路900は、データストローブ信号DQSを処理するデータストローブエッジ検出回路910と、データ信号DQ[0]〜DQ[7]をそれぞれ処理する8個のリードデータ取得回路950−0〜950−7とを備えている。データストローブエッジ検出回路910は、オーバーサンプリング回路920と、遅延回路930と、エッジ検出回路940とを備えている。リードデータ取得回路910−0〜910−7のそれぞれは、オーバーサンプリング回路960と、遅延回路970と、データ取得回路980とを備えている。
データストローブエッジ検出回路910は、クロック生成回路4が出力するP個の内部クロック信号CLK2[0]〜CLK2[P−1]を使用して、データストローブ信号DQSをオーバーサンプリングする。また、データ信号DQ[y](0≦y≦7)を処理するリードデータ取得回路950−yは、内部クロック信号CLK2[0]〜CLK2[P−1]を使用して、データ信号DQ[y]をオーバーサンプリングする。以後、データストローブエッジ検出回路を「DQSエッジ検出回路」と呼び、「リードデータ取得回路」を「RD取得回路」と呼ぶ。
図5は内部クロック信号CLK2[0]〜CLK2[P−1]の位相関係を示す図である。本実施の形態ではP=12となっている。内部ブロック信号CLK2[0]〜CLK2[P−1]の1サイクル分の位相を360度とすると、内部クロック信号CLK2[0]〜CLK2[P−1]の位相はこの順で30度ずつずれている。内部ブロック信号CLK2[0]〜CLK2[P−1]の周波数はクロック信号CLKの周波数の2倍であるため、クロック信号CLKの1サイクル分の位相を360度とすると、内部クロック信号CLK2[0]〜CLK2[P−1]の位相はこの順で15度ずつずれている。したがって、クロック信号CLKの半サイクルの間には、内部クロック信号CLK2[0]〜CLK2[P−1]のライズエッジが全部で12回現れる。そして、クロック信号CLKの周波数とデータストローブ信号DQSの周波数とは一致するため、データストローブ信号DQSの半サイクルの間(ライズエッジとフォールエッジの間)には、内部クロック信号CLK2[0]〜CLK2[P−1]のライズエッジが全部で12回現れる。内部クロック信号CLK2[x](0≦x≦P−1)のライズエッジと、それに続く内部クロック信号CLK2[x+1]のライズエッジとの間隔が、データストローブ信号DQS及びデータ信号DQ[y]のサンプリング周期SMPとなる。内部クロック信号CLK2[0]のライズエッジはクロック信号CLKのライズエッジまたはフォールエッジと同期している。
<DQSエッジ検出回路>
図6はオーバーサンプリング回路920の構成を示す図である。図6に示されるように、オーバーサンプリング回路920は、データストローブ信号DQSをオーバーサンプリングするサンプリング回路921と、クロック乗せ換え回路922とを備えている。クロック乗せ換え回路922は、1段目回路923、2段目回路924、3段目回路925及び4段目回路926を備えている。
図7はサンプリング回路921の構成を示す図である。図7に示されるように、サンプリング回路921は、内部クロック信号CLK2[0]〜CLK2[11]がそれぞれ入力されるフリップフリップ(FF)回路921A〜921Lを備えている。FF回路921A〜921Lのそれぞれは、入力される内部クロック信号CLK2[x]のライズエッジでデータストローブ信号DQSが示す値(論理値)を保持し、当該値をサンプル値SM1[x]として出力する。これにより、サンプリング回路921では、データストローブ信号DQSが、その半サイクルの間に12回サンプリングされ、データストローブ信号DQSがオーバーサンプリングされる。サンプル値は1ビットのデータであり、サンプルデータとも呼ばれる。
図8はクロック乗せ換え回路922の1段目回路923の構成示す図である。図8に示されるように、1段目回路923は、サンプル値SM1[0]〜SM1[11]がそれぞれ入力されるFF回路923A〜923Lを備えている。FF回路923A〜923Cのそれぞれは、内部クロック信号CLK2[0]のライズエッジで、入力されるサンプル値SM1[x]を保持してサンプル値SM2[x]として出力する。したがって、FF回路923A〜923Cからは、内部クロック信号CLK2[0]のライズエッジに同期して、サンプル値SM2[0]〜SM2[2]がそれぞれ出力される。
FF回路923D〜923Fのそれぞれは、内部クロック信号CLK2[3]のライズエッジで、入力されるサンプル値SM1[x]を保持してサンプル値SM2[x]として出力する。したがって、FF回路923D〜923Fからは、内部クロック信号CLK2[3]のライズエッジに同期して、サンプル値SM2[3]〜SM2[5]がそれぞれ出力される。
FF回路923G〜923Iのそれぞれは、内部クロック信号CLK2[6]のライズエッジで、入力されるサンプル値SM1[x]を保持してサンプル値SM2[x]として出力する。したがって、FF回路923G〜923Iからは、内部クロック信号CLK2[6]のライズエッジに同期して、サンプル値SM2[6]〜SM2[8]がそれぞれ出力される。
FF回路923J〜923Lのそれぞれは、内部クロック信号CLK2[9]のライズエッジで、入力されるサンプル値SM1[x]を保持してサンプル値SM2[x]として出力する。したがって、FF回路923J〜923Lからは、内部クロック信号CLK2[9]のライズエッジに同期して、サンプル値SM2[9]〜SM2[11]がそれぞれ出力される。
図9はクロック乗せ換え回路922の2段目回路924の構成示す図である。図9に示されるように、2段目回路924は、サンプル値SM2[0]〜SM2[11]がそれぞれ入力されるFF回路924A〜924Lを備えている。FF回路924A〜924Fのそれぞれは、内部クロック信号CLK2[0]のライズエッジで、入力されるサンプル値SM2[x]を保持してサンプル値SM3[x]として出力する。したがって、FF回路924A〜924Fからは、内部クロック信号CLK2[0]のライズエッジに同期して、サンプル値SM3[0]〜SM3[5]がそれぞれ出力される。
FF回路924G〜924Iのそれぞれは、内部クロック信号CLK2[3]のライズエッジで、入力されるサンプル値SM2[x]を保持してサンプル値SM3[x]として出力する。したがって、FF回路924G〜924Iからは、内部クロック信号CLK2[3]のライズエッジに同期して、サンプル値SM3[6]〜SM3[8]がそれぞれ出力される。
FF回路924J〜924Lのそれぞれは、内部クロック信号CLK2[6]のライズエッジで、入力されるサンプル値SM2[x]を保持してサンプル値SM3[x]として出力する。したがって、FF回路924J〜924Lからは、内部クロック信号CLK2[6]のライズエッジに同期して、サンプル値SM3[9]〜SM3[11]がそれぞれ出力される。
図10はクロック乗せ換え回路922の3段目回路925の構成示す図である。図10に示されるように、3段目回路925は、サンプル値SM3[0]〜SM3[11]がそれぞれ入力されるFF回路925A〜925Lを備えている。FF回路925A〜925Iのそれぞれは、内部クロック信号CLK2[0]のライズエッジで、入力されるサンプル値SM3[x]を保持してサンプル値SM4[x]として出力する。したがって、FF回路925A〜925Iからは、内部クロック信号CLK2[0]のライズエッジに同期して、サンプル値SM4[0]〜SM4[8]がそれぞれ出力される。
FF回路925J〜925Lのそれぞれは、内部クロック信号CLK2[3]のライズエッジで、入力されるサンプル値SM3[x]を保持してサンプル値SM4[x]として出力する。したがって、FF回路925J〜925Lからは、内部クロック信号CLK2[3]のライズエッジに同期して、サンプル値SM4[9]〜SM4[11]がそれぞれ出力される。
図11はクロック乗せ換え回路922の4段目回路926の構成示す図である。図11に示されるように、4段目回路926は、サンプル値SM4[0]〜SM4[11]がそれぞれ入力されるFF回路926A〜926Lを備えている。FF回路925A〜926Lのそれぞれは、内部クロック信号CLK2[0]のライズエッジで、入力されるサンプル値SM4[x]を保持してサンプル値SM5[x]として出力する。したがって、FF回路926A〜926Lからは、内部クロック信号CLK2[0]のライズエッジに同期して、サンプル値SM5[0]〜SM5[11]がそれぞれ出力される。これにより、オーバーサンプリング回路920からは、内部クロック信号CLK2[0]のライズエッジごとに、サンプル値SM5[P−1:0]が出力される。サンプル値SM5[P−1:0]は、クロック信号CLKの半サイクルと同じ長さの期間の間、データストローブ信号DQSをP回サンプリングして得られたサンプル値である。以後、当該期間を「処理単位期間」と呼ぶ。オーバーサンプリング回路920は、処理単位期間ごとに、当該処理単位期間においてデータストローブ信号DQSをサンプリングすることによって得られた12個のサンプル値SM5[11:0]を出力する。サンプル値SM5[11:0]は12ビットのデータである。処理単位期間は内部クロック信号CLK2[0]と同期している。つまり処理単位期間の始点及び終点は内部クロック信号CLK2[0]のライズエッジと同期している。
図12は処理単位期間とデータストローブ信号DQSとの関係の一例を示す図である。図12には、(M+0)番目の処理単位期間990から(M+7)番目の処理単位期間990が示されている。処理単位期間990の長さと、データストローブ信号DQSの半周期の長さとは理想的には一致することから、データストローブ信号DQSでは、理想的には1つの処理単位期間990にエッジが1つだけ含まれる。しかしながら、データストローブ信号DQSのエッジのタイミングにはジッタが存在することから、実際にはこのようになるとは限らない。オーバーサンプリング回路920は、ある処理単位期間990で得たサンプル値SM5[P−1:0]を、当該処理単位期間990よりも内部クロック信号CLK2[0]の数サイクル分遅らせて出力する。
以上のような構成を有するオーバーサンプリング回路920からは、データストローブ信号DQSをオーバーサンプリングして順次得られるサンプル値が、クロック信号CLKの半サイクル分(P個)ごとに、内部クロック信号CLK2[0]のライズエッジに同期して出力される。
図13はDQSエッジ検出回路910の遅延回路930の構成を示す図である。遅延回路930は、オーバーサンプリング回路920から内部クロック信号CLK2[0]のライズエッジに同期して出力されるサンプル値SM5[11:0]を、内部クロック信号CLK2[0]の1サイクル分遅延させて出力する。このとき、遅延回路930は、当該サンプル値SM5[11:0]に対して、当該ライズエッジよりも1つ前のライズエッジに同期して出力されるサンプル値SM5[P−1]を付加する。
図132に示されるように、遅延回路930は、内部クロック信号CLK2[0]が入力されるFF回路930A〜930Cを備えている。FF回路930Aは、内部クロック信号CLK2[0]のライズエッジで、サンプル値SM5[0]〜SM5[P−1]を保持してそれぞれサンプル値SM6[1]〜SM6[P]として出力する。これにより、遅延回路930は、入力されたサンプル値SM5[0]〜SM5[P−1]を、内部クロック信号CLK2[0]の1サイクル分遅延して、それぞれサンプル値SM6[1]〜SM6[P]として出力する。
FF回路930Bは、内部クロック信号CLK2[0]のライズエッジでサンプル値SM5[P−1]を保持して出力する。FF回路930Cは、内部クロック信号CLK2[0]のライズエッジでFF回路930Bの出力を保持してサンプル値SM6[0]として出力する。これにより、遅延回路930は、入力されたサンプル値SM5[P−1]を、内部クロック信号CLK2[0]の2サイクル分遅延して、サンプル値SM6[0]として出力する。
このような構成を有する遅延回路930では、M番目の処理単位期間990で得られたP個のサンプル値SM5[0]〜SM5[P−1]の先頭に、それよりも一つ前の(M−1)番目の処理単位期間990で得られた最後のサンプル値SM5[P−1]が付加され、それによって得られるP個のサンプル値がそれぞれサンプル値SM6[0]〜SM6[P]とされる。図14は、その様子を示す図である。
上記の点を内部クロック信号CLK2[0]のサイクルを用いて言い換えると、遅延回路930は、内部クロック信号CLK2[0]のN番目のサイクルでオーバーサンプリング回路920から出力されるP個のサンプル値SM5[0]〜SM5[P−1]の先頭に、内部クロック信号CLK2[0]の(N−1)番目のサイクルでオーバーサンプリング回路920から出力されるサンプル値SM5[P−1]を付加して得られるP個のサンプル値を、それぞれサンプル値SM6[0]〜[P]として、内部クロック信号CLK2[0]の(N+1)番目のサイクルで出力する。つまり、遅延回路930は、内部クロック信号CLK2[0]のN番目のサイクルでオーバーサンプリング回路920から出力されるP個のサンプル値SM5[0]〜SM5[P−1]を1サイクル分遅延させて出力するとともに、当該サンプル値SM5[0]〜SM5[P−1]の先頭に内部クロック信号CLK2[0]の(N−1)番目のサイクルでオーバーサンプリング回路920から出力されるサンプル値SM5[P−1]を付加する。図15は、その様子を示す図である。
図16はDQSエッジ検出回路910のエッジ検出回路940の構成を示す図である。エッジ検出回路940は、P個のXOR回路940−0〜940−(P−1)を備えている。XOR回路940−xは、遅延回路930から出力されるサンプル値SM6[x]及びサンプル値SM6[x+1]の排他的論理和を求めて、その結果をエッジデータEG[x]として出力する。エッジデータEG[x]は、サンプル値SM6[x]及びサンプル値SM6[x+1]の論理値が互いに一致すれば“0”を示し、当該論理値が互いに異なれば“1”を示す。エッジ検出回路940からはエッジデータEG[0]〜[P−1]が出力される。ある処理単位期間990でのサンプル値SM5[0]〜SM5[P−1]に基づいて生成されたエッジデータEG[0]〜[P−1]では、当該処理単位期間990においてデータストローブ信号DQSのエッジが現れるタイミングに応じたデータが“1”を示す。よって、エッジデータEG[0]〜[P−1]を見れば、それに対応する処理単位期間990においてデータストローブ信号DQSのエッジが現れるタイミングを特定することができる。
<RD取得回路>
RD取得回路950−1〜950−7は、互いに同じ回路構成を有している。各RD取得回路950のオーバーサンプリング回路960は、オーバーサンプリング回路920と同じ回路構成を有している。データ信号DQ[y]を処理するRD取得回路950−yのオーバーサンプリング回路960は、データ信号DQ[y]をオーバーサンプリングして得られるサンプル値SM15[P−1:0]を出力する。サンプル値SM15[P−1:0]は、上記のサンプル値SM5[P−1:0]と同様に、処理単位期間の間、データ信号DQ[y]をP回サンプリングして得られたサンプル値である。オーバーサンプリング回路960は、処理単位期間ごとに、当該処理単位期間においてデータ信号DQ[y]をサンプリングすることによって得られた12個のサンプル値SM15[11:0]を出力する。
図17は遅延回路970を示す図である。図17に示されるように、遅延回路970はFF回路970Aを備えている。FF回路970Aは、サンプル値SM15[P−1:0]のうちの上位側半分のサンプル値SM15[P/2]〜SM15[P−1]を内部クロック信号CLK2[0]のライズエッジで保持して、サンプル値SM16[0]〜SM16[P/2−1]としてそれぞれ出力する。また遅延回路970は、サンプル値SM15[P−1:0]のうちの下位側半分のサンプル値SM15[0]〜SM15[P/2−1]をそのままサンプル値SM16[P/2]〜SM16[P−1]としてそれぞれ出力する。
このような構成を有する遅延回路970では、M番目の処理単位期間で得られたP個のサンプル値SM15[P−1:0]のうち下位側半分のサンプル値SM15[P/2−1:0]が、サンプル値SM16[P−1:0]の上位側半分のサンプル値S16[P−1:P/2]となる。そして、一つ前の(M−1)番目の処理単位期間で得られたP個のサンプル値SM15[P−1:0]のうち上位側半分のサンプル値SM15[P−1:P/2]が、サンプル値SM16[P−1:0]の下位側半分のサンプル値S16[P/2−1:0]となる。図18はその様子を示す図である。なお図18の破線の矢印は、M番目の処理単位期間で得られたサンプル値SM15[P/2−1:0]及び(M−1)番目の処理単位期間で得られたサンプル値SM15[P−1:P/2]と、サンプル値SM16[P−1:0]との対応関係を示しており、サンプル値SM16[P−1:0]の出力タイミングを示しているわけでない。
上記の点を内部クロック信号CLK2[0]のサイクルを用いて言い換えると、遅延回路970は、内部クロック信号CLK2[0]のN番目のサイクルでオーバーサンプリング回路920から出力されるP個のサンプル値SM15[P−1:0]のうち下位側半分のサンプル値SM15[P/2−1:0]を、当該N番目のサイクルでのサンプル値SM16[P−1:0]の上位側半分のサンプル値S16[P−1:P/2]とする。そして、遅延回路920は、内部クロック信号CLK2[0]の(N−1)番目のサイクルでオーバーサンプリング回路920から出力されるP個のサンプル値SM15[P−1:0]のうち上位側半分のサンプル値SM15[P−1:P/2]を、内部クロック信号CLK2[0]のN番目のサイクルでのサンプル値SM16[P−1:0]の下位側半分のサンプル値S16[P/2−1:0]とする。図19はその様子を示す図である。図19では上側に遅延回路970の入力が示され、下側に遅延回路970の出力が示されている。
図20はデータ取得回路980の構成を示す図である。図20に示されるように、データ取得回路980は、P個のAND回路981−0〜981−(P−1)とOR回路982とを備えている。AND回路981−xは、遅延回路970からのサンプル値SM16[x]と、DQSエッジ検出回路910からのエッジデータEG[x]との論理和を演算し、その演算結果を出力値AND[x]として出力する。データ信号DQ[y]を処理するRD取得回路950−yのOR回路982は、P個のAND回路981−0〜981−(P−1)がそれぞれ出力する出力値AND[0]〜AND[P−1]の論理和を演算し、その結果を出力データDQout[y]として出力する。RD取得回路950−yは、出力データDQout[y]を、データ信号DQ[y]が示すリードデータRDとして出力する。
ここで、内部クロック信号CLK2[0]のN番目のサイクルにおいて、図21に示されるM番目の処理単位期間990でのデータストローブ信号DQSのサンプル値SM5[P−1:0]及びM番目の処理単位期間990でのデータ信号DQ[y]のサンプル値SM15[P−1:0]が、DQSエッジ検出回路910のオーバーサンプリング回路920及びRD取得回路950−yのオーバーサンプリング回路960からそれぞれ出力された場合を考える。
DQSエッジ検出回路910の遅延回路930では、オーバーサンプリング回路920からのサンプル値SM5[P−1:0]が内部クロック信号CLK2[0]の1サイクル分だけ遅延することから、内部クロック信号CLK2[0]のN番目のサイクルにおいてエッジ検出回路940から出力されるエッジデータEG[P−1:0]は、(M−1)番目の処理単位期間990でのデータストローブ信号DQSのエッジeg1(図21参照)のタイミングを示すことになる。
一方で、RD取得回路950−yの遅延回路970は、上述の図18に示されるように、内部クロック信号CLK2[0]のN番目のサイクルにおいて、(M−1)番目の処理単位期間990の後半半分とM番目の処理単位期間990の前半半分から成るサンプリング期間995(図21参照)でのデータ信号DQ[y]のサンプル値SM16[P−1:0]を出力する。このサンプル値SM16[P−1:0]では、前半が、(M−1)番目の処理単位期間990でのデータストローブ信号DQSのエッジeg1に対応するリードデータRD1を示し、後半が、M番目の処理単位期間990でのデータストローブ信号DQSのエッジeg2に対応するリードデータRD2を示す。
このように、内部クロック信号CLK2[0]のN番目のサイクルでは、エッジ検出回路940からは、(M−1)番目の処理単位期間990でのデータストローブ信号DQSのエッジeg1のタイミングを示すエッジデータEG[P−1:0]が出力されるとともに、RD取得回路950−yの遅延回路970からは、(M−1)番目の処理単位期間990の後半半分とM番目の処理単位期間990の前半半分から成るサンプリング期間995でのデータ信号DQ[y]のサンプル値SM16[P−1:0]が出力される。これにより、内部クロック信号CLK2[0]のN番目のサイクルにおいては、エッジデータEG[P−1:0]が示す、データストローブ信号DQSのエッジeg1についての(M−1)番目の処理単位期間990での相対的な位置PS1と、サンプル値SM16[P−1:0]が示す、当該エッジeg1に対応するリードデータRD1の出力期間996の中央996Aについてのサンプリング期間995での相対的な位置PS2とが近似するようになる。つまり、サンプル値SM16[P−1:0]においては、エッジデータEG[P−1:0]に含まれる、データストローブ信号DQSのエッジのタイミングを示すデータ(“1”を示すデータ)のビット位置xと同じビット位置のサンプル値SM16[x]は、当該エッジに対応するリードデータRDを示すことになる。よって、図20のような構成を有するデータ取得回路980は、データ信号DQ[y]が示すリードデータRDを取得することができる。
図22〜24は、DQSエッジ検出回路910でのサンプル値SM5[P−1:0]、サンプル値SM6[P:0]及びエッジデータEG[P−1:0]の一例をそれぞれ示す図である。図25〜28は、RD取得回路950−yでのサンプル値SM15[P−1:0]、サンプル値SM16[P−1:0]、出力値AND[P−1:0]及び出力データDQout[y]の一例をそれぞれ示す図である。
図22〜28での「N+0」、「N+1」等は内部クロック信号CLK2[0]のサイクルの番号を示している。図22〜24には、処理単位期間990の中央にデータストローブ信号DQSのエッジが存在する場合のサンプル値SM5[P−1:0]、サンプル値SM6[P:0]及びエッジデータEG[P−1:0]が示されている。図22の例では、内部クロック信号CLK2[0]の(N+0)番目のサイクルでのサンプル値SM5[P−1:0]と、(N+1)番目のサイクルでのサンプル値SM5[5:0]とは、データストローブ信号DQSのプリアンブルを示している。図25〜28での「A」、「B」等はリードデータRDの値を示している。図22〜28での「X」は不定値を示している。
本例では、処理単位期間990の中央にデータストローブ信号DQSのエッジが存在しているため、図24に示されるように、12個のエッジデータEG[11:0]のうち真ん中のビット位置のエッジデータEG[6]が“1”を示している。したがって、図26〜28に示されるように、12個のサンプル値SM16[P−1:0]のうちの中央付近のビット位置のサンプル値SM16[6]が示す値が出力データDQout[y]となる。本例では、RD取得回路950−yにおいて、データ信号DQ[y]が示すリードデータRDが適切に取得されている。
ここで、処理単位期間990の始点あるいは終点の近傍にデータストローブ信号DQSのエッジが存在する場合には、データストローブ信号DQSのエッジのタイミングのジッタにより、処理単位期間990においてデータストローブ信号DQSのエッジがまったく存在しない状況や、処理単位期間990においてデータストローブ信号DQSのエッジが複数存在する状況が発生することがある。つまり、処理単位期間990の始点あるいは終点の近傍にデータストローブ信号DQSのエッジが存在する場合にエッジ間の間隔が長くなったり、短くなったりするときには、処理単位期間990においてエッジがまったく存在しなかったり、処理単位期間990において複数のエッジが存在したりすることがある。このような場合には、比較対象リード回路900は、データ信号DQが示すリードデータRDを適切に取得できないことがある。図29〜35は、比較対象リード回路900が、データ信号DQが示すリードデータRDを適切に取得できない場合の当該比較対象リード回路900の動作例を示す図である。
図29〜31は、DQSエッジ検出回路910でのサンプル値SM5[P−1:0]、サンプル値SM6[P:0]及びエッジデータEG[P−1:0]の一例をそれぞれ示す図である。図32〜25は、RD取得回路950−yでのサンプル値SM15[P−1:0]、サンプル値SM16[P−1:0]、出力値AND[P−1:0]及び出力データDQout[y]の一例をそれぞれ示す図である。
本例では、図31に示されるように、内部クロック信号CLK2[0]の(N+1+3)番目のサイクルでのエッジデータEG[P−1:0]においては、エッジデータEG[0]及びエッジデータEG[11]がともに“1”を示していることから、データストローブ信号DQSのエッジが2つ検出されている。したがって、(N+1+3)番目のサイクルでの出力データDQout[y]は、出力値AND[0]及び出力値AND[11]のどちらの値を示すか分からない。つまり、(N+1+3)番目のサイクルでは、データ信号DQ[y]が示すリードデータRDを適切に取得できない。
一方で、内部クロック信号CLK2[0]の(N+1+4)番目のサイクルでのエッジデータEG[P−1:0]については、すべてが“0”を示していることから、データストローブ信号DQSのエッジが1つも検出されていない。したがって、(N+1+4)番目のサイクルでの出力データDQout[y]は“0”を示す。よって、(N+1+4)番目のサイクルでは、データ信号DQ[y]が示すリードデータRDを適切に取得できない。
このように、比較対象リード回路900では、データストローブ信号DQSのエッジのタイミングのジッタにより、データ信号DQが示すリードデータRDを適切に取得できない場合がある。
そこで、本実施の形態では、データ信号DQが示すリードデータRDをより確実に取得することが可能なデータリード回路5を提供する。以下に本実施の形態に係るデータリード回路5について説明する。
<本実施の形態に係るデータリード回路>
図36は、データリード回路5の構成を示す図である。本実施の形態に係るデータリード回路5は、単位期間において得られた、データストローブ信号DQSの第1所定数のサンプル値を保持する。そして、データリード回路5は、保持した第1所定数のサンプル値から、データストローブ信号DQSのエッジの検出単位となる第2所定数(<第1所定数)のサンプル値を決定する。これにより、データストローブ信号DQSについての比較的多い数のサンプル値から、エッジを検出する際に使用する複数のサンプル値を決定することができることから、エッジを検出する際に使用する複数のサンプル値が得られたサンプリング期間の中央付近にデータストローブ信号DQSのエッジが位置するように当該複数のサンプル値を決定することが可能となる。よって、データストローブ信号DQSにおいてエッジ間隔が長くなったり短くなったりしたとしても、データ信号DQが示すリードデータRDを適切に取得することが可能となる。
図36に示されるように、データリード回路5は、データストローブ信号DQSを処理するDQSエッジ検出回路10と、データ信号DQ[0]〜DQ[7]をそれぞれ処理する8個のRD取得回路20−0〜20−7と、DQSエッジ検出回路10及びRD取得回路20−0〜20−7を制御する制御回路30と備えている。データリード回路5はクロック信号CLKに同期して動作する。制御回路30とDQSエッジ検出回路10をまとめて「データストローブ処理回路」とも呼ぶ。
DQSエッジ検出回路10は、クロック生成回路4が出力するP個の内部クロック信号CLK2[0]〜CLK2[P−1]を使用して、データストローブ信号DQSをオーバーサンプリングする。そして、DQSエッジ検出回路10は、データストローブ信号DQSをオーバーサンプリングして得られるサンプル値を使用して、データストローブ信号DQSのエッジを検出する。本実施の形態では、DQSエッジ検出回路10は、データストローブ信号DQSのライズエッジとフォールエッジとを別々に検出する。
データ信号DQ[y]を処理するRD取得回路20−yは、内部クロック信号CLK2[0]〜CLK2[P−1]を使用して、データ信号DQ[y]をオーバーサンプリングする。そして、RD取得回路20−yは、データ信号DQ[y]をオーバーサンプリングして得られるサンプル値と、DQSエッジ検出回路10でのデータストローブ信号DQSのエッジの検出結果とを使用して、データ信号DQ[y]が示すリードデータRDを取得する。
本実施の形態では、RD取得回路20−0〜20−7は互いに同じ回路構成を有している。また本実施の形態では、DQSエッジ検出回路10及びRD取得回路20−0〜20−7は互いに同じ回路構成を有している。
図37はDQSエッジ検出回路10の構成を示す図である。図38はRD取得回路20−yの構成を示す図である。図37に示されるように、DQSエッジ検出回路10は、オーバーサンプリング回路100と、選択対象単位保持回路110と、処理単位決定回路120と、エッジ検出回路130と、データ取得回路140とを備えている。また図38に示されるように、RD取得回路20−yは、オーバーサンプリング回路200と、選択対象単位保持回路210と、処理単位決定回路220と、エッジ検出回路230と、データ取得回路240とを備えている。
オーバーサンプリング回路100,200は互いに同じ回路構成を有しており、選択対象単位保持回路110,210は互いに同じ回路構成を有している。処理単位決定回路120,220は互いに同じ回路構成を有しており、エッジ検出回路130,230は互いに同じ回路構成を有している。そして、データ取得回路140,240は互いに同じ回路構成を有している。
選択対象単位保持回路110,210の動作は制御回路30によって独立に制御される。したがって、選択対象単位保持回路110,210では、回路構成は同じであるものの、動作は互いに異なることがある。同様に、処理単位決定回路120,220の動作は制御回路30によって独立に制御される。したがって、処理単位決定回路120,220では、回路構成は同じであるものの、動作は互いに異なることがある。
なお、データ取得回路140は、DQSエッジ検出回路10とRD取得回路20−yとの回路構成を同一にするためだけに設けられており、DQSエッジ検出回路10ではデータ取得回路140は実質的に機能していない。
以下では、DQSエッジ検出回路10の構成を詳細に説明し、RD取得回路20−yの構成についてはDQSエッジ検出回路10との相違点を中心に説明する。
<DQSエッジ検出回路>
<オーバーサンプリング回路>
図39はオーバーサンプリング回路100の構成を示す図である。図39に示されるように、オーバーサンプリング回路100は、サンプリング回路101と、クロック乗せ換え回路102とを備えている。サンプリング回路101は、上記の比較対象リード回路900のオーバーサンプリング回路920と同じ回路であって、処理単位期間990(図12等参照)ごとに、当該処理単位期間990においてデータストローブ信号DQSをサンプリングすることによって得られたP個のサンプル値SM5[P−1:0]を出力する。
クロック乗せ換え回路102は、FF回路103〜106を備えている。FF回路103は、サンプリング回路101からのサンプル値SM5[0]〜SM5[P−1]を内部クロック信号CLK2[0]のライズエッジで保持してサンプル値SM7[0]〜SM7[P−1]としてそれぞれ出力する。FF回路104は、FF回路103からのサンプル値SM7[0]〜SM7[P−1]を内部クロック信号CLK2[0]のライズエッジで保持してサンプル値SM8[0]〜SM8[P−1]としてそれぞれ出力する。FF回路105は、FF回路104からのサンプル値SM8[0]〜SM8[P−1]をクロック信号CLKのライズエッジで保持してサンプル値SM9[0]〜SM9[P−1]としてそれぞれ出力する。FF回路106は、FF回路103からのサンプル値SM7[0]〜[P−1]をクロック信号CLKのライズエッジで保持してサンプル値SM9[P]〜SM9[2P−1]としてそれぞれ出力する。
このような構成を有するオーバーサンプリング回路100では、内部クロック信号CLK2[0]のあるライズエッジでFF回路103から出力されるサンプル値SM7[P−1:0]がM番目の処理単位期間990でのサンプル値とすると、当該ライズエッジでFF回路104から出力されるサンプル値SM8[P−1:0]は(M−1)番目の処理単位期間990でのサンプル値となる。したがって、この場合には、内部クロック信号CLK2[0]のあるライズエッジに同期して、FF回路104から出力されるサンプル値SM8[0]〜SM8[P−1]及びFF回路103から出力されるサンプル値SM7[0]〜SM7[P−1]から成る(P×2)個のサンプル値は、(M−1)番目の処理単位期間990及びM番目の処理単位期間990から成る、クロック信号CLKの1サイクルと同じ長さの期間の間、データストローブ信号DQSを(P×2)回サンプリングして得られたサンプル値である。したがって、クロック信号CLKのライズエッジに同期してFF回路105,106から出力される2P個のサンプル値SM9[0]〜SM9[2P−1]は、クロック信号CLKの1サイクルと同じ長さの期間の間において、データストローブ信号DQSを2P回サンプリングして得られる値である。サンプル値SM9[0]〜SM9[2P−1]のサンプリングのタイミングはこの順で早くなっている。以後、当該期間を「第1処理単位期間191」と呼ぶ。第1処理単位期間191の長さは、比較対象リード回路900での処理単位期間990の長さの2倍となっている。第1処理単位期間191は、クロック信号CLKに同期している。つまり、第1処理単位期間191の始点及び終点はクロック信号CLKのライズエッジに同期している。
図40は第1処理単位期間191とデータストローブ信号DQSとの関係の一例を示す図である。図40には、(M+0)番目の第1処理単位期間191から(M+3)番目の第1処理単位期間191が示されている。第1処理単位期間191の長さと、データストローブ信号DQSの周期とは理想的には一致することから、データストローブ信号DQSでは、理想的には1つの第1処理単位期間191にライズエッジが1つだけ含まれ、フォールエッジが1つだけ含まれる。しかしながら、データストローブ信号DQSのエッジのタイミングにはジッタが存在することから、実際にはこのようになるとは限らない。オーバーサンプリング回路100は、ある第1処理単位期間191で得たサンプル値SM9[2P−1:0]を、当該第1処理単位期間191よりもクロック信号CLKの数クロック分遅らせて出力する。
以上のような構成を有するオーバーサンプリング回路100からは、データストローブ信号DQSをオーバーサンプリングして順次得られるサンプル値が、クロック信号CLKの1サイクル分(2P個)ごとに、クロック信号CLKのライズエッジに同期して出力される。以後、特に断らない限り、「サイクル」と言えば、内部クロック信号CLK2[0]のサイクルではなく、クロック信号CLKのサイクルを意味する。
<選択対象単位保持回路>
図41は選択対象単位保持回路110の構成を示す図である。図41に示されるように、選択対象単位保持回路110は、可変遅延回路111及びデータ拡張回路112を備えている。図42は可変遅延回路111の構成を示す図である。可変遅延回路111は、オーバーサンプリング回路100からのサンプル値SM9[2P−1:0]をそのまま出力したり、遅延させて出力したりすることができる。また可変遅延回路111は、サンプル値SM9[2P−1:0]を遅延させて出力する際には、その遅延量を変化させることができる。可変遅延回路111での遅延量は制御回路30からの2ビットの設定データSET1[1:0]によって設定される。
図42に示されるように、可変遅延回路111は、FF回路111A,111B,111C及び選択回路111Dを備えている。FF回路111Aはサンプル値SM9[2P−1:0]をクロック信号CLKのライズエッジで保持して出力する。これにより、FF回路111Aからは、可変遅延回路111に入力されたサンプル値SM9[2P−1:0]が1サイクル分遅延して出力される。FF回路111BはFF回路111Aの出力をクロック信号CLKのライズエッジで保持して出力する。これにより、FF回路111Bからは、可変遅延回路111に入力されたサンプル値SM9[2P−1:0]が2サイクル分遅延して出力される。FF回路111Cは、FF回路111Bの出力をクロック信号CLKのライズエッジで保持して出力する。これにより、FF回路111Cからは、可変遅延回路111に入力されたサンプル値SM9[2P−1:0]が3サイクル分遅延して出力される。
選択回路111Dは、制御回路30からの設定データSET1[1:0]に応じて、オーバーサンプリング回路100からのサンプル値SM9[2P−1:0]及びFF回路11A,111B,111Cの出力の一つを選択してサンプル値SM10[2P−1:0]として出力する。
具体的には、例えば、選択回路111Dは、設定データSET1[1:0]の値が十進数表記で“0”の場合には、サンプル値SM9[2P−1:0]を選択して出力する。これにより、設定データSET1[0],SET1[1]がともに“0”を示す場合には、選択回路111Dからは、可変遅延回路111に入力されたサンプル値SM9[0]〜SM9[2P−1]がそのままサンプル値SM10[0]〜SM10[2P−1]としてそれぞれ出力される。以後、設定データSET1[1:0]のように複数ビットで構成されるデータの値を示す場合には、特に断らない限り、十進数表記で示すものとする。
選択回路111Dは、設定データSET1[1:0]の値が“1”の場合には、FF回路111Aの出力を選択して出力する。これにより、設定データSET1[0],SET1[1]が“0”及び“1”をそれぞれ示す場合には、選択回路111Dからは、可変遅延回路111に入力されたサンプル値SM9[0]〜SM9[2P−1]が1サイクル分遅延してサンプル値SM10[0]〜SM10[2P−1]としてそれぞれ出力される。
選択回路111Dは、設定データSET1[1:0]の値が“2”の場合には、FF回路111Bの出力を選択して出力する。これにより、設定データSET1[0],SET1[1]が“1”及び“0”をそれぞれ示す場合には、選択回路111Dからは、可変遅延回路111に入力されたサンプル値SM9[0]〜SM9[2P−1]が2サイクル分遅延してサンプル値SM10[0]〜SM10[2P−1]としてそれぞれ出力される。
そして、選択回路111Dは、設定データSET1[1:0]の値が“3”の場合には、FF回路111Cの出力を選択して出力する。これにより、設定データSET1[0],SET1[1]がともに“1”を示す場合には、選択回路111Dからは、可変遅延回路111に入力されたサンプル値SM9[0]〜SM9[2P−1]が3サイクル分遅延してサンプル値SM10[0]〜SM10[2P−1]としてそれぞれ出力される。
なお可変遅延回路111の働きについては後で詳細に説明する。
図43はデータ拡張回路112の構成を示す図である。データ拡張回路112は、Mサイクル分のサンプル値SM10[2P−1:0]を連結して(2P×M)個(M≧2)のサンプル値SM11[2P×M−1:0]を生成し、それをクロック信号CLKのライズエッジに同期して出力する。本実施の形態では、例えばM=5とする。データ拡張回路112からは、クロック信号CLKのライズエッジに同期して、120個のサンプル値SM11[0]〜[119]が出力される。
図43に示されるように、データ拡張回路112は、FF回路112A〜112Dを備えている。データ拡張回路112は、可変遅延回路111からのサンプル値SM10[0]〜SM10[2P−1]をそのままサンプル値SM11[2P×4]〜SM11[2P×5−1]としてそれぞれ出力する。FF回路112Aは、クロック信号CLKのライズエッジでサンプル値SM10[0]〜SM[2P−1]を保持してサンプル値SM11[2P×3]〜SM11[2P×4−1]としてそれぞれ出力する。FF回路112Bは、クロック信号CLKのライズエッジでサンプル値SM11[2P×3]〜SM11[SP×4−1]を保持してサンプル値SM11[2P×2]〜SM11[2P×3−1]としてそれぞれ出力する。FF回路112Cは、クロック信号CLKのライズエッジでサンプル値SM11[2P×2]〜SM11[2P×3−1]を保持してサンプル値SM11[2P]〜SM11[2P×2−1]としてそれぞれ出力する。FF回路112Dは、クロック信号CLKのライズエッジでサンプル値SM11[2P]〜SM11[2P×2−1]を保持してサンプル値SM11[0]〜SM11[2P−1]としてそれぞれ出力する。
このような構成を有するデータ拡張回路112では、クロック信号CLKのあるライズエッジで可変遅延回路111から出力されるサンプル値SM10[2P−1:0]がM番目の第1処理単位期間191でのサンプル値とすると、サンプル値SM11[2P×5−1:2P×4]はM番目の第1処理単位期間191でのサンプル値となり、当該ライズエッジでFF回路112Aから出力されるサンプル値SM11[2P×4−1:2P×3]は(M−1)番目の第1処理単位期間191でのサンプル値となり、当該ライズエッジでFF回路112Bから出力されるサンプル値SM11[2P×3−1:2P×2]は(M−2)番目の第1処理単位期間191でのサンプル値となる。また、当該ライズエッジでFF回路112Cから出力されるサンプル値SM11[2P×2−1:2P]は(M−3)番目の第1処理単位期間191でのサンプル値となり、当該ライズエッジでFF回路112Dから出力されるサンプル値SM11[2P−1:0]は(M−4)番目の第1処理単位期間191でのサンプル値となる。したがって、この場合には、(M−4)番目の第1処理単位期間191からM番目の第1処理単位期間191から成る5サイクル分の間の間、データストローブ信号DQSを(2P×5)回サンプリングして得られたサンプル値SM11[0]〜SM11[2P×5−1]が当該ライズエッジに同期してデータ拡張回路112から出力される。つまり、クロック信号CLKのライズエッジに同期してデータ拡張回路112から出力される(2P×M)個のサンプル値SM11[0]〜SM11[2P×M−1]は、Mサイクル分の期間の間において、データストローブ信号DQSを(2P×M)回サンプリングして得られる値となる。サンプル値SM11[0]〜SM11[2P×5−1]のサンプリングのタイミングはこの順で早くなっている。本実施の形態では、後述するように、サンプル値SM11[0]〜SM11[2P×5−1]から、データストローブ信号DQSのエッジを検出するために使用する複数のサンプル値を選択する。以後、サンプル値SM11[2P×5−1:0]を「選択対象単位」と呼ぶことがある。また上記のMサイクル分の期間を「第2処理単位期間192」と呼ぶ。選択対象単位は、第2処理単位期間192の間、データストローブ信号DQSをサンプルリングして得られた複数のサンプル値である。第2処理単位期間192の長さは第1処理単位期間191の長さのM倍となっている。
そして、データ拡張回路112は、クロック信号CLKの次のライズエッジで、可変遅延回路111から(M+1)番目の第1処理単位期間191でのサンプル値SM10[2P−1:0]が出力されると、(M−3)番目の第1処理単位期間191から(M+1)番目の第1処理単位期間191から成る第2処理単位期間192での(2P×M)個のサンプル値SM11[0]〜SM11[2P×5−1]を出力する。
このように、選択対象単位保持回路110は、第2処理単位期間192を1サイクルずつずらしながら、第2処理単位期間192での(2P×5)個のサンプル値SM11[2P×M−1:0]を保持し、当該サンプル値SM11[2P×M−1:0]を選択対象単位として出力している。選択対象単位保持回路110は、第2処理単位期間192ごとに、当該第2処理単位期間192において得られたサンプル値SM11[2P×M−1:0]を選択対象単位として出力する。
図44は、第1処理単位期間191と第2処理単位期間192とデータストローブ信号DQSの関係の一例を示す図である。図44には、(M−4)番目の第1処理単位期間191から(M+1)番目の第1処理単位期間191が示されている。また(L−4)番目の第2処理単位期間192から(L+1)番目の第2処理単位期間192が示されている。
<処理単位決定回路>
図45は処理単位決定回路120の構成を示す図である。図45に示されるように、処理単位決定回路120はグリッジ除去回路121及び決定回路123を備えている。図46はグリッジ除去回路121の構成を示す図である。グリッジ除去回路121は、選択対象単位(サンプル値SM11[2P×M−1:0])に含まれるグリッジを除去する回路である。図46に示されるように、グリッジ除去回路121は、(2P×M−2)個の除去回路122−1〜122−(2P×M−2)を備えている。除去回路122−1〜122−(2P×M−2)の回路構成は互いに同じである。除去回路122−z(1≦z≦2P×M−2)には、選択対象単位保持回路110からのサンプル値SM11[z−1],SM11[z],SM11[z+1]が入力される。図47は除去回路122−zの構成を示す図である。
図47に示されるように、除去回路122−zは、AND回路122A、OR回路122B及び選択回路122Cを備えている。AND回路122Aはサンプル値SM11[z−1],SM11[z+1]の論理積を演算して出力する。OR回路122Bはサンプル値SM11[z−1],SM11[z+1]の論理和を演算して出力する。選択回路122Cは、サンプル値SM11[z]が“0”のときAND回路122Aの出力をサンプル値SM12[z]として出力する。一方で、選択回路122Cは、サンプル値SM11[z]が“1”のときOR回路122Bの出力をサンプル値SM12[z]として出力する。
このような構成を有する除去回路122−zは、注目するzビット目のサンプル値SM11[z]の論理値が、その前後のビット位置のサンプル値SM11[z−1],SM11[z+1]の論理値のそれぞれと異なる場合には、論理値を反転したサンプル値SM11[z]をサンプル値SM12[z]として出力する。そして、注目するzビット目のサンプル値SM11[z]の論理値が、その前後のビット位置のサンプル値SM11[z−1],SM11[z+1]の論理値の少なくとも一方と一致する場合には、当該サンプル値SM11[z]をそのままサンプル値SM12[z]として出力する。
例えば、サンプル値SM11[z−1],SM11[z],SM11[z+1]の論理値がそれぞれ“1”、“0”、“1”の場合には、“0”の反転の“1”を示すサンプル値SM12[z]が出力される。またサンプル値SM11[z−1],SM11[z],SM11[z+1]の論理値がそれぞれ“0”、“1”、“0”の場合には、“1”の反転の“0”を示すサンプル値SM12[z]が出力される。またサンプル値SM11[z−1],SM11[z],SM11[z+1]の論理値がそれぞれ“1”、“1”、“1”の場合には、“1”を示すサンプル値SM12[z]が出力される。またサンプル値SM11[z−1],SM11[z],SM11[z+1]の論理値がそれぞれ“1”、“0”、“0”の場合には、“0”を示すサンプル値SM12[z]が出力される。
上記の説明から理解できるように、グリッジ除去回路121では、サンプル値SM11[0]に対応するサンプル値SM12[0]と、サンプル値SM11[2P×M−1]に対応するサンプル値SM12[2P×M−1]は生成されない。したがって、グリッジ除去回路121は、入力されたサンプル値SM11[2P×M−1:0]よりも2個少ない数のサンプル値SM12[2P×M−2:1]を出力する。グリッジ除去回路121から出力されるサンプル値SM12[2P×M−2:1]は、グリッジが除去された選択対象単位となる。なお、グリッジ除去回路121については後で再度説明する。
図48は決定回路123の構成を示す図である。図48に示されるように、決定回路123は、Y個の選択回路124−0〜124−(Y−1)と、Y個のFF回路125−0〜125−(Y−1)とを備えている。ここで、Y=3×P+1である。本実施の形態ではP=12であることから、Y=37となる。
FF回路125−0〜125−(Y−1)のそれぞれは、クロック信号CLKのライズエッジで、制御回路30からの設定データSET2[X−1:0]を保持して出力する。
選択回路124−j(0≦j≦Y−1)のQ個の入力端子IN0〜IN(Q−1)には、Q個のサンプル値SM12[j+1]〜SM12[j+Q]がそれぞれ入力される。ここで、Q=2P×M−2−(Y−1)である。本実施の形態では、P=12、M=5、Y=37であることから、Q=82である。選択回路124−jは、FF回路125−jから出力される設定データSET2[X−1:0]に応じて、入力されるQ個のサンプル値SM12[j+1]〜SM12[j+Q]のうちの一つを選択してサンプル値SM13[j]として出力する。
設定データSET2[X−1:0]のビット数Xは、(Q−1)を二進数表記した際のビット数と一致する。本実施の形態では、(Q−1)=82であることから、これを二数表記すると“1010001”となる。よって、X=7となる。
選択回路124−jは、入力されるXビットの設定データSET2[X−1:0]が示す値がi(0≦i≦Q−1)であるとき、サンプル値SM12[j+1]〜SM12[j+Q]のうち、入力端子INiに入力される値を選択してサンプル値SM13[j]として出力する。
このような構成を有する決定回路123では、設定データSET2[X−1:0]に応じて、(2P×M−2)ビットのサンプル値SM12[2P×M−2:1](選択対象単位)から、ビット位置が連続するYビットのサンプル値SM12[α]〜SM12[α+Y−1]が選択され、それぞれSM13[0]〜SM13[Y−1]として出力される。ここでαは、1≦α≦2P×M−2−(Y−1)である。
後段のエッジ検出回路130は、決定回路123から出力されるYビットのサンプル値SM13[Y−1:0]をエッジ検出単位とし、当該エッジ検出単位に基づいてデータストローブ信号DQSのライズエッジ及びフォールエッジを検出する。エッジ検出単位は、ライズエッジの検出で使用されるライズエッジ検出単位と、フォールエッジの検出で使用されるフォールエッジ検出単位とに分けられる。
このように、処理単位決定回路120は、クロック信号CLKのあるライズエッジで入力される選択対象単位からエッジ検出単位を選択して出力する。そして、処理単位決定回路120は、クロック信号CLKの次のライズエッジで入力される次の選択対象単位からエッジ検出単位を選択して出力する。つまり、処理単位決定回路120は、選択対象単位ごとに、当該選択対象単位からエッジ検出単位を選択して出力する。言い換えれば、処理単位決定回路120は、選択対象単位ごとに、当該選択対象単位からライズエッジ検出単位及びフォールエッジ検出単位を選択して出力している。
<エッジ検出回路>
図49はエッジ検出回路130の構成を示す図である。図49に示されるように、エッジ検出回路130は、データストローブ信号DQSのライズエッジを検出するライズエッジ検出回路131と、データストローブ信号DQSのフォールエッジを検出するフォールエッジ検出回路133とを備えている。
ライズエッジ検出回路131は、処理単位決定回路120からのサンプル値SM13[3P+1−1:0](SM13[Y−1:0])のうち、下位側の(2P+1)個のサンプル値SM13[2P+1−1:0]をライズエッジ検出単位として、当該ライズエッジ検出単位に基づいて、データストローブ信号DQSのライズエッジを検出する。そしてライズエッジ検出回路131は、データストローブ信号DQSのライズエッジの検出結果をライズエッジデータREG[2P−1:0]として出力する。
一方で、フォールエッジ検出回路133は、処理単位決定回路120からのサンプル値SM13[3P+1−1:0]のうち、上位側の(2P+1)個のサンプル値SM13[3P+1−1:P]をフォールエッジ検出単位として、当該フォールエッジ検出単位に基づいて、データストローブ信号DQSのフォールエッジを検出する。そしてフォールエッジ検出回路133は、データストローブ信号DQSのフォールエッジの検出結果をフォールエッジデータFEG[2P−1:0]として出力する。
図50はエッジ検出単位EGU、ライズエッジ検出単位REGU及びフォールエッジ検出単位FEGUの関係を示す図である。図50には、エッジ検出単位EGUを構成するサンプル値SM13[3P:0]が得られたサンプリング期間193と、当該エッジ検出単位EGUに含まれるライズエッジ検出単位REGUを構成するサンプル値SM13[2P:0]が得られたサンプリング期間193Rと、当該エッジ検出単位EGUに含まれるフォールエッジ検出単位FEGUを構成するサンプル値SM13[3P:P]が得られたサンプリング期間193Fも示されている。
図51はライズエッジ検出回路131の構成を示す図である。図51に示されるように、ライズエッジ検出回路131は、2P個のAND回路132−0〜132−(2P−1)を備えている。AND回路132−k(0≦k≦2P−1)は、サンプル値SM13[k]の反転値とサンプル値SM13[k+1]の論理積を求めて、その結果をライズエッジデータREG[k]として出力する。
ライズエッジ検出回路131からは、ライズエッジデータREG[0]〜REG[2P−1]が出力される。あるサンプリング期間193Rでのサンプル値SM13[0]〜SM13[2P]に基づいて生成されたライズエッジデータREG[0]〜[2P−1]では、当該サンプリング期間193Rにおいてデータストローブ信号DQSのライズエッジが現れるタイミングに応じたデータが“1”を示す。例えば、データストローブ信号DQSにおいて、あるサンプリング期間193Rの始点からサンプリング周期8個分後のタイミングの近傍でライズエッジが存在する場合には、当該サンプリング期間193Rでのサンプル値SM13[0]〜SM13[2P]に基づいて生成されたライズエッジデータREG[0]〜[2P−1]ではライズエッジデータREG[7]が“1”を示す。よって、ライズエッジデータREG[2P−1:0]を見れば、1サイクル分のある期間(当該ライズエッジデータREG[2P−1:0]の元になるライズエッジ検出単位が得られたサンプリング期間)において、データストローブ信号DQSのライズエッジが現れるタイミングを特定することができる。以後、当該1サイクル分のある期間を「ライズエッジ検出期間」と呼ぶ。
図52はフォールエッジ検出回路133の構成を示す図である。図52に示されるように、フォールエッジ検出回路133は、2P個のAND回路134−0〜134−(2P−1)を備えている。AND回路134−kは、サンプル値SM13[P+k]とサンプル値SM13[P+k+1]の反転値との論理積を求めて、その結果をフォールエッジデータFEG[k]として出力する。
フォールエッジ検出回路133からは、フォールエッジデータFEG[0]〜FEG[2P−1]が出力される。あるサンプリング期間193Fでのサンプル値SM13[P]〜SM13[3P]に基づいて生成されたフォールエッジデータFEG[0]〜FEG[2P−1]では、当該サンプリング期間193Fにおいてデータストローブ信号DQSのフォールエッジが現れるタイミングに応じたデータが“1”を示す。よって、フォールエッジデータFEG[2P−1:0]を見れば、1サイクル分のある期間(当該フォールエッジデータFEG[2P−1:0]の元になるフォールエッジ検出単位が得られたサンプリング期間)において、データストローブ信号DQSのフォールエッジが現れるタイミングを特定することができる。以後、当該1サイクル分のある期間を「フォールエッジ検出期間」と呼ぶ。
このようにライズエッジ検出回路131は、クロック信号CLKのあるライズエッジでライズエッジ検出単位が入力されると、当該ライズエッジ検出単位に基づいてデータストローブ信号DQSのライズエッジを検出する。そして、ライズエッジ検出回路131は、クロック信号CLKの次のライズエッジで次のライズエッジ検出単位が入力されると、当該次のライズエッジ検出単位に基づいてデータストローブ信号DQSのライズエッジを検出する。つまり、ライズエッジ検出回路131は、処理単位決定回路120が決定するライズエッジ検出単位ごとに、当該ライズエッジ検出単位に基づいてデータストローブ信号のライズエッジを検出する。同様に、フォールエッジ検出回路133は、処理単位決定回路120が決定するフォールエッジ検出単位ごとに、当該フォールエッジ検出単位に基づいてデータストローブ信号のフォールエッジを検出する。
以上のように、DQSエッジ検出回路10は、クロック信号CLKのライズエッジに同期して、ライズエッジ検出期間(図50のサンプリング期間193R)でのデータストローブ信号DQSのライズエッジのタイミングを示すライズエッジデータREG[2P−1:0]と、当該ライズエッジ検出期間よりも半サイクル分後方にずれたフォールエッジ検出期間(図50のサンプリング期間193F)でのデータストローブ信号DQSのフォールエッジのタイミングを示すフォールエッジデータFEG[2P−1:0]とを出力する。
<RD取得回路>
次にRD取得回路20−[y]について、DQSエッジ検出回路10との相違点を中心に説明する。
オーバーサンプリング回路200は、オーバーサンプリング回路100と同様にして、データ信号DQ[y]をオーバーサンプリングする。オーバーサンプリング回路200からは、クロック信号CLKのライズエッジに同期して、データ信号DQ[y]についての1サイクル分のサンプル値SM19[P−1:0]が出力される。
図53は選択対象単位保持回路210の構成を示す図である。図53に示されるように、選択対象単位保持回路210は、選択対象単位保持回路110の可変遅延回路111と同じ回路構成を有する可変遅延回路211と、選択対象単位保持回路110のデータ拡張回路112と同じ回路構成を有するデータ拡張回路212とを備えている。
可変遅延回路211は、可変遅延回路111と同様に、制御回路30からRD取得回路20−yに入力される設定データSET11−y[1:0]に応じて、オーバーサンプリング回路200からのサンプル値SM19[2P−1:0]をそのまま出力したり、遅延させて出力したりすることができる。また可変遅延回路211は、サンプル値SM19[2P−1:0]を遅延させて出力する際には、設定データSET11−y[1:0]に応じて、その遅延量を変化させることができる。可変遅延回路211からはサンプル値SM20[2P−1:0]が出力される。
データ拡張回路212は、データ拡張回路112と同様に、Mサイクル分のサンプル値SM20[2P−1:0]を連結して(2P×M)個のサンプル値SM21[2P×M−1:0]を生成し、それをクロック信号CLKのライズエッジに同期して出力する。データ拡張回路211から出力されるサンプル値SM21[2P×M−1:0]は、RD取得回路20−yでの選択対象単位となる。
図54は処理単位決定回路220の構成を示す図である。図54に示されるように、処理単位決定回路220は、処理単位決定回路120のグリッジ除去回路121と同じ回路構成を有するグリッジ除去回路221と、処理単位決定回路120の決定回路123と同じ回路構成を有する決定回路223とを備えている。
グリッジ除去回路221は、グリッジ除去回路121と同様に、選択対象単位、つまりサンプル値SM21[2P×M−1:0]に含まれるグリッジを除去する。グリッジ除去回路221は、入力されたサンプル値SM21[2P×M−1:0]よりも2個少ない数のサンプル値SM22[2P×M−2:1]を出力する。グリッジ除去回路121から出力されるサンプル値SM22[2P×M−2:1]は、グリッジが除去された選択対象単位となる。
決定回路223は、決定回路123と同様に、制御回路30からRD取得回路20−yに入力される設定データSET12−y[X−1:0]に応じて、(2P×M−2)ビットのサンプル値SM22[2P×M−2:1](選択対象単位)から、ビット位置が連続するY(=3P+1)ビットのサンプル値SM22[α]〜SM22[α+Y−1]を選択し、それぞれサンプル値SM23[0]〜SM23[Y−1]として出力する。決定回路223からは、サンプル値SM23[3P+1−1:0]が出力される。
図55はエッジ検出回路230の構成を示す図である。図55に示されるように、エッジ検出回路230は、エッジ検出回路130のライズエッジ検出回路131と同じ回路構成を有するライズエッジ検出回路231と、エッジ検出回路130のフォールエッジ検出回路133と同じ回路構成を有するフォールエッジ検出回路233とを備えている。
ライズエッジ検出回路231は、ライズエッジ検出回路131と同様に、処理単位決定回路220からのサンプル値SM23[3P+1−1:0]のうち、下位側の(2P+1)個のサンプル値SM23[2P+1−1:0]をライズエッジ検出単位として、当該ライズエッジ検出単位に基づいて、データ信号DQ[y]のライズエッジを検出する。そしてライズエッジ検出回路231は、データ信号DQ[y]のライズエッジの検出結果をライズエッジデータREG−y[2P−1:0]として出力する。
一方で、フォールエッジ検出回路233は、フォールエッジ検出回路133と同様に、処理単位決定回路220からのサンプル値SM13[3P+1−1:0]のうち、上位側の(2P+1)個のサンプル値SM13[3P+1−1:P]をフォールエッジ検出単位として、当該フォールエッジ検出単位に基づいて、データ信号DQ[y]のフォールエッジを検出する。そしてフォールエッジ検出回路233は、データ信号DQ[y]のフォールエッジの検出結果をフォールエッジデータFEG−y[2P−1:0]として出力する。
図56はデータ取得回路240の構成を示す図である。処理単位決定回路220が出力するサンプル値SM23[3P−1:0]は、データ取得単位を構成しており、そのうちの下位側の2P個のサンプル値SM23[2P−1:0]はライズ側データ取得単位を構成し、そのうちの上位側の2P個のサンプル値SM23[3P−1:P]はフォール側データ取得単位を構成している。処理単位決定回路220は、選択対象単位からライズ側データ取得単位及びフォール側データ取得単位を決定していると言える。
データ取得回路240は、ライズ側データ取得回路241及びフォール側データ取得回路244を備えている。ライズ側データ取得回路241は、サンプル値SM23[2P−1:0]から成るライズ側データ取得単位と、DQSエッジ検出回路10からの2P個のライズエッジデータREG[2P−1:0]とに基づいて、データ信号DQ[y]が示す、データストローブ信号DQSのライズエッジに対応するリードデータRDを取得して出力する。一方で、フォール側データ取得回路244は、サンプル値SM23[3P−1:P]から成るフォール側データ取得単位と、DQSエッジ検出回路10からの2P個のフォールエッジデータFEG[2P−1:0]とに基づいて、データ信号DQ[y]が示す、データストローブ信号DQSのフォールエッジに対応するリードデータRDを取得して出力する。
以後、ライズ側データ取得単位を構成するサンプル値SM23[0]〜SM23[2P−1]を、それぞれサンプル値SMR[0]〜SMR[2P−1]と呼ぶ。また、フォール側データ取得単位を構成するサンプル値SM23[2P]〜SM23[3P−1]を、それぞれサンプル値SMF[0]〜SMF[2P−1]と呼ぶ。
図57はライズ側データ取得回路241を示す図である。図57に示されるように、ライズ側データ取得回路241は、2P個のAND回路241−0〜241−(2P−1)とOR回路243とを備えている。AND回路242−kは、サンプル値SMR[k]とライズエッジデータREG[k]との論理積を演算し、その演算結果を出力値ANDR[k]として出力する。OR回路243は、2P個のAND回路242−0〜242−(2P−1)がそれぞれ出力する出力値ANDR[0]〜ANDR[2P−1]の論理和を演算し、その結果をライズ側出力データDQoutR[y]として出力する。RD取得回路20−yは、ライズ側出力データDQoutR[y]を、データ信号DQ[y]が示す、データストローブ信号DQSのライズエッジに対応するリードデータRDとして出力する。
このような構成を有するライズ側データ取得回路241では、クロック信号CLKのあるライズエッジで入力されるライズエッジデータREG[0]〜REG[2P−1]のうちのライズエッジデータREG[k]だけが“1”を示す場合には、当該ライズエッジで入力されるライズ側データ取得単位を構成するサンプル値SMR[2P−1:0]のうち、当該ライズエッジデータREG[k]と同じビット位置のサンプル値SMR[k]が、データ信号DQ[y]が示す、データストローブ信号DQSのライズエッジに応じたリードデータRDとして取得される。言い換えれば、ライズ側データ取得回路241では、ライズ側データ処理単位を構成するサンプル値SMR[2P−1:0]のうち、当該ライズ側データ処理単位と同じタイミングで得られたライズエッジ検出単位に基づいてライズエッジ検出回路131が検出したライズエッジのタイミングと同じタイミングのサンプル値SMR[k]が、データ信号DQ[y]が示す、データストローブ信号DQSのライズエッジに応じたリードデータRDとして取得される。
図58はフォール側データ取得回路244を示す図である。図58に示されるように、フォール側データ取得回路244は、2P個のAND回路245−0〜245−(2P−1)とOR回路246とを備えている。AND回路245−kは、サンプル値SMF23[k]とフォールエッジデータFEG[k]との論理積を演算し、その演算結果を出力値ANDF[k]として出力する。OR回路246は、2P個のAND回路245−0〜245−(2P−1)がそれぞれ出力する出力値ANDF[0]〜ANDF[2P−1]の論理和を演算し、その結果をフォール側出力データDQoutF[y]として出力する。RD取得回路20−yは、フォール側出力データDQoutF[y]を、データ信号DQ[y]が示す、データストローブ信号DQSのフォールエッジに対応するリードデータRDとして出力する。
このような構成を有するフォール側データ取得回路244では、ライズ側データ取得回路241と同様に、クロック信号CLKのあるライズエッジで入力されるフォールエッジデータFEG[0]〜REG[2P−1]のうちのフォールエッジデータFEG[k]だけが“1”を示す場合には、当該ライズエッジで入力されるフォール側データ取得単位を構成するサンプル値SMF[2P−1:0]のうち、当該フォールエッジデータFEG[k]と同じビット位置のサンプル値SMF[k]が、データ信号DQ[y]が示す、データストローブ信号DQSのフォールエッジに対応するリードデータRDとして取得される。
ここで、DQSエッジ検出回路10に入力される設定データSET1[1:0]及び設定データSET2[X−1:0]と、RD取得回路20−yに入力される設定データSET11−y[1:0]及び設定データSET12−y[X−1:0]とがそれぞれ同じ値である場合を考える。この場合には、ライズ側データ取得回路241に対してクロック信号CLKのあるライズエッジに同期して入力されるライズエッジデータREG[2P−1:0]及びサンプル値SMR[2P−1:0]に関して、図59に示されるように、当該ライズエッジデータREG[2P−1:0]に対応するライズエッジ検出期間195と、当該サンプル値SMR[2P−1:0]が得られたサンプリング期間196とは一致する。したがって、この場合には、サンプル値SMR[2P−1:0]のうち、“1”を示すライズエッジデータREG[k]と同じビット位置のサンプル値SMR[k]は、データ信号DQ[y]が示す、ライズエッジ検出期間195でのライズエッジregに応じたリードデータRD0の値を示さない可能性が高い。言い換えれば、ライズエッジデータREG[2P−1:0]が示す、ライズエッジ検出期間195でのライズエッジregのタイミングRETMが、サンプル値SMR[2P−1:0]が示す、サンプルリング期間196でのリードデータRD0の範囲RDARから外れる可能性が高くなり、当該タイミングRETMと同じタイミングのサンプル値SMR[k]が当該リードデータRD0の値を示さない可能性が高い。
そこで、本実施の形態では、ライズ側データ取得回路241に対してクロック信号CLKのあるライズエッジに同期して入力されるライズエッジデータREG[2P−1:0]及びサンプル値SMR[2P−1:0]に関して、図60に示されるように、当該ライズエッジデータREG[2P−1:0]における、“1”を示すライズエッジデータREG[k]のビット位置が、当該サンプル値SMR[2P−1:0]における、リードデータRD0を示す複数のサンプル値の中央のサンプル値のビット位置付近に位置するように、設定データSET1[1:0],SET2[X−1:0]と設定データSET11−y[1:0],SET12−y[X−1:0]とが制御回路30で調整される。これにより、サンプル値SMR[2P−1:0]のうち、“1”を示すライズエッジデータREG[k]と同じビット位置のサンプル値SMR[k]は、データ信号DQ[y]が示す、ライズエッジ検出期間195でのライズエッジregに応じたリードデータRD0の値を示す可能性が高くなる。
言い換えれば、本実施の形態では、ライズエッジ検出期間195とサンプルリング期間196を同じタイミングで見た場合において、ライズエッジデータREG[2P−1:0]が示す、ライズエッジ検出期間195でのライズエッジregのタイミングRETMが、サンプル値SMR[2P−1:0]が示す、サンプルリング期間196でのリードデータRD0の範囲RDARの中央付近に位置するように、設定データSET1[1:0],SET2[X−1:0]と設定データSET11−y[1:0],SET12−y[X−1:0]とが制御回路30で調整される。つまり、ライズエッジデータREG[2P−1:0]が示す、ライズエッジregについてのライズエッジ検出期間195での相対的な位置と、サンプル値SMR[2P−1:0]が示す、サンプルリング期間196でのリードデータRD0の範囲RDARの中央についてのサンプルリング期間196での相対的な位置とが近似するように、設定データSET1[1:0],SET2[X−1:0]と設定データSET11−y[1:0],SET12−y[X−1:0]とが制御回路30で調整される。これにより、サンプル値SMR[2P−1:0]のうち、ライズエッジデータREG[2P−1:0]が示すライズエッジregのタイミングRETMと同じタイミングのサンプル値SMR[k]はリードデータRD0の値を示す可能性が高くなる。
なお、フォール側データ取得回路244についても同様であり、設定データSET1[1:0],SET2[X−1:0]と設定データSET11−y[1:0],SET12−y[X−1:0]とが制御回路30で適切に調整されることにより、サンプル値SMF[2P−1:0]のうち、“1”を示すフォールエッジデータFEG[k]と同じビット位置のサンプル値SMF[k]は、データ信号DQ[y]が示す、フォールエッジに応じたリードデータRDの値を示す可能性が高くなる。
上記の点については後述の制御回路30の動作説明によって明らかになる。
なお、クロック信号CLKのあるライズエッジに同期して、RD取得回路20−yのライズ側データ取得回路241に対して入力されるライズエッジデータREG[2P−1:0]及びサンプル値SMR[2P−1:0]に関して、配線遅延等によって、当該ライズエッジデータREG[2P−1:0]及び当該サンプル値SMR[2P−1:0]がライス側データ取得回路241に入力されるタイミングのずれが大きい場合には、ライス側データ取得回路241に対する両者の入力タイミングを調整するタイミング調整回路を設けても良い。具体的には、ライズ側データ取得回路241の近傍において、DQSエッジ検出回路10から出力されるライズエッジデータREG[2P−1:0]をクロック信号CLKのライズエッジで保持して出力するFF回路を設けるとともに、処理単位決定回路220から出力されるサンプル値SMR[2P−1:0]をクロック信号CLKのライズエッジで保持して出力するFF回路を設ける。これにより、ライズ側データ取得回路241に対する両者の入力タイミングのずれが小さくなる。フォールエッジデータFEG[2P−1:0]及びサンプル値SMF[2P−1:0]についても同様である。
<データリード回路の動作例>
図61〜75はデータリード回路5の動作例を示す図である。図61〜64は、DQSエッジ検出回路10の選択対象単位保持回路110から出力されるサンプル値SM11[119:0]の一例を示しており、図65〜68は、RD取得回路20−yの選択対象単位保持回路210から出力されるサンプル値SM21[119:0]の一例を示している。図69はDQSエッジ検出回路10の処理単位決定回路120から出力されるサンプル値SM13[36:0]の一例を示しており、図70は、RD取得回路20−yの処理単位決定回路220から出力されるサンプル値SM23[36:0]の一例を示している。図71,72はDQSエッジ検出回路10のエッジ検出回路230から出力されるライスエッジデータREG[23:0]及びフォールエッジデータFEG[23:0]の一例をそれぞれ示している。図73はRD取得回路20−yのライズ側データ取得回路241での出力値ADNR[23:0]の一例を示し、図74はRD取得回路20−yのフォール側データ取得回路244での出力値ADNF[23:0]の一例を示している。図75はRD取得回路20−yのデータ取得回路240から出力されるライズ側出力データDQoutR[y]及びフォール側出力データDQoutF[y]の一例を示している。図65〜75での「N+0」、「N+1」等はクロック信号CLKのサイクルの番号を示している。図65〜75での「A」、「B」等はリードデータRDの値を示している。図65〜75での「X」は不定値を示している。
図65〜75に示される例では、処理単位決定回路120は、サンプル値SM11[119:0]からサンプル値SM11[24]〜SM[60]を選択してそれぞれサンプル値SM13[0]〜SM13[36]として出力している。また、処理単位決定回路220は、サンプル値SM21[119:0]からサンプル値SM21[32]〜SM[68]を選択してそれぞれサンプル値SM23[0]〜SM23[36]として出力している。
本例では、図75に示されるように、クロック信号CLKの(N+1+0)サイクル目〜(N+1+3)サイクル目にRD取得回路20−yから出力されるライズ側出力データDQoutR[y]は、データ信号DQ[y]が示す、データストローブ信号DQSのライズエッジに応じたリードデータRDを適切に示している。また、クロック信号CLKの(N+1+0)サイクル目〜(N+1+2)サイクル目にRD取得回路20−yから出力されるフォール側出力データDQoutF[y]は、データ信号DQ[y]が示す、データストローブ信号DQSのフォールエッジに応じたリードデータRDを適切に示している。一方で、クロック信号CLKの(N+1+3)サイクル目にRD取得回路20−yから出力されるフォール側出力データDQoutF[y]の値は不定となっている。これは、図69に示されるように、クロック信号CLKの(N+1+3)サイクル目に処理単位決定回路120が出力するサンプル値SM13[35],SM13[36]が不定のために、図72に示されるようにフォールエッジデータFEG[23]の値が不定となっていることが原因である。
なお、フォールエッジ検出単位を構成するサンプル値SM13[3P:P]に対して所定のフィルタ処理を行うことによって、上記の例において、クロック信号CLKの(N+1+3)サイクル目にRD取得回路20−yから出力されるフォール側出力データDQoutF[y]は不定ではなくなり、リードデータRDの値(H)を適切に示すようになる。以下にこの点について説明する。
<ポストフィルタ回路>
上述のように、リードデータRDのバースト出力が終了すると、データストローブ信号DQSの信号レベルはLowレベルに続いて不定となる(図3参照)。DQSエッジ検出回路10において、図76に示されるように、フォールエッジ検出単位を構成するサンプル値SM13[3P:P]が得られたサンプリング期間197(フォールエッジ検出期間)が、データストローブ信号DQSの信号レベルがLowレベルから不定に変化する時点を含む場合には、サンプリング期間197における、データストローブ信号DQSの信号レベルが不定の期間198でのサンプル値は不定となる。つまり、上述の図69でのクロック信号CLKの(N+1+3)サイクル目と同様に、サンプル値SM13[3P:P]においては、最上位ビットのサンプル値から下位のビットに向けて少なくとも1つのサンプル値が不定となる。図69でのクロック信号CLKの(N+1+3)サイクル目では、サンプル値SM13[36:12]において、サンプル値SM13[36]とサンプル値SM13[35]が不定となっている。
フォールエッジ検出単位を構成するサンプル値SM13[3P:P]において、最上位ビットのサンプル値から下位のビットに向けて複数のサンプル値が不定となると、上述の図72でのクロック信号CLKの(N+1+3)サイクル目と同様に、フォールエッジデータFEG[2P−1]においては、少なくとも最上位ビットのフォールエッジデータFEG[2P−1]の値が不定となる。つまり、フォールエッジ検出期間が、データストローブ信号DQSの信号レベルが不定の期間を含む場合には、当該フォールエッジ検出期間に対応するフォールエッジデータFEG[2P−1]においては、少なくとも最上位ビットのフォールエッジデータFEG[2P−1]の値が不定となることがある。そして、フォールエッジデータFEG[2P−1]においては、データストローブ信号DQSのフォールエッジのタイミングを示す“1”のフォールエッジデータFEG[k]も含まれる。
一方で、データストローブ信号DQSの信号レベルが不定の期間を含むフォールエッジ検出期間に対応するフォールエッジデータFEG[2P−1:0]と対を成すフォール側データ取得単位を構成するサンプル値SMF[2P−1:0](サンプル値SM23[3P−1:P])では、最上位ビットのサンプル値SMF[2P−1]は、リードデータRDのバースト出力終了後の、信号レベルが不定のデータ信号DQ[y]をサンプリングした値である。つまり、最上位ビットのサンプル値SMF[2P−1]はリードデータRDを示さず、その値は不定である。上記の図70でのクロック信号CLKの(N+1+3)番目のサイクルでは、サンプル値SMF[2P−1]の最上位ビットであるサンプル値SM23[35]は不定となっている。
このように、フォールエッジ検出期間(サンプリング期間197)が、データストローブ信号DQSの信号レベルが不定の期間を含む場合には、当該フォールエッジ検出期間でのフォールエッジデータFEG[2P−1]においては、正しい値(リードデータRDの値)を示すサンプル値SMFに対応する、“1”を示すフォールエッジデータFEGと、値が不定のサンプル値SMFに対応する、“1”を示すフォールエッジデータFEGとが含まれることがある。フォールエッジデータFEG[2P−1]に、“1”を示すフォールエッジデータFEGが複数含まれる場合には、それらに対応する複数のサンプル値SMFのうちのいずれが正しい値を示してるかは判断することができない。したがって、上述の図75での(N+1+3)サイクル目のように、フォール側出力データDQoutF[y]は不定となる。
そこで、フォールエッジデータFEG[2P−1:0]を最下位ビットから上位のビットに向けて見ていった際に、最初に“1”を示すデータが現れたビット位置よりも後方(上位側)のビット位置から最後のビット位置(最上位のビット位置)までのデータをすべて“0”とするフィルタ処理を当該フォールエッジデータFEG[2P−1:0]に対して行う。ビット位置はサンプリングタイミングに対応することから、フォールエッジデータFEG[2P−1:0]をサンプリングタイミングの順で見ていった際に、最初に“1”が現れるタイミングよりも後方のタイミングから最後までのデータをすべて“0”とするフィルタ処理を当該フォールエッジデータFEG[2P−1:0]に対して行う。これにより、フォールエッジ検出期間が、リードデータRDの出力後に現れる、データストローブ信号DQSの信号レベルが不定の期間を含む場合であっても、当該フォールエッジ検出期間でのフォールエッジデータFEG[2P−1]においては、値が不定のサンプル値SMFに対応するフォールエッジデータFEGの値が“0”となる。よって、フォール側出力データDQoutF[y]が不定となることを抑制できる。その結果、リードデータRDを適切に取得することができる。図77はこの場合のエッジ検出回路130の構成を示す図である。図77に示されるエッジ検出回路130は、フォールエッジ検出回路133の後段に、上記フィルタ処理を行うポストフィルタ回路135を有している。図78は、ポストフィルタ回路135の構成を示す図である。
図78に示されるように、ポストフィルタ回路135は、OR回路136A〜136J,137A〜137E,138A〜138Dと、AND回路139A〜139Eとを備えている。OR回路136AにはフォールエッジデータFEG[0],FEG[1]が入力され、OR回路136BにはフォールエッジデータFEG[2],FEG[3]が入力される、OR回路136CにはフォールエッジデータFEG[4],FEG[5]が入力され、OR回路136DにはフォールエッジデータFEG[6],FEG[7]が入力される。OR回路136EにはフォールエッジデータFEG[8],FEG[9]が入力され、OR回路136FにはフォールエッジデータFEG[10],FEG[11]が入力される。OR回路136GにはフォールエッジデータFEG[12],FEG[13]が入力され、OR回路136HにはフォールエッジデータFEG[14],FEG[15]が入力される。OR回路136IにはフォールエッジデータFEG[16],FEG[17]が入力され、OR回路136JにはフォールエッジデータFEG[18],FEG[19]が入力される。
OR回路137AにはOR回路136A,136Bの出力が入力され、OR回路137BにはOR回路136C,136Dの出力が入力される。OR回路137CにはOR回路136E,136Fの出力が入力され、OR回路137DにはOR回路136G,136Hの出力が入力される。OR回路137EにはOR回路136I,136Jの出力が入力される。
OR回路138AにはOR回路137A,137Bの出力が入力され、OR回路138BにはOR回路138Aの出力とOR回路137Cの出力が入力される。OR回路138CにはOR回路138Bの出力とOR回路137Dの出力が入力され、OR回路138DにはOR回路138Cの出力とOR回路137Eの出力が入力される。OR回路136A〜136J,137A〜137E,138A〜138Dのそれぞれは、入力された2つのデータの論理和を演算して出力する。
ポストフィルタ回路135は、フォールエッジデータFEG[0]〜FEG[3]をそのままフォールエッジデータFEG1[0]〜FEG1[3]としてそれぞれ出力する。
AND回路139Aは、OR回路137Aの出力が“0”のときフォールエッジデータFEG[4]〜FEG[7]をそれぞれフォールエッジデータFEG1[4]〜FEG1[7]として出力し、OR回路137Aの出力が“1”のときすべてが“0”のフォールエッジデータFEG1[4]〜FEG1[7]を出力する。
AND回路139Bは、OR回路138Aの出力が“0”のときフォールエッジデータFEG[8]〜FEG[11]をそれぞれフォールエッジデータFEG1[8]〜FEG1[11]として出力し、OR回路138Aの出力が“1”のときすべてが“0”のフォールエッジデータFEG1[8]〜FEG1[11]を出力する。
AND回路139Cは、OR回路138Bの出力が“0”のときフォールエッジデータFEG[12]〜FEG[15]をそれぞれフォールエッジデータFEG1[12]〜FEG1[15]として出力し、OR回路138Bの出力が“1”のときすべてが“0”のフォールエッジデータFEG1[12]〜FEG1[15]を出力する。
AND回路139Dは、OR回路138Cの出力が“0”のときフォールエッジデータFEG[16]〜FEG[19]をそれぞれフォールエッジデータFEG1[16]〜FEG1[19]として出力し、OR回路138Cの出力が“1”のときすべてが“0”のフォールエッジデータFEG1[16]〜FEG1[19]を出力する。
AND回路139Eは、OR回路138Dの出力が“0”のときフォールエッジデータFEG[20]〜FEG[23]をそれぞれフォールエッジデータFEG1[20]〜FEG1[23]として出力し、OR回路138Dの出力が“1”のときすべてが“0”のフォールエッジデータFEG1[20]〜FEG1[23]を出力する。
ポストフィルタ回路135から出力されるフォールエッジデータFEG1[23:0](フォールエッジデータFEG1[2P−1:0])は、RD取得回路20−yのフォール側データ取得回路244に入力される。
このような構成を有するポストフィルタ回路135は 24ビットのフォールエッジデータFEG[0」〜[23]を4ビット単位で処理する。ここで、フォールエッジデータFEG[0」〜[23]において、ビット位置が連続する4つのフォールエッジデータFEGを1つのグループとし、フォールエッジデータFEG[0」〜[23]が6つのグループで構成されていると考える。例えば、フォールエッジデータFEG[0]〜[3]で1つのグループが構成され、フォールエッジデータFEG[4]〜[7]で1つのグループが構成される。
ポストフィルタ回路135では、フォールエッジデータFEG[2P−1:0」を最下位ビットから上位のビットに向けて見ていった際に、最初に“1”を示すフォールエッジデータFEGが属するグループよりも後方(上位ビット側)のグループに属するすべてのフォールエッジデータFEGを“0”として出力する。
例えば、フォールエッジデータFEG[2P−1:0」を最下位ビットから上位のビットに向けて見ていった際に最初にフォールエッジデータFEG[1」が“1”を示す場合には、フォールエッジデータFEG[4]〜FEG[23]の値が強制的に“0”となり、ポストフィルタ回路135からは、フォールエッジデータFEG[0」〜FEG[3]がそのままフォールエッジデータFEG1[0」〜FEG1[3]としてそれぞれ出力され、“0”を示すフォールエッジデータFEG1[4]〜FEG1[23]が出力される。
また、フォールエッジデータFEG[2P−1:0」を最下位ビットから上位のビットに向けて見ていった際に最初にフォールエッジデータFEG[9」が“1”を示す場合には、フォールエッジデータFEG[12]〜FEG[23]の値が強制的に“0”となり、ポストフィルタ回路135からは、フォールエッジデータFEG[0」〜FEG[11]がそのままフォールエッジデータFEG1[0」〜FEG1[11]としてそれぞれ出力され、“0”を示すフォールエッジデータFEG1[12]〜FEG1[23]が出力される。
このようなポストフィルタ回路135をフォールエッジ検出回路133の後段に配置した場合には、上記の動作例では、図74での(N+1+3)サイクル目の出力値ANDF[23]が不定ではなく“0”となる。したがて、図75での(N+1+3)サイクル目でのフォール側出力データDQoutF[y]はリードデータRDの“H”を示すようになる。
なお上記の例では、ポストフィルタ回路135は フォールエッジデータFEG[0」〜[23]を4ビット単位で処理していたが、3ビット単位、2ビット単位、1ビット単位等で処理しても良い。
<グリッジ除去回路>
上述の図7に示されるように、本実施の形態では、データストローブ信号DQSをFF回路(フリップフロップ)を使用してサンプリングしていることから、FF回路へのデータ入力がセットアップタイムあるいはホールドタイムを満足しない場合には、サンプル値が不定となる。そして、サンプリング周波数が高くなると、得られた複数のサンプル値にグリッジが現れることがある。以下にこの点について説明する。
図79はデータストローブ信号DQSと、それをサンプルリングするサンプリングタイミングとの関係を示す図である。図79には、複数のサンプリングタイミングSMT0〜SMT7が示されている。
サンプリング周波数が高くなり、図79に示されるように、FF回路のセットアップタイムSUT及びホールドタイムHTを足し合わせた値よりもサンプリング周期SMPが小さくなると、データストローブ信号DQSのエッジ付近の複数のサンプリングタイミングでそれぞれ得られた複数のサンプル値が不定となる。
図79の例では、サンプリングタイミングSMT3,SMT4で得られた2つのサンプル値が不定となる。図79の例において、サンプリングタイミングSMT3,SMT4で得られた2つのサンプル値がそれぞれ“1”、“0”を示す場合には、サンプリングタイミングSMT0〜SMT7で得られた8ビットのサンプル値は、理想的には“00001111”であるものの、実際には“00010111”となり、前後の値とは異なる値、つまりグリッジ(パルス状のノイズ)が発生する。したがって、FF回路のセットアップタイムSUT及びホールドタイムHTを足し合わせた値よりもデータストローブ信号DQSについてのサンプリング周期SMPが小さい場合には、オーバーサンプリング回路100から出力されるサンプル値SM9[2P−1:0]にはグリッジが発生する。サンプル値SM9[2P−1:0]にグリッジが発生する場合には、選択対象単位保持回路110から出力されるサンプル値SM11[2P×M−1:0]にもグリッジが発生する。そして、サンプル値SM11[2P×M−1:0]にグリッジが発生すると、処理単位決定回路120から出力されるサンプル値SM13[3P:0]にもグリッジが発生する。
サンプル値SM13[3P:0]にグリッジが発生すると、RD取得回路20−yは適切にリードデータRDを得ることができないことがある。この点について図80を用いて説明する。
例えば図80に示されるようなライズエッジ検出期間195でのライズエッジデータREG[2P−1:0]を考える。このライズエッジデータREG[2P−1:0]では、ライズエッジ検出期間195でのデータストローブ信号DQSのライズエッジregのタイミングに応じたビット位置のライズエッジデータREG[k1]の値が“1”となる。また、ライズエッジデータREG[2P−1:0]の元になるサンプル値SM13[2P:0]にグリッジが含まれているために、ライズエッジ検出期間195でのデータストローブ信号DQSのフォールエッジfegのタイミングに応じたビット位置のライズエッジデータREG[k2]の値が“1”になっているとする。
ライズ側データ取得回路241が、このようなライズエッジデータREG[2P−1:0]と比較するサンプル値SMR[2P−1:0]では、ライズエッジregのタイミングに応じたビット位置のライズエッジデータREG[k1]と同じビット位置のサンプル値SMR[k1]は、当該ライズエッジregに応じたリードデータRD2の値を示す。一方で、当該サンプル値SMR[2P−1:0]では、フォールエッジfegのタイミングに応じたビット位置のライズエッジデータREG[k2]と同じビット位置のサンプル値SMR[k2]は、当該フォールエッジfegに応じたリードデータRD3の値を示す。つまり、ライズエッジデータREG[2P−1:0]には、正しい値(リードデータRD2の値)を示すサンプル値SMRに対応する、“1”を示すライズエッジデータREGと、正しくない値(リードデータRD3の値)を示すサンプル値SMRに対応する、“1”を示すライズエッジデータREGとが含まれることになる。ライズエッジデータREG[2P−1]に、“1”を示すライズエッジデータREGが複数含まれる場合には、それらに対応する複数のサンプル値SMRのうちのいずれが正しい値を示しているかは判断することができない。したがって、ライズ側出力データDQoutR[y]は不定となり、適切にリードデータRDを取得できない。
上述の処理単位決定回路120に設けられたグリッジ除去回路121は、サンプル値SM11[2P×M−1:0]に含まれるグリッジを除去することができることから、サンプル値SM13[3P:0]にはグリッジが含まることを抑制することができる。よって、RD取得回路20−yは適切にリードデータRDを取得することができる。
上述のように、グリッジ除去回路121の除去回路122−zは、注目するzビット目のサンプル値SM11[z]の論理値が、その前後のビット位置のサンプル値SM11[z−1],SM11[z+1]の論理値のそれぞれと異なる場合には、論理値を反転したサンプル値SM11[z]をサンプル値SM12[z]として出力する。したがって、図79の例において、グリッジである、サンプリングタイミングSMT3のサンプル値“1”が、サンプル値SM11[z]である場合には、サンプル値SM12[z]は“0”となりグリッジが除去されて、理想的な“00001111”が得られる。
<制御回路>
図81は制御回路30の構成を示す図である。制御回路30は、クロック信号CLKに同期して動作する。制御回路30は、DQSエッジ検出回路10に入力する設定データSET1[1:0],SET2[X−1:0]と、RD取得回路20−0〜20−7にそれぞれ入力する設定データSET11−0[1:0]〜SET11−7[1:0]〜と、RD取得回路20−0〜20−7にそれぞれ入力する設定データSET12−0[1:0]〜SET12−7[1:0]とを生成する。
本実施の形態に係る制御装置3は、動作モードとして、記憶装置2からデータを読み出したり、記憶装置2にデータを書き込んだりするノーマルモードと、当該制御装置3及び記憶装置2に対して初期設定を行うトレーニングモードとを備えている。半導体記憶装置1が起動すると、制御装置3は、まずトレーニングモードで動作し、制御装置3及び記憶装置2に対して初期設定が完了した後に、ノーマルモードで動作する。
図81に示されるように、制御回路30は、上位制御回路31と、DQS遅延時間取得回路32と、DQ遅延時間取得回路33−0〜33−7と、状態検出回路34と、タイミング変化検出回路35と、DQS制御回路36と、DQ制御回路37−0〜37−7とを備えている。以下では、まず制御回路30の各回路の動作の概要を説明し、その後、各回路の動作の詳細を説明する。
上位制御回路31は、リードコマンドRDC等を出力し、制御装置3が記憶装置2からデータを読み出す際の当該制御装置3での各種回路の制御を行う。また上位制御回路31は、ライトコマンド等を出力し、制御装置3が記憶装置2にデータを書き込む際の当該制御装置3での各種回路の制御を行う。つまり、上位制御回路31は、半導体記憶装置1の動作を統括的に管理する機能を有する。
DQS遅延時間取得回路32は、DQSエッジ検出回路10のエッジ検出回路130でのエッジ検出結果に基づいて、データリード回路5のリードコマンドRDCの出力から、データストローブ信号DQSのエッジについてのDQSエッジ検出回路10への入力までの遅延時間を求める。具体的には、DQS遅延時間取得回路32は、DQSエッジ検出回路10から出力されるライズエッジデータREG[2P−1:0]に基づいて、制御回路3のリードコマンドRDCの出力から、データストローブ信号DQSの最初のライズエッジについてのDQSエッジ検出回路10への入力までの遅延時間を求める。以後、当該遅延時間を「DQSエッジ遅延時間」と呼ぶ。
DQ遅延時間取得回路33−0〜33−7は互いに同じ回路構成を有している。DQ遅延時間取得回路33−yは、RD取得回路20−yのエッジ検出回路230でのエッジ検出結果に基づいて、制御回路3のリードコマンドRDCの出力から、データ信号DQのエッジについてのRD取得回路20−yへの入力までの遅延時間を求める。具体的には、DQ遅延時間取得回路33−yは、RD取得回路20−yから出力されるライズエッジデータREG−y[2P−1:0]に基づいて、制御回路3のリードコマンドRDCの出力から、データ信号DQの最初のライズエッジについてのRD取得回路20−yへの入力までの遅延時間を求める。以後、当該遅延時間を「DQエッジ遅延時間」と呼ぶ。
状態検出回路34は、データリード回路5の状態を示すリード状態信号RDnowと、データストローブ信号DQSの信号レベルの状態を示すDQS状態信号DQSvとを出力する。また状態検出回路34には、制御回路30がリードコマンドRDCを出力したときに所定時間Highレベルとなるリードコマンド出力通知信号RDCoutと、設定データSET3とが入力される。リードコマンド出力通知信号RDCout及び設定データSET3は上位制御回路31から出力される。
状態検出回路34は、リードコマンドRDCの出力後、データリード回路5が、記憶装置2からのバースト的なリードデータRDの取得処理を行っている間(以後、「リード処理中」と呼ぶことがある)、リード状態信号RDnowの信号レベルをHighレベルに設定する。状態検出回路34は、リードコマンド出力通知信号RDCoutと設定データSET3に基づいて、リード状態信号RDnowの信号レベルを設定する。リード状態信号RDnowは、オーバーサンプリング回路100でのデータストローブ信号DQSのプリアンプブルのサンプリングの開始から、バースト的に出力されるリードデータRDの最後のリードデータRDがデータ取得回路240から出力されるまでHighレベルを示す。
また、状態検出回路34は、リードコマンドRDCの出力後、データストローブ信号DQSの信号レベルが不定からLowレベルに変化するタイミングから、リードデータRDのバースト出力が終了してデータストローブ信号DQSの信号レベルが不定になるタイミングまで、DQS状態信号DQSvの信号レベルをHighレベルに設定する。つまり、状態検出回路34は、データストローブ信号DQSの信号レベルが確定している間、DQS状態信号DQSvの信号レベルをHighレベルに設定する。状態検出回路34は、リードコマンド出力通知信号RDCoutと設定データSET3に基づいて、DQS状態信号DQSvの信号レベルを設定する。
タイミング変化検出回路35は、状態検出回路34が出力するDQS状態信号DQSvがHighレベルを示す間、ライスエッジデータREG[2P−1:0]に基づいて、データストローブ信号DQSのエッジのタイミングの変化を検出する。そして、タイミング変化検出回路35は、データストローブ信号DQSのエッジのタイミングが、基準タイミングよりも遅くなった場合にはHighレベルのダウン信号Dwを出力し、早くなった場合にはHighレベルのアップ信号Upを出力する。
図82はDQS制御回路36の構成を示す図である。DQS制御回路36は、上位制御回路31から出力される設定データSET1A[1:0],SET2A[X−1:0]を、タイミング検出回路35からのアップ信号Up及びダウン信号Dwに基づいて調整して、それぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。
DQS制御回路36は、設定データ調整回路360,361及び選択回路362を備えている。設定データ調整回路360は、上位制御回路31からのノーマルイネーブル信号ENnmがHighレベルのとき、上位制御回路31からの設定データSET1A[1:0],SET2A[X−1:0]を、タイミング変化検出回路35からのアップ信号Up及びダウン信号Dwに基づいて調整し、それぞれ設定データSET1B[1:0],SET2B[X−1:0]として出力する。上位制御回路31は、制御装置3がノーマルモードで動作するときにはノーマルイネーブル信号ENnmをHighレベルに設定し、制御装置3がトレーニングモードで動作するときにはノーマルイネーブル信号ENnmをLowレベルに設定する。
設定データ調整回路361は、アップデイトイネーブル信号ENupdがLowレベルになると、設定データ調整回路360からの設定データSET1B[1:0],SET2B[X−1:0]を保持する。設定データ調整回路361は、アップデイトイネーブル信号ENupdがLowレベルの間、保持した設定データSET1B[1:0]をそのまま設定データSET1C[1:0]として出力する。また設定データ調整回路361は、アップデイトイネーブル信号ENupdがLowレベルの間、保持した設定データSET2B[X−1:0]をアップ信号Up及びダウン信号Dwに基づいて調整して設定データSET2C[X−1:0]として出力する。アップデイトイネーブル信号ENupdは、リード状態信号RDnowがHighレベルになるとLowレベルとなり、リード状態信号RDnowがLowレベルになるとHighレベルとなる。アップデイトイネーブル信号ENupdは選択回路362から出力される。
選択回路362には、上位制御回路31からの設定データSET1A[1:0],SET2A[X−1:0]と、設定データ調整回路360からの設定データSET1B[1:0],SET2B[X−1:0]と、設定データ調整回路361からの設定データSET1C[1:0],SET2C[X−1:0]とが入力される。
選択回路362は、ノーマルイネーブル信号ENnmがLowレベルのとき、設定データSET1A[1:0],SET2A[X−1:0]を選択して、それぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。
選択回路362は、ノーマルイネーブル信号ENnmがHighレベルであって、リード状態信号RDnowがLowレベルのとき、設定データSET1B[1:0],SET2B[X−1:0]を選択して、それぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。
選択回路362は、ノーマルイネーブル信号ENnmがHighレベルであって、リード状態信号RDnowがHighレベルのとき、設定データSET1C[1:0],SET2C[X−1:0]を選択して、それぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。
選択回路362から出力される設定データSET1[1:0],SET2[X−1:0]は、DQSエッジ検出回路10の選択対象単位保持回路110及び処理単位決定回路120にそれぞれ入力される。
DQ制御回路37−0〜37−7は互いに同じ回路構成を有している。図83はDQ制御回路37−yの構成を示す図である。DQ制御回路37−yは、上位制御回路31から出力される設定データSET11A−y[1:0],SET12A−y[X−1:0]を、タイミング検出回路35のアップ信号Up及びダウン信号Dwに基づいて調整して、それぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力する。
DQ制御回路37−yは、設定データ調整回路370,371及び選択回路372を備えている。設定データ調整回路370は、ノーマルイネーブル信号ENnmがHighレベルのとき、上位制御回路31からの設定データSET11A−y[1:0],SET12A−y[X−1:0]を、タイミング変化検出回路35からのアップ信号Up及びダウン信号Dwに基づいて調整し、それぞれ設定データSET11B−y[1:0],SET12B−y[X−1:0]として出力する。
設定データ調整回路371は、アップデイトイネーブル信号ENupd−yがLowレベルになると、設定データ調整回路370からの設定データSET11B−y[1:0],SET12B−y[X−1:0]を保持する。設定データ調整回路371は、アップデイトイネーブル信号ENupd−yがLowレベルの間、保持した設定データSET11B−y[1:0]をそのまま設定データSET11C−y[1:0]として出力する。また設定データ調整回路371は、アップデイトイネーブル信号ENupd−yがLowレベルの間、保持した設定データSET12B−y[X−1:0]をアップ信号Up及びダウン信号Dwに基づいて調整して設定データSET12C−y[X−1:0]として出力する。アップデイトイネーブル信号ENupd−yは、リード状態信号RDnowがHighレベルになるとLowレベルとなり、リード状態信号RDnowがLowレベルになるとHighレベルとなる、アップデイトイネーブル信号ENupd−yは選択回路372から出力される。
選択回路372には、上位制御回路31からの設定データSET11A−y[1:0],SET12A−y[X−1:0]と、設定データ調整回路370からの設定データSET11B−y[1:0],SET12B−y[X−1:0]と、設定データ調整回路371からの設定データSET11C−y[1:0],SET12C−y[X−1:0]とが入力される。
選択回路372は、ノーマルイネーブル信号ENnmがLowレベルのとき、設定データSET11A−y[1:0],SET12A−y[X−1:0]を選択して、それぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力する。
選択回路372は、ノーマルイネーブル信号ENnmがHighレベルであって、リード状態信号RDnowがLowレベルのとき、設定データSET11B−y[1:0],SET12B−y[X−1:0]を選択して、それぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力する。
選択回路372は、ノーマルイネーブル信号ENnmがHighレベルであって、リード状態信号RDnowがHighレベルのとき、設定データSET11C−y[1:0],SET12C−y[X−1:0]を選択して、それぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力する。
選択回路372から出力される設定データSET11−y[1:0],SET12−y[X−1:0]は、RD取得回路20−yの選択対象単位保持回路210及び処理単位決定回路220にそれぞれ入力される。
次にトレーニングモード及びノーマルモードでの制御回路30の動作を説明することによって、制御回路30の各回路の動作を詳細に説明する。
<トレーニングモード>
図84はトレーニングモードでの制御回路30の動作を示す図である。図84に示されるように、ステップs1において、上位制御回路31はノーマルイネーブル信号ENnmをLowレベルに設定して、制御装置3の動作モードをノーマルモードからトレーニングモードに変化する。
ここで、ノーマルイネーブル信号ENnmがLowレベルに設定されると、上位制御回路31からは、設定データSET1A[1:0],SET2A[X−1:0]の初期値が出力される。ノーマルイネーブル信号ENnmがLowレベルのとき、DQS制御回路36の選択回路362からは設定データSET1A,SET2A[X−1:0]がそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力されることから、DQSエッジ検出回路10の選択対象単位保持回路110及び処理単位決定回路120には、それぞれ設定データSET1A[1:0],SET2A[X−1:0]の初期値が入力される。以後、設定データSET1A[1:0]の初期値を「設定データSET1[1:0]の初期値」と呼び、設定データSET2A[X−1:0]の初期値を「設定データSET2[X−1:0]の初期値」と呼ぶ。
また、ノーマルイネーブル信号ENnmがLowレベルに設定されると、上位制御回路31からは、設定データSET11A−0[1:0]〜SET11A−7[1:0]及び設定データSET12A−0[X−1:0]〜SET12A−7[X−1:0]の初期値が出力される。ノーマルイネーブル信号ENnmがLowレベルのとき、DQ制御回路37−yの選択回路372からは設定データSET11A−y[1:0]及び設定データSET12A−y[X−1:0]がそれぞれ設定データSET11−y[1:0]及び設定データSET12−y[X−1:0]として出力されることから、RD取得回路20−yの選択対象単位保持回路210及び処理単位決定回路220には、それぞれ設定データSET11A−y[1:0]及び設定データSET12A−y[X−1:0]の初期値が入力される。以後、設定データSET11A−y[1:0]の初期値を「設定データSET11−y[1:0]の初期値」と呼び、設定データSET12A−y[X−1:0]の初期値を「設定データSET12−y[X−1:0]の初期値」と呼ぶ。
次にステップs2において、上位制御回路31は記憶装置2を初期化する。次にステップs3において、上位制御回路31は、制御装置3と記憶装置2との間のデータストローブ線DQSL及びデータ線DQL[0]〜DQL[7]のそれぞれを、数百Ω〜1kΩ程度の抵抗を用いて弱くプルダウンする。これにより、データストローブ信号DQSの信号レベルが不定からLowレベルとなり、データ線DQ[0]〜DQ[7]の信号レベルが不定からLowレベルとなる。
次にステップs4において、上位制御回路31は、記憶装置2の動作モードを、DDR3等で規定されているMPR(Multi-Purpose Register)モードに設定する。次にステップs5において、上位制御回路31は、DQS遅延時間取得回路32及びDQ遅延時間取得回路33−0〜33−7のそれぞれを初期化する。次にステップs6において、上位制御回路31は記憶装置2に対してリードコマンドRDCを発行する。これにより、上位制御回路31から出力されるリードコマンド出力通知信号RDCoutはHighレベルとなる。
次にステップs7において、DQS遅延時間取得回路32はDQSエッジ遅延時間を求め、各DQ遅延時間取得回路33−yはDQエッジ遅延時間を求める。
ここで、記憶装置2は、MPRモードにおいて、リードコマンドRDCを受信すると、各データ線DQLに既知のバースト的なリードデータRDを出力する。このバースト的なリードデータRDの先頭のリードデータRDは“1”を示す。したがって、図85に示されるように、トレーニングモードでは、ステップs6でリードコマンドRDが発行された後、データストローブ信号DQSの最初のライズエッジに同期して、データ信号DQ[0]〜[7]のそれぞれにライズエッジが現れる。
ステップs7において、DQS遅延時間取得回路32は、ライズエッジデータREG[2P−1:0]に基づいて、リードコマンド出力通知信号RDCoutがHighレベルとなってから、データストローブ信号DQSの最初のライズエッジregf1(図85参照)がDQSエッジ検出回路10に入力されるまでの時間をDQSエッジ遅延時間DTdqsとして求める。DQS遅延時間取得回路32は、ステップs6の後、“1”のライズエッジデータREGを含むライズエッジデータREG[2P−1:0]が最初に入力されると、当該ライズエッジデータREG[2P−1:0]に含まれる“1”のライズエッジデータREGのビット位置を、データストローブ信号DQSの最初のライズエッジregf1のタイミングとして使用して、DQSエッジ遅延時間DTdqsを求める。設定データSET1[1:0]及び設定データSET2[X−1:0]の初期値は既知であり、DQSエッジ検出回路10での設計上の信号遅延は既知であることから、DQS遅延時間取得回路32は、最初のライズエッジregf1を示すライズエッジデータREG[2P−1:0]に対応するライズエッジ検出期間195(図85参照)と、リードコマンドRDCの発行タイミングとの関係を特定することができる。したがって、DQS遅延時間取得回路32は、最初のライズエッジregf1を示すライズエッジデータREG[2P−1:0]に対応するライズエッジ検出期間195と、当該ライズエッジデータREG[2P−1:0]に含まれる“1”のライズエッジデータREGのビット位置とに基づいて、DQSエッジ遅延時間DTdqsを求めることができる。DQSエッジ遅延時間DTdqsは、リードコマンドRDCの出力から最初のライズエッジregf1の入力まで何サイクルと何サンプルリング期間遅れているかを示している。以後、DQSエッジ遅延時間DTdqsが示すサイクルの数を「遅延サイクル数」と呼び、DQSエッジ遅延時間DTdqsが示すサンプリング期間の数を「遅延サンプリング期間数」と呼ぶ。DQSエッジ遅延時間DTdqsは、遅延サイクル数で表される期間と、遅延サンプリング期間数で表される期間とを足し合わせたものである。遅延サンプリング期間数は「遅延位相量」とも呼ばれる。
ステップs7では、各DQ遅延時間取得回路33−yが、同様にして、DQエッジ遅延時間DTdq−y(図85参照)を求める。DQ遅延時間取得回路33−yは、ライズエッジデータREG−y[2P−1:0]に基づいて、リードコマンド出力通知信号RDCoutがHighレベルとなってから、データ信号DQ[y]の最初のライズエッジregf2(図85参照)がRD取得回路20−yに入力されるまでの時間をDQエッジ遅延時間DTdq−yとして求める。DQSエッジ遅延時間DTdqsと同様に、DQエッジ遅延時間DTdq−yは、リードコマンドRDCの出力から最初のライズエッジregf2の入力まで何サイクル(遅延サイクル数)と何サンプルリング期間(遅延サンプリング期間数)遅れているかを示している。
次にステップs8において、上位制御回路31は、ステップs7での結果に基づいて、設定データSET1A[1:0],SET2A[X−1:0]の値と、設定データSET11A−0[1:0]〜SET11A−7[1:0]及び設定データSET12A−0[X−1:0]〜SET12A−7[X−1:0]の値とを調整する。調整後の設定データSET1A[1:0],SET2A[X−1:0]は、設定データSET1[1:0],SET2[X−1:0]として、DQS制御回路36からDQSエッジ検出回路10に入力される。また調整後の設定データSET11A−y[1:0],SET12A−y[X−1:0]は、DQ制御回路37−yからRD取得回路20−yに入力される。さらに、上位制御回路31は、DQS遅延時間取得回路32から出力されるDQSエッジ遅延時間DTdqsに基づいて、状態検出回路34に出力する設定データSET3を設定する。
ステップs8において、上位制御回路31は、ステップs7で求められたDQSエッジ遅延時間DTdqs及びDQエッジ遅延時間DTdq−0〜DTdq−7に含まれる遅延サイクル数に基づいて、設定データSET1A[1:0]及び設定データSET11A−0[1:0]〜SET11A−7[1:0]を調整する。具体的には、上位制御回路31は、クロック信号CLKのあるライズエッジにおいて、DQSエッジ検出回路10の選択対象単位保持回路110の可変遅延回路111から出力されるサンプル値SM10[2P−1:0]と、当該ライズエッジにおいてRD取得回路20−0〜20−yの選択対象単位保持回路210の可変遅延回路211から出力されるサンプル値SM20[2P−1:0]とが、クロック信号CLKの同じサイクルで記憶装置2から出力された信号のサンプル値となるように、設定データSET1A[1:0]及び設定データSET11A−0[1:0]〜SET11A−7[1:0]を調整する。つまり、上位制御回路31は、クロック信号CLKのあるライズエッジにおいて、DQSエッジ検出回路10の選択対象単位保持回路110の可変遅延回路111から出力されるサンプル値SM10[2P−1:0]と、当該ライズエッジにおいてRD取得回路20−0〜20−yの選択対象単位保持回路210の可変遅延回路211から出力されるサンプル値SM20[2P−1:0]とが、クロック信号CLKの同じサイクルで記憶装置2から出力された信号のサンプル値となるように、可変遅延回路111,211での遅延量を調整する。これにより、データストローブ信号DQS及びデータ信号DQ[0]〜DQ[7]の間でのスキューがサイクル単位で調整される。
またステップs8において、上位制御回路31は、ステップs7で求められたDQSエッジ遅延時間DTdqs及びDQエッジ遅延時間DTdq−0〜DTdq−7に含まれる遅延サンプリング期間数に基づいて、設定データSET2A[X−1:0]及び設定データSET12A−0[X−1:0]〜SET12A−7[X−1:0]を調整する。
具体的には、上位制御回路31は、DQSエッジ遅延時間DTdqsに含まれる遅延サンプリング期間数に基づいて、DQSエッジ検出回路10でのライズエッジ検出期間の中央付近にデータストローブ信号DQSの最初のライズエッジregf1が位置するように、設定データSET2A[X−1:0]を調整する。つまり、上位制御回路31は、DQSエッジ遅延時間DTdqsの含まれる遅延サンプリング期間数(遅延位相量)に基づいて、ライズエッジデータREG[2P−1:0]のビット位置Pあるいはビット位置(P−1)に、ライズエッジregf1を示す“1”が立つように、処理単位決定回路120が選択対象単位からライズエッジ検出単位を選択する範囲を調整する。
また、上位制御回路31は、DQエッジ遅延時間DTdq−yに含まれる遅延サンプリング期間数に基づいて、RD取得回路20−yでのライズエッジ検出期間の中央から半サイクル分前方の付近にデータ信号DQ[y]の最初のライズエッジregf2が位置するように、設定データSET12A−y[X−1:0]を調整する。つまり、上位制御回路31は、DQエッジ遅延時間DTdq−yの含まれる遅延サンプリング期間数に基づいて、ライズエッジデータREG−y[2P−1:0]のビット位置Pあるいはビット位置(P−1)からP/2個前のビット位置に、ライズエッジregf2を示す“1”が立つように、処理単位決定回路220が選択対象単位からライズエッジ検出単位(ライズ側データ取得範囲)を選択する範囲を調整する。
以上のようにして、上位制御回路31が設定データSET2A[X−1:0]を調整することによって、図86に示されるように、DQSエッジ検出回路10では、ライズエッジ検出期間195Rの中央付近にデータストローブ信号DQSのライズエッジが、フォールエッジ検出期間195Fの中央付近にデータストローブ信号DQSのフォールエッジが位置するようになる。また、以上のようにして、上位制御回路31が設定データSET12A−0[X−1:0]〜SET12A−7[X−1:0]を調整することによって、各RD取得回路20−yでは、ライズ側データ取得単位を構成するサンプル値SMR[2P−1:0]が得られるサンプリング期間196Rの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのライズエッジに対応するリードデータRDrの出力期間の中央が位置するようになり、フォール側データ取得単位を構成するサンプル値SMF[2P−1:0]が得られるサンプリング期間196Fの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのフォールエッジに対応するリードデータRDfの出力期間の中央が位置するようになる。
これにより、上述の図60を用いて説明したように、ライズ側データ取得回路241に対してクロック信号CLKのあるライズエッジに同期して入力されるライズエッジデータREG[2P−1:0]及びサンプル値SMR[2P−1:0]に関して、当該ライズエッジデータREG[2P−1:0]における、“1”を示すライズエッジデータREG[k]のビット位置が、当該サンプル値SMR[2P−1:0]における、リードデータRD0を示す複数のサンプル値の中央のサンプル値のビット位置付近に位置するようになる。その結果、図60に示されるように、サンプル値SMR[2P−1:0]のうち、“1”を示すライズエッジデータREG[k]と同じビット位置のサンプル値SMR[k]は、データ信号DQ[y]が示す、ライズエッジ検出期間195でのライズエッジregに応じたリードデータRD0の値を示す可能性が高くなり、リードデータRD0の値を適切に取得することができる。同様の理由により、サンプル値SMF[2P−1:0]のうち、“1”を示すフォールエッジデータFEG[k]と同じビット位置のサンプル値SMF[k]は、データ信号DQ[y]が示す、フォールエッジに応じたリードデータRDの値を示す可能性が高くなり、当該リードデータRDの値を適切に取得することができる。
また、以上のようにして、上位制御回路31が設定データSET2A[X−1:0]及び設定データSET12A−0[X−1:0]〜SET12A−7[X−1:0]を調整することによって、サイクル単位で調整された、データストローブ信号DQS及びデータ信号DQ[0]〜DQ[7]の間でのスキューが、サンプリング期間単位で細かく調整される。
ステップs8が実行されると、ステップs9において、上位制御回路31は、データストローブ線DQSL及びデータ線DQL[0]〜DQL[7]のそれぞれのプルダウンを解除する。これにより、データストローブ信号DQS及びデータ線DQ[0]〜DQ[7]の信号レベルが不定となる。
次にステップs10において、上位制御回路31は、記憶装置2のMPRモードの設定を解除し、ステップs11において、ノーマルイネーブル信号ENnmをHighレベルに設定して、制御装置3の動作モードをトレーニングモードからノーマルモードに変化する。以後、トレーニングモードでの設定データSET1A[1:0]等の調整を「初期調整」と呼ぶ。
<ノーマルモード>
図87〜89はDQS制御回路36の動作を示すフローチャートである。図87〜89は設定データ調整回路360、設定データ調整回路361及び選択回路362の動作をそれぞれ示している。
図89に示されるように、選択回路362は、ステップs51において、クロック信号CLKのライスエッジを検出すると、ステップs52において、ノーマルイネーブル信号ENnmがHighレベルか否かを判定する。選択回路362は、ノーマルイネーブル信号ENnmがLowレベルのときには、ステップs53において、上位制御回路31からの設定データSET1A[1:0],SET2A[X−1:0]をそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。そして、選択回路362はアップデイトイネーブル信号ENupdをLowレベルに設定する。
ステップs52において、ノーマルイネーブル信号ENnmがHighレベルのときには、選択回路362は、ステップs54において、リード状態信号RDnowがHighレベルか否かを判定する。リード状態信号RDnowがLowレベルのときには、ステップs55において、選択回路362は、設定データ調整回路360からの設定データSET1B[1:0],SET2B[X−1:0]をそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。そして、選択回路362はアップデイトイネーブル信号ENupdをHighレベルに設定する。
ステップs54において、リード状態信号RDnowがHighレベルのときには、選択回路362は、ステップs56において、設定データ調整回路361からの設定データSET1C[1:0],SET2C[X−1:0]をそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。そして、選択回路362はアップデイトイネーブル信号ENupdをLowレベルに設定する。
選択回路362は、クロック信号CLKのライズエッジが検出されるたびに、ステップs52以降の処理を実行する。
このように、選択回路362は、トレーニングモードにおいて、設定データSET1A[1:0],SET2A[X−1:0]をそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。したがって、トレーニングモードからノーマルモードに切り替わった直後においては、DQS制御回路36からは、初期調整後の設定データSET1[1:0].SET2[X−1:0]がDQSエッジ検出回路10に出力される。
また、選択回路362は、ノーマルモードでは、リード処理中のときには、設定データSET1B[1:0],SET2B[X−1:0]をそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力し、リード処理中ではないときには、設定データSET1C[1:0],SET2C[X−1:0]をそれぞれ設定データSET1[1:0],SET2[X−1:0]として出力する。
また、選択回路362から出力されるアップデイトイネーブル信号ENupdはリード処理中にはLowレベルとなり、リード処理中ではないときにはHighレベルとなる。
次に設定データ調整回路360の動作について説明する。図87に示されるように、設定データ調整回路360は、ステップs21において、クロック信号CLKのライスエッジを検出すると、ステップs22において、ノーマルイネーブル信号ENnmがHighレベルか否かを判定する。設定データ調整回路360は、ノーマルイネーブル信号ENnmがLowレベルのときには、ステップs23において、上位制御回路31からの設定データSET1A[1:0],SET2A[X−1:0]をそれぞれ設定データSET1B[1:0],SET2B[X−1:0]とし、ステップs32において、設定データSET1B[1:0],SET2B[X−1:0]を出力する。したがって、トレーニングモードにおいては、設定データSET1B[1:0]=設定データSET1A[1:0]となり、設定データSET2B[X−1:0]=設定データSET2A[X−1:0]となる。
一方で、ステップs22において、ノーマルイネーブル信号ENnmがHighレベルのとき、つまりノーマルモードにおいては、設定データ調整回路360は、タイミング変化検出回路35からのアップ信号UpがHighレベルか否かを判定する。アップ信号UpがLowレベルのときには、設定データ調整回路360は、ステップs26において、タイミング変化検出回路35からのダウン信号DwがHighレベルか否かを判定する。設定データ調整回路360は、ステップs24において、アップ信号UpがHighレベルのときには、ステップs25において、設定データSET2B[X−1:0]の値を1つ増加させる。そして、設定データ調整回路360はステップs26を実行する。
ステップs26において、ダウン信号DwがLowレベルのときには、設定データ調整回路360はステップs28を実行する。一方で、ダウン信号DwがHighレベルのときには、設定データ調整回路360は、設定データSET2B[X−1:0]の値を1つ減少させる。
ここで、タイミング変化検出回路35は、上述のように、状態検出回路34が出力するDQS状態信号DQSvがHighレベルを示す間、つまりデータストローブ信号DQSの信号レベルが確定している間、ライスエッジデータREG[2P−1:0]に基づいて、データストローブ信号DQSのエッジのタイミングの変化を検出する。具体的には、タイミング変化検出回路35は、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、中央付近のビット位置、たとえばビット位置Pからずれているか否かを判定する。これは、データストローブ信号DQSのライズエッジのタイミングが、ライズエッジ検出期間の中央付近からずれているかを判定することと等価である。
タイミング変化検出回路35は、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも上位側にずれている場合には、アップ信号UpをHighレベル、ダウン信号DwをLowレベルに設定する。つまり、タイミング変化検出回路35は、データストローブ信号DQSのライズエッジのタイミングが、ライズエッジ検出期間の中央付近よりも後方にずれている場合に、アップ信号UpをHighレベル、ダウン信号DwをLowレベルに設定する。
一方で、タイミング変化検出回路35は、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも下位側にずれている場合には、アップ信号UpをLowレベル、ダウン信号DwをHighレベルに設定する。つまり、タイミング変化検出回路35は、データストローブ信号DQSのライズエッジのタイミングが、ライズエッジ検出期間の中央付近よりも前方にずれている場合に、アップ信号UpをLowレベル、ダウン信号DwをHighレベルに設定する。
なお、タイミング変化検出回路35は、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pと一致する場合には、アップ信号Up及びダウン信号DwをともにLowレベルに設定する。また、DQS状態信号DQSvがLowレベルのときには、タイミング変化検出回路35は、アップ信号Up及びダウン信号DwをともにLowレベルに設定する。
タイミング変化検出回路35は、クロック信号CLKのライズエッジに同期してライズエッジデータREG[2P−1:0]が入力されるたびに、上記の処理を行う。
上述のように、ステップs24においてアップ信号UpがHighレベルのときには、ステップs25において設定データSET2B[X−1:0]の値が1つ増加する。したがって、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも上位側にずれている場合には、設定データSET2B[X−1:0]の値が1つ増加する。
またステップs26においてダウン信号UpがHighレベルのときには、ステップs27において設定データSET2B[X−1:0]の値が1つ減少する。したがって、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも下位側にずれている場合には、設定データSET2B[X−1:0]の値が1つ減少する。
ステップs28において、設定データ調整回路360は、設定データSET2B[X−1:0]の値が第1基準値以上であるか否かを判定する。第1基準値は、例えば、DQSエッジ回路10の選択対象単位保持回路110から出力される選択対象単位を構成するサンプル値SM11[2P×M−1:0]の個数(2P×M)から2P(1サイクル分)を差し引いて得られる値(2P×(M−1))に設定される。設定データSET2B[X−1:0]の値が第1基準値以上である場合には、設定データ調整回路360は、ステップs29において、設定データSET1B[1:0]の値を1つ増加し、設定データSET2B[X−1:0]の値を2P減少する。その後、設定データ調整回路360はステップs30を実行する。一方で、設定データSET2B[X−1:0]の値が第1基準値未満である場合には、設定データ調整回路360はステップs30を実行する。
ステップs30では、設定データ調整回路360は、設定データSET2B[X−1:0]の値が第2基準値以上であるか否かを判定する。第2基準値は第1基準値よりも小さい値である。第2基準値は、例えば、2P(1サイクル分)に対して、エッジ検出単位を構成するSM13[Y−1:0]の個数Yを足し合わせて得られる値(2P+Y)に設定される。設定データ調整回路360は、設定データSET2B[X−1:0]が第2基準値以下の場合には、ステップs31において、設定データSET1B[1:0]の値を1つ減少し、設定データSET2B[X−1:0]の値を2P増加する。その後、設定データ調整回路360は、ステップs32を実行して、設定データSET1B[1:0],SET2B[X−1:0]を出力する。ステップs30において、設定データSET2B[X−1:0]の値が第2基準値未満である場合には、設定データ調整回路360はステップs32を実行して、設定データSET1B[1:0],SET2B[X−1:0]を出力する。
設定データ調整回路360は、クロック信号CLKのライズエッジが検出されるたびに、ステップs22以降の処理を実行する。
このように、設定データ調整回路360は、トレーニングモードにおいて、上位制御回路31からの設定データSET1A[1:0],SET2A[X−1:0]をそれぞれ設定データSET1B[1:0],SET2B[X−1]としている。そして、設定データ調整回路360は、トレーニングモードからノーマルモードになると、アップ信号Up及びダウン信号Dwに基づいて、設定データSET1B[1:0],SET2B[X−1]を調整している。したがって、設定データ調整回路360は、ノーマルモードにおいて、初期調整後の設定データSET1B[1:0],SET2B[X−1:0]をアップ信号Up及びダウン信号Dwに基づいて調整する。
次に設定データ調整回路361の動作について説明する。図88に示されるように、設定データ調整回路361は、ステップs41において、クロック信号CLKのライスエッジを検出すると、ステップs42において、アップデイトイネーブル信号ENupdがHighレベルか否かを判定する。設定データ調整回路361は、アップデイトイネーブル信号ENupdがHighレベルのときには、つまりノーマルモードにおいてリード処理中ではないときには、ステップs43において、設定データ調整回路360からの設定データSET1B[1:0],SET2B[X−1:0]をそれぞれ設定データSET1C[1:0],SET2C[X−1:0]とし、ステップs44において、設定データSET1C[1:0],SET2C[X−1:0]を出力する。したがって、ノーマルモードにおいてリード処理中ではないときには、設定データSET1C[1:0]=設定データSET1B[1:0]となり、設定データSET2C[X−1:0]=設定データSET2B[X−1:0]となる。
一方で、ステップs42において、アップデイトイネーブル信号ENupdがLowレベルのときには、つまりトレーニングモードあるいはリード処理中のときには、設定データ調整回路361は、ステップs45において、アップ信号UpがHighレベルか否かを判定する。アップ信号UpがLowレベルのときには、設定データ調整回路361は、ステップs47において、ダウン信号DwがHighレベルか否かを判定する。設定データ調整回路361は、アップ信号UpがHighレベルのときには、ステップs46において、設定データSET2C[X−1:0]の値を1つ増加させる。そして、設定データ調整回路361はステップs47を実行する。
ステップs47において、ダウン信号DwがLowレベルのときには、設定データ調整回路361はステップs44を実行して、設定データSET1C[1:0],SET2C[X−1:0]を出力する。一方で、ステップs47において、ダウン信号DwがHighレベルのときには、ステップs48において、設定データ調整回路361は、設定データSET2C[X−1:0]の値を1つ減少させる。そして、設定データ調整回路361はステップs44を実行して、設定データSET1C[1:0],SET2C[X−1:0]を出力する。
設定データ調整回路361は、クロック信号CLKのライズエッジが検出されるたびに、ステップs42以降の処理を実行する。
このように、設定データ調整回路361は、ノーマルモードにおいてリード処理中ではないときには、設定データ調整回路360で調整される設定データSET1B[1:0],SET2B[X−1:0]をそれぞれ設定データSET1C[1:0],SET2C[X−1]として出力する。したがって、ノーマルモードにおいてリード処理中ではないときには、設定データ調整回路361から出力される設定データSET1C[1:0],SET2C[X−1]は、アップ信号Up及びダウン信号Dwに基づいて調整される。また、設定データ調整回路361は、リード処理中のときには、アップ信号Up及びダウン信号Dwに基づいて設定データSET2C[X−1:0]を調整するものの、設定データSET1C[1:0]は調整しない。したがって、リード処理中では、設定データ調整回路361から出力される設定データSET2C[X−1]はアップ信号Up及びダウン信号Dwに基づいて調整され、リード処理中では、リード処理中ではない状態からリード処理中に変化した際の設定データSET1B[1:0]が常に設定データSET1C[1:0]として設定データ調整回路361から出力される。
以上の説明から理解できるように、DQS制御回路36は、トレーニングモードからノーマルモードに切り替わった直後においては、DQSエッジ遅延時間DTdqsに基づいて調整された設定データSET1[1:0],SET2[X−1:0]をDQSエッジ検出回路10に出力する。そして、ノーマルモードにおいてリード処理中ではないときには、DQS制御回路36は、設定データSET1[1:0],SET2[X−1:0]の両方をアップ信号Up及びダウン信号Dwに基づいて調整する。一方で、ノーマルモードにおいてリード処理中のときには、DQS制御回路36は、設定データSET1[1:0],SET2[X−1:0]のうち設定データSET2[X−1:0]だけをアップ信号Up及びダウン信号Dwに基づいて調整する。
DQS制御回路36がこのように設定データSET2[X−1:0]を制御することによって、データストローブ信号DQSのエッジのタイミングのロングタームジッタにより、当該エッジのタイミングが徐々に変化する場合であっても、DQSエッジ検出回路10では、上述の図86に示されるように、ライズエッジ検出期間195Rの中央付近にデータストローブ信号DQSのライズエッジを、フォールエッジ検出期間195Fの中央付近にデータストローブ信号DQSのフォールエッジを位置させることができる。よって、
トレーニングモードからノーマルモードに切り替わった後に、データストローブ信号DQSのエッジのタイミングが徐々に変化したとしも、データリード回路5は、リードデータRD0の値を適切に取得することができる。以下にこの点について説明する。
設定データSET2[X−1:0]の値は、処理単位決定回路120の決定回路123が、選択対象単位からエッジ検出単位を選択する範囲を示している。具体的には、設定データSET2[X−1:0]の値が大きいほど、選択対象単位を構成する複数のサンプル値SM12[2P×M−2:1]のうち、上位側のサンプル値SM12[α]〜SM12[α+Y−1]がエッジ検出単位として選択される。つまり、設定データSET2[X−1:0]の値が大きいほど、選択対象単位でのエッジ検出単位の範囲が上位側に移動する。
上述の図87に示されるように、ステップs24においてアップ信号UpがHighレベルのときには、ステップs25において設定データSET2B[X−1:0]の値が1つ増加する。ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも上位側にずれている場合にアップ信号UpがHighレベルに設定されることから、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも上位側にずれている場合には、設定データSET2[X−1:0]の値が1つ増加する。設定データSET2[X−1:0]の値が1つ増加すると、選択対象単位でのエッジ検出単位の範囲が1ビットだけ上位側に移動する。つまり、選択対象単位でのライズエッジ検出単位の範囲が1ビットだけ上位側に移動する。したがって、ライズエッジデータREG[2P−1:0]において、ビット位置Pよりも上位側にずれていた“1”を示すデータのビット位置が、ビット位置Pに近づくようになる。つまり、データストローブ信号DQSのライズエッジのタイミングがライズエッジ検出期間195Rの中央付近に近づくようになる。
一方で、上述のステップs26においてダウン信号DwがHighレベルのときには、ステップs27において設定データSET2B[X−1:0]の値が1つ減少する。ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも下位側にずれている場合にダウン信号DwがHighレベルに設定されることから、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置が、ビット位置Pよりも下位側にずれている場合には、設定データSET2[X−1:0]の値が1つ減少する。設定データSET2[X−1:0]の値が1つ減少すると、選択対象単位でのエッジ検出単位の範囲が1ビットだけ下位側に移動する。つまり、選択対象単位でのライズエッジ検出単位の範囲が1ビットだけ下位側に移動する。したがって、ライズエッジデータREG[2P−1:0]において、ビット位置Pよりも下位側にずれていた“1”を示すデータのビット位置が、ビット位置Pに近づくようになる。つまり、データストローブ信号DQSのライズエッジのタイミングがライズエッジ検出期間195Rの中央付近に近づくようになる。
本実施の形態では、ノーマルモードにおいては、設定データSET2[X−1:0]が常にアップ信号Up及びダウン信号Dwに基づいて調整されることから、データストローブ信号DQSのエッジのタイミングが徐々に変化したとしても、ライズエッジデータREG[2P−1:0]において“1”を示すデータのビット位置を中央付近のビット位置とすることができる。よって、データストローブ信号DQSのエッジのタイミングが徐々に変化したとしても、データストローブ信号DQSのライズエッジのタイミングをライズエッジ検出期間195Rの中央付近に位置させることができる。また、フォールエッジのタイミングは、ライズエッジのタイミングと同様に変化することから、設定データSET2[X−1:0]をアップ信号Up及びダウン信号Dwに基づいて調整することによって、データストローブ信号DQSのフォールエッジのタイミングをフォールエッジ検出期間195Fの中央付近に位置させることができる。
特に、本実施の形態では、リード処理中に設定データSET2[X−1:0]をアップ信号Up及びダウン信号Dwに基づいて調整することから、リードコマンドRDCが連続して発行され、リードデータRDが長期間連続して読み出される場合にデータストローブ信号DQSのエッジのタイミングが変化するときであっても、データストローブ信号DQSのライズエッジ及びフォールエッジのタイミングを、ライズエッジ検出期間195R及びフォールエッジ検出期間195Fの中央付近にそれぞれ位置させることができる。よって、記憶装置2から長期間連続してリードデータRDが読み出される場合に、データストローブ信号DQSにおいてエッジ間隔が長くなったり短くなったりしたとしても、当該リードデータRDを適切に取得することができる。
ここで、データストローブ信号DQSのエッジのタイミングが徐々に早くなっていき、アップ信号Upが連続してHighレベルを示すことにより、設定データSET2[X−1:0]の値が最大値である“Q−1”になってしまった後は、アップ信号UpがHighレベルを示す場合であっても、設定データSET2[X−1:0]の値を大きくすることができない。同様に、設定データSET2[X−1:0]の値が最小値である“0”になってしまった後は、ダウン信号DwがHighレベルを示す場合であっても、設定データSET2[X−1:0]の値を小さくすることができない。
このような場合には、データストローブ信号DQSのライズエッジ及びフォールエッジのタイミングが、ライズエッジ検出期間195R及びフォールエッジ検出期間195Fの中央付近から端の方へ徐々に近づいていき、比較対象リード回路900のようにリードデータRDを適切に取得できない可能性がある。
そこで、本実施の形態では、上述のステップs28において、設定データSET2B[X−1:0]の値が第1基準値(上記の例では、2P×(M−1))以上である場合には、設定データSET1B[1:0]の値を1つ増加するとともに、設定データSET2B[X−1:0]の値を2P(1サイクル分)減少している。つまり、選択対象単位が得られるサンプリング期間である第2処理単位期間192を、設定データSET1B[1:0]の値を1つ増加しない場合よりも1サイクル分遅れさせ、かつ選択対象単位でのエッジ検出単位の範囲を1サイクル分だけ下位側に移動させている。これにより、選択対象単位でのエッジ検出単位の範囲を端の方から中央の方に移動させつつ、設定データSET1B[1:0]の値を1つ増加しない場合と同じエッジ検出単位を選択することができる。よって、アップ信号Upが連続してHighレベルを示す場合であっても、より確実に設定データSET2[X−1:0]の値を大きくすることができ、データストローブ信号DQSのライズエッジ及びフォールエッジを、ライズエッジ検出期間195R及びフォールエッジ検出期間195Fの中央付近に位置させることができる。
同様に、本実施の形態では、設定データSET2B[X−1:0]の値が第2基準値(上記の例では、2P+Y)以下である場合には、設定データSET1B[1:0]の値を1つ減少するとともに、設定データSET2B[X−1:0]の値を2P(1サイクル分)増加している。つまり、選択対象単位が得られるサンプリング期間である第2処理単位期間192を、設定データSET1B[1:0]の値を1つ減少しない場合よりも1サイクル分早くし、かつ選択対象単位でのエッジ検出単位の範囲を1サイクル分だけ上位側に移動させている。これにより、選択対象単位でのエッジ検出単位の範囲を端の方から中央の方に移動させつつ、設定データSET1B[1:0]の値を1つ減少しない場合と同じエッジ検出単位を選択することができる。よって、ダウン信号Dwが連続してHighレベルを示す場合であっても、より確実に設定データSET2[X−1:0]の値を小さくすることができ、データストローブ信号DQSのライズエッジ及びフォールエッジを、ライズエッジ検出期間195R及びフォールエッジ検出期間195Fの中央付近に位置させることができる。
なお、リード処理中に、設定データSET1B[1:0]の値を変化させると、バースト的に出力される各リードデータRDを適切に取得することができないことから、本実施の形態では、上述のように、設定データSET1B[1:0]の調整はリード処理中ではないときに行っている。
DQ制御回路37−yは、DQS制御回路36と同じ回路構成を有しており、DQS制御回路36と同様に動作する。DQ制御回路37−yでは、選択回路372は、選択回路362と同様に、トレーニングモードにおいて、設定データSET11A−y[1:0],SET12A−y[X−1:0]をそれぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力する。したがって、トレーニングモードからノーマルモードに切り替わった直後においては、DQ制御回路37−yからは、初期調整後の設定データSET11−y[1:0],SET12−y[X−1:0]がRD取得回路20−yに出力される。
また、選択回路372は、ノーマルモードでは、リード処理中のときには、設定データSET11B−y[1:0],SET12B−y[X−1:0]をそれぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力し、リード処理中ではないときには、設定データSET11C−y[1:0],SET12C−y[X−1:0]をそれぞれ設定データSET11−y[1:0],SET12−y[X−1:0]として出力する。
また、選択回路372から出力されるアップデイトイネーブル信号ENupd−yはリード処理中にはLowレベルとなり、リード処理中ではないときにはHighレベルとなる。
設定データ調整回路370は、設定データ調整回路360と同様に、トレーニングモードにおいて、上位制御回路31からの設定データSET11A−y[1:0],SET12A−y[X−1:0]をそれぞれ設定データSET11B−y[1:0],SET12B−y[X−1]としている。そして、設定データ調整回路370は、トレーニングモードからノーマルモードになると、アップ信号Up及びダウン信号Dwに基づいて、設定データSET11B−y[1:0],SET12B−y[X−1]を調整している。したがって、設定データ調整回路370は、ノーマルモードにおいて、初期調整後の設定データSET11B−y[1:0],SET12B−y[X−1:0]をアップ信号Up及びダウン信号Dwに基づいて調整する。
設定データ調整回路371は、設定データ調整回路361と同様に、ノーマルモードにおいてリード処理中ではないときには、設定データ調整回路370で調整される設定データSET11B−y[1:0],SET12B−y[X−1:0]をそれぞれ設定データSET11C−y[1:0],SET12C−y[X−1]として出力する。したがって、ノーマルモードにおいてリード処理中ではないときには、設定データ調整回路371から出力される設定データSET11C−y[1:0],SET12C−y[X−1]は、アップ信号Up及びダウン信号Dwに基づいて調整される。また、設定データ調整回路371は、リード処理中のときには、アップ信号Up及びダウン信号Dwに基づいて設定データSET12C−y[X−1:0]を調整するものの、設定データSET11C−y[1:0]は調整しない。したがって、リード処理中では、設定データ調整回路371から出力される設定データSET12C−y[X−1]はアップ信号Up及びダウン信号Dwに基づいて調整され、リード処理中では、リード処理中ではない状態からリード処理中に変化した際の設定データSET11B−y[1:0]が常に設定データSET11C−y[1:0]として設定データ調整回路371から出力される。
このような構成のDQ制御回路37−yは、トレーニングモードからノーマルモードに切り替わった直後においては、DQエッジ遅延時間DTdq−yに基づいて調整された設定データSET11−y[1:0],SET12−y[X−1:0]をRD取得回路20−yに出力する。そして、ノーマルモードにおいてリード処理中ではないときには、DQ制御回路37−yは、設定データSET11−y[1:0],SET12−y[X−1:0]の両方をアップ信号Up及びダウン信号Dwに基づいて調整する。一方で、ノーマルモードにおいてリード処理中のときには、DQ制御回路37−yは、設定データSET11−y[1:0],SET12−y[X−1:0]のうち設定データSET12−y[X−1:0]だけをアップ信号Up及びダウン信号Dwに基づいて調整する。
DQS制御回路37−yがこのように設定データSET12−y[X−1:0]を制御することによって、データストローブ信号DQSのエッジのタイミングのロングタームジッタにより、当該エッジのタイミングが徐々に変化し、それに応じてリードデータRDの出力タイミングが徐々に変化する場合であっても、RD取得回路20−yでは、ライズ側データ取得単位を構成するサンプル値SMR[2P−1:0]が得られるサンプリング期間196Rの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのライズエッジに対応するリードデータRDrの出力期間の中央が位置するようになり、フォール側データ取得単位を構成するサンプル値SMF[2P−1:0]が得られるサンプリング期間196Fの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのフォールエッジに対応するリードデータRDfの出力期間の中央が位置するようになる。
また、DQS制御回路37−yにおいても、設定データSET12B−y[X−1:0]の値が第1基準値以上である場合には、設定データSET11B−y[1:0]の値が1つ増加するとともに、設定データSET12B−y[X−1:0]の値が2P減少する。つまり、選択対象単位が得られるサンプリング期間である第2処理単位期間を、設定データSET11B−y[1:0]の値を1つ増加しない場合よりも1サイクル分遅れさせ、かつ選択対象単位でのデータ取得単位の範囲を1サイクル分だけ下位側に移動させている。これにより、選択対象単位でのデータ取得単位の範囲を端の方から中央の方に移動させつつ、設定データSET11B−y[1:0]の値を1つ増加しない場合と同じデータ取得単位を選択することができる。よって、アップ信号Upが連続してHighレベルを示す場合であっても、設定データSET12−y[X−1:0]の値をより確実に大きくすることができる。その結果、ライズ側データ取得単位が得られるサンプリング期間196Rの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのライズエッジに対応するリードデータRDrの出力期間の中央をより確実に位置させることができる。また、フォール側データ取得単位が得られるサンプリング期間196Fの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのフォールエッジに対応するリードデータRDfの出力期間の中央をより確実に位置させることができる。
同様に、DQS制御回路37−yでは、設定データSET12B−y[X−1:0]の値が第2基準値以下である場合には、設定データSET11B−y[1:0]の値が1つ減少するとともに、設定データSET12B−y[X−1:0]の値が2P増加する。つまり、選択対象単位が得られるサンプリング期間である第2処理単位期間を、設定データSET11B−y[1:0]の値を1つ減少しない場合よりも1サイクル分早くし、かつ選択対象単位でのデータ取得単位の範囲を1サイクル分だけ上位側に移動させている。これにより、選択対象単位でのデータ取得単位の範囲を端の方から中央の方に移動させつつ、設定データSET11B−y[1:0]の値を1つ減少しない場合と同じデータ取得単位を選択することができる。よって、ダウン信号Dwが連続してHighレベルを示す場合であっても、設定データSET12−y[X−1:0]の値をより確実に小さくすることができる。その結果、ライズ側データ取得単位が得られるサンプリング期間196Rの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのライズエッジに対応するリードデータRDrの出力期間の中央をより確実に位置させることができる。また、フォール側データ取得単位が得られるサンプリング期間196Fの中央付近に、データ信号DQ[y]での、データストローブ信号DQSのフォールエッジに対応するリードデータRDfの出力期間の中央をより確実に位置させることができる。
なお、上記と同様に、リード処理中に、設定データSET11B−y[1:0]の値を変化させると、バースト的に出力される各リードデータRDを適切に取得することができないことから、設定データSET11B−y[1:0]の調整はリード処理中ではないときに行っている。
以上のように、本実施の形態に係るデータリード回路5では、第2処理単位期間192においてオーバーサンプリング回路100で得られた、データストローブ信号DQSの第1所定数のサンプル値を選択対象単位として保持し、当該選択対象単位から、当該第1所定数よりも小さい第2所定数のサンプル値から成るエッジ検出単位を決定している。これにより、データストローブ信号DQSについての比較的多い数のサンプル値から、エッジを検出する際に使用する複数のサンプル値を適切に決定することができる。よって、データ信号DQが示すリードデータRDを適切に取得することができる。
また本実施の形態では、データストローブ信号DQSのライズエッジとフォールエッジとを別々に検出していることから、ライズエッジ検出期間及びフォールエッジ検出期間を大きく設定することができる。上記の例では、1サイクル分のライズエッジ検出期間及びフォールエッジ検出期間を設定している。
一方で、比較対象リード回路900では、データストローブ信号DQSのライズエッジとフォールエッジとを区別せずに検出していることから、処理単位期間990は半サイクル分となり、データストローブ信号DQSのエッジが処理単位期間990の始点あるいは終点の近傍に位置しやくなる。よって、処理単位期間990においてデータストローブ信号DQSのエッジがまったく存在しない状況や、処理単位期間990においてデータストローブ信号DQSのエッジが複数存在する状況が発生しやすい。
本実施の形態では、データストローブ信号DQSのライズエッジとフォールエッジとを別々に検出することによって、半サイクルよりも大きいライズエッジ検出期間及びフォールエッジ検出期間を設定することができる。したがって、データストローブ信号DQSのライズエッジのタイミングが変化したとしても、当該ライズエッジがライズエッジ検出期間の始点あるいは終点の近傍に位置しにくくなり、ライズエッジ検出期間においてライズエッジがまったく存在しない状況や、複数のライズエッジが存在する状況が発生しにくくなる。同様に、データストローブ信号DQSのフォールエッジのタイミングが変化したとしても、当該フォールエッジがフォールエッジ検出期間の始点あるいは終点の近傍に位置しにくくなり、フォールエッジ検出期間においてフォールエッジがまったく存在しない状況や、複数のフォールエッジが存在する状況が発生しにくくなる。よって、リードデータRDをより適切に取得することができる。
以上のように、半導体記憶装置1は詳細に説明されたが、上記した説明は、全ての局面において例示であって、この発明がそれに限定されるものではない。また、上述した各種変形例は、相互に矛盾しない限り組み合わせて適用可能である。そして、例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。