(57)【特許請求の範囲】
【請求項１】
同一のブートプログラムがそれぞれに格納された複数の格納領域を備え、メモリに対しアクセス制御を行う半導体装置であって、
前記複数の格納領域の各々には、前記ブートプログラムが複数のプログラムデータとして格納され、
前記格納領域から前記複数のプログラムデータの各々を読み出すメモリコントローラと、
前記読み出されたプログラムデータの不良判定を行う不良判定回路と、
前記複数の格納領域は、メインブロックとして設定される格納領域と、サブブロックとして設定される格納領域を含み、
前記メモリコントローラは、ＣＰＵから指定されたプログラムデータをメインブロックとして設定される格納領域から読み出し、前記読み出されたプログラムデータが前記不良判定回路において不良と判定される場合、サブブロックとして設定される格納領域から、前記不良と判定されたプログラムデータに対応する前記プログラムデータを読み出し、前記メインブロックに設定される格納領域において不良と判定されたプログラムデータの数が閾値を超える場合、サブブロックとして設定された格納領域をメインブロックとして、前記ＣＰＵから新たに指定されたプログラムデータの読み出しを行う
半導体装置。
【請求項２】
請求項１に記載の半導体装置において、
前記指定されたプログラムデータには、アドレスが対応付けられており、
ＣＰＵから指定される前記アドレスを読み出し先のアドレスとして前記メモリコントローラに指定するとともに、読み出し先の格納領域を前記メモリコントローラに指定するアドレス補正回路を更に具備し、
前記メモリコントローラは、前記読み出し先のアドレスに対応するプログラムデータを前記読み出し先の格納領域から読み出し、
前記アドレス補正回路は、前記ＣＰＵから指定される前記アドレスを保持し、前記読み出されたプログラムデータが不良判定回路において不良と判定される場合、前記不良と判定されたプログラムデータが格納された格納領域とは異なる格納領域を、前記読み出し先の格納領域として指定し、前記保持するアドレスを前記読み出し先のアドレスとして指定する
半導体装置。
【請求項３】
同一のブートプログラムがそれぞれに格納された複数の格納領域を備えるメモリに対しアクセス制御を行う半導体装置であって、
前記複数の格納領域の各々は、前記ブートプログラムの複数のプログラムデータをそれぞれ格納する複数の単位格納領域を備え、
前記複数の単位格納領域の各々から、前記複数のプログラムデータの各々を読み出すメモリコントローラと、
前記読み出されたプログラムデータの不良判定を行う不良判定回路とを具備し、
前記複数の格納領域は、メインブロックとして設定される格納領域と、サブブロックとして設定される格納領域を含み、
前記メモリコントローラは、ＣＰＵから指定されたプログラムデータをメインブロックとして設定される格納領域から読み出し、前記読み出されたプログラムデータが前記不良判定回路において不良と判定される場合、サブブロックとして設定される格納領域の、前記不良と判定されたプログラムデータが格納された単位格納領域に対応する単位格納領域から前記プログラムデータを読み出し、前記メインブロックとして設定される格納領域において不良と判定されたプログラムデータの数が閾値を超える場合、サブブロックとして設定された格納領域をメインブロックとして、前記ＣＰＵから新たに指定されたプログラムデータの読み出しを行う
半導体装置。
【請求項４】
請求項３に記載の半導体装置において、
前記複数の単位格納領域のそれぞれにはアドレスが対応付けられ、同一アドレスに対応する単位格納領域には同一の前記プログラムデータが格納され、
前記ＣＰＵから指定される前記アドレスを読み出し先のアドレスとして前記メモリコントローラに指定するとともに、読み出し先の格納領域を前記メモリコントローラに指定するアドレス補正回路を更に具備し、
前記メモリコントローラは、前記読み出し先の格納領域における前記読み出し先のアドレスに対応する単位格納領域から前記プログラムデータを読み出し、
前記アドレス補正回路は、前記ＣＰＵから指定される前記アドレスを保持し、前記読み出されたプログラムデータが不良判定回路において不良と判定される場合、前記不良と判定されたプログラムデータが格納された格納領域とは異なる格納領域を、前記読み出し先の格納領域として指定し、前記保持するアドレスを前記読み出し先のアドレスとして指定する
半導体装置。
【請求項５】
請求項２又は４に記載の半導体装置において、
前記アドレス補正回路は、前記読み出し先の格納領域に対応付けられた領域番号を保持し、前記ＣＰＵからの新たなアドレスの指定に応答して、前記領域番号に対応する格納領域を次の読み出し先の格納領域として指定し、前記新たなアドレスを次の読み出し先のアドレスとして指定する
半導体装置。
【請求項６】
請求項５に記載の半導体装置において、
前記複数の格納領域は第１の格納領域を含み、
前記アドレス補正回路は、前記第１の格納領域に対応付けられた領域番号をメインブロックとして指定するメイン番号として保持し、前記ＣＰＵからの新たなアドレスの指定に応答して、前記メイン番号に対応する第１の格納領域を次の読み出し先の格納領域として指定し、前記新たなアドレスを前記読み出し対象のアドレスとして指定する
半導体装置。
【請求項７】
請求項６に記載の半導体装置において、
前記複数の格納領域は、第２の格納領域を含み、
前記アドレス補正回路は、前記第１の格納領域から読み出され、前記不良判定回路において不良であると判定されたプログラムデータの数が閾値を超える場合、前記第２の格納領域に対応付けられた領域番号を新たなメイン番号として保持する
半導体装置。
【請求項８】
請求項３に記載の半導体装置において、
前記メモリは、ＮＡＮＤ型フラッシュメモリであり、
前記複数の格納領域のそれぞれは、前記複数の単位格納領域である複数のページを備えるブロックである
半導体装置。
【請求項９】
請求項８に記載の半導体装置において、
前記不良判定回路は、前記ページ内に格納されるＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）を用いて前記プログラムデータの不良判定を行う
半導体装置。
【請求項１０】
請求項１から９に記載の半導体装置において、前記メモリを更に具備する
半導体装置。
【請求項１１】
請求項１又は４に記載の半導体装置において、
前記不良判定回路において、メインブロックとして設定される格納領域から読み出されたプログラムデータの不良が検出されると、当該格納領域の不良回数をカウントする不良カウンタと、
メインブロックを指定するメイン番号と前記閾値を保持するブロック指定回路と
を更に具備し、
前記ブロック指定回路は、前記不良回数が前記閾値を超える場合、前記メイン番号を他の格納領域に対応付けられた領域番号に変更する
半導体装置。
【請求項１２】
同一のブートプログラムがそれぞれに格納された複数の格納領域を備えるメモリにアクセスして、前記ブートプログラムを読み出す起動方法であって、
前記複数の格納領域の各々には、前記ブートプログラムが複数のプログラムデータとして格納され、
前記複数の格納領域は、メインブロックとして設定される格納領域と、サブブロックとして設定される格納領域を含み、
（Ａ）メモリコントローラが、ＣＰＵから指定されたプログラムデータをメインブロックとして設定される格納領域から読み出すステップと、
（Ｂ）不良判定回路が、前記読み出されたプログラムデータの不良判定を行うステップと、
（Ｃ）前記ステップ（Ｂ）において不良と判定される場合、前記メモリコントローラが、サブブロックとして設定される格納領域から、前記不良と判定されたプログラムデータに対応する前記プログラムデータを読み出すステップと、
（Ｄ）前記メインブロックとして設定される格納領域において不良と判定されたプログラムデータの数が閾値を超える場合、前記メモリコントローラが、サブブロックとして設定された格納領域をメインブロックとして、前記ＣＰＵから新たに指定されたプログラムデータの読み出しを行うステップと
を具備する
起動方法。
【請求項１３】
請求項１２に記載の起動方法において、
前記指定されたプログラムデータには、アドレスが対応付けられており、
前記ステップ（Ａ）は、
アドレス補正回路が、前記ＣＰＵから指定される前記アドレスを読み出し先のアドレスとして前記メモリコントローラに指定するとともに、読み出し先の格納領域を前記メモリコントローラに指定するステップと、
前記メモリコントローラが、前記読み出し先のアドレスに対応するプログラムデータを前記読み出し先の格納領域から読み出すステップとを備え、
前記ステップ（Ｃ）は、
前記アドレス補正回路が、前記ＣＰＵから指定される前記アドレスを保持するステップと、
前記ステップ（Ｂ）において不良と判定される場合、前記メモリコントローラが、前記不良と判定されたプログラムデータが格納された格納領域とは異なる格納領域を、前記読み出し先の格納領域として指定し、前記保持するアドレスを前記読み出し先のアドレスとして指定するステップとを備える
起動方法。
【請求項１４】
請求項１３に記載の起動方法において、
前記ステップ（Ａ）は、
前記アドレス補正回路が、前記読み出し先の格納領域に対応付けられた領域番号を保持するステップと、
前記アドレス補正回路が、前記ＣＰＵからの新たなアドレスの指定に応答して、前記領域番号に対応する格納領域を次の読み出し先の格納領域として指定し、前記新たなアドレスを次の読み出し先のアドレスとして指定するステップとを更に備える
起動方法。
【請求項１５】
請求項１４に記載の起動方法において、
前記複数の格納領域は第１の格納領域を含み、
前記アドレス補正回路が、前記第１の格納領域に対応付けられた領域番号をメイン番号として保持するステップと、
前記ＣＰＵからの新たなアドレスの指定に応答して、前記メイン番号に対応する第１の格納領域を次の読み出し先の格納領域として指定し、前記新たなアドレスを前記読み出し対象のアドレスとして指定するステップとを更に具備する
起動方法。
【請求項１６】
請求項１５に記載の起動方法において、
前記複数の格納領域は、第２の格納領域を含み、
前記第１の格納領域から読み出され、前記不良判定回路において不良であると判定されたプログラムデータの数が閾値を超える場合、前記アドレス補正回路が前記第２の格納領域に対応付けられた領域番号を新たなメイン番号として保持するステップを更に備える
起動方法。
【請求項１７】
請求項１２から１６のいずれか１項に記載の起動方法において、
前記ステップ（Ｄ）は、
メインブロックとして設定される格納領域から読み出されたプログラムデータの不良が検出されると、カウンタが、当該格納領域の不良回数をカウントするステップと、
メインブロックを指定するメイン番号と前記閾値を保持するブロック指定回路が、前記不良回数が前記閾値を超える場合、前記メイン番号を他の格納領域に対応付けられた領域番号に変更するステップと
を備える
起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関し、特に不揮発性メモリ内のブートプログラムを用いて起動する半導体装置、及びその起動方法に関する。
【背景技術】
【０００２】
近年、多数の機能を１チップ上に集積したシステムＬＳＩには、ブートプログラムなどの様々な処理プログラムやデータが記憶された不揮発性メモリが、チップの内部又は外部に設けられる。このような不揮発性メモリとして、記憶データの電気的な書き換え及び消去が可能なフラッシュメモリが用いられることが多くなっている。
【０００３】
ブートプログラムを格納するフラッシュメモリとしては、一般にＮＯＲ型フラッシュメモリが使用されることが多い。しかし、最近では、低価格なＮＡＮＤ型フラッシュメモリに対する需要が高まっている。一方、ＮＡＮＤ型フラッシュメモリは、製造過程において不良ブロックがランダムに発生することが知られている。このため、ＮＡＮＤ型フラッシュメモリを使用してブート処理を行う場合、ブートプログラムが格納されたブロックが不良ではなく、そのプログラムが正常に記憶されていることが保証されていなければならない。
【０００４】
ＮＡＮＤ型フラッシュメモリにアクセスするにためには、先ず所定のコマンドが投入されてから、メモリのアドレスが必要サイクル分指定される。そして、指定されたアドレスに対応するページに対してデータの読み出しや書き込みが実行される。この際、ＮＡＮＤ型フラッシュメモリに投入されるアドレスは、ページの先頭アドレスであり、指定されたアドレスに相当するページ単位で、ＣＰＵへのデータの読み出しや、ＣＰＵからのデータの書き込みが実行される。又、ブートプログラムが複数ページに渡って格納される場合、ＣＰＵによって複数のアドレスがシーケンシャルに指定されることで、複数ページに格納されたブートプログラムのプログラムデータがシーケンシャルにＣＰＵに読み出される。このように、ＮＡＮＤ型フラッシュメモリに対するデータの読み出しや書き込みは、シーケンシャルに実行される。
【０００５】
ＮＡＮＤ型フラッシュメモリは、ウェハ処理工程における欠陥により不良が発生することが知られている。又、ＮＡＮＤ型フラッシュメモリはその構造上メモリセルの値を読み出すビットラインが複数のセルのソースとドレインの連鎖によって形成され、専用の配線をもっていない。このため、セルの面積を最小にでき、集積度を高めることができる。しかし、その一方、連鎖上の別のセルの状態に影響され、読み出したいセルの値が正しく読み出せない場合がある。一方、ＮＯＲ型のフラッシュメモリは、各メモリセルの値を読み出すためのラインをそれぞれもっており、他のセルの状態による影響を受けにくい構造である。このため、ＮＡＮＤ型フラッシュメモリは、不良ブロックの発生に加え、読み出したデータが不良となる（ビットエラー）頻度がＮＯＲ型フラッシュメモリに比べて大きい。このため、ＮＡＮＤ型フラッシュメモリでは、ビットエラーの出現に備えてＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）が使用される。簡単なＥＣＣとして、スマートメディアで使用されているハミングコードが例示される。このＥＣＣは１ビット訂正、及び２ビットランダムエラー検出の能力がある。通常、ＥＣＣによる不良判定はＥＣＣ回路に例示される専用のハードウェア上で実現される。
【０００６】
一方、ＮＡＮＤ型フラッシュメモリを用いて起動処理を行う技術が、特開２００５−２１５８２４号公報に記載されている（特許文献１参照）。特許文献１に記載の技術では、同一のブートプログラムをＮＡＮＤ型フラッシュメモリ内の複数のブロックに格納し、ブートプログラムが読出されているブロックが不良ブロックである場合、他のブロックの先頭ページからブートプログラムを読み直してエラーを回避する。このように、特許文献１に記載の半導体装置では、ブートプログラムの読み出し先のブロックとして、他のブロックを予備的に用いることで、不良ブロックが存在した場合でも安定的に起動処理が実現できる。
【特許文献１】特開２００５−２１５８２４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の技術による半導体装置は、アドレスを指定するＣＰＵと、指定されたアドレスに基づきフラッシュメモリからデータを取得するフラッシュメモリコントローラを備える。ここで、フラッシュメモリ内には同一のブートプログラムが格納された複数のブロックが設けられる。ＣＰＵによって、あるブロックから読み出されたデータは、フラッシュメモリコントローラ内のＥＣＣ回路によって不良判定が行われる。この際、不良であると判定されると、フラッシュメモリコントローラ内のアドレス補正回路によって、指定アドレスが他のブロック内の先頭アドレスに変更される。フラッシュメモリコントローラは、変更されたアドレスに応じて他のブロックの先頭アドレスからブートプログラムを取得して、ＣＰＵに転送する。
【０００８】
例えば、各ブロックが第０ページから第３１ページで構成されている第１ブロック〜第３ブロックに、同一のブートプログラムが格納されている場合について詳細を示す。ＥＣＣ回路において、第１ブロックの例えば第５ページから読み出されたデータが不良であると判定されると、アドレス補正回路によって指定アドレスが第２ブロックの第０ページの先頭アドレスに変更される。フラッシュメモリコントローラは変更されたアドレスに従って、第２ブロックの第０ページから順にブートプログラムを読み出す。ここで、第２ブロックの例えば第１０ページから読み出されたデータが不良である場合、アドレス補正回路は、第３ブロックの第０ページに指定アドレスを変更する。同様にフラッシュメモリコントローラは、変更された指定アドレスに従い、第３ブロックの第０ページから順にブートプログラムを読み出す。しかし、最終の第３ブロックから読み出されたデータが不良である場合、特許文献１に記載のアドレス補正回路は、アドレスを変更（ブロックを変更）することができずブートプログラムを取得することができない。
【０００９】
このように、特許文献１に記載の技術では、ブロック内にある不良領域をブロック単位で回避している。このため、ブートプログラムの格納用として用意した全てのブロックの各々に１つでも不良ページが存在すると、ブート処理は実行されなくなってしまう。
【課題を解決するための手段】
【００１０】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を括弧付きで用いて、［課題を解決するための手段］を説明する。この番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］の記載との対応関係を明らかにするために付加されたものであるが、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１１】
本発明による半導体装置（１００Ａ、１００Ｂ、１００Ｃ）は、同一のブートプログラムがそれぞれに格納された複数の格納領域（２０１）を備えるメモリ（２００）に対し、アクセス制御を行う半導体装置である。本発明に係る複数の格納領域（２０１）の各々には、ブートプログラムが複数のプログラムデータとして格納されることが好ましい。本発明による第１の態様から第３の態様における半導体装置（１００Ａ、１００Ｂ、１００Ｃ）は、格納領域（２０１）から複数のプログラムデータの各々を読み出すメモリコントローラ（２）と、読み出されたプログラムデータの不良判定を行う不良判定回路（３３Ａ、３３Ｂ、３３Ｃ）とを具備する。メモリコントローラ（２）は、読み出されたプログラムデータが不良判定回路（３３Ａ、３３Ｂ、３３Ｃ）において不良と判定される場合、不良と判定されたプログラムデータが格納された格納領域（２０１）とは異なる格納領域（２０１）から、不良と判定されたプログラムデータに対応するプログラムデータを読み出す。詳細には、メモリコントローラ（２）は、ＣＰＵ（４）から指定されたプログラムデータを格納領域（２０１）から読み出す。この際、不良判定回路（３３Ａ、３３Ｂ、３３Ｃ）において不良と判定されると、不良と判定されたプログラムデータが格納された格納領域（２０１）とは異なる格納領域（２０１）から、指定されたプログラムデータと同一のプログラムデータを読み出す。
【００１２】
ここで、本発明に係る複数の格納領域（２０１）の各々はブートプログラムの複数のプログラムデータをそれぞれ格納する複数の単位格納領域を備えることが好ましい。この際、本発明に係るメモリコントローラ（２）は、複数の単位格納領域（２０２）のそれぞれからプログラムデータを読み出す。読み出されたプログラムデータが不良判定回路（３３Ａ、３３Ｂ、３３Ｃ）において不良と判定される場合、メモリコントローラ（２）は、不良と判定されたプログラムデータが格納された格納領域（２０１）とは異なる格納領域の単位格納領域（２０２）から、ＣＰＵ（４）によって指定されたプログラムデータを読み出す。
【００１３】
システムにおいて起動処理が行われる際、半導体装置（１００Ａ、１００Ｂ、１００Ｃ）は、メモリ（２００）からブートプログラムをシーケンシャルに読み出す。この際、プログラムデータが書き込まれた領域に不良が発生し、プログラムデータを読み取ることができない場合がある。本発明の半導体装置（１００Ａ、１００Ｂ、１００Ｃ）によれば、上述のように不良と判定されたプログラムデータが格納されたデータ格納領域（２０１）内の単位格納領域（２０２）を回避して、他の格納領域（２０１）の対応する単位格納領域（２０２）から、ＣＰＵ（４）によって指定されたプログラムデータと同一のプログラムデータを取得できる。このため、安定した起動処理を実現することができる。
【００１４】
又、ＣＰＵ（４）から指定されたプログラムデータには、アドレス（１０１）が対応付けられていることが好ましい。この場合、第１から第３の態様に係る半導体装置（１００Ａ、１００Ｂ、１００Ｃ）はアドレス補正回路（１Ａ、１Ｂ、１Ｃ）を更に具備する。アドレス補正回路（１Ａ、１Ｂ、１Ｃ）は、ＣＰＵ（４）から指定されるアドレス（１０１）を読み出し先のアドレスとしてメモリコントローラ（２）に指定するとともに、読み出し先の格納領域をメモリコントローラ（２）に指定する。メモリコントローラ（２）は、読み出し先のアドレスに対応するプログラムデータを読み出し先の格納領域（２０１）から読み出す。詳細には、複数の単位格納領域（２０２）のそれぞれにアドレス（１０１）が対応付けられ、同一アドレス（１０１）に対応する単位格納領域（２０２）に同一のプログラムデータが格納されることが好ましい。アドレス補正回路（１Ａ、１Ｂ、１Ｃ）は、ＣＰＵ（４）から指定されるアドレス（１０１）を読み出し先のアドレスとしてメモリコントローラ（２）に指定するとともに、読み出し先の格納領域をメモリコントローラ（２）に指定する。メモリコントローラ（２）は、読み出し先の格納領域における読み出し先のアドレスに対応する単位格納領域（２０２）からプログラムデータを読み出す。ここで、アドレス補正回路（１Ａ、１Ｂ、１Ｃ）は、ＣＰＵ（４）から指定されるアドレス（１０１）を保持することが好ましい。読み出されたプログラムデータが不良判定回路（３３Ａ、３３Ｂ、３３Ｃ）において不良と判定される場合、アドレス補正回路（１Ａ、１Ｂ、１Ｃ）は、不良と判定されたプログラムデータが格納された格納領域（２０１）とは異なる格納領域を読み出し先の格納領域として指定し、保持するアドレス（１０１）を読み出し先のアドレスとして指定する。
【００１５】
ここで本発明に係るメモリ（２００）は、ＮＡＮＤ型フラッシュメモリであることが好ましい。この際、複数の格納領域（２０１）のそれぞれは、複数の単位格納領域（２０２）である複数のページを備えるブロックである。ＮＡＮＤ型フラッシュメモリは、ＮＯＲ型フラッシュメモリより低価格、低面積であるが、不良率は比較的大きい。又、プログラムデータは、ページ毎にシーケンシャルに読み出される。このため、本発明に係る半導体装置を適用してＮＡＮＤ型フラッシュメモリに格納されたブートプログラムを利用すると、低コストで安定した起動処理が実現できる。又、この場合、不良判定回路（３３）は、ページ内に格納されるＥＣＣを用いてプログラムデータの不良判定を行うことが好ましい。
【発明の効果】
【００１６】
本発明による半導体装置、及び起動方法によれば、メモリ内のデータを安定してシーケンシャルに読み出すことができる。
【００１７】
又、メモリ内の不良領域を回避して、データを取得することができる。
【００１８】
更に、安定的な起動処理を実行できる。
【００１９】
更に、不良領域回避によるデータの読み出し速度の低下を抑制できる。
【発明を実施するための最良の形態】
【００２０】
以下、添付図面を参照して、本発明による半導体装置、及び起動方法の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示している。尚、同一又は類似の構成要素については、その説明を省略する。又、複数の構成要素には同一符号に追い番が付与され、それぞれを区別せず総称して説明する時は、追い番を付与しない符号を用いて説明する。実施の形態として、ＮＡＮＤ型フラッシュメモリに格納されるブートプログラムを読み出す半導体装置を一例として説明する。
【００２１】
１．第１の実施の形態
第１の実施の形態における本発明による半導体装置は、同一のブートプログラムが格納された複数のブロック２０１を備えるＮＡＮＤ型フラッシュメモリ（以下、フラッシュメモリ２００と称す）を具備し、読み出しデータのエラー検出に応答して他のブロック２０１の同一ページから当該データの再読み出しを実行する。又、最終ブロックにおいて読み出しデータのエラーが検出されると、最初に指定したブロックのエラーが発生したページと同一ページからデータの読み出しを再開する。以下、図１から図５を参照して第１の実施の形態における半導体装置の詳細を説明する。
【００２２】
（構成）
図１は、本発明による半導体装置の第１の実施の形態における構成図である。図１を参照して、本発明による半導体装置は、起動処理を実行するマイクロコンピュータ１００Ａと、起動処理を実行するためのブートプログラムが格納されるフラッシュメモリ２００とを具備する。
【００２３】
マイクロコンピュータ１００Ａは、相互に内部バスで接続されるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４、アドレス補正回路１Ａ、フラッシュメモリコントローラ２、ＥＣＣ回路３Ａを具備する。マイクロコンピュータ１００Ａは、同一のＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ）チップ上に形成されることが好ましい。又、マイクロコンピュータ１００Ａとフラッシュメモリ２００とが同一ＩＣチップに搭載されていても構わない。ＣＰＵ４は、システムの起動時に内部バスを介してフラッシュメモリ２００にアクセスし、フラッシュメモリ２００内のブートプログラムを取得して起動処理を実行する。フラッシュメモリコントローラ２は、アドレス補正回路１Ａから指定されたアドレス１０１やブロック番号１０３に基づいてフラッシュメモリ２００を制御し、フラッシュメモリ２００内のブートプログラムデータを取得する。ＥＣＣ回路３Ａは、フラッシュメモリ２００から取得したブートプログラムデータの不良判定を実行する。アドレス補正回路１Ａは、フラッシュメモリコントローラ２に対して、データ１０４の読み出し先のブロック及びページ２０２を指定する。この際、アドレス補正回路１Ａは、ＣＰＵ４から指定されたアドレス１０１を保持し、このアドレス１０１に対応するページ２０２を読み出し先のページとして指定する。又、アドレス補正回路１Ａは、ＥＣＣ回路３Ａにおけるデータ１１４の不良判定の結果に応じて、データ１０４の読み出し先ブロックを決定する。
【００２４】
ここで、図２及び図３を参照して、本実施の形態におけるフラッシュメモリ２００の構造を説明する。図２は、フラッシュメモリ２００内の状態を示す構成図である。図２を参照して、フラッシュメモリ２００は、複数のブロック２０１−１〜２０１−ｎを有し、所定のブロック、例えばブロック２０１−１〜２０１−３の各々に、同一のブートプログラムが格納される。又、後続のブートプログラム２０１−４〜２０１−ｎには、その他のプログラムやデータが格納される。ブロック２０１−１〜２０１−ｎにはそれぞれブロック番号１０３が割り当てられている。ここでは、ブロック２０１−１〜２０１−ｎの追い番に対応する番号がブロック番号１０３として付与される。尚、本実施の形態では、同一のブートプログラムが格納されるブロックを３つとしたがこの限りではない。
【００２５】
図３（ａ）は、ブロック２０１の構成を示す構成図である。図３（ａ）を参照して、ブロック２０１は、ＮＡＮＤフラッシュメモリの一括消去の単位であり、３２ページ（１６Ｋバイト）の記憶領域であるページ２０２−０〜２０２−３１を備える。ページ２０２−０〜２０２−３１には、それぞれ０から３１のアドレス１０１が割り当てられている。ＮＡＮＤ型フラッシュメモリに対するデータの読み書きは、ページ２０２単位（５２８（５１２＋１６）バイト）で実行される。ページ２０２は、５１２バイトのデータ１０４が格納されるデータ部と、１６バイトの冗長部データ１１３が格納される冗長部とを有している。
【００２６】
図３（ｂ）はページ２０２に格納されるデータ１０４（本実施の形態ではブートプログラムデータ）の構造を示す構成図である。又、図３（ｃ）は、ページ２０２に格納される冗長部データ１１３の構造を示す構成図である。図３（ｂ）を参照して、データ１０４は、それぞれ１２８バイトのデータ１１４−１〜１１４−４を有する。図３（ｃ）を参照して、冗長部データは、それぞれ４バイトのＥＣＣ２１０−１〜２１０−４を有する。ここで、ＥＣＣ２１０は、ＥＣＣデータやその他の管理情報を含む。ＥＣＣ回路３Ａは、データ１１４−１〜１１４−４に対する不良判定を、それぞれに対応するＥＣＣ２１０−１〜２１０−４を参照して実行する。
【００２７】
図１を参照して、第１の実施の形態におけるＥＣＣ回路３Ａは、ＥＣＣバッファ３１とデータバッファ３２と不良判定回路３３Ａとを備える。ＥＣＣバッファ３１は、フラッシュメモリ２００から読み出された冗長部データ１１３を格納する。データバッファ３２は、フラッシュメモリ２００から読み出された１２８バイトのデータ１１４を格納する。不良判定回路３３Ａは、データバッファ３２から１２８バイトのデータ１１４を抽出して、抽出したデータ１１４に対応するＥＣＣ２１０によってデータ１１４の不良判定を実行する。又、ＥＣＣ回路３Ａは、訂正回路（図示なし）を含み、訂正可能なエラー（ＣＥ：Ｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）を検出するとエラー訂正を実行する。不良判定回路３３Ａは、データ１１４が訂正不可能な不良（ＵＣＥ：Ｕｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）を含むと判定するとアドレス補正回路１Ａに不良通知信号１０５Ａを発行する。又、不良を含まないと判定すると、データ１１４をＲＡＭ５に格納する。ＲＡＭ５は、１ページ分のデータ１０４（データ１１４−１〜１１４−４）が格納されると、ＣＰＵ４に出力する。以下、不良と判定されたデータが格納されていたページ２０２を不良ページと称す。
【００２８】
第１の実施の形態におけるアドレス補正回路１Ａは、フラッシュメモリコントローラ２に対してデータの読み出し先のページ及びブロックを指定するアドレス指定部１０Ａと、ＥＣＣ回路３Ａにおける不良判定の結果に基づきデータ１０４の読み出し先ブロックを決定するブロック指定部２０Ａとを具備する。
【００２９】
アドレス指定部１０Ａは、アドレスレジスタ１１と、ブロックカウンタ１２Ａと、アドレス指定回路１３とを備える。アドレスレジスタ１１は、ＣＰＵ４から指定されるアドレス１０１を保持する。ここで、アドレス１０１は読み出し先のページ２０２のスタートアドレスである。ブロックカウンタ１２Ａは、データの読み出し先ブロックとして指定されるブロック２０１のブロック番号１０３をカウントする。詳細には、ブロックカウンタ１２Ａは、ブロック指定部２０Ａから発行されるブロック指定信号１０７Ａに応答して、ブロック番号１０３をインクリメントする。又、ブロック番号が所定の値（例えばブロック番号１０３＝３）を示す時、ブロック指定信号１０７Ａに応答して初期値（例えば、ブロック番号＝１）にリセットされる。
【００３０】
アドレス指定回路１３は、データの読み出し先のページ２０２を指定するアドレス１０１とブロック番号１０３とに基づき、読み出し先となるブロック２０１及びページ２０２をフラッシュメモリコントローラ２に指定する。詳細には、ブロックカウンタ１２Ａが示すブロック番号１０３と、アドレスレジスタ１１に格納されたアドレス１０１を組み合わせたアドレス指定信号１０９をフラッシュメモリコントローラ２に発行する。フラッシュメモリコントローラ２は、アドレス指定信号１０９に基づいたブロック２０１のページ２０２を読み出し先としてフラッシュメモリ２００にアクセスする。
【００３１】
ブロック指定部２０Ａは、ブロック指定回路２１Ａと遷移回数カウンタ２２とを備える。遷移回数カウンタ２２は、同一アドレスの不良ページを回避するために読み出し先のブロックを遷移した回数（遷移回数１０６）をカウントする。すなわち、遷移回数１０６とは、ブートプログラム格納用ブロック２０１−１〜２０１−３において、同一アドレスの不良ページの個数を示す。詳細には、遷移回数カウンタ２２は、ＥＣＣ回路３Ａから発行される不良通知信号１０５Ａに応答して遷移回数１０６をインクリメントする。ここで、遷移回数カウンタ２２の初期値は０（遷移回数１０６＝０）であり、ＲＡＭ５からデータ１０４が出力されると初期値にリセットされる。ブロック指定回路２１Ａは、遷移回数カウンタ２２の示す遷移回数１０６に応じて、ブロックカウンタ１２Ａを制御して読み出し対象のブロック２０１を決定する。この際、同一ブートプログラムが格納されたブロック２０１−１〜２０１−３の同一ページ２０２の全てが不良ページと判定された場合、ブロック指定回路１ＡはＥＲＲ信号１１５をＣＰＵ４に発行して、起動処理を中止する。詳細には、ブロック指定回路２１Ａは、遷移回数の上限値を示す最大遷移回数ＴＭを保持し、遷移回数１０６と最大遷移回数ＴＭが一致しない場合、ブロックカウンタ１２Ａをインクリメントするためのブロック指定信号１０７Ａを発行する。又、遷移回数１０６と最大遷移回数ＴＭが一致する場合、ＥＲＲ信号１１５をＣＰＵ４に発行する。ここでブートプログラム格納用のブロックは３つであるので、最大遷移回数ＴＭは３となる。
【００３２】
フラッシュメモリコントローラ２は、アドレス指定信号１０９に応答して読み出し先のページを指定するアドレス及びブロック番号を含むアドレス指定信号１１０をフラッシュメモリ２００に発行する。又、アドレス指定信号１１０とともにフラッシュメモリ２００からデータをリードするためのリードコマンド１１１をフラッシュメモリ２００に発行する。フラッシュメモリ２００は、アドレス指定信号１１０で指定されたブロック番号１０３に対応するブロック２０１のアドレス１０１に対応するページ２０２内からデータ１０４及び冗長部データ１１３を取り出しフラッシュメモリコントローラ２に出力する。この際、フラッシュメモリ２００は、ページ２０２内のデータ１１４−１〜１１４−４を順にＥＣＣ回路３Ａに出力する。
【００３３】
以上のように第１の実施の形態におけるアドレス補正回路１Ａは、読み出し先のページから取得したデータが不良である場合、データの読み出し先ページを他のブロックにおける同一アドレスのページに遷移する。じ後、アドレス補正回路１Ａは、遷移後のブロックを読み出し先ブロックとして指定してデータの読み出しを継続する。又、アドレス補正回路１Ａは、不良ページを検出する毎にデータの読み出し先ブロックを順に遷移し、最終ブロックにおいて不良ページが検出されると、再び最初のブロックを読み出し先ブロックとして指定する。この際、全てのブロックにおける同一アドレスのページが不良ページである場合、アドレス補正回路１ＡはＥＲＲ信号１１５をＣＰＵ４に発行し、起動処理を停止する。
【００３４】
（動作）
以下、図４及び図５を参照して、本発明による半導体装置の第１の実施の形態における起動処理の動作の詳細を説明する。図４は、本発明による半導体装置の第１の実施の形態におけるブートプログラムの読み出し処理の動作を示すフロー図である。又、図５は、本発明による半導体装置の第１の実施の形態における起動処理の概念図である。本実施の形態では、ブロック２０１−１〜２０１−３にブートプログラムが格納されているものとして説明する。
【００３５】
図４を参照して、システムの起動時（例えば、システムの電源オン時や再起動時）にリセット信号が入力されるとＣＰＵ４は、内部バスを介してブートプログラムが格納されているフラッシュメモリ２００にアクセスする（ステップＳ１Ｙｅｓ）。ＣＰＵ４は、バス状態信号ＲＥＡＤＹをネゲートする（ステップＳ２）。これによって、上位システムからの内部バスに対するアクセスがブロックされる。
【００３６】
次に、ＣＰＵ４は、アドレス補正回路１Ａに対し、ブートプログラムの読み出し先ページのアドレス１０１を指定する。アドレス指定回路１Ａでは、指定されたアドレス１０１がアドレスレジスタ１１に格納される。アドレス指定回路１３は、アドレス１０１の指定に応答してアドレスレジスタ１１及びブロックカウンタ１２Ａを参照して、フラッシュメモリコントローラ２に対しブートプログラムの読出し先のブロック及びアドレスを指定する（ステップＳ３）。詳細には、当初、ＣＰＵ４からブロックの先頭ページのアドレス１０１＝０がアドレスレジスタ１１に格納される。ブロックカウンタ１２Ａは初期値としてブロック番号１０３＝１となっている。アドレス指定回路１３は、ブロック番号１０３＝１と、アドレス１０１＝０を含むアドレス指定信号１０９をフラッシュメモリコントローラ２に発行して、データ１０４の読み出し先のページ２０２（ブロック２０１−１のページ２０２−０）を指定する。
【００３７】
フラッシュメモリコントローラ２は、アドレス指定信号１０９に応答して、アドレス指定信号１１０及びリードコマンド１１１をフラッシュメモリ２００に発行する。フラッシュメモリ２００は、アドレス指定信号１１０で指定されたアドレス１０１及びブロック番号１０３に対応するページ２０２内のデータ１０４及び冗長部データ１１３を、フラッシュメモリコントローラ２を介してＥＣＣ回路３Ａに出力する。詳細には、フラッシュメモリ２００は、アドレス指定信号１１０に基づき、ブロック２０１−１におけるページ２０２−０を選択する。又、リードコマンド１１１に応答してページ２０２−０内のデータ１１４−１及び冗長部データ１１３をフラッシュメモリコントローラ２に出力する。冗長部データ１１３はＥＣＣ２１０−１〜２１０−４を含む。フラッシュメモリコントローラ２は、出力された冗長部データ１１３をＥＣＣバッファ３１に格納し（ステップＳ４）、データ１１４−１をデータバッファ３２に格納する（ステップＳ５）。
【００３８】
不良判定回路３３Ａは、ＥＣＣバッファ３１内の冗長部データ１１３を読み出す。次に、プログラムデータである１２８バイトのデータ１１４−１をデータバッファ３２から読み出す。不良判定回路３３Ａは、データ１１４−１に対応するＥＣＣ２１０−１を用いてデータ１１４−１に対する不良判定を行う（ステップＳ６）。ここで実施される不良判定は、データ１１４−１が訂正不可能なエラー（ＵＣＥ：Ｕｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）を含むか否かの判定（ステップＳ７）と、訂正可能なエラー（ＣＥ：Ｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）を含むか否かの判定（ステップＳ１２）が実行される。
【００３９】
ステップＳ７において、データ１１４−１がＵＣＥを含まないと判定される場合、ステップ１２に移行する（ステップＳ７  ＮＯ）。ステップＳ１２において、ＣＥを含むと判定される場合（ステップＳ１２Ｙｅｓ）、データ１１４−１に対しエラー訂正が施されてＲＡＭ５に格納される（ステップＳ１３、Ｓ１４）。ステップＳ１２において、訂正可能なエラーを含まないと判定されると、不良判定回路３３Ａは、データ１１４−１をＲＡＭ５に格納する（ステップＳ１４）。
【００４０】
ステップＳ７において、データ１１４−１がＵＣＥを含むと判定されると、不良判定回路３３Ａは不良通知信号１０５Ａをアドレス補正回路１Ａに発行し、遷移回数カウンタ２２をインクリメントする（ステップＳ８）。ブロック指定回路２１Ａは、遷移回数カウンタ２２を参照して遷移回数１０６が最大遷移回数ＴＭと一致しているかを判定する（ステップＳ９）。ブロック指定回路２１Ａは遷移回数カウンタ２２が示す遷移回数１０６が最大遷移回数ＴＭ（ここではＴＭ＝３）と一致する場合（ステップＳ９Ｙｅｓ）、ＥＲＲ信号１１５をＣＰＵ４に出力する（ステップＳ１０）。すなわち、全てのブロック２０１−１〜２０１−３における同一アドレスのページ２０２が不良ページである場合、ブロック指定回路２１ＡはＥＲＲ信号１１５をＣＰＵ４に出力して、ブートプログラムのリード動作を停止させる。
【００４１】
遷移回数１０６が最大遷移回数ＴＭと一致しない場合（ステップＳ９Ｎｏ）、ブロック指定回路２１Ａは、ブロックカウンタ１２Ａを更新し、読み出し先のブロックとして次のブロック２０１を指定する。ここでは、ブロック指定信号１０７Ａを発行してブロックカウンタ１２Ａをインクリメントしてブロック番号１０３を更新する。アドレス指定回路１３は、ブロックカウンタ１２Ａが更新されると、更新されたブロック番号１０３とアドレスレジスタ１１内のアドレス１０１とに従ってデータの読み出し先のアドレスを補正する（ステップＳ３）。詳細には、アドレス指定回路１３は、更新されたブロック番号１０３（例えば、ブロック番号＝２）と、アドレスレジスタ１１内のアドレス１０１（例えば、アドレス＝０）に基づき、読み出し先ページをブロック２０１−２のページ２０２−０に指定したアドレス指定信号１０９を発行する。じ後、ステップＳ４〜Ｓ６に移行する。すなわち、ブロック２０１−２のページ２０２−０からデータ１１４−１及び冗長部データ１１３を取得して、不良判定回路３３Ａにてデータ１１４−１の不良判定が実行される。
【００４２】
ステップＳ１４において、データ１１４−１がＲＡＭ５に格納されるとステップ５に移行し、不良判定回路３３Ａは引き続き、ブロック２０１−２のページ２０２−０内からデータ１１４−２を取得し、対応するＥＣＣ２１０−２を参照して不良判定を実行する。この際、エラーがない場合、データ１１４−２はＲＡＭ５に格納される（ステップＳ５〜Ｓ１４）。以上のように、ステップＳ５〜ステップＳ１４を繰り返し、ブロック２０１−２のページ２０２−０内の全てのデータ１１４−１〜１１４−４がＲＡＭ５に格納される。１ページ分のデータ１０４（データ１１４−１〜１１４−４）がＲＡＭ５に読み込まれると（ステップＳ１５  Ｙｅｓ）、バス状態信号がアサートされ（ステップＳ１６）、ＲＡＭ５内のデータ１０４はＣＰＵ４に出力される（ステップＳ１７）。ＲＡＭ５からデータ１０４が出力されると遷移回数カウンタ２２は初期値にリセットされる。
【００４３】
以上のように、本発明によるマイクロコンピュータ１００Ａは、ＣＰＵ４から指定されたアドレスを保存し、そのアドレスに対応するページからブートプログラムデータを読み出し、ＥＣＣ制御単位でそのデータの不良判定を行う。この際、不良ページが検出されると、読み出し先のブロックを遷移して、保持しているアドレス１０１に対応するページ２０２から再度ブートプログラムデータを読み出す。又、全てのブロックにおいて同一ページが不良ページである場合、ＥＲＲ信号１１５が発行され、ＣＰＵ４の起動処理は停止される。
【００４４】
ここで、ブートプログラムがブロック２０１の複数ページ（例えばブロック内の全てのページ２０２−０〜２０２−３１）に格納されている場合、ＲＡＭ５からデータ１０４を受け取ったＣＰＵ４は、次のページに対応するアドレス１０１をアドレス補正回路１Ａに指定する。アドレスレジスタ１１は、指定された新たなアドレス１０１を保持し、マイクロコンピュータ１００Ａは上述のステップＳ３以降の動作に移行する。この際、アドレス指定回路１３は、前ページからデータを読み取る際にブロック指定部１２によって指定されたブロック番号１０３と、ＣＰＵ４によって更新されたアドレス１０１に基づき、データ１０４の読み出し先のページ２０２を指定する。以上のように、マイクロコンピュータ１００Ａはブロック２０１−１〜２０１−３のいずれかにおけるページ２０２−０〜２０２−３１からブートプログラムをシーケンシャルに読み出し、起動処理を実行することができる。
【００４５】
図５は、本発明による半導体装置の第１の実施の形態におけるブートプログラムデータの読み出し処理の概念図である。図５は、左から順にブロック２０１−１、２０１−２、２０１−３、及びホストＣＰＵ４から見たフラッシュメモリ（ＲＯＭ）のイメージ、すなわち、ＣＰＵ４に読み込まれたブートプログラムデータの読み出し先ブロックとページとの対応関係を示す。以下、図４及び図５を参照して第１の実施の形態におけるブートプログラムデータの読み出し先ページの変更例（ブロックの遷移例）を示す。
【００４６】
起動処理が開始されると、ステップＳ２〜Ｓ１７を繰り返し、ブロック２０１−１のページ２０２−０からプログラムデータがＣＰＵ４に読み込まれる。不良判定回路３３Ａによってブロック２０１−１のページ２０２−１０が不良ページであると判定されると、ステップＳ１１においてアドレス補正回路１Ａは、読み出し先のブロックをブロック２０１−２に補正する。続いて、ステップＳ２〜Ｓ１７を繰り返し、ブロック２０１−２のページ２０２−１０から順にプログラムデータがＣＰＵ４に読み込まれる。ブロック２０１−２のページ２０２−１５が不良ページと判定されると、アドレス補正回路１Ａは読み出し先のブロックをブロック２０１−３に補正する。続いてステップＳ２〜Ｓ１７を繰り返し、ブロック２０１−３のページ２０２−１５から順にプログラムデータがＣＰＵ４に読み込まれる。
【００４７】
最終ブロックであるブロック２０１−３のページ２０２−２５が不良ページと判定されると、アドレス補正回路１Ａは、最初に読み出し先ブロックとして指定したブロック２０１−１を次の読み出し先ブロックとして指定する。詳細には、ステップ１１において、ブロックカウンタ１２Ａがブロック番号＝３を示しているとき、ブロック指定回路２１Ａからブロック指定信号１０７Ａが発行されると、ブロックカウンタ１２Ａは初期値（最初のブロック番号、ここではブロック番号＝１）にリセットされる。続くステップＳ３においてアドレス指定回路１３は、アドレスレジスタ１１に格納されたアドレス１０１（例えば、アドレス＝２５）と、ブロックカウンタ１２Ａの示すブロック番号１０３（ここではブロック番号＝１）に基づいたアドレス指定信号１０９を発行する。以下、ステップＳ４に移行し、ＣＰＵ４はブロック２０１−１のページ２０２−２５からページ２０２−３１まで順にプログラムデータを読み出していく。
【００４８】
以上のように、マイクロコンピュータ１００ＡのＣＰＵ４は、ページ２０２−０〜２０２−３１に格納されたブートプログラムをフラッシュメモリ２００から読み出すことができる。この際、ＣＰＵ４は、不良ページの検出毎に読み出し先のブロックを変更してブートプログラムデータを読み出すことができる。図５を参照して、ＣＰＵ４から見たブートプログラムデータの読み出し先は、ブロック２０１−１のページ２０２−０〜２０２−９及びページ２０２−２５〜３１、ブロック２０１−２のページ２０２−１０〜２０２−１４、ブロック２０１−３のページ２０２−１５〜２０２−２４となる。
【００４９】
ここで、全てのブロック２０１−１〜２０１−３の同一ページ２０２（例えばページ２０２−５）が不良ページである場合について説明する。ブロック２０１−１のページ２０２−５が不良ページであると判定されると、遷移回数カウンタ２２はインクリメントされて遷移回数１０６＝１となる。ブロック指定回路２１Ａは、遷移回数１０６が最大遷移回数ＴＭ＝３と不一致であるためブロック指定回路２１Ａは、ブロックカウンタ１２Ａをインクリメントして読み出し先ブロックをブロック２０１−２に遷移する。続いて、ブロック２０１−２のページ２０２−５が不良ページであると判定されると、遷移回数カウンタ２２はインクリメントされて遷移回数１０６＝２となる。遷移回数１０６が最大遷移回数ＴＭ＝３と不一致であるためブロック指定回路２１Ａは、ブロックカウンタ１２Ａをインクリメントして読み出し先ブロックをブロック２０１−３に遷移する。続いて、ブロック２０１−３のページ２０２−５が不良ページであると判定されると、遷移回数カウンタ２２はインクリメントされて遷移回数１０６＝３となる。遷移回数１０６が最大遷移回数ＴＭ＝３と一致するため、ブロック指定回路２１ＡはＥＲＲ信号１１５をＣＰＵ４に発行して起動処理を停止する。
【００５０】
以上のように、本実施の形態におけるマイクロコンピュータ１００Ａによれば、同一ブートプログラムが格納された複数のブロック２０１において、全てのブロックに不良ページが存在していても、不良ページが同一アドレスに存在しない限り、正しくブートプログラムを読み出すことができる。このため、ＮＡＮＤ型フラッシュメモリ内に格納されたブートプログラムを利用して安定した起動処理が実現できる。尚、本実施の形態では、ＮＡＮＤ型フラッシュメモリからブートプログラムを読み出すことを一例として説明されたが、シーケンシャルに読み出されるデータやプログラムを読み出す半導体装置にも適用できる。
【００５１】
又、従来技術による起動処理では、不良ページを検出する毎にブートプログラムの読み出し先のブロックを順に変更しているが、全てのブロックを一巡すると処理を停止してしまう。しかし、本発明によるマイクロコンピュータ１００Ａによれば、不良ページの検出毎に読み出し先ブロックを変更し、一巡しても最初のブロックからプログラムデータを読み出すことができる。このため、ブートプログラムを格納するために用意するブロック数を少なくでき、メモリ資源を有効に活用することができる。
【００５２】
ここで、ＮＡＮＤフラッシュメモリに格納されたブートプログラムを利用して起動できない確率について、特許文献１に記載の技術と本発明によるマイクロコンピュータ１００Ａとを比較する。
【００５３】
（特許文献１による技術）
起動処理が停止する条件：Ｎ個のブロック全てに不良領域が存在する。
起動処理が停止する確率：１／（ｎＣｎ＋ｎＣｎ−１＋ｎＣｎ−２＋・・・＋ｎＣ２＋ｎＣ１）
例えば、ブートプログラム格納用のブロックを３個用意した場合、
起動処理が停止する確率は、１／（３Ｃ３＋３Ｃ２＋３Ｃ１）＝１／８＝１２．５％となる。
（本発明による半導体装置）
起動処理が停止する条件：Ｎ個のブロック全てに不良領域が存在し、且つ、その不良領域が同一ページである。
起動処理が停止する確率：１／３２Ｎ
例えば、ブートプログラム格納用のブロック（１ブロックは３２ページ）を３個用意した場合、
起動処理が停止する確率は、３２／３２３＝０．９８％となる。
【００５４】
以上のように、本発明による半導体装置は、従来技術に比べ、メモリ内の不良領域によって起動処理が停止する確率が格段に減少する。このため、不良率の比較的多いＮＡＮＤ型フラッシュメモリを利用しても安定した起動処理を実現することができる。又、メモリの製造過程において発生した不良のみならず、使用時にブートプログラムの書き換えによって生じた不良に対しても不良回避され得る。更に、不良検出時にブロックの遷移が行われるため、ブートプログラムの書き換えの信頼度が向上され得る。
【００５５】
２．第２の実施の形態
第２の実施の形態における本発明による半導体装置は、同一のブートプログラムが格納された複数のブロックを備えるＮＡＮＤ型フラッシュメモリを具備し、読み出しデータのエラー検出に応答して他のブロックの同一ページから当該データの再読み出しを実行する。第２の実施の形態における半導体装置は、主にブートプログラムデータの読み出し先として指定されるメインブロックＭＢと、メインブロックＭＢにおいて不良ページが検出されたときのみ、読み出し先として指定されるサブブロックＳＢとを遷移して不良回避を実行する。以下、図６から図８を参照して第２の実施の形態における半導体装置の詳細を説明する。
【００５６】
（構成）
図６は、本発明による半導体装置の第２の実施の形態における構成図である。図６を参照して、本発明による半導体装置は、起動処理を実行するマイクロコンピュータ１００Ｂと、起動処理を実行するためのブートプログラムが格納されるフラッシュメモリ２００とを具備する。マイクロコンピュータ１００Ｂは、同一のＩＣチップ上に形成されることが好ましい。又、マイクロコンピュータ１００Ｂとフラッシュメモリ２００とが同一ＩＣチップに搭載されていても構わない。第２の実施の形態におけるマイクロコンピュータ１００Ｂは、第１の実施の形態におけるアドレス補正回路１Ａ及びＥＣＣ回路３Ａに替えてアドレス補正回路１Ｂ及びＥＣＣ回路３Ｂを備える。参照符号が同一の構成は、第１の実施の形態と同様な構成及び動作であるので説明を省略する。又、第２の実施の形態におけるフラッシュメモリ２００では、同一のブートプログラムがブロック２０１−１及び２０１−２に格納されているものとする。
【００５７】
第２の実施の形態におけるアドレス補正回路１Ｂは、フラッシュメモリコントローラ２に対してデータの読み出し先のページ及びブロックを指定するアドレス指定部１０Ｂと、ＥＣＣ回路３Ｂにおける不良判定の結果に基づきデータの読み出し先ブロックを決定するブロック指定部２０Ｂとを具備する。アドレス補正回路１Ｂは、ＥＣＣ回路３Ｂにおけるデータの不良判定の結果に応じて、データの読み出し先ブロックを決定する。通常、アドレス補正回路１ＢはメインブロックＭＢをデータ１０４の読み出し先ブロックに指定するが、不良ページが検出されるとサブブロックＳＢを読み出し先ブロックとして指定する。又、サブブロックＳＢから１ページ分のデータ１０４を読み取ると、再度メインブロックＭＢを読み出し先ブロックに指定する。
【００５８】
アドレス指定部１０Ｂは、アドレスレジスタ１１と、ブロックカウンタ１２Ｂと、アドレス指定回路１３とを備える。ブロックカウンタ１２Ｂは、ブロック指定部２０Ｂから発行されるブロック指定信号１０７Ａ及び１０７Ｂに応答してブロック番号１０３を更新する。例えば、ブロックカウンタ１２Ｂは、ブロック指定信号１０７Ｂに応答してメインブロックＭＢのブロック番号にセットされ、ブロック指定信号１０７Ａに応答してサブブロックのブロック番号１０３にセットされる。詳細には、ブロックカウンタ１２Ｂは、ブロック指定信号１０７Ｂに応答して初期値にリセットされ、ブロック指定信号１０７Ａに応答してブロック番号がインクリメントされる。アドレス指定回路１３は、データ１０４の読み出し先のページ２０２を指定するアドレス１０１とブロックカウンタ１２Ｂが示すブロック番号１０３に基づくアドレス指定信号１０９をフラッシュメモリコントローラ２に発行する。フラッシュメモリコントローラ２は、アドレス指定信号１０９に対応するブロック２０１のページ２０２を読み出し先としてフラッシュメモリ２００にアクセスする。
【００５９】
ブロック指定部２０Ｂは、ブロック指定回路２１Ｂと遷移回数カウンタ２２とを備える。遷移回数カウンタ２２は、不良通知信号１０５Ａに応答して遷移回数１０６をカウントする。ブロック指定回路２１Ｂは、遷移回数カウンタ２２の示す遷移回数１０６、又はＥＣＣ回路３Ｂから発行されるデータ出力通知信号１０５Ｂに応じて、読み出し先のブロックを決定する。
【００６０】
ブロック指定回路２１Ｂは、ＥＣＣ回路３Ｂにおいて不良ページが検出されると、ブロック指定信号１０７Ｂをブロックカウンタ１２Ｂに発行する。ブロックカウンタ１２Ｂは、ブロック指定信号１０７Ａに応答してブロック番号１０３がインクリメントされる。又、ブロック２０１−１〜２０１−２における同一ページの全てが不良ページと判定された場合、ブロック指定回路２１ＢはＥＲＲ信号１１５をＣＰＵ４に発行して起動処理を中止する。詳細には、ブロック指定回路２１Ｂは、遷移回数の上限値を示す最大遷移回数ＴＭを保持し、遷移回数１０６と最大遷移回数ＴＭが一致する場合、ＥＲＲ信号１１５をＣＰＵ４に発行する。ここでブートプログラム格納用のブロック２０１はサブブロックＳＢとメインブロックＭＢの２つであるので、最大遷移回数ＴＭは２となる。
【００６１】
不良ページが検出され、遷移回数１０６と最大遷移回数ＴＭが一致しない場合、すなわち、メインブロックＭＢにおいて不良ページが検出された場合、ブロック指定回路２１ＢはサブブロックＳＢを読み出し先として指定する。この際、ブロック指定回路２１Ｂはブロック指定信号１０７Ａをブロックカウンタ１２Ｂに発行する。ブロックカウンタ１２Ｂは、ブロック指定信号１０７Ａに応答してブロック番号がインクリメントされる。
【００６２】
１ページ分のデータ１０４がＲＡＭ５に格納されると、ブロック指定回路２１Ｂは、次の読み出し先ブロックとしてメインブロックＭＢを指定する。詳細には、ＥＣＣ回路３Ｂは、ＲＡＭ５に１ページ分のデータ１１４−１〜１１４−４を出力すると、ブロック指定回路２１Ｂに対しデータ出力通知信号１０５Ｂを発行する。ブロック指定回路２１Ｂは、データ出力通知信号１０５Ｂに応答してブロック番号１０３を初期値にリセットするブロック指定信号１０７Ｂをブロックカウンタ１２Ｂに発行する。
【００６３】
ＥＣＣ回路３Ｂは、ＥＣＣバッファ３１、データバッファ３２、不良判定回路３３Ｂを備える。不良判定回路３３Ｂは、データバッファ３２から１２８バイトのデータ１１４を抽出して、取得したデータ１１４に対応するＥＣＣ２１０によってデータ１１４の不良判定を実行する。又、訂正回路を含み、ＣＥを検出するとエラー訂正を実行する。不良判定回路３３Ｂは、データ１１４がＵＣＥを含むと判定すると遷移回数カウンタ２２に不良通知信号１０５Ａを発行する。又、ＵＣＥを含まないと判定すると、データ１１４をＲＡＭ５に格納する。ここで、データ１１４−４をＲＡＭ５に格納する際、不良判定回路３３Ｂはブロック指定回路２１Ｂにデータ出力通知信号１０５Ｂを発行する。
【００６４】
以上のように第２の実施の形態におけるアドレス補正回路１Ｂは、読み出し先のページから取得したデータが不良である場合、データの読み出し先ページをメインブロックＭＢからサブブロックＳＢにおける同一アドレスのページに遷移する。アドレス補正回路１Ｂは、通常、メインブロックＭＢであるブロック２０１−１を読み出し先ブロックとして指定する。この間、不良ページが検出されると、サブブロックＳＢであるブロック２０１−２における、不良ページと同一アドレスのページ（ここでは、ページ２０２−１）に読み出し先を変更する。サブブロックＳＢからデータ１０４がＣＰＵ４に読み取られると、次の読み出し先としてメインブロックＭＢが指定され、メインブロックＭＢの不良ページ以降のページ２０２（ここでは、ページ２０２−２）からブートプログラムデータが読み出される。この際、サブブロックＳＢにおいて不良ページが検出されると、アドレス補正回路１ＢはＥＲＲ信号１１５をＣＰＵ４に発行し、起動処理を停止する。
【００６５】
（動作）
以下、図７及び図８を参照して、本発明による半導体装置の第２の実施の形態における起動処理の動作の詳細を説明する。図７は、本発明による半導体装置の第２の実施の形態における起動処理の動作を示すフロー図である。又、図８は、本発明による半導体装置の第２の実施の形態におけるブートプログラムの読み出し処理の概念図である。本実施の形態では、メインブロックＭＢとして設定されるブロック２０１−１とサブブロックＳＢとして設定される２０１−２に同一のブートプログラムが格納されているものとして説明する。尚、図面に記載の各ステップに付された参照番号で第１の実施の形態と同一のものは、同一の動作を示すため、その説明を省略する。
【００６６】
図７を参照して、システムの起動時（例えば、システムの電源オン時や再起動時）にリセット信号が入力されるとＣＰＵ４は、内部バスを介してブートプログラムが格納されているフラッシュメモリ２００にアクセスする。以降、第１の実施の形態と同様にステップＳ１からステップＳ１５までが繰り返され、ＣＰＵ４によって指定されたアドレス１０１に対応するページ２０２からデータ１０４がＲＡＭ５に読み込まれる。ブロック指定回路２１Ｂは、データ１０４（データ１１４−１〜１１４−４）がＲＡＭ５に格納されると、次の読み出し先としてブロック２０１−１（メインブロックＭＢ）を指定する（ステップＳ１８）。詳細には、不良判定回路３３Ｂは、データ１１４−４をＲＡＭ５に格納する際、データ出力通知信号１０５Ｂをブロック指定回路２１Ｂに発行する。ブロック指定回路２１Ｂは、データ出力信号１０５Ｂに応答してブロック指定信号１０７Ｂをブロックカウンタ１２Ｂに発行する。ブロックカウンタ１２Ｂは、ブロック指定信号１０７Ｂに応答してメインブロックＭＢのブロック番号１０３（ここではブロック２０１−１のブロック番号１０３＝１）にリセットされる。このため、次にＣＰＵ４から読み出し先として指定される次ページからブートプログラムを読み出す際、アドレス補正回路１ＢはメインブロックＭＢ（ブロック２０１−１）を読み出し先のブロックとして指定することができる。
【００６７】
１ページ分のデータ１０４がＲＡＭ５に読み込まれると（ステップＳ１５Ｙｅｓ）、バス状態信号がアサートされ（ステップＳ１６）、ＲＡＭ５内の１ページ分のデータ１０４はＣＰＵ４に出力される（ステップＳ１７）。ＲＡＭ５から１ページ分のデータ１０４がＣＰＵ４に出力されると遷移回数カウンタ２２は初期値にリセットされる。
【００６８】
以上のように、本発明によるマイクロコンピュータ１００Ｂは、ＣＰＵ４から指定されたアドレス１０１を保存し、そのアドレス１０１に対応するページからブートプログラムデータを読み出し、ＥＣＣ制御単位でそのデータの不良判定を行う。この際、その不良データが検出されると、読み出し先のブロックをメインブロックＭＢからサブブロックＳＢ遷移して、アドレス１０１に対応するページ２０２から再度ブートプログラムデータを読み出す。又、サブブロックＳＢの同一ページが不良ページである場合は、ＥＲＲ信号１１５が発行され、ＣＰＵ４はブート処理を停止する。更に、サブブロックＳＢから１ページ分のデータ１０４を読み出すと、データの読み出し先ブロックをメインブロックＭＢに変更する。
【００６９】
ここで、ブートプログラムがブロック２０１の複数ページ（例えばブロック内の全てのページ２０２−０〜２０２−３１）に格納されている場合、ＲＡＭ５からデータ１０４を受け取ったＣＰＵ４は、次のページに対応するアドレス１０１をアドレス補正回路１Ｂに指定する。アドレスレジスタ１１は指定された新たなアドレス１０１を保持し、マイクロコンピュータ１００Ｂは上述のステップＳ３以降の動作に移行する。このように、マイクロコンピュータ１００Ｂは、ページ２０２−０〜２０２−３１のアドレスを順に指定して、ブロック２０１−１又は２０１−２のページ２０２−０〜２０２−３１内のデータ１０４を読み出し、起動処理を実行する。
【００７０】
図８は、本発明によるマイクロコンピュータ１００Ｂの起動処理におけるブートプログラムデータの読み出し処理の概念図である。図８は、左から順にブロック２０１−１、２０１−２及びホストＣＰＵ４から見たフラッシュメモリ（ＲＯＭ）のイメージ、すなわち、ＣＰＵ４に読み込まれたブートプログラムデータの読み出し先ブロックとページとの対応関係を示す。以下、図７及び図８を参照して第２の実施の形態におけるブートプログラムデータの読み出し先ページの変更例（ブロックの遷移例）を示す。
【００７１】
起動処理が開始されると、ステップＳ２〜Ｓ１８を繰り返し、ブロック２０１−１のページ２０２−０から順にデータ１０４がＣＰＵ４に読み込まれる。ここで、ブロック２０１−１のページ２０２−１０とページ２０２−２０が不良ページであるとする。不良判定回路３３Ｂによってブロック２０１−１のページ２０２−１０が不良ページであると判定されると、アドレス補正回路１Ｂは、ステップＳ８〜Ｓ１１の動作を実行して読み出し先のブロックをブロック２０１−２に補正する。続いてステップＳ３に移行してブロック２０１−２のページ２０２−１０からデータ１０４がＣＰＵ４に読み込まれる。この際、ＲＡＭ５に２０２−１０内のデータ１０４が読み込まれると、ブロック指定回路２１Ｂは読み出し先ブロックをブロック２０１−１に変更する。
【００７２】
ページ２０２−１０からＣＰＵ４にデータ１０４が読み出されるとステップＳ２に移行し、ＣＰＵ４は、次のページ２０２−１１のアドレスをアドレス指定回路１Ｂに指定する。以降、ステップＳ２〜Ｓ１８を繰り返してブロック２０１−１のページ２０２−１１〜２０２−１９まで読み込まれる。ページ２０２−２０が不良であると判定されると、読み出し先のブロックが変更され、ブロック２０１−２のブロック２０１−２０からデータ１０４が読み込まれる。ＣＰＵ４にデータ１０４が読み込まれると、読み出し先がブロック２０１−１に変更される。同様にしてブロック２０１−１のページ２０２−２１〜２０２−３１まで順にデータ１０４がＣＰＵ４に読み込まれる。
【００７３】
以上のように、マイクロコンピュータ１００ＢのＣＰＵ４は、ページ２０２−０〜２０２−３１に格納されたブートプログラムをフラッシュメモリ２００から読み出すことができる。この際、ＣＰＵ４は、通常、メインブロックＭＢからブートプログラムデータを読み出すが、不良ページを検出する毎に読み出し先のブロックをサブブロックＳＢに変更してブートプログラムデータを読み出す。図８を参照して、ＣＰＵ４から見たブートプログラムデータの読み出し先は、ブロック２０１−１のページ２０２−０〜２０２−９、ページ２０２−１１〜２０２−１９、及びページ２０２−２１〜２０２−３１、ブロック２０１−２のページ２０２−１０及び２０２−２０となる。
【００７４】
本実施の形態におけるマイクロコンピュータ１００Ｂは、同一ブートプログラムが格納されたメインブロックＭＢとサブブロックＳＢを備え、メインブロックＭＢに不良ページが存在すると、サブブロックＳＢの同一ページからデータを取得して、メインブロックＭＢの不良ページを回避することができる。すなわち、本発明によるマイクロコンピュータ１００Ｂによれば、メインブロックＭＢとサブブロックＳＢの同一アドレスに不良ページが存在しない限り、正しくブートプログラムを読み出すことができる。このため、ＮＡＮＤ型フラッシュメモリ内に格納されたブートプログラムを利用して安定した起動処理が実現できる。尚、本実施の形態では、ＮＡＮＤ型フラッシュメモリからブートプログラムを読み出すことを一例として説明されたが、シーケンシャルに読み出されるデータやプログラムを読み出す半導体装置にも適用できる。
【００７５】
又、従来技術による起動処理では、不良ページを検出する毎にブートプログラムの読み出し先のブロックを順に変更しているが、全てのブロックを一巡すると処理を停止してしまう。しかし、本発明によるマイクロコンピュータ１００Ｂによれば、不良ページの検出毎に読み出し先ブロックをサブブロックに変更し、再びメインブロックからブートプログラムデータを読み出す。このため、ブートプログラムを格納するために用意するブロック数を少なくでき、メモリ資源を有効に活用することができる。
【００７６】
ブロック指定部２０Ｂは、ブロックカウンタ１２Ｂによってブロック番号１０３をインクリメントし、読み出し先のブロックを決定する。しかし、本実施の形態では、読み出し先として選択されるブロック２０１の数が２つである。このため、ブロック指定部２０Ｂは、読み出し先のブロックを選択するセレクタを具備する構成としても良い。
【００７７】
３．第３の実施の形態
第３の実施の形態における本発明による半導体装置は、同一のブートプログラムが格納された複数のブロックを備えるＮＡＮＤ型フラッシュメモリを具備し、読み出しデータのエラー検出に応答して他のブロックの同一ページから当該データの再読み出しを実行する。第３の実施の形態における半導体装置は、第２の実施の形態と同様に主にブートプログラムデータの読み出し先として指定されるメインブロックＭＢと、メインブロックＭＢにおいて不良ページが検出されたときのみ、読み出し先として指定されるサブブロックＳＢとを遷移して不良回避を実行する。又、第３の実施の形態における半導体装置は、メインブロックＭＢにおける不良ページの数をカウントする不良カウンタ２４と、不良ページの数に応じてサブブロックＳＢをメインブロックＭＢに変更するメインブロック指定回路２３を備える。更に、第３の実施の形態におけるサブブロックＳＢは複数設定され、サブブロックＳＢにおいて不良ページが検出されると、他のサブブロックＳＢが読み出し先のブロックとして指定され、起動処理が継続される。以下、図９から図１２を参照して第３の実施の形態における半導体装置の詳細を説明する。
【００７８】
（構成）
図９は、本発明による半導体装置の第３の実施の形態における構成図である。図９を参照して、本発明による半導体装置は、起動処理を実行するマイクロコンピュータ１００Ｃと、起動処理を実行するためのブートプログラムが格納されるフラッシュメモリ２００とを具備する。マイクロコンピュータ１００Ｃは、同一のＩＣチップ上に形成されることが好ましい。又、マイクロコンピュータ１００Ｃとフラッシュメモリ２００とが同一ＩＣチップに搭載されていても構わない。第３の実施の形態におけるマイクロコンピュータ１００Ｃは、第２の実施の形態におけるアドレス補正回路１Ｂ及びＥＣＣ回路３Ｂに替えてアドレス補正回路１Ｃ及びＥＣＣ回路３Ｃを備える。参照符号が同一の構成は、第１及び第２の実施の形態と同様な構成及び動作であるので説明を省略する。又、第３の実施の形態におけるフラッシュメモリ２００では、同一のブートプログラムがブロック２０１−１〜２０１−３に格納されているものとする。
【００７９】
第３の実施の形態におけるアドレス補正回路１Ｃは、フラッシュメモリコントローラ２に対してデータの読み出し先のページ及びブロックを指定するアドレス指定部１０Ｃと、ＥＣＣ回路３Ｃにおける不良判定の結果に基づきデータの読み出し先ブロックを決定するブロック指定部２０Ｃとを具備する。アドレス補正回路１Ｃは、ＥＣＣ回路３Ｃにおけるデータの不良判定の結果に応じて、データの読み出し先ブロックを決定する。通常、アドレス補正回路１ＣはメインブロックＭＢをデータの読み出し先ブロックに指定するが、不良ページが検出されるとサブブロックＳＢを読み出し先ブロックとして指定する。又、サブブロックＳＢから１ページ分のデータを読み取ると、再度メインブロックＭＢを読み出し先ブロックに指定する。更に本実施の形態では、複数のサブブロックＳＢ−１、ＳＢ−２が設定される。アドレス補正回路１Ｃは、例えばサブブロックＳＢ−１において不良ページが検出されると、次のサブブロックＳＢ−２を読み出し先のブロックとして指定する。尚、本実施の形態では、同一のブートプログラムが格納されるブロックを３つとしたがこの限りではない。
【００８０】
アドレス指定部１０Ｃは、アドレスレジスタ１１と、ブロックカウンタ１２Ｃと、アドレス指定回路１３とを備える。ブロックカウンタ１２Ｃは、ブロック指定部２０Ｃから発行されるブロック指定信号１０７Ａ及び１０７Ｃに応答してブロック番号１０３を更新する。例えば、ブロックカウンタ１２Ｃは、ブロック指定信号１０７Ｃに応答してメインブロックＭＢのブロック番号にセットされ、ブロック指定信号１０７Ａに応答してブロック番号がインクリメントされる。アドレス指定回路１３は、データの読み出し先のページを指定するアドレス１０１とブロックカウンタ１２Ｃが示すブロック番号１０３に基づき、読み出し先のブロック及びページ２０２を指定するアドレス指定信号１０９を、フラッシュメモリコントローラ２に発行する。フラッシュメモリコントローラ２は、アドレス指定信号１０９に対応するブロック２０１のページ２０２を読み出し先としてフラッシュメモリ２００にアクセスする。
【００８１】
ブロック指定部２０Ｃは、ブロック指定回路２１Ｃと遷移回数カウンタ２２とメインブロック指定回路２３と不良カウンタ２４とを備える。遷移回数カウンタ２２は、不良通知信号１０５Ａに応答して遷移回数１０６をカウントする。不良カウンタ２４は、ＥＣＣ回路３Ｃから発行される不良通知信号１０５Ｃに応答して、ブロック２０１毎の不良ページ数（以下、不良数１１６と称す）をカウントする。詳細には、不良カウンタ２４は、ブロック番号１０３に対応するカウンタを備え、不良ページが検出される毎に、不良が検出されたブロックに対応するカウンタをインクリメントする。ここで、不良カウンタ２４は、ブロックカウンタ１２Ｃが更新されると、最新のブロック番号１０３を取得し、そのブロック番号１０３に対応するカウンタを有効にする。不良カウンタ２４は、ＥＣＣ回路３Ｃから発行される不良通知信号１０５Ｃに応答して、有効になっているカウンタをインクリメントする。このように、不良カウンタ２４は読み出し先として指定されたブロックの不良ページ数（不良数１１６）をカウントする。メインブロック指定回路２３は、不良カウンタ２４が示す不良数１１６を参照して、メインブロックＭＢとなるブロック２０１を決定する。詳細には、メインブロック指定回路２３は、不良数１１６の上限値として設定される最大不良数ＥＭを保持する。又、メインブロック指定回路２３は、メインブロックＭＢのブロック番号（以下、メインブロック番号１１７と称す）を保持するレジスタを有し、メインブロックＭＢの不良数１１６が最大不良数ＥＭと一致する場合、メインブロック番号１１７を更新する。
【００８２】
ブロック指定回路２１Ｃは、遷移回数１０６、不良数１１６、メインブロック番号１１７に応じて次の読み出し先のページを決定する。
【００８３】
ブロック指定回路２１Ｃは、ＥＣＣ回路３Ｃにおいて不良ページが検出されると、ブロック指定信号１０７Ａをブロックカウンタ１２Ｃに発行する。ブロックカウンタ１２Ｃは、ブロック指定信号１０７Ａに応答してブロック番号１０３がインクリメントされる。ここで、ブロック２０１−１〜２０１−３における同一ページ２０２の全てが不良ページと判定される場合、ブロック指定回路２１ＣはＥＲＲ信号１１５をＣＰＵ４に発行して起動処理を中止する。詳細には、ブロック指定回路２１Ｃは、遷移回数の上限値を示す最大遷移回数ＴＭを保持し、遷移回数１０６と最大遷移回数ＴＭが一致する場合、ＥＲＲ信号１１５をＣＰＵ４に発行する。ここでブートプログラムの読み出し先として使用するブロックはメインブロックＭＢと２つのサブブロックＳＢの合計３つであるので、最大遷移回数ＴＭは３となる。
【００８４】
１ページ分のデータ１０４がＲＡＭ５に格納されると、ブロック指定回路２１Ｃは、次の読み出し先ブロックとしてメインブロックＭＢを指定する。詳細には、ＥＣＣ回路３Ｃは、ＲＡＭ５に１ページ分のデータ１１４−１〜１１４−４を出力すると、ブロック指定回路２１Ｃに対しデータ出力通知信号１０５Ｂを発行する。ブロック指定回路２１Ｃは、データ出力通知信号１０５Ｂに応答して、メインブロックＭＢを読み出し先に指定するブロック指定信号１０７Ｃをブロックカウンタ１２Ｃに発行する。この際、ブロック指定回路２１Ｃは、メインブロック番号１１７に基づくブロック番号指定信号１０７Ｃを発行する。ブロックカウンタ１２Ｃはブロック番号指定信号１０７Ｃに応答してメインブロック番号１１７にセットされる。
【００８５】
ＥＣＣ回路３Ｃは、ＥＣＣバッファ３１、データバッファ３２、不良判定回路３３Ｃを備える。不良判定回路３３Ｃは、データバッファ３２から１２８バイトのデータ１１４を抽出して、取得したデータ１１４に対応するＥＣＣ２１０によってデータ１１４の不良判定を実行する。又、訂正回路を含み、ＣＥを検出するとエラー訂正を実行する。不良判定回路３３Ｃは、データ１１４がＵＣＥを含むと判定すると遷移回数カウンタ２２に不良通知信号１０５Ａを発行するとともに不良通知信号１０５Ｃを不良カウンタ２４に発行する。又、不良を含まないと判定すると、データ１１４をＲＡＭ５に格納する。ここで、データ１１４−４をＲＡＭ５に格納する際、不良判定回路３３Ｃはブロック指定回路２１Ｃにデータ出力通知信号１０５Ｂを発行する。
【００８６】
以上のように第３の実施の形態におけるアドレス補正回路１Ｃは、読み出し先のページから取得したデータが不良である場合、データの読み出し先ページを他のブロックにおける同一アドレスのページに遷移する。アドレス補正回路１Ｃは、通常、メインブロックＭＢを読み出し先ブロックとして指定する。この間、不良ページが検出されると、サブブロックＳＢにおける不良ページと同一アドレスのページ２０２に読み出し先を変更する。サブブロックＳＢからデータ１０４がＣＰＵ４に読み取られると、読み出し先として再度メインブロックＭＢが指定され、メインブロックＭＢの不良ページ以降のページ２０２からブートプログラムが読み出される。又、アドレス補正回路１Ｃは不良ページ数の多いメインブロックＭＢに替えて、複数のサブブロックＳＢのうちの１つを新たなメインブロックＭＢとして指定する。更に、サブブロックＳＢにおいて不良ページが検出されると、次のサブブロックＳＢが読み出し先のブロックとして指定され、データの読み出しが実行される。
【００８７】
（動作）
以下、図１０から図１２を参照して、本発明による半導体装置の第３の実施の形態における起動処理の動作の詳細を説明する。図１０は、本発明による半導体装置の第３の実施の形態における起動処理の動作を示すフロー図である。又、図１１は、本発明による半導体装置の第３の実施の形態におけるメインブロック指定処理の動作を示すフロー図である。図１２は、本発明による半導体装置の第３の実施の形態におけるブートプログラムの読み出し処理の概念図である。本実施の形態では、当初メインブロックＭＢとして設定されるブロック２０１−１、サブブロックＳＢ−１として設定される２０１−２、及びサブブロックＳＢ−２として設定される２０１−３に同一のブートプログラムが格納されているものとして説明する。尚、図面に記載の各ステップに付された参照番号で第１及び第２の実施の形態と同一のものは、同一の動作を示すため、その説明を省略する。
【００８８】
図１０を参照して、システムの起動時（例えば、システムの電源オン時や再起動時）にリセット信号が入力されるとＣＰＵ４は、内部バスを介してブートプログラムが格納されているフラッシュメモリ２００にアクセスする。以降、第１の実施の形態と同様にステップＳ１からステップＳ１５までが繰り返され、ＣＰＵ４によって指定されたアドレス１０１に対応するページ２０２からデータ１０４がＲＡＭ５に読み込まれる。ブロック指定回路２１Ｃは、データ１０４（データ１１４−１〜１１４−４）がＲＡＭ５に格納されると、次の読み出し先としてブロック２０１−１（メインブロックＭＢ）を指定する（ステップＳ１８）。詳細には、不良判定回路３３Ｃは、データ１１４−４をＲＡＭ５に格納する際、データ出力通知信号１０５Ｂをブロック指定回路２１Ｃに発行する。ブロック指定回路２１Ｃは、データ出力信号１０５Ｂに応答してブロック指定信号１０７Ｃをブロックカウンタ１２Ｃに発行する。ブロックカウンタ１２Ｃは、ブロック指定信号１０７Ｃに応答してメインブロックＭＢのブロック番号（ここではブロック２０１−１のブロック番号１０３＝１）にセットされる。このため、次のページからブートプログラムを読み出す際、アドレス補正回路１ＣはメインブロックＭＢ（当初ブロック２０１−１）を読み出し先のブロックとして指定することができる。
【００８９】
１ページ分のデータ１０４がＲＡＭ５に読み出されると（ステップＳ１５Ｙｅｓ）、バス状態信号がアサートされ（ステップＳ１６）、ＲＡＭ５内の１ページ分のデータ１０４はＣＰＵ４に出力される（ステップＳ１７）。ＲＡＭ５から１ページ分のデータ１０４がＣＰＵ４に出力されると遷移回数カウンタ２２は初期値にリセットされる。
【００９０】
以上のように、本発明によるマイクロコンピュータ１００Ｃは、ＣＰＵ４から指定されたアドレス１０１を保存し、そのアドレスに対応するページからブートプログラムデータを読み出し、ＥＣＣ制御単位でそのデータの不良判定を行う。この際、その不良データが検出されると、読み出し先のブロックを順に遷移して、アドレス１０１に対応するページ２０２から再度ブートプログラムデータを読み出す。例えば、メインブロックＭＢで不良ページが検出された場合、サブブロックＳＢ−１の同一ページ２０２がデータの読み出し先として指定される。又、サブブロックＳＢ−１の同一ページで不良ページが検出された場合、更に次のサブブロックＳＢ−２がデータの読み出し先として指定される。更に、第２の実施の形態と同様にサブブロックＳＢから１ページ分のデータ１０４を読み出すと、データの読み出し先ブロックはメインブロックＭＢに変更される。
【００９１】
又、第３の実施の形態におけるマイクロコンピュータ１００Ｃでは、メインブロックＭＢの不良数１１６が最大不良数ＥＭと一致するとき複数のサブブロックＳＢのうち１つを選択して新たなメインブロックＭＢに指定する。以下、図１１を参照してメインブロックの指定動作を説明する。
【００９２】
ステップＳ７において、データ１１４にＵＣＥが含まれると判定されると、不良カウンタ２４は、現在読み出し先として指定されているブロック２０１に対応するカウンタをインクリメントする（ステップＳ２０）。詳細には、不良ページを検知した不良判定回路３３Ｃは不良通知信号１０５Ｃを不良カウンタ２４に発行する。不良カウンタ２４は、不良通知信号１０５Ｃに応答してブロックカウンタ１２Ｃが示すブロック番号１０３を取得し、そのブロック番号１０３に対応するカウンタをインクリメントする。
【００９３】
メインブロック指定回路２３は、不良カウンタ２４が更新されると、メインブロックＭＢに対応する不良数１１６と最大不良数ＥＭとを比較する（ステップＳ２１）。メインブロックＭＢに対応する不良数１１６と最大不良数ＥＭが異なる場合、現在のメインブロック番号１１７を維持する（ステップＳ２２）。メインブロックＭＢに対応する不良数１１６と最大不良数ＥＭが同じ場合、メインブロック番号１１７をインクリメントし、メインブロック番号１１７を更新する（ステップＳ２３）。例えば、メインブロック番号１１７はブロック番号＝１からブロック番号＝２に変更される。すなわち、サブブロックＳＢ−１であるブロック２０１−２がメインブロックとして指定される。メインブロック指定回路２３は、ステップＳ２２又はステップＳ２３で決定したメインブロック番号１１７を保持する。尚、本実施の形態ではメイン番号１１７をインクリメントしてメインブロックＭＢを変更しているが、指定方法はこの限りではない。例えば、不良数１１６の少ないサブブロックＳＢをメインブロックとして指定しても構わない。又、ステップＳ２０〜Ｓ２３のメインブロックＭＢの指定処理は、ステップＳ１１の読み出し先のブロックの変更処理の前に終了することが好ましい。
【００９４】
ブートプログラムがブロック２０１の複数ページ（例えばブロック内の全てのページ２０２−０〜２０２−３１）に格納されている場合、ＲＡＭ５からデータ１０４を受け取ったＣＰＵ４は、次のページに対応するアドレス１０１をアドレス補正回路１Ｃに指定する。アドレスレジスタ１１は指定された新たなアドレス１０１を保持し、マイクロコンピュータ１００Ｃは上述のステップＳ３以降の動作に移行する。このように、マイクロコンピュータ１００Ｃはページ２０２−０〜２０２−３１のアドレスを順に指定して、ページ２０２−０〜２０２−３１内のデータ１０４を読み出し、起動処理を実行することができる。
【００９５】
図１２は、本発明によるマイクロコンピュータ１００Ｃの起動処理におけるブートプログラムデータの読み出し処理の概念図である。図１２は、左から順にブロック２０１−１、２０２−２、２０１−３、及びホストＣＰＵ４から見たフラッシュメモリ（ＲＯＭ）のイメージ、すなわち、ＣＰＵ４に読み出されたブートプログラムデータの読み出し先ブロックとページとの対応関係を示す。以下、図１０から図１２を参照して第３の実施の形態におけるブートプログラムデータの読み出し先ページの変更例（ブロックの遷移例）を示す。
【００９６】
起動処理が開始されると、ステップＳ２〜Ｓ１８を繰り返し、ブロック２０１−１のページ２０２−０から順にデータ１０４がＣＰＵ４に読み出される。ここで、ブロック２０１−１のページ２０２−２、ページ２０２−５、及びページ２０２−１０、ブロック２０１−２のページ２０２−５及びページ２０２−１５が不良ページであるとする。又、メインブロック指定回路２３は、最大不良数ＥＭ＝３に設定されているものとする。
【００９７】
データ１０４の読み出しの際、不良判定回路３３Ｃによってブロック２０１−１のページ２０２−２が不良ページであると判定されると、アドレス補正回路１Ｃは、ステップＳ８〜Ｓ１１の動作を実行して読み出し先のブロックをブロック２０１−２に補正する。又、これと並行して、不良カウンタ２４は、ブロック２０１−１に対応する不良数１１６をインクリメントする。メインブロック指定回路２３は、最大不良数ＥＭ＝３とブロック２０１−１に対応する不良数１１６＝１とが異なる値であるので、メインブロック番号１１７を１に維持する。続いてステップＳ３に移行してブロック２０１−２のページ２０２−２からデータ１０４がＣＰＵ４に読み出される。この際、ＲＡＭ５に２０２−２内のデータ１０４が読み出されると、ブロック指定回路２１Ｃは読み出し先ブロックをブロック２０１−１に変更する。
【００９８】
ページ２０２−２からデータ１０４が読み出されるとステップＳ２に移行し、ＣＰＵ４は、次のページ２０２−３のアドレスをアドレス指定回路１Ｃに指定する。以降、ステップＳ２〜Ｓ１８を繰り返してブロック２０１−１のページ２０２−２〜２０２−４まで読み出される。ページ２０２−５が不良であると判定されると、上述のようにブロック２０１−２のブロック２０１−５からデータの読み出し処理が行われる。又、ブロック２０１−１の不良数１１６は２となり、メインブロック番号１１７は１に維持される。ここで、ブロック２０１−２のページ２０２−５も不良ページであると判定されると、アドレス補正回路１Ｃは、ステップＳ８〜Ｓ１１の動作を実行して読み出し先のブロックをブロック２０１−３に補正する。又、これと並行して、不良カウンタ２４は、ブロック２０１−２に対応する不良数１１６は１となり、メインブロック番号１１７は１に維持される。続いてステップＳ３に移行してブロック２０１−３のページ２０２−５からデータ１０４がＣＰＵ４に読み出される。この際、ＲＡＭ５に２０２−５内のデータ１０４が読み出されると、ブロック指定回路２１Ｃは読み出し先ブロックをブロック２０１−１に変更する。
【００９９】
ページ２０２−５からデータ１０４が読み出されるとステップＳ２に移行し、ＣＰＵ４は、次のページ２０２−６のアドレスをアドレス指定回路１Ｃに指定する。以降、ステップＳ２〜Ｓ１８を繰り返してブロック２０１−１のページ２０２−６〜２０２−９まで読み出される。ページ２０２−１０が不良であると判定されると、上述のようにブロック２０１−２のブロック２０１−１０からデータの読み出し処理が行われる。又、ブロック２０１−１の不良数１１６は３となるため、メインブロック指定回路２３は、メインブロック番号１１７を２に変更する。すなわち、ページ２０２−１１以降のデータの読み出し処理は、ブロック２０１−２がメインブロックＭＢとして使用される。ページ２０２−１０からＲＡＭ５にデータ１０４が読み出されると、ブロック指定回路２１Ｃは読み出し先ブロックを新たなメインブロックＭＢであるブロック２０１−２に変更する。
【０１００】
ページ２０２−１０からデータ１０４が読み出されるとステップＳ２に移行し、ＣＰＵ４は、次のページ２０２−１１のアドレスをアドレス指定回路１Ｃに指定する。以降、ステップＳ２〜Ｓ１８を繰り返してブロック２０１−２のページ２０２−１１〜２０２−１４まで読み出される。ページ２０２−１５が不良であると判定されると、上述のようにブロック２０１−３のブロック２０１−１５からデータの読み出し処理が行われる。又、ブロック２０１−２の不良数１１６は２となり、メインブロック番号１１７は２に維持される。以降、同様にステップＳ２〜ステップＳ１８を繰り返し、ブロック２０１−２のページ２０２−１６〜２０２−３１からデータ１０４がＣＰＵ４に読み出される。
【０１０１】
以上のように、マイクロコンピュータ１００ＣのＣＰＵ４は、ページ２０２−０〜２０２−３１に格納されたブートプログラムをフラッシュメモリ２００から読み出すことができる。この際、ＣＰＵ４は、通常、メインブロックＭＢからブートプログラムデータを読み出すが、不良ページを検出する毎に読み出し先のブロックをサブブロックＳＢに変更してブートプログラムデータを読み出す。図１２を参照して、ＣＰＵ４から見たブートプログラムデータの読み出し先は、ブロック２０１−１のページ２０２−０〜２０２−１、ページ２０２−３〜２０２−４、及びページ２０２−６〜２０２−９、ブロック２０１−２のページ２０２−２、ページ２０２−１０〜２０２−１４、ページ２０２−１６〜２０２−３１、ブロック２０１−３のページ２０２−５、ページ２０２−１５となる。
【０１０２】
本実施の形態におけるマイクロコンピュータ１００Ｃは、同一ブートプログラムが格納されたメインブロックＭＢとサブブロックＳＢを備え、メインブロックＭＢに不良ページが存在すると、サブブロックＳＢの同一ページからデータを取得して、メインブロックＭＢの不良ページを回避することができる。又、本実施の形態ではサブブロックＳＢを複数備えるため、サブブロックＳＢから取得したデータに不良が含まれていても更に次のサブブロックＳＢの同一ページからデータを取得することができる。すなわち、本発明によるマイクロコンピュータ１００Ｃによれば、第１の実施の形態と同様に、ブートプログラムが格納された全てのブロックの同一アドレスに不良ページが存在しない限り、正しくブートプログラムを読み出すことができる。又、不良数１１６の多いメインブロックＭＢの使用を停止し、サブブロックＳＢ−１をメインブロックＭＢに変更することで、より信頼性の高い起動処理が実現できる。このため、ＮＡＮＤ型フラッシュメモリ内に格納されたブートプログラムを利用して安定した起動処理が実現できる。尚、本実施の形態では、ＮＡＮＤ型フラッシュメモリからブートプログラムを読み出すことを一例として説明されたが、シーケンシャルに読み出されるデータやプログラムを読み出す半導体装置にも適用できる。
【０１０３】
又、従来技術による起動処理では、不良ページを検出する毎にブートプログラムの読み出し先のブロックを順に変更しているが、全てのブロックを一巡すると処理を停止してしまう。しかし、本発明によるマイクロコンピュータ１００Ｃによれば、不良ページの検出毎に読み出し先ブロックをサブブロックに変更し、再びメインブロックからブートプログラムデータを読み出す。このため、ブートプログラムを格納するために用意するブロック数を少なくでき、メモリ資源を有効に活用することができる。
【０１０４】
本実施の形態では、信頼性の高いブロック２０１をメインブロックＭＢとして選択して使用できるため、第２の実施の形態に比べ、更に安定してブート処理を実行することができる。
【０１０５】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。例えば、第３の実施の形態において、３つのブロック２０１のうち、２つのブロックをブートプログラムの読み出し先のブロックとして設定し、１つを予備として使用しても良い。この場合、最大遷移回数ＴＭは２に設定される。詳細には、当初、ブロック２０１−１がメインブロックＭＢ、ブロック２０１−２がサブブロックＳＢとして使用され、ブロック２０１−１又はブロック２０１−２からブートプログラムが読み出される。この際、ブロック２０１−３は予備として設定され、読み取り先として指定されない。そして、ブロック２０１−１の不良ページ数（不良数１１６）が最大不良回数ＥＭを越えると、メインブロックＭＢは２０１−２に変更され、当初予備としていたブロック２０１−３がサブブロックＳＢとして使用される。以降、第２の実施の形態と同様に２つのブロック２０１−２及び２０１−３からブートプログラムがＣＰＵ４に読み出される。
【０１０６】
又、本実施の形態では、ブートプログラムをメモリから読み出して実行するマイクロコンピュータを一例に説明されたが、これに限らず、メモリからシーケンシャルにデータを読み出す半導体装置に適用できる。
【図面の簡単な説明】
【０１０７】
【図１】図１は、本発明による半導体装置の第１の実施の形態における構成を示すブロック図である。
【図２】図２は、本発明に係るフラッシュメモリの構造の一例を示す構造図である。
【図３】図３は、本発明に係るフラッシュメモリのブロック内に格納されるデータの構成を示す構成図である。
【図４】図４は、本発明による半導体装置の第１の実施の形態における起動処理の動作を示すフロー図である。
【図５】図５は、本発明による半導体装置の第１の実施の形態におけるブートプログラムデータの読み出し処理の概念図である。
【図６】図６は、本発明による半導体装置の第２の実施の形態における構成を示すブロック図である。
【図７】図７は、本発明による半導体装置の第２の実施の形態における起動処理の動作を示すフロー図である。
【図８】図８は、本発明による半導体装置の第２の実施の形態におけるブートプログラムデータの読み出し処理の概念図である。
【図９】図９は、本発明による半導体装置の第３の実施の形態における構成を示すブロック図である。
【図１０】図１０は、本発明による半導体装置の第３の実施の形態における起動処理の動作を示すフロー図である。
【図１１】図１１は、本発明による半導体装置の第３の実施の形態におけるメインブロック指定処理の動作を示すフロー図である。
【図１２】図１２は、本発明による半導体装置の第３の実施の形態におけるブートプログラムデータの読み出し処理の概念図である。
【符号の説明】
【０１０８】
１Ａ、１Ｂ、１Ｃ：アドレス補正回路
１０Ａ、１０Ｂ、１０Ｃ：アドレス指定部
１１：アドレスレジスタ
１２Ａ、１２Ｂ、１２Ｃ：ブロックカウンタ
１３：アドレス指定回路
２０Ａ、２０Ｂ、２０Ｃ：ブロック指定部
２１Ａ、２１Ｂ、２１Ｃ：ブロック指定回路
２２：遷移回数カウンタ
２３：メインブロック指定回路
２４：不良カウンタ
２：フラッシュメモリコントローラ
３Ａ、３Ｂ、３Ｃ：ＥＣＣ回路
３１：ＥＣＣバッファ
３２：データバッファ
３３Ａ、３３Ｂ、３３Ｃ：不良判定回路
４：ＣＰＵ
５：ＲＡＭ
１００Ａ、１００Ｂ、１００Ｃ：マイクロコンピュータ
２００：フラッシュメモリ
１０１：アドレス
１０３：ブロック番号
１０４、１１４、１１４−１〜１１４−４：データ
１０５Ａ、１０５Ｃ：不良通知信号
１０５Ｂ：データ出力通知信号
１０６：遷移回数
１０７Ａ、１０７Ｂ、１０７Ｃ：ブロック指定信号
１０９、１１０：アドレス指定信号
１１１：リードコマンド
１１３：冗長部データ
１１５：ＥＲＲ信号
１１６：不良回数
１１７：メイン番号
２０１、２０１−１〜２０１−ｎ：ブロック
２０２、２０２−０〜２０２−３１：ページ
２１０、２１０−１〜２１０−４：ＥＣＣ
ＭＢ：メインブロック
ＳＢ：サブブロック
ＴＭ：最大遷移回数
ＥＭ：最大エラー回数
【図１】
0004840859.tif 000002
【図２】
0004840859.tif 000003
【図３】
0004840859.tif 000004
【図４】
0004840859.tif 000005
【図５】
0004840859.tif 000006
【図６】
0004840859.tif 000007
【図７】
0004840859.tif 000008
【図８】
0004840859.tif 000009
【図９】
0004840859.tif 000010
【図１０】
0004840859.tif 000011
【図１１】
0004840859.tif 000012
【図１２】
0004840859.tif 000013