(57)【要約】      （修正有）【課題】信号のタイミングの変動に対応するため、初期トレーニングと同じ処理を再実行する再トレーニングの実行時間を短くする半導体装置およびタイミング較正方法を提供する。【解決手段】遅延調整回路５３は、メモリ装置５２へのライトデータの遅延量を調整する。制御回路５４は、遅延調整回路５３の遅延量を設定する。記憶部５５は、遅延量を記憶する。制御回路５４は、記憶部５５に記憶されている遅延量またはその遅延量を基準とした量を遅延調整回路５３に設定したときのライトデータの書き込み結果に基づいて、記憶部５５に記憶されている遅延量を修正する。【選択図】図１
2018173782.tif 000002
【特許請求の範囲】
【請求項１】
メモリ装置へのライトデータまたはデータストローブ信号の遅延量を調整する遅延調整回路と、
前記遅延調整回路の遅延量を設定する制御回路と、
前記遅延量を記憶する記憶部とを備え、
前記制御回路は、前記記憶部に記憶されている前記遅延量または前記遅延量を基準とした量を前記遅延調整回路に設定したときの前記ライトデータの書き込み結果に基づいて、前記記憶部に記憶されている遅延量を修正する、半導体装置。
【請求項２】
前記制御回路は、第１の調整期間において、前記ライトデータの有効ウインドウのレフトエッジのタイミングが前記データストローブ信号のエッジのタイミングに一致するための前記遅延調整回路の遅延量を第１の遅延量として求め、前記ライトデータの有効ウインドウのライトエッジのタイミングが前記データストローブ信号のエッジのタイミングに一致するための前記遅延調整回路の遅延量を第２の遅延量として求め、前記第１の遅延量と前記第２の遅延量の平均値を第３の遅延量として求めて、前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量を前記記憶部に書き込み、
前記制御回路は、通常動作時には、前記記憶部に記憶されている前記第３の遅延量を前記遅延調整回路の遅延量に設定し、
前記制御回路は、前記第１の調整期間後に設けられる第２の調整期間において、前記記憶部に記憶されている前記第１の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果と、前記記憶部に記憶されている前記第２の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果とに基づいて、前記記憶部に記憶されている前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量のうちの少なくとも１つを修正、または全てを修正しない、請求項１記載の半導体装置。
【請求項３】
前記制御回路は、前記第２の調整期間において、前記記憶部に記憶されている前記第１の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果が正常で、かつ前記記憶部に記憶されている前記第２の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果が異常の場合には、前記記憶部に記憶されている前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量を第１の量だけ減少または増加させる、請求項２記載の半導体装置。
【請求項４】
前記制御回路は、前記第２の調整期間において、前記記憶部に記憶されている前記第１の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果が異常で、かつ前記記憶部に記憶されている前記第２の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果が正常の場合には、前記記憶部に記憶されている前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量を第１の量だけ増加または減少させる、請求項２記載の半導体装置。
【請求項５】
前記制御回路は、前記第２の調整期間において、前記記憶部に記憶されている前記第１の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果が異常で、かつ前記記憶部に記憶されている前記第２の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果が異常の場合には、前記記憶部に記憶されている前記第１の遅延量を第１の量だけ増加または減少させ、前記記憶部に記憶されている前記第２の遅延量を前記第１の量だけ減少または増加させ、前記記憶部に記憶されている前記第３の遅延量を変化させない、請求項２記載の半導体装置。
【請求項６】
前記制御回路は、前記第２の調整期間時に、前記ライトデータを前記メモリ装置内のトレーニング専用のメモリに書き込む、請求項２記載の半導体装置。
【請求項７】
前記制御回路は、前記第２の調整期間に、前記ライトデータを前記メモリ装置内のユーザ使用可能メモリの予め定められた領域に書込む、請求項２記載の半導体装置。
【請求項８】
前記制御回路は、前記第２の調整期間に、前記ライトデータとして、トレーニング用のデータを前記メモリ装置に書き込む、請求項２記載の半導体装置。
【請求項９】
前記制御回路は、前記第２の調整期間に、前記ライトデータとして、外部から与えられた通常データを前記メモリ装置に書き込む、請求項２記載の半導体装置。
【請求項１０】
前記制御回路は、前記第２の調整期間に、前記通常データの書き込み結果が異常の場合に、前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量のうちの少なくとも１つを修正後に、前記通常データを再度書き込む、請求項９記載の半導体装置。
【請求項１１】
前記制御回路は、前記第２の調整期間において、前記第１の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果と、前記第２の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果とに基づいて、前記第２の調整期間を設ける時間間隔を変更する、請求項２記載の半導体装置。
【請求項１２】
前記制御回路は、前記半導体装置内の温度変動または電圧の変動に基づいて、前記第２の調整期間を設ける時間間隔を変更する、請求項２記載の半導体装置。
【請求項１３】
前記制御回路は、第１の調整期間において、前記ライトデータの有効ウインドウのレフトエッジのタイミングが前記データストローブ信号のエッジのタイミングに一致するための前記遅延調整回路の遅延量を第１の遅延量として求め、前記ライトデータの有効ウインドウのライトエッジのタイミングが前記データストローブ信号のエッジのタイミングに一致するための前記遅延調整回路の遅延量を第２の遅延量として求め、前記第１の遅延量と前記第２の遅延量の平均値を第３の遅延量として求めて、前記第１の遅延量、前記第２の遅延量、前記第３の遅延量を前記記憶部に書き込み、
前記制御回路は、通常動作時には、前記記憶部に記憶されている前記第３の遅延量を前記遅延調整回路の遅延量に設定し、
前記制御回路は、前記第１の調整期間後に設けられる第２の調整期間において、少なくとも、前記記憶部に記憶されている前記第１の遅延量よりも所定量多い遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果、および前記記憶部に記憶されている前記第２の遅延量よりも前記所定量少ない遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果に基づいて、前記記憶部に記憶されている前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量のうち少なくとも１つを修正、または全てを修正しない、請求項１記載の半導体装置。
【請求項１４】
前記制御回路は、前記第２の調整期間において、前記記憶部に記憶されている前記第１の遅延量よりもｋ×ΔＤだけ大きい遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果を前記ライトデータの有効ウインドウのレフトエッジ検査用の書込み結果として求め、
前記制御回路は、前記ライトデータのレフトエッジ検査用の書込み結果が異常となるまでｋをＮ（≧２）から順次減少させることによって、１個以上の前記レフトエッジ検査用の書込み結果を求め、
前記制御回路は、前記第２の調整期間において、前記記憶部に記憶されている前記第２の遅延量よりもｋ×ΔＤだけ小さい遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果を前記ライトデータの有効ウインドウのライトエッジ検査用の書込み結果として求め、
前記制御回路は、前記ライトデータのライトエッジ検査用の書込み結果が異常となるまでｋをＮ（≧２）から順次減少させることによって、１個以上の前記のライトエッジ検査用の書込み結果を求め、
前記制御回路は、１個以上の前記レフトエッジ検査用の書込み結果、および１個以上の前記レフトエッジ検査用の書込み結果に基づいて、前記記憶部に記憶されている前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量のうち少なくとも１つを修正、または全てを修正しない、請求項１３記載の半導体装置。
【請求項１５】
前記制御回路は、前記半導体装置内の温度変動または電圧の変動に基づいて、前記Ｎを変更する、請求項１４記載の半導体装置。
【請求項１６】
前記制御回路は、前記記憶部が保持する前記第１の遅延量、前記第２の遅延量、および前記第３の遅延量のいずれかの値を出力して前記遅延調整回路の前記遅延量を設定する選択回路を備える、請求項２記載の半導体装置。
【請求項１７】
前記制御回路は、第１の調整期間において、前記遅延調整回路の少なくとも第１または第２の遅延量を求めて、前記遅延量を前記記憶部に書き込み、
前記制御回路は、通常動作時には、前記記憶部に記憶されている前記遅延量に基づいて前記遅延調整回路の遅延量に設定し、
前記制御回路は、前記第１の調整期間後に設けられる第２の調整期間において、前記記憶部に記憶されている前記第１または第２の遅延量を前記遅延調整回路の遅延量に設定したときの前記ライトデータの書き込み結果に基づいて、前記記憶部に記憶されている前記遅延量のうちの少なくとも１つを修正、または全てを修正しない、請求項１記載の半導体装置。
【請求項１８】
メモリ装置へのライトデータまたはデータストローブ信号の遅延量を調整する遅延調整回路を用いて、前記メモリ装置へのライトデータとデータストローブ信号のタイミングの関係を較正する方法であって、
第１の調整期間において、前記ライトデータの有効ウインドウのタイミングが前記データストローブ信号のエッジのタイミングと一致するように前記遅延調整回路の遅延量を求めて、記憶部に書込むステップと、
前記第１の調整期間後に設けられる第２の調整期間において、前記記憶部に記憶されている遅延量を前記遅延調整回路に設定し、前記遅延量の設定後の前記ライトデータの書き込み結果に基づいて、前記記憶部に記憶されている遅延量を修正するステップとを備える、タイミング較正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置およびタイミング較正方法に関し、たとえば、メモリを内蔵した半導体装置に好適に利用できるものである。
【背景技術】
【０００２】
従来から、メモリの書込み動作の実行に必要な信号のタイミングを較正するトレーニング機能を備えた装置が知られている。たとえば、特許文献１に記載のメモリ制御装置が、１つまたは複数の書き込み−読み出し−検証の動作を実行してデータストローブ信号とクロック信号との間のクロックサイクル関係を較正する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−４３２５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、初期トレーニング後において、メモリまたはメモリ制御装置の温度また電圧が変動した場合に、較正された信号のタイミングが変動するため、再度トレーニングを実行することが必要となる。
【０００５】
特許文献１に記載されているトレーニングは、長時間を要するとともに、トレーニング期間中には、メモリの通常動作が妨げられる。そのため、信号のタイミングの変動に対応するため、初期トレーニングと同じ処理を再度実行すると、メモリを利用する半導体装置のパフォーマンスが低下する。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施形態の半導体装置において、制御回路は、記憶部に記憶されている遅延量または遅延量を基準とした量を遅延調整回路に設定したときのライトデータの書き込み結果に基づいて、記憶部に記憶されている遅延量を修正する。
【発明の効果】
【０００８】
一実施形態によれば、再トレーニングの実行時間を短くすることができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態の半導体装置の構成を表わす図である。
【図２】第２の実施形態の半導体装置の構成を表わす図である。
【図３】第３の実施形態の半導体装置の構成を表わす図である。
【図４】第３の実施形態における遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【図５】コードの修正方法を定めたルールＲＡを表わす図である。
【図６】初期トレーニングによって設定されるコードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを説明するための図である。
【図７】（ａ）は、ルールＲＡのパターンＡ２が適用される例を表わす図である。（ｂ）は、ルールＲＡのパターンＡ３が適用される例を表わす図である。（ｃ）は、ルールＲＡのパターンＡ４が適用される例を表わす図である。
【図８】第４の実施形態の半導体装置の構成を表わす図である。
【図９】第４の実施形態の遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【図１０】第５の実施形態の半導体装置の構成を表わす図である。
【図１１】第５の実施形態の遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【図１２】第６の実施形態の遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【図１３】図１２のステップＳ４０３におけるレフトエッジ検査の手順を説明するための図である。
【図１４】図１２のステップＳ４０４におけるレフトエッジ検査の手順を説明するための図である。
【図１５】コードの修正方法を定めたルールＲＢを表わす図である。
【図１６】（ａ）は、ルールＲＢのパターンＴ５が適用される例を表わす図である。（ｂ）は、ルールＲＢのパターンＴ１６が適用される例を表わす図である。
【図１７】第７の実施形態の遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【図１８】再トレーニングの周期の変化を表わす図である。
【図１９】第８の実施形態の半導体装置の構成を表わす図である。
【図２０】第８の実施形態の遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【図２１】第９の実施形態の遅延調整回路の遅延量の調整手順を表わすフローチャートである。
【発明を実施するための形態】
【００１０】
以下、実施の形態について、図面を用いて説明する。
［第１の実施形態］
図１は、第１の実施形態の半導体装置７１の構成を表わす図である。
【００１１】
この半導体装置７１は、メモリコントローラ５１と、メモリ装置５２とを備える。メモリコントローラ５１は、遅延調整回路５３と、制御回路５４と、記憶部５５とを備える。
【００１２】
遅延調整回路５３は、メモリ装置５２へのライトデータの遅延量を調整する。
制御回路５４は、遅延調整回路５３の遅延量を設定する。
【００１３】
記憶部５５は、遅延量を記憶する。
制御回路５４は、記憶部５５に記憶されている遅延量またはその遅延量を基準とした量を遅延調整回路５３に設定したときのライトデータの書き込み結果に基づいて、記憶部５５に記憶されている遅延量を修正する。
【００１４】
以上のように、本実施の形態の半導体装置によれば、記憶部５５に記憶されている、メモリ装置５２へのライトデータの遅延量を調整する遅延調整回路５３の遅延量またはその遅延量を基準とした量を遅延調整回路５３に設定したときのライトデータの書き込み結果に基づいて、記憶部５５に記憶されている遅延量を修正する。本実施の形態では、第１の調整期間の後の第２の調整期間に、第１の調整期間によって得られ、記憶部５５に記憶されている遅延量を全く使わない従来の方式と比べて、第２の調整期間に要する時間を短くすることができる。たとえば、第１の調整期間は、初期トレーニングとし、第２の調整期間は、再トレーニングとしてもよい。
【００１５】
［第２の実施形態］
図２は、第２の実施形態の半導体装置７２の構成を表わす図である。
【００１６】
この半導体装置７２は、メモリコントローラ６１と、メモリ装置５２とを備える。メモリコントローラ６１は、遅延調整回路６３と、制御回路６４と、記憶部６５とを備える。
【００１７】
遅延調整回路６３は、メモリ装置５２へのデータストローブ信号の遅延量を調整する。
記憶部６５は、遅延量を記憶する。
【００１８】
制御回路６４は、記憶部６５に記憶されている遅延量またはその遅延量を基準とした量を遅延調整回路６３に設定したときのライトデータの書き込み結果に基づいて、記憶部６５に記憶されている遅延量を修正する。
【００１９】
以上のように、本実施の形態の半導体装置によれば、記憶部６５に記憶されている、メモリ装置５２へのデータストローブ信号の遅延量を調整する遅延調整回路６３の遅延量またはその遅延量を基準とした量を遅延調整回路６３に設定したときのライトデータの書き込み結果に基づいて、記憶部６５に記憶されている遅延量を修正する。本実施の形態では、第１の調整期間の後の第２の調整期間に、第１の調整期間によって得られ、記憶部６５に記憶されている遅延量を全く使わない従来の方式と比べて、第２の調整期間に要する時間を短くすることができる。たとえば、第１の調整期間は、初期トレーニングとし、第２の調整期間は、再トレーニングとしてもよい。
【００２０】
［第３の実施形態］
図３は、第３の実施形態の半導体装置７３の構成を表わす図である。
【００２１】
この半導体装置７３は、メモリ装置１３と、メモリコントローラ３２とを備える。
メモリコントローラ３２は、遅延調整回路１２と、制御回路２１と、双方向バッファＢＦ１と、双方向バッファＢＦ２とを備える。
【００２２】
双方向バッファＢＦ１は、メモリ装置１３から出力されるリードデータＲＤＱを受信する。双方向バッファＢＦ１は、ライトデータＷＤＱをメモリ装置１３へ出力する。双方向バッファＢＦ２は、メモリ装置１３から出力されるリード用データストローブ信号ＲＤＱＳを受信する。双方向バッファＢＦ２は、ライト用データストローブ信号ＷＤＱＳをメモリ装置１３へ出力する。
【００２３】
メモリ装置１３は、トレーニング専用メモリ４１と、ユーザ使用可能メモリ４２とを備える。
【００２４】
メモリ装置１３は、入力されるライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、入力されるライトデータＷＤＱを取り込む。
【００２５】
トレーニング専用メモリ４１には、ライトデータＷＤＱの有効ウインドウのエッジのタイミングがライト用データストローブ信号ＷＤＱＳのエッジのタイミングと一致するように遅延調整回路１２の遅延量を設定するトレーニングにおいて、ライトデータＷＤＱとしてトレーニング用のテストデータが書き込まれる。トレーニング用のテストデータは、限られた時間内に信頼性の高い（通常動作中に誤動作となる可能性が低い）タイミング結果を得るため、タイミング条件がWorstとなるデータパターンが使用される。従って、トレーニング用のテストデータは、通常データとしては現れる確率が低いデータパターンであるため、トレーニング結果が実使用状態より厳しくなる傾向がある。
【００２６】
ユーザ使用可能メモリ４２は、通常動作時に、ユーザプログラムなどに基づいて、ライトデータＷＤＱとして外部から供給される通常データが書込まれる。
【００２７】
遅延調整回路１２は、複数段の遅延素子ＤＥ（１）〜ＤＥ（Ｎ）と、セレクタＳＬ１とを備える。遅延素子ＤＥ（１）〜ＤＥ（Ｎ）の各々は、たとえば、非反転バッファによって構成される。
【００２８】
セレクタＳＬ１は、遅延素子ＤＥ（１）〜ＤＥ（Ｎ）の各々からの出力を受ける。セレクタＳＬ１は、セレクタＳＬ２から出力されるコードに応じて、遅延素子ＤＥ（１）の入力、または遅延素子ＤＥ（１）〜ＤＥ（Ｎ）の出力のいずれかを出力する。たとえば、セレクタＳＬ１は、コードが「０」の場合には、遅延素子ＤＥ（１）の入力を選択する。セレクタＳＬ１は、コードが「ｉ」の場合は、遅延素子ＤＥ（ｉ）の出力を選択する。１つの遅延素子ＤＥによるライト用データストローブ信号ＷＤＱＳの遅延量をΔＤとする。
【００２９】
制御回路２１は、トレーニング制御回路２２と、初期トレーニングモジュール１０と、再トレーニングモジュール１１と、記憶部１９と、セレクタＳＬ２とを備える。記憶部１９は、レフトエッジ用レジスタ１４と、センタ用レジスタ１５と、ライトエッジ用レジスタ１６とを備える。
【００３０】
トレーニング制御回路２２は、メモリ装置１３およびメモリコントローラ３２を制御する。
【００３１】
初期トレーニングモジュール１０は、初期トレーニングを実行する。初期トレーニングモジュール１０は、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングがライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングと一致する（このタイミングでメモリ装置１３が有効ウインドウのレフトエッジを取り込む）よう遅延調整回路１２の遅延量を求めて、その遅延量を表わすコードＬ＿Ｄをレフトエッジ用レジスタ１４に書込む。初期トレーニングモジュール１０は、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングがライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングと一致する（このタイミングでメモリ装置１３が有効ウインドウのライトエッジを取り込む）よう遅延調整回路１２の遅延量を求めて、その遅延量を表わすコードＲ＿Ｄをライトエッジ用レジスタ１６に書込む。初期トレーニングモジュール１０は、コードＬ＿Ｄの遅延量とコードＲ＿Ｄの遅延量の平均の遅延量を表わすコードＣ＿Ｄをセンタ用レジスタ１５に書込む。ライトデータＷＤＱの有効ウインドウとは、ライトデータＷＤＱの１ビット分の期間（１ Ｕｎｉｔ-Ｉｎｔｅｒｖａｌ）のうち、ジッタ、セットアップ時間、およびホールド時間等を除く期間である。
【００３２】
インターフェースの高速化により、転送周期に対する電圧変動または温度変動によるライトデータＷＤＱの波形の劣化が占める割合が大きくなり、長期的にライトデータＷＤＱの有効ウインドウの幅が小さくなったり、有効ウインドウの位置が変化する。長期的な劣化を改善するために、再トレーニングが必要となる。再トレーニングモジュール１１は、再トレーニングを実行する。再トレーニングモジュール１１は、セレクタＳＬ２にレフトエッジ用レジスタ１４の出力を選択させることによって、レフトエッジ用レジスタ１４に保持されているコードＬ＿Ｄに対応する遅延量を遅延調整回路１２の遅延量に設定したときのライトデータＷＤＱの書き込み結果をレフトエッジ検査結果として求める。
【００３３】
再トレーニングモジュール１１は、セレクタＳＬ２にライトエッジ用レジスタ１６の出力を選択させることによって、ライトエッジ用レジスタ１６に保持されているコードＲ＿Ｄに対応する遅延量を遅延調整回路１２の遅延量に設定したときのライトデータＷＤＱの書き込み結果をライトエッジ検査結果として求める。
【００３４】
再トレーニングモジュール１１は、レフトエッジ検査結果と、ライトエッジ検査結果とに基づいて、レフトエッジ用レジスタ１４、ライトエッジ用レジスタ１６、センタ用レジスタ１５に保持されているコードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄのうちの少なくとも１つを修正、または全部を修正しない。
【００３５】
トレーニング制御回路２２は、通常動作時には、セレクタＳＬ２にセンタ用レジスタ１５の出力を選択させることによって、センタ用レジスタ１５に保持されているコードＣ＿Ｄに対応する遅延量を遅延調整回路１２の遅延量に設定する。これによって、通常動作時には、ライトデータＷＤＱの有効ウインドウのレフトエッジと有効ウインドウのライトエッジの間の中央のタイミングとライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングとが一致するようにできる。メモリ装置１３は、この中央のタイミングでライトデータＷＤＱを取り込む。
【００３６】
レフトエッジ用レジスタ１４は、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングに、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングが一致するように、ライト用データストローブ信号ＷＤＱＳの遅延調整回路１２による遅延量ＤＬを定めたコードＬ＿Ｄを記憶する。
【００３７】
ライトエッジ用レジスタ１６は、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングに、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングが一致するように、ライト用データストローブ信号ＷＤＱＳの遅延調整回路１２による遅延量ＤＲを定めたコードＲ＿Ｄを記憶する。
【００３８】
センタ用レジスタ１５は、ライトデータＷＤＱの有効ウインドウのレフトエッジと有効ウインドウのライトエッジとの間の中央のタイミングに、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングが一致するように、ライト用データストローブ信号ＷＤＱＳの遅延調整回路１２による遅延量ＤＣを定めたコードＣ＿Ｄを記憶する。遅延量ＤＣは、遅延量ＤＬと遅延量ＤＲの平均値である。
【００３９】
セレクタＳＬ２は、レフトエッジ用レジスタ１４から出力されるコード、センタ用レジスタ１５から出力されるコード、およびライトエッジ用レジスタ１６から出力されるコードのうちのいずれかをセレクタＳＬ１へ出力する。
【００４０】
図４は、第３の実施形態における遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【００４１】
ステップＳ１０１において、初期トレーニングモジュール１０は、初期トレーニングを実行する。初期トレーニングモジュール１０は、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングと、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングとが一致するように、遅延調整回路１２の遅延量ＤＬを表わすコードＬ＿Ｄを設定する。初期トレーニングモジュール１０は、セレクタＳＬ１に与えるコードを「０」から順番に増加させながら遅延量を増加させ、任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１に書込む。初期トレーニングモジュール１０は、トレーニング専用メモリ４１から書込んだテストデータを読出して、テストデータ（期待値）と、メモリ装置１３から読出したリードデータＲＤＱとが一致するかどうかを比較する。初期トレーニングモジュール１０は、両者が最初に一致したときのコードをコードＬ＿Ｄとして、レフトエッジ用レジスタ１４に書込む。初期トレーニングモジュール１０は、セレクタＳＬ１に与えるコードをコードＬ＿Ｄから順番に増加させながら遅延量を増加させ、任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１に書込む。初期トレーニングモジュール１０は、トレーニング専用メモリ４１から書込んだテストデータを読出して、テストデータ（期待値）と、メモリ装置１３から読出したリードデータＲＤＱとが一致するかどうかを比較する。初期トレーニングモジュール１０は、両者が最初に不一致になったときのコードよりも「１」だけ小さいコードをコードＲ＿Ｄとして、ライトエッジ用レジスタ１６に書込む。初期トレーニングモジュール１０は、コードＬ＿Ｄで定まる遅延量ＤＬと、コードＲ＿Ｄで定まる遅延量ＤＲとの平均値ＤＣを表わすコードＣ＿Ｄをセンタ用レジスタ１５に書込む。従来は、再トレーニングでも、このような初期トレーニングと同様の処理が繰り返されていたため、再トレーニングに要する時間が長いという問題があった。本実施の形態では、再トレーニングの処理を効率化する。
【００４２】
ステップＳ１０２において、再トレーニングモジュール１１は、一定時間ΔＴだけウエイトする。この間、メモリ装置１３への通常動作、通常データの書き込みおよび読出しが可能である。すなわち、ユーザの指示などに従って、トレーニング制御回路２２は、ユーザ使用可能メモリ４２へライトデータＷＤＱを書き込み、または、ユーザ使用可能メモリ４２からデータをリードデータＲＤＱとして読出すことができる。
【００４３】
ステップＳ１０３において、再トレーニングモジュール１１は、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定する。すなわち、再トレーニングモジュール１１は、セレクタＳＬ２にレフトエッジ用レジスタ１４の出力コードＬ＿ＤをセレクタＳＬ１へ出力させる。セレクタＳＬ１は、コードＬ＿Ｄに対応する遅延素子ＤＥ（ｉ）からの出力をドライバＤ２へ出力する。これによって、ライト用データストローブ信号ＷＤＱＳを遅延量ＤＬだけ遅延させることができる。
【００４４】
ステップＳ１０４において、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをドライバＤ１を介して、メモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、遅延量ＤＬを有するライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。
【００４５】
ステップＳ１０５において、再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。
【００４６】
ステップＳ１０６において、再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、メモリ装置１３へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する。
【００４７】
ステップＳ１０７において、再トレーニングモジュール１１は、遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定する。すなわち、再トレーニングモジュール１１は、セレクタＳＬ２にライトエッジ用レジスタ１６の出力コードＲ＿ＤをセレクタＳＬ１へ出力させる。セレクタＳＬ１は、コードＲ＿Ｄに対応する遅延素子ＤＥ（ｉ）からの出力をドライバＤ２へ出力する。これによって、ライト用データストローブ信号ＷＤＱＳを遅延量ＤＲだけ遅延させることができる。
【００４８】
ステップＳ１０８において、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをドライバＤ１を介して、メモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、遅延量ＤＲを有するライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。
【００４９】
ステップＳ１０９において、再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。
【００５０】
ステップＳ１１０において、再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、メモリ装置１３へ出力したテストデータ（ライトデータＷＤＱ、期待値を表わす）とが一致しているか否かを比較する。
【００５１】
ステップＳ１１１において、再トレーニングモジュール１１は、予め設定されたルールＲＡに従って、コードＬ＿Ｄ、コードＲ＿Ｄ、コードＣ＿Ｄのうちの少なくとも１つの修正が必要か否かを判断する。修正が必要な場合には、処理がステップＳ１１２に進み、修正が不要な場合には、処理がステップＳ１１３に進む。
【００５２】
ステップＳ１１２において、再トレーニングモジュール１１は、ルールＲＡに従って、コードＬ＿Ｄ、コードＲ＿Ｄ、コードＣ＿Ｄのうちの少なくとも１つを修正する。その後、処理がステップＳ１１３に進む。
【００５３】
ステップＳ１１３において、電源がオフとされない場合（ＮＯ）、処理がステップＳ１０２に戻り、電源がオフとされる場合（ＹＥＳ）、処理が終了する。
【００５４】
図５は、コードの修正方法を定めたルールＲＡを表わす図である。
パターンＡ１では、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときにライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致し、かつ遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときにライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。再トレーニングモジュール１１は、パターンＡ１のときには、いずれのコードも修正しない。
【００５５】
パターンＡ２では、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときに、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致し、かつ遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときに、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致となる。再トレーニングモジュール１１は、パターンＡ２のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「１」だけ小さくする。
【００５６】
パターンＡ３では、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときにライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致であり、かつ遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときにライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。再トレーニングモジュール１１は、パターンＡ３のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「１」だけ大きくする。
【００５７】
パターンＡ４では、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときにライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致であり、かつ遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときにライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致となる。再トレーニングモジュール１１は、パターンＡ４のときには、コードＬ＿Ｄを「１」だけ大きく、かつコードＲ＿Ｄを「１」だけ小さくし、コードＣ＿Ｄを変更しない。
【００５８】
図６は、初期トレーニングによって設定されるコードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを説明するための図である。図６では、データがハイレベルの場合の有効ウインドウの例を表わす。データがロウレベルの場合も、同様の方法が用いられる。
【００５９】
初期トレーニングモジュール１０は、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングと、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングとが一致するように、遅延調整回路１２の遅延量ＤＬを表わすコードＬ＿Ｄを設定する。初期トレーニングモジュール１０は、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングと、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングとが一致するように、遅延調整回路１２の遅延量ＤＲを表わすコードＲ＿Ｄを設定する。初期トレーニングモジュール１０は、コードＬ＿Ｄで定まる遅延量ＤＬと、コードＲ＿Ｄで定まる遅延量ＤＲとの平均値ＤＣを表わすコードＣ＿Ｄを設定する。
【００６０】
図７（ａ）は、ルールＲＡのパターンＡ２が適用される例を表わす図である。
ライトデータＷＤＱの遅延量が減少し、ライトデータＷＤＱのタイミングが左側にずれた場合には、コードＬ＿Ｄを設定すると一致となり、コードＲ＿Ｄを設定すると不一致となる。すなわち、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのレフトエッジよりも右側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのライトエッジよりも右側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致しない。
【００６１】
このような場合には、再トレーニングモジュール１１は、ルールＲＡに従って、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄが「１」だけ小さくして、ライト用データストローブ信号ＷＤＱＳのタイミングも左側にずらす。これによって、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。また、遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【００６２】
図７（ｂ）は、ルールＲＡのパターンＡ３が適用される例を表わす図である。
ライトデータＷＤＱの遅延量が増加し、ライトデータＷＤＱのタイミングが右側にずれた場合には、コードＬ＿Ｄを設定すると不一致となり、コードＲ＿Ｄを設定すると一致となる。すなわち、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのレフトエッジよりも左側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致となる。遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのライトエッジよりも左側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【００６３】
このような場合には、再トレーニングモジュール１１は、ルールＲＡに従って、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄが「１」だけ大きくして、ライト用データストローブ信号ＷＤＱＳのタイミングも右側にずらす。
【００６４】
これによって、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。また、遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【００６５】
図７（ｃ）は、ルールＲＡのパターンＡ４が適用される例を表わす図である。
ライトデータＷＤＱの有効ウインドウのライトエッジと有効ウインドウのレフトエッジがノイズによって、変動して、ライトデータＷＤＱの有効ウインドウのレフトエッジが右側にずれ、かつライトデータＷＤＱの有効ウインドウのライトエッジが左側にずれた場合には、コードＬ＿Ｄを設定すると不一致となり、コードＲ＿Ｄを設定しても不一致となる。すなわち、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのレフトエッジよりも左側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致となる。遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのライトエッジよりも右側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致しない。
【００６６】
このような場合には、再トレーニングモジュール１１は、ルールＲＡに従って、コードＬ＿Ｄを「１」だけ大きくし、かつコードＲ＿Ｄを「１」だけ小さくするとともに、コードＣ＿Ｄを変更しない。これによって、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのレフトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。また、遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【００６７】
以上のように、本実施の形態によれば、初期トレーニングによって求めたコードＬ＿Ｄ、Ｒ＿Ｄを基準にして再トレーニングを実行するので、従来のように、Ｌ＿Ｄ＝０、Ｒ＿Ｄ＝０を起点として初期トレーニングと同じ処理を繰り返すよりも、再トレーニングの時間を短くすることができる。再トレーニングの時間を短くすることによって、通常のライト動作またはリード動作（通常動作）が再トレーニングによって中断される時間を短くし、また再トレーニング中のため通常動作が開始できない事態を回避できる。これにより、メモリ装置へのデータの転送パフォーマンスを高くすることができる。また、再トレーニングの時間が短いので、再トレーニング頻度を多くすることができるため電圧変動または温度変動に追随しやすい。
【００６８】
また、従来は、コードＣ＿Ｄの遅延量だけが遅延調整回路に設定することができるが、本実施の形態では、コードＣ＿Ｄの遅延量だけでなく、コードＬ＿Ｄ，Ｒ＿Ｄの遅延量も遅延調整回路に設定することができる。
【００６９】
また、本実施の形態では、初期トレーニング時および再トレーニング時には、トレーニング用のメモリにテストデータを書き込むので、通常動作時においてユーザ使用可能メモリに書込まれたデータを破壊せずに保持することができる。
【００７０】
なお、初期トレーニング時には、ユーザ使用可能メモリには、データが書き込まれていない状態なので、ユーザ使用可能メモリにテストデータを書き込むものとしてもよい。
【００７１】
また、本実施の形態では、再トレーニングにおいて、各コードを最大限「１」だけ変化させることによって、有効ウインドウのレフトエッジとライトエッジのタイミングが正しく調整されるものとした。各コードを最大限「１」だけ変化させることによって、有効ウインドウのレフトエッジとライトエッジのタイミングが正しく調整できないような場合には、再トレーニングにおいて、各コードを最大限「１」だけ変化させた後、引き続きコードの修正が不要となるまで（すなわち検査結果がパターンＡ１となるまで）再トレーニングを繰り返すことにしてもよい。
【００７２】
［第４の実施形態］
図８は、第４の実施形態の半導体装置７４の構成を表わす図である。
【００７３】
第４の実施形態のメモリ装置１３は、トレーニング専用メモリ４１を備えない。ユーザ使用可能メモリ４２内に予め定められたトレーニング用領域４３が設けられる。初期トレーニングおよび再トレーニング時には、テストデータがトレーニング用領域４３に書込まれる。
【００７４】
図９は、第４の実施形態の遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【００７５】
図９のフローチャートが図４のフローチャートと相違する点は、図９のフローチャートは、図４のステップＳ１０４、Ｓ１０５、Ｓ１０８、Ｓ１０９の代わりに、ステップＳ２０４、Ｓ２０５、Ｓ２０８、Ｓ２０９を備える点である。
【００７６】
ステップＳ２０４、Ｓ２０８において、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをドライバＤ１を介して、メモリ装置１３のユーザ使用可能メモリ４２内のトレーニング用領域４３にへ送る。メモリ装置１３は、遅延量ＤＬまたは遅延量ＤＲを有するライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、ユーザ使用可能メモリ４２のトレーニング用領域４３に書き込む。
【００７７】
ステップＳ２０５、Ｓ２０９のそれぞれにおいて、再トレーニングモジュール１１は、ユーザ使用可能メモリ４２内のトレーニング用領域４３からテストデータをリードデータＲＤＱとして読出す。
【００７８】
以上のように、本実施の形態によれば、トレーニング時にテストデータを書き込むためのトレーニング専用のメモリが設けられていない場合でも、再トレーニングが可能である。なお、初期トレーニングにおいては、テストデータは、ユーザ使用可能メモリ４２内のトレーニング用領域４３に書込まれるものとしてもよいし、あるいはトレーニング専用メモリに書込まれるものとしてもよい。
【００７９】
［第５の実施形態］
図１０は、第５の実施形態の半導体装置７５の構成を表わす図である。
【００８０】
メモリ装置１３は、トレーニング専用メモリ４１を備えない。再トレーニングモジュール１１は、通常データの書き込み時の書き込み結果に基づいて、レジスタ１４、１５、１６内のコードが必要か否かを判断する。すなわち、再トレーニングモジュール１１は、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定して、ユーザ使用可能メモリ４２へ通常データを書き込んだときの書き込み結果と、遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定して、ユーザ使用可能メモリ４２へ通常データを書き込んだときの書き込み結果とに基づいて、コードの修正が必要か否かを判断する。
【００８１】
図１１は、第５の実施形態の遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【００８２】
図１１のフローチャートが図４のフローチャートと相違する点は、図１１のフローチャートは、図４のステップＳ１０４、Ｓ１０５、Ｓ１０８、Ｓ１０９の代わりに、ステップＳ３０４、Ｓ３０５、Ｓ３０８、Ｓ３０９を備える点である。
【００８３】
ステップＳ３０４、Ｓ３０８において、再トレーニングモジュール１１は、ライトデータＷＤＱとして、外部のユーザプログラム等によって指定され、外部から供給されるデータ（通常データ）をドライバＤ１を介して、ユーザ使用可能メモリ４２へ送る。メモリ装置１３は、遅延量ＤＬまたは遅延量ＤＲを有するライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、ユーザ使用可能メモリ４２の指定されたアドレスへ書き込む。ステップＳ３０４、Ｓ３０８の両方において、ユーザ使用可能メモリ４２の指定された同じアドレスへ通常データが書き込まれる。
【００８４】
ステップＳ３０５、Ｓ３０９のそれぞれにおいて、再トレーニングモジュール１１は、ユーザ使用可能メモリ４２から書込んだ通常データをリードデータＲＤＱとして読出す。
【００８５】
図１１のフローチャートは、ステップＳ１１２の後に、さらにステップＳ３１０を備える。
【００８６】
ステップＳ３１０において、再トレーニングモジュール１１は、通常データの書き込み結果が異常のためコードの修正が必要となった場合には（Ｓ１１１：ＹＥＳ）、コードの修正後、通常データをユーザ使用可能メモリ４２へ再度書き込む。
【００８７】
以上のように、本実施の形態では、通常動作時のライトデータを使用して、再トレーニングするので、再トレーニングのためだけにメモリ装置にデータを書き込む必要がなくなる。これにより、半導体装置のパフォーマンスを向上できる。
【００８８】
なお、上記の実施形態では、前回のトレーニング実行後、ΔＴ時間経過後に、通常のデータ書込みがあった場合に、そのデータを再トレーニング用のライトデータとして用いることとしたが、これに限定するものではない。たとえば、ΔＴ時間のウエイトを設けることなく、通常のデータ書き込み時の中でも、ビットごとに値が遷移する回数が多いデータを書き込むときだけ、そのデータを再トレーニングに用いることとしてもよい。
【００８９】
なお、上記の実施形態では、ステップＳ１１１でコードの修正が必要なときに、再トレーニングモジュール１１は、通常データを再書き込みすることとしたが、これに限定するものではない。検査結果がパターンＡ３の場合には、再トレーニング後には、ユーザ使用可能メモリ４２には、正しいデータが書き込まれる状態となるので、パターンＡ１とＡ４のときのみ、再トレーニングモジュール１１は、通常データを再書き込みするものとしてもよい。
【００９０】
［第６の実施形態］
図１２は、第６の実施形態の遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【００９１】
ステップＳ４０１において、ステップＳ１０１と同様にし、初期トレーニングモジュール１０は、初期トレーニングを実行する。
【００９２】
ステップＳ４０２において、ステップＳ１０２と同様にし、再トレーニングモジュール１１は、一定時間ΔＴだけウエイトする。
【００９３】
ステップＳ４０３において、再トレーニングモジュール１１は、レフトエッジの検査を実行する。
【００９４】
ステップＳ４０４において、再トレーニングモジュール１１は、ライトエッジの検査を実行する。
【００９５】
ステップＳ４０５において、再トレーニングモジュール１１は、ルールＲＢに従って、コードＬ＿Ｄ、コードＲ＿Ｄ、コードＣ＿Ｄのうちの少なくとも１つを修正する。その後、処理がステップＳ４０６に進む。
【００９６】
ステップＳ４０６において、電源がオフとされない場合（ＮＯ）、処理がステップＳ４０２に戻り、電源がオフとされる場合（ＹＥＳ）、処理が終了する。
【００９７】
図１３は、図１２のステップＳ４０３におけるレフトエッジ検査の手順を説明するための図である。
【００９８】
図１３を参照して、まず、再トレーニングモジュール１１は、コードＬ＿Ｄ＋２（Ｌ＿Ｄよりも「２」だけ大きい）をレフトエッジ検査用コードに設定する。ステップＳ１０４、ステップＳ１０５、Ｓ１０６と同様に、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、ライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、トレーニング専用メモリ４１へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する（Ｓ８０１）。
【００９９】
ライトデータＷＤＱとリードデータＲＤＱとが不一致のときには（Ｓ８０２：ＮＯ）、再トレーニングモジュール１１は、レフトエッジ検査の結果をパターンをＬ１に設定する（Ｓ８０３）。
【０１００】
ライトデータＷＤＱとリードデータＲＤＱとが一致するときには（Ｓ８０２：ＹＥＳ）、再トレーニングモジュール１１は、コードＬ＿Ｄ＋１（Ｌ＿Ｄよりも「１」だけ大きい）をレフトエッジ検査用コードに設定する。ステップＳ１０４、ステップＳ１０５、Ｓ１０６と同様に、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、ライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、トレーニング専用メモリ４１へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する（Ｓ８０４）。
【０１０１】
ライトデータＷＤＱとリードデータＲＤＱとが不一致のときには（Ｓ８０５：ＮＯ）、再トレーニングモジュール１１は、レフトエッジ検査の結果をパターンをＬ２に設定する（Ｓ８０６）。
【０１０２】
ライトデータＷＤＱとリードデータＲＤＱとが一致するときには（Ｓ８０５：ＹＥＳ）、再トレーニングモジュール１１は、コードＬ＿Ｄをレフトエッジ検査用コードに設定する。ステップＳ１０４、ステップＳ１０５、Ｓ１０６と同様に、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、ライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、トレーニング専用メモリ４１へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する（Ｓ８０７）。
【０１０３】
ライトデータＷＤＱとリードデータＲＤＱとが不一致のときには（Ｓ８０８：ＮＯ）、再トレーニングモジュール１１は、レフトエッジ検査の結果をパターンをＬ３に設定する（Ｓ８０９）。
【０１０４】
ライトデータＷＤＱとリードデータＲＤＱとが一致するときには（Ｓ８０８：ＹＥＳ）、再トレーニングモジュール１１は、レフトエッジ検査の結果をパターンをＬ４に設定する（Ｓ８１０）。
【０１０５】
図１４は、図１２のステップＳ４０４におけるライトエッジ検査の手順を説明するための図である。
【０１０６】
図１４を参照して、まず、再トレーニングモジュール１１は、コードＲ＿Ｄ−２（Ｒ＿Ｄよりも「２」だけ小さい）をライトエッジ検査用コードに設定する。ステップＳ１０８、ステップＳ１０９、Ｓ１１０と同様に、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、ライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、トレーニング専用メモリ４１へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する（Ｓ９０１）。
【０１０７】
ライトデータＷＤＱとリードデータＲＤＱとが不一致のときには（Ｓ９０２：ＮＯ）、再トレーニングモジュール１１は、ライトエッジ検査の結果をパターンをＲ１に設定する（Ｓ９０３）。
【０１０８】
ライトデータＷＤＱとリードデータＲＤＱとが一致するときには（Ｓ９０２：ＹＥＳ）、再トレーニングモジュール１１は、コードＲ＿Ｄ−１（Ｒ＿Ｄよりも「１」だけ小さい）をライトエッジ検査用コードに設定する。ステップＳ１０８、ステップＳ１０９、Ｓ１１０と同様に、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、ライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、トレーニング専用メモリ４１へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する（Ｓ９０４）。
【０１０９】
ライトデータＷＤＱとリードデータＲＤＱとが不一致のときには（Ｓ９０５：ＮＯ）、再トレーニングモジュール１１は、ライトエッジ検査の結果をパターンをＲ２に設定する（Ｓ９０６）。
【０１１０】
ライトデータＷＤＱとリードデータＲＤＱとが一致するときには（Ｓ９０５：ＹＥＳ）、再トレーニングモジュール１１は、コードＲ＿Ｄをライトエッジ検査用コードに設定する。ステップＳ１０８、ステップＳ１０９、Ｓ１１０と同様に、再トレーニングモジュール１１は、ライトデータＷＤＱとして任意のパターンのテストデータをメモリ装置１３のトレーニング専用メモリ４１へ送る。メモリ装置１３は、ライト用データストローブ信号ＷＤＱＳの立ち上がりのタイミングで、ライトデータＷＤＱを取り込んで、トレーニング専用メモリ４１に書き込む。再トレーニングモジュール１１は、トレーニング専用メモリ４１からテストデータをリードデータＲＤＱとして読出す。再トレーニングモジュール１１は、トレーニング専用メモリ４１から出力されたテストデータ（リードデータＲＤＱ）と、トレーニング専用メモリ４１へ出力したテストデータ（ライトデータＷＤＱ、期待値を表す）とが一致しているか否かを比較する（Ｓ９０７）。
【０１１１】
ライトデータＷＤＱとリードデータＲＤＱとが不一致のときには（Ｓ９０８：ＮＯ）、再トレーニングモジュール１１は、ライトエッジ検査の結果をパターンをＲ３に設定する（Ｓ９０９）。
【０１１２】
ライトデータＷＤＱとリードデータＲＤＱとが一致するときには（Ｓ９０８：ＹＥＳ）、再トレーニングモジュール１１は、ライトエッジ検査の結果をパターンをＲ４に設定する（Ｓ９１０）。
【０１１３】
図１５は、コードの修正方法を定めたルールＲＢを表わす図である。
図１５において、ｘが付されたコードは設定してもしなくてもよいことを表わす。
【０１１４】
パターンＴ１は、レフトエッジ検査の結果がパターンＬ４であり、ライトエッジ検査の結果がパターンＲ４となる。再トレーニングモジュール１１は、パターンＴ１のときには、いずれのコードも修正しない。
【０１１５】
パターンＴ２は、レフトエッジ検査の結果がパターンＬ４であり、ライトエッジ検査の結果がパターンＲ１となる。再トレーニングモジュール１１は、パターンＴ２のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「３」だけ小さくする。
【０１１６】
パターンＴ３は、レフトエッジ検査の結果がパターンＬ４であり、ライトエッジ検査の結果がパターンＲ２となる。再トレーニングモジュール１１は、パターンＴ３のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「２」だけ小さくする。
【０１１７】
パターンＴ４は、レフトエッジ検査の結果がパターンＬ４であり、ライトエッジ検査の結果がパターンＲ３となる。再トレーニングモジュール１１は、パターンＴ４のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「１」だけ小さくする。
【０１１８】
パターンＴ５は、レフトエッジ検査の結果がパターンＬ１であり、ライトエッジ検査の結果がパターンＲ４となる。再トレーニングモジュール１１は、パターンＴ５のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「３」だけ大きくする。
【０１１９】
パターンＴ６は、レフトエッジ検査の結果がパターンＬ２であり、ライトエッジ検査の結果がパターンＲ４となる。再トレーニングモジュール１１は、パターンＴ６のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「２」だけ大きくする。
【０１２０】
パターンＴ７は、レフトエッジ検査の結果がパターンＬ３であり、ライトエッジ検査の結果がパターンＲ４となる。再トレーニングモジュール１１は、パターンＴ７のときには、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを「１」だけ大きくする。
【０１２１】
パターンＴ８は、レフトエッジ検査の結果がパターンＬ１であり、ライトエッジ検査の結果がパターンＲ１となる。再トレーニングモジュール１１は、パターンＴ８のときには、コードＬ＿Ｄを「３」だけ大きくし、コードＲ＿Ｄを「３」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１２２】
パターンＴ９は、レフトエッジ検査の結果がパターンＬ２であり、ライトエッジ検査の結果がパターンＲ２となる。再トレーニングモジュール１１は、パターンＴ９のときには、コードＬ＿Ｄを「２」だけ大きくし、コードＲ＿Ｄを「２」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１２３】
パターンＴ１０は、レフトエッジ検査の結果がパターンＬ３であり、ライトエッジ検査の結果がパターンＲ３となる。再トレーニングモジュール１１は、パターンＴ１０のときには、コードＬ＿Ｄを「１」だけ大きくし、コードＲ＿Ｄを「１」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１２４】
パターンＴ１１は、レフトエッジ検査の結果がパターンＬ３であり、ライトエッジ検査の結果がパターンＲ２となる。再トレーニングモジュール１１は、パターンＴ１１のときには、コードＬ＿Ｄを「１」だけ大きくし、コードＲ＿Ｄを「２」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１２５】
パターンＴ１２は、レフトエッジ検査の結果がパターンＬ３であり、ライトエッジ検査の結果がパターンＲ１となる。再トレーニングモジュール１１は、パターンＴ１２のときには、コードＬ＿Ｄを「１」だけ大きくし、コードＲ＿Ｄを「３」だけ小さくし、コードＣ＿Ｄを「１」だけ小さくする。
【０１２６】
パターンＴ１３は、レフトエッジ検査の結果がパターンＬ２であり、ライトエッジ検査の結果がパターンＲ３となる。再トレーニングモジュール１１は、パターンＴ１３のときには、コードＬ＿Ｄを「２」だけ大きくし、コードＲ＿Ｄを「１」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１２７】
パターンＴ１４は、レフトエッジ検査の結果がパターンＬ１であり、ライトエッジ検査の結果がパターンＲ３となる。再トレーニングモジュール１１は、パターンＴ１４のときには、コードＬ＿Ｄを「３」だけ大きくし、コードＲ＿Ｄを「１」だけ小さくし、コードＣ＿Ｄを「１」だけ大きくする。
【０１２８】
パターンＴ１５は、レフトエッジ検査の結果がパターンＬ２であり、ライトエッジ検査の結果がパターンＲ１となる。再トレーニングモジュール１１は、パターンＴ１５のときには、コードＬ＿Ｄを「２」だけ大きくし、コードＲ＿Ｄを「３」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１２９】
パターンＴ１６は、レフトエッジ検査の結果がパターンＬ１であり、ライトエッジ検査の結果がパターンＲ２となる。再トレーニングモジュール１１は、パターンＴ１６のときには、コードＬ＿Ｄを「３」だけ大きくし、コードＲ＿Ｄを「２」だけ小さくし、コードＣ＿Ｄを変更しない。
【０１３０】
図１６（ａ）は、ルールＲＢのパターンＴ５が適用される例を表わす図である。
ライトデータＷＤＱの遅延量が増加し、ライトデータＷＤＱのタイミングが右側にずれた場合には、コードＬ＿Ｄ＋２を設定すると不一致となり、コードＲ＿Ｄ−２、Ｒ＿Ｄ−１、Ｒ＿Ｄを設定すると一致となる。すなわち、遅延調整回路１２の遅延量をコードＬ＿Ｄ＋２の遅延量に設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのレフトエッジよりも左側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致となる。
【０１３１】
遅延調整回路１２の遅延量をコードＲ＿Ｄ−２の遅延量、Ｒ＿Ｄ−１の遅延量、Ｒ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、ライトデータＷＤＱの有効ウインドウのライトエッジよりも左側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【０１３２】
このような場合には、再トレーニングモジュール１１は、ルールＲＢに従って、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄが「３」だけ大きくして、ライト用データストローブ信号ＷＤＱＳのタイミングも右側にずらす。
【０１３３】
これによって、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量に設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのレフトエッジおよび有効ウインドウのライトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量に設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、ライトデータＷＤＱの有効ウインドウのライトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【０１３４】
図１６（ｂ）は、ルールＲＢのパターンＴ１６が適用される例を表わす図である。
ライトデータＷＤＱの有効ウインドウのライトエッジとレフトエッジがノイズによって、変動して、有効ウインドウのレフトエッジが右側にずれ、かつ有効ウインドウのライトエッジが左側にずれた場合には、コードＬ＿Ｄ＋２を設定すると不一致となり、コードＲ＿Ｒ＿Ｄ−１を設定しても不一致となる。すなわち、遅延調整回路１２の遅延量をコードＬ＿Ｄ＋２の遅延量に設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、有効ウインドウのレフトエッジよりも左側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致となる。遅延調整回路１２の遅延量をコードＲ＿Ｄ−１の遅延量に設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジは、有効ウインドウのライトエッジよりも右側にあるので、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致しない。
【０１３５】
このような場合には、再トレーニングモジュール１１は、ルールＲＢに従って、コードＬ＿Ｄを「３」だけ大きくし、かつコードＲ＿Ｄを「２」だけ小さくするとともに、コードＣ＿Ｄを変更しない。これによって、遅延調整回路１２の遅延量をコードＬ＿Ｄの遅延量ＤＬに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、有効ウインドウのレフトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。また、遅延調整回路１２の遅延量をコードＲ＿Ｄの遅延量ＤＲに設定したときには、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジのタイミングは、有効ウインドウのライトエッジのタイミングと一致し、ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが一致する。
【０１３６】
（第６の実施形態の変形例）
上記の実施形態では、再トレーニング時のレフトエッジ検査用のコードＬ＿Ｄの変動幅、およびライトエッジ検査用のコードＲ＿Ｄの変動幅は「２」であったが、これに限定するものではない。
【０１３７】
たとえば、再トレーニングモジュール１１は、コードＬ＿Ｄよりもｋだけ大きいコードに対応する遅延量（コードＬ＿Ｄの遅延量よりもｋ×ΔＤだけ大きい遅延量）を遅延調整回路１２の遅延量に設定したときのライトデータＷＤＱの書き込み結果をレフトエッジ検査結果として求める。再トレーニングモジュール１１は、レフトエッジ検査結果が異常（ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致）となるまでｋをＮ（コード変動幅）から順次減少させることによって、１個以上のレフトエッジ検査結果を求める。Ｎは、２以上の自然数とする。
【０１３８】
再トレーニングモジュール１１は、コードＲ＿Ｄよりもｋだけ小さいコードに対応する遅延量（コードＲ＿Ｄの遅延量よりもｋ×ΔＤだけ小さい遅延量）を遅延調整回路１２の遅延量に設定したときのライトデータＷＤＱの書き込み結果をライトエッジ検査結果として求める。再トレーニングモジュール１１は、ライトエッジ検査結果が異常（ライトデータＷＤＱ（期待値）とリードデータＲＤＱとが不一致）となるまでｋをＮ（コード変動幅）から順次減少させることによって、１個以上のライトエッジ検査結果を求める。
【０１３９】
再トレーニングモジュール１１は、１個以上のレフトエッジ検査結果、および１個以上のライトエッジ検査結果に基づいて、Ｌ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄのうち少なくとも１つを修正、または全てを修正しない。
【０１４０】
以上のように、本実施の形態によれば、複数のコードを用いて、レフトエッジ検査、およびライトエッジ検査を実行するので、電圧変動または温度変動によるライトデータの有効ウインドウの劣化が大きい場合にも、コードＬ＿Ｄ、Ｒ＿Ｄ、Ｃ＿Ｄを正しく補正することができる。
【０１４１】
なお、本実施の形態では、コードを「１」刻みで変動させているが、「２」刻み、「３」刻みで変動させてもよい。すなわち、再トレーニングモジュール１１は、コードＬ＿Ｄを「２」刻みで（＋４→＋２→０）で減少させ、コードＲ＿Ｄを「２」刻みで（−４→−２→０）増加させる。また、再トレーニングモジュール１１は、コードＬ＿Ｄを「３」刻みで（＋６→＋３→０）減少させ、コードＲ＿Ｄを「３」刻みで（−６→−３→０）増加させるものとしてもよい。
【０１４２】
［第７の実施形態］
図１７は、第７の実施形態の遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【０１４３】
図１７のフローチャートが、図４のフローチャートと相違する点は、図１７のフローチャートが、ステップＳ５０１とＳ５０２を備える点である。
【０１４４】
ステップＳ１１１でＹＥＳの場合に、ステップＳ１１２の前にステップS５０２が実行される。ステップＳ１１１でＮＯの場合に、ステップＳ１１２の前にステップS５０１が実行される。
【０１４５】
ステップＳ５０１において、再トレーニングモジュール１１は、再トレーニングの時間間隔（周期）を定めるウエイト時間ΔＴを増大させる。
【０１４６】
ステップＳ５０１において、再トレーニングモジュール１１は、再トレーニングの時間間隔（周期）を定めるウエイト時間ΔＴを減少させる。
【０１４７】
図１８は、再トレーニングの周期の変化を表わす図である。
図１８（ａ）は、再トレーニングの周期の初期値の例を表わす図である。図１８（ｂ）は、再トレーニングの周期が減少した例を表わす図である。図１８（c）は、再トレーニングの周期が増大した例を表わす図である。
【０１４８】
図１８（ａ）に示すように、再トレーニングの周期の初期値がＸである。図１８（ｂ）に示すように、コードの修正が必要と判断された場合には、ライトデータＷＤＱのタイミングとライト用データストローブ信号ＷＤＱＳのタイミングの関係に変動が生じており、不安定な状態と考えられるため、再トレーニングの周期が１／２倍のＸ／２に減少している。図１８（ｃ）に示すように、コードの修正が不要と判断された場合には、ライトデータＷＤＱのタイミングとライト用データストローブ信号ＷＤＱＳのタイミングの関係に変動が生じておらず、安定した状態と考えられるため、再トレーニングの周期が２倍の２Ｘに増加している。
【０１４９】
以上のように、本実施の形態によれば、ライトデータＷＤＱのタイミングとライト用データストローブ信号ＷＤＱＳのタイミングの関係に変動が生じているときには、コードの修正とともに、再トレーニングの周期を短くするので、変動に追随しやくすることができる。ライトデータＷＤＱのタイミングとライト用データストローブ信号ＷＤＱＳのタイミングの関係が安定しているときには、コードを修正せず、再トレーニングの周期を長くするので、不必要な再トレーニングを実行しないようにすることができる。
【０１５０】
なお、第６の実施形態のように、複数のコードを用いて各エッジの検査をする場合には、エッジの検査結果のパターンに応じて、再トレーニングの周期を変更することとしてもよい。たとえば、パターンＴ４、Ｔ３、Ｔ２の場合に、再トレーニングの周期を現在の周期から１／２、１／３、１／４に変更することとしてもよい。
【０１５１】
［第８の実施形態］
図１９は、第８の実施形態の半導体装置７６の構成を表わす図である。
【０１５２】
半導体装置７６は、環境変動検出部４５を備える。
環境変動検出部７６は、メモリ装置１３またはメモリコントーラ３２内の温度変動または電圧の変動を検出する。
【０１５３】
たとえば、環境変動検出部７６は、メモリ装置１３またはメモリコントーラ３２内の温度の変動を検出する温度センサとすることができる。あるいは、環境変動検出部７６は、メモリ装置１３またはメモリコントーラ３２内のトランジスタの閾値電圧の変動を検出する電圧検出回路であってもよい。あるいは、環境変動検出部７６は、メモリ装置１３またはメモリコントーラ３２内の電源、または負荷と接続されているノードなどの特定箇所の電圧の変動を検出する電圧検出回路であってもよい。これによって、負荷の使用が大きくなると、負荷に接続されているノードの電圧が降下するのを検出できる。あるいは、環境変動検出部７６は、半導体装置内の温度変動または電圧変動に依存する内部発振信号を生成するリングオシレータと、半導体装置内の温度変動または電圧変動に依存しない外部発振信号の所定のサイクル中に発生する内部発振信号のパルス数をカウントするパルスカウンタと、パルスカウンタのカウンタ値と標準値とを比較する比較器とによって構成されるものとしてもよい。
【０１５４】
図２０は、第８の実施形態の遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【０１５５】
図２０のフローチャートが、図４のフローチャートと相違する点は、図２０のフローチャートが、ステップＳ１１２とＳ１０３の間にステップＳ６０１とＳ６０２を備える点である。
【０１５６】
ステップＳ６０１において、再トレーニングモジュール１１は、環境変動検出部４５から、環境変動検出部４５が検出した温度変動または電圧変動を表わす信号を受ける。
【０１５７】
ステップＳ６０２において、再トレーニングモジュール１１は、検出された温度変動または電圧変動に基づいて、再トレーニングの時間間隔（周期）を定めるウエイト時間ΔＴを変化させる。たとえば、再トレーニングモジュール１１は、温度変動または電圧変動が閾値以上であれば、ウエイト時間ΔＴを１／２にすることとしてもよい。
【０１５８】
以上のように、本実施の形態によれば、温度変動または電圧変動が生じているときには、ライトデータＷＤＱのタイミングとライト用データストローブ信号ＷＤＱＳのタイミングの関係に変動が生じている可能性が高いので、再トレーニングの周期を短くするので、変動に追随することができる。
【０１５９】
［第９の実施形態］
図２１は、第９の実施形態の遅延調整回路１２の遅延量の調整手順を表わすフローチャートである。
【０１６０】
ステップＳ７０１において、ステップＳ１０１と同様にし、初期トレーニングモジュール１０は、初期トレーニングを実行する。
【０１６１】
ステップＳ７０２において、ステップＳ１０２と同様にし、再トレーニングモジュール１１は、一定時間ΔＴだけウエイトする。
【０１６２】
ステップＳ７０３において、再トレーニングモジュール１１は、環境変動検出部４５から、環境変動検出部４５が検出した温度変動または電圧変動を表わす信号を受ける。
【０１６３】
ステップＳ７０４において、再トレーニングモジュール１１は、検出された温度変動または電圧変動に基づいて、第６の実施形態の変形例で説明した再トレーニング時のレフトエッジ検査用のコードの変動幅Ｎ、およびライトエッジ検査用のコードの変動幅Ｎを設定する。たとえば、再トレーニングモジュール１１は、電圧変動または温度変動が大きければ、コードの変動幅Ｎを大きくし、電圧変動または温度変動が小さければ、コードの変動幅Ｎを小さくする。
【０１６４】
ステップＳ７０５において、ステップＳ４０３〜Ｓ４１４と同様にして、再トレーニングモジュール１１は、再トレーニングを実行する。
【０１６５】
ステップＳ７０６において、電源がオフとされない場合（ＮＯ）、処理がステップＳ４０２に戻り、電源がオフとされる場合（ＹＥＳ）、処理が終了する。
【０１６６】
以上のように、本実施の形態では、電圧変動または温度変動に応じて、再トレーニングでのコードの補正精度と、かつ再トレーニングの時間が最適となるように、レフトエッジ検査用のコードの変動幅Ｎ、およびライトエッジ検査用のコードの変動幅Ｎを設定することができる。
【０１６７】
なお、再トレーニングモジュール１１は、コードの変動幅Ｎに代えて、あるいはコードの変動幅Ｎとともに、コードの変動刻みも電圧変動または温度変動に応じて変更するものとしてもよい。たとえば、電圧変動または温度変動が小さければ、再トレーニングモジュール１１は、第６の実施形態のようにコードの変動刻みを「１」ずつとする。すなわち、再トレーニングモジュール１１は、コードＬ＿ＤおよびコードＲ＿Ｄを（＋２→＋１→０）、または（−２→−１→０）の順に変動させる。たとえば、電圧変動または温度変動が小さければ、再トレーニングモジュール１１は、コードの変動刻みを「２」ずつとする。すなわち、再トレーニングモジュール１１は、コードＬ＿ＤおよびコードＲ＿Ｄを（＋４→＋２→０）、または（−４→−２→０）の順に変動させる。
【０１６８】
（変形例）
上記実施形態以外にも、たとえば、以下のような変形例も想定される。
【０１６９】
（１）トレーニング制御回路での選択操作
上記の実施形態では、セレクタＳＬ２がレフトエッジ用レジスタ１４の出力と、センタ用レジスタ１５の出力と、ライトエッジ用レジスタ１６の出力とを選択して、遅延調整回路１２へ出力することとしたが、これに限定されるものではない。セレクタＳＬ２の代わりに、トレーニング制御回路２２が、これらのレジスタ１４、１５、１６の出力を選択して、遅延調整回路１２へ出力することとしてもよい。
【０１７０】
（２）複数のライトデータ間のタイミング調整
第３〜第９の実施形態では、ライトデータＷＤＱは、遅延調整回路を介さずに、メモリ装置へ送られるものとしたが、これに限定されるものではない。パラレルに転送される複数のライトデータＷＤＱ間のタイミング調整のために、ライトデータＷＤＱは、図示しない遅延調整回路を介して、メモリ装置へ転送されるものとしてもよい。
【０１７１】
（３）ライトデータの遅延量の調整
第３〜第９の実施形態では、再トレーニングモジュール１１は、ライトデータＷＤＱの有効ウインドウのレフトエッジまたはライトエッジと、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジとが一致するように、ライト用データストローブ信号ＷＤＱＳの遅延量を調整したが、これに限定するものではない。再トレーニングモジュール１１は、ライトデータＷＤＱの有効ウインドウのレフトエッジまたはライトエッジと、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジとが一致するように、ライトデータＷＤＱの遅延量を調整することとしてもよい。
【０１７２】
たとえば、再トレーニングモジュール１１は、図７（ａ）で示したようにライトデータＷＤＱの有効ウインドウのレフトエッジおよびライトエッジが左側にずれた場合には、コードＬ＿Ｄを設定すると一致となり、コードＲ＿Ｄを設定すると不一致となるので、以下を実行する。再トレーニングモジュール１１は、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジと有効ウインドウのレフトエッジが一致し、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジと有効ウインドウのライトエッジが一致するように、コードＬ＿ＤおよびＲ＿Ｄを大きく（たとえば＋１）するとともに、コードＣ＿Ｄを大きくする（たとえば＋１）。
【０１７３】
再トレーニングモジュール１１は、図７（ｂ）に示すように、ライトデータＷＤＱの有効ウインドウのレフトエッジおよびライトエッジが右側にずれた場合には、コードＬ＿Ｄを設定すると不一致となり、コードＲ＿Ｄを設定すると一致となるので、以下を実行する。再トレーニングモジュール１１は、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジと有効ウインドウのレフトエッジが一致し、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジと有効ウインドウのライトエッジが一致するように、コードＬ＿ＤおよびＲ＿Ｄを小さくする（たとえば−１）するとともに、コードＣ＿Ｄを小さくする（たとえば−１）。
【０１７４】
再トレーニングモジュール１１は、図７（ｃ）に示すように、ライトデータＷＤＱの有効ウインドウのレフトエッジが右側にずれ、ライトエッジが左側にずれた場合には、コードＬ＿Ｄを設定すると不一致となり、コードＲ＿Ｄを設定しても、不一致となるので、以下を実行する。再トレーニングモジュール１１は、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジと有効ウインドウのレフトエッジとが一致し、ライト用データストローブ信号ＷＤＱＳの立ち上がりエッジと有効ウインドウのレフトエッジとが一致するように、コードＬ＿Ｄを小さくし（たとえば−１）、コードＲ＿Ｄを大きくする（たとえば＋１）。
【０１７５】
（４）再トレーニングの周期
上記の実施形態では、再トレーニングの周期の変更は、コードの修正とともに実行されたが、これに限定するものではない。
【０１７６】
たとえば、再トレーニングモジュール１１は、再トレーニングにおいて、初期トレーニングと同じ処理を実行するものとし、再トレーニングモジュール１１は、環境変動検出部４５が検出した温度変動または電圧変動に応じて、再トレーニングの時間間隔を変更するものとしてもよい。
【０１７７】
すなわち、この半導体装置は、メモリ装置へのライトデータまたはデータストローブ信号の遅延量を調整する遅延調整回路と、前記遅延調整回路の遅延量を設定する制御回路とを備える。前記制御回路は、トレーニングにおいて、前記ライトデータの有効ウインドウのタイミングが前記データストローブ信号のエッジのタイミングと一致するように前記遅延調整回路の遅延量を求める。前記制御回路は、前記半導体装置内の温度または電圧の変動に基づいて、前記トレーニングの時間間隔を変更する。
【０１７８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１７９】
１０  初期トレーニングモジュール、１１  再トレーニングモジュール、１２，５３，６３  遅延調整回路、１３，５２  メモリ装置、１４  レフトエッジ用レジスタ、１５  センタ用レジスタ、１６  ライトエッジ用レジスタ、１９，５５，６５  記憶部、２１，５４，６４  制御回路、２２  トレーニング制御回路、３２，５１，６１  メモリコントローラ、４１  トレーニング専用メモリ、４２  ユーザ使用可能メモリ、４３  トレーニング用領域、４５  環境変動検出部、７１〜７６  半導体装置、ＢＦ１，ＢＦ２  双方向バッファ、ＤＥ（１）〜ＤＥ（Ｎ）  遅延素子、ＳＬ１，ＳＬ２  セレクタ。
【図１】
2018173782.tif 000003
【図２】
2018173782.tif 000004
【図３】
2018173782.tif 000005
【図４】
2018173782.tif 000006
【図５】
2018173782.tif 000007
【図６】
2018173782.tif 000008
【図７】
2018173782.tif 000009
【図８】
2018173782.tif 000010
【図９】
2018173782.tif 000011
【図１０】
2018173782.tif 000012
【図１１】
2018173782.tif 000013
【図１２】
2018173782.tif 000014
【図１３】
2018173782.tif 000015
【図１４】
2018173782.tif 000016
【図１５】
2018173782.tif 000017
【図１６】
2018173782.tif 000018
【図１７】
2018173782.tif 000019
【図１８】
2018173782.tif 000020
【図１９】
2018173782.tif 000021
【図２０】
2018173782.tif 000022
【図２１】
2018173782.tif 000023