(57)【要約】【課題】ＤＲＡＭアクセス時にエラーが発生する頻度を可及的に低減したメモリシステムを提供する。【解決手段】不揮発性の第１メモリ２と、揮発性の第２メモリ４と、第２メモリ４を介してホスト装置と第１メモリ２との間でデータ転送を行う転送コントローラ３と、を備え、転送コントローラ３は、第２のメモリ４の記憶領域を複数に分割した分割単位毎に、各分割領域に対するデータの入出力の際のパリティエラーを求め、パリティエラーの累積回数をカウントするエラーカウント手段１４、１５と、エラーカウント手段によるカウント値が所定の回数を越える分割領域を使用不可状態とする手段と、を備える。【選択図】        図１
2010152542.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の第１メモリと、
揮発性の第２メモリと、
前記第２メモリを介してホスト装置と第１メモリとの間でデータ転送を行う転送コントローラと、
を備え、
前記転送コントローラは、
前記第２メモリの記憶領域を複数に分割した分割領域毎に、前記各分割領域に対するデータの入出力の際のパリティエラーを求め、前記パリティエラーの累積回数をカウントするエラーカウント手段と、
前記エラーカウント手段によるカウント値が所定の回数を越える分割領域を使用不可状態とする手段と、
を備えることを特徴とするメモリシステム。
【請求項２】
前記エラーカウント手段は、
前記分割単位より小さいパリティ演算単位毎に、前記第２メモリへ書き込まれる前および前記第２メモリから読み出された後におけるパリティを夫々算出し、算出した各パリティを比較するパリティ演算／比較手段と、
前記比較手段の比較結果を前記分割単位をもって累計することで、各分割領域におけるパリティエラーの累積個数をカウントするカウント手段と、
を備え、
前記算出された第２メモリへ書き込まれる前におけるパリティを一時記憶する一時記憶手段を備えることを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記転送コントローラは、
一時記憶手段に記憶されたパリティを古いものから削除する、
ことを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記一時記憶手段は、パリティを圧縮して保存する、
ことを特徴とする請求項２に記載のメモリシステム。
【請求項５】
前記パリティ演算／比較手段は、前記第２メモリに記憶されているデータに対してパリティ演算サイズより小さいサイズの一部の書き換えが行われたとき、前記一部データの書き換え前後の変化に基づいて前記一時記憶手段に保存されている対応するパリティを書き換える、
ことを特徴とする請求項２に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、メモリシステムに関する。
【背景技術】
【０００２】
コンピュータシステムに用いられるメモリシステムとして、ＮＡＮＤ型フラッシュメモリ（以降、単にＮＡＮＤメモリという）などの不揮発性半導体メモリを搭載したＳＳＤ（Solid  State  Drive）が注目されている。ＳＳＤなどのメモリシステムは、磁気ディスク装置に比べ、高速、軽量などの利点を有している。
【０００３】
ＮＡＮＤメモリは、書き換え回数の増加に従ってエラー率が大きくなる。したがって、ＳＳＤは、ＮＡＮＤメモリチップ内や、ＮＡＮＤメモリとパーソナルコンピュータなどのホスト装置との間のデータ転送を制御する転送コントローラに、ＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）回路を搭載することが行われる（例えば特許文献１）。
【０００４】
ＳＳＤは、ＮＡＮＤメモリとパーソナルコンピュータなどのホスト装置との間でデータ転送を行うためのバッファメモリあるいはキャッシュメモリとして使用されるＤＲＡＭなどの揮発性メモリを備えている。近年、転送コントローラ外部にＤＲＡＭを接続している場合に、ノイズ等の影響を受けて、ＤＲＡＭにアクセスを行う際にエラーが発生することが明らかとなってきた。従来のＳＳＤにおいては、このＤＲＡＭアクセスを行う際に発生したエラーの訂正を、転送コントローラに搭載されたＥＣＣ回路やホスト装置のドライバなどにおいて行っており、このエラー訂正にかかる動作がＳＳＤのデータ転送効率を低下させる一因となっていた。そのため、ＤＲＡＭアクセス時にエラーが発生する頻度を低減する技術が要望されていた。
【０００５】
【特許文献１】特開２００８−０４１１７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、ＤＲＡＭアクセス時にエラーが発生する頻度を可及的に低減したメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願発明の一態様によれば、不揮発性の第１メモリと、揮発性の第２メモリと、前記第２メモリを介してホスト装置と第１メモリとの間でデータ転送を行う転送コントローラと、を備え、前記転送コントローラは、前記第２メモリの記憶領域を複数に分割した分割領域毎に、前記各分割領域に対するデータの入出力の際のパリティエラーを求め、前記パリティエラーの累積回数をカウントするエラーカウント手段と、前記エラーカウント手段によるカウント値が所定の回数を越える分割領域を使用不可状態とする手段と、を備えることを特徴とするメモリシステムが提供される。
【発明の効果】
【０００８】
本発明によれば、ＤＲＡＭアクセス時にエラーが発生する頻度を可及的に低減したメモリシステムを提供することができる。
【発明を実施するための最良の形態】
【０００９】
以下に添付図面を参照して、この発明にかかるメモリシステムの実施の形態を詳細に説明する。
【００１０】
（第１の実施の形態）
図１は、ＳＳＤの構成例を示すブロック図である。図示するように、ＳＳＤ１は、パーソナルコンピュータなどのホスト装置にＳＡＴＡインタフェースなどの通信規格で接続され、ホスト装置の外部メモリとして機能する。ＳＳＤ１は、ホスト装置から書き込み要求されたデータを記憶する不揮発性メモリであるＮＡＮＤメモリ２と、ホスト装置とＮＡＮＤメモリ２との間のデータ転送を制御する転送コントローラとしてのＳＳＤコントローラ３と、ＳＳＤコントローラ３によりデータ転送のためのバッファ領域として使用される揮発性メモリであるＤＲＡＭ４と、を備えている。
【００１１】
ＳＳＤコントローラ３は、データアクセス用バス１０１および回路制御用バス１０２を備えている。回路制御用バス１０２には、ＳＳＤコントローラ３全体を制御するプロセッサ１０３が接続されている。回路制御用バス１０２には、ＮＡＮＤメモリ２に記憶された各管理プログラム（ファームウエア）をブートするブート用プログラムが格納されたＲＯＭ１０４が接続されている。
【００１２】
データアクセス用バス１０１には、データ作業領域およびファームウェア展開領域として使用されるＳＲＡＭ１０５がＳＲＡＭコントローラ１０６を介して接続されている。ＮＡＮＤメモリ２に記憶されているファームウェアは起動時、ＲＯＭ１０４に記憶されたブート用プログラムによってＳＲＡＭ１０５に転送され、展開される。プロセッサ１０３は、ＳＲＡＭ１０５に展開されたファームウェアを実行することによって、ＳＳＤコントローラ３全体を制御する。
【００１３】
また、データアクセス用バス１０１には、ＤＲＡＭ４に対するリード／ライト制御を実行するＤＲＡＭコントローラ１０７が接続されている。ＤＲＡＭコントローラ１０７は、転送データをＤＲＡＭ４に書き込み、書き込んだ転送データを読み出す一連のＤＲＡＭアクセスの前後で発生するエラーを検出し、アクセス時にエラーが頻発する領域を使用停止させる。ＤＲＡＭコントローラ１０７の機能については後ほど詳しく説明する。
【００１４】
ＳＡＴＡインタフェースコントローラ（ＳＡＴＡコントローラ）１０８、ＮＡＮＤ用エラー訂正回路１０９、およびＮＡＮＤコントローラ１１０は、データアクセス用バス１０１と回路制御用バス１０２との両方に接続されている。ＳＡＴＡコントローラ１０８は、ＳＡＴＡインタフェースを介してホスト装置との間でデータを送受信する。
【００１５】
ＮＡＮＤコントローラ１１０は、ＮＡＮＤメモリ２に対するインタフェース機能とＮＡＮＤメモリ２に対するアクセス時に発生するエラーを訂正するエラー訂正機能を有する。ＮＡＮＤコントローラ１１０のエラー訂正機能は、第２の訂正符号のエンコードを行い、また、第１の誤り訂正符号のエンコードおよびデコードを行う。ＮＡＮＤ用エラー訂正回路１０９は、第２の誤り訂正符号のデコードを行う。第１の誤り訂正符号、第２の誤り訂正符号は、例えば、ハミング符号、ＢＣＨ（Bose  Chaudhuri  Hocqenghem）符号、ＲＳ（Reed  Solomon）符号、或いはＬＤＰＣ（Low  Density  Parity  Check）符号等であり、第２の誤り訂正符号の訂正能力は、第１の誤り訂正符号の訂正能力よりも高いとする。
【００１６】
次に、以上のように構成されるＳＳＤ１において、ホスト装置とＮＡＮＤメモリ２との間のデータフローについて説明する。ホスト装置から送信され、ＮＡＮＤメモリ２に書き込まれるデータをＷｒｉｔｅデータ、ＮＡＮＤメモリ２から読み出され、ホスト装置に転送されるデータをＲｅａｄデータということとする。
【００１７】
図２は、ホスト装置から送信されてきたＷｒｉｔｅデータがＮＡＮＤメモリ２に書き込まれるまでのデータフローの一例を説明する図である。図２において、まず、ＳＡＴＡコントローラ１０８がＷｒｉｔｅデータを受信したとき、プロセッサ１０３は、ＷｒｉｔｅデータをＤＲＡＭ２に書き込む第１の転送指令をＳＡＴＡコントローラ１０８に発行し、ＳＡＴＡコントローラ１０８は第１の転送指令に基づいてＷｒｉｔｅデータをＤＲＡＭ４に書き込む（データフローＦ１）。
【００１８】
続いて、プロセッサ１０３は、ＤＲＡＭ４に書き込まれたＷｒｉｔｅデータを読み出してＮＡＮＤメモリ２に書き込む指令である第２の転送指令をＮＡＮＤコントローラ１１０に発行し、ＮＡＮＤコントローラ１１０は、第２の転送指令に基づいて、ＤＲＡＭ４に書き込まれているＷｒｉｔｅデータを読み出してＮＡＮＤメモリ２に書き込む（データフローＦ２）。このとき、ＮＡＮＤコントローラ１１０は、Ｗｒｉｔｅデータに対して第２の訂正符号および第１の誤り訂正符号のエンコードを行い、Ｗｒｉｔｅデータを第１および第２の訂正符号とともにＮＡＮＤメモリ２に書き込む。
【００１９】
図３は、ＮＡＮＤメモリ２に書き込まれているデータが読み出されてホスト装置に転送されるまでのデータフローの一例を説明する図である。プロセッサ１０３は、ＮＡＮＤメモリ２からＲｅａｄデータを読み出してこの読み出したＲｅａｄデータをＤＲＡＭ４の書き込み先アドレスを指定してＤＲＡＭ４に書き込む指令である第３の転送指令をＮＡＮＤコントローラ１１０に発行し、ＮＡＮＤコントローラ１１０は第３の転送指令に基づいてＤＥＡＭ４にＲｅａｄデータを書き込む（データフローＦ３）。このとき、ＮＡＮＤコントローラ１１０は、第１の訂正符号のデコードを行ってＮＡＮＤメモリ２から読み出したＲｅａｄデータのエラー検出訂正を実行する。
【００２０】
第３の転送指令を実行する過程でＮＡＮＤコントローラ１１０がエラーの訂正に失敗したとき、ＮＡＮＤコントローラ１１０はエラー訂正に失敗した旨をプロセッサ１０３に通知し、通知を受信したプロセッサ１０３は、ＮＡＮＤ用エラー訂正回路１０９にエラー訂正指令を発行する。ＮＡＮＤ用エラー訂正回路１０９は、プロセッサ１０３からのエラー訂正指令に基づいて、データフローＦ３によりＤＲＡＭ４に書き込まれたＲｅａｄデータを読み出して（データフローＦ４）、この読み出したＲｅａｄデータの第２の訂正符号のデコードを行ってエラー検出訂正を実行し、エラー検出訂正実行後のＲｅａｄデータを再度ＤＲＡＭ４に書き込む（データフローＦ５）。
【００２１】
続いて、プロセッサ１０３は、Ｒｅａｄデータを読み出してホスト装置に転送する第４の転送指令をＳＡＴＡコントローラ１０８に発行し、ＳＡＴＡコントローラ１０８は、第４の転送指令に基づいて、ＮＡＮＤ用エラー訂正回路１０９によるエラー訂正が実行され、ＤＲＡＭ４に書き込まれたＲｅａｄデータを読み出してホスト装置に転送する（データフローＦ６）。
【００２２】
第３の転送を実行する過程でＮＡＮＤコントローラ１１０がエラー検出訂正に成功したとき、ＮＡＮＤ用エラー訂正回路１０９によるエラー訂正は実行されず、ＳＡＴＡコントローラ１０８は、第４の転送指令に基づいて、データフローＦ３によりＤＲＡＭ４に書き込まれたＲｅａｄデータを読み出してホスト装置に転送する（データフローＦ６）。
【００２３】
プロセッサ１０３が発行する第１〜第４の転送指令およびエラー訂正指令には、ＤＲＡＭ４におけるアクセス先のアドレスが指定されており、アクセス元の構成要素（ＳＡＴＡコントローラ１０８、ＮＡＮＤ用エラー訂正回路１０９、ＮＡＮＤコントローラ１１０）は、各指令に指定されているアクセス先のアドレスに対してデータの書き込み／読み出しを行う。
【００２４】
ＤＲＡＭコントローラ１０７は、データフローＦ１、Ｆ３、およびＦ５においてＤＲＡＭ４にデータが書き込まれる際、書き込まれるデータに対してパリティ計算を行い、データフローＦ２、Ｆ４、およびＦ６においてＤＲＡＭ４からデータが読み出された際、読み出されたデータに対してパリティ計算を行い、データの書き込み時および読み出し時のパリティの演算結果を比較することによって、ＤＲＡＭ４へのデータの書き込みと、この書き込まれたデータの読み出しの一連の動作の前後で発生するエラー（パリティエラー）を検出する。
【００２５】
ＤＲＡＭコントローラ１０７は、エラーを検出した場合、ＤＲＡＭコントローラ１０７は、エラーを検出した旨であるエラー検出通知をプロセッサ１０３に通知する。エラー検出通知を受信したプロセッサ１０３は、どのデータにエラーが検出されたかを求め、プロセッサ１０３は、データフローＦ２によりＤＲＡＭ４から読み出されたＷｒｉｔｅデータにエラーが検出された場合、ＳＡＴＡコントローラ１０８にＷｒｉｔｅデータの再送を要求し、データフローＦ６によりＤＲＡＭ４から読み出されたＲｅａｄデータにエラーが検出された場合、ＮＡＮＤコントローラ１１０にＲｅａｄデータの再送を要求する。プロセッサ１０３は、データフローＦ４によりＤＲＡＭ４から読み出されたＲｅａｄデータにエラーが検出された場合、ＮＡＮＤコントローラ１１０にＲｅａｄデータの再送を要求するようにしてもよいし、前記データの再送を要求せず、エラーが検出されたデータをＮＡＮＤ用エラー訂正回路１０９で訂正させるようにしてもよい。
【００２６】
さらに、ＤＲＡＭコントローラ１０７は、ＤＲＡＭ４の記憶領域を複数に分割した分割領域毎に検出したパリティエラーの累積回数をカウントし、カウント値が所定の回数を越える分割領域があったとき、前記分割領域を使用停止する使用停止通知をプロセッサ１０３に通知する。プロセッサ１０３は、前記使用停止通知を受信すると、第１および第３の転送指令において、使用停止通知された領域を書き込み先として指定しないようにする。つまり、エラーが頻発する分割領域は、カウント値が所定の回数を越え、使用不可状態となる。
【００２７】
図４は、ＤＲＡＭコントローラ１０７の機能構成を説明する図である。図示するように、ＤＲＡＭコントローラ１０７は、パリティ保存用ＳＲＡＭ１１、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２、ＤＲＡＭアクセス回路部１３、パリティ演算／比較部１４、エラー検出回数記録部１５、およびＤＲＡＭ／ＳＲＡＭ割り当て部１６を備える。
【００２８】
パリティ保存用ＳＲＡＭ１１は、所定のサイズのデータ毎に算出されるパリティ演算結果を一時記憶する一時記憶手段としての揮発性メモリである。以降、パリティ演算の実行単位のサイズをパリティ演算単位という。
【００２９】
ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２は、ＤＲＡＭ４に書き込まれているデータのアドレスとデータに関するパリティ演算結果が保存されているパリティ保存用ＳＲＡＭ１１におけるアドレスとの対応をパリティ演算単位毎に管理するテーブルである。
【００３０】
図５は、パリティ演算結果の管理方法の一例を説明する図である。図示するように、３２ＭＢｙｔｅの容量を有するＤＲＡＭ４は、夫々エラー記録単位（ここでは５１２Ｂｙｔｅ）の容量を持つ６４個の分割領域に分割されている。以降、分割領域のことを単にエリア（Ａｒｅａ）と表現し、ＤＲＡＭ４の先頭からｘ番目に位置するエリアをＡｒｅａｘと表現することとする。各エリアはパリティ演算単位（ここでは６４Ｂｙｔｅ）のデータを８個分記憶することができる。パリティ保存用ＳＲＡＭ１１は、６４Ｂｙｔｅ毎のデータのパリティ演算結果を保存している。ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２は、ＤＲＡＭ４が記憶しているパリティ演算単位毎のデータのアドレスとパリティ保存用ＳＲＡＭ１１が保存している前記データのパリティ演算結果のアドレスとを対応付けている。各パリティ演算結果のサイズは１ｂｉｔであるので、図示するように、合計３２ＭＢｙｔｅのデータを格納可能な容量を有するＤＲＡＭ４に対応してパリティ保存用ＳＲＡＭ１１の容量は５１２Ｂｙｔｅとなっている。
【００３１】
図４に戻り、ＤＲＡＭアクセス回路部１３は、アクセス元（ＳＡＴＡコントローラ１０８、ＮＡＮＤ用エラー訂正回路１０９、ＮＡＮＤコントローラ１１０）から受信したデータをＤＲＡＭ４に書き込む動作と、ＤＲＡＭ４からデータを読み出してアクセス元に送出する動作とを実行する。
【００３２】
パリティ演算／比較部１４は、エリア毎にエリアに対するデータの入出力の際のパリティエラーを求め、このパリティエラーの累積回数をカウントするエラーカウント手段として機能する。
【００３３】
すなわち、パリティ演算／比較部１４は、ＤＲＡＭアクセス回路部１３がデータをパリティ演算単位のデータをアクセス先から受信する毎にこの受信したＤＲＡＭ４に書き込まれる前のパリティ演算単位のデータに対してパリティを計算し、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２を参照して前記受信したパリティ演算単位のデータの書き込み先のＤＲＡＭ４のアドレスに対応するパリティ演算結果を格納するパリティ保存用ＳＲＡＭ１１のアドレスを求め、この求めたパリティ保存用ＳＲＡＭ１１のアドレスに前記データのパリティ演算結果を格納する。また、パリティ演算／比較部１４は、ＤＲＡＭアクセス回路部１３がＤＲＡＭ４からパリティ演算単位のデータを読み出す毎にこの読み出したパリティ演算単位のデータに対してパリティ演算を実行し、前記読み出したパリティ演算単位のデータが書き込まれていたＤＲＡＭ４上のアドレスに対応するパリティ演算結果が格納されているパリティ保存用ＳＲＡＭ１１上のアドレスをＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２を参照して求め、この求めたアドレスから前記データの書き込み時のパリティ演算結果を読み出して前記データを読み出したときに求めたパリティ演算結果と比較し、双方のパリティ演算結果が異なる場合、エラー検出通知をエラー検出回数記録部１５およびプロセッサ１０３に通知する。
【００３４】
エラー検出回数記録部１５は、パリティ演算／比較部１４から受信するエラー検出通知をエリア毎にカウントし、エラー検出通知のカウント値を記録する。
【００３５】
ＤＲＡＭ／ＳＲＡＭ割り当て部１６およびプロセッサ１０３は、カウント値が所定の回数を越えるエリアを使用不可状態とする手段として機能する。すなわち、ＤＲＡＭ／ＳＲＡＭ割り当て部１６は、エラー検出回数記録部１５が記録しているエラー検出のカウント値がプロセッサ１０３（ファームウェア）などにより設定される所定の回数を超えるエリアがあった場合、このエリアを使用停止する旨の使用停止通知をプロセッサ１０３に発行する。プロセッサ１０３は、使用停止通知を受信すると、このエリアを使用不可状態とする。
【００３６】
次に、ＤＲＡＭコントローラ１０７の動作を説明する。図６は、アクセス元がＤＲＡＭ４にデータを書き込む際のＤＲＡＭコントローラ１０７の動作を説明するフローチャートである。
【００３７】
図６において、まず、アクセス元が書き込み先のアドレスとデータを書き込むための要求信号と前記データとをＤＲＡＭコントローラ１０７へ送信する。例えば、アクセス元がＡｒｅａ０を書き込み先として５１２Ｂｙｔｅのデータを送信したとする。
【００３８】
ＤＲＡＭアクセス回路部１３がデータを受信し、Ａｒｅａ０に前記データを書き込む。この時、パリティ演算／比較部１４は、ＤＲＡＭアクセス回路部１３がデータを６４Ｂｙｔｅ受信する毎に受信した６４Ｂｙｔｅのデータに対してパリティを計算する（ステップＳ１）。そして、パリティ演算／比較部１４は、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２に基づいてパリティ演算結果をパリティ保存用ＳＲＡＭ１１に保存する（ステップＳ２）。
【００３９】
そして、パリティ演算／比較部１４は、アクセス元からのデータ受信が終了したか否かを判定し（ステップＳ３）、終了していない場合（ステップＳ３、Ｎｏ）、ステップＳ１に移行し、終了した場合（ステップＳ３、Ｙｅｓ）、すなわちアクセス元から書き込みを要求された５１２Ｂｙｔｅのデータを全て受信した場合、動作を終了する。これらの動作により、Ａｒｅａ０に格納されたデータから８個のパリティ演算結果が算出され、夫々パリティ保存用ＳＲＡＭ１５に保存される。
【００４０】
図７は、アクセス元がＤＲＡＭ４からデータを読み出す際のＤＲＡＭコントローラ１０７の動作を説明するフローチャートである。まず、アクセス元が読み出し先のアドレスとデータを読み出すための要求信号とをＤＲＡＭコントローラ１０７へ送信する。例えば、アクセス元がＡｒｅａ０を読み出し先として５１２Ｂｙｔｅのデータを読み出そうとしたとする。
【００４１】
ＤＲＡＭアクセス回路部１３は、Ａｒｅａ０からデータを読み出し、読み出したデータをアクセス元に送信するが、パリティ演算／比較部１４は、ＤＲＡＭアクセス回路部１３が前記データを６４Ｂｙｔｅ読み出す毎に読み出した６４Ｂｙｔｅのデータに対してパリティを計算する（ステップＳ１１）。そして、パリティ演算／比較部１４は、ステップＳ２においてパリティ保存用ＳＲＡＭ１５に保存されている前記データのパリティ演算結果を読み出し（ステップＳ１２）、前記読み出したパリティ演算結果とステップＳ１１において算出したパリティ演算結果とを比較し、双方のパリティ演算結果が一致しているか否かを判定する（ステップＳ１３）。一致している場合（ステップＳ１３、Ｙｅｓ）、パリティ演算／比較部１４は、エラーは検出されなかったと判断し、アクセス元へ送信するデータの読み出しが完了したか否かをさらに判定する（ステップＳ１４）。データの読み出しが完了した場合（ステップＳ１４、Ｙｅｓ）、動作を終了し、完了していない場合（ステップＳ１４、Ｎｏ）、ステップＳ１１へ移行する。
【００４２】
ステップＳ１３において、双方のパリティ演算結果が一致しなかった場合（ステップＳ１３、Ｎｏ）、パリティ演算／比較部１４は、エラーが検出されたと判断し、エラー検出通知をプロセッサ１０３およびエラー検出回数記録部１５に通知する（ステップＳ１５）。エラー検出回数記録部１５は、Ａｒｅａ０のエラー検出回数を記録するカウント値をインクリメントし（ステップＳ１６）、ステップＳ１４に移行する。
【００４３】
図８は、ＤＲＡＭ／ＳＲＡＭ割り当て部１６が使用停止通知をプロセッサ１０３に通知する動作を説明するフローチャートである。図８に示すように、ＤＲＡＭ／ＳＲＡＭ割り当て部１６は、エリア毎にエラー検出回数のカウント値を監視し、エリア毎にカウント値が所定の回数を越えたか否かを判定する（ステップＳ２１）。カウント値が所定の回数を越えたエリアが無い場合（ステップＳ２１、Ｎｏ）、カウント値の監視を続行し、カウント値が所定の回数を越えるまで無限ループを実行する。そして、カウント値が所定の回数を超えたエリアがあったとき（ステップＳ２１、Ｙｅｓ）、無限ループを抜け出してカウント値が所定の回数を越えたエリアの使用を停止する旨の使用停止通知をプロセッサ１０３に通知する（ステップＳ２２）。
【００４４】
以上の説明においては、エリア毎にエラーを検出した回数をカウントし、カウント値が所定の回数を越えたとき、カウント値が所定の回数を越えたエリアを使用停止する使用停止通知を発行するようにしたが、エリア毎のカウント値を定期的にリセットすることによって、実質的にエラー検出頻度を記録し、エラー検出頻度がファームウェアなどにより定められる基準を越えたエリアを使用停止とする使用停止通知を発行するようにしてもよい。
【００４５】
また、ＤＲＡＭコントローラ１０７の各機能構成要素をＤＲＡＭコントローラ１０７内で実現する必要はなく、機能構成要素の一部または全部をプロセッサ１０３などＳＳＤ１の他の構成要素において実現するようにしてもよい。また、パリティを保存する領域として、パリティ保存用ＳＲＡＭ１１を用いたが、他のメモリにパリティを保存するようにしてもよい。
【００４６】
また、ＤＲＡＭコントローラ１０７は、プロセッサ１０３に使用停止通知を通知し、プロセッサ１０３は通知されたエリアを書き込み先として指定しないようにすることによって前記エリアを使用不可状態とする、として説明したが、ＤＲＡＭコントローラ１０７は、プロセッサ１０３に使用停止通知を通知せず、エラー検出回数が所定の回数を越えたエリアを書き込み先とするアクセスを受けたとき、前記書き込み先を内部で変換して別のエリアに切り替えることによって、前記エラー検出回数が所定の回数を越えたエリアを実質的に使用不可状態とするようにしてもよい。
【００４７】
また、ＤＲＡＭ４はデータ転送のためのバッファ領域として使用されるとして説明したが、キャッシュ領域として使用されるようにしてもよい。
【００４８】
以上述べたように、第１の実施の形態によれば、ＳＳＤコントローラ２は、ＤＲＡＭ４の記憶領域を複数に分割したエリア毎に、各エリアに対するデータの入出力の際のパリティエラーを求め、パリティエラーの累積回数をカウントし、パリティエラーの累積回数が所定の回数を越えるエリアを使用不可状態とするように構成したので、ＤＲＡＭアクセス時にエラーが発生する頻度を可及的に低減したメモリシステムを得ることができる。
【００４９】
（第２の実施の形態）
第１の実施の形態によると、例えば設計者などがＤＲＡＭ４の容量を変更した場合、前記変更に合わせてパリティ保存用ＳＲＡＭの容量変更を含めたハードウェア設計変更を余儀なくされる。そこで、本発明の第２の実施の形態によれば、パリティ演算単位を可変にすることにより、パリティ保存用ＳＲＡＭを変更することなくＤＲＡＭ４の容量の変更に対応できるようにした。図９は、第２の実施の形態のＤＲＡＭコントローラの機能構成を説明する図である。なお、以下の説明においては、第１の実施の形態と同一の機能を有する構成要素には第１の実施の形態と同一の符号を付し、詳細な説明は省略する。
【００５０】
図示するように第２の実施の形態のＤＲＡＭコントローラ１０７ａは、パリティ演算／比較部１４と、エラー検出回数記録部１５と、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１３と、パリティ保存用ＳＲＡＭ１１と、ＤＲＡＭアクセス回路部１３と、ＤＲＡＭ／ＳＲＡＭ割り当て部２６と、を備えている。
【００５１】
ＤＲＡＭ／ＳＲＡＭ割り当て部２６は、プロセッサ１０３（ファームウェア）からの入力に基づいてパリティ演算単位を変更する。具体的には、ＤＲＡＭ／ＳＲＡＭ割り当て部２６は、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１３のＤＲＡＭ４におけるデータを格納するアドレスとパリティ演算結果を格納するアドレスとの対応付けを変更することによってパリティ演算単位を変更する。
【００５２】
図１０は、ＤＲＡＭ４の容量を５１２Ｍｂｉｔから１Ｇｂｉｔに変更する場合について説明する図である。図示するように、ＤＲＡＭ４の容量の変更前の設計によれば、パリティ演算単位が６４Ｂｙｔｅとなっており、ＤＲＡＭ４の容量とパリティ演算単位に対応してパリティ保存用ＳＲＡＭ１１が１２８Ｂｙｔｅの容量を有する設計となっていたとする。設計者がＤＲＡＭ４の容量を変更前の倍の容量である１Ｇｂｉｔに変更したとき、従来であればパリティ保存用ＳＲＡＭ１１も倍の容量である２５６Ｂｙｔｅに変更する必要がある。本実施の形態によれば、ファームウェアからパリティ演算単位を変更前の倍の１２８Ｂｙｔｅに変更することによって、必要なパリティ保存用ＳＲＡＭ１１の容量を変更する必要を免れることができる。パリティ演算単位を大きくすると、エラー検出の精度は低下するというデメリットがあるものの、ＤＲＡＭ４の容量変更に伴ってパリティ保存用ＳＲＡＭ１１の容量を変更する必要を免れることができるため、ＤＲＡＭ４の容量変更を行うために新たにハードウェアを設計するコストと時間を削減することができる。
【００５３】
以上のように、第２の実施の形態によれば、パリティ演算単位を変更可能に構成したので、パリティ保存用の記憶領域の容量を変更することなくＤＲＡＭ４の容量を変更することができるようになる。
【００５４】
（第３の実施の形態）
次に、本発明の第３の実施の形態について説明する。第３の実施の形態のＳＳＤは、あるエリアを使用不可状態とした場合、前記エリアのパリティ演算結果を保存していたパリティ保存用ＳＲＡＭ１１における保存領域を他のエリアに割り当てることができるようにした。図１１は、第３の実施の形態のＤＲＡＭコントローラの機能構成を説明する図である。
【００５５】
図１１に示すように、第３の実施の形態のＤＲＡＭコントローラ１０７ｂは、パリティ保存用ＳＲＡＭ１１、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２、ＤＲＡＭアクセス回路部１３、パリティ演算／比較部１４、エラー検出回数記録部１５、およびＤＲＡＭ／ＳＲＡＭ割り当て部３６を備えている。
【００５６】
ＤＲＡＭ／ＳＲＡＭ割り当て部３６は、ＤＲＡＭ４におけるあるエリアを使用停止させた場合、前記エリアが割り当てられていたパリティ保存用ＳＲＡＭ１１の保存領域を使用停止されていない別のエリアのパリティ演算結果を保存する領域に割り当てる。このとき、ＤＲＡＭ／ＳＲＡＭ割り当て部３６は、新しく割り当てたエリアのパリティ演算単位をより小さくなるように変更する。ＤＲＡＭ／ＳＲＡＭ割り当て部３６は、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２を修正し、エリアの割り当ておよびパリティ演算単位の変更を反映させる。
【００５７】
図１２は、ＤＲＡＭコントローラ１０７ｂの動作を一例を概略的に説明する図である。図１２において、ＤＲＡＭ／ＳＲＡＭ割り当て部３６は、Ａｒｅａ０におけるエラー検出回数が所定の回数を超え、Ａｒｅａ１を使用停止させた場合、Ａｒｅａ０に割り当てられていたパリティ保存用ＳＲＡＭ１２の８ｂｉｔ分の領域をＡｒｅａ２に割り当てる。結果として、Ａｒｅａ２に割り当てられているパリティ演算結果を保存する領域は８ｂｉｔから１６ｂｉｔに増加するので、ＤＲＡＭ／ＳＲＡＭ割り当て部３６は、Ａｒｅａ２のパリティ演算単位を６４Ｂｙｔｅから、より細かい３２Ｂｙｔｅに変更する。Ａｒｅａ２のパリティ演算単位は、より細かく設定されるので、Ａｒｅａ２に書き込まれるデータのエラー検出精度は変更前に比して向上する。
【００５８】
このように、第３の実施の形態によれば、使用不可状態としたエリアのデータのパリティを保存していたパリティ保存用ＳＲＡＭ１１の領域を他のエリアのデータのパリティを保存する領域に割り当てると共に、前記他のエリアのデータのパリティ演算単位をより細かくするように構成したので、パリティ保存用ＳＲＡＭ１１を効率的に使用することができるようになる。
【００５９】
（第４の実施の形態）
次に、第４の実施の形態について説明する。第４の実施の形態によれば、パリティ演算結果を古いものから削除することで、パリティ保存用ＳＲＡＭ１１の容量を節約する。図１３は、第４の実施の形態のＤＲＡＭコントローラの構成を説明する図である。
【００６０】
図１３において、第４の実施の形態のＤＲＡＭコントローラ１０７ｃは、パリティ保存用ＳＲＡＭ１１と、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２と、ＤＲＡＭアクセス回路部１３と、パリティ演算／比較部１４と、エラー検出回数記録部１５と、ＤＲＡＭ／ＳＲＡＭ割り当て部４６と、パリティ生成時刻記録部４７と、を備えている。
【００６１】
パリティ生成時刻記録部４７は、パリティ保存用ＳＲＡＭ１１にパリティ演算結果が保存された時刻を記録する。
【００６２】
ＤＲＡＭ／ＳＲＡＭ割り当て部４６は、パリティ保存時刻記録部４７により記録されているパリティ保存時刻を参照し、保存されてから経過した時間がファームウェアなどにより設定される有効期限を超過したパリティ演算結果を削除する。さらに、ＤＲＡＭ／ＳＲＡＭ割り当て部４６は、前記削除されたパリティ演算結果が保存されていた領域を別のデータのパリティ演算結果を保存する領域として新しく割り当てる。ＤＲＡＭ／ＳＲＡＭ割り当て部４６は、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２を修正することによって、新しい割り当てを反映させる。
【００６３】
図１４は、第４の実施の形態のＤＲＡＭコントローラ１０７ｃの動作の一例を概略的に説明する図である。図１４の例では、エリア毎にパリティ保存時刻が記録され、パリティ演算結果の削除および前記削除された領域の割り当てはエリア単位で行われることとしている。ＤＲＡＭ４は、Ａｒｅａ０〜Ａｒｅａ６３の合計６４個のエリアを持ち、パリティ保存用ＳＲＡＭ１１は８個のエリア分のパリティ演算結果を保存するサイズを有し、すでにＡｒｅａ０〜Ａｒｅａ７のパリティ演算結果を保存する領域が割り当てられているとする。Ａｒｅａ１のパリティ保存時刻からの経過時間が有効期限を超過した場合、ＤＲＡＭ／ＳＲＡＭ割り当て部４６は、Ａｒｅａ１のパリティ演算結果を消去し、前記消去したパリティ演算結果を保存していた領域を例えばＡｒｅａ６３のパリティ演算結果の保存領域として割り当てる。
【００６４】
以上のように、第４の実施の形態によれば、古いパリティ演算結果を削除するように構成したので、パリティ保存用ＳＲＡＭ１１に保存するパリティ演算結果の数を少なくすることができるので、パリティ保存用ＳＲＡＭの容量を削減できるようになる。
【００６５】
なお、以上の説明においては、パリティ演算結果が保存されてからの経過時間が有効期限を超過したパリティ演算結果を消去し、前記パリティ演算結果を消去した保存領域を別のデータのパリティ演算結果の保存領域として割り当てる、としたが、新たなパリティ演算結果を保存する必要が生じたとき、保存された時刻が最も古いパリティ演算結果を消去して、前記消去した領域を新たなパリティ演算結果を保存する領域として割り当てるようにしてもよい。また、保存された時刻ではなく、読み出された時刻が最も古いパリティ演算結果を削除するようにしてもよい。
【００６６】
（第５の実施の形態）
次に、本発明の第５の実施の形態について説明する。第５の実施の形態によれば、パリティ保存用ＳＲＡＭは、パリティ演算結果を圧縮して保存する。図１５は、第５の実施の形態のＤＲＡＭコントローラの構成を説明する図である。
【００６７】
図１５に示すように、第５の実施の形態のＤＲＡＭコントローラ１０７ｄは、パリティ保存用ＳＲＡＭ１１と、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２と、ＤＲＡＭアクセス回路部１３と、パリティ演算／比較部１４と、エラー検出回数記録部１５と、ＤＲＡＭ／ＳＲＡＭ割り当て部１６と、パリティ圧縮／展開部５７と、を備えている。
【００６８】
パリティ圧縮／展開部５７は、パリティ演算／比較部１４が算出したパリティ演算結果を複数まとめ、例えばハフマン符号などの可逆符号で圧縮を行ってパリティ保存用ＳＲＡＭ１１に保存する。また、パリティ圧縮／展開部５７は、圧縮されてパリティ保存用ＳＲＡＭ１１に保存されているパリティ演算結果を読み出して、前記読み出したパリティ演算結果を展開し、パリティ演算／比較部１４に受け渡す。
【００６９】
図１６は、ＤＲＡＭコントローラ１０７ｄの動作を概略的に説明する図である。図１６の例においては、パリティ演算単位が６４Ｂｙｔｅ、エラー記録単位が５１２Ｂｙｔｅに設定され、パリティ圧縮／展開部５７は、エラー記録単位分すなわち８つのパリティ演算結果を圧縮してパリティ保存用ＳＲＡＭ１１に保存する。また、パリティ圧縮／展開部５７は、圧縮されている８つのパリティ演算結果を読み出して展開して、前記展開した８つのパリティ演算結果をパリティ演算／比較部１４に受け渡す。
【００７０】
以上説明したように、第５の実施の形態によれば、ＤＲＡＭ４に格納されるデータのパリティ演算結果を圧縮して保存するようにしたので、パリティ保存用ＳＲＡＭ１１の容量を節約することができるようになる。
【００７１】
（第６の実施の形態）
第１〜第５の実施の形態のＳＳＤによれば、ＤＲＡＭに書き込まれているデータを１ｂｉｔ書き換える場合であっても、パリティ演算単位分のデータを読み出して前記読み出したパリティ演算単位分のデータに対して再度パリティ演算を実行する必要があった。これに対して、第６の実施の形態のＳＳＤは、ＤＲＡＭに書き込まれているデータをパリティ演算単位以下のサイズ分だけ書き換えられる場合、書き換え部分の変化に基づいてパリティ保存用ＳＲＡＭに保存されているパリティ演算結果を変更する。
【００７２】
図１７は、第６の実施の形態のＳＲＡＭコントローラの機能構成を説明するブロック図である。図示するように第６の実施の形態のＤＲＡＭコントローラ１０７ｅは、パリティ保存用ＳＲＡＭ１１と、ＤＲＡＭ／ＳＲＡＭ割り当てテーブル１２と、ＤＲＡＭアクセス回路部１３と、パリティ演算／比較部６４と、エラー検出回数記録部１５と、ＤＲＡＭ／ＳＲＡＭ割り当て部１６と、を備えている。
【００７３】
パリティ演算／比較部６４の動作を、図１８を参照して説明する。図１８においては、パリティ演算単位が６４Ｂｙｔｅ、ＤＲＡＭ４へのアクセス単位が１Ｂｙｔｅに設定されているとしている。まず、アクセス元から、パリティ演算単位のサイズを持つデータ１の先頭から２Ｂｙｔｅ目の部分に１ｂｉｔ書き換える要求があったとき、パリティ演算／比較部６４は、１ｂｉｔ書き換える部分を含む１Ｂｙｔｅのデータを読み出す（図中（１））。そして、パリティ演算／比較部６４は、データ１のパリティ演算結果をパリティ保存用ＳＲＡＭ１１から読み出す（図中（２））。
【００７４】
続いて、パリティ演算／比較部６４は、読み出した１ｂｉｔ書き換える部分を含む１Ｂｙｔｅのデータに対して、アクセス元から１ｂｉｔ書き換える要求を反映させ、新たに１Ｂｙｔｅのデータを生成する（図中（３））。そして、パリティ演算／比較部６４は、読み出したパリティ演算結果と、書き換え要求された内容のビット数から、パリティを再演算する（図中（４））。パリティ演算／比較部６４は、書き換え部分のサイズが奇数ｂｉｔである場合、パリティを反転させ、書き換え部分のサイズが偶数ｂｉｔである場合、パリティを反転させない。ここでは、変更内容が１ｂｉｔだけであるので、読み出したパリティ演算結果を反転させる。最後に、パリティ演算／比較部６４は、書き換えた１ＢｙｔｅのデータでもってＤＲＡＭ４に記憶されているデータ１の先頭から２Ｂｙｔｅ目の部分を上書きするとともに、データ１のパリティ演算結果を再演算して得られた値で上書きする（図中（５））。
【００７５】
以上説明したように、第６の実施の形態によれば、パリティ演算／比較部６４が、ＤＲＡＭ４に記憶されているパリティ演算単位のデータに対して前記データのパリティ演算単位よりも小さいサイズの一部の書き換えが行われたとき、前記一部のデータの書き換え前後の変化に基づいてパリティ保存用ＳＲＡＭ１１に保存されているパリティ演算結果を書き換えるようにしたので、パリティ演算単位よりも小さいサイズの一部のデータを書き換えるためにパリティ演算単位のデータを読み出してパリティを再演算する必要を免れることができるので、高速にパリティ演算結果を得ることができるようになる。
【図面の簡単な説明】
【００７６】
【図１】ＳＳＤの構成を説明する図。
【図２】データフローを説明する図。
【図３】データフローを説明する図。
【図４】第１の実施の形態のＤＲＡＭコントローラの機能構成を説明する図。
【図５】パリティ演算結果の管理方法を説明する図。
【図６】第１の実施の形態のＤＲＡＭコントローラの動作を説明するフローチャート。
【図７】第１の実施の形態のＤＲＡＭコントローラの動作を説明するフローチャート。
【図８】第１の実施の形態のＤＲＡＭコントローラの動作を説明するフローチャート。
【図９】第２の実施の形態のＤＲＡＭコントローラの機能構成を説明する図。
【図１０】ＤＲＡＭの容量を変更する場合について説明する図。
【図１１】第３の実施の形態のＤＲＡＭコントローラの機能構成を説明する図。
【図１２】第３の実施の形態の動作の概略を説明する図。
【図１３】第４の実施の形態のＤＲＡＭコントローラの機能構成を説明する図。
【図１４】第４の実施の形態の動作の概略を説明する図。
【図１５】第５の実施の形態のＤＲＡＭコントローラの機能構成を説明する図。
【図１６】第５の実施の形態の動作の概略を説明する図。
【図１７】第６の実施の形態のＤＲＡＭコントローラの機能構成を説明する図。
【図１８】第６の実施の形態のパリティ演算／比較部の動作を説明する図。
【符号の説明】
【００７７】
１  ＳＳＤ、２  ＮＡＮＤメモリ、３  ＳＳＤコントローラ、４  ＤＲＡＭ、１１  パリティ保存用ＳＲＡＭ、１２  ＤＲＡＭ／ＳＲＡＭ割り当てテーブル、１３  ＤＲＡＭアクセス回路、１４、６４  パリティ演算／比較部、１５  エラー検出回数記録部、１６、２６、３６、４６  ＤＲＡＭ／ＳＲＡＭ割り当て部、４７  パリティ生成時刻記録部、５７  パリティ圧縮／展開部、１０３  プロセッサ、１０７、１０７ａ〜ｅ  ＤＲＡＭコントローラ。
【図１】
2010152542.tif 000003
【図２】
2010152542.tif 000004
【図３】
2010152542.tif 000005
【図４】
2010152542.tif 000006
【図５】
2010152542.tif 000007
【図６】
2010152542.tif 000008
【図７】
2010152542.tif 000009
【図８】
2010152542.tif 000010
【図９】
2010152542.tif 000011
【図１０】
2010152542.tif 000012
【図１１】
2010152542.tif 000013
【図１２】
2010152542.tif 000014
【図１３】
2010152542.tif 000015
【図１４】
2010152542.tif 000016
【図１５】
2010152542.tif 000017
【図１６】
2010152542.tif 000018
【図１７】
2010152542.tif 000019
【図１８】
2010152542.tif 000020