(57)【要約】【課題】復号化回路を備えたメモリコントローラにおいて、シンドロームを算出する処理から誤り位置多項式を導出する処理への処理の引継ぎの円滑化と、誤り位置多項式を導出する処理の効率化を図る。【解決手段】データ保持回路内の領域、シンドローム保持回路内の領域及び係数保持回路内の領域は、相互に対応関係が定められており、データ保持回路内の第１の領域に保持されたデータに基づいて算出されたシンドロームは、当該第１の領域に対応するシンドローム保持回路内の領域である第２の領域に保持され、当該第２の領域に保持されたシンドロームに基づいて算出された係数は、当該第２の領域に対応する係数保持回路内の領域である第３の領域に保持され、当該第３の領域に保持された係数に基づいて、当該第１の領域に保持されたデータのビットエラーが訂正される。【選択図】図３
2012038226.tif 000002
【特許請求の範囲】
【請求項１】
複数個のフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
フラッシュメモリに書き込むデータを、当該データに生じるｎ（ｎは２以上の整数）ビット以下のビットエラーを訂正するための誤り訂正符号に符号化する符号化回路と、
前記符号化回路により符号化されたデータを、複数個のフラッシュメモリにそれぞれ接続された複数個のチャンネルを有するデータバスを介して、複数個のフラッシュメモリに書き込む書き込み制御回路と、
前記書き込み制御回路により複数個のフラッシュメモリに書き込まれたデータを、前記データバスを介して、複数個のフラッシュメモリから読み出す読み出し制御回路と、
前記読み出し制御回路により複数個のフラッシュメモリから読み出されたデータを保持するデータ保持回路と、
前記読み出し制御回路により複数個のフラッシュメモリから読み出されたデータに基づいて、シンドロームを算出するシンドローム算出回路と、
前記シンドローム算出回路により算出されたシンドロームを保持するシンドローム保持回路と、
前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、１次からｍ（ｍは１以上ｎ未満の整数）次までのいずれかの次数の誤り位置多項式の係数を、行列式の値を求める計算処理により求める第１の係数算出回路と、
（ｍ＋１）ビットからｎビットまでのビットエラーが発生したときに、前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、ビットエラーのビット数に応じた次数の誤り位置多項式の係数を、逐次計算処理により求める第２の係数算出回路と、
前記第１の係数算出回路又は前記第２の係数算出回路により求められた誤り位置多項式の係数を保持する係数保持回路と、
前記係数保持回路に保持されている係数を読み込み、当該係数に基づいて前記データ保持回路に保持されているデータのビットエラーを訂正する訂正回路を備え、
前記データ保持回路内の領域、前記シンドローム保持回路内の領域及び前記係数保持回路内の領域は、相互に対応関係が定められており、前記データ保持回路内の第１の領域に保持されたデータに基づいて算出されたシンドロームは、当該第１の領域に対応する前記シンドローム保持回路内の領域である第２の領域に保持され、当該第２の領域に保持されたシンドロームに基づいて算出された係数は、当該第２の領域に対応する前記係数保持回路内の領域である第３の領域に保持され、当該第３の領域に保持された係数に基づいて、当該第１の領域に保持されたデータのビットエラーが訂正されることを特徴とするメモリコントローラ。
【請求項２】
前記第１の係数算出回路は、ｉ（ｉは１以上ｍ以下の整数）次の誤り位置多項式の係数を、ｉ行ｉ列の行列に基づいて求めることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
（ｍ＋１）ビット以上のビットエラーが発生したことを検出する検出回路を更に備え、
前記検出回路は、（ｍ＋１）次の誤り位置多項式の係数を求める（ｍ＋１）行（ｍ＋１）列の行列の行列式の値に基づいて、（ｍ＋１）ビット以上のビットエラーが発生したことを検出し、
前記第２の係数算出回路は、前記検出回路が（ｍ＋１）ビット以上のビットエラーが発生したことを検出した後に当該ビットエラーが発生したデータに対応する位置多項式の係数を求める逐次計算処理を開始することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
請求項１乃至３のいずれか１項に記載のメモリコントローラと、
このメモリコントローラにより制御される複数個のフラッシュメモリを備えるフラッシュメモリシステム。
【請求項５】
複数個のフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
フラッシュメモリに書き込むデータを、当該データに生じるｎ（ｎは２以上の整数）ビット以下のビットエラーを訂正するための誤り訂正符号に符号化する符号化ステップと、
前記符号化ステップにより符号化されたデータを、複数個のフラッシュメモリにそれぞれ接続された複数個のチャンネルを有するデータバスを介して、複数個のフラッシュメモリに書き込む書き込み制御ステップと、
前記書き込み制御ステップにより複数個のフラッシュメモリに書き込まれたデータを、前記データバスを介して、複数個のフラッシュメモリから読み出す読み出し制御ステップと、
前記読み出し制御ステップにより複数個のフラッシュメモリから読み出されたデータをデータ保持回路に保持するデータ保持ステップと、
前記読み出し制御ステップにより複数個のフラッシュメモリから読み出されたデータに基づいて、シンドロームを算出するシンドローム算出ステップと、
前記シンドローム算出ステップにより算出されたシンドロームをシンドローム保持回路に保持するシンドローム保持ステップと、
前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、１次からｍ（ｍは１以上ｎ未満の整数）次までのいずれかの次数の誤り位置多項式の係数を、行列式の値を求める計算処理により求める第１の係数算出ステップと、
（ｍ＋１）ビットからｎビットまでのビットエラーが発生したときに、前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、ビットエラーのビット数に応じた次数の誤り位置多項式の係数を、逐次計算処理により求める第２の係数算出ステップと、
前記第１の係数算出ステップ又は前記第２の係数算出ステップにより求められた誤り位置多項式の係数を係数保持回路に保持する係数保持ステップと、
前記係数保持回路に保持されている係数を読み込み、当該係数に基づいて前記データ保持回路に保持されているデータのビットエラーを訂正する訂正回路を備え、
前記データ保持回路内の領域、前記シンドローム保持回路内の領域及び前記係数保持回路内の領域は、相互に対応関係が定められており、前記データ保持回路内の第１の領域に保持されたデータに基づいて算出されたシンドロームは、当該第１の領域に対応する前記シンドローム保持回路内の領域である第２の領域に保持され、当該第２の領域に保持されたシンドロームに基づいて算出された係数は、当該第２の領域に対応する前記係数保持回路内の領域である第３の領域に保持され、当該第３の領域に保持された係数に基づいて、当該第１の領域に保持されたデータのビットエラーが訂正されることを特徴とするフラッシュメモリの制御方法。
【請求項６】
前記第１の係数算出ステップでは、ｉ（ｉは１以上ｍ以下の整数）次の誤り位置多項式の係数を、ｉ行ｉ列の行列に基づいて求めることを特徴とする請求項５に記載のフラッシュメモリの制御方法。
【請求項７】
（ｍ＋１）ビット以上のビットエラーが発生したことを検出する検出ステップを更に備え、
前記検出ステップでは、（ｍ＋１）次の誤り位置多項式の係数を求める（ｍ＋１）行（ｍ＋１）列の行列の行列式の値に基づいて、（ｍ＋１）ビット以上のビットエラーが発生したことを検出し、
前記第２の係数算出ステップは、前記検出ステップにより（ｍ＋１）ビット以上のビットエラーが発生したことが検出された後に当該ビットエラーが発生したデータに対応する位置多項式の係数を求める逐次計算処理を開始することを特徴とする請求項５又は６に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
フラッシュメモリを記憶媒体として用いた記憶装置は、特許文献２に開示されているように、複数個のフラッシュメモリに並行してアクセスできるように構成されることが多い。このような構成にすることにより、記憶装置全体としての書き込み速度を向上させることができる。
【０００３】
上記のように並行してアクセスされる複数個のフラッシュメモリは、それぞれが異なるチャンネルのデータバスに接続される。従って、並行してアクセスされるフラッシュメモリの個数分のチャンネルが必要になる。また、通常、フラッシュメモリに書き込まれるデータは、そのデータに生じるビットエラーを訂正するため誤り訂正符号に符号化される。そして、その符号化されたデータは、フラッシュメモリから読み出されたときに復号化される。この符号化及び復号化を行う回路は、チャンネル毎に備えることが好ましい。しかしながら、復号化を行う回路である復号化回路は回路規模が大きいため、チャンネル毎に復号化回路を設けた場合、フラッシュメモリへのアクセスを制御するコントローラの回路規模が著しく増加する。特許文献１では、この回路規模の増加を抑えるために、２並列の復号化回路において、一部の回路を共用している。そして、共用されない２個の独立回路と共用される１個の共用回路との接続を、選択回路により切替えている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１０２６９３号公報
【特許文献２】特開２０１０−８６１０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、チャンネル数が増加した場合、独立回路と共用回路の接続を切替える選択回路の構成が煩雑になる。又、複数の独立回路でビットエラーが検出された場合、それらの独立回路において、後続する処理が続行不能になることがある。
【０００６】
例えば、４つのチャンネルを介して、４個のフラッシュメモリに並行してアクセスする場合、それぞれのフラッシュメモリから読み出されたそれぞれのデータは、それぞれのチャンネルに割り当てられた独立回路に入力される。この際、各フラッシュメモリの読み出し時間の差異等により、独立回路の出力に出力データがセットされるまでの時間に差異が生じる。このようなときに、先に出力データがセットされた独立回路が優先して共用回路に接続されると、読み出されたそれぞれのデータをホストシステムに転送する順番と一致するような順番で、それらのデータに対する訂正処理が行われない場合がある。また、それぞれのデータをホストシステムに転送する順番と一致するよう順番で、それぞれの独立回路が共用回路に接続されるようにすると、その順番が後の独立回路は、その順番が先の独立回路でビットエラーが検出されない場合でも、その順番が先の独立回路の出力に出力データがセットされるまで、共用回路への接続を待たなければならない。
【０００７】
また、供用回路内部は、主に、誤り位置多項式を導出するための多項式導出回路とエラービットを特定するためのチェンサーチ回路で構成されている。多項式導出回路は、逐次計算処理により誤り位置多項式を導出するため、訂正能力の範囲内であれば、ビットエラーのビット数に関われず誤り位置多項式を導出することができる。しかしながら、この回路では、訂正能力が大きくなると、つまり、訂正可能なビットエラーのビット数が多くなると誤り位置多項式の導出に掛かる処理時間が非常に長くなってしまう問題もある。
【０００８】
そこで、本発明は、複数の独立回路から１つの共用回路への処理の引継ぎの円滑化と、誤り位置多項式を導出する処理の効率化が図られた復号化回路を備えたメモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の第１の側面に従う、メモリコントローラは、
複数個のフラッシュメモリに対するアクセスを制御するメモリコントローラであって、
フラッシュメモリに書き込むデータを、当該データに生じるｎ（ｎは２以上の整数）ビット以下のビットエラーを訂正するための誤り訂正符号に符号化する符号化回路と、
前記符号化回路により符号化されたデータを、複数個のフラッシュメモリにそれぞれ接続された複数個のチャンネルを有するデータバスを介して、複数個のフラッシュメモリに書き込む書き込み制御回路と、
前記書き込み制御回路により複数個のフラッシュメモリに書き込まれたデータを、前記データバスを介して、複数個のフラッシュメモリから読み出す読み出し制御回路と、
前記読み出し制御回路により複数個のフラッシュメモリから読み出されたデータを保持するデータ保持回路と、
前記読み出し制御回路により複数個のフラッシュメモリから読み出されたデータに基づいて、シンドロームを算出するシンドローム算出回路と、
前記シンドローム算出回路により算出されたシンドロームを保持するシンドローム保持回路と、
前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、１次からｍ（ｍは１以上ｎ未満の整数）次までのいずれかの次数の誤り位置多項式の係数を、行列式の値を求める計算処理により求める第１の係数算出回路と、
（ｍ＋１）ビットからｎビットまでのビットエラーが発生したときに、前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、ビットエラーのビット数に応じた次数の誤り位置多項式の係数を、逐次計算処理により求める第２の係数算出回路と、
前記第１の係数算出回路又は前記第２の係数算出回路により求められた誤り位置多項式の係数を保持する係数保持回路と、
前記係数保持回路に保持されている係数を読み込み、当該係数に基づいて前記データ保持回路に保持されているデータのビットエラーを訂正する訂正回路を備え、
前記データ保持回路内の領域、前記シンドローム保持回路内の領域及び前記係数保持回路内の領域は、相互に対応関係が定められており、前記データ保持回路内の第１の領域に保持されたデータに基づいて算出されたシンドロームは、当該第１の領域に対応する前記シンドローム保持回路内の領域である第２の領域に保持され、当該第２の領域に保持されたシンドロームに基づいて算出された係数は、当該第２の領域に対応する前記係数保持回路内の領域である第３の領域に保持され、当該第３の領域に保持された係数に基づいて、当該第１の領域に保持されたデータのビットエラーが訂正されることを特徴とする。
【００１０】
本発明の第１の側面に従う、メモリコントローラおいて、
前記第１の係数算出回路は、ｉ（ｉは１以上ｍ以下の整数）次の誤り位置多項式の係数を、ｉ行ｉ列の行列に基づいて求めるように構成されていてもよい。
【００１１】
本発明の第１の側面に従う、メモリコントローラおいて、
（ｍ＋１）ビット以上のビットエラーが発生したことを検出する検出回路を更に備え、
前記検出回路は、（ｍ＋１）次の誤り位置多項式の係数を求める（ｍ＋１）行（ｍ＋１）列の行列の行列式の値に基づいて、（ｍ＋１）ビット以上のビットエラーが発生したことを検出し、
前記第２の係数算出回路は、前記検出回路が（ｍ＋１）ビット以上のビットエラーが発生したことを検出した後に当該ビットエラーが発生したデータに対応する位置多項式の係数を求める逐次計算処理を開始するように構成されていてもよい。
【００１２】
本発明の第２の側面に従う、フラッシュメモリシステムは、
前記第１の側面に従うメモリコントローラと、
このメモリコントローラにより制御される複数個のフラッシュメモリを備える。
【００１３】
本発明の第３の側面に従う、フラッシュメモリの制御方法は、
複数個のフラッシュメモリに対するアクセスを制御するフラッシュメモリの制御方法であって、
フラッシュメモリに書き込むデータを、当該データに生じるｎ（ｎは２以上の整数）ビット以下のビットエラーを訂正するための誤り訂正符号に符号化する符号化ステップと、
前記符号化ステップにより符号化されたデータを、複数個のフラッシュメモリにそれぞれ接続された複数個のチャンネルを有するデータバスを介して、複数個のフラッシュメモリに書き込む書き込み制御ステップと、
前記書き込み制御ステップにより複数個のフラッシュメモリに書き込まれたデータを、前記データバスを介して、複数個のフラッシュメモリから読み出す読み出し制御ステップと、
前記読み出し制御ステップにより複数個のフラッシュメモリから読み出されたデータをデータ保持回路に保持するデータ保持ステップと、
前記読み出し制御ステップにより複数個のフラッシュメモリから読み出されたデータに基づいて、シンドロームを算出するシンドローム算出ステップと、
前記シンドローム算出ステップにより算出されたシンドロームをシンドローム保持回路に保持するシンドローム保持ステップと、
前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、１次からｍ（ｍは１以上ｎ未満の整数）次までのいずれかの次数の誤り位置多項式の係数を、行列式の値を求める計算処理により求める第１の係数算出ステップと、
（ｍ＋１）ビットからｎビットまでのビットエラーが発生したときに、前記シンドローム保持回路に保持されているシンドロームを読み込み、当該シンドロームに基づいて、ビットエラーのビット数に応じた次数の誤り位置多項式の係数を、逐次計算処理により求める第２の係数算出ステップと、
前記第１の係数算出ステップ又は前記第２の係数算出ステップにより求められた誤り位置多項式の係数を係数保持回路に保持する係数保持ステップと、
前記係数保持回路に保持されている係数を読み込み、当該係数に基づいて前記データ保持回路に保持されているデータのビットエラーを訂正する訂正回路を備え、
前記データ保持回路内の領域、前記シンドローム保持回路内の領域及び前記係数保持回路内の領域は、相互に対応関係が定められており、前記データ保持回路内の第１の領域に保持されたデータに基づいて算出されたシンドロームは、当該第１の領域に対応する前記シンドローム保持回路内の領域である第２の領域に保持され、当該第２の領域に保持されたシンドロームに基づいて算出された係数は、当該第２の領域に対応する前記係数保持回路内の領域である第３の領域に保持され、当該第３の領域に保持された係数に基づいて、当該第１の領域に保持されたデータのビットエラーが訂正される。
【００１４】
本発明の第３の側面に従う、フラッシュメモリの制御方法おいて、
前記第１の係数算出ステップでは、ｉ（ｉは１以上ｍ以下の整数）次の誤り位置多項式の係数を、ｉ行ｉ列の行列に基づいて求めるようにしてもよい。
【００１５】
本発明の第３の側面に従う、フラッシュメモリの制御方法おいて、
（ｍ＋１）ビット以上のビットエラーが発生したことを検出する検出ステップを更に備え、
前記検出ステップでは、（ｍ＋１）次の誤り位置多項式の係数を求める（ｍ＋１）行（ｍ＋１）列の行列の行列式の値に基づいて、（ｍ＋１）ビット以上のビットエラーが発生したことを検出し、
前記第２の係数算出ステップは、前記検出ステップにより（ｍ＋１）ビット以上のビットエラーが発生したことが検出された後に当該ビットエラーが発生したデータに対応する位置多項式の係数を求める逐次計算処理を開始するようにしてもよい。
【発明の効果】
【００１６】
本発明によれば、各チャンネルに割り当てられた複数のシンドローム算出回路で算出されたシンドロームが、共通のシンドローム保持回路に保持される。そして、誤り位置多項式の係数を求める誤り位置多項式導出回路は、シンドローム保持回路からシンドロームを読み込んで、そのシンドロームに基づいて誤り位置多項式の導出を行う。この誤り位置多項式導出回路は、行列式の値を求める計算処理により誤り位置多項式の係数を求める低次用誤り位置多項式導出回路と、逐次計算処理により誤り位置多項式の係数を求める高次用誤り位置多項式導出回路で構成されている。この低次用誤り位置多項式導出回路と高次用誤り位置多項式導出回路を使い分けることにより、誤り位置多項式を導出する処理の効率化が図られる。
【００１７】
低次用誤り位置多項式導出回路又は高次用誤り位置多項式導出回路で求められた係数は、係数保持回路に保持される。訂正回路は、係数保持回路から誤り位置多項式の係数を読み込んで、その係数に基づいてチェンサーチを行う。
【００１８】
データを保持するデータ保持回路内の領域、シンドロームを保持するシンドローム保持回路内の領域及び誤り位置多項式の係数を保持する係数保持回路内の領域は、相互に対応関係が定められている。従って、データ、シンドローム及び誤り位置多項式の係数の対応関係を管理する際に、煩雑な管理は要求されない。
【００１９】
また、高次用誤り位置多項式導出回路より後に開始した低次用誤り位置多項式導出回路における処理が先に終了する場合がある。このような場合、訂正回路は、高次用誤り位置多項式導出回路における処理の終了を待たずに、先に求められた位置多項式導出回路の係数に基づいた処理を先に行うこともできる。このようにすれば、訂正回路の稼働効率が向上する。
【図面の簡単な説明】
【００２０】
【図１】図１は、本実施の形態に係るフラッシュメモリシステム１を概略的に示すブロック図である。
【図２】図２は、本実施の形態に係る誤り訂正ブロック１１の符号化機能２１と復号化機能２２と各チャンネルに接続されたフラッシュメモリ２を示すブロック図である。
【図３】図３は、本実施の形態に係る符号化機能２１及び復号化機能２２の構成を示すブロック図である。
【図４】図４は、本実施の形態に係る復号化の処理を示している。
【図５】図５は、本実施の形態に係る低次用誤り位置多項式導出回路４３の構成を示すブロック図である。
【図６】図６は、本実施の形態にバッファメモリ９と多項式係数キュー４５の関係を示している。
【発明を実施するための形態】
【００２１】
図１に示されているように、フラッシュメモリシステム１は、フラッシュメモリ２と、それを制御するメモリコントローラ３とで構成されている。メモリコントローラ３は、内部バス１４を介してフラッシュメモリ２と接続されている。
【００２２】
フラッシュメモリシステム１は、外部バス１３を介してホストシステム４と接続されている。ホストシステム４は、ホストシステム４の全体の動作を制御するためのＣＰＵ（Central Processing Unit）、フラッシュメモリシステム１との情報の授受を担うコンパニオンチップ等から構成されている。ホストシステム４は、例えば、文字、音声、あるいは画像情報等の種々の情報を処理するパーソナルコンピュータやデジタルスチルカメラをはじめとする各種情報処理装置であってもよい。
【００２３】
メモリコントローラ３は、図１に示されているように、マイクロプロセッサ６と、ホストインターフェースブロック７と、ＳＲＡＭ８と、バッファメモリ９と、フラッシュメモリインターフェースブロック１０と、誤り訂正ブロック１１と、ＲＯＭ（Read Only Memory）１２とから構成される。これら機能ブロックによって構成されるメモリコントローラ３は、一つの半導体チップ上に集積される。以下、各機能ブロックについて説明する。
【００２４】
ホストインターフェースブロック７は、ホストシステム４との間で行われるデータ、アドレス情報、ステータス情報、外部コマンド等の送受信を制御する。つまり、フラッシュメモリシステム１は、ホストインターフェースブロック７を介して、ホストシステム４から供給されるデータ等を取り込む。また、フラッシュメモリシステム１は、ホストインターフェースブロック７を介して、データ等をホストシステム４に供給する。外部コマンドとは、ホストシステム４がフラッシュメモリシステム１に対して処理の実行を指示するためのコマンドである。
【００２５】
ホストインターフェースブロック７は、コマンドレジスタＲ１、セクタ数レジスタＲ２
及びＬＢＡレジスタＲ３を備えている。コマンドレジスタＲ１、セクタ数レジスタＲ２及びＬＢＡレジスタＲ３には、ホストシステム４から与えられる情報が書き込まれる。コマンドレジスタＲ１には、書き込みコマンド、読み出しコマンド等の外部コマンドが書き込まれる。セクタ数レジスタＲ２には、書き込むデータ又は読み出すデータのセクタ数が書き込まれる。ＬＢＡレジスタＲ３には、書き込み又は読み出しを開始する論理セクタに対応するＬＢＡ（Logical Block Address）が書き込まれる。ＬＢＡは、５１２バイトの容量を持った論理セクタに割り当てられたアドレスである。
【００２６】
ＳＲＡＭ（Static Random Access Memory）８は、フラッシュメモリ２の制御に必要な
情報を一時的に格納する揮発性メモリである。フラッシュメモリ２にアクセスするために必要な各種のテーブルは、ＳＲＡＭ８に保持され、ＳＲＡＭ８上で更新される。フラッシュメモリ２にアクセスするために必要なテーブルが、ＳＲＡＭ８に保持されていない場合は、そのテーブルはＳＲＡＭ８上で作成される。但し、そのテーブルが、フラッシュメモリ２に格納されている場合は、格納されているテーブルがフラッシュメモリ２から読み出され、ＳＲＡＭ８に保持される。上記各種テーブルには、アドレス変換テーブル、検索テーブル、不良ブロックテーブル等が含まれる。アドレス変換テーブルは、論理ブロックと物理ブロックの対応関係を管理するためのテーブルである。検索テーブルは、空きブロックを検索するためのテーブルである。不良ブロックテーブルは不良ブロックを管理するためのテーブルである。
【００２７】
バッファメモリ９は、フラッシュメモリ２から読み出したデータ、又はフラッシュメモリ２に書き込むデータを、一時的に保持する揮発性メモリである。
【００２８】
フラッシュメモリインターフェースブロック１０は、フラッシュメモリ２との間で行われるデータ、アドレス情報、ステータス情報、内部コマンド等の送受信を制御する。ここで、内部コマンドとは、メモリコントローラ３がフラッシュメモリ２に処理の実行を指示するためのコマンドであり、フラッシュメモリ２は、メモリコントローラ３から与えられる内部コマンドに従って動作する。
【００２９】
誤り訂正ブロック１１は、フラッシュメモリ２にデータを書き込むときに、そのデータをＢＣＨ符号の誤り訂正符号（ＥＣＣ：Error Correcting Code）に符号化し、フラッシュメモリ２から符号化されたデータを読み出したときに、その符号化されたデータを復号化する。つまり、フラッシュメモリ２に書き込まれるデータは、冗長ビットが付加されたＢＣＨ符号に符号化されてフラッシュメモリ２に書き込まれ、その符号化されたデータ（冗長ビットが付加されたデータ）は、読み出されたときに復号化される。この復号化では、符号化の際に付加される冗長ビットのビット数に応じて、所定のビット数までのビットエラーが訂正される。
【００３０】
ＲＯＭ１２は、フラッシュメモリ２を制御するために必要なファームウェアを格納するための不揮発性の記憶素子である。尚、フラッシュメモリシステム１を起動させるために必要な最小限のファームウェアだけをＲＯＭ１２に格納し、その他のファームウェアをフラッシュメモリ２に格納するようにしてもよい。
【００３１】
マイクロプロセッサ６は、ＲＯＭ１２又はフラッシュメモリ２から、ファームウェアを読み込み、ファームウェアに従って動作する。メモリコントローラ３に含まれる機能ブロックは、マイクロプロセッサ６により制御される。
【００３２】
フラッシュメモリ２は、ＮＡＮＤ型フラッシュメモリであり、レジスタと、複数のメモリセルが２次元的に配列されたメモリセルアレイを備えている。メモリセルアレイは、複数のメモリセル群と、ワード線とを備える。ここで、メモリセル群は、複数のメモリセルが直列に接続されたものである。各ワード線は、メモリセル群の特定のメモリセルを選択するためのものである。このワード線を介して選択されたメモリセルとレジスタとの間で、レジスタから選択されたメモリセルへのデータの書き込み又は選択されたメモリセルからレジスタへのデータの読み出しが行われる。尚、フラッシュメモリには、ＳＬＣ(Single Level Cell)タイプのメモリセルで構成されたものと、ＭＬＣ(Multi
Level Cell)タイプのメモリセルで構成されたものがある。
【００３３】
ＮＡＮＤ型フラッシュメモリでは、データ読み出し動作及びデータ書き込み動作はページ単位で行われ、データ消去動作はブロック（物理ブロック）単位で行われる。それぞれの物理ブロックは、複数のページ（物理ページ）で構成され、それぞれの物理ページは、ユーザ領域と冗長領域で構成されている。例えば、１個の物理ページは、４セクタ（２０４８バイト）のユーザ領域と、６４バイトの冗長領域とで構成され、１個の物理ブロックは、６４個の物理ページで構成されている。ユーザ領域は、ホストシステム４から与えられるデータを主に格納するための領域であり、冗長領域は、論理アドレス情報、ブロックステータス（フラグ）等の付加データを主に格納するための領域である。
【００３４】
論理アドレス情報は、当該情報に係る物理ブロックと対応する論理ブロックを特定するための情報である。ブロックステータス（フラグ）は、当該情報に係る物理ブロックが、不良ブロック（正常にデータの書き込み等を行うことができない物理ブロック）であるか否かを示すフラグである。尚、不良ブロックには、初期不良の不良ブロックと後発不良の不良ブロックがある。初期不良の不良ブロックは、出荷前に検出された不良ブロックである。後発不良の不良ブロックは、使用中に生じた不良ブロックである。初期不良の物理ブロックについては、不良ブロックであることを示すブロックステータス（フラグ）が製造メーカによって書き込まれている。また、この初期不良の物理ブロックを示すブロックステータス（フラグ）を、ユーザ領域に書き込んでいる製造メーカもある。不良ブロックか否かの判断基準は、設計の際に決められる。
【００３５】
図２に示されているように、内部バス１４は４つのチャンネルで構成されている。第１のチャンネル１４ａには、フラッシュメモリ２ａが接続されている。第２のチャンネル１４ｂには、フラッシュメモリ２ｂが接続されている。第３のチャンネル１４ｃには、フラッシュメモリ２ｃが接続されている。第４のチャンネル１４ｄには、フラッシュメモリ２ｄが接続されている。バッファメモリ９に保持されているデータは、フラッシュメモリ２に書き込まれるときに、誤り訂正ブロック１１内の符号化機能２１によりＢＣＨ符号に符号化される。この符号化されたデータである符号化データは、フラッシュメモリインターフェースブロック１０を介してフラッシュメモリ２に転送される。フラッシュメモリ２に格納されている符号化データは、フラッシュメモリ２から読み出されたときに、誤り訂正ブロック１１内の復号化機能２２により符号化される。この複合化されたデータは、バッファメモリ９に保持される。
【００３６】
誤り訂正ブロック１１は、１セクタ（５１２バイト）のデータを処理単位として、符号化及び復号化を行っている。この誤り訂正ブロック１１は、最大１５ビットのビットエラーに対処できるように設計されている。従って、符号化の際に、１セクタのデータに対して１９５ビットの冗長ビットが付加される。つまり、符号化データは、バッファメモリ９に保持されていた１セクタのデータと、符号化の際に生成された１９５ビットの冗長ビットを含んでいる。
【００３７】
図３に示されているように、符号化機能２１は４つの符号化回路３１ａ−３１ｄで構成されている。第１のチャンネル１４ａに接続されているフラッシュメモリ２ａには、符号化回路３１ａで符号化された符号化データが書き込まれる。第２のチャンネル１４ｂに接続されているフラッシュメモリ２ｂには、符号化回路３１ｂで符号化された符号化データが書き込まれる。第３のチャンネル１４ｃに接続されているフラッシュメモリ２ｃには、符号化回路３１ｃで符号化された符号化データが書き込まれる。第４のチャンネル１４ｄに接続されているフラッシュメモリ２ｄには、符号化回路３１ｄで符号化された符号化データが書き込まれる。
【００３８】
復号化機能２２は、４つのシンドローム計算回路４１ａ−４１ｄ、シンドロームキュー４２、低次用誤り位置多項式導出回路４３、高次用誤り位置多項式導出回路４４、多項式係数キュー４５、チェンサーチ回路４６で構成されている。
【００３９】
第１のチャンネル１４ａに接続されているフラッシュメモリ２ａから読み出された符号化データは、シンドローム計算回路４１ａに入力される。さらに、この符号化データから１９５ビットの冗長ビットが除かれたデータは、バッファメモリ９に保持される。シンドローム計算回路４１ａは、入力された符号化データに基づいて算出したシンドロームを出力する。そして、このシンドロームはシンドロームキュー４２に保持される。
【００４０】
第２のチャンネル１４ｂに接続されているフラッシュメモリ２ｂから読み出された符号化データは、シンドローム計算回路４１ｂに入力される。さらに、この符号化データから１９５ビットの冗長ビットが除かれたデータは、バッファメモリ９に保持される。シンドローム計算回路４１ｂは、入力された符号化データに基づいて算出したシンドロームを出力する。そして、このシンドロームはシンドロームキュー４２に保持される。
【００４１】
第３のチャンネル１４ｃに接続されているフラッシュメモリ２ｃから読み出された符号化データは、シンドローム計算回路４１ｃに入力される。さらに、この符号化データから１９５ビットの冗長ビットが除かれたデータは、バッファメモリ９に保持される。シンドローム計算回路４１ｃは、入力された符号化データに基づいて算出したシンドロームを出力する。そして、このシンドロームはシンドロームキュー４２に保持される。
【００４２】
第４のチャンネル１４ｄに接続されているフラッシュメモリ２ｄから読み出された符号化データは、シンドローム計算回路４１ｄに入力される。さらに、この符号化データから１９５ビットの冗長ビットが除かれた１セクタのデータは、バッファメモリ９に保持される。シンドローム計算回路４１ｄは、入力された符号化データに基づいて算出したシンドロームを出力する。そして、このシンドロームはシンドロームキュー４２に保持される。
【００４３】
尚、４つのチャンネル（第１のチャンネル１４ａ−第４のチャンネル１４ｄ）を介して、４個のフラッシュメモリ（フラッシュメモリ２ａ−フラッシュメモリ２ｄ）から読み出されたそれぞれのデータは、ホストシステム４に転送される順番と一致するような並びで、バッファメモリ９内の領域に保持される。つまり、各データが保持されるバッファメモリ９内の領域の配列は、ホストシステム４に転送される順番と一致するように決められる。従って、４つのチャンネルを介して、４個のフラッシュメモリから読み出されたデータは、ＬＢＡの順番で並んでバッファメモリ９に保持される。
【００４４】
又、４個のシンドローム計算回路４１ａ−４１ｄで算出されたそれぞれシンドロームは、そのシンドロームと対応するデータが保持されるバッファメモリ９内の領域と対応するシンドロームキュー４２内の領域に保持される。従って、それぞれシンドロームは、それらに対応するそれぞれのデータがホストシステム４に転送される順番と一致するよう並びで、シンドロームキュー４２内の領域に保持される。
【００４５】
低次用誤り位置多項式導出回路４３及び高次用誤り位置多項式導出回路４４はシンドロームキュー４２に保持されたシンドロームを読み込み、そのシンドロームに基づいて誤り位置多項式の係数の値を求める。多項式係数キュー４５には、低次用誤り位置多項式導出回路４３又は高次用誤り位置多項式導出回路４４で求められた誤り位置多項式の係数の値が保持される。尚、多項式係数キュー４５には初期値として“係数待ちシンボル”が設定される。また、バッファメモリ９内の領域、シンドロームキュー４２内の領域及び多項式係数キュー４５内の領域の対応関係は予め決められている。
【００４６】
図４は、ＬＢＡが連続する１６セクタのデータに対応する符号化データを、フラッシュメモリ２から読み出す場合の例を示している。図４に示されているように、それぞれ１セクタのデータに対応する符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）は、４個のフラッシュメモリ２ａ−２ｄに順次振り分けられている。つまり、第１のチャンネル１４ａに接続されているフラッシュメモリ２ａから読み出された符号化データＤ＃ｎは、シンドローム計算回路４１ａに入力される。第２のチャンネル１４ｂに接続されているフラッシュメモリ２ｂから読み出された符号化データＤ＃（ｎ＋１）は、シンドローム計算回路４１ｂに入力される。第３のチャンネル１４ｃに接続されているフラッシュメモリ２ｃから読み出された符号化データＤ＃（ｎ＋２）は、シンドローム計算回路４１ｃに入力される。第４のチャンネル１４ｄに接続されているフラッシュメモリ２ｄから読み出された符号化データＤ＃（ｎ＋３）は、シンドローム計算回路４１ｄに入力される。この後の符号化データも同様に振り分けられる。
【００４７】
従って、シンドローム計算回路４１ａには、符号化データＤ＃ｎ、符号化データＤ＃（ｎ＋４）、符号化データＤ＃（ｎ＋８）及び符号化データＤ＃（ｎ＋１２）が入力される。シンドローム計算回路４１ｂには、符号化データＤ＃（ｎ＋１）、符号化データＤ＃（ｎ＋５）、符号化データＤ＃（ｎ＋９）及び符号化データＤ＃（ｎ＋１３）が入力される。シンドローム計算回路４１ｃには、符号化データＤ＃（ｎ＋２）、符号化データＤ＃（ｎ＋６）、符号化データＤ＃（ｎ＋１０）及び符号化データＤ＃（ｎ＋１４）が入力される。シンドローム計算回路４１ｄには、符号化データＤ＃（ｎ＋３）、符号化データＤ＃（ｎ＋７）、符号化データＤ＃（ｎ＋１１）及び符号化データＤ＃（ｎ＋１５）が入力される。
【００４８】
４つのシンドローム計算回路４１ａ−４１ｄは、入力された符号化データに基づいてシンドロームを算出する。算出されるシンドロームの個数は、訂正能力（訂正可能なビットエラーの最大数）に応じて決まる。訂正能力が１５ビットなので、つまり、訂正することができるビットエラーの最大値が１５ビットなので、各符号化データに基づいて３０個のシンドロームが算出される。シンドロームＳｄ＃ｎ−Ｓｄ＃（ｎ＋１５）は、符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）にそれぞれ対応している。シンドロームＳｄ＃ｎ−Ｓｄ＃（ｎ＋１５）は、それぞれが３０個のシンドロームを含んでいる。
【００４９】
シンドローム計算回路４１ａは、シンドロームＳｄ＃ｎ、シンドロームＳｄ＃（ｎ＋４）、シンドロームＳｄ＃（ｎ＋８）及びシンドロームＳｄ＃（ｎ＋１２）を算出し、それらを出力する。シンドローム計算回路４１ｂは、シンドロームＳｄ＃（ｎ＋１）、シンドロームＳｄ＃（ｎ＋５）、シンドロームＳｄ＃（ｎ＋９）及びシンドロームＳｄ＃（ｎ＋１３）を算出し、それらを出力する。シンドローム計算回路４１ｃは、シンドロームＳｄ＃（ｎ＋２）、シンドロームＳｄ＃（ｎ＋６）、シンドロームＳｄ＃（ｎ＋１０）及びシンドロームＳｄ＃（ｎ＋１４）を算出し、それらを出力する。シンドローム計算回路４１ｄは、シンドロームＳｄ＃（ｎ＋３）、シンドロームＳｄ＃（ｎ＋７）、シンドロームＳｄ＃（ｎ＋１１）及びシンドロームＳｄ＃（ｎ＋１５）を算出し、それらを出力する。
【００５０】
シンドローム計算回路４１ａ−４１ｄから出力されたシンドロームＳｄ＃ｎ−Ｓｄ＃（ｎ＋１５）は、シンドロームキュー４２に保持される。符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）は、シンドローム計算回路４１ａ−４１ｄ入力にされると共に、バッファメモリ９に保持される。バッファメモリ９には、符号化データのうち冗長ビット以外のデータ部分（１セクタのデータ）だけが保持され、冗長ビットは保持されない。符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）のそれぞれのデータは、符号化データＤ＃ｎからＤ＃（ｎ＋１５）に向かう順番でホストシステム４に転送される。従って、それぞれのデータには、符号化データＤ＃ｎからＤ＃（ｎ＋１５）に向かう順番と一致するような並びで、バッファメモリ９内の領域が割り当てられる。このように領域を割り当てることにより、符号化データＤ＃ｎからＤ＃（ｎ＋１５）に向かう順番と一致するような配列で、それぞれのデータが保持される。
【００５１】
バッファメモリ９の符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）がそれぞれ保持される領域と、シンドロームキュー４２のシンドロームＳｄ＃ｎ−Ｓｄ＃（ｎ＋１５）がそれぞれ保持される領域との対応関係は予め決められている。つまり、バッファメモリ９内の符号化データＤ＃ｎが保持された領域に対応するシンドロームキュー４２内の領域にシンドロームＳｄ＃ｎが保持されている。例えば、バッファメモリ９内の第１のメモリ領域がシンドロームキュー４２内の第１のキュー領域に対応し、バッファメモリ９内の第２のメモリ領域がシンドロームキュー４２内の第２のキュー領域に対応し、バッファメモリ９内の第ｉのメモリ領域（＃ｉ）がシンドロームキュー４２内の第ｉのキュー領域（＃ｉ）に対応している。従って、符号化データＤ＃（ｎ＋５）が第ｉのメモリ領域（＃ｉ）にされたとき、符号化データＤ＃（ｎ＋５）に対応するシンドロームＳｄ＃（ｎ＋５）は第ｉのキュー領域（＃ｉ）に保持される。
【００５２】
このように対応関係が決められているため、シンドロームキュー４２には、符号化データＤ＃ｎからＤ＃（ｎ＋１５）に向かう順番と一致するような配列で、それぞれのデータに対応するシンドロームＳｄ＃ｎ−Ｓｄ＃（ｎ＋１５）が保持される。
【００５３】
図５に示したように、低次用誤り位置多項式導出回路４３は、エラー有無判定回路４３ａ、１ビットエラー専用誤り位置多項式導出回路４３ｂ、２ビットエラー専用誤り位置多項式導出回路４３ｃ、３ビットエラー専用誤り位置多項式導出回路４３ｄ、３ビットエラー判定回路４３ｅ及びセレクタ４３ｆで構成されている。低次用誤り位置多項式導出回路４３は、シンドロームキュー４２に保持されたシンドロームを読み込み、読み込んだシンドロームに基づいて誤り位置多項式の係数を求める。この際、読み込んだシンドロームは、エラー無判定回路４３ａ、１ビットエラー専用誤り位置多項式導出回路４３ｂ、２ビットエラー専用誤り位置多項式導出回路４３ｃ、３ビットエラー専用誤り位置多項式導出回路４３ｄ及び３ビットエラー判定回路４３ｅに同時に入力される。そして、これらの回路は、入力されたシンドロームを用いた演算処理を実行する。これらの回路は組み合わせ回路で構成されているため、この演算処理は１クロックで終了する。ビットエラーが１ビットから３ビットまでの範囲内であれば、この演算処理により誤り位置多項式の係数が得られる。ビットエラーが４ビット以上のとき、低次用誤り位置多項式導出回路４３（１ビットエラー専用誤り位置多項式導出回路４３ｂ、２ビットエラー専用誤り位置多項式導出回路４３ｃ又は３ビットエラー専用誤り位置多項式導出回路４３ｄ）では、誤り位置多項式の係数が得られないので、高次用誤り位置多項式導出回路４４よる多項式の係数の値を求める演算処理が行われる。尚、エラー有無判定回路４３ａによりビットエラーが無いと判定された場合は、１ビットエラー専用誤り位置多項式導出回路４３ｂ、２ビットエラー専用誤り位置多項式導出回路４３ｃ及び３ビットエラー専用誤り位置多項式導出回路４３ｄの演算処理の結果にかかわらず処理が終了する。
【００５４】
エラー有無判定回路４３ａは、ビットエラーの有無を判定する回路である。この回路は、３０個のシンドロームの値が全て０であれば、“ビットエラーが無い”と判定する。エラー有無判定回路４３ａにより、“ビットエラーが無い”と判定された場合、エラー有無判定回路４３ａに入力されたシンドロームが保持されていたシンドロームキュー４２内の領域と対応する多項式係数キュー４５の領域内に“訂正済みシンボル”が書き込まれる。
【００５５】
１ビットエラー専用誤り位置多項式導出回路４３ｂは、ビットエラーが１ビットのときに有効な誤り位置多項式（１次の誤り位置多項式）の係数が得られる回路である。２ビットエラー専用誤り位置多項式導出回路４３ｃは、ビットエラーが２ビットのときに有効な誤り位置多項式（２次の誤り位置多項式）の係数が得られる回路である。３ビットエラー専用誤り位置多項式導出回路４３ｄは、ビットエラーが３ビットのときに有効な誤り位置多項式（３次の誤り位置多項式）の係数が得られる回路である。
【００５６】
１ビットエラー判定回路は、ビットエラーが２ビット以上であるか否か判定する。この判定は、２ビットエラー専用誤り位置多項式導出回路４３ｃで得られる２次の係数の値に基づいて行われる。２ビットエラー判定回路は、ビットエラーが３ビット以上であるか否か判定する。この判定では、３ビットエラー専用誤り位置多項式導出回路４３ｄで得られる３次の係数の値に基づいて行われる。３ビットエラー判定回路は、ビットエラーが４ビット以上であるか否か判定する。この判定では、４次の誤り位置多項式における４次の係数の値に基づいて行われる。
【００５７】
セレクタ４３ｆは、エラー有無判定回路４３ａ及び１ビットエラー判定回路から３ビットエラー判定回路４３ｅまでビットエラー判定回路の判定結果に基づいて、多項式係数キュー４５に書き込む係数の値等を選択する。
【００５８】
例えば、エラー有無判定回路４３ａにより“ビットエラーが無い”と判定された場合、読み出されたシンドロームが保持されていたシンドロームキュー４２内の領域と対応する多項式係数キュー４５の領域内に“訂正済みシンボル“が書き込まれる。
【００５９】
また、エラー有無判定回路４３ａにより“ビットエラーが有る”と判定され、更に、３ビットエラー判定回路４３ｅにより“ビットエラーが４ビット以上でない”と判定され、３ビットエラー判定回路により“ビットエラーが３ビット以上である”と判定された場合、セレクタ４３ｆは、３ビットエラー専用誤り位置多項式導出回路４３ｄで得られた係数の値を選択する。そして、この値が、この値を求める演算の際に読み出されたシンドロームを保持していたシンドロームキュー４２内の領域と対応する多項式係数キュー４５内の領域に書き込まれる。
【００６０】
また、エラー有無判定回路４３ａにより“ビットエラーが有る”と判定され、更に、３ビットエラー判定回路４３ｅにより“ビットエラーが４ビット以上でない”と判定され、３ビットエラー判定回路により“ビットエラーが３ビット以上でない”と判定され、２ビットエラー判定回路により“ビットエラーが２ビット以上である”と判定された場合、セレクタ４３ｆは、２ビットエラー専用誤り位置多項式導出回路４３ｃで得られた係数の値を選択する。そして、この値が、この値を求める演算の際に読み出されたシンドロームを保持していたシンドロームキュー４２内の領域と対応する多項式係数キュー４５内の領域に書き込まれる。
【００６１】
また、エラー有無判定回路４３ａにより“ビットエラーが有る”と判定され、更に、３ビットエラー判定回路４３ｅにより“ビットエラーが４ビット以上でない”と判定され、３ビットエラー判定回路により“ビットエラーが３ビット以上でない”と判定され、２ビットエラー判定回路により“ビットエラーが２ビット以上でない”と判定された場合、セレクタ４３ｆは、１ビットエラー専用誤り位置多項式導出回路４３ｃで得られた係数の値を選択する。そして、この値が、この値を求める演算の際に読み出されたシンドロームを保持していたシンドロームキュー４２内の領域と対応する多項式係数キュー４５内の領域に書き込まれる。
【００６２】
また、エラー有無判定回路４３ａにより“ビットエラーが有る”と判定され、更に、３ビットエラー判定回路により“ビットエラーが４ビット以上である”と判定された場合、セレクタ４３ｆによる選択は行われない。この場合、高次用誤り位置多項式導出回路４４にシンドロームが入力され、高次用誤り位置多項式導出回路４４による誤り位置多項式の係数の値を求める演算処理が行われる。高次用誤り位置多項式導出回路４４は、逐次計算を行う順序回路であるため、誤り位置多項式の係数の値を求める演算処理にかかる時間が長くなるが、ＥＣＣ訂正能力範囲内であればビットエラーのビット数によらず誤り位置多項式の係数の値を得ることができる。得られた係数の値は、この値を求める演算の際に読み出されたシンドロームを保持していたシンドロームキュー４２内の領域と対応する多項式係数キュー４５内の領域に書き込まれる。
【００６３】
尚、バッファメモリ９内の各領域、シンドロームキュー４２内の各領域及び多項式係数キュー４５内の各領域は、相互に対応関係が定められている。従って、バッファメモリ９内の領域に保持されたデータに対応するシンドローム、つまり、そのデータに基づいて算出されたシンドロームは、そのデータが保持されたバッファメモリ９内の領域に対応するシンドロームキュー４２内の領域に保持される。そして、そのシンドロームに基づいて求められた係数の値は、そのシンドロームが保持されたシンドロームキュー４２内の領域に対応する多項式係数キュー４５内の領域に保持される。更に、チェンサーチ回路４６は、その係数の値に基づいて、その係数の値が保持された多項式係数キュー４５内の領域に対応するバッファメモリ９内の領域に保持されたデータのビットエラーを訂正する。
【００６４】
それぞれのシンドロームは、それらに対応するそれぞれのデータがホストシステム４に転送される順番と一致するような順番で、低次用誤り位置多項式導出回路４３に読み込まれる。しかし、低次用誤り位置多項式導出回路４３によって誤り位置多項式の係数の値が得られず、高次用誤り位置多項式導出回路４４による演算処理に移行した場合、ホストシステム４への転送の順番が後のデータに対応する係数の値が先に得られてしまうことがある。つまり、高次用誤り位置多項式導出回路４４による演算処理に移行しても、低次用誤り位置多項式導出回路４３は次のシンドロームを読み込み、そのシンドロームに基づいた演算処理が続けられるため、ホストシステム４への転送の順番が後のデータに対応する係数の値が先に得られてしまうことがある。
【００６５】
チェンサーチ回路４６は、多項式係数キュー４５に保持されている誤り位置多項式の係数の値を読み込み、その値に基づいてチェンサーチを行い、更に、そのチェンサーチの結果に基づいてバッファメモリ９内のビットエラーを訂正する。つまり、チェンサーチ回路４６は、ビットエラーが発生したビットを特定し、特定されたビットの論理値を反転させる。このビットエラーの訂正が終了した後に、この訂正で使用された係数の値を保持していた多項式係数キュー４５内の領域に“訂正済みシンボル”が書き込まれる。つまり、誤り位置多項式の係数の値から“訂正済みシンボル”に書き替えられる。
【００６６】
バッファメモリ９に保持された符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）に対応するそれぞれのデータは、訂正処理がなされた後、又はビットエラーが生じていないと判断された後に、ホストシステム４に転送される。この際、転送することが許されたデータであるかどうかは、そのデータが保持されているバッファメモリ９内の領域に対応する多項式係数キュー４５内の領域に“訂正済みシンボル”が書き込まれているか否かに基づいて判断される。つまり、バッファメモリ９内の各メモリ領域に保持されているデータは、その各メモリ領域に対応する多項式係数キュー４５内の領域に“訂正済みシンボル”が書き込まれていれば、ホストシステム４への転送が可能な状態であると判断される。
【００６７】
図６は、バッファメモリ９に保持される符号化データＤ＃ｎ−Ｄ＃（ｎ＋１５）と多項式係数キュー４５に保持される情報の関係を示している。バッファメモリ９にデータが保持されると、そのデータが保持された領域に対応する多項式係数キュー４５内の領域に、“係数待ちシンボル”が設定される。その後、そのデータに対応する誤り位置多項式の係数が求められると、その係数の値が“係数待ちシンボル”が設定されている領域に書き込まれる。つまり、“係数待ちシンボル”から誤り位置多項式の係数の値に書き替えられる。更に、その係数に基づいたビットエラーの訂正が終了した後に、誤り位置多項式の係数の値から“訂正済みシンボル”に書き替えられる。例えば、符号化データＤ＃（ｎ＋３）、Ｄ＃（ｎ＋５）が保持されたバッファメモリ９内の領域に対応する多項式係数キュー４５内の領域には、“係数待ちシンボル”が書き込まれている。従って、符号化データＤ＃（ｎ＋３）、Ｄ＃（ｎ＋５）に対応する誤り位置多項式の係数は、未だ求められていない。符号化データＤ＃ｎ、Ｄ＃（ｎ＋１）、Ｄ＃（ｎ＋２）が保持されたバッファメモリ９内の領域に対応する多項式係数キュー４５内の領域には、“訂正済みシンボル”が書き込まれている。従って、符号化データＤ＃ｎ、Ｄ＃（ｎ＋１）、Ｄ＃（ｎ＋２）に関するビットエラーの訂正は終了している。符号化データＤ＃（ｎ＋４）が保持されたバッファメモリ９内の領域に対応する多項式係数キュー４５内の領域には、誤り位置多項式の係数の値が書き込まれている。ビットエラー訂正の処理中又は処理待ち場合には、誤り位置多項式の係数の値が書き込まれている。従って、チェンサーチ回路４６は、誤り位置多項式の係数の値が書き込まれている領域を探し、順次ビットエラーの訂正を行っていく。この際、誤り位置多項式の係数の値が書き込まれている領域のうちで、ホストシステム４に転送される順序が先のデータに対応する領域が優先される。
【００６８】
次に誤り位置多項式の求め方について詳細を述べる。ＢＣＨ符号における誤り位置多項式はビットエラーのビット数に応じた個数の項が連なる式となる。つまり、ビットエラーのビット数がｍビットの場合、下記の式（１）のように（ｍ＋１）個の項からなるｍ次の多項式になる。
【数１】
2012038226.tif 000003
【００６９】
誤り位置多項式の導出とは、シンドローム計算回路から得られたシンドローム値をもとに式（１）の各係数を求めることに相当する。ビットエラーのビット数がｍビットの場合、ｍ個の係数を求める必要がある。ピーターソン法アルゴリズムでは行列演算によってこの係数を求める。ここで、訂正可能なビットエラーのビット数をｎビットとした場合、誤り位置多項式の項数はビットエラーのビット数に応じて２個から（ｎ＋１）個の間で変化し、行列演算によって求める係数の個数は１個からｎ個の間で変化する。そして、ビットエラーのビット数が多くなると、求める係数の個数が多くなるため、係数を求める行列演算の演算量が飛躍的に増加する。従って、求める係数の個数が多くなった場合には、通常、ガウスジョルダン法やＬＵ分解法といった逐次計算処理の方法を用いてこの行列演算が行われる。この逐次計算処理の方法を用いた行列演算を行うための回路は、行列を格納するためのレジスタと、条件分岐が可能なステートマシーンを用いることにより構成することができる。高次用誤り位置多項式導出回路４４は、この逐次計算処理の方法を用いた行列演算を行うための回路に相当する。
【００７０】
一方、低次用誤り位置多項式導出回路４３に含まれる１ビットエラー専用誤り位置多項式導出回路４３ｂ、２ビットエラー専用誤り位置多項式導出回路４３ｃ及び３ビットエラー専用誤り位置多項式導出回路４３ｄは、組み合わせ回路で構成されている。これは、求める係数の個数が少ない場合、演算量が少ないため、行列演算を行うための回路を組み合わせ回路で構成しても素子遅延や回路規模が問題にならないからである。
【００７１】
組み合わせ回路で低次用誤り位置多項式導出回路４３に含まれる回路を構成する場合、除算が含まれていると回路を実現する際の障害となる。そこで、除算が含まない低次用誤り位置多項式導出回路４３の構成方法を、３ビットエラー専用誤り位置多項式導出回路４３ｄを例として説明する。
【００７２】
ビットエラーのビット数が３ビットの場合、誤り位置多項式（１）は、式（２）に示した３次の多項式になる。
【数２】
2012038226.tif 000004
【００７３】
式（２）に示した３次の多項式の３個の係数は、式（３）の３個の解に対応する。ここで、式（３）のａ１１からａ３３及びｂ１からｂ３は、ピーターソン法アルゴリズムにおける対応関係に従って、３０個のシンドロームのうちのいずれかに対応する。
【数３】
2012038226.tif 000005
【００７４】
式（４）から式（７）のように行列Ｓ０から行列Ｓ３を定義すれば、式（３）の３個の解は式（８）から式（１０）で得られる。
【数４】
2012038226.tif 000006
【数５】
2012038226.tif 000007
【数６】
2012038226.tif 000008
【数７】
2012038226.tif 000009
【数８】
2012038226.tif 000010
【数９】
2012038226.tif 000011
【数１０】
2012038226.tif 000012
【００７５】
式（８）から式（１０）を、式（２）の誤り位置多項式に代入し、更に、この誤り位置多項式の両片に行列式Ｓ０（det S0）の値を掛けることにより式（１１）の誤り位置多項式が得られる。
【数１１】
2012038226.tif 000013
【００７６】
この式（１１）の誤り位置多項式の４個の係数は、式（４）から式（７）の行列Ｓ０から行列Ｓ３の行列式の値にそれぞれ一致している。従って、３ビットエラー専用誤り位置多項式導出回路４３ｄは、行列Ｓ０から行列Ｓ３の４個の行列式の値を求める演算処理を行う回路により構成することができる。この演算処理は、加減算と乗算だけを含み、除算を含まないので組み合わせ回路で容易に構成することができる。
【００７７】
尚、1ビットエラー専用誤り位置多項式導出回路の１次の多項式における２個の係数、及び２ビットエラー専用誤り位置多項式導出回路の２次の多項式における３個の係数も同様に組み合わせ回路で容易に構成することができる。
【００７８】
次に、１ビットエラー判定回路、２ビットエラー判定回路及び３ビットエラー判定回路と、誤り位置多項式の関係について説明する。行列式Ｓ０（det S0）の値を掛けて変形した式（１１）の誤り位置多項式では、３次の係数は“１”ではなく行列式Ｓ０（det S0）の値になっている。この誤り位置多項式の３次の係数である行列式Ｓ０（det S0）の値が“０”の場合、この誤り位置多項式は成立しない。従って、３次の係数である行列式Ｓ０（det S0）の値が“０”の場合、データに含まれるビットエラーは２ビット以下であることが分かる。２ビットエラー判定回路は、３次の誤り位置多項式における３次の係数である行列式Ｓ０（det S0）の値が“０”であるか否かを判定する回路である。つまり、２ビットエラー判定回路は、３ビットエラー専用誤り位置多項式導出回路４３ｄによって得られる３次の係数の値、つまり、式（４）の行列Ｓ０の行列式Ｓ０（det S0）の値が“０”であるか否かを判定する。
【００７９】
同様に、１ビットエラー判定回路は、２ビットエラー専用誤り位置多項式導出回路４３ｃによって得られる２次の誤り位置多項式における２次の係数の値が“０”であるか否かを判定する。尚、この２次の誤り位置多項式における２次の係数は、式（１２）の行列Ｓ０の行列式Ｓ０（det S0）の値に対応する。
【数１２】
2012038226.tif 000014
【００８０】
３ビットエラー判定回路は、４次の誤り位置多項式における４次の係数を求める演算処理を行う回路を備えている。この演算処理では、式（１３）の行列Ｓ０の行列式Ｓ０（det S0）の値を求められる。３ビットエラー判定回路は、この値が“０”であるか否かを判定する。
【数１３】
2012038226.tif 000015
【００８１】
以上、本発明の実施の形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施の形態にのみ限定する趣旨ではない。本発明の要旨を逸脱しない範囲内において種々の変更を加え得ることは勿論である。
【００８２】
例えば、ビットエラーの訂正処理における符号化の種類は、ＢＣＨ符号以外の符号に基づいた符号化であってもよい。ビットエラーの訂正処理における訂正能力は、適宜変更することができる。また、符号化及び復号化の処理単位は、１セクタ（５１２バイト）単位に限定されず、例えば、２セクタ（１０２４バイト）単位や４セクタ（２０４８バイト）単位であってもよい。データバスは４チャンネルに限定されず、例えば、８チャンネル、あるいは１６チャンネル等の構成であってもよい。
【産業上の利用可能性】
【００８３】
本発明は、種々のデジタル情報を取り扱うパーソナルコンピュータやデジタルスチルカメラ等の電子機器に装着又内蔵される情報記憶（記録）装置に適用することができる。
【符号の説明】
【００８４】
１…フラッシュメモリシステム、２…フラッシュメモリ、３…メモリコントローラ、２２…復号化機能、４３…低次用誤り位置多項式導出回路、４４…高次用誤り位置多項式導出回路、４５…多項式係数キュー
【図１】
2012038226.tif 000016
【図２】
2012038226.tif 000017
【図３】
2012038226.tif 000018
【図４】
2012038226.tif 000019
【図５】
2012038226.tif 000020
【図６】
2012038226.tif 000021