(57)【要約】【課題】ＤＱＳ信号の立ち上がりおよび立ち下がりでＤＱ信号からデータを確実に受信すること。【解決手段】メモリ制御装置２は、立ち上がりエッジおよび立ち下がりエッジが一定の周期で出現するＤＱＳ信号を遅延させて遅延時間が互いに異なる複数の遅延ＤＱＳ信号を生成するレシーバ回路２０と、既知の参照データを一部に持つＤＱ信号から、生成されたそれぞれの遅延ＤＱＳ信号の立ち上がりエッジまたは立ち下がりエッジに対応する部分のデータを抽出するデータ抽出部２１０と、抽出されたそれぞれのデータが参照データと一致するか否かを判定するデータ判定部２４０と、一致すると判定されたデータに対応する遅延ＤＱＳ信号の遅延時間から、ＤＱＳ信号の立ち上がりエッジに対する遅延時間の範囲およびＤＱＳ信号の立ち下がりエッジに対する遅延時間の範囲をそれぞれ決定する上下限値決定部２５０と、を備える。【選択図】        図２
2010157113.tif 000002
【特許請求の範囲】
【請求項１】
立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成部と、
既知の参照データを一部に持つデータ信号から、前記生成部によって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出部と、
前記抽出部によって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定部と、
前記判定部によって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定部と、
を備えることを特徴とするメモリ制御装置。
【請求項２】
前記生成部は、
複数の遅延時間に対してそれぞれ２つずつ遅延クロック信号を生成し、
前記抽出部は、
既知の参照データを一部に持つデータ信号から、複数の一方の遅延クロック信号の立ち上がり部分に対応する部分のデータを抽出する第１の抽出部と、
既知の参照データを一部に持つデータ信号から、複数の他方の遅延クロック信号の立ち下がり部分に対応する部分のデータを抽出する第２の抽出部と、を含み
前記判定部は、
前記第１の抽出部によって抽出されたそれぞれの一方の遅延クロック信号の立ち上がり部分に対応するデータまたは前記第２の抽出部によって抽出されたそれぞれの他方の遅延クロック信号の立ち下がり部分に対応するデータが、参照データと一致するか否かを判定し、
前記決定部は、
前記判定部によって一致すると判定されたデータに対応する一方の遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲を決定する第１の決定部と、
前記判定部によって一致すると判定されたデータに対応する他方の遅延クロック信号の遅延時間から、クロック信号の立ち下がり部分に対する遅延時間の範囲を決定する第２の決定部と、
を含むことを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
前記決定部によって決定されたクロック信号の立ち上がり部分に対する遅延時間の範囲の中間およびクロック信号の立ち下がり部分に対する遅延時間の範囲の中間の遅延時間を用いて、データを受信する受信部と、
をさらに備えることを特徴とする請求項１または請求項２に記載のメモリ制御装置。
【請求項４】
前記生成部は、
信号の強弱を示す振幅値が異なるクロック信号をそれぞれ遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成し、
前記決定部は、
クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲を前記振幅値ごとに決定し、
前記受信部は、
前記決定部によって前記振幅値ごとに決定されたクロック信号の立ち上がり部分に対する遅延時間の範囲またはクロック信号の立ち下がり部分に対する遅延時間の範囲のうち最大の遅延時間の範囲である振幅値を選択する振幅選択部を含み、
前記振幅選択部によって選択された振幅値に対応する遅延時間および振幅値を用いて、データを受信することを特徴とする請求項３に記載のメモリ制御装置。
【請求項５】
前記生成部は、
前記受信部によって受信されたデータが異常であるとき、クロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成することを特徴とする請求項３または請求項４に記載のメモリ制御装置。
【請求項６】
立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成手順と、
既知の参照データを一部に持つデータ信号から、前記生成手順によって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出手順と、
前記抽出手順によって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定手順と、
前記判定手順によって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定手順と、
をコンピュータに実行させることを特徴とするメモリ最適化プログラム。
【請求項７】
立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成ステップと、
既知の参照データを一部に持つデータ信号から、前記生成ステップによって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出ステップと、
前記抽出ステップによって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定ステップと、
前記判定ステップによって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定ステップと、
を含むことを特徴とするメモリ最適化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御装置、メモリ最適化プログラムおよびメモリ最適化方法に関する。
【背景技術】
【０００２】
近年、高速のメモリとして、データストローブ信号（以降、ＤＱＳ信号という。）の立ち上がりと立ち下がりの両方のエッジに同期したデータ信号（以降、ＤＱ信号という。）をメモリ制御装置に受信させるＤＤＲ−ＳＤＲＡＭ（Double Data Rate Synchronous Dynamic Random Access Memory）が、コンピュータシステムに採用されている。このＤＤＲ−ＳＤＲＡＭでは、メモリ制御装置がＤＱＳ信号の立ち上がりエッジと立ち下がりエッジの両方を基準にしてＤＱ信号からデータを適正に受信する。
【０００３】
そのために、従来では、ＤＱ信号からデータを受信するタイミングを適正にする手段として、例えば図２２に示すような構成がある。図２２は、従来のメモリ最適化設定システムの全体構成の一例を示す図である。図２２に示すように、メモリ制御装置は、ＤＤＲ−ＳＤＲＡＭからＤＱ信号およびＤＱＳ信号を取得する。このＤＱＳ信号には、立ち上がりエッジおよび立ち下がりエッジがあり、メモリ制御装置は、立ち上がりエッジおよび立ち下がりエッジに対応する受信タイミングで、データが重畳されたＤＱ信号からデータを受信する。このとき、メモリ制御装置は、データが重畳されたＤＱ信号の有効領域（読み込み可能範囲）内でデータを受信するために、ＤＱＳ信号をＤＱ信号から遅延させる必要がある。この遅延させる時間は、ＣＰＵによってメモリ制御装置のリード・パラメータ・レジスタに設定される。これにより、メモリ制御装置内のＤＱＳ信号は、リード・パラメータ・レジスタの値にしたがって遅延することになる。なお、リード・パラメータ・レジスタには、ＤＱ信号を受信するタイミングに変化を及ぼすＤＱ信号およびＤＱＳ信号の強弱を示すドライブ・ストレングスの値も設定されている。
【０００４】
ここで、ＤＱＳ信号の適正な遅延について、図２３を参照して説明する。メモリ制御装置は、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジに対応するタイミングでＤＱ信号からデータを受信するが、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジの前と後の所定期間、ＤＱ信号が安定していることが要求される。ここで、エッジの前の安定している必要のある期間はセットアップ時間と称され、エッジの後の安定している必要のある期間がホールド時間と称される。図２３の例では、メモリ制御装置は、ＤＱＳ信号の立ち上がりエッジでＤＱ信号からデータを確実に受信するために、ＤＱＳ信号を図中の遅延時間分遅延させて、立ち上がりエッジの中心がセットアップ時間およびホールド時間の境にくるようにしてＤＱ信号を受信するタイミングマージンを最適に確保している。
【０００５】
ところが、メモリ制御装置では、ＤＤＲ−ＳＤＲＡＭのマルチソース化、ＤＤＲ−ＳＤＲＡＭに搭載される電源回路のばらつきによる電圧環境の違いおよびＤＤＲ−ＳＤＲＡＭの製造ばらつきによって、ＤＱ信号の受信タイミングにばらつきがでる。また、メモリ制御装置では、ＤＤＲ−ＳＤＲＡＭの温度環境による信号特性の違いによって、ＤＱ信号の受信タイミングにばらつきがでる。さらに、メモリ制御装置では、メモリ制御装置自体の製造ばらつきによっても、ＤＱ信号の受信タイミングにばらつきがでる。そのため、メモリ制御装置では、ＤＱ信号の受信タイミングの最適化が困難なものとなっている。
【０００６】
そこで、実際には、メモリ制御装置がＤＱ信号の受信タイミングを最適にするために、ＤＤＲ−ＳＤＲＡＭ等の装置の設計時に、複数の温度環境化で複数のＤＤＲ−ＳＤＲＡＭのタイミング特性が測定され、測定されたタイミング特性の中間値がリード・パラメータ・レジスタに設定されている。
【０００７】
また、ＤＤＲ−ＳＤＲＡＭには、ある特定の値があらかじめ特定のアドレスに書き込まれ、メモリ制御装置が、ＤＱＳ信号の遅延時間を変更し、変更の都度、当該アドレスと同一のアドレスからデータを読み込み、読み込まれたデータと特定の値とを比較して、比較の結果一致した遅延時間の範囲の中間値を適正な遅延時間としてリード・パラメータ・レジスタに設定する技術が開示されている。
【０００８】
【特許文献１】特開２００３−９９３２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、ＤＱ信号を受信するタイミングを最適にする従来の技術では、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジのタイミングで、データが重畳されたＤＱ信号からデータを確実に受信することができないという問題がある。すなわち、ＤＤＲ−ＳＤＲＡＭのドライバ特性、負荷容量および終端抵抗の有無等により、ＤＱＳ信号およびＤＱ信号の波形は、それぞれ立ち上がりエッジと立ち下がりエッジとで異なることとなるため、ＤＱ信号を受信するタイミングマージンも立ち上がりエッジと立ち下がりエッジとでは異なることになる。そうすると、メモリ制御装置がＤＱＳ信号の立ち上がりエッジに対応する最適な受信タイミングをリード・パラメータ・レジスタに設定したとしても、ＤＱＳ信号の立ち下がりエッジに対応する受信タイミングをかならずしも最適に設定したことにはならず、ＤＱＳ信号の立ち下がりエッジのタイミングでＤＱ信号からデータを確実に受信することができない。これは、ＤＱＳ信号の立ち下がりエッジに対応する最適な受信タイミングをリード・パラメータ・レジスタに設定した場合も同様である。
【００１０】
本発明は、上記に鑑みてなされたものであって、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジのタイミングで、データが重畳されたＤＱ信号からデータを確実に受信することができるメモリ制御装置、メモリ最適化プログラムおよびメモリ最適化方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した問題を解決し、目的を達成するために、メモリ制御装置は、立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成部と、既知の参照データを一部に持つデータ信号から、前記生成部によって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出部と、前記抽出部によって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定部と、前記判定部によって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定部と、を備えた構成を採る。
【００１２】
かかる構成によれば、メモリ制御装置は、クロック信号の立ち上がり部分および立ち下がり部分についてクロック信号を遅延させる時間を個別に決定しているため、クロック信号（ＤＱＳ信号）およびデータ信号（ＤＱ信号）の波形がそれぞれ立ち上がりエッジと立ち下がりエッジとで異なっていても、それぞれ適正な遅延時間を決定することができる。その結果、メモリ制御装置は、メモリ最適化装置によって決定されたクロック信号の立ち上がり部分および立ち下がり部分の個別の遅延時間を設定することによって、クロック信号の立ち上がり部分および立ち下がり部分のタイミングでデータが重畳されたデータ信号（ＤＱ信号）からデータを確実に受信することができる。
【発明の効果】
【００１３】
以上により、メモリ制御装置、メモリ最適化プログラムおよびメモリ最適化方法は、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジのタイミングでデータが重畳されたＤＱ信号からデータを確実に受信することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に、本発明に係るメモリ制御装置の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。
【実施例１】
【００１５】
本実施例１に係るメモリ制御装置は、ＤＱＳ信号の遅延時間を変更して、ＤＱＳ信号に同期したＤＱ信号からデータを抽出して、抽出されたデータがデータ化けとならない遅延時間の上限および下限を、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとに決定して、それぞれのエッジごとにＤＱ信号からデータを抽出するタイミングが最適となる遅延時間を設定する。以降、本実施例１に係るメモリ制御装置が実行する処理を「メモリ最適化設定処理」というものとする。
【００１６】
まず、図１を参照して、実施例１に係るメモリ制御装置を含むメモリ最適化設定システムの全体構成の一例を説明する。図１に示すように、メモリ最適化設定システムは、ＤＤＲ−ＳＤＲＡＭ１とメモリ制御装置２とプロセッサ３とを備える。
【００１７】
ＤＤＲ−ＳＤＲＡＭ１は、メモリ制御装置２からデータ読み出し命令を取得すると、データ読み出し命令に含まれるアドレスに対応するデータをＤＱ信号に重畳して、ＤＱ信号をＤＱドライバ１１を介してメモリ制御装置２に出力する。このとき、ＤＤＲ−ＳＤＲＡＭ１は、メモリ制御装置２がＤＱ信号からデータを抽出するときのタイミングを示すＤＱＳ信号を、ＤＱＳドライバ１２を介してメモリ制御装置２に出力する。なお、ＤＤＲ−ＳＤＲＡＭ１には、あらかじめ特定のアドレスに任意のデータが記憶される。
【００１８】
ストレングス・レジスタ１００ａは、ＤＱＳ信号およびＤＱ信号の振幅の強弱を示すドライブ・ストレングス値を保持する。このドライブ・ストレングス値が大きいと、ＤＱＳ信号およびＤＱ信号が強くなり、ドライブ・ストレングス値が小さいと、ＤＱＳ信号およびＤＱ信号が弱くなる。したがって、ドライブ・ストレングス値が小さくなりＤＱＳ信号およびＤＱ信号が弱くなると、信号波形が確実に捉えられなくなるため、ドライブ・ストレングス値に適正な値が保持されることが望まれる。このストレングス・レジスタ１００ａは、メモリ制御装置２にあるリード・パラメータ・レジスタ２００に設定されたドライブ・ストレングス値と同一の値が後述するレシーバ回路２０によって保持される。
【００１９】
メモリ制御装置２は、レシーバ回路２０と最適化回路２１とを備える。レシーバ回路２０は、ＤＤＲ−ＳＤＲＡＭ１からＤＱＳ信号を取得すると、ＤＱＳ信号をリード・パラメータ・レジスタ２００に設定された立ち上がりエッジおよび立ち下がりエッジの遅延時間だけそれぞれ遅延させた２つのＤＱＳ信号を生成する。また、レシーバ回路２０は、最適化回路２１からデータ読み出し命令を取得すると、ＤＤＲ−ＳＤＲＡＭ１に当該データ読み出し命令を出力する。そして、レシーバ回路２０は、ＤＱ信号から、立ち上がりエッジを遅延させて生成されたＤＱＳ信号の立ち上がりエッジに対応する部分のデータを抽出して、抽出されたデータを最適化回路２１に出力する。また、レシーバ回路２０は、ＤＱ信号から、立ち下がりエッジを遅延させて生成されたＤＱＳ信号の立ち下がりエッジに対応する部分のデータを抽出して、抽出されたデータを最適化回路２１に出力する。ここで、立ち上がりエッジおよび立ち下がりエッジの遅延時間は、後述する最適化回路２１によってリード・パラメータ・レジスタ２００に保持される。
【００２０】
最適化回路２１は、ＤＱ信号からデータを抽出する最適なタイミングの決定を促す最適化命令をプロセッサ３から取得すると、ＤＱＳ信号の遅延時間を変更するために、変更する遅延時間をリード・パラメータ・レジスタ２００に設定する。また、最適化回路２１は、レシーバ回路２０にデータ読み出し命令を出力して、ＤＱ信号から抽出されたＤＱＳ信号の立ち上がりエッジに対応する部分のデータを、レシーバ回路２０から取得する。そして、最適化回路２１は、取得されたデータが、ＤＤＲ−ＳＤＲＡＭ１に記憶された参照データであって読み出し命令に含まれたアドレスの参照データと一致するか否かを判定する。さらに、最適化回路２１は、遅延時間を変更して、変更の都度、ＤＱ信号から抽出されたＤＱＳ信号の立ち上がりエッジに対応する部分のデータが参照データと一致するか否かを判定し、抽出データが参照データと一致するときの遅延時間の上限および下限を決定し、遅延時間の最適値を決定する。また、最適化回路２１は、ＤＱＳ信号の立ち下がりエッジに対しても同様に、遅延時間の上限および下限を決定し、遅延時間の最適値を決定する。そして、最適化回路２１は、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとに決定された遅延時間の最適値をリード・パラメータ・レジスタ２００に設定して、最適化が完了した旨を示す最適化完了メッセージをプロセッサ３に出力する。なお、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとの遅延時間の最適値は、例えばそれぞれ決定された遅延時間の上限と下限の中間値であっても良いが、これに限定されるものではない。
【００２１】
プロセッサ３は、制御装置２の上位装置であり、最適化命令を制御装置２に出力し、最適化完了メッセージを制御装置２から取得する。なお、プロセッサ３は、最適化命令を制御装置２に出力する前に、遅延時間のデフォルトを示すシード値を最適化回路２１に保持させる。
【００２２】
次に、実施例１に係るメモリ制御装置を、図２を参照して説明する。図２は、実施例１に係るメモリ制御装置の構成を示す機能ブロック図である。図２に示すように、メモリ制御装置２は、レシーバ回路２０と、最適化回路２１と、を備える。
【００２３】
レシーバ回路２０は、リード・パラメータ・レジスタに保持された遅延時間に応じて、ＤＱＳ信号を遅延させる。ここで、レシーバ回路の構成について図３を参照しながら説明する。図３に示すように、レシーバ回路２０は、リード・パラメータ・レジスタ２００と、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１と、ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２と、ＤＱ信号ラッチ回路２０３、２０４と、を備える。
【００２４】
リード・パラメータ・レジスタ２００は、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１およびＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２を通るＤＱＳ信号に対するパラメータを保持する。ここで、リード・パラメータ・レジスタ２００のデータ構造について、図４を参照しながら説明する。図４に示すように、リード・パラメータ・レジスタ２００は、立ち上がりディレイ設定値と、立ち下がりディレイ設定値と、ドライブ・ストレングス設定値と、を保持する。立ち上がりディレイ設定値は、ＤＱＳ信号の立ち上がりエッジを遅延させる時間であり、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１のマルチプレクサ２０１ａに設定される。立ち下がりディレイ設定値は、ＤＱＳ信号の立ち下がりエッジを遅延させる時間であり、ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２のマルチプレクサ２０１ｂに設定される。また、ドライブ・ストレングス設定値は、ＤＱＳ信号およびＤＱ信号の振幅の強弱を示す値であり、ＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａに設定される。
【００２５】
ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１は、遅延値設定部２２０からリード・パラメータ・レジスタ２００のＤＱＳ立ち上がりディレイ設定値に設定される、ＤＱＳ信号の立ち上がりエッジを遅延させる時間を表す立ち上がりディレイ値に応じて、ＤＱＳ信号を遅延する。
【００２６】
ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２は、遅延値設定部２２０からリード・パラメータ・レジスタ２００のＤＱＳ立ち下がりディレイ設定値に設定される、ＤＱＳ信号の立ち下がりエッジを遅延させる時間を表す立ち下がりディレイ値に応じて、ＤＱＳ信号を遅延する。
【００２７】
ＤＱ信号ラッチ回路２０３は、立ち上がりデータ抽出部２１０ａからデータ読み出し命令を取得すると、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１によって遅延されたＤＱＳ信号を取得して、当該ＤＱＳ信号の立ち上がりエッジに対応する部分のデータをＤＱ信号から抽出する。そして、ＤＱ信号ラッチ回路２０３は、抽出されたデータを立ち上がりデータ抽出部２１０ａに出力する。
【００２８】
ＤＱ信号ラッチ回路２０４は、立ち下がりデータ抽出部２１０ｂからデータ読み出し命令を取得すると、ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２によって遅延されたＤＱＳ信号を取得して、当該ＤＱＳ信号の立ち下がりエッジに対応する部分のデータをＤＱ信号から抽出する。そして、ＤＱ信号ラッチ回路２０４は、抽出されたデータを立ち下がりデータ抽出部２１０ｂに出力する。
【００２９】
図２に戻って、最適化回路２１は、データ抽出部２１０と、遅延値設定部２２０と、記憶部２３０と、データ判定部２４０と、上下限値決定部２５０と、適正値決定部２６０と、適性値設定部２７０と、を備える。
【００３０】
データ抽出部２１０は、立ち上がりデータ抽出部２１０ａと、立ち下がりデータ抽出部２１０ｂと、を備える。立ち上がりデータ抽出部２１０ａは、あらかじめＤＤＲ−ＳＤＲＡＭ１の特定のアドレスに記憶された任意のデータを読み出すために、データ読み出し命令をＤＱ信号ラッチ回路２０３に出力すると、その後、ＤＱ信号ラッチ回路２０３によってＤＱＳ信号の立ち上がりエッジに対応する時間にＤＱ信号から抽出されたデータを取得する。そして、立ち上がりデータ抽出部２１０ａは、取得されたデータをデータ判定部２４０に出力する。
【００３１】
立ち下がりデータ抽出部２１０ｂは、データ読み出し命令をＤＱ信号ラッチ回路２０４に出力すると、その後、ＤＱ信号ラッチ回路２０４によってＤＱＳ信号の立ち下がりエッジに対応する時間にＤＱ信号から抽出されたデータを取得する。そして、立ち下がりデータ抽出部２１０ｂは、取得されたデータをデータ判定部２４０に出力する。
【００３２】
遅延値設定部２２０は、最適化命令をプロセッサ３から取得すると、ＤＤＲ−ＳＤＲＡＭ１の特定のアドレスに任意のデータを記憶させる。そして、遅延値設定部２２０は、リードパラメータ最適化テーブル２３０ａに保持されたドライブ・ストレングス値およびＤＱＳ信号の立ち上がりエッジの遅延時間の下限値を示す立ち上がり下限ディレイ値を読み出して、それぞれリード・パラメータ・レジスタ２００のドライブ・ストレングス設定値および立ち上がりディレイ設定値に保持させ、ＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａおよびレシーバ回路２０のＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１にディレイ値を設定する。また、遅延値設定部２２０は、データが正常である旨またはデータが異常である旨をデータ判定部２４０から取得すると、立ち上がりディレイ下限値の決定シーケンスの状態により、リードパラメータ最適化テーブル２３０ａの立ち上がり下限ディレイ値を１減算し保持、または１加算し保持、または立ち上がり上限ディレイ値を１加算し保持、または立ち上がり下限ディレイ値を１減算し保持して、当該ディレイ値をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に保持させる。次に、遅延値設定部２２０は、リードパラメータ最適化テーブル２３０ａに保持されたＤＱＳ信号の立ち上がりエッジの遅延時間の上限値を示す立ち上がり上限ディレイ値を１加算し、リード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に保持させ、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１にディレイ値を設定する。また、遅延値設定部２２０は、データが正常である旨をデータ判定部２４０から取得すると、立ち上がり上限ディレイ値を１加算してリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に保持させるとともにリードパラメータ最適化テーブル２３０ａの立ち上がり上限ディレイ値に更に１加算したディレイ値を保持させる。
【００３３】
遅延値設定部２２０は、リードパラメータ最適化テーブル２３０ａに保持された立ち下がり下限ディレイ値を、リード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持させ、レシーバ回路２０のＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２にディレイ値を設定する。また、遅延値設定部２２０は、データが正常である旨またはデータが異常である旨をデータ判定部２４０から取得すると、立ち下がりディレイ下限値の決定シーケンスの状態により、リードパラメータ最適化テーブル２３０ａの立ち下がり下限ディレイ値を１減算し保持、または１加算し保持、または立ち下がり上限ディレイ値を１加算し保持、または立ち下がり下限ディレイ値を１減算し保持して、当該ディレイ値をリード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持させる。次に、遅延値設定部２２０は、リードパラメータ最適化テーブル２３０ａに保持された立ち下がり上限ディレイ値を１加算し、リード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持させ、ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２にディレイ値を設定する。また、遅延値設定部２２０は、データが正常である旨をデータ判定部２４０から取得すると、立ち下がり上限ディレイ値を１加算して、当該ディレイ値をリード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持させるとともにリードパラメータ最適化テーブル２３０ａの立ち下がり上限ディレイ値に更に１加算したディレイ値を保持させる。
【００３４】
データ判定部２４０は、立ち上がりデータ抽出部２１０ａからデータを取得すると、取得されたデータがデータ読み出し命令によってＳＤＲＡＭから読み出された参照データと一致するか否かを判定する。そして、データ判定部２４０は、取得されたデータが参照データと一致するときデータが正常である旨を、取得されたデータが参照データと一致しないときデータが異常である旨を、遅延値設定部２２０および立ち上がり上下限値決定部２５０ａに出力する。
【００３５】
記憶部２３０は、リードパラメータ最適化テーブル２３０ａと、最適化フラグレジスタ２３０ｂと、を備える。
【００３６】
リードパラメータ最適化テーブル２３０ａは、メモリ最適化設定処理を実行中に使用する各種パラメータを保持する。ここで、実施例１に係るリードパラメータ最適化テーブル２３０ａのデータ構造について、図５を参照しながら説明する。図５に示すように、リードパラメータ最適化テーブル２３０ａは、信号の強弱を示すドライブ・ストレングス値と、立ち上がり下限ディレイ値と、立ち上がり上限ディレイ値と、立ち下がり下限ディレイ値と、立ち下がり上限ディレイ値と、立ち上がりディレイ値と、立ち下がりディレイ値と、を保持する。立ち上がり下限ディレイ値および立ち上がり上限ディレイ値は、ＤＱＳ信号の立ち上がりエッジに対応する時間にＤＱ信号からデータを正しく抽出するために、ＤＱＳ信号を遅延する時間の上下限値であり、例えば０〜９（単位：クロック）である。立ち下がり下限ディレイ値および立ち下がり上限ディレイ値は、ＤＱＳ信号の立ち下がりエッジに対応する時間にＤＱ信号からデータを正しく抽出するために、ＤＱＳ信号を遅延する時間の上下限値であり、例えば０〜９（単位：クロック）である。立ち上がりディレイ値は、ＤＱＳ信号の立ち上がりエッジに対応する時間にＤＱ信号からデータを正しく抽出するためのＤＱＳ信号の遅延時間の最適値であり、例えば０〜９（単位：クロック）である。立ち下がりディレイ値は、ＤＱＳ信号の立ち下がりエッジに対応する時間にＤＱ信号からデータを正しく抽出するためのＤＱＳ信号の遅延時間の最適値であり、例えば０〜９（単位：クロック）である。なお、メモリ最適化設定処理が開始される前にディレイ値に保持されるシード値は、例えば共通の５（単位：クロック）である。
【００３７】
最適化フラグレジスタ２３０ｂは、メモリ最適化設定処理の進捗状況を保持する。ここで、実施例１に係る最適化フラグレジスタ２３０ｂのデータ構造について図６を参照しながら説明する。図６に示すように、最適化フラグレジスタ２３０ｂは、最適化開始フラグと、立ち上がり下限フラグと、立ち上がり上限フラグと、立ち下がり下限フラグと、立ち下がり上限フラグと、最適化完了フラグと、を保持する。最適化開始フラグは、メモリ最適化設定処理が開始しているか否かを示す。立ち上がり下限フラグおよび立ち上がり上限フラグは、ＤＱＳ信号の立ち上がりエッジを遅延させる時間の下限値および上限値の決定／未決定を示す。立ち下がり下限フラグおよび立ち下がり上限フラグは、ＤＱＳ信号の立ち下がりエッジを遅延させる時間の下限値および上限値の決定／未決定を示す。最適化完了フラグは、メモリ最適化設定処理の完了／未完了を示す。
【００３８】
データ判定部２４０は、立ち下がりデータ抽出部２１０ｂからデータを取得すると、取得されたデータが、データ読み出し命令によってＳＤＲＡＭから読み出された参照データと一致するか否かを判定する。そして、データ判定部２４０は、取得されたデータが参照データと一致するときデータが正常である旨を、取得されたデータが参照データと一致しないときデータが異常である旨を遅延値設定部２２０および立ち下がり上下限値決定部２５０ｂに出力する。
【００３９】
上下限値決定部２５０は、立ち上がり上下限値決定部２５０ａと、立ち下がり上下限値決定部２５０ｂと、を備える。立ち上がり上下限値決定部２５０ａは、データ判定部２４０からデータが正常である旨およびデータが異常である旨を取得し、正常にデータが取得出来る立ち上がり下限ディレイまたは上限ディレイを認識すると、最適化フラグレジスタ２３０ｂの立ち上がり下限フラグまたは立ち上がり上限フラグに完了した旨を示すオン（例えば「１」）を設定する。そして、立ち上がり上下限値決定部２５０ａは、最適化フラグレジスタ２３０ｂの立ち上がり下限フラグおよび立ち上がり上限フラグがどちらもオンのとき、ディレイ値の上下限を決定した旨を立ち上がり適性値決定部２６０ａに出力する。なお、メモリ最適化設定処理は、例えば、下限、上限の順にディレイ値を決定する。
【００４０】
立ち下がり上下限値決定部２５０ｂは、データ判定部２４０からデータが正常である旨およびデータが異常である旨を取得し、正常にデータが取得出来る立ち下がり下限ディレイまたは上限ディレイを認識すると、最適化フラグレジスタ２３０ｂの立ち下がり下限フラグまたは立ち下がり上限フラグに完了した旨を示すオン（例えば「１」）を設定する。そして、立ち下がり上下限値決定部２５０ｂは、最適化フラグレジスタ２３０ｂの立ち下がり下限フラグおよび立ち下がり上限フラグがどちらもオンのとき、ディレイ値の上下限を決定した旨を立ち下がり適性値決定部２６０ｂに出力する。
【００４１】
適正値決定部２６０は、立ち上がり適正値決定部２６０ａと、立ち下がり適正値決定部２６０ｂと、を備える。立ち上がり適正値決定部２６０ａは、立ち上がり上下限値決定部２５０ａからディレイ値の上下限を決定した旨を取得すると、リードパラメータ最適化テーブル２３０ａに保持された立ち上がり下限ディレイ値および立ち上がり上限ディレイ値を読み出して、立ち上がり下限ディレイ値と立ち上がり上限ディレイ値との中間値を算出する。そして、立ち上がり適正値決定部２６０ａは、リードパラメータ最適化テーブル２３０ａの立ち上がりディレイ値に中間値を保持させる。
【００４２】
立ち下がり適正値決定部２６０ｂは、立ち下がり上下限値決定部２５０ｂからディレイ値の上下限を決定した旨を取得すると、リードパラメータ最適化テーブル２３０ａに保持された立ち下がり下限ディレイ値および立ち下がり上限ディレイ値を読み出して、立ち下がり下限ディレイ値と立ち下がり上限ディレイ値との中間値を算出する。そして、立ち下がり適正値決定部２６０ｂは、リードパラメータ最適化テーブル２３０ａの立ち下がりディレイ値に中間値を保持させ、最適化フラグレジスタ２３０ｂの最適化完了フラグに最適化が完了した旨を示すオン（例えば「１」）を設定する。
【００４３】
適正値設定部２７０は、最適化フラグレジスタ２３０ｂの最適化完了フラグに最適化が完了した旨を示すオンが設定されているとき、リードパラメータ最適化テーブル２３０ａに保持された立ち上がりディレイ値および立ち下がりディレイ値を読み出して、立ち上がりディレイ値をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に保持し、立ち下がりディレイ値をリード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持し、それぞれＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１、ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２に設定する。そして、適正値設定部２７０は、最適化完了メッセージをプロセッサ３に出力する。
【００４４】
次に、図７〜図１４を参照して、実施例１に係るメモリ最適化設定処理の処理手順について説明する。図７では、実施例１に係るメモリ最適化設定処理の処理手順について説明し、図８〜図１４では、メモリ最適化設定処理の各処理の処理手順について説明する。
【００４５】
図７は、実施例１に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【００４６】
まず、最適化回路２１は、初期処理を行う（Ｓ１１０）。次に、最適化回路２１は、ＤＱＳ信号の立ち上がりエッジの下限ディレイ値および上限ディレイ値を決定する処理を行う（Ｓ１２０、Ｓ１３０）。次に、最適化回路２１は、ＤＱＳ信号の立ち下がりエッジの下限ディレイ値および上限ディレイ値を決定する処理を行う（Ｓ１４０、Ｓ１５０）。引き続き、最適化回路２１は、立ち上がりのディレイ値の最適値および立ち下がりのディレイ値の最適値をそれぞれリード・パラメータ・レジスタ２００に設定する処理を行う（Ｓ１６０）。そして、最適化回路２１は、終了処理を行う（Ｓ１７０）。
【００４７】
図８は、実施例１に係るメモリ最適化設定処理の初期処理の処理手順のフローチャートである。
【００４８】
シード値が、プロセッサ３によって、リードパラメータ最適化テーブル２３０ａに保持される（Ｓ１１０ａ）。その後、遅延値設定部２２０は、プロセッサ３から最適化命令を取得し（Ｓ１１０ｂ）、最適化フラグレジスタ２３０ｂの最適化開始フラグを「１」に設定する（Ｓ１１０ｃ）。そして、遅延値設定部２２０は、ＤＤＲ−ＳＤＲＡＭ１の特定のアドレスに所定のデータ（参照データ）を書き込む（Ｓ１１０ｄ）。
【００４９】
図９は、実施例１に係るメモリ最適化設定処理の立ち上がり下限ディレイ値決定処理の処理手順のフローチャートである。
【００５０】
初期処理がされた後、遅延値設定部２２０は、リードパラメータ最適化テーブル２２０ａに保持されたドライブ・ストレングス値および立ち上がり下限ディレイ値をリード・パラメータ・レジスタ２００のドライブ・ストレングス設定値および立ち上がりディレイ設定値に設定し、ドライブ・ストレングス設定値をＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａおよび立ち上がりディレイ設定値をＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１に設定する（Ｓ１２０ａ）。
【００５１】
そして、立ち上がりデータ抽出部２１０ａは、ＤＤＲ−ＳＤＲＡＭ１の特定のアドレスに記憶された参照データを読み出すために、特定のアドレスを含んだデータ読み出し命令をＤＱ信号ラッチ回路２０３に出力して、参照データが重畳されたＤＱ信号から立ち上がりエッジに対応する部分のデータを取得する（Ｓ１２０ｂ）。そして、データ判定部２４０は、取得されたデータが参照データと一致するか否かを判定する（Ｓ１２０ｃ）。
【００５２】
取得されたデータが参照データと一致すると判定されたとき（Ｓ１２０ｃＮｏ）、遅延値設定部２２０は、リードパラメータ最適化テーブル２２０ａに保持された立ち上がり下限ディレイ値を所定値（例えば、１クロック）だけ減算した値をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に設定するとともにＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１に設定する（Ｓ１２０ｄ）。
【００５３】
引き続き、立ち上がりデータ抽出部２１０ａは、再度ＤＤＲ−ＳＤＲＡＭ１の特定のアドレスからデータを取得する（Ｓ１２０ｅ）。そして、データ判定部２４０は、取得されたデータが参照データと一致するか否かを判定する（Ｓ１２０ｆ）。
【００５４】
取得されたデータが参照データと一致すると判定されたとき（Ｓ１２０ｆＮｏ）、遅延値設定部２２０は、リードパラメータ最適化テーブル２２０ａに保持された立ち上がり下限ディレイ値を所定値（例えば、１クロック）だけ減算し（Ｓ１２０ｇ）、立ち上がり下限ディレイ値が最小値（例えば、「０」）であるか否かを判定する（Ｓ１２０ｈ）。このとき、立ち上がり下限ディレイ値が最小値（例えば、「０」）でないとき（Ｓ１２０ｈＮｏ）、遅延値設定部２２０は、立ち上がり下限ディレイ値を決定する処理を繰り返す。
【００５５】
一方、抽出されたデータが参照データと一致しないと判定されたとき（Ｓ１２０ｃＹｅｓ）、遅延値設定部２２０は、リードパラメータ最適化テーブル２２０ａの立ち上がり下限ディレイ値および立ち上がり上限ディレイ値を所定値（例えば、１クロック）ずつ加算し（Ｓ１２０ｉ）、加算された値をそれぞれリードパラメータ最適化テーブル２３０ａに保持するとともに立ち下がり下限ディレイ値をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に設定するとともにＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１に設定する（Ｓ１２０ｊ）。ここで、立ち上がり上下限ディレイ値を調整してそれぞれ所定値ずつ加算したのは、立ち上がりエッジの下限が定まらないからである。引き続き、立ち上がりデータ抽出部２１０ａは、再度ＤＤＲ−ＳＤＲＡＭ１の特定のアドレスからデータを取得する（Ｓ１２０ｋ）。そして、データ判定部２４０は、抽出されたデータが参照データと一致するか否かを判定する（Ｓ１２０ｌ）。抽出されたデータが参照データと一致しないと判定されたとき（Ｓ１２０ｌＹｅｓ）、遅延値設定部２２０は、立ち上がり下限ディレイ値を決定する処理を繰り返す。
【００５６】
一方、立ち上がり上下限ディレイ値を調整後に抽出されたデータが参照データと一致すると判定されたとき（Ｓ１２０ｌＮｏ）、立ち上がり下限ディレイ値が最小値（例えば、０）のとき（Ｓ１２０ｈＹｅｓ）または立ち上がり上下限ディレイ値を調整しないで抽出されたデータが参照データと一致しないと判定されたとき（Ｓ１２０ｆＹｅｓ）、立ち上がり上下限値決定部２５０ａは、立ち上がり下限値が決定されたため、最適化フラグレジスタ２３０ｂの立ち上がり下限フラグに「１」を設定する（Ｓ１２０ｍ）。
【００５７】
図１０は、実施例１に係るメモリ最適化設定処理の立ち上がり上限ディレイ値決定処理の処理手順のフローチャートである。
【００５８】
立ち上がり下限ディレイ値決定処理がされた後、引き続き、遅延値設定部２２０は、リードパラメータ最適化テーブル２２０ａに保持された立ち上がり上限ディレイ値を所定値（例えば、１クロック）だけ加算した値をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に設定するとともにＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１に設定する（Ｓ１３０ａ）。
【００５９】
引き続き、立ち上がりデータ抽出部２１０ａは、ＤＤＲ−ＳＤＲＡＭ１の特定のアドレスからデータを取得する（Ｓ１３０ｂ）。そして、データ判定部２４０は、抽出されたデータが参照データと一致するか否かを判定する（Ｓ１３０ｃ）。
【００６０】
抽出されたデータが参照データと一致すると判定されたとき（Ｓ１３０ｃＮｏ）、遅延値設定部２２０は、リードパラメータ最適化テーブル２２０ａに保持された立ち上がり上限ディレイ値を所定値（例えば、１クロック）だけ加算し（Ｓ１３０ｄ）、立ち上がり上限ディレイ値が最大値（例えば、９クロック）であるか否かを判定する（Ｓ１３０ｅ）。このとき、立ち上がり上限ディレイ値が最大値（例えば、９クロック）でないとき（Ｓ１３０ｅＮｏ）、遅延値設定部２２０は、立ち上がり上限ディレイ値を決定する処理を繰り返す。
【００６１】
一方、立ち上がり上限ディレイ値が最大値（例えば、９クロック）のとき（Ｓ１３０ｅＹｅｓ）または抽出されたデータが参照データと一致しないと判定されたとき（Ｓ１３０ｃＹｅｓ）、立ち上がり上下限値決定部２５０ａは、立ち上がり上限値が決定されたため、最適化フラグレジスタ２３０ｂの立ち上がり上限フラグに１を設定する（Ｓ１３０ｆ）。
【００６２】
そして、立ち上がり適正値決定部２６０ａは、リードパラメータ最適化テーブル２３０ａに保持された立ち上がり下限ディレイ値および立ち上がり上限ディレイ値の中間値をリードパラメータ最適化テーブル２３０ａの立ち上がりディレイ値に設定する（Ｓ１３０ｇ）。
【００６３】
図１１は、実施例１に係るメモリ最適化設定処理の立ち下がり下限ディレイ値決定処理の処理手順のフローチャートである。なお、図１１では、立ち上がり下限ディレイ値決定処理（図９）と処理が同様であるため、その説明を省略する。ただし、図１１では、図９が使用した立ち上がり下限ディレイ値が立ち下がり下限ディレイ値に、立ち上がり上限ディレイ値が立ち下がり上限ディレイ値に、立ち上がり下限フラグが立ち下がり下限フラグに置き換えられる。
【００６４】
図１２は、実施例１に係るメモリ最適化設定処理の立ち下がり上限ディレイ値決定処理の処理手順のフローチャートである。なお、図１２は、立ち上がり上限ディレイ値決定処理（図１０）と処理がほぼ同様であるため、同様の処理の説明を省略する。ただし、図１２では、図１０が使用した立ち上がり上限ディレイ値が立ち下がり上限ディレイ値に、立ち上がり上限フラグが立ち下がり上限フラグに置き換えられる。
【００６５】
立ち下がり上限ディレイ値決定処理の終了時に、立ち下がり適正値決定部２６０ｂが、最適化フラグレジスタ２３０ｂの最適化完了フラグに１を設定する（Ｓ１５０ｈ）。
【００６６】
図１３は、実施例１に係るメモリ最適化設定処理の最適ディレイ値設定処理の処理手順のフローチャートである。
【００６７】
最適化フラグレジスタ２３０ｂの最適化完了フラグに１が設定されたとき、適正値設定部２７０は、リードパラメータ最適化テーブル２３０ａに保持された立ち上がりディレイ値および立ち下がりディレイ値のうち立ち上がりディレイ値をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に設定するとともにＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１に設定する。また、適正値設定部２７０は、リードパラメータ最適化テーブル２３０ａに保持された立ち上がりディレイ値および立ち下がりディレイ値のうち立ち下がりディレイ値をリード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に設定するとともにＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２に設定する（Ｓ１６０ａ）。
【００６８】
図１４は、実施例１に係るメモリ最適化設定処理の終了処理の処理手順のフローチャートである。
【００６９】
最適ディレイ値設定処理がされた後、適正値設定部２７０は、メモリ最適化設定処理が完了したため、最適化完了メッセージをプロセッサ３に出力する（Ｓ１７０ａ）。そして、適正値設定部２７０は、最適化フラグレジスタの全レジスタを０に設定する（Ｓ１７０ｂ）。
【００７０】
以上のように本実施例１によれば、メモリ制御装置２は、立ち上がりエッジおよび立ち下がりエッジが一定の周期で出現するＤＱＳ信号を遅延させて遅延時間が互いに異なる複数の遅延ＤＱＳ信号を生成する。次に、メモリ制御装置２は、既知の参照データを一部に持つＤＱ信号から、生成された複数の遅延ＤＱＳ信号の立ち上がりエッジまたは立ち下がりエッジに対応する部分のデータを抽出する。そして、メモリ制御装置２は、抽出されたそれぞれの遅延ＤＱ信号の立ち上がりエッジまたは立ち下がりエッジに対応する部分のデータが参照データと一致するか否かを判定する。判定された結果、いずれかの遅延ＤＱＳ信号の立ち上がりエッジに対応する部分のデータが参照データと一致するとき、一致するときのＤＱＳ信号の立ち上がり部分に対する遅延時間の範囲、およびいずれかの遅延ＤＱＳ信号の立ち下がり部分に対応する部分のデータが参照データと一致するとき、一致するときのＤＱＳ信号の立ち下がり部分に対する遅延時間の範囲を決定する。
【００７１】
このようにして、メモリ制御装置２は、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジについてＤＱＳ信号を遅延させる時間を個別に決定しているため、ＤＱＳ信号およびＤＱ信号の波形がそれぞれ立ち上がりエッジと立ち下がりエッジとで異なっていても、それぞれ適正な遅延時間を決定することができる。その結果、メモリ制御装置２は、決定されたＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジの個別の遅延時間をレシーバ回路２０に設定することによって、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジのタイミングでデータが重畳されたＤＱ信号からデータ化けが起こらないデータを確実に受信することができる。
【実施例２】
【００７２】
ところで、上記の実施例１では、ＤＱＳ信号およびＤＱ信号の波形の強弱を示すドライブ・ストレングスを固定にしてＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定する場合を説明した。本発明はこれに限定されるものではなく、ドライブ・ストレングスを変更して変更されたドライブ・ストレングスごとにＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間の範囲を決定して、遅延時間の範囲が最大となるドライブ・ストレングスを用いた立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定しても良い。
【００７３】
そこで、実施例２では、ドライブ・ストレングスを変更して変更されたドライブ・ストレングスごとにＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間の範囲を決定して、遅延時間の範囲が最大となるドライブ・ストレングスを用いた立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定する場合を説明する。
【００７４】
まず、実施例２に係るメモリ制御装置の構成について図１５を参照しながら説明する。図１５は、実施例２に係るメモリ制御装置の構成を示す機能ブロック図である。図１５に示すように、実施例２に係るメモリ制御装置４では、実施例１に係るメモリ制御装置２（図２）に選択部２７０ａと設定部２７０ｂとが追加され、リードパラメータ最適化テーブル２３０ｃと最適化フラグレジスタ２３０ｄとが変更されている。なお、図１５において、図２と同じ部分には同じ符号を付し、詳しい説明を省略する。
【００７５】
リードパラメータ最適化テーブル２３０ｃは、メモリ最適化設定処理を実行中に使用する各種パラメータを保持し、異なる複数のドライブ・ストレングスごとに保持される。ここで、実施例２に係るリードパラメータ最適化テーブル２３０ｃのデータ構造について、図１６を参照しながら説明する。図１６に示すように、リードパラメータ最適化テーブル２３０ｃは、ドライブ・ストレングスＡ、Ｂ、Ｃそれぞれに対応する各種パラメータを保持する。各種パラメータには、ドライブ・ストレングス値と、立ち上がり下限ディレイ値と、立ち上がり上限ディレイ値と、立ち上がり差分ディレイ値と、立ち下がり下限ディレイ値と、立ち下がり上限ディレイ値と、立ち下がり差分ディレイ値と、立ち上がりディレイ値と、立ち下がりディレイ値と、がある。立ち上がり差分ディレイ値は、立ち上がり下限ディレイ値と立ち上がり上限ディレイ値との差分である。立ち下がり差分ディレイ値は、立ち下がり下限ディレイ値と立ち下がり上限ディレイ値との差分である。なお、リードパラメータ最適化テーブル２３０ｃは、３種類のドライブ・ストレングスＡ、Ｂ、Ｃを保持するものとしたが、これに限定されず、４種類であっても、それ以上であっても良い。
【００７６】
最適化フラグレジスタ２３０ｄは、メモリ最適化設定処理の進捗状況を保持し、異なる複数のドライブ・ストレングスごとに行われる処理ごとに保持される。ここで、実施例２に係る最適化フラグレジスタ２３０ｄのデータ構造について図１７を参照しながら説明する。図１７に示すように、最適化フラグレジスタ２３０ｄは、最適化開始フラグと、ドライブ・ストレングスＡ、Ｂ、Ｃそれぞれに対応する立ち上がり下限フラグ、立ち上がり上限フラグ、立ち下がり下限フラグ、立ち下がり上限フラグおよび最適化完了フラグと、を保持する。
【００７７】
遅延値設定部２２０は、最適化命令をプロセッサ３から取得すると、リードパラメータ最適化テーブル２３０ｃに保持されたドライブ・ストレングスＡに対応するドライブ・ストレングス値および立ち上がり下限ディレイ値を読み出して、リード・パラメータ・レジスタ２００のドライブ・ストレングス設定値および立ち上がりディレイ設定値に保持させ、ＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａおよびレシーバ回路２０のＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１にディレイ値を設定する。次に、リードパラメータ最適化テーブル２３０ｃに保持された立ち上がり上限ディレイ値を読み出して、リード・パラメータ・レジスタ２００の立ち上がりディレイ設定値に保持させ、レシーバ回路２０のＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１にディレイ値を設定する。次に、遅延値設定部２２０は、リードパラメータ最適化テーブル２３０ｃに保持されたドライブ・ストレングスＡに対応する立ち下がり下限ディレイ値を読み出して、リード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持させ、レシーバ回路２０のＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２にディレイ値を設定する。次に、リードパラメータ最適化テーブル２３０ｃに保持された立ち下がり上限ディレイ値を読み出して、リード・パラメータ・レジスタ２００の立ち下がりディレイ設定値に保持させ、レシーバ回路２０のＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２にディレイ値を設定する。なお、遅延値設定部２２０は、例えば、ドライブ・ストレングスＡ、Ｂ、Ｃの順でドライブ・ストレングスに対応するドライブ・ストレングス値をリード・パラメータ・レジスタ２００に保持およびＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａに保持させるものとする。
【００７８】
立ち上がり適正値決定部２６０ａは、立ち上がり上下限値決定部２５０ａからディレイ値の上下限を決定した旨を取得すると、リードパラメータ最適化テーブル２３０ｃに保持された立ち上がり下限ディレイ値および立ち上がり上限ディレイ値を読み出して、立ち上がり下限ディレイ値と立ち上がり上限ディレイ値との中間値を算出し、リードパラメータ最適化テーブル２３０ｃの立ち上がりディレイ値に中間値を保持させる。また、立ち上がり適正値決定部２６０ａは、リードパラメータ最適化テーブル２３０ｃから読み出された立ち上がり下限ディレイ値と立ち上がり上限ディレイ値との差分を算出し、リードパラメータ最適化テーブル２３０ｃの立ち上がり差分ディレイ値に差分を保持させる。
【００７９】
立ち下がり適正値決定部２６０ｂは、立ち下がり上下限値決定部２５０ｂからディレイ値の上下限を決定した旨を取得すると、リードパラメータ最適化テーブル２３０ｃに保持された立ち下がり下限ディレイ値および立ち下がり上限ディレイ値を読み出して、立ち下がり下限ディレイ値と立ち下がり上限ディレイ値との中間値を算出し、リードパラメータ最適化テーブル２３０ｃの立ち下がりディレイ値に中間値を保持させる。また、立ち下がり適正値決定部２６０ａは、リードパラメータ最適化テーブル２３０ｃから読み出された立ち下がり下限ディレイ値と立ち下がり上限ディレイ値との差分を算出し、リードパラメータ最適化テーブル２３０ｃの立ち下がり差分ディレイ値に差分を保持させる。そして、立ち下がり適正値決定部２６０ａは、最適化フラグレジスタ２３０ｄの最適化完了フラグに最適化が完了した旨を示すオン（例えば「１」）を設定する。
【００８０】
適正値設定部２７０は、選択部２７０ａと設定部２７０ｂとを備える。選択部２７０ａは、最適化フラグレジスタ２３０ｄの最適化完了フラグＡ、Ｂ、Ｃ全てに最適化が完了した旨を示すオンが設定されているとき、ドライブ・ストレングスＡ、Ｂ、Ｃに対応する立ち上がり差分ディレイ値（または立ち下がり差分ディレイ値）が最大値を示すドライブ・ストレングスを選択する。具体的には、選択部２７０ａは、リードパラメータ最適化テーブル２３０ｃからドライブ・ストレングスＡ、Ｂ、Ｃに対応する立ち上がり差分ディレイ値Ａ、Ｂ、Ｃ（または立ち下がり差分ディレイ値Ａ、Ｂ、Ｃ）を読み出す。そして、選択部２７０ａは、読み出された立ち上がり差分ディレイ値のうち最大値である立ち上がり差分ディレイ値（または立ち下がり差分ディレイ値）に対応するドライブ・ストレングスを選択する。また、選択部２７０ａは、選択されたドライブ・ストレングス、ドライブ・ストレングスに対応する立ち上がりディレイ値および立ち下がりディレイ値を設定部２７０ｂに出力する。
【００８１】
設定部２７０ｂは、選択部２７０ａからドライブ・ストレングス、立ち上がりディレイ値および立ち下がりディレイ値を取得すると、それぞれリード・パラメータ・レジスタ２００のドライブ・ストレングス設定値、立ち上がりディレイ設定値および立ち下がりディレイ設定値に設定し、ＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａ、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１およびＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２に設定する。そして、適正値設定部２６０は、最適化完了メッセージをプロセッサ３に出力する。
【００８２】
次に、図１８を参照して、実施例２に係るメモリ最適化設定処理の処理手順について説明する。図１８は、実施例２に係るメモリ最適化設定処理の処理手順を示すフローチャートである。なお、図１８では、ドライブ・ストレングスＡ、Ｂ、Ｃの順序で処理が行われるが、それぞれの処理は、図７とほぼ同様であるため、同様の処理の説明を省略する。
【００８３】
まず、メモリ最適化設定処理は、初期処理を行う（Ｓ２１０）。
【００８４】
次に、メモリ最適化設定処理は、ドライブ・ストレングスＡに対するＤＱＳ信号の立ち上がりエッジの上下限値を決定するために、立ち上がり下限ディレイ値Ａ決定処理および立ち上がりエッジ上限ディレイ値Ａ決定処理を行う（Ｓ２２０、Ｓ２３０）。このとき、メモリ最適化設定処理の立ち上がり適正値決定部２６０ａは、立ち上がり下限ディレイ値と立ち上がり上限ディレイ値との差分をリードパラメータ最適化テーブル２３０ｃに保持させる。
【００８５】
次に、メモリ最適化設定処理は、ドライブ・ストレングスＡに対するＤＱＳ信号の立ち下がりエッジの上下限値を決定するために、立ち下がり下限ディレイ値Ａ決定処理および立ち下がりエッジ上限ディレイ値Ａ決定処理を行う（Ｓ２４０、Ｓ２５０）。このとき、メモリ最適化設定処理の立ち下がり適正値決定部２６０ｂは、立ち下がり下限ディレイ値と立ち下がり上限ディレイ値との差分をリードパラメータ最適化テーブル２３０ｃに保持させる。
【００８６】
引き続き、メモリ最適化設定処理は、ドライブ・ストレングスＡを用いた前述した処理を、ドライブ・ストレングスＢ、Ｃの順序で、それぞれのドライブ・ストレングスを用いた処理を行う（Ｓ２６０〜Ｓ２９０、Ｓ３００〜Ｓ３３０）。
【００８７】
引き続き、メモリ最適化設定処理は、最適ディレイ値設定処理を行う（Ｓ３４０）。具体的には、メモリ最適化設定処理は、ドライブ・ストレングスＡ、Ｂ、Ｃに対応する立ち上がりディレイ値（または立ち下がりディレイ値）の上下限の差分が最大値を示すドライブ・ストレングスを選択する。そして、メモリ最適化設定処理は、選択されたドライブ・ストレングスとドライブ・ストレングスに対応する立ち上がりディレイ値および立ち下がりディレイ値とをリード・パラメータ・レジスタ２００のドライブ・ストレングス設定値および立ち上がりディレイ設定値および立ち下がりディレイ設定値に設定し、それぞれＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａおよびＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１、ＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２に設定する。そして、適正値設定部２６０は、最適化完了メッセージをプロセッサ３に出力する。
【００８８】
そして、メモリ最適化設定処理は、終了処理を行う（Ｓ３５０）。
【００８９】
以上のように本実施例２によれば、メモリ制御装置４は、異なる複数のドライブ・ストレングスを用いて、それぞれのドライブ・ストレングスに対応するＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間の範囲を決定する。そして、メモリ制御装置４は、ＤＱＳ信号の立ち上がりエッジの遅延時間の範囲またはＤＱＳ信号の立ち下がりエッジの遅延時間の範囲が最大を示すドライブ・ストレングスを選択する。そして、メモリ制御装置４は、選択されたドライブ・ストレングスに対応するＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定する。
【００９０】
このようにして、メモリ制御装置４は、ドライブ・ストレングスを変更してＤＱＳ信号の立ち上がりエッジまたは立ち下がりエッジの遅延時間の範囲が最大となるドライブ・ストレングスを選択するため、ＤＱ信号を受信するタイミングマージンを最大にすることができ、ＤＱ信号の受信タイミングを最適にすることができる。
【実施例３】
【００９１】
ところで、上記の実施例１では、プロセッサ３から最適化命令を取得したとき、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定する場合を説明した。本発明はこれに限定されるものではなく、ＤＤＲ−ＳＤＲＡＭ１から受信されたデータにエラーが発生したとき、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定しても良い。
【００９２】
そこで、実施例３では、ＤＤＲ−ＳＤＲＡＭ１から受信されたデータにエラーが発生したとき、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間を決定する場合を説明する。
【００９３】
まず、実施例３に係るメモリ制御装置の構成について図１９を参照しながら説明する。図１９は、実施例３に係るメモリ制御装置の構成を示す機能ブロック図である。図１９に示すように、実施例３に係るメモリ制御装置５では、実施例１に係るメモリ制御装置２（図２）にＣＲＣ生成回路４１とＣＲＣ比較回路４２とリトライ回路４３とが追加されている。また、メモリ制御装置５は、ＤＤＲ−ＳＤＲＡＭ１とインタフェースＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆを介して接続している。なお、図１９において、図２と同じ部分には同じ符号を付し、詳しい説明を省略する。
【００９４】
レシーバ回路２０は、ＤＤＲ−ＳＤＲＡＭ１からＣＲＣが付加されたデータを受信すると、受信されたデータをＣＲＣ生成回路４１に出力し、受信されたデータに付加されたＣＲＣをＣＲＣ比較回路４２に出力する。なお、ＤＤＲ−ＳＤＲＡＭ１には、データがＣＲＣを付加して記憶されているものとする。
【００９５】
ＣＲＣ生成回路４１は、レシーバ回路２０からデータを取得すると、取得されたデータからＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を算出して、算出されたＣＲＣをＣＲＣ比較回路４２に出力する。
【００９６】
ＣＲＣ比較回路４２は、レシーバ回路２０からＣＲＣを取得し、ＣＲＣ生成回路４１からＣＲＣを取得すると、取得されたそれぞれのＣＲＣを比較する。そして、ＣＲＣ比較回路４２は、取得されたそれぞれのＣＲＣを比較した結果、一致すると判定されたとき、ＣＲＣが一致した旨をステート・マシン回路４３０に出力する。一方、ＣＲＣ比較回路４２は、取得されたそれぞれのＣＲＣを比較した結果、一致しないと判定されたとき、ＣＲＣが一致しない旨をステート・マシン回路４３０に出力する。
【００９７】
リトライ回路４３は、ステート・マシン回路４３０と、記憶部４４０と、を備える。ステート・マシン回路４３０は、ＣＲＣ比較回路４２からＣＲＣが一致した旨を取得すると、図示しないがＣＰＵに次の動作を促す。一方、ステート・マシン回路４３０は、ＣＲＣ比較回路４２からＣＲＣが一致しない旨を取得すると、リトライの実行回数を示すリトライ・カウント４４０ｂを１だけ加算する。そして、ステート・マシン回路４３０は、加算されたリトライ・カウント４４０ｂがリトライ・カウントの閾値を示すリトライ閾値４４０ｃ以下であるとき、リトライ・テーブル４４０ｄに保持されたディレイ値およびドライブ・ストレングス値を読み出し、読み出されたそれぞれの値を変更してリード・パラメータ・レジスタ２００およびＤＱＳディレイ等価回路およびＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａに設定して、ＣＰＵにリトライを実行させる。一方、ステート・マシン回路４３０は、加算されたリトライ・カウント４４０ｂがリトライ閾値４４０ｃより大きいとき、最適化命令を最適化回路２１に対して出力する。これにより、ステート・マシン回路４３０は、最新の環境に基づくＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのＤＱＳ信号の遅延時間をリード・パラメータ・レジスタ２００に設定することができるため、設定後、データ化けエラーの発生を抑制することができる。
【００９８】
記憶部４４０は、リトライ・フラグ４４０ａと、リトライ・カウント４４０ｂと、リトライ閾値４４０ｃと、リトライ・テーブル４４０ｄと、を備える。リトライ・フラグ４４０は、リトライが開始されたか否かを保持し、例えばリトライが開始されていないとき０、リトライが開始されているとき１を保持する。リトライ・カウント４４０ｂは、リトライの実行回数を保持する。リトライ閾値４４０ｃは、リトライ許容回数の最大値を保持する。リトライ・テーブル４４０ｄは、リトライを実行させるときに、リード・パラメータ・レジスタ２２０に設定させるドライブ・ストレングス値およびディレイ値等を保持する。
【００９９】
ここで、実施例３に係るリトライ・テーブル４４０ｄのデータ構造について、図２０を参照しながら説明する。図２０に示すように、リトライ・テーブル４４０ｄは、カレント・ディレイ値と、リトライ・ドライブ・ストレングス値と、リトライ・ディレイ値と、最小ディレイフラグと、最大ディレイフラグと、を保持する。カレント・ディレイ値は、リトライ開始前のＤＱＳ信号のディレイ値を示し、例えば０〜９（単位：クロック）である。リトライ・ドライブ・ストレングス値は、リトライ時のＤＤＲ・ＳＤＲＡＭ１のドライブ・ストレングス値を示す。リトライ・ディレイ値は、リトライ時のＤＱＳ信号のディレイ値を示し、例えば０〜９（単位：クロック）である。最小ディレイフラグは、ＤＱＳ信号のディレイ値を最小値まで変更したか否かを示し、例えば最小値まで変更していないとき「０」、最小値まで変更したとき「１」である。最大ディレイフラグは、ＤＱＳ信号のディレイ値を最大値まで変更したか否かを示し、例えば最大値まで変更していないとき「０」、最大値まで変更したとき「１」である。なお、リトライ・ディレイ値には、ＤＱＳ信号の立ち上がりエッジと立ち下がりエッジとを区別しないでディレイ値が保持されているが、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとのディレイ値が保持されているものとしても良い。
【０１００】
次に、図２１−１〜４を参照して、実施例３に係るメモリ最適化設定処理の処理手順について説明する。
【０１０１】
まず、レシーバ回路２０は、ＤＤＲ−ＳＤＲＡＭ１へのデータ読み出し命令を出力する。すると、レシーバ回路２０は、ＤＤＲ−ＳＤＲＡＭ  Ｉ／Ｆを介して、データ読み出し命令に対するデータを受信する（Ｓ４１０）。このとき、レシーバ回路２０は、データに付加されたＣＲＣを受信する。
【０１０２】
そして、ＣＲＣ生成回路４１は、レシーバ回路２０によって受信されたデータからＣＲＣを生成し、ＣＲＣ比較回路４２に出力する。ＣＲＣ比較回路４２は、レシーバ回路２０によって受信されたＣＲＣとＣＲＣ生成回路４１によって生成されたＣＲＣとを比較する。（Ｓ４２０、Ｓ４３０）。
【０１０３】
レシーバ回路２０によって受信されたＣＲＣがＣＲＣ生成回路４１によって生成されたＣＲＣと一致しないとき（Ｓ４３０Ｙｅｓ）、ステート・マシン回路４３０は、リトライ・カウント４４０ｂを１だけ加算し（Ｓ４４０）、リトライ・カウント４４０ｂがリトライ閾値４４０ｃ以下であるか否かを判定する（Ｓ４５０）。一方、レシーバ回路２０によって受信されたＣＲＣがＣＲＣ生成回路４１によって生成されたＣＲＣと一致するとき（Ｓ４３０Ｎｏ）、データは正常に読み出されたため、ステート・マシン回路４３０は、「次動作処理」に移行する。
【０１０４】
引き続き、リトライ・カウント４４０ｂがリトライ閾値４４０ｃ以下でないとき（Ｓ４５０Ｎｏ）、ステート・マシン回路４３０は、リトライを最大限実行したため、ＤＱＳ信号のディレイ値を最適化する「最適化処理」に移行する。
【０１０５】
一方、リトライ・カウント４４０ｂがリトライ閾値４４０ｃ以下であるとき（Ｓ４５０Ｙｅｓ）、ステート・マシン回路４３０は、リトライ・フラグ４４０ａがリトライの開始を示す「１」であるか否かを判定する（Ｓ４６０）。
【０１０６】
リトライ・フラグ４４０ａが「１」でないとき（Ｓ４６０Ｎｏ）、ステート・マシン回路４３０は、リトライ・フラグを「１」に設定して（Ｓ４７０）、リトライ・テーブル４４０ｄを初期設定する（Ｓ４８０）。具体的には、ステート・マシン回路４３０は、リード・パラメータ・レジスタ２００のドライブ・ストレングス設定値をリトライ・テーブル４４０ｄのリトライ・ドライブ・ストレングス値に設定し、リード・パラメータ・レジスタ２００のＤＱＳ信号のディレイ値を、リトライ・テーブル４４０ｄのカレント・ディレイ値およびリトライ・ディレイ値に設定する。
【０１０７】
一方、リトライ・フラグ４４０ａが「１」であるとき（Ｓ４６０Ｙｅｓ）、ステート・マシン回路４３０は、リトライがディレイ値の最小値まで実行されたか否かを確認するために、リトライ・テーブル４４０ｄの最小ディレイフラグが「１」であるか否かを判定する（Ｓ４９０）。最小ディレイフラグが「１」であるとき、リトライがディレイ値の最小値まで実行されたため、ステート・マシン回路４３０は、「次リトライ処理」に移行する。
【０１０８】
一方、リトライ・テーブル４４０ｄの最小ディレイフラグが「１」でないとき（Ｓ４９０Ｎｏ）、ステート・マシン回路４３０は、リトライ・ディレイ値を所定値（例えば、１クロック）だけ減算し（Ｓ５００）、リトライ・ディレイ値が最小値（例えば、「０」）であるか否かを判定する（Ｓ５１０）。リトライ・ディレイ値が最小値（例えば、「０」）であるとき（Ｓ５１０Ｙｅｓ）、ステート・マシン回路４３０は、リトライ・テーブル４４０ｄの最小ディレイフラグに「１」を設定する（Ｓ５３０）。
【０１０９】
リトライ・ディレイ値が最小値（例えば、「０」）でないとき（Ｓ５１０Ｎｏ）、ステート・マシン回路４３０は、リトライ・テーブル４４０ｄのリトライ・ドライブ・ストレングス値およびリトライ・ディレイ値をリード・パラメータ・レジスタ２００、ＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａおよびＤＱＳディレイ等価回路に設定し（Ｓ５２０）、リトライを実行する（Ｓ５４０）。
【０１１０】
次に、実施例３に係るメモリ最適化設定処理のうち「次動作処理」の処理手順について、図２１−２を参照して説明する。
【０１１１】
データが正常に読み出されたとき、ステート・マシン回路４３０は、リトライ・フラグ４４０ａが「１」であるか否かを判定する（Ｓ４３０ａ）。リトライ・フラグ４４０ａが「１」であると判定されたとき、ステート・マシン回路４３０は、リトライ・フラグ４４０ａ、リトライ・カウント４４０ｂおよびリトライ・テーブル４４０ｄを０に設定する（Ｓ４３０ｂ）。
【０１１２】
そして、ステート・マシン回路４３０は、ＣＰＵに次の動作を促すために、データが正常に読み出された旨をＣＰＵに出力する（Ｓ４３０ｃ）。
【０１１３】
次に、実施例３に係るメモリ最適化設定処理のうち「最適化処理」の処理手順について、図２１−３を参照して説明する。
【０１１４】
リトライの実行回数が最大のとき、ステート・マシン回路４３０は、最適化回路２１に対して最適化命令を出力する（Ｓ４５０ａ）。
【０１１５】
そして、ステート・マシン回路４３０は、リトライ・フラグ４４０ａ、リトライ・カウント４４０ｂおよびリトライ・テーブル４４０ｄを初期値（例えば、「０」）に設定する（Ｓ４５０ｂ）。
【０１１６】
その後、ステート・マシン回路４３０は、最適化回路２１から最適化完了を取得すると、リトライを実行する（Ｓ４５０ｃ）。そして、メモリ最適化設定処理が、引き続き行われる。
【０１１７】
次に、実施例３に係るメモリ最適化設定処理のうち「次リトライ処理」の処理手順について、図２１−４を参照して説明する。
【０１１８】
リトライがディレイ値の最小値まで実行されたとき、ステート・マシン回路４３０は、リトライがディレイ値の最大値まで実行されたか否かを確認するために、リトライ・テーブル４４０ｄの最大ディレイフラグが「１」であるか否かを判定する（Ｓ４９０ａ）。最大ディレイフラグが「１」でないとき（Ｓ４９０ａＮｏ）、リトライがディレイ値の最大値まで実行されていないため、ステート・マシン回路４３０は、リトライ・ディレイ値にカレント・ディレイ値を所定値（例えば、１クロック）だけ加算した値を設定し（Ｓ４９０ｂ）、リトライ・ディレイ値が最大値の９であるか否かを判定する（Ｓ４９０ｃ）。リトライ・ディレイ値が最大値（例えば、９クロック）であるとき（Ｓ４９０ｃＹｅｓ）、ステート・マシン回路４３０は、リトライ・テーブル４４０ｄの最大ディレイフラグに「１」を設定する（Ｓ４９０ｅ）。
【０１１９】
一方、最大ディレイフラグが「１」であるとき（Ｓ４９０ａＹｅｓ）、ステート・マシン回路４３０は、リトライ・テーブル４４０ｄのリトライ・ドライブ・ストレングス値を現在保持された値と異なる値に変更する（Ｓ４９０ｆ）。このとき、ステート・マシン回路４３０は、リトライ・テーブル４４０ｄのリトライ・ドライブ・ストレングス値以外の値を初期設定するために、リトライ・ディレイ値にカレント・ディレイ値を設定し（Ｓ４９０ｇ）、最小ディレイフラグおよび最大ディレイフラグを「０」に設定する（Ｓ４９０ｈ）。
【０１２０】
リトライ・ディレイ値が最大値（例えば、９クロック）でないとき（Ｓ４９０ｃＮｏ）またはリトライ・ドライブ・ストレングス値を変更したとき（Ｓ４９０ｆ）、ステート・マシン回路４３０は、リトライ・テーブル４４０ｄのリトライ・ドライブ・ストレングス値およびリトライ・ディレイ値をリード・パラメータ・レジスタ２００、ＤＤＲ−ＳＤＲＡＭ１のストレングス・レジスタ１００ａおよびＤＱＳディレイ等価回路に設定し（Ｓ４９０ｄ）、リトライを実行する（Ｓ４９０ｉ）。そして、メモリ最適化設定処理が、引き続き行われる。
【０１２１】
なお、メモリ最適化設定処理は、ＤＱＳ信号のディレイ値をカレント・ディレイ値から最小値まで減らした後、カレント・ディレイ値から最大値まで増やして行われるものとしたが、これに限定されず、例えばカレント・ディレイ値を「１」減らした後「１」増やし、その後「２」減らした後「２」増やす等の順序で行われても良い。
【０１２２】
以上のように本実施例３によれば、メモリ制御装置５は、ＤＤＲ−ＳＤＲＡＭ１から受信されたデータに異常があるとき、ＤＱＳ信号の立ち上がりエッジの遅延時間またはＤＱＳ信号の立ち下がりエッジの遅延時間を受信時のそれぞれの遅延時間と異なるものをリード・パラメータ・レジスタ２００に再設定する。また、メモリ制御装置５は、ＤＤＲ−ＳＤＲＡＭ１から受信されたデータに異常があるとき、ドライブ・ストレングスの値を受信時の値と異なる値をリード・パラメータ・レジスタ２００に再設定する。
【０１２３】
このようにして、メモリ制御装置５は、ＤＤＲ−ＳＤＲＡＭ１から受信されたデータが例えばデータ化けエラーであるとき、自動的にＤＱＳ信号の立ち上がりエッジまたは立ち下がりエッジの遅延時間を受信時の遅延時間と異なるものに変化させるため、変化させた後リトライすると、リカバリーできる可能性が高くなり、リカバリー後の受信についてもデータ化けエラーの発生を抑制することができる。また、メモリ制御装置５は、ＤＤＲ−ＳＤＲＡＭ１から受信されたデータが例えばデータ化けエラーであるとき、自動的にドライブ・ストレングスの値を受信時の値と異なる値に変化させるため、温度環境等によるＤＱ信号の受信タイミングの悪化に対応することができ、常時、ＤＱ信号の受信タイミングを最適に確保することができる。
【０１２４】
なお、メモリ制御装置２およびメモリ制御装置４は、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１およびＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２を用いて、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとに個別に複数の異なるＤＱＳ信号を生成して、ＤＱＳ信号に同期したＤＱ信号から抽出されるデータがデータ化けとならない遅延時間をリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値および立ち下がりディレイ設定値に設定した。本発明は、これに限定されず、メモリ制御装置２およびメモリ制御装置４は、ＤＱＳ立ち上がりエッジ・ディレイ等価回路２０１またはＤＱＳ立ち下がりエッジ・ディレイ等価回路２０２のどちらか一方を用いて、複数の異なるＤＱＳ信号を生成して、ＤＱＳ信号に同期したＤＱ信号から抽出されるデータがデータ化けとならない遅延時間を、ＤＱＳ信号の立ち上がりエッジおよび立ち下がりエッジごとに決定した後、それぞれの遅延時間に対応するリード・パラメータ・レジスタ２００の立ち上がりディレイ設定値および立ち下がりディレイ設定値に設定しても良い。
【０１２５】
また、メモリ制御装置２、メモリ制御装置４およびメモリ制御装置５にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（Central Processing Unit）（またはＭＰＵ（Micro Processing Unit）、ＭＣＵ（Micro Controller Unit）などのマイクロ・コンピュータ）および当該ＣＰＵ（またはＭＰＵ、ＭＣＵなどのマイクロ・コンピュータ）にて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現されても良い。
【０１２６】
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
【０１２７】
（付記１）立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成部と、
既知の参照データを一部に持つデータ信号から、前記生成部によって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出部と、
前記抽出部によって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定部と、
前記判定部によって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定部と、
を備えることを特徴とするメモリ制御装置。
【０１２８】
（付記２）前記生成部は、
複数の遅延時間に対してそれぞれ２つずつ遅延クロック信号を生成し、
前記抽出部は、
既知の参照データを一部に持つデータ信号から、複数の一方の遅延クロック信号の立ち上がり部分に対応する部分のデータを抽出する第１の抽出部と、
既知の参照データを一部に持つデータ信号から、複数の他方の遅延クロック信号の立ち下がり部分に対応する部分のデータを抽出する第２の抽出部と、を含み
前記判定部は、
前記第１の抽出部によって抽出されたそれぞれの一方の遅延クロック信号の立ち上がり部分に対応するデータまたは前記第２の抽出部によって抽出されたそれぞれの他方の遅延クロック信号の立ち下がり部分に対応するデータが、参照データと一致するか否かを判定し、
前記決定部は、
前記判定部によって一致すると判定されたデータに対応する一方の遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲を決定する第１の決定部と、
前記判定部によって一致すると判定されたデータに対応する他方の遅延クロック信号の遅延時間から、クロック信号の立ち下がり部分に対する遅延時間の範囲を決定する第２の決定部と、
を含むことを特徴とする付記１に記載のメモリ制御装置。
【０１２９】
（付記３）前記決定部によって決定されたクロック信号の立ち上がり部分に対する遅延時間の範囲の中間およびクロック信号の立ち下がり部分に対する遅延時間の範囲の中間の遅延時間を用いて、データを受信する受信部と、
をさらに備えることを特徴とする付記１または付記２に記載のメモリ制御装置。
【０１３０】
（付記４）前記生成部は、
信号の強弱を示す振幅値が異なるクロック信号をそれぞれ遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成し、
前記決定部は、
クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲を前記振幅値ごとに決定し、
前記受信部は、
前記決定部によって前記振幅値ごとに決定されたクロック信号の立ち上がり部分に対する遅延時間の範囲またはクロック信号の立ち下がり部分に対する遅延時間の範囲のうち最大の遅延時間の範囲である振幅値を選択する振幅選択部を含み、
前記振幅選択部によって選択された振幅値に対応する遅延時間および振幅値を用いて、データを受信することを特徴とする付記３に記載のメモリ制御装置。
【０１３１】
（付記５）前記生成部は、
前記受信部によって受信されたデータが異常であるとき、クロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成することを特徴とする付記３または付記４に記載のメモリ制御装置。
【０１３２】
（付記６）前記受信部によって受信されたデータが異常であるとき、受信されたときに用いられた遅延時間と異なる遅延時間を用いて、データを再受信する再受信部をさらに備えることを特徴とする付記３から付記５のいずれか１つに記載のメモリ制御装置。
【０１３３】
（付記７）前記再受信部は、
受信されたときに用いられた振幅値と異なる振幅値を用いて、データを再受信することを特徴とする付記６に記載のメモリ制御装置。
【０１３４】
（付記８）立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成手順と、
既知の参照データを一部に持つデータ信号から、前記生成手順によって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出手順と、
前記抽出手順によって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定手順と、
前記判定手順によって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定手順と、
をコンピュータに実行させることを特徴とするメモリ最適化プログラム。
【０１３５】
（付記９）立ち上がり部分および立ち下がり部分が一定の周期で出現するクロック信号を遅延させて遅延時間が互いに異なる複数の遅延クロック信号を生成する生成ステップと、
既知の参照データを一部に持つデータ信号から、前記生成ステップによって生成されたそれぞれの遅延クロック信号の立ち上がり部分または立ち下がり部分に対応する部分のデータを抽出する抽出ステップと、
前記抽出ステップによって抽出されたそれぞれのデータが参照データと一致するか否かを判定する判定ステップと、
前記判定ステップによって一致すると判定されたデータに対応する遅延クロック信号の遅延時間から、クロック信号の立ち上がり部分に対する遅延時間の範囲およびクロック信号の立ち下がり部分に対する遅延時間の範囲をそれぞれ決定する決定ステップと、
を含むことを特徴とするメモリ最適化方法。
【図面の簡単な説明】
【０１３６】
【図１】実施例１に係るメモリ最適化設定システムの全体構成の一例を示す図である。
【図２】実施例１に係るメモリ制御装置の構成を示す機能ブロック図である。
【図３】レシーバ回路の構成を示す図である。
【図４】リード・パラメータ・レジスタのデータ構造の一例を示す図である。
【図５】実施例１に係るリード・パラメータ最適化テーブルのデータ構造の一例を示す図である。
【図６】実施例１に係る最適化フラグ・レジスタのデータ構造の一例を示す図である。
【図７】実施例１に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【図８】初期処理の処理手順を示すフローチャートである。
【図９】立ち上がり下限ディレイ値決定処理の処理手順を示すフローチャートである。
【図１０】立ち上がり上限ディレイ値決定処理の処理手順を示すフローチャートである。
【図１１】立ち下がり下限ディレイ値決定処理の処理手順を示すフローチャートである。
【図１２】立ち下がり上限ディレイ値決定処理の処理手順を示すフローチャートである。
【図１３】最適ディレイ値設定処理の処理手順を示すフローチャートである。
【図１４】終了処理の処理手順を示すフローチャートである。
【図１５】実施例２に係るメモリ制御装置の構成を示す機能ブロック図である。
【図１６】実施例２に係るリード・パラメータ最適化テーブルのデータ構造の一例を示す図である。
【図１７】実施例２に係る最適化フラグ・レジスタのデータ構造の一例を示す図である。
【図１８】実施例２に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【図１９】実施例３に係るメモリ制御装置の構成を示す機能ブロック図である。
【図２０】実施例３に係るリトライテーブルのデータ構造の一例を示す図である。
【図２１−１】実施例３に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【図２１−２】実施例３に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【図２１−３】実施例３に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【図２１−４】実施例３に係るメモリ最適化設定処理の処理手順を示すフローチャートである。
【図２２】従来のメモリ最適化設定システムの全体構成の一例を示す図である。
【図２３】ＤＱＳ信号の適正な遅延を示す図である。
【符号の説明】
【０１３７】
１  ＤＤＲ−ＳＤＲＡＭ
２  メモリ制御装置
２０  レシーバ回路
２００  リード・パラメータ・レジスタ
２０１  ＤＱＳ立ち上がりエッジ・ディレイ等価回路
２０２  ＤＱＳ立ち下がりエッジ・ディレイ等価回路
２０３  ＤＱ信号ラッチ回路
２０４  ＤＱ信号ラッチ回路
２１  最適化回路
２１０  データ抽出部
２１０ａ  立ち上がりデータ抽出部
２１０ｂ  立ち下がりデータ抽出部
２２０  遅延値設定部
２３０  記憶部
２３０ａ  リードパラメータ最適化テーブル
２３０ｂ  最適化フラグレジスタ
２４０  データ判定部
２５０  上下限値決定部
２５０ａ  立ち上がり上下限値決定部
２５０ｂ  立ち下がり上下限値決定部
２６０  適正値決定部
２６０ａ  立ち上がり適正値決定部
２６０ｂ  立ち下がり適正値決定部
２７０  適正値設定部
２７０ａ  選択部
２７０ｂ  設定部
【図１】
2010157113.tif 000003
【図２】
2010157113.tif 000004
【図３】
2010157113.tif 000005
【図４】
2010157113.tif 000006
【図５】
2010157113.tif 000007
【図６】
2010157113.tif 000008
【図７】
2010157113.tif 000009
【図８】
2010157113.tif 000010
【図９】
2010157113.tif 000011
【図１０】
2010157113.tif 000012
【図１１】
2010157113.tif 000013
【図１２】
2010157113.tif 000014
【図１３】
2010157113.tif 000015
【図１４】
2010157113.tif 000016
【図１５】
2010157113.tif 000017
【図１６】
2010157113.tif 000018
【図１７】
2010157113.tif 000019
【図１８】
2010157113.tif 000020
【図１９】
2010157113.tif 000021
【図２０】
2010157113.tif 000022
【図２１−１】
2010157113.tif 000023
【図２１−２】
2010157113.tif 000024
【図２１−３】
2010157113.tif 000025
【図２１−４】
2010157113.tif 000026
【図２２】
2010157113.tif 000027
【図２３】
2010157113.tif 000028