(57)【特許請求の範囲】
【請求項１】
記憶装置に記憶されたデータに対するリード要求を受信する受信部と、記憶装置に記憶されたデータにエラーが生じているか否かを判別するため、当該データの読出しを要求する検査リード要求を所定の時間毎に発行する検査リード要求発行部とを有するメモリ制御装置であって、
前記検査リード要求発行部は、
次回発行する検査リード要求の対象となるメモリアドレスを生成するアドレス生成部と、
所定の時間毎に、前記アドレス生成部が生成したメモリアドレスを対象とする検査リード要求を発行する発行部と、
前記受信部が受信したリード要求の対象となるメモリアドレスを取得するアドレス取得部と、
前記アドレス生成部が生成したメモリアドレスと、前記アドレス取得部が取得したメモリアドレスとを比較し、両メモリアドレスが一致した場合には、前記発行部に当該メモリアドレスに対する検査リード要求の発行をキャンセルさせる取消部と
を有することを特徴とするメモリ制御装置。 
【請求項２】
前記アドレス取得部は、前記受信部がリード要求を受信する毎に、当該リード要求の対象となるメモリアドレスを取得し、
前記取消部は、前記アドレス取得部がメモリアドレスを取得する毎に、当該リード要求の対象となるメモリアドレスと、前記アドレス生成部が生成したメモリアドレスとを比較することとを特徴とする請求項１に記載のメモリ制御装置。 
【請求項３】
前記検査リード要求発行部は、
前記アドレス取得部が取得したメモリアドレスを一定の時間記憶する複数のアドレス記憶部と、
前記アドレス取得部が取得したメモリアドレスを、いずれかのアドレス記憶部に格納するアドレス格納部とをさらに有し、
前記取消部は、前記アドレス生成部が生成したメモリアドレスと、各アドレス記憶部に記憶されたメモリアドレスとを比較し、いずれかのアドレス記憶部に格納されたメモリアドレスと前記アドレス生成部が生成したメモリアドレスとが一致した場合には、前記発行部による当該メモリアドレスに対する検査リード要求の発行をキャンセルさせることを特徴とする請求項１に記載のメモリ制御装置。 
【請求項４】
前記検査リード要求発行部は、
前記複数のアドレス記憶部のいずれかとそれぞれ対応付けられた複数のバリッド記憶部と、
前記アドレス格納部がメモリアドレスを格納したアドレス記憶部と対応するバリッド記憶部にバリッドビットを格納するバリッド格納部と、
前記バリッド格納部がバリッドビットを格納してから、所定の時間が経過した後に、当該バリッドビットを消去するバリッドビット消去部とをさらに有し、
前記アドレス格納部は、前記バリッドビットが格納されていないバリッド記憶部と対応するアドレス記憶部に前記メモリアドレスを格納し、
前記取消部は、前記バリッドビットが格納されていないバリッド記憶部と対応するアドレス記憶部に格納されたメモリアドレスと、前記アドレス生成部が生成したメモリアドレスとを比較することを特徴とする請求項３に記載のメモリ制御装置。 
【請求項５】
前記アドレス格納部は、前記アドレス取得部が新たに取得したメモリアドレスと同一のメモリアドレスが既にいずれかのアドレス記憶部に格納されていた場合には、当該新たに取得したメモリアドレスを前記アドレス記憶部に格納しないことを特徴とする請求項３または４に記載のメモリ制御装置。 
【請求項６】
前記アドレス生成部は、毎回異なるメモリアドレスを生成することを特徴とする請求項１〜４のいずれか１つに記載のメモリ制御装置。 
【請求項７】
記憶装置に記憶されたデータにエラーが生じているか否かを判別するため、当該データの読出しを要求する検査リード要求を所定の時間毎に発行する制御装置が実行する制御方法であって、
前記記憶装置に記憶されたデータに対するリード要求を受信し、
前記受信したリード要求の対象となるメモリアドレスを取得し、
次回発行する検査リード要求の対象となるメモリアドレスを生成し、
前記生成したメモリアドレスと、前記取得したメモリアドレスとを比較し、両メモリアドレスが一致した場合には、当該メモリアドレスに対する検査リード要求の発行をキャンセルする処理を実行させることを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御装置および制御方法に関する。
【背景技術】
【０００２】
従来、メモリに記憶されたデータの読み出しや書き込みを制御するメモリ制御装置の技術が知られている。このような制御装置の一例として、訂正不可能なエラーの発生を防ぐため、一定時間おきに、メモリに記憶されたデータのエラー訂正を行うメモリコントローラが知られている。【０００３】
このようなメモリコントローラは、ＯＳ（Operating  System）やアプリケーションがメモリアクセスを行う前に、メモリに記憶されたデータを読み出してデータのエラーを検出するパトロール処理を一定時間おきに実行する。ここで、メモリコントローラは、データの読み取り時における訂正不能なエラーの発生を防ぐため、パトロール処理を、データの読み取り処理や書き込み処理よりも優先して実行する。そして、メモリコントローラは、パトロール処理によってエラーが検出された場合には、メモリに記憶されたデータの読み出しを行い、読み出したデータのエラーを訂正し、訂正したデータを再度メモリに記憶させるスクラブ処理を実行する。【０００４】
このように、メモリコントローラは、パトロール処理を一定時間おきに実行することで、メモリ上のデータにおいて発生したエラーが、データ読み出し時の伝送エラー等により、訂正不可能なエラーに発展するのを防止する。【０００５】
以下、図を用いて、パトロール処理を実行するメモリコントローラの一例について説明する。図１３は、従来のメモリコントローラを説明するための図である。図１３に示す例では、メモリコントローラ４０は、チップセット４１、ＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）４２と接続されている。また、メモリコントローラ４０は、パトロール制御部４３、バッファ４４、スクラブ制御部４５、アービタ４６、エラーチェッカ４７、エラー訂正部４８、アービタ４９を有する。【０００６】
チップセット４１は、ＤＩＭＭ４２に格納されたデータに対するリード要求やライト要求を発行する。また、チップセット４１は、メモリコントローラ４０によるパトロール処理の機能を有効とする場合には、パトロール制御部４３に対するイネーブル信号を「ＯＮ」とする。ＤＩＭＭ４２は、誤り訂正符号（ＥＣＣ：Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）が付与されたデータを記憶する。【０００７】
パトロール制御部４３は、イネーブル信号が「ＯＮ」である場合には、一定時間おきにパトロール処理の実行を要求するパトロール要求を発行する。バッファ４４は、チップセット４１が発行したリード要求とライト要求を一時的に記憶するバッファである。スクラブ制御部４５は、エラーチェッカ４７からエラーが検出された旨の通知を受け付けた場合には、エラーが検出されたデータを再度読み出し、読み出したデータのエラー訂正を要求するスクラブリード要求と、エラー訂正されたデータをＤＩＭＭ４２に記憶させるスクラブライト要求とを発行する。【０００８】
なお、スクラブリード要求とスクラブライト要求は、ＤＩＭＭ４２に記憶されたデータの同一性を保証するため、アトミックに実行される必要がある。このため、スクラブ制御部４５は、エラーチェッカ４７からエラーが検出された旨の通知を受け付けた場合には、パトロール制御部４３とバッファ４４とによる要求の発行を停止させ、スクラブリード要求とスクラブライト要求とを発行する。また、スクラブ制御部４５は、スクラブライト要求を発行すると同時に、アービタ４９に対して、エラーが訂正されたデータの送信を要求する。【０００９】
アービタ４６は、パトロール制御部４３、バッファ４４、スクラブ制御部４５から発行される各要求を、スクラブリード要求、スクラブライト要求、パトロール要求、リード要求、ライト要求の順に優先して発行する調停器である。エラーチェッカ４７は、ＥＣＣを用いて、ＤＩＭＭ４２から読み出されたデータからエラーの検出を行い、エラーが検出された場合は、スクラブ制御部４５とエラー訂正部４８にエラーが検出された旨の通知を送信する。【００１０】
エラー訂正部４８は、エラーチェッカ４７からエラーが検出された旨の通知を受け付けた場合には、エラーが検出されたデータが、パトロール要求によるデータであるか、リード要求によるデータであるか、スクラブリード要求に係るデータであるかを判別する。そして、エラー訂正部４８は、エラーが検出されたデータがパトロール要求によるデータであると判別した場合には、データを破棄する。【００１１】
また、エラー訂正部４８は、エラーが検出されたデータがリード要求に係るデータである場合には、エラーの訂正を行い、エラーを訂正したデータをチップセット４１へ送信する。また、エラー訂正部４８は、エラーが検出されたデータがスクラブリード要求に係るデータである場合には、エラーの訂正を行い、エラーを訂正したデータをアービタ４９へ送信する。【００１２】
アービタ４９は、チップセット４１からライト要求に係るデータを受信する。また、アービタ４９は、エラー訂正部４８からエラーを訂正したデータを受信する。そして、アービタ４９は、アービタ４６がライト要求を発行した場合には、チップセット４１から受信したデータを発行し、スクラブ制御部４５からエラーが訂正されたデータの送信を要求された場合には、エラー訂正部４８から受信したデータをＤＩＭＭ４２へ送信する。【００１３】
図１４は、パトロール制御部の一例を説明するための図である。図１４に示す例では、パトロール制御部４３は、発行間隔タイマ５０とパトロールアドレス生成部５１とを有する。発行間隔タイマ５０は、イネーブル信号が「ＯＮ」である場合は、一定時間おきに、パトロールアドレス生成部５１にタイミング通知を発行するとともに、パトロール要求の発行を示すバリッドを出力する。【００１４】
パトロールアドレス生成部５１は、パトロールの対象となるメモリアドレス、すなわち、パトロールアドレスを予め生成し、生成したパトロールアドレスを保持する。そして、パトロールアドレス生成部５１は、発行間隔タイマ５０からタイミング通知を受信した場合には、保持したパトロールアドレスを出力する。つまり、パトロールアドレス生成部５１は、発行間隔タイマ５０が出力したバリッドとともに、パトロールアドレスを出力することで、パトロール要求をアービタ４６に発行する。また、パトロールアドレス生成部５１は、パトロールアドレスを出力した場合には、新たなパトロールアドレスを生成し、生成したパトロールアドレスを保持する。【００１５】
図１５は、従来のパトロール要求の発行処理を説明するためのフローチャートである。例えば、パトロール制御部４３は、パトロール要求を発行するタイミングであれば（ステップＳ１肯定）、予め生成したパトロールアドレスに対するパトロール要求を発行する（ステップＳ２）。そして、パトロール制御部４３は、次回発行するパトロール要求の対象となるパトロールアドレスを生成する（ステップＳ３）。一方、パトロール制御部４３は、パトロール要求を発行するタイミングでないならば（ステップＳ１否定）、パトロール要求を発行せずに、待機する。【００１６】
図１６は、パトロール制御部がパトロール要求を発行するタイミングを説明するための図である。なお、図１６中の太線は、各通信および要求が発行されるタイミングを示す。図１６に示すように、発行間隔タイマ５０は、一定時間おきに、タイミング通知とパトロールバリッドとを送信する。また、パトロールアドレス生成部５１は、発行間隔タイマ５０がタイミング通知を送信するたびに、異なるメモリアドレスを生成し、記憶する。このため、パトロール制御部４３は、一定時間ごとに、それぞれ異なるメモリアドレスに対して、パトロール要求を発行する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開平０４−１１９４４２号公報
【特許文献２】特開２００５−０５０３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、上述した一定時間おきにパトロール処理を実行する技術では、パトロール処理をデータの読み取り処理よりも優先して実行するので、データの読み取り処理や書き込み処理に係るメモリアクセスが阻害される。この結果、システムの性能が低下するという問題があった。【００１９】
例えば、メモリコントローラ４０は、ＤＩＭＭ４２に記憶されたデータのエラーが訂正不能なエラーに発展するのを防止するため、ＤＩＭＭ４２が有する各メモリアドレスに対して、１日に１回の割合でパトロールを実行する。しかし、ＤＩＭＭ４２に容量が増加するにつれて、１日に発行するパトロール要求の数が増加するため、パトロール要求を発行する間隔が短くなる。この結果、メモリコントローラ４０は、パトロール要求によるメモリアクセスの回数を増やしてしまい、リード要求やライト要求によるメモリアクセス性能が低下する。【００２０】
また、メモリコントローラ４０は、パトロール処理を一定の時間間隔で行うことにより、エラーが発生する確率に対応する。このため、メモリコントローラ４０は、リード要求やライト要求の発行頻度が低い時間帯に、パトロール処理を片寄せして実行した場合には、訂正不可能なエラーを防ぐという目的を果たすことができない。【００２１】
なお、リード要求やライト要求を受信した際に、スクラブ処理の実行を中止することで、リード要求やライト要求によるメモリアクセスの回数を改善する処理も考えられる。しかし、スクラブ処理の実行を中止した場合には、訂正不可能なエラーが発生する確率を増加させてしまうため、ＤＩＭＭエラーによるシステムダウンの発生率を悪化させてしまう。【００２２】
１つの側面では本発明は、リード要求やライト要求によるメモリアクセスを円滑に行うことを目的とする。
【課題を解決するための手段】
【００２３】
１つの側面では、記憶装置に記憶されたデータに対するリード要求を受信する受信部を有するメモリ制御装置である。また、メモリ制御装置は、記憶装置に記憶されたデータにエラーが生じているか否かを判別するため、当該データの読出しを要求する検査リード要求を所定の時間毎に発行する検査リード要求発行部を有する。この検査リード要求発行部は、次回発行する検査リード要求の対象となるメモリアドレスを生成する。また、検査リード要求発行部は、所定の時間毎に、生成したメモリアドレスを対象とする検査リード要求を発行する。また、検査リード要求発行部は、受信したリード要求の対象となるメモリアドレスを取得し、生成したメモリアドレスと、取得したメモリアドレスとを比較する。そして、検査リード要求発行部は、両メモリアドレスが一致した場合には、生成したメモリアドレスに対する検査リード要求の発行をキャンセルする。
【発明の効果】
【００２４】
本願に開示の技術は、一つの態様によれば、リード要求やライト要求によるメモリアクセスが円滑に行われ、ひいてはシステムの性能を向上させることも可能となる。
【図面の簡単な説明】
【００２５】
【図１】図１は、実施例１に係るシステムボードを説明するための図である。
【図２】図２は、実施例１に係るブリッジチップを説明するための図である。
【図３】図３は、実施例１に係るメモリコントローラの一例を説明するための図である。
【図４】図４は、実施例１に係るパトロール制御部の一例を説明するための図である。
【図５】図５は、実施例１に係るパトロール制御部がパトロール要求を発行するタイミングを説明するためのタイムチャートである。
【図６】図６は、実施例１に係るアービタが実行する処理の一例を説明するための図である。
【図７】図７は、実施例１に係るメモリコントローラが実行する処理の流れ説明するためのフローチャートである。
【図８】図８は、実施例１に係るメモリコントローラがパトロール要求をキャンセルする処理を説明するためのフローチャートである。
【図９】図９は、実施例２に係るパトロール制御部を説明するための図である。
【図１０】図１０は、実施例２に係るアドレスバッファ回路の一例を説明するための図である。
【図１１】図１１は、実施例２に係るパトロール制御部が、リードアドレスをバッファに記憶する処理の流れの一例を説明するための図である。
【図１２】図１２は、実施例２に係るパトロール制御部がパトロール要求の発行をキャンセルするか否かを判別する処理の流れの一例を説明するための図である。
【図１３】図１３は、従来のメモリコントローラを説明するための図である。
【図１４】図１４は、パトロール制御部の一例を説明するための図である。
【図１５】図１５は、従来のパトロール要求の発行処理を説明するためのフローチャートである。
【図１６】図１６は、パトロール制御部がパトロール要求を発行するタイミングを説明するための図である。
【発明を実施するための形態】
【００２６】
以下に添付図面を参照して本願に係るメモリ制御装置および制御方法について説明する。
【実施例１】
【００２７】
以下の実施例１では、図１を用いて、メモリ制御装置の一例として、メモリコントローラを有するシステムボードの一例を説明する。図１は、実施例１に係るシステムボードを説明するための図である。【００２８】
図１に示すように、システムボード１は、複数のＣＰＵ２〜２ｂと、ブリッジチップ４を有する。また、システムボードは、複数のＤＩＭＭ３〜３ｇを有する。ＤＩＭＭ３およびＤＩＭＭ３ａは、ブリッジチップ４と接続され、ＤＩＭＭ３ｂ、３ｃは、ＣＰＵ２ｂに接続され、ＤＩＭＭ３ｄ、３ｅは、ＣＰＵ２ａに接続され、ＤＩＭＭ３ｆ、３ｇは、ＣＰＵ２に接続される。また、各ＤＩＭＭ３〜３ｇに格納される各データには、エラーの検出および１ビットのエラーの訂正を行うことができる誤り訂正符号（ＥＣＣ：Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）が付与されている。【００２９】
このようなシステムボード１においては、各ＣＰＵ２〜２ｂは、自身に接続されたＤＩＭＭだけではなく、他のＣＰＵおよびブリッジチップ４と接続されたＤＩＭＭ３、３ａに対して、データの読出しおよび書込みを行う事ができる。例えば、ＣＰＵ２は、ブリッジチップ４に接続されたＤＩＭＭ３に対してデータの読出し又は書込みを行う場合には、ブリッジチップ４に対して、データの読出しを要求するリード要求、または、データの書込みを要求するライト要求を送信する。なお、ＣＰＵ２〜２ｂは、ライト要求を送信する場合には、メモリに書込むデータをライト要求とともに送信する。【００３０】
ブリッジチップ４は、ＣＰＵ２〜２ｂから、リード要求を受信した場合には、ＤＩＭＭ３、３ａからリード要求の対象となるデータの読出しを行い、読み出したデータを要求元のＣＰＵへ送信する。また、ブリッジチップ４は、ＣＰＵ２〜２ｂから、ライト要求と書込むデータとを受信した場合には、ＤＩＭＭ３、３ａに対して、受信したデータの書込みを行う。【００３１】
ここで、ブリッジチップ４は、ＤＩＭＭ３、３ａに格納されたデータにエラーが発生し、エラーが発生したデータを読み出した際にさらなるエラーが付加されることで、訂正不可能なエラーが発生するのを防止するため、一定時間おきにパトロール処理を実行する。具体的には、ブリッジチップ４は、パトロール対象となるＤＩＭＭ３、３ａのメモリアドレスを生成し、生成したメモリアドレスに対して、一定時間おきに、パトロール要求を発行する。そして、ブリッジチップ４は、読み出したデータからエラーが検出されなかった場合には、読出したデータを破棄し、読み出したデータからエラーが検出された場合には、スクラブリード要求とスクラブライト要求とを発行する。その後、ブリッジチップ４は、スクラブリード要求によって読み出されたデータの訂正を行い、訂正されたデータをスクラブライト要求により、メモリに格納する。【００３２】
以下、図を用いて、実施例１に係るブリッジチップ４について説明する。図２は、実施例１に係るブリッジチップを説明するための図である。図２に示す例では、ブリッジチップは、チップセット５とメモリコントローラ１０とを有する。チップセット５は、ＣＰＵ２、２ｂからリード要求とライト要求を受信し、受信したリード要求、または、ライト要求をメモリコントローラ１０に送信する。【００３３】
そして、チップセット５は、リード要求の対象となるデータをメモリコントローラ１０から受信した場合には、受信したデータをリード要求の要求元となるＣＰＵ（例えば、ＣＰＵ２）へ、送信する。また、チップセット５は、ライト要求とともに、ＤＩＭＭ３、３ａに書込むデータを受信した場合には、ライト要求とともに、データをメモリコントローラ１０へ送信する。【００３４】
また、チップセット５は、メモリコントローラ１０に対して、訂正可能なエラーが訂正不可能なエラーに発展しないように、ＤＩＭＭ３、３ａに格納されたデータに対するパトロール処理を実行させる。具体的には、チップセット５は、メモリコントローラ１０との間にイネーブル線を有しており、メモリコントローラ１０にパトロール処理を実行させる間は、イネーブル線を介して「Ｈｉｇｈ」を入力し続ける。また、チップセット５は、パトロール処理を停止させる場合には、イネーブル線を介して「Ｌｏｗ」を入力し続ける。【００３５】
メモリコントローラ１０は、所定の時間おきに、あらかじめ生成されたメモリアドレスに対してパトロール要求を発行する、また、メモリコントローラ１０は、所定の時間おきに、次回発行されるパトロール要求の対象となるメモリアドレスを生成する。また、メモリコントローラ１０は、リード要求を受信した場合には、リード要求の対象となるメモリアドレスを取得する。また、メモリコントローラ１０は、生成したメモリアドレスと、リード要求の対象となるメモリアドレスとを比較する。そして、メモリコントローラ１０は、リード要求の対象となるメモリアドレスと生成したメモリアドレスとが一致した場合には、パトロール要求の発行をキャンセルする。【００３６】
以下、図を用いて、実施例１に係るメモリコントローラ１０の一例を説明する。図３は、実施例１に係るメモリコントローラの一例を説明するための図である。図３に示す例では、メモリコントローラ１０は、パトロール制御部１１、バッファ１２、スクラブ制御部１３、アービタ１４、バッファ１５、１６、２０、エラーチェッカ１７、エラー訂正部１８、アービタ１９、経路選択部２８を有する。【００３７】
メモリコントローラ１０は、図３中（Ａ）に示すイネーブル線を介して、チップセット５からのイネーブル信号をパトロール制御部１１に入力する。また、メモリコントローラ１０は、図３中（Ｂ）に示す経路を介して、チップセット５から受信したリード要求をバッファ１２に格納する。ここで、リード要求は、要求する処理の内容が読取りであることを示すＲｅａｄ  Ｃｏｍｍａｎｄ（以下、リードコマンドと記載する）と、読み取り対象となるメモリアドレスであるＲｅａｄ  Ａｄｄｒｅｓｓ（以下、リードアドレスと記載する）とを有する。【００３８】
また、メモリコントローラ１０は、図３中（Ｃ）に示す経路を介して、チップセット５から受信したリード要求をパトロール制御部１１に伝達する。つまり、メモリコントローラ１０は、リードコマンドとリードアドレスとをパトロール制御部１１に伝達する。【００３９】
パトロール制御部１１は、図３中（Ａ）に示すイネーブル線を介して、チップセット５から「Ｈｉｇｈ」のイネーブル信号が入力されている場合には、所定の時間おきに、パトロール要求を発行する。また、パトロール制御部１１は、「Ｌｏｗ」のイネーブル信号が入力されている場合には、パトロール要求の発行を行わない。【００４０】
また、パトロール制御部１１は、所定の時間ごとに、次回発行するパトロール要求の対象となるメモリアドレスを生成する。そして、パトロール制御部１１は、生成したメモリアドレスに対するパトロール要求を、所定の時間おきに、図３中（Ｄ）に示す経路を介して、アービタ１４に発行する。また、パトロール制御部１１は、また、パトロール制御部１１は、図３中（Ｃ）に示す経路を介して、受信したリード要求を取得し、取得したリード要求の対象となるメモリアドレスを取得する。【００４１】
そして、パトロール制御部１１は、生成したメモリアドレスと取得したリード要求の対象となるメモリアドレスとを比較し、両メモリアドレスが一致した場合には、次回のパトロール要求の発行をキャンセルする。つまり、パトロール制御部１１は、次回のパトロール要求の対象となるメモリアドレスを生成してから、パトロール要求を発行するまでの間に、同一メモリアドレスに対するリード要求が受信された場合には、パトロール要求の発行をキャンセルする。【００４２】
また、パトロール制御部１１は、スクラブ制御部１３から各要求の発行を禁止する旨の通知を受信した場合には、パトロール要求の発行を停止する。また、パトロール制御部１１は、スクラブ制御部１３から各要求の発行禁止を解除する旨の通知を受信した場合には、パトロール要求の発行を再開する。また、パトロール制御部１１は、パトロール要求をアービタ１４へ発行し、アービタ１４から各要求を実行した旨を示す「Ｔａｋｅｎ」を受信した場合には、パトロール要求の発行を取り下げる。【００４３】
次に、図４を用いて、パトロール制御部１１の一例について説明する。図４は、実施例１に係るパトロール制御部の一例を説明するための図である。図１に示す例では、パトロール制御部１１は、発行間隔タイマ２１、パトロールアドレス生成部２２、比較器２３、ＡＮＤゲート２４、ＲＳフリップフロップ２５、ＯＲゲート２６、ＡＮＤゲート２７を有する。なお、図４中（Ａ）、（Ｄ）に示す経路は、図３中（Ａ）、（Ｄ）に示す経路であり、図４中（Ｒ）、（Ｓ）に示す経路は、図３中（Ｃ）に示す経路と対応する。【００４４】
また、図４に示す例では、パトロール制御部１１は、図３中（Ａ）に示す経路を介して、イネーブル信号を発行間隔タイマ２１に入力する。また、図４に示す例では、パトロール制御部１１は、図４中（Ｒ）に示す経路を介してリードアドレスを比較器２３に入力し、図４中（Ｓ）に示す経路を介して、リードコマンドをＡＮＤゲート２４に入力する。ここで、リードコマンドは、リード要求が受信されたことを示すバリッドとして用いられる。【００４５】
発行間隔タイマ５０は、図４中（Ｏ）に示すように、イネーブル信号が「Ｈｉｇｈ」である場合は、所定の時間おきに、タイミング通知をパトロールアドレス生成部２２に送信する。また、発行間隔タイマ５０は、図４中（Ｐ）に示すように、タイミング通知を発行すると同時に、パトロール要求の発行を示すＰａｔｒｏｌ  Ｖａｌｉｄ（以下、パトロールバリッドと記載する）を、発行し、パトロールバリッドをＡＮＤゲート２７に入力する。【００４６】
パトロールアドレス生成部２２は、所定の時間おきに、次回発行されるパトロール要求の対象となるメモリアドレスであるパトロールアドレスを生成する。また、パトロールアドレス生成部２２は、新たなパトロールアドレスを生成する場合には、前回生成したパトロールアドレスとは異なるパトロールアドレスを生成する。具体的には、パトロールアドレス生成部２２は、発行間隔タイマ２１からタイミング通知を受信した場合には、前回生成したパトロールアドレスに「１」をインクリメントしたパトロールアドレスを生成する。そして、パトロールアドレス生成部２２は、生成したパトロールアドレスを図４中（Ｑ）に示す経路から出力し続ける。また、パトロールアドレス生成部２２は、発行間隔タイマ２１からタイミング通知を受信した場合には、前回生成したパトロールアドレスをパトロールバリッドとともに、ＡＮＤゲート２７に入力する。【００４７】
比較器２３は、パトロールアドレス生成部２２が生成したパトロールアドレスと、図４中（Ｒ）に示す経路を介して取得したリードアドレスとを比較し、パトロールアドレスとリードアドレスとが一致する場合には、ＡＮＤゲート２４に対して「１」を出力する。ＡＮＤゲート２４は、図４中（Ｓ）に示す経路を介して受信したリードバリッドと比較器２３との論理積を算出し、算出した論理積を出力する。【００４８】
つまり、ＡＮＤゲート２４は、比較器の出力が「１」でリードバリッドが「１」の場合には、「１」を出力し、それ以外の場合には「０」を出力する。換言すると、ＡＮＤゲート２４は、メモリコントローラ１０がリード要求を受信し、かつ、比較器２３がリードアドレスと次回発行されるパトロール要求のパトロールアドレスとが一致すると判別した場合には、「１」を出力する。【００４９】
ＲＳフリップフロップ２５は、ＡＮＤゲート２４の出力をキャンセルフラグとして保持するフリップフロップである。また、ＲＳフリップフロップ２５は、図４中（Ｐ）に示す経路を介して、発行間隔タイマ２１がパトロールバリッドを出力した場合には、保持した値をリセットする。【００５０】
つまり、ＲＳフリップフロップ２５は、ＡＮＤゲート２４の出力が「１」である場合には、Ｓｅｔ端子から入力された「１」をキャンセルフラグとして保持し、Ｑ端子から「１」を出力し続ける。また、ＲＳフリップフロップ２５は、発行間隔タイマ２１がパトロールバリッドとして「１」を出力した場合には、保持した値をリセットしＱ端子から「０」を出力する。【００５１】
換言すると、ＲＳフリップフロップ２５は、次回発行されるパトロール要求のパトロールアドレスと、パトロールアドレスを発行するまでの間に受信した各リード要求のリードアドレスとが一致した場合には、パトロールキャンセルフラグを保持する。そして、ＲＳフリップフロップ２５は、後述するように、発行間隔タイマ２１がパトロールバリッドを発行すると、キャンセルフラグを消去する。【００５２】
ＯＲゲート２６は、ＲＳフリップフロップ２５のＳｅｔ端子に入力される値とＲＳフリップフロップ２５のＱ端子から出力される値との論理和を算出し、算出した論理和を出力する。つまり、ＯＲゲート２６は、ＡＮＤゲート「２４」の出力が「１」、または、ＲＳフリップフロップ２５の出力が「１」である場合に、「１」を出力する。換言すると、ＯＲゲート２６は、メモリコントローラ１０がリード要求を受信し、かつ、比較器２３がリードアドレスと次回発行されるパトロール要求のパトロールアドレスとが一致する場合、又は、キャンセルフラグが「１」である場合に「１」を出力する。【００５３】
つまり、ＯＲゲート２６は、ＲＳフリップフロップ２５の出力と、ＲＳフリップフロップをバイパスした比較結果との論理和を算出する。このため、パトロール制御部１１は、パトロール要求を発行すると同時に受信したリード要求のリードアドレスとパトロールアドレスとが一致する場合にも、パトロール要求の発行をキャンセルすることができる。【００５４】
ＡＮＤゲート２７は、発行間隔タイマ２１が発行したパトロールバリッドとパトロールアドレスを有するパトロール要求の入力と、ＯＲゲート２６の出力の反転入力とを受付ける。そして、ＡＮＤゲート２７は、ＯＲゲート２６の出力が「１」である場合には、パトロール要求を出力せず、ＯＲゲート２６の出力が「０」である場合には、図４中（Ｄ）に示す経路を介して、パトロール要求をアービタ１４へ発行する。【００５５】
つまり、ＡＮＤゲート２７は、リード要求を受信し、かつ、比較器２３がリードアドレスと次回発行されるパトロール要求のパトロールアドレスとが一致すると判別した場合、又は、キャンセルフラグが「１」である場合に、パトロール要求をキャンセルする。換言すると、ＡＮＤゲート２７は、パトロール要求の発行と同時に受信したリード要求のリードアドレスが、発行するパトロール要求のパトロールアドレスと一致する場合、又は、キャンセルフラグが「１」である場合には、パトロール要求の発行をキャンセルする。【００５６】
図５は、実施例１に係るパトロール制御部がパトロール要求を発行するタイミングを説明するためのタイムチャートである。図５には、発行間隔タイマ２１がタイミング通知およびパトロールバリッドを発行するタイミング、パトロールアドレス生成部２２が生成するパトロールアドレスを示す。また、図５には、リード要求を受信したタイミング、受信したリード要求に係るリードアドレス、ＲＳフリップフロップ２５にキャンセルフラグが格納されるタイミング、パトロール要求の発行タイミングを示す。【００５７】
図５中Ｔ１において、パトロールアドレス生成部２２がパトロールアドレス「０」を保持するとともに、発行間隔タイマ２１がタイミング通知とパトロールバリッドとを発行する。このため、パトロール制御部１１は、メモリアドレス「０」に対するパトロール要求を発行する。次に、図５中Ｔ２において、パトロールアドレス生成部２２は、新たなパトロールアドレス「１」を生成する。また、パトロール制御部１１は、リードアドレス「３」を対象とするリード要求を受信するが、パトロールアドレスと一致しないため、キャンセルフラグの設定は行わない。【００５８】
次に、図５中Ｔ３において、メモリコントローラ１０は、リードアドレス「１」を対象とするリード要求を受信する。すると、パトロールアドレス１１は、生成したパトロールアドレスとリードアドレスとが一致すると判別し、図５中Ｔ４において、キャンセルフラグ「１」をＲＳフリップフロップ２５に格納する。また、メモリコントローラ１０は、図５中Ｔ４、〜Ｔ５において、リードアドレス「２」、「８」を対象とするリード要求を受信する。ここで、パトロール制御部１１は、図５中Ｔ４にて既にキャンセルフラグをＲＳフリップフロップ２５に格納しており、生成したパトロールアドレスとは異なるリードアドレスを取得した場合にも、キャンセルフラグを消去せず、保持する。【００５９】
そして、パトロール制御部１１は、図５中Ｔ６において、タイミング通知とパトロールバリッドを発行するが、キャンセルフラグ「１」がＲＳフリップフロップ２５に格納されているため、パトロール要求の発行をキャンセルする。そして、パトロール制御部１１は、図５中Ｔ７において、ＲＳフリップフロップ２５に格納されたキャンセルフラグを「０」にリセットするとともに、新たなパトロールアドレス「２」を生成する。【００６０】
また、パトロール制御部１１は、図５中Ｔ７〜Ｔ９にいたるまで、上述した処理と同様の処理を実行する。ここで、図５中Ｔ１０において、パトロール制御部１１は、タイミング通知とパトロールバリッドとが発行されるとともに、メモリコントローラ１０がリードアドレス「２」を対象とするリード要求を受信する。【００６１】
図５中Ｔ１０に示すように、パトロール制御部１１は、タイミング通知とパトロールバリッドを発行するが、この時、パトロールアドレスとリードアドレスが一致する為、ＯＲゲート２６でＲＳフリップフロップをバイパスしてＡＮＤゲート２７にキャンセル信号を入力し、パトロール要求の発行をキャンセルする。そして、パトロール制御部１１は、図５中Ｔ１１において、ＲＳフリップフロップ２５に格納されたキャンセルフラグを「０」にリセットするとともに、新たなパトロールアドレス「３」を生成する。【００６２】
このように、パトロール制御部１１は、次回発行するパトロール要求のパトロールアドレスと、パトロール要求を発行するまでに受信したリード要求のリードアドレスとを比較する。そして、パトロール制御部１１は、パトロールアドレスとリードアドレスとが一致する場合には、パトロールアドレスの発行をキャンセルする。また、パトロール制御部１１は、パトロール要求のパトロールアドレスと同じリードアドレスを対象とするリード要求をパトロール要求の発行と同時に受信した場合にも、パトロールアドレスの発行をキャンセルする。【００６３】
ここで、メモリコントローラ１０がリード要求を発行した場合には、リードアドレスに格納されているデータが読み出され、後述するエラーチェッカ１７およびエラー訂正部１８によりエラーの検出およびエラーの訂正が行われる。このため、パトロール制御部１１は、次回発行するパトロール要求と同一のメモリアドレスを対象とするリード要求を受信した場合には、パトロール要求をキャンセルしても、訂正不能なエラーが発生する確率を悪化させることがない。この結果、パトロール制御部１１は、データに訂正不能なエラーが発生する確率を悪化させることなく、リード要求に係るメモリアクセス率を向上させるので、システムの性能悪化を防ぐことができる。【００６４】
なお、パトロール制御部１１が、スクラブ制御部１３から各要求の発行を禁止する旨の通知を受信した場合には、任意の方法でパトロール要求の発行を停止してよい。例えば、パトロール制御部１１は、図４中（Ｄ）に示す経路にＦＥＴ（Field  effect  transistor）等のスイッチを設け、スクラブ制御部１３から各要求の発行を禁止する旨の通知を受信した場合には、図４中（Ｄ）に示す経路を電気的に断線させることとしてもよい。【００６５】
図３に戻って、バッファ１２は、チップセット５から送信されるリード要求およびライト要求を受信し、一時的に記憶するバッファである。例えば、バッファ１２は、チップセット５からリード要求を受信した場合には、受信したリード要求を記憶すると共に、図３中（Ｆ）に示す経路を介して、アービタ１４に対して、リード要求の発行を行う。そして、バッファ１２は、アービタ１４から、リード要求を発行した旨を示す「Ｔａｋｅｎ」を受信した場合には、発行したリード要求を消去する。【００６６】
また、バッファ１２は、スクラブ制御部１３から各要求の発行を禁止する旨の通知を受信した場合には、チップセット５から受信したリード要求およびライト要求の発行を停止する。また、バッファ１２は、スクラブ制御部１３から各要求の発行禁止を解除する旨の通知を受信した場合には、リード要求またはライト要求の発行を再開する。なお、バッファ１２がリード要求を受信するタイミング、つまり、各ＣＰＵ２〜２ｂがリード要求を発行するタイミングは、パトロール要求が発行されるタイミングとは無関係であるため、バッファ１２は、リード要求を不定期に受信することとなる。【００６７】
スクラブ制御部１３は、エラーチェッカ１７がＤＩＭＭ３、３ａから読み出されたデータからエラーを検出した場合には、エラーを訂正するスクラブ処理を実行する。具体的には、スクラブ制御部１３は、エラーチェッカ１７からエラーを検出した旨を示す通知を受信した場合には、データの同一性を保持するため、パトロール制御部１１とバッファ１２とに、各要求の発行を禁止する旨の通知を送信する。【００６８】
そして、スクラブ制御部１３は、図３中（Ｇ）に示すように、エラーチェッカ１７がエラーを検出したメモリアドレスに対して、スクラブリード要求を発行する。ここで、スクラブ制御部１３は、エラーチェッカ１７がエラーを検出したメモリアドレスを任意の方法で取得することができる。例えば、スクラブ制御部１３は、アービタ１４から、リード要求または、パトロール要求の対象となるメモリアドレスを取得する。そして、スクラブ制御部１３は、エラーチェッカ１７からエラーを検出した旨の通知を受信した場合には、直前に取得したメモリアドレスに対して、スクラブリード要求を発行することとしてもよい。【００６９】
また、スクラブ制御部１３は、スクラブリード要求を発行した結果、エラーチェッカ１７がエラーを検出し、エラー訂正部１８がエラーを訂正した場合には、図３中（Ｇ）に示すように、スクラブライト要求をアービタ１４に発行する。これと同時に、スクラブ制御部１３は、図３中（Ｋ）に示すように、アービタ１９に対して、エラー訂正部１８から図３中（Ｉ）に示す経路を介してアービタ１９に入力されるデータを選択する旨の信号を送信する。その後、スクラブ制御部１３は、パトロール制御部１１およびバッファ１２に、各要求の発行禁止を解除する旨の通知を送信する。【００７０】
アービタ１４は、パトロール制御部１１が発行したパトロール要求と、バッファ１２が発行したリード要求又はライト要求と、スクラブ制御部１３が発行したスクラブリード要求またはスクラブライト要求との調停を行う調停器である。具体的には、アービタ１４は、各部１１〜１３が発行した各要求を、スクラブリード要求、スクラブライト要求、パトロール要求、リード要求、ライト要求の順に優先して調停する。そして、アービタ１４は、調停に勝利した要求を実行するコマンドを、図３中（Ｅ）に示すように、バッファ１５を介してＤＩＭＭ３、３ａに対して発行する。【００７１】
また、アービタ１４は、ＤＩＭＭ３、３ａに対して発行したコマンドの内容を経路選択部２８に通知する。具体的には、アービタ１４は、発行したコマンドの内容が、リード要求であるか、パトロール要求であるか、スクラブリード要求であるかを経路選択部２８に通知する。【００７２】
以下、図６を用いて、アービタ１４が実行する調停の一例について説明する。図６は、実施例１に係るアービタが実行する処理の一例を説明するための図である。図６に示す例では、パトロール制御部１１が発行したパトロール要求とバッファ１２が発行したリード要求との調停を行う処理について説明する。【００７３】
図６に示す例では、アービタ１４は、パトロール制御部１１からパトロール要求の発行を受付けると同時に、バッファ１２からリード要求の発行を受付ける（図６中（１））。このような場合には、パトロール要求とリード要求とが競合するので、アービタ１４は、パトロール要求とリード要求との調停を行う（図６中（２））。ここで、アービタ１４は、パトロール要求をリード要求よりも優先して発行するので、パトロール要求を実行するコマンドをＤＩＭＭ３、３ａに対して発行する（図６中（３））。そして、アービタ１４は、パトロール要求を実行したことを示す「Ｔａｋｅｎ」をパトロール制御部１１へ送信する（図６中（４））。【００７４】
なお、スクラブリード要求およびスクラブライト要求は、スクラブ制御部１３が、パトロール制御部１１およびバッファ１２に各要求の発行を禁止してから発行される要求であるため、実際にアービタ１４で競合することは無い。しかし、アービタ１４における回路として矛盾状態が生じないようにするため、スクラブリード要求およびスクラブライト要求を他の要求よりも優先する優先度がアービタ１４に設定されている。【００７５】
また、リード要求は、連続的に発行されるため、パトロール要求の優先度をリード要求の優先度よりも低くした場合には、一向にパトロール要求が実行されなくなる。この結果、ＤＩＭＭ３、３ａに記憶されたデータに訂正不可能なエラーが生じる確立が高くなるので、パトロール要求は、リード要求よりも優先して実行される。【００７６】
バッファ１５は、アービタ１４が発行したコマンドをＤＩＭＭ３、３ａに送信するバッファである。また、バッファ１６は、バッファ２０とともに双方向バッファの一部であり、ＤＩＭＭ３、３ａと送受信されるデータの流れを制御する。また、バッファ１６は、ＤＩＭＭ３、３ａから読み出されたデータ（以下、リードデータと記載）を、図３中（Ｈ）に示す経路を介して、エラーチェッカ１７とエラー訂正部１８へ送信するバッファである。ここで、リードデータには、ビット反転等のエラーの検出およびエラーの訂正を行うためのＥＣＣが付与されている。また、バッファ１６は、エラーチェッカ１７、および、エラー訂正部１８側からのデータがＤＩＭＭ３、３ａ側に流れないようにするため、設置される。【００７７】
エラーチェッカ１７は、ＤＩＭＭ３、３ａから読み出されたリードデータからエラーを検出する。具体的には、エラーチェッカ１７は、バッファ１６からリードデータを受信する。そして、エラーチェッカ１７は、受信したリードデータに付与されているＥＣＣを用いて、受信したリードデータにエラーが発生しているか否かを判別する。そして、エラーチェッカ１７は、読み出されたデータからエラーを検出した場合には、図３中（Ｊ）に示すように、エラー訂正部１８およびスクラブ制御部１３にエラーが検出された旨を通知する。【００７８】
エラー訂正部１８は、バッファ１６からリードデータを受信するとともに、エラーチェッカ１７からエラーを検出した旨の通知を受信した場合には、バッファ１６から受信したリードデータに付与されたＥＣＣを用いて、エラーの訂正を行う。そして、エラー訂正部１８は、エラーを訂正したリードデータを経路選択部２８に送信する。また、エラー訂正部１８は、エラーチェッカ１７からエラーを検出した旨の通知を受信しなかった場合には、バッファ１６から受信したリードデータを経路選択部２８に送信する。【００７９】
アービタ１９は、スクラブ制御部１３から何ら通知を受けていない場合には、図３中（Ｎ）に示す経路を介して、チップセット５から送信されたＤＩＭＭ３、３ａに書込まれるデータを受信する。そして、アービタ１９は、受信したデータを図３中（Ｌ）に示す経路を介して、バッファ２０に送信する。また、アービタ１９は、スクラブ制御部１３から図３中（Ｉ）に示す経路を介してアービタ１９に入力されるデータを選択する旨の通知を受信した場合には、図３中（Ｉ）に示す経路から受信するデータ、つまり、スクラブリード要求に係るデータを受信する。そして、アービタ１９は、受信したデータを図３中（Ｌ）に示す経路を介して、バッファ２０に送信する。ここで、アービタ１９が送信するデータには、ＥＣＣが付与されているものとする。【００８０】
バッファ２０は、アービタ１９から受信したデータをライトデータとしてＤＩＭＭ３、３ａに送信する。また、バッファ２０は、ＤＩＭＭ３、３ａから読み出されたデータがアービタ１９側に流れないようにするため、設置される。【００８１】
経路選択部２８は、エラー訂正部１８からリードデータを受信する。また、経路選択部２８は、アービタ１４から、受信したリードデータがリード要求によって読み出されたものであるか、パトロール要求によって読み出されたものであるか、スクラブリード要求によって読み出されたものであるかを示す通知を受信する。【００８２】
そして、経路選択部２８は、エラー訂正部１８から受信したリードデータがリード要求によって読み出されたリードデータである場合には、図３中（Ｍ）に示す経路を介して、チップセット５に受信したリードデータを送信する。また、経路選択部２８は、エラー訂正部１８から受信したリードデータがパトロール要求によって読み出されたリードデータである場合には、受信したリードデータを破棄する。また、経路選択部２８は、エラー訂正部１８から受信したリードデータがスクラブリード要求によって読み出されたリードデータである場合には、図３中（Ｉ）に示す経路を介して、アービタ１９へ受信したリードデータを送信する。【００８３】
例えば、メモリコントローラ１０、パトロール制御部１１、スクラブ制御部１３、アービタ１４、エラーチェッカ１７、エラー訂正部１８、アービタ１９、経路選択部２８、発行間隔タイマ２１、パトロールアドレス生成部２２とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ  （Field  Programmable  Gate  Array）などの集積回路などを適用する。また、バッファ１２とは、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ  （flash  memory）などの半導体メモリ素子などの記憶装置である。【００８４】
［メモリコントローラ１０が実行する処理の流れ］
次に、図を用いて、メモリコントローラ１０が実行する処理の流れについて説明する。まず、図７を用いて、メモリコントローラ１０がＤＩＭＭ３、３ａからデータを読み込み、データを訂正する処理について説明する。図７は、実施例１に係るメモリコントローラが実行する処理の流れ説明するためのフローチャートである。図７に示す例では、メモリコントローラ１０は、チップセット５からリード要求を受信した場合、または、パトロール要求を発行するタイミングとなったことを契機として、処理を開始する。【００８５】
まず、メモリコントローラ１０は、リード要求またはパトロール要求を発行する（ステップＳ１１）。次に、メモリコントローラ１０は、ＤＩＭＭ３、３ａから読み出されたリードデータにエラーが発生しているか否かを判別する（ステップＳ１２）。そして、メモリコントローラ１０は、エラーが発生していると判別した場合には（ステップＳ１２肯定）リードデータがパトロール要求により読み出されたデータであるか否かを判別する（ステップＳ１３）。【００８６】
また、メモリコントローラ１０は、リードデータがパトロール要求により読み出されたリードデータではないと判別した場合には（ステップＳ１３否定）、リードデータのエラーを訂正する（ステップＳ１４）。そして、メモリコントローラ１０は、エラーを訂正したリードデータをチップセット５に送出する（ステップＳ１５）。一方、メモリコントローラ１０は、リードデータがパトロール要求により読み出されたリードデータであると判別した場合には（ステップＳ１３肯定）、リードデータを破棄する（ステップＳ１６）。【００８７】
続いて、メモリコントローラ１０は、スクラブリード要求を発行し（ステップＳ１７）、ＤＩＭＭ３、３ａから読み出されたデータのエラーを訂正する（ステップＳ１８）。その後、メモリコントローラ１０は、エラーを訂正したデータをＤＩＭＭ３、３ａに格納するため、スクラブライト要求を発行し（ステップＳ１９）、エラーを訂正したデータをＤＩＭＭ３、３ａに格納した後、処理を終了する。【００８８】
また、メモリコントローラ１０は、エラーが検出されなかった場合には（ステップＳ１２否定）、リードデータがパトロール要求により読み出されたデータであるか否かを判別する（ステップＳ２０）。そして、メモリコントローラ１０は、リードデータがパトロール要求により読み出されたデータであると判別した場合には（ステップＳ２０肯定）、リードデータを破棄し（ステップＳ２１）、処理を終了する。一方、メモリコントローラ１０は、リードデータがパトロール要求により読み出されたデータではないと判別した場合には（ステップＳ２０否定）、リードデータをチップセット５に出力し（ステップＳ２２）、処理を終了する。【００８９】
次に、図８を用いて、メモリコントローラ１０が、受信したリード要求のリードアドレスと、生成したパトロールアドレスとを比較し、一致する場合には、パトロール要求の発行をキャンセルする処理について説明する。図８は、実施例１に係るメモリコントローラがパトロール要求をキャンセルする処理を説明するためのフローチャートである。なお、図８に示す処理は、上述した実施例１を適宜一般化した処理の流れについて説明するフローチャートである。【００９０】
なお、図８に示す例では、メモリコントローラ１０は、リード要求を受信したか否かを判別し（ステップＳ１００）、リード要求を受信したことを契機として（ステップＳ１００肯定）処理を開始する。まず、メモリコントローラ１０は、受信したリード要求のリードアドレスと、生成したパトロールアドレスとが一致するか否かを判別する（ステップＳ１０１）。そして、メモリコントローラ１０は、リードアドレスとパトロールアドレスとが一致すると判別した場合には（ステップＳ１０１肯定）、以下の処理を実行する。すなわち、メモリコントローラ１０は、パトロール要求発行のキャンセルフラグを生成し、生成したキャンセルフラグをレジスタ、すなわちＲＳフリップフロップ２５に格納する（ステップＳ１０２）。【００９１】
次に、メモリコントローラ１０は、パトロール要求を発行するタイミングであるか否かを判別し（ステップＳ１０３）、パトロール要求を発行するタイミングである場合には（ステップＳ１０３肯定）、以下の処理を実行する。すなわち、メモリコントローラ１０は、パトロール要求発行のキャンセルフラグがレジスタに保持されているか否かを判別する（ステップＳ１０４）。【００９２】
そして、メモリコントローラ１０は、キャンセルフラグがレジスタに保持されていると判別した場合には（ステップＳ１０４肯定）、パトロール要求の発行をキャンセルする（ステップＳ１０５）。また、メモリコントローラ１０は、パトロール要求発行のキャンセルフラグがレジスタに保持されていないと判別した場合には（ステップＳ１０４否定）、パトロール要求を発行する（ステップＳ１０６）。【００９３】
その後、メモリコントローラ１０は、次回発行するパトロール要求の対象となるパトロールアドレスを生成し（ステップＳ１０７）、再度リード要求を受信したか否かを判別する（ステップＳ１００）。また、メモリコントローラ１０は、リード要求を受信していない場合には（ステップＳ１００否定）、再度リード要求を受信したか否かを判別する。また、メモリコントローラは、パトロール要求を発行するタイミングではない場合には（ステップＳ１０３否定）、リード要求を受信したか否かを判別する（ステップＳ１００）。【００９４】
［実施例１の効果］
上述したように、メモリコントローラ１０は、次回発行するパトロール要求の対象となるパトロールアドレスを生成し、所定の時間おきに生成したパトロールアドレスに対するパトロール要求を発行する。また、メモリコントローラ１０は、リード要求を受信した場合には、受信したリード要求の対象となるリードアドレスと、生成したパトロールアドレスとを比較する。そして、メモリコントローラ１０は、リードアドレスとパトロールアドレスとが一致した場合には、パトロール要求の発行をキャンセルする。このため、メモリコントローラ１０は、データに訂正不能なエラーが発生する確率を悪化させることなく、リード要求に係るメモリアクセスの阻害を防止し、システムの性能劣化を防ぐことができる。【００９５】
つまり、パトロール要求は、ＤＩＭＭ３、３ａに格納されたデータを利用するアプリケーション等の動作とは関係が無い検査リード要求であるため、パトロール要求の回数が多くなると、リード要求の実行が阻害される結果、システムの性能が悪化する。しかし、メモリコントローラ１０は、リードアドレスとパトロールアドレスとが一致する場合には、パトロール要求の発行をキャンセルする。このため、メモリコントローラ１０は、リード要求が調停負けせずに発行される結果、リード要求に係るメモリアクセス性能を向上させ、システムの性能低下を防ぐことができる。【００９６】
また、メモリコントローラ１０は、リード要求により読み出されたリードデータについても、エラーが検出された場合には、パトロール要求により読み出されたリードデータ同様、スクラブライト要求とスクラブリード要求によるエラーの検出および訂正を行う。このため、メモリコントローラ１０は、次回発行するパトロールアドレスと同じメモリアドレスを対象とするリード要求を発行した場合には、パトロール要求を発行するのと同等の効果を得ることができる。【００９７】
この結果、メモリコントローラ１０は、リードアドレスとパトロールアドレスとが一致した場合は、パトロール要求の発行をキャンセルするので、ＤＩＭＭエラーによるシステムダウンの発生率を悪化させることなく、ＤＩＭＭアクセスの時間を増やすことができる。【００９８】
また、メモリコントローラ１０は、リード要求を受信する毎に、受信したリード要求の対象となるリードアドレスと次回発行するパトロールアドレスとを比較し、リードアドレスとパトロールアドレスとが一致する場合には、パトロール要求の発行をキャンセルする。このため、メモリコントローラ１０は、リード要求が連続して発行される場合にも、適切にパトロール要求のキャンセルを行うことができる。
【実施例２】
【００９９】
以下の実施例２では、複数のメールアドレスとパトロールアドレスとを比較するパトロール制御部を有するメモリコントローラ１０ａについて説明する。なお、メモリコントローラ１０ａは、実施例１に係るメモリコントローラ１０と同様の機能および構成を有するものとし、図面での説明を省略する。すなわち、メモリコントローラ１０ａは、パトロール制御部１１に対応するパトロール制御部１１ａを有する点以外は、実施例１に係るメモリコントローラ１０と同様の装置である。【０１００】
図９を用いて、メモリコントローラ１０ａが有するパトロール制御部１１ａについて説明する。図９は、実施例２に係るパトロール制御部を説明するための図である。なお、図９に示す例では、図４に示す各部と同様の機能を有する部、および、図９に示す経路と同一の信号が送受信される経路については、同一の符号を付し、以下の説明を省略する。【０１０１】
図９に示すように、パトロール制御部１１ａは、アドレスバッファ回路３０を有する。アドレスバッファ回路３０は、図９中（Ｑ）に示すように、パトロールアドレス生成部２２が生成したパトロールアドレスを取得する。また、アドレスバッファ回路３０は、図９中（Ｕ）に示すように、発行間隔タイマ２１が発行したパトロールバリッドを取得する。また、アドレスバッファ回路３０は、図９中（Ｓ）に示すように、リードコマンドを取得する。また、アドレスバッファ回路３０は、図９中（Ｒ）に示すように、リードアドレスを取得する。【０１０２】
アドレスバッファ回路３０は、リード要求の対象となるリードアドレスを一定の時間記憶しうる複数の記憶部を有する。そして、アドレスバッファ回路３０は、パトロールバリッドを受信した場合には、各記憶部に格納されたリードアドレスと、パトロールアドレスとを比較する。その後、アドレスバッファ回路３０は、いずれかの記憶部に格納されたリードアドレスと、パトロールアドレスとが一致した場合には、ＡＮＤゲート２７に「１」を反転入力し、パトロール要求の発行をキャンセルする。【０１０３】
以下、図を用いて、アドレスバッファ回路３０の具体例を説明する。図１０は、実施例２に係るアドレスバッファ回路の一例を説明するための図である。なお、図１０中（ａ）に示す経路は、図９中（Ｓ）に示す経路と対応し、図１０中（ｃ）に示す経路は、図９中（Ｒ）に示す経路と対応する。また、図１０中（Ｐ）、（Ｑ）、（Ｕ）に示す経路は、図９中の（Ｐ）、（Ｑ）、（Ｕ）に示す経路と対応する。【０１０４】
図１０に示す例では、アドレスバッファ回路３０は、Ｒｅａｄ  ｄｅｔａｒｍｉｎａｔｉｏｎ３１、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２、ＡＮＤゲート３３、Ｃｏｕｎｔｅｒ３４、アドレスバッファ３５を有する。また、アドレスバッファ回路３０は、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６、Ｔｉｍｉｅｒ３７  Ｃｏｕｎｔｅｒ３８、バリッドバッファ３９を有する。【０１０５】
アドレスバッファ３５は、セレクタ＃１と１０個のバッファ＃１〜＃１０とを有し、バリッドバッファ３９は、セレクタ＃２と１０個のバリッド＃１〜＃１０とを有する。各バッファ＃１〜＃１０は、それぞれ、各バリッド＃１〜＃１０対応付けられている。各バッファ＃１〜＃１０には、リード要求の対象となるリードアドレスが格納され、各バリッド＃１〜＃１０のうち、リードアドレスが格納されたバッファと対応するバリッドには、バリッドビットが格納される。つまり、バリッドビットは、有効なリードアドレスを示すバリッドビットである。【０１０６】
Ｒｅａｄ  ｄｅｔａｍｉｎａｔｉｏｎ３１は、図１０中（ａ）に示す経路を介して、リードコマンド、または、ライトコマンドを受信する。そして、Ｒｅａｄ  ｄｅｔｅｒｍｉｎａｔｉｏｎ３１は、受信したコマンドがリードコマンドである場合には、図１０中（ｂ）に示す経路を介して、バリッドビットを出力し、ＡＮＤゲート３３に入力する。また、Ｒｅａｄ  ｄｅｔａｍｉｎａｔｉｏｎ３１は、ライトコマンドを受信した場合には、バリッドビットを出力しない。【０１０７】
ここで、Ｒｅａｄ  ｄｅｔａｍｉｎａｔｉｏｎ３１がバリッドビットを出力しない場合には、各バッファ＃１〜＃１０にリードアドレスが格納されることが無い。このため、以下の説明においては、パトロール制御部１１ａが、リードコマンドとリードアドレスとを取得したものとして、説明を行う。【０１０８】
Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２は、図１０中（ｃ）に示す経路を介して、リードアドレスを取得する。また、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２は、図１０中（ｄ）に示す経路を介して、アドレスバッファ３５の各バッファ＃１〜＃１０に格納されたリードアドレスを取得する。また、Ｄｕｐｕｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２は、図１０中（ｅ）に示す経路を介して、バリッドバッファ３９の各バリッド＃１〜＃１０に格納されたバリッドビットを取得する。【０１０９】
そして、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２は、各バッファ＃１〜＃１０に格納されたリードアドレスのうち、バリッドビットが格納されたバリッドと対応付けられたバッファに格納されていたリードアドレスと、受信したリードアドレスとを比較する。そして、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２は、いずれかのリードアドレスと受信したリードアドレスとが一致した場合には、図１０中（ｆ）に示す経路を介して、ＡＮＤゲート３３に「１」を出力する。ここで、ＡＮＤゲート３３は、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２からの出力を反転した状態で取得する。【０１１０】
このため、Ｄｕｐｕｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２は、受信したリードアドレスと同一のリードアドレスがアドレスバッファ３５に記憶されていた場合には、新たに受信したリードアドレスの記憶をキャンセルする。この結果、アドレスバッファ回路３０は、アドレスバッファ３５およびバリッドバッファ３９の容量を節約し、回路規模の小型化や、回路構成の簡易化を図ることができる。【０１１１】
ＡＤＮゲート３３は、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２が「０」を出力した場合には、Ｒｅａｄ  ｄｅｔａｒｍｉｎａｔｉｏｎ３１から出力されたバリッドビットを出力する。また、ＡＤＮゲート３３は、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２が「１」を出力した場合には、Ｒｅａｄ  ｄｅｔａｒｍｉｎａｔｉｏｎ３１から出力されたバリッドビットの出力を行わない。また、ＡＮＤゲート３３は、バリッドビットをアドレスバッファ３５のセレクタ＃１とバリッドバッファ３９のセレクタ＃２に送信する。なお、ＡＮＤゲート３３が各セレクタ＃１、＃２に送信したバリッドビットは、ライトイネーブル信号として用いられる。【０１１２】
Ｃｏｕｎｔｅｒ３４は、図１０中（ｇ）に示す経路を介して、バリッドビットを取得した場合には、アドレスバッファ３５が有する各バッファ＃１〜＃１０のうち、受信したリード要求のリードアドレスを格納するバッファを選択する。例えば、Ｃｏｕｎｔｅｒ３４は、「１」〜「１０」までの数値を反復的にカウントするカウンタであり、バリッドビットを取得した場合には、カウンタの値を「１」だけインクリメントする。【０１１３】
そして、Ｃｏｕｎｔｅｒ３４は、図１０中（ｈ）に示す経路を介して、カウンタの値をアドレスバッファ３５のセレクタ＃１と、バリッドバッファ３９のセレクタ＃２に送信する。具体例で説明すると、Ｃｏｕｔｅｒ３４は、カウンタの値が「４」である際に、バリッドビットを取得した場合には、カウンタの値を「５」とし、カウンタの値「５」をアドレスバッファ３５のセレクタ＃１とバリッドバッファ３９のセレクタ＃２に送信する。【０１１４】
セレクタ＃１は、図１０中（ｉ）に示す経路を介して、リードアドレスを取得する。また、セレクタ＃１は、図１０中（ｈ）に示す経路を介して、Ｃｏｕｎｔｅｒ３４の値を取得する。そして、セレクタ＃１は、ＡＮＤゲート３３からバリッドビット、すなわち、ライトイネーブル信号を受信した場合には、受信したリードアドレスを、Ｃｏｕｎｔｅｒ３４の値が示すバッファに格納する。例えば、セレクタ＃１は、Ｃｏｕｎｔｅｒ３４から「５」を受信した際に、リードアドレスと、ライトイネーブル信号とを受信した場合には、バッファ＃５にリードアドレスを格納する。つまり、セレクタ＃１は、バリッドビットが格納されていないバリッドと対応するバッファにリードメモリを格納する。【０１１５】
セレクタ＃２は、図１０中（ｈ）に示す経路を介して、Ｃｏｕｎｔｅｒ３４の値を取得するとともに、ＡＮＤゲート３３から、バリッドビット、つまり、ライトイネーブル信号を受信した場合には、以下の処理を実行する。すなわち、Ｃｏｕｎｔｅｒ３４から受信した値が示すバリッドに、バリッドビットを格納する。例えば、セレクタ＃２は、Ｃｏｕｎｔｅｒ３４から「５」を取得し、ＡＮＤゲート３３からバリッドビットを取得した場合には、バリッド＃５にバリッドビットを格納する。なお、図１０中（ｊ）に示す接続は、バリッドバッファ３９が有する各バリッド＃１〜＃１０をセットするための信号経路を示す。【０１１６】
Ｔｉｍｅｒ３７は、各バッファ＃１〜＃１０のいずれかがリードアドレスを記憶してから所定の時間が経過した場合には、リードアドレスを記憶したバッファと対応付けられたバリッドに格納されたバリッドビットを消去する。例えば、Ｔｉｍｉｅｒ３７は、バリッドバッファ３９が有するバリッド＃１〜＃１０のいずれかにバリッドビットが格納された場合には、カウントを開始し、カウントがあらかじめ設定された値となった場合には、図１０中（ｋ）に示す経路にバリッドを出力する。【０１１７】
Ｃｏｕｎｔｅｒ３８は、図１０中（ｋ）に示す経路にバリッドビットが出力された場合には、バリッドバッファ３９が有する各バリッド＃１〜＃１０のうち、バリッドビットを消去するバリッドを選択する。例えば、Ｃｏｕｎｔｅｒ３８は、Ｃｏｕｎｔｅｒ３４と同様に、「１」〜「１０」までの数値を反復的にカウントするカウンタであり、バリッドビットを取得した場合には、カウンタの値を「１」だけインクリメントする。【０１１８】
そして、Ｃｏｕｎｔｅｒ３８は、図１０中（ｌ）に示す経路を介して、カウンタの値をバリッドバッファ３９のセレクタ＃２へ送信する。具体例で説明すると、Ｃｏｕｎｔｅｒ３８は、カウンタの値が「４」である際に、Ｔｉｍｉｅｒ３７がバリッドビットを出力した場合には、カウンタの値を「５」とし、カウンタの値「５」をバリッドバッファ３９のセレクタ＃２へ送信する。また、Ｔｉｍｅｒ３７およびＣｏｕｎｔｅｒ３８は、全バリッド＃１〜＃１０にバリッドビットが格納されていない場合には、カウントおよびインクリメントを停止する。【０１１９】
セレクタ＃２は、上述した処理に加えて、図１０中（ｋ）に示す経路を介してバリッドビットを受信し、図１０中（ｌ）に示す経路を介してカウンタの値を受信した場合には、カウンタの値が示すバリッドに格納されたバリッドビットを消去する。例えば、セレクタ＃２は、図１０中（ｋ）に示す経路を介してバリッドビットを受信するとともに、図１０中（ｌ）に示す経路から「５」を受信した場合には、バリッド＃５に格納されたバリッドビットを消去する。【０１２０】
つまり、セレクタ＃２は、バリッド＃５に格納されたバリッドビットを消去することで、アドレスバッファ３５が有するバッファ＃５に格納されたリードアドレスを無効化する。換言すると、Ｃｏｕｎｔｅｒ３８は、バリッドビットを格納してから、所定の時間が経過した後に、バリッドビットを消去する。このように、インクリメントにて生成した値を用いて、バリッドビットを消去する対象を決定するので、各バリッド＃１〜＃１０に記憶されたバリッドビットに歯抜けが存在する場合にも、歯抜けとなっているバリッドビットを消去させ、回路を簡略化する。【０１２１】
また、セレクタ＃２は、図１０中（ｍ）に示す経路を介して、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６から信号を受信した場合には、バリッドバッファ３９が有する各バリッド＃１〜＃１０に格納されたバリッドビットを消去する。なお、図１０中（ｎ）に示す複数の接続は、各バリッド＃１〜＃１０に格納されたバリッドビットを消去するための信号線となる。【０１２２】
Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、図１０中（Ｑ）に示す経路を介して、パトロールアドレスを取得する。また、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、図１０中（ｏ）に示す経路を介して、アドレスバッファ３５が有する各バッファ＃１〜＃１０に格納されたリードアドレスを取得する。また、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、図１０中（ｐ）に示す経路を介して、バリッドバッファ３９が有する各バリッド＃１〜＃１０に格納されたバリッドビットを取得する。なお、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、これらパトロールアドレス、リードアドレス、バリッドビットは、常に取得し続けている。【０１２３】
また、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、図１０中（Ｕ）に示す経路を介して、パトロールバリッドを受信した場合には、以下の処理を実行する。すなわち、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、各バッファ＃１〜＃１０のうち、対応付けられたバリッドにバリッドビットが格納されたバッファに格納された１つまたは複数のリードアドレスと、パトロールアドレスとを比較する。そして、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、リードアドレスとパトロールアドレスとが一致した場合には、図１０中（ｑ）に示す経路を介して、ＡＮＤゲート２７に「１」を入力する。つまり、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６は、リードアドレスとパトロールアドレスとが一致した場合には、パトロール要求の発行をキャンセルする。【０１２４】
なお、例えば、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６の機能は、以下のように実現することができる。例えば、各バッファ＃１〜＃１０と各バリッド＃１〜＃１０とをそれぞれＸＯＲゲートで接続することで、バリッドビットが格納されたバリッドと対応付けられたバッファに格納されたリードアドレスのみを有効化する。そして、この１０個のＸＯＲゲートの出力とパトロールアドレスとを比較器により比較し、１０個の比較結果をＯＲゲートによって集合させることで、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６が出力する信号を生成することができる。【０１２５】
例えば、Ｒｅａｄ  ｄｅｔａｒｍｉｎａｔｉｏｎ３１、Ｄｕｐｌｉｃａｔｉｏｎ  Ｃｏｍｐａｒｅ３２、Ｃｏｕｎｔｅｒ３４、３８、Ｐａｔｒｏｌ  Ａｄｄｒｅｓｓ  Ｃｏｍｐａｒｅ３６、Ｔｉｍｅｒ３７とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ  （Field  Programmable  Gate  Array）などの集積回路などを適用する。また、アドレスバッファ３５、バリッドバッファ３９とは、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ  （flash  memory）などの半導体メモリ素子などの記憶装置である。【０１２６】
［パトロール制御部１１ａが実行する処理の流れ］
次に、図を用いて、パトロール制御部１１ａが実行する処理の流れについて説明する。まず、図１１を用いて、パトロール制御部１１ａがリードアドレスをバッファに記憶する処理の流れの一例について説明する。図１１は、実施例２に係るパトロール制御部が、リードアドレスをバッファに記憶する処理の流れの一例を説明するための図である。【０１２７】
図１１に示す例では、パトロール制御部１１ａは、リード要求を受信したことをトリガとして処理を開始する（ステップＳ２００肯定）。まず、パトロール制御部１１ａは、受信したリード要求のリードアドレスと、パトロールアドレス生成部２２が生成したパトロールアドレスとが一致するか否かを判別する（ステップＳ２０１）。そして、パトロール制御部１１ａは、リードアドレスとパトロールアドレスとが一致すると判別した場合には（ステップＳ２０１肯定）、アドレスバッファ３５にリードアドレスを蓄積する（ステップＳ２０２）。また、パトロール制御部１１ａは、リードアドレスとパトロールアドレスとが一致しないと判別した場合には（ステップＳ２０１否定）、リードアドレスの蓄積を行わずに、新たなリード要求を受信したか否かを判別する（ステップＳ２００）。【０１２８】
次に、図１２を用いて、パトロール制御部１１ａが蓄積したリードアドレスとパトロールアドレスとを比較し、パトロールをキャンセルするか否かを判別する処理の流れについて説明する。図１２は、実施例２に係るパトロール制御部がパトロール要求の発行をキャンセルするか否かを判別する処理の流れの一例を説明するための図である。なお、パトロール制御部１１ａは、図１２に示す処理を、図１１に示す処理とは独立して実行する。【０１２９】
図１２に示す例では、パトロール制御部１１ａは、パトロール要求の発行タイミングであるか否かを判別する（ステップＳ３０１）。次に、パトロール制御部１１ａは、パトロール要求の発行タイミングであると判別した場合には（ステップＳ３０１肯定）、蓄積したリードアドレスとパトロールアドレスとが一致するか否かを判別する（ステップＳ３０２）。【０１３０】
そして、パトロール制御部１１ａは、蓄積したいずれかのリードアドレスとパトロールアドレスとが一致すると判別した場合には（ステップＳ３０２肯定）、パトロール要求の発行をキャンセルする（ステップＳ３０３）。次に、パトロール制御部１１ａは、次回発行するパトロール要求のパトロールアドレスを生成し（ステップＳ３０４）、アドレスバッファ３５に蓄積されたリードアドレスを消去する（ステップＳ３０５）。その後、パトロール制御部１１ａは、再度、パトロール要求を発行するタイミングであるか否かを判別する（ステップＳ３０１）。【０１３１】
また、パトロール制御部１１ａは、蓄積した全てのリードアドレスとパトロールアドレスとが一致しないと判別した場合には（ステップＳ３０２否定）、パトロール要求を発行する（ステップＳ３０６）。その後、パトロール制御部１１ａは、次回発行するパトロール要求のパトロールアドレスを生成し（ステップＳ３０７）、再度、パトロール要求を発行するタイミングであるか否かを判別する（ステップＳ３０１）。また、パトロール制御部１１ａは、パトロール要求の発行タイミングではないと判別した場合には（ステップＳ３０１否定）、パトロール要求の発行タイミングであるか否かを再度判別する（ステップＳ３０１）。【０１３２】
［実施例２の効果］
上述したように、メモリコントローラ１０ａは、複数のバッファ＃１〜＃１０と、各バッファ＃１〜＃１０に対応付けられたバリッド＃１〜＃１０を有する。そして、メモリコントローラ１０ａは、リードアドレスをバッファ＃１〜＃１０のうち、いずれかのバッファに格納する。また、メモリコントローラ１０ａは、パトロール要求を発行するタイミングで、各バッファ＃１〜＃１０に格納されたリードアドレスと、生成したパトロールアドレスとを比較する。そして、メモリコントローラ１０ａは、いずれかのリードアドレスと生成したパトロールアドレスとが一致した場合には、パトロール要求の発行をキャンセルする。【０１３３】
つまり、メモリコントローラ１０ａは、パトロール要求を発行するよりも長い周期で、パトロールアドレスと同じリードアドレスを対象とするリード要求が発行されていた場合には、パトロール要求の発行をキャンセルする。このため、メモリコントローラ１０ａは、ＤＩＭＭエラーの発生を押さえつつ、リード要求によるＤＩＭＭアクセスの阻害を防止し、リード要求やライト要求によるメモリアクセスを円滑に行う。【０１３４】
また、メモリコントローラ１０ａは、各バッファ＃１〜＃１０と対応付けられた複数のバリッド＃１〜＃１０を有し、リードアドレスを格納したバッファと対応付けられたバリッドにバリッドビットを格納する。そして、メモリコントローラ１０ａは、各バッファ＃１〜＃１０のうち、対応付けられたバリッドにバリッドビットが格納されているバッファに格納されたリードアドレスとパトロールアドレスとを比較する。このため、メモリコントローラ１０ａは、各バッファ＃１〜＃１０に格納されたリードアドレスの更新を容易にすることができる。【０１３５】
また、メモリコントローラ１０ａは、バリッドビットを格納してから所定の時間が経過した場合には、格納したバリッドビットを消去する。つまり、メモリコントローラ１０ａは、リードアドレスをバッファに格納してから所定の時間が経過した場合には、リードアドレスを無効化し、パトロールアドレスとの比較を行わない。このため、メモリコントローラ１０ａは、複数のリードアドレスとパトロールアドレスとの比較を、簡易な回路構成で行う事ができる。【０１３６】
具体的には、メモリコントローラ１０ａは、バッファ＃１とバリッド＃１との排他的論理和と、バッファ＃２とバリッド＃２との排他的論理和といったように、各バッファ＃１〜＃１０と各バリッド＃１〜＃１０との排他的論理和を取る。そして、メモリコントローラ１０ａは、各排他的論理和の結果の論理和を取ることで、所定の時間間隔以内に受信した複数のリード要求のリードアドレスと、パトロールアドレスとが一致するか否かの結果を取得することができる。このように、メモリコントローラ１０ａは、簡易な回路構成で、リードアドレスとパトロールアドレスとを比較することができる。【０１３７】
また、メモリコントローラ１０ａは、新たに受信したリード要求の対象となるリードアドレスが、いずれかのバッファに格納されている場合には、新たに受信したリード要求のリードアドレスを格納しない。このため、メモリコントローラ１０ａは、アドレスバッファ３５とバリッドバッファ３９との容量を削減することができる。【０１３８】
すなわち、通常のシステムにおいては、同じメモリアドレスに対するリード要求が連続して発行される。ここで、メモリコントローラ１０ａは、同じリードアドレスを対象とするリード要求が連続した場合には、後続のリード要求の対象となるリードアドレスを重複して記憶することなく、破棄する。このため、メモリコントローラ１０ａは、アドレスバッファ３５とバリッドバッファ３９との容量を削減することができる。【０１３９】
なお、メモリコントローラ１０ａは、後続のリード要求の対象となるリードアドレスを重複して記憶しなかったとしても、先に受信したリード要求によって、データの読み出しを行う。この結果、メモリコントローラ１０ａは、読み出したデータからエラーの検出および訂正を行う結果、訂正不可能なエラーの発生を防ぐことができる。【０１４０】
なお、メモリコントローラ１０ａは、パトロール要求の発行と同時にパトロールアドレスと同一のリードアドレスを蓄積した場合には、パトロール要求をキャンセルするとともに、蓄積したリードアドレスによって次回のパトロール要求をキャンセルする。つまり、メモリコントローラ１０ａは、パトロール要求の発行と同時に同一のメモリアドレスを対象とするリード要求のリードアドレスを受信した場合には、このメモリアドレスに対するパトロール要求が２週分出力されない。【０１４１】
しかし、メモリコントローラ１０ａは、リード要求を発行する結果、エラーが発生している場合には、スクラブリード要求およびスクラブライト要求を発行し、エラーの訂正を行うので、訂正不可能なエラーを防ぐことができる。
【実施例３】
【０１４２】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例３として本発明に含まれる他の実施例を説明する。【０１４３】
（１）バッファについて
上述したアドレスバッファ回路３０は、１０個のバッファ＃１〜＃１０を有するアドレスバッファ３５と、１０個のバリッド＃１〜＃１０を有するバリッドバッファ３９とを有していた。しかし、実施例は、これに限定されるものではなく、アドレスバッファ３５は、任意の数のバッファを有してよく、バリッドバッファ３９は、任意の数のバリッドを有しても良い。【０１４４】
また、アドレスバッファ回路３０は、アドレスバッファ３５とバリッドバッファ３９とを異なるバッファとして有するが、実施例はこれに限定されるものではない。例えば、アドレスバッファ３５は、リードアドレスとバリッドビットを記憶する複数のバッファラインを有し、各バッファラインに格納されたリードアドレスとバリッドビットとを用いて、上述した処理を行うこととしてもよい。【０１４５】
（２）システムボードについて
上述したメモリコントローラ１０は、システムボード１上に設置されたブリッジチップ４に搭載された。しかし、実施例はこれに限定されるものではない。例えば、メモリコントローラ１０は、各ＣＰＵ２〜２ｂの内部に搭載されてもよい。すなわち、メモリコントローラ１０は、ブリッジチップ４のみならず、ＤＩＭＭに対してアクセスを行う任意の装置内に設置することができる。
【符号の説明】
【０１４６】
１  システムボード
２〜２ｂ  ＣＰＵ
３〜３ｇ  ＤＩＭＭ
４  ブリッジチップ
５  チップセット
１０  メモリコントローラ
１１  パトロール制御部
１２  バッファ
１３  スクラブ制御部
１４  アービタ
１５、１６、２０  バッファ
１７  エラーチェッカ
１８  エラー訂正部
１９  アービタ
２１  発行間隔タイマ
２２  パトロールアドレス生成部
２８  経路選択部
【図１】
0005605507.tif 000002
【図２】
0005605507.tif 000003
【図３】
0005605507.tif 000004
【図４】
0005605507.tif 000005
【図５】
0005605507.tif 000006
【図６】
0005605507.tif 000007
【図７】
0005605507.tif 000008
【図８】
0005605507.tif 000009
【図９】
0005605507.tif 000010
【図１０】
0005605507.tif 000011
【図１１】
0005605507.tif 000012
【図１２】
0005605507.tif 000013
【図１３】
0005605507.tif 000014
【図１４】
0005605507.tif 000015
【図１５】
0005605507.tif 000016
【図１６】
0005605507.tif 000017