(57)【要約】【課題】読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる半導体記憶装置を提供することである。【解決手段】一実施の形態にかかる半導体記憶装置は、複数のメモリセルＭＣが配列されたメモリセルアレイ１０と、メモリセルアレイ１０から出力されたデータを検出して増幅するセンスアンプ１７と、メモリセルアレイ１０へのアクセスを制御し、対象アドレスと当該対象アドレスに対応するセンスアンプ１７の設定情報とを備える制御部１３と、を有する。制御部１３は、所定のデータをメモリセルアレイ１０から読み出した際の入力アドレスＡＤＤが対象アドレスに含まれている場合、対象アドレスに対応するセンスアンプ１７の設定情報を用いて入力アドレスＡＤＤに対応したデータを再度読み出す。【選択図】図１
2014010850.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセルが配列されたメモリセルアレイと、
前記メモリセルアレイから出力されたデータを検出して増幅するセンスアンプと、
前記メモリセルアレイへのアクセスを制御し、対象アドレスと当該対象アドレスに対応する前記センスアンプの設定情報とを備える制御部と、を有し、
前記制御部は、所定のデータを前記メモリセルアレイから読み出した際の入力アドレスが前記対象アドレスに含まれている場合、前記対象アドレスに対応する前記センスアンプの設定情報を用いて前記入力アドレスに対応したデータを再度読み出す、
半導体記憶装置。
【請求項２】
前記センスアンプから出力されたデータに含まれているエラーを検出して訂正し、エラー訂正後のデータを出力する誤り検出訂正部を更に備え、
前記制御部は、前記メモリセルアレイから読み出された前記所定のデータに訂正できない数の誤りビットが含まれている場合に、前記対象アドレスに対応するセンスアンプの設定情報を用いて前記入力アドレスに対応したデータを再度読み出し、
前記誤り検出訂正部は、前記再度読み出されたデータに含まれているエラーを訂正する、
請求項１に記載の半導体記憶装置。
【請求項３】
前記制御部は、
前記メモリセルアレイから読み出されたデータが訂正可能な誤りビットを含む場合、前記センスアンプの設定条件を変えて前記入力アドレスに対応するデータを前記メモリセルアレイから再度読み出し、
前記誤りビットが反転した場合、前記入力アドレスを前記対象アドレスとして、前記センスアンプの設定条件を前記センスアンプの設定情報としてそれぞれ格納する、
請求項２に記載の半導体記憶装置。
【請求項４】
前記制御部は、前記センスアンプの設定条件を変えて前記入力アドレスに対応するデータを前記メモリセルアレイから再度読み出す間、前記半導体記憶装置へのアクセスが禁止されていることを通知するための信号を出力する、請求項３に記載の半導体記憶装置。
【請求項５】
前記制御部は、前記メモリセルアレイのＢＩＳＴを実行している間に、前記センスアンプの設定条件を変えて前記入力アドレスに対応するデータを前記メモリセルアレイから再度読み出す、請求項３に記載の半導体記憶装置。
【請求項６】
前記センスアンプは、前記メモリセルアレイを構成するトランジスタに流れる電流と参照電流とを比較することで前記データを検出する、請求項３に記載の半導体記憶装置。
【請求項７】
前記制御部は、
前記メモリセルアレイから読み出されたデータが訂正可能な誤りビットを含み、当該誤りビットが"０"である場合、前記参照電流をデフォルト値よりも小さく設定して前記入力アドレスに対応するデータを前記メモリセルアレイから再度読み出し、
前記誤りビットが"０"から"１"に反転した場合、前記入力アドレスを前記対象アドレスとして、前記センスアンプに供給されている参照電流を前記センスアンプの設定情報としてそれぞれ格納する、
請求項６に記載の半導体記憶装置。
【請求項８】
前記制御部は、
前記メモリセルアレイから読み出されたデータが訂正可能な誤りビットを含み、当該誤りビットが"１"である場合、前記参照電流をデフォルト値よりも大きく設定して前記入力アドレスに対応するデータを前記メモリセルアレイから再度読み出し、
前記誤りビットが"１"から"０"に反転した場合、前記入力アドレスを前記対象アドレスとして、前記センスアンプに供給されている参照電流を前記センスアンプの設定情報としてそれぞれ格納する、
請求項６に記載の半導体記憶装置。
【請求項９】
前記センスアンプは複数のアンプ回路を備え、当該複数のアンプ回路のそれぞれに異なる値の参照電流が供給可能に構成されている、
請求項６に記載の半導体記憶装置。
【請求項１０】
前記制御部は、前記再度読み出されたデータに含まれているエラーを前記誤り検出訂正部において訂正した後のデータを、前記入力アドレスとは異なる代替アドレスを用いて前記メモリセルアレイに格納する、請求項２に記載の半導体記憶装置。
【請求項１１】
前記制御部は、前記入力アドレスを前記代替アドレスに変換して、前記エラー訂正した後のデータを読み出す、請求項１０に記載の半導体記憶装置。
【請求項１２】
入力アドレスに応じた所定のデータをメモリセルアレイから読み出し、
対象アドレスと当該対象アドレスに対応するセンスアンプの設定情報とが格納されたテーブルを参照し、前記入力アドレスが前記対象アドレスに含まれているかを判定し、
前記入力アドレスが前記対象アドレスに含まれている場合、前記対象アドレスに対応するセンスアンプの設定情報を用いて前記入力アドレスに対応したデータを再度読み出す、
半導体記憶装置の制御方法。
【請求項１３】
前記メモリセルアレイから読み出された前記所定のデータに訂正できない数の誤りビットが含まれている場合に、前記対象アドレスに対応するセンスアンプの設定情報を用いて前記入力アドレスに対応したデータを再度読み出し、
前記再度読み出されたデータに含まれているエラーを訂正する、
請求項１２に記載の半導体記憶装置の制御方法。
【請求項１４】
前記メモリセルアレイから読み出されたデータが訂正可能な誤りビットを含む場合、前記センスアンプの設定条件を変えて前記入力アドレスに対応するデータを前記メモリセルアレイから読み出し、
前記誤りビットが反転した場合、前記入力アドレスを前記対象アドレスとして、前記センスアンプの設定条件を前記センスアンプの設定情報としてそれぞれ格納する、
請求項１３に記載の半導体記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体記憶装置およびその制御方法に関し、例えば誤り検出訂正機能を備えた半導体記憶装置およびその制御方法に関する。
【背景技術】
【０００２】
半導体記憶装置は、書き換え回数の増加や長期間のデータ保持等の理由により、メモリセルに記憶されているデータが徐々に劣化し、読み出されたデータにエラーが含まれる場合がある。よって、特に信頼性が要求される用途では、読み出されたデータに含まれるエラーを検出して訂正する誤り検出訂正（ＥＣＣ：Error Checking and Correction）機能を半導体記憶装置に設ける場合がある。誤り検出訂正機能は、読み出されたデータに含まれる誤り訂正符号（以下、ＥＣＣコードともいう）を用いて、読み出されたデータに含まれるエラーを検出して訂正する機能である。
【０００３】
特許文献１には、固体メモリデバイスのデータ復帰技術および構成が開示されている。  特許文献２には、メモリセル電流と比較されるレファレンス電流をメモリセルのアドレスに応じて変化させることで、書き換え時にメモリセルに与える電気的ストレスを低減する技術が開示されている。特許文献３には、誤り検出訂正モジュールによるエラー訂正が失敗した場合、エラー訂正が成功するまで、少なくとも一度、一つ以上の修正基準電圧を用いて、フラッシュメモリセルの再読み出しを行う技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−９２４５９号公報
【特許文献２】国際公開第２０１０／０８２２４３号
【特許文献３】特開２０１１−２３８３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
背景技術で説明したように、半導体記憶装置に誤り検出訂正機能を設けることで、半導体記憶装置の信頼性を向上させることができる。誤り検出訂正機能は、読み出されたデータに含まれるＥＣＣコードを用いて、データに含まれるエラーを検出して訂正する機能である。よって、読み出されたデータに含まれるエラーの数が訂正可能な範囲内である場合は、誤り検出訂正機能を用いてデータに含まれるエラーを訂正することができる。しかしながら、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合は、誤り検出訂正機能を用いてデータに含まれるエラーを訂正することができないという問題がある。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態にかかる半導体記憶装置は、対象アドレスと当該対象アドレスに対応するセンスアンプの設定情報とを備える。そして、所定のデータをメモリセルアレイから読み出した際の入力アドレスが対象アドレスに含まれている場合、対象アドレスに対応するセンスアンプの設定情報を用いて入力アドレスに対応したデータを再度読み出す。
【０００８】
また、一実施の形態にかかる半導体記憶装置の制御方法は、対象アドレスと当該対象アドレスに対応するセンスアンプの設定情報とが格納されたテーブルを参照し、入力アドレスが対象アドレスに含まれているかを判定し、入力アドレスが対象アドレスに含まれている場合、対象アドレスに対応するセンスアンプの設定情報を用いて入力アドレスに対応したデータを再度読み出す。
【発明の効果】
【０００９】
前記一実施の形態によれば、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる半導体記憶装置およびその制御方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１にかかる半導体記憶装置を示すブロック図である。
【図２】実施の形態１にかかる半導体記憶装置が備えるセンスアンプの一例を示す図である。
【図３】実施の形態１にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図４】実施の形態１にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図５】実施の形態１にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図６】実施の形態１にかかる半導体記憶装置が備えるレジスタに格納されている再読み出し設定情報の一例を示す図である。
【図７Ａ】メモリセルアレイからデータを再度読み出す際の参照電流を説明するための図である（誤りビットが"０"の場合）。
【図７Ｂ】メモリセルアレイからデータを再度読み出す際の参照電流を説明するための図である（誤りビットが"１"の場合）。
【図８】実施の形態１にかかる半導体記憶装置が備えるセンスアンプの他の例を示す図である。
【図９】実施の形態２にかかる半導体記憶装置を示すブロック図である。
【図１０】実施の形態２にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図１１】実施の形態３にかかる半導体記憶装置を示すブロック図である。
【図１２】実施の形態３にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図１３】実施の形態３にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図１４】実施の形態４にかかる半導体記憶装置を示すブロック図である。
【図１５】実施の形態４にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【図１６】実施の形態４にかかる半導体記憶装置の動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００１１】
＜実施の形態１＞
以下、実施の形態１について説明する。図１は、実施の形態１にかかる半導体記憶装置を示すブロック図である。図１に示すように、本実施の形態にかかる半導体記憶装置は、メモリセルアレイ１０と、制御部１３と、行デコーダ１４と、列デコーダ１５と、参照信号設定部１６と、センスアンプ１７と、誤り検出訂正部（ＥＣＣデコーダ）１８と、を備える。なお、本実施の形態にかかる半導体記憶装置は、例えばフラッシュメモリ等の不揮発性半導体記憶装置である。
【００１２】
メモリセルアレイ１０は、ワード線ＷＬ、ビット線ＢＬ、およびメモリセルＭＣを有する。メモリセルＭＣは、ワード線ＷＬとビット線ＢＬとが交わる箇所に各々配置されている。また、メモリセルアレイ１０は、データ領域１１とＥＣＣ領域１２とを備える。データ領域１１には所定のデータが格納されている。ＥＣＣ領域１２には、データ領域１１に格納されている所定のデータに対応するＥＣＣコードが格納されている。ＥＣＣコードはデータを格納する際にＥＣＣエンコーダ（不図示）を用いて生成される。
【００１３】
行デコーダ１４は、制御部１３から出力されたロウアドレスＲＡに基づいて、データの読み出しまたは書き込み（以下、単にアクセスともいう）の対象となるメモリセルＭＣに接続されているワード線ＷＬを選択する。
【００１４】
列デコーダ１５は、制御部１３から出力されたカラムアドレスＣＡに基づいて、アクセスの対象となるメモリセルＭＣに接続されているビット線ＢＬを選択する。ここで、ロウアドレスＲＡとカラムアドレスＣＡは、制御部１３に供給される入力アドレスＡＤＤに基づいて生成される。そして、列デコーダ１５は、入力アドレスＡＤＤに対応するデータＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎをセンスアンプ１７に出力する。なお、以下ではＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎを総称してＤＡＴＡ_ＳＥＬとも記載する。他の符号についても同様である。
【００１５】
参照信号設定部１６は、制御部１３から出力された参照信号設定信号ＳＥＴ_ＲＥＦに応じて参照信号ＲＥＦを設定する。例えば、参照信号設定部１６は、予め設定された複数の設定値の中から参照信号設定信号ＳＥＴ_ＲＥＦに応じた設定値を選択し、この設定値の電流または電圧を参照信号ＲＥＦとして出力する。設定値は、例えばデフォルト値を中心として、高い側に複数の値を、低い側に複数の値をそれぞれ設定することができる。
【００１６】
センスアンプ１７は、メモリセルアレイ１０から出力されたデータ（つまり、列デコーダ１５で選択されたデータ）ＤＡＴＡ_ＳＥＬを検出してロジックレベルまで増幅し、増幅されたデータＤＡＴＡ_ＲＤを誤り検出訂正部１８に出力する。例えば、センスアンプ１７は、列デコーダ１５で選択されたビット線ＢＬに流れる電流と参照信号（この場合は参照電流）ＲＥＦとを比較することでデータＤＡＴＡ_ＳＥＬの論理レベル（つまり、"０"または"１"）を検出することができる。また、例えば、センスアンプ１７は、列デコーダ１５で選択されたビット線ＢＬの電圧と参照信号（この場合は参照電圧）ＲＥＦとを比較することでデータＤＡＴＡ_ＳＥＬの論理レベル（つまり、"０"または"１"）を検出することができる。
【００１７】
図２は、本実施の形態にかかる半導体記憶装置が備えるセンスアンプ１７の一例を示す図である。図２に示すように、センスアンプ１７は、複数のアンプＡＭＰ_１〜ＡＭＰ_ｎを備える。各々のアンプＡＭＰ_１〜ＡＭＰ_ｎの一方の入力には列デコーダ１５で選択された各々のデータＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎ（つまり、ＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎのそれぞれに対応するビット線ＢＬに流れる電流）が供給され、他方の入力には参照信号ＲＥＦが供給される。そして、各々のアンプＡＭＰ_１〜ＡＭＰ_ｎは、各々のデータＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎに対応するビット線ＢＬに流れる電流と参照信号ＲＥＦとを比較し、このビット線ＢＬに流れる電流が参照信号（参照電流）ＲＥＦよりも小さい場合は、読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎとして論理レベルが"０"の信号を出力する。一方、各々のアンプＡＭＰ_１〜ＡＭＰ_ｎは、ＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎに対応するビット線ＢＬに流れる電流が参照信号（参照電流）ＲＥＦよりも大きい場合は、読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎとして論理レベルが"１"の信号を出力する。
【００１８】
ここで、複数のアンプＡＭＰ_１〜ＡＭＰ_ｎには共通の参照信号ＲＥＦが供給される。また、ｎの値は、メモリセルアレイ１０から読み出されるデータのデータ長と当該データに付加されるＥＣＣコードの長さとを足した値である。つまり、メモリセルアレイ１０から読み出されるデータのデータ長がｍビットであり、ＥＣＣコードの長さがｑビットである場合は、ｎ＝ｍ＋ｑとなる。
【００１９】
誤り検出訂正部１８は、センスアンプ１７から出力された読み出しデータＤＡＴＡ_ＲＤに含まれているエラーを検出して訂正し、訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する。つまり、誤り検出訂正部１８は、センスアンプ１７から出力された読み出しデータＤＡＴＡ_ＲＤに含まれているＥＣＣコードを用いて、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれているか判定する。そして、誤り検出訂正部１８は、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれていない場合は、センスアンプ１７から出力された読み出しデータＤＡＴＡ_ＲＤをそのまま出力データＤＡＴＡ_ＯＵＴとして出力する。この場合、誤り検出訂正部１８は制御部１３に対してエラーを検出しなかったことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００２０】
一方、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれており、且つ読み出しデータＤＡＴＡ_ＲＤに含まれているエラーの数が訂正可能な範囲内である場合、誤り検出訂正部１８は読み出しデータＤＡＴＡ_ＲＤに含まれているエラーを訂正し、訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する。この場合、誤り検出訂正部１８は制御部１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００２１】
また、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれており、且つ読み出しデータＤＡＴＡ_ＲＤに含まれているエラーの数が訂正可能な数よりも多い場合、誤り検出訂正部１８はエラー訂正をすることなくＥＣＣエラーと判断する。この場合、誤り検出訂正部１８は制御部１３に対してＥＣＣエラーであることを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００２２】
本明細書において「ＥＣＣエラー」とは、読み出しデータＤＡＴＡ_ＲＤに訂正できない数の誤りビットが含まれている場合をいう。例えば、誤り検出訂正部１８が１ビット誤り訂正かつ２ビット誤り検出能力を持つ場合、誤り検出訂正部１８は読み出しデータＤＡＴＡ_ＲＤに２ビットの誤りが含まれている場合にＥＣＣエラーと判断する。一方、読み出しデータＤＡＴＡ_ＲＤに１ビットの誤りが含まれている場合、誤り検出訂正部１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤに含まれているエラーを訂正することができる。
【００２３】
誤り検出訂正部１８は、例えば、読み出しデータＤＡＴＡ_ＲＤのデータ部分からＥＣＣコードを生成し、読み出しデータＤＡＴＡ_ＲＤに付加されている（つまり、ＥＣＣ領域１２に格納されていた）ＥＣＣコード（元のＥＣＣコード）と比較する。そして、読み出しデータＤＡＴＡ_ＲＤのデータ部分から生成されたＥＣＣコードと元のＥＣＣコードとが一致する場合は、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれていないと判断することができる。一方、読み出しデータＤＡＴＡ_ＲＤのデータ部分から生成されたＥＣＣコードと元のＥＣＣコードとが一致しない場合は、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれていると判断することができる。この場合、誤り検出訂正部１８は、元のＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤを訂正する。
【００２４】
制御部１３は、メモリセルアレイ１０へのアクセスを制御する。具体的には、制御部１３は、入力アドレスＡＤＤに基づいてロウアドレスＲＡとカラムアドレスＣＡとを生成し、ロウアドレスＲＡを行デコーダ１４にカラムアドレスＣＡを列デコーダ１５にそれぞれ出力する。また、制御部１３は、センスアンプ１７に供給される参照信号ＲＥＦを設定するための参照信号設定信号ＳＥＴ_ＲＥＦを参照信号設定部１６に出力する。
【００２５】
また、制御部１３には、誤り検出訂正部１８から（１）誤り検出訂正部１８がエラーを検出しなかったことを通知する信号、（２）誤り検出訂正部１８がエラー訂正したことを通知する信号、（３）誤り検出訂正部１８がエラー訂正できなかったことを通知する信号（つまり、ＥＣＣエラーを通知する信号）が、エラー通知ＥＣＣ_ＯＵＴとして供給される。制御部１３は、誤り検出訂正部１８においてエラー訂正できない場合、ＥＣＣエラー信号ＥＲＲを出力する。ＥＣＣエラー信号ＥＲＲを出力することで、周辺回路（半導体記憶装置の周辺に設けられている回路）にＥＣＣエラーを通知することができる。
【００２６】
更に制御部１３はレジスタ１９を備える。レジスタ１９には、対象アドレスと当該対象アドレスに対応するセンスアンプの設定情報（具体的には参照信号ＲＥＦの値）とが対応づけて格納されている（以下、これらの情報を再読み出し設定情報ともいう）。図６は、レジスタ１９に格納されている再読み出し設定情報（テーブル）の一例を示す図である。図６に示すように、レジスタ１９には、対象アドレスと誤りビットの位置と参照信号ＲＥＦの値（この場合は参照電流値）とがそれぞれ対応づけて格納されている。例えば、入力アドレスＡＤＤが"ａ"である場合、誤りビットの位置は"４"であり、再読み出しをする際の参照信号ＲＥＦは"Ｉｒｅｆ_１"である。なお、参照信号ＲＥＦの値は、例えばデフォルト値を中心として、高い側に複数の値（例えば、８段階の値）を、低い側に複数の値（例えば、８段階の値）をそれぞれ設定することができる。
【００２７】
制御部１３は、メモリセルアレイ１０から読み出されたデータＤＡＴＡ_ＲＤに訂正できない数の誤りビットが含まれている場合、データＤＡＴＡ_ＲＤを読み出した際の入力アドレスＡＤＤが、レジスタ１９に格納されている対象アドレスに含まれているか照合する。そして、入力アドレスＡＤＤが対象アドレスに含まれている場合、対象アドレスに対応する参照信号ＲＥＦの値を用いて入力アドレスＡＤＤに対応したデータを再度読み出す。このとき、制御部１３は、対象アドレスに対応する参照信号ＲＥＦを設定するための参照信号設定信号ＳＥＴ_ＲＥＦを参照信号設定部１６に出力する。なお、図１に示す半導体記憶装置では、制御部１３にレジスタ１９が設けられている例を示したが、レジスタ１９は制御部１３の外部に独立して設けてもよい。この場合は、再読み出し設定情報をレジスタ１９から制御部１３に供給するための信号線が必要となる。
【００２８】
また、制御部１３は、メモリセルアレイ１０からデータを再度読み出す場合、再読み出し中であることを周辺回路に通知するためのリトライ信号ＲＥＴを出力する。このようにリトライ信号ＲＥＴを出力することで、周辺回路に対して半導体記憶装置へのアクセスが禁止されていることを通知することができる。例えば、制御部１３は、再読み出し中の場合はハイレベルのリトライ信号ＲＥＴを、再読み出し中でない場合はロウレベルのリトライ信号ＲＥＴをそれぞれ出力することができる。
【００２９】
次に、本実施の形態にかかる半導体記憶装置の動作について、図３〜図５に示すフローチャートを用いて説明する。以下で示す動作例では、説明を簡単にするために、誤り検出訂正部１８が１ビット誤り訂正かつ２ビット誤り検出能力を持つ場合について説明する。しかし、本実施の形態にかかる半導体記憶装置では、誤り検出可能なビット数が訂正可能なビット数に対し１ビット以上多ければよく、誤り訂正能力を限定するものではない。また、以下では参照信号ＲＥＦとして参照電流がセンスアンプ１７に供給される場合を例として説明する（以下、参照電流ＲＥＦとも記載する）。ここで、センスアンプ１７に供給される参照電流ＲＥＦのデフォルト値"Ｉｒｅｆ_０"は、製品出荷時のテストにより最適なレベルに予め調整されているものとする。
【００３０】
制御部１３に入力アドレスＡＤＤが供給されると、入力アドレスＡＤＤに対応するデータがメモリセルアレイ１０から読み出される（ステップＳ１）。つまり、制御部１３は入力アドレスＡＤＤが供給されると、ロウアドレスＲＡとカラムアドレスＣＡとを生成し、ロウアドレスＲＡを行デコーダ１４にカラムアドレスＣＡを列デコーダ１５にそれぞれ出力する。行デコーダ１４は、制御部１３から出力されたロウアドレスＲＡに対応したメモリセルＭＣに接続されているワード線ＷＬを選択する。列デコーダ１５は、制御部１３から出力されたカラムアドレスＣＡに対応したメモリセルＭＣに接続されているビット線ＢＬを選択する。これにより、入力アドレスＡＤＤに対応するデータＤＡＴＡ_ＳＥＬがセンスアンプ１７に出力される。センスアンプ１７は、メモリセルアレイ１０から出力されたデータＤＡＴＡ_ＳＥＬ（つまり、ビット線ＢＬに流れる電流）を検出して増幅し、増幅後のデータを読み出しデータＤＡＴＡ_ＲＤとして誤り検出訂正部１８に出力する。
【００３１】
次に、誤り検出訂正部１８は、センスアンプ１７から出力された読み出しデータＤＡＴＡ_ＲＤに含まれているＥＣＣコードを用いて、読み出しデータＤＡＴＡ_ＲＤにエラーが含まれているか判定する（ステップＳ２）。そして、読み出しデータＤＡＴＡ_ＲＤに誤りがない場合（ステップＳ２：Ｎｏ）、誤り検出訂正部１８は、センスアンプ１７から出力された読み出しデータＤＡＴＡ_ＲＤをそのまま出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ３）。この場合、誤り検出訂正部１８は制御部１３に対してエラーを検出しなかったことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。そして、制御部１３は、新たに入力アドレスＡＤＤが供給されるとステップＳ１からの動作を繰り返す。
【００３２】
一方、読み出しデータＤＡＴＡ_ＲＤに誤りがあり（ステップＳ２：Ｙｅｓ）、且つ、その誤りが２ビットの誤りである場合（つまり、訂正できない数の誤りビットを含む場合）はＥＣＣコードを用いてエラー訂正することはできないので（ステップＳ４：Ｎｏ）、図５に示す再読み出し処理を実施する。再読み出し処理については後で詳細に説明する。また、読み出しデータＤＡＴＡ_ＲＤに１ビットの誤りがある場合（つまり、訂正可能な誤りビットを含む場合）は誤り訂正可能であるので（ステップＳ４：Ｙｅｓ）、誤り検出訂正部１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤに含まれているエラーを訂正する（ステップＳ５）。この場合、誤り検出訂正部１８は制御部１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。また、誤り検出訂正部１８は、エラー訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ６）。
【００３３】
誤り検出訂正部１８がエラー訂正（つまり、１ビットの誤り訂正）をしたことを通知するエラー通知信号ＥＣＣ_ＯＵＴ信号が供給されると、制御部１３は、エラーがあったデータに対応する入力アドレスＡＤＤがレジスタ１９に格納されているか確認する。つまり、制御部１３は、レジスタ１９に格納されている対象アドレスにこの入力アドレスＡＤＤが含まれているかを確認する。そして、この入力アドレスＡＤＤが既に対象アドレスとしてレジスタ１９に格納されている場合は（ステップＳ７：Ｙｅｓ）、データの読み出し処理を終了する。
【００３４】
一方、エラーがあったデータに対応する入力アドレスＡＤＤが、対象アドレスとしてレジスタ１９に保存されていない場合は（ステップＳ７：Ｎｏ）、図４に示す再読み出し設定情報を取得する処理を実施する。再読み出し設定情報を取得する場合、制御部１３は、リトライ信号ＲＥＴとしてハイレベルの信号を出力する（ステップＳ１１）。制御部１３からハイレベルのリトライ信号ＲＥＴを出力することで、周辺回路による半導体記憶装置へのアクセスを禁止することができる。
【００３５】
エラーを含むデータの誤りビットの値が"０"である場合は（ステップＳ１２：Ｙｅｓ）、センスアンプ１７に供給される参照電流ＲＥＦをデフォルト値"Ｉｒｅｆ_０"よりも小さく設定し、入力アドレスＡＤＤに対応するデータをメモリセルアレイ１０から再度読み出す（ステップＳ１３）。そして、誤りビットのみが"０"から"１"に反転した場合（ステップＳ１４：Ｙｅｓ）、入力アドレスＡＤＤを対象アドレスとして、また、このときセンスアンプ１７に供給されている参照電流の値をセンスアンプ１７の設定情報としてそれぞれレジスタ１９に格納する（ステップＳ１７）。この再読み出しの動作は、参照電流の値を少しずつ変化させて（この場合は、参照電流を少しずつ小さくして）、誤りビットのみが"０"から"１"に反転するまで繰り返してもよい。一方、誤りビットの値が"０"から"１"に反転したが他のビットの値も反転した場合や、反転したビットが誤りビットではない場合は（ステップＳ１４：Ｎｏ）、再読み出し設定情報を取得できなかったので、レジスタ１９に再読み出し設定情報を保存することなくステップＳ１８へと進む。
【００３６】
図７Ａは、メモリセルアレイ１０からデータを再度読み出す際の参照電流を説明するための図である。図７Ａでは、入力アドレスＡＤＤが"ａ"であり、メモリセルアレイ１０から読み出されたデータＤＡＴＡ_ＲＤに１ビットの誤りがあり、この誤りビットの位置が"４"である例を示している。最初の読み出し（ステップＳ１）では、センスアンプ１７には参照電流ＲＥＦとしてデフォルト値"Ｉｒｅｆ_０"が供給される。しかし、この場合はビット位置"４"の値が"０"として読み出され、正確な値である"１"を読み出すことができないため、誤り検出訂正部１８においてエラーと判定される。
【００３７】
この場合は、誤りビットの値が"０"であるので、ステップＳ１３においてメモリセルアレイ１０からデータを再度読み出す際、センスアンプ１７に供給される参照電流ＲＥＦをデフォルト値"Ｉｒｅｆ_０"よりも小さい値"Ｉｒｅｆ_１"とする。このように、参照電流ＲＥＦを"Ｉｒｅｆ_１"とすることで、ビット位置"４"の値が"１"となる。換言すると、参照電流ＲＥＦを"Ｉｒｅｆ_１"とすることで、誤りビットの値が"０"から"１"に反転する。参照電流ＲＥＦを"Ｉｒｅｆ_１"とすることで誤りビットのエラーが解消されたので、再度読み出されたデータＤＡＴＡ_ＲＤにはエラーが含まれていない。そして、レジスタ１９には、対象アドレスとして入力アドレス"ａ"が、センスアンプ１７の設定情報として参照電流"Ｉｒｅｆ_１"がそれぞれ格納される（図６参照）。
【００３８】
エラーを含むデータの誤りビットの値が"１"である場合は（ステップＳ１２：Ｎｏ）、センスアンプ１７に供給される参照電流ＲＥＦをデフォルト値"Ｉｒｅｆ_０"よりも大きく設定し、入力アドレスＡＤＤに対応するデータをメモリセルアレイ１０から再度読み出す（ステップＳ１５）。そして、誤りビットのみが"１"から"０"に反転した場合（ステップＳ１６：Ｙｅｓ）、入力アドレスＡＤＤを対象アドレスとして、また、このときセンスアンプ１７に供給されている参照電流の値をセンスアンプ１７の設定情報としてそれぞれレジスタ１９に格納する（ステップＳ１７）。この再読み出しの動作は、参照電流の値を少しずつ変化させて（この場合は、参照電流を少しずつ大きくして）、誤りビットのみが"１"から"０"に反転するまで繰り返してもよい。一方、誤りビットの値が"１"から"０"に反転したが他のビットの値も反転した場合や、反転したビットが誤りビットではない場合は（ステップＳ１６：Ｎｏ）、再読み出し設定情報を取得できなかったので、レジスタ１９に再読み出し設定情報を保存することなくステップＳ１８へと進む。
【００３９】
図７Ｂは、メモリセルアレイ１０からデータを再度読み出す際の参照電流を説明するための図である。図７Ｂでは、入力アドレスＡＤＤが"ｂ"であり、メモリセルアレイ１０から読み出されたデータＤＡＴＡ_ＲＤに１ビットの誤りがあり、この誤りビットの位置が"５"である例を示している。最初の読み出し（ステップＳ１）では、センスアンプ１７には参照電流ＲＥＦとしてデフォルト値"Ｉｒｅｆ_０"が供給される。しかし、この場合はビット位置"５"の値が"１"として読み出され、正確な値である"０"を読み出すことができないため、誤り検出訂正部１８においてエラーと判定される。
【００４０】
この場合は、誤りビットの値が"１"であるので、ステップＳ１５においてメモリセルアレイ１０からデータを再度読み出す際、センスアンプ１７に供給される参照電流ＲＥＦをデフォルト値"Ｉｒｅｆ_０"よりも大きい値"Ｉｒｅｆ_２"とする。このように、参照電流ＲＥＦを"Ｉｒｅｆ_２"とすることで、ビット位置"５"の値が"０"となる。換言すると、参照電流ＲＥＦを"Ｉｒｅｆ_２"とすることで、誤りビットの値が"１"から"０"に反転する。参照電流ＲＥＦを"Ｉｒｅｆ_２"とすることで誤りビットのエラーが解消されたので、再度読み出されたデータＤＡＴＡ_ＲＤにはエラーが含まれていない。そして、レジスタ１９には、対象アドレスとして入力アドレス"ｂ"が、センスアンプ１７の設定情報として参照電流"Ｉｒｅｆ_２"がそれぞれ格納される（図６参照）。
【００４１】
その後、制御部１３は、参照信号ＲＥＦをデフォルト値"Ｉｒｅｆ_０"に戻し、リトライ信号ＲＥＴをロウレベルにする（ステップＳ１８）。これにより、再読み出し設定情報を取得する処理が終了し、周辺回路による半導体記憶装置へのアクセスが許可される。
【００４２】
次に、図３に示すステップＳ４でＥＣＣコードを用いてエラー訂正することができないと判断された場合の動作（再読み出し処理）について、図５を用いて詳細に説明する。読み出しデータＤＡＴＡ_ＲＤに２ビットの誤りがある場合、誤り検出訂正部１８は、ＥＣＣコードを用いてエラー訂正することができないと判断し（ステップＳ４：Ｎｏ）、制御部１３に対してＥＣＣエラーであることを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００４３】
制御部１３は、ＥＣＣエラーを通知するエラー通知信号ＥＣＣ_ＯＵＴが供給されると、読み出しデータＤＡＴＡ_ＲＤを読み出した際の入力アドレスＡＤＤが、レジスタ１９に格納されている対象アドレスに含まれているか照合する。そして、入力アドレスＡＤＤが対象アドレスに含まれている場合（ステップＳ２１：Ｙｅｓ）、制御部１３は、リトライ信号ＲＥＴとしてハイレベルの信号を出力する（ステップＳ２２）。制御部１３からハイレベルのリトライ信号ＲＥＴを出力することで、周辺回路による半導体記憶装置へのアクセスを禁止することができる。
【００４４】
その後、制御部１３は、レジスタ１９に格納されている対象アドレスに対応する参照信号ＲＥＦの値を用いて入力アドレスＡＤＤに対応したデータを再度読み出す（ステップＳ２３）。例えば、図６に示す再読み出し設定情報がレジスタ１９に格納されており、入力アドレスＡＤＤが"ａ"である場合、制御部１３は、センスアンプ１７の参照信号（この場合は参照電流）ＲＥＦとして"Ｉｒｅｆ_１"を設定する。これにより、再度読み出されたデータＤＡＴＡ_ＲＤのビット位置"４"のエラーが解消される（図７Ａ参照）。よって、再度読み出されたデータＤＡＴＡ_ＲＤに含まれるエラーの数は２ビットから１ビットになり、ＥＣＣコードを用いてエラー訂正ができるレベルになる（ステップＳ２４：Ｙｅｓ）。
【００４５】
この場合、誤り検出訂正部１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤに含まれているエラーを訂正する（ステップＳ２５）。そして、誤り検出訂正部１８は制御部１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。また、誤り検出訂正部１８は、エラー訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ２６）。その後、制御部１３は、参照信号ＲＥＦをデフォルト値"Ｉｒｅｆ_０"に戻し、リトライ信号ＲＥＴをロウレベルにする（ステップＳ２８）。これにより、再読み出し処理が終了し、周辺回路による半導体記憶装置へのアクセスが許可される。
【００４６】
一方、ステップＳ２１において、入力アドレスＡＤＤが対象アドレスに含まれていないと判断された場合（ステップＳ２１：Ｎｏ）、制御部１３は、ＥＣＣエラー信号ＥＲＲを出力する（ステップＳ２７）。ＥＣＣエラー信号ＥＲＲを出力することで、周辺回路にＥＣＣエラーを通知することができる。その後、ステップＳ２８の処理を実施する。
【００４７】
また、ステップＳ２４でエラー訂正が不可能であると判断された場合（ステップＳ２４：Ｎｏ）、制御部１３は、ＥＣＣエラー信号ＥＲＲを出力し（ステップＳ２７）、その後、ステップＳ２８の処理を実施する。ここで、ステップＳ２４でエラー訂正が不可能であると判断される場合とは、例えば、入力アドレス"ａ"に対応する参照電流"Ｉｒｅｆ_１"を用いてデータＤＡＴＡ_ＲＤを読み出した場合であっても、読み出しデータＤＡＴＡ_ＲＤのビット位置"４"の劣化が更に進んでいたためビット位置"４"のエラーが解消されない場合である。また、例えばビット位置"４"以外のビット位置に新たに誤りビットが発生した場合である。このような場合は、誤りビットが２ビットのままであるので、ＥＣＣコードを用いてもエラー訂正することができない。
【００４８】
背景技術で説明したように、半導体記憶装置に誤り検出訂正機能を設けることで、半導体記憶装置の信頼性を向上させることができる。誤り検出訂正機能は、読み出されたデータに含まれるＥＣＣコードを用いて、データに含まれるエラーを検出して訂正する機能である。よって、読み出されたデータに含まれるエラーの数が訂正可能な範囲内である場合は、誤り検出訂正機能を用いてデータに含まれるエラーを訂正することができる。しかしながら、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合は、誤り検出訂正機能を用いてデータに含まれるエラーを訂正することができないという問題があった。例えば、１ビット誤り訂正かつ２ビット誤り検出能力を持つ誤り検出訂正機能を用いた場合、１ビットの誤りは訂正できるが、２ビットの誤りは検出できるのみで訂正することはできない。また、読み出しデータに付加されるＥＣＣコードを増やすことで、誤り訂正能力を向上させることができる。しかし、ＥＣＣコードを増やすとメモリセルアレイに占めるＥＣＣ領域の割合が増加するという問題があった。よって、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる半導体記憶装置が必要とされていた。
【００４９】
そこで本実施の形態にかかる半導体記憶装置では、レジスタ１９に、対象アドレスと当該対象アドレスに対応するセンスアンプの設定情報（具体的には参照信号ＲＥＦの値）とを対応づけて格納している。そして、所定のデータをメモリセルアレイ１０から読み出した際の入力アドレスＡＤＤが、レジスタ１９に格納されている対象アドレスに含まれている場合、対象アドレスに対応するセンスアンプ１７の設定情報を用いて、入力アドレスＡＤＤに対応したデータを再度読み出している。
【００５０】
よって、最初に読み出されたデータに訂正できない数の誤りビットが含まれている場合であっても、センスアンプ１７の設定値を変えて入力アドレスＡＤＤに対応したデータを再度読み出すことで、最初に読み出されたデータに含まれているエラーを解消することができる。これにより、再読み出し後のデータに含まれているエラーの数をＥＣＣコードを用いて訂正できるレベルにすることができる。よって、読み出されたデータに含まれているエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる。
【００５１】
例えば、１ビット誤り訂正かつ２ビット誤り検出能力を持つ誤り検出訂正部を用いた場合、最初に読み出されたデータに２ビットの誤りが含まれている場合であっても、センスアンプ１７の設定値を変えてデータを再度読み出すことで、再度読み出されたデータに含まれるエラーの数を１ビットにすることができる。よって、読み出されたデータに含まれているエラーを、ＥＣＣコードを用いて訂正することができる。
【００５２】
また、本実施の形態にかかる半導体記憶装置では、メモリセルアレイ１０から読み出されたデータが訂正可能な誤りビットを含む場合に、センスアンプ１７の設定条件を変えて入力アドレスＡＤＤに対応するデータをメモリセルアレイ１０から再度読み出している。そして、誤りビットが反転した場合、入力アドレスＡＤＤを対象アドレスとして、センスアンプ１７の設定条件をセンスアンプの設定情報としてそれぞれレジスタに格納している。
【００５３】
このように、メモリセルアレイ１０から読み出されたデータが訂正可能な誤りビット（例えば、１ビット）を含む場合に、センスアンプ１７の設定条件（つまり参照信号の値）を変えて、読み出されたデータに誤りビットが含まれなくなる条件を予め求めている。よって、同一のアドレスに対応するデータを読み出した際に、当該データにエラー訂正できない数の誤りビット（例えば、２ビット）が含まれるようになったとしても、予め求めていたセンスアンプ１７の設定条件を用いて再度データを読み出すことで、再度読み出されたデータをＥＣＣコードを用いてエラー訂正ができるレベルにすることができる。
【００５４】
また、本実施の形態にかかる半導体記憶装置では、メモリセルアレイ１０から読み出されたデータに訂正できない数の誤りビット（例えば、２ビット）が含まれている場合以外は、センスアンプ１７に供給される参照信号をデフォルト値とている。換言すると、メモリセルアレイ１０から読み出されたデータが訂正可能な誤りビット（例えば、１ビット）を含む場合であっても、センスアンプ１７に供給される参照信号をデフォルト値のままとしている。よって、センスアンプ１７に供給される参照信号を変更する回数を少なくすることができ、半導体記憶装置の動作速度が遅くなることを抑制することができる。また、読み出されたデータが誤りビットを含まない場合や訂正可能な誤りビット（例えば、１ビット）を含む場合に、センスアンプ１７に供給される参照信号をデフォルト値のままとしているので、正常なメモリセルが読み出しエラーとなることを抑制することができる。
【００５５】
以上で説明した本実施の形態により、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる半導体記憶装置およびその制御方法を提供することができる。
【００５６】
なお、本実施の形態にかかる半導体記憶装置では、センスアンプが備える複数のアンプ回路のそれぞれに異なる値の参照信号が供給されるように構成してもよい。図８は、本実施の形態にかかる半導体記憶装置が備えるセンスアンプの他の例を示す図である。図８に示すように、センスアンプ１７'は、複数のアンプＡＭＰ_１〜ＡＭＰ_ｎを備える。各々のアンプＡＭＰ_１〜ＡＭＰ_ｎの一方の入力には列デコーダ１５で選択された各々のデータＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎ（つまり、ＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎにそれぞれ対応するビット線ＢＬに流れる電流）が供給され、他方の入力には各々の参照信号ＲＥＦ_１〜ＲＥＦ_ｎが供給される。
【００５７】
そして、各々のアンプＡＭＰ_１〜ＡＭＰ_ｎは、各々のデータＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎに対応するビット線ＢＬに流れる電流と各々の参照信号ＲＥＦ_１〜ＲＥＦ_ｎとを比較し、このビット線ＢＬに流れる電流が各々の参照信号（参照電流）ＲＥＦ_１〜ＲＥＦ_ｎよりも小さい場合は、読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎとして論理レベルが"０"の信号を出力する。一方、各々のアンプＡＭＰ_１〜ＡＭＰ_ｎは、各々の各々のデータＤＡＴＡ_ＳＥＬ_１〜ＤＡＴＡ_ＳＥＬ_ｎに対応するビット線ＢＬに流れる電流が各々の参照信号（参照電流）ＲＥＦ_１〜ＲＥＦ_ｎよりも大きい場合は、読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎとして論理レベルが"１"の信号を出力する。
【００５８】
そして、図８に示すセンスアンプ１７'では、誤りビットに対応するアンプ（例えば、アンプＡＭＰ_１とする）に対して、レジスタ１９に格納されている参照信号（例えば"Ｉｒｅｆ_１"）を参照信号ＲＥＦ_１として供給し、これ以外のアンプＡＭＰ_２〜ＡＭＰ_ｎには参照信号ＲＥＦ_２〜ＲＥＦ_ｎとしてデフォルト値"Ｉｒｅｆ_０"を供給している。誤りビットの位置の情報は、レジスタ１９に格納されている再読み出し設定情報（図６参照）から取得することができる。このように、センスアンプ１７'が備える複数のアンプ回路ＡＭＰ_１〜ＡＭＰ_ｎのそれぞれに異なる値の参照信号ＲＥＦ_１〜ＲＥＦ_ｎが供給されるように構成することで、誤りビットを含まないビットに対応するセンスアンプの参照信号ＲＥＦをデフォルト値のままとすることができ、正常なメモリセルが読み出しエラーとなることを抑制することができる。
【００５９】
＜実施の形態２＞
次に、実施の形態２について説明する。図９は、本実施の形態にかかる半導体記憶装置を示すブロック図である。本実施の形態にかかる半導体記憶装置では、制御部１３にＢＩＳＴ（built-in self test）信号が供給されている点が、実施の形態１で説明した半導体記憶装置と異なる。これ以外は実施の形態１で説明した半導体記憶装置と同様であるので、同一の構成要素には同一の符号を付し、重複した説明は省略する。
【００６０】
図１０は、本実施の形態にかかる半導体記憶装置の動作（再読み出し設定情報を取得する処理）を説明するためのフローチャートである。エラーを含むデータに対応する入力アドレスＡＤＤが対象アドレスとしてレジスタ１９に保存されていない場合は（図３のステップＳ７：Ｎｏ）、図１０に示す再読み出し設定情報を取得する処理を実施する。再読み出し設定情報を取得する場合、本実施の形態にかかる半導体記憶装置では、制御部１３がＢＩＳＴを実行中であるか判定する。そして、ＢＩＳＴを実行していない場合は（ステップＳ１０：Ｎｏ）、再読み出し設定情報を取得する処理を終了する。一方、ＢＩＳＴを実行している場合は（ステップＳ１０：Ｙｅｓ）、ステップＳ１１〜Ｓ１８に示す再読み出し設定情報を取得する処理を実施する。なお、ステップＳ１１〜Ｓ１８の処理は図４のフローチャートに示すステップＳ１１〜Ｓ１８の処理と同様であるので、重複した説明は省略する。
【００６１】
このように、本実施の形態にかかる半導体記憶装置では、ＢＩＳＴを実行している場合にのみステップＳ１１〜Ｓ１８に示す再読み出し設定情報を取得する処理を実施している。よって、半導体記憶装置を起動した際に実施されるＢＩＳＴにおいて、予め１ビット誤りの箇所を特定し、この箇所の再読み出し設定情報（つまり、参照信号の値）を取得することができる。このため、半導体記憶装置の通常動作時に、２ビット誤りが検出されるまで再読み出し（つまり、ステップＳ１１〜Ｓ１８の処理）が実施されないため、読み出し時間のオーバヘッドを解消することができる。
【００６２】
＜実施の形態３＞
次に、実施の形態３について説明する。図１１は、本実施の形態にかかる半導体記憶装置を示すブロック図である。本実施の形態にかかる半導体記憶装置では、入力データ選択回路２１と書込回路２２とを備える点が、実施の形態２で説明した半導体記憶装置と異なる。これ以外は実施の形態１および２で説明した半導体記憶装置と同様であるので、同一の構成要素には同一の符号を付し、重複した説明は省略する。
【００６３】
入力データ選択回路２１は、ｍ個のセレクタＳＥＬ１〜ＳＥＬｍを備える。ここで、ｍは誤り検出訂正部１８から出力されるデータのデータ長である。各々のセレクタＳＥＬ１〜ＳＥＬｍの一方の入力には各々の入力データＤＡＴＡ_ＩＮ_１〜ＤＡＴＡ_ＩＮ_ｍが供給され、他方の入力には誤り検出訂正部１８から出力された各々の出力データＤＡＴＡ_ＯＵＴ_１〜ＤＡＴＡ_ＯＵＴ_ｍが供給される。そして、各々のセレクタＳＥＬ１〜ＳＥＬｍは、制御部１３から出力された選択信号ＳＥＬに応じて、入力データＤＡＴＡ_ＩＮ_１〜ＤＡＴＡ_ＩＮ_ｍまたは出力データＤＡＴＡ_ＯＵＴ_１〜ＤＡＴＡ_ＯＵＴ_ｍを書込回路２２に出力する。
【００６４】
書込回路２２は、セレクタＳＥＬ１〜ＳＥＬｍから出力された入力データＤＡＴＡ_ＩＮ_１〜ＤＡＴＡ_ＩＮ_ｍまたは出力データＤＡＴＡ_ＯＵＴ_１〜ＤＡＴＡ_ＯＵＴ_ｍを書き込みデータＤＡＴＡ_ＷＲ_１〜ＤＡＴＡ_ＷＲ_ｍとして列デコーダ１５に出力し、メモリセルアレイの所定のアドレスに書き込む。
【００６５】
次に、本実施の形態にかかる半導体記憶装置の動作について、図１２および図１３に示すフローチャートを用いて説明する。まず、制御部１３は、入力アドレスＡＤＤが供給されると、当該入力アドレスＡＤＤに対応する代替アドレスＡＤＤ'がレジスタ１９に格納されているか調べる。半導体記憶装置の出荷時はレジスタ１９に代替アドレスＡＤＤ'が格納されていないので（ステップＳ３１：Ｎｏ）、半導体記憶装置はステップＳ１〜Ｓ７の処理を実施する。ここで、ステップＳ１〜Ｓ７の処理は、図３のフローチャートに示すステップＳ１〜Ｓ７の処理（実施の形態１参照）と同様であるので、重複した説明は省略する。
【００６６】
なお、ステップＳ７において、エラーを含むデータに対応するアドレスＡＤＤが対象アドレスとしてレジスタ１９に保存されていない場合、制御部１３は、図１０に示す再読み出し設定情報を取得する処理を実施する。本実施の形態においても、再読み出し設定情報を取得する処理はＢＩＳＴを実行している場合に行なわれる。図１０に示すステップＳ１０〜Ｓ１８の処理については実施の形態２で説明したので、重複した説明は省略する。
【００６７】
そして、ステップＳ４でＥＣＣコードを用いてエラー訂正することができないと判断された場合、つまり、読み出しデータＤＡＴＡ_ＲＤに２ビットの誤りがある場合、誤り検出訂正部１８は、ＥＣＣコードを用いてエラー訂正することができないと判断し（ステップＳ４：Ｎｏ）、制御部１３に対してＥＣＣエラーであることを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００６８】
制御部１３は、ＥＣＣエラーを通知するエラー通知信号ＥＣＣ_ＯＵＴが供給されると、読み出しデータＤＡＴＡ_ＲＤを読み出した際の入力アドレスＡＤＤが、レジスタ１９に格納されている対象アドレスに含まれているか照合する。そして、入力アドレスＡＤＤが対象アドレスに含まれている場合（ステップＳ４０：Ｙｅｓ）、制御部１３は、リトライ信号ＲＥＴとしてハイレベルの信号を出力する（ステップＳ４１）。制御部１３からハイレベルのリトライ信号ＲＥＴを出力することで、周辺回路による半導体記憶装置へのアクセスを禁止することができる。
【００６９】
その後、制御部１３は、レジスタ１９に格納されている対象アドレスに対応する参照信号ＲＥＦの値を用いて入力アドレスＡＤＤに対応したデータを再度読み出す（ステップＳ４２）。例えば、図６に示す再読み出し設定情報がレジスタ１９に格納されており、入力アドレスＡＤＤが"ａ"である場合、制御部１３は、センスアンプ１７の参照信号（この場合は参照電流）ＲＥＦとして"Ｉｒｅｆ_１"を設定する。これにより、再度読み出されたデータＤＡＴＡ_ＲＤのビット位置"４"のエラーが解消される（図７Ａ参照）。よって、再度読み出されたデータＤＡＴＡ_ＲＤに含まれるエラーの数は２ビットから１ビットになり、ＥＣＣコードを用いてエラー訂正ができるレベルになる（ステップＳ４３：Ｙｅｓ）。
【００７０】
この場合、誤り検出訂正部１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤに含まれているエラーを訂正する（ステップＳ４４）。そして、誤り検出訂正部１８は制御部１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。また、誤り検出訂正部１８は、エラー訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ４５）。
【００７１】
そして、制御部１３はＢＩＳＴを実行中であるか判定する。そして、ＢＩＳＴを実行している場合（ステップＳ４６：Ｙｅｓ）、制御部１３は、代替アドレスＡＤＤ'を用いてメモリセルアレイ１０に出力データＤＡＴＡ_ＯＵＴを格納する。また、制御部１３は、現在の入力アドレスＡＤＤと代替アドレスＡＤＤ'との組をレジスタ１９に格納する（ステップＳ４７）。
【００７２】
つまり、制御部１３は、代替アドレスＡＤＤ'を用いて出力データＤＡＴＡ_ＯＵＴを格納する場合、セレクタＳＥＬ１〜ＳＥＬｍに対して、出力データＤＡＴＡ_ＯＵＴ_１〜ＤＡＴＡ_ＯＵＴ_ｍを選択する選択信号ＳＥＬを出力する。これにより、セレクタＳＥＬ１〜ＳＥＬｍから出力データＤＡＴＡ_ＯＵＴ_１〜ＤＡＴＡ_ＯＵＴ_ｍが出力される。そして、書込回路２２は、セレクタＳＥＬ１〜ＳＥＬｍから出力された出力データＤＡＴＡ_ＯＵＴ_１〜ＤＡＴＡ_ＯＵＴ_ｍを書き込みデータＤＡＴＡ_ＷＲ_１〜ＤＡＴＡ_ＷＲ_ｍとして列デコーダ１５に出力し、代替アドレスＡＤＤ'を用いてメモリセルアレイ１０に書き込む。
【００７３】
その後、制御部１３は、参照信号ＲＥＦをデフォルト値"Ｉｒｅｆ_０"に戻し、リトライ信号ＲＥＴをロウレベルにする（ステップＳ４９）。
【００７４】
一方、ステップＳ４０において、入力アドレスＡＤＤが対象アドレスに含まれていないと判断された場合（ステップＳ４０：Ｎｏ）、また、ステップＳ４３でエラー訂正が不可能であると判断された場合（ステップＳ４３：Ｎｏ）、制御部１３はＥＣＣエラー信号ＥＲＲを出力し（ステップＳ４８）、その後、ステップＳ４９の処理を実施する。
【００７５】
また、ＢＩＳＴを実行していない場合（ステップＳ４６：Ｎｏ）、制御部１３は、ステップＳ４７の処理を実施することなく、ステップＳ４９の処理を実施する。
【００７６】
そして、半導体記憶装置の通常動作時に入力アドレスＡＤＤが供給されると、制御部１３は、当該入力アドレスＡＤＤに対応する代替アドレスＡＤＤ'がレジスタ１９に格納されているか調べる。レジスタ１９に入力アドレスＡＤＤに対応する代替アドレスＡＤＤ'が格納されている場合（ステップＳ３１：Ｙｅｓ）、制御部１３は、入力アドレスＡＤＤを代替アドレスＡＤＤ'に変換して、以降の処理を行なう。つまり、代替アドレスＡＤＤ'にはエラー訂正後のデータが格納されているので、代替アドレスＡＤＤ'を用いてメモリセルアレイ１０からデータを読み出した場合は、エラー訂正後のデータを出力データとして出力することができる（ステップＳ３）。その他の動作については実施の形態１および２で説明した場合と同様であるので、重複した説明は省略する。
【００７７】
本実施の形態にかかる半導体記憶装置では、ＢＩＳＴを実行している際に２ビット誤りを検出した場合、代替アドレスＡＤＤ'を用いてメモリセルアレイ１０にエラー訂正後のデータを書き込んでいる（ステップＳ４７）。よって、半導体記憶装置の通常動作時に２ビット誤りが発生する確率を低減させることができる。
【００７８】
＜実施の形態４＞
次に、実施の形態４について説明する。図１４は、実施の形態４にかかる半導体記憶装置を示すブロック図である。図１４に示すように、本実施の形態にかかる半導体記憶装置は、メモリセルアレイ１１０と、制御部１１３と、行デコーダ１１４と、列デコーダ１１５と、センスアンプ１１６と、反転回路１１７と、誤り検出訂正部（ＥＣＣデコーダ）１１８と、を備える。なお、本実施の形態にかかる半導体記憶装置は、例えばフラッシュメモリ等の不揮発性半導体記憶装置である。
【００７９】
メモリセルアレイ１１０は、ワード線ＷＬ、ビット線ＢＬ、およびメモリセルＭＣを有する。メモリセルＭＣは、ワード線ＷＬとビット線ＢＬとが交わる箇所に各々配置されている。また、メモリセルアレイ１１０は、データ領域１１１とＥＣＣ領域１１２とを備える。データ領域１１１には所定のデータが格納されている。ＥＣＣ領域１１２には、データ領域１１１に格納されているデータに対応するＥＣＣコードが格納されている。ＥＣＣコードは、データを格納する際にＥＣＣエンコーダ（不図示）を用いて生成される。
【００８０】
行デコーダ１１４は、制御部１１３から出力されたロウアドレスＲＡに基づいて、データの読み出しまたは書き込み（以下、単にアクセスともいう）の対象となるメモリセルＭＣに接続されているワード線ＷＬを選択する。
【００８１】
列デコーダ１１５は、制御部１１３から出力されたカラムアドレスＣＡに基づいて、アクセスの対象となるメモリセルＭＣに接続されているビット線ＢＬを選択する。ここで、ロウアドレスＲＡとカラムアドレスＣＡは、制御部１１３に供給される入力アドレスＡＤＤに基づいて生成される。そして、列デコーダ１１５は、入力アドレスＡＤＤに対応するデータＤＡＴＡ_ＳＥＬをセンスアンプ１１６に出力する。
【００８２】
センスアンプ１１６は、メモリセルアレイ１１０から出力されたデータ（つまり、列デコーダ１１５で選択されたデータ）ＤＡＴＡ_ＳＥＬを検出してロジックレベルまで増幅し、増幅されたデータＤＡＴＡ_ＲＤを反転回路１１７に出力する。例えば、センスアンプ１１６は、列デコーダ１１５で選択されたビット線ＢＬに流れる電流と参照信号（この場合は参照電流）ＲＥＦとを比較することでデータＤＡＴＡ_ＳＥＬの論理レベル（つまり、"０"または"１"）を検出することができる。また、例えば、センスアンプ１１６は、列デコーダ１１５で選択されたビット線ＢＬの電圧と参照信号（この場合は参照電圧）ＲＥＦとを比較することでデータＤＡＴＡ_ＳＥＬの論理レベル（つまり、"０"または"１"）を検出することができる。
【００８３】
反転回路１１７は、複数の排他的論理和回路ＸＯＲ_１〜ＸＯＲ_ｎを備える。ここで、ｎの値は、メモリセルアレイ１１０から読み出されるデータのデータ長と当該データに付加されるＥＣＣコードの長さとを足した値である。つまり、メモリセルアレイ１１０から読み出されるデータのデータ長がｍビットであり、ＥＣＣコードの長さがｑビットである場合は、ｎ＝ｍ＋ｑとなる。
【００８４】
各々のＸＯＲ_１〜ＸＯＲ_ｎの一方の入力にはセンスアンプ１１６から出力された各々の読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎが供給され、他方の入力には制御部１１３から出力された各々の反転信号ＲＥＶ_１〜ＲＥＶ_ｎが供給される。そして、各々のＸＯＲ_１〜ＸＯＲ_ｎは各々の反転信号ＲＥＶ_１〜ＲＥＶ_ｎに応じて、各々の読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎをそのままの状態で又は反転して出力する。具体的には、各々のＸＯＲ_１〜ＸＯＲ_ｎは各々の反転信号ＲＥＶ_１〜ＲＥＶ_ｎがロウレベル"０"である場合は、各々の読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎをそのままの状態で出力する。一方、各々のＸＯＲ_１〜ＸＯＲ_ｎは各々の反転信号ＲＥＶ_１〜ＲＥＶ_ｎがハイレベル"１"である場合は、各々の読み出しデータＤＡＴＡ_ＲＤ_１〜ＤＡＴＡ_ＲＤ_ｎを反転させて出力する。各々のＸＯＲ_１〜ＸＯＲ_ｎから出力された読み出しデータは、読み出しデータＤＡＴＡ_ＲＤ'_１〜ＤＡＴＡ_ＲＤ'_ｎとする。
【００８５】
誤り検出訂正部１１８は、反転回路１１７から出力された読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーを検出して訂正し、訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する。つまり、誤り検出訂正部１１８は、反転回路１１７から出力された読み出しデータＤＡＴＡ_ＲＤ'に含まれているＥＣＣコードを用いて、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれているか判定する。そして、誤り検出訂正部１１８は、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれていない場合は、反転回路１１７から出力された読み出しデータＤＡＴＡ_ＲＤ'をそのまま出力データＤＡＴＡ_ＯＵＴとして出力する。この場合、誤り検出訂正部１１８は制御部１１３に対してエラーを検出しなかったことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００８６】
一方、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれており、且つ読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーの数が訂正可能な範囲内である場合、誤り検出訂正部１１８は読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーを訂正し、訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する。この場合、誤り検出訂正部１１８は制御部１１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００８７】
また、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれており、且つ読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーの数が訂正可能な数よりも多い場合、誤り検出訂正部１１８はエラー訂正をすることなくＥＣＣエラーと判断する。この場合、誤り検出訂正部１１８は制御部１１３に対してＥＣＣエラーであることを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【００８８】
本明細書において「ＥＣＣエラー」とは、読み出しデータＤＡＴＡ_ＲＤ'に訂正できない数の誤りビットが含まれている場合をいう。例えば、誤り検出訂正部１１８が１ビット誤り訂正かつ２ビット誤り検出能力を持つ場合、誤り検出訂正部１１８は読み出しデータＤＡＴＡ_ＲＤ'に２ビットの誤りが含まれている場合にＥＣＣエラーと判断する。一方、読み出しデータＤＡＴＡ_ＲＤ'に１ビットの誤りが含まれている場合、誤り検出訂正部１１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーを訂正することができる。
【００８９】
誤り検出訂正部１１８は、例えば、読み出しデータＤＡＴＡ_ＲＤ'のデータ部分からＥＣＣコードを生成し、読み出しデータＤＡＴＡ_ＲＤ'に付加されている（つまり、ＥＣＣ領域１２に格納されていた）ＥＣＣコード（元のＥＣＣコード）と比較する。そして、読み出しデータＤＡＴＡ_ＲＤ'のデータ部分から生成されたＥＣＣコードと元のＥＣＣコードとが一致する場合は、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれていないと判断することができる。一方、読み出しデータＤＡＴＡ_ＲＤ'のデータ部分から生成されたＥＣＣコードと元のＥＣＣコードとが一致しない場合は、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれていると判断することができる。この場合、誤り検出訂正部１１８は、元のＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤ'を訂正する。
【００９０】
制御部１１３は、メモリセルアレイ１１０へのアクセスを制御する。具体的には、制御部１１３は、入力アドレスＡＤＤに基づいてロウアドレスＲＡとカラムアドレスＣＡとを生成し、ロウアドレスＲＡを行デコーダ１１４にカラムアドレスＣＡを列デコーダ１１５にそれぞれ出力する。
【００９１】
また、制御部１１３には、誤り検出訂正部１１８から（１）誤り検出訂正部１１８がエラーを検出しなかったことを通知する信号、（２）誤り検出訂正部１１８がエラー訂正したことを通知する信号、（３）誤り検出訂正部１１８がエラー訂正できなかったことを通知する信号（つまり、ＥＣＣエラーを通知する信号）が、エラー通知ＥＣＣ_ＯＵＴとして供給される。制御部１１３は、誤り検出訂正部１１８においてエラー訂正できない場合、ＥＣＣエラー信号ＥＲＲを出力する。ＥＣＣエラー信号ＥＲＲを出力することで、周辺回路（半導体記憶装置の周辺に設けられている回路）にＥＣＣエラーを通知することができる。
【００９２】
更に制御部１１３はレジスタ１１９を備える。レジスタ１１９には、対象アドレスと当該対象アドレスに対応するデータに含まれる誤りビットの位置に関する情報とが格納されている（以下、これらの情報を誤りビット位置情報ともいう）。例えば、入力アドレスＡＤＤが"ａ"であり、当該アドレスに対応する読み出しデータに含まれる誤りビットの位置が"４"である場合は、入力アドレス"ａ"と誤りビット位置"４"とが対応づけて格納される（図６に示す表の対象アドレスと誤りビットの位置に対応する）。
【００９３】
また、制御部１１３は、メモリセルアレイ１１０から読み出されたデータＤＡＴＡ_ＲＤ'（つまり、誤り検出訂正部１１８に供給されるデータ）に訂正できない数の誤りビットが含まれている場合、データＤＡＴＡ_ＲＤ'を読み出した際の入力アドレスＡＤＤが、レジスタ１１９に格納されている対象アドレスに含まれているか照合する。そして、入力アドレスＡＤＤが対象アドレスに含まれている場合、誤りビットの位置に関する情報を用いてデータＤＡＴＡ_ＲＤ（つまり、反転回路１１７に供給されるデータ）に含まれる誤りビットを反転させる。なお、図１４に示す半導体記憶装置では、制御部１１３にレジスタ１１９が設けられている例を示したが、レジスタ１１９は制御部１１３の外部に独立して設けてもよい。この場合は、誤りビット位置情報をレジスタ１１９から制御部１１３に供給するための信号線が必要となる。
【００９４】
また、制御部１１３は、メモリセルアレイ１１０から読み出されたデータＤＡＴＡ_ＲＤに対してビット反転処理を実施する場合、現在出力されている出力データＤＡＴＡ_ＯＵＴがエラー訂正前のデータであることを通知するためのリトライ信号ＲＥＴを出力する。例えば、制御部１１３は、読み出されたデータＤＡＴＡ_ＲＤにビット反転処理を実施する場合、リトライ信号ＲＥＴとしてハイレベルの信号を出力する。
【００９５】
次に、本実施の形態にかかる半導体記憶装置の動作について、図１５〜図１６に示すフローチャートを用いて説明する。以下で示す動作例では、説明を簡単にするために、誤り検出訂正部１１８が１ビット誤り訂正かつ２ビット誤り検出能力を持つ場合について説明する。しかし、本実施の形態にかかる半導体記憶装置では、誤り検出可能なビット数が訂正可能なビット数に対し１ビット以上多ければよく、誤り訂正能力を限定するものではない。
【００９６】
制御部１１３に入力アドレスＡＤＤが供給されると、入力アドレスＡＤＤに対応するデータがメモリセルアレイ１１０から読み出される（ステップＳ１０１）。つまり、制御部１１３は入力アドレスＡＤＤが供給されると、ロウアドレスＲＡとカラムアドレスＣＡとを生成し、ロウアドレスＲＡを行デコーダ１１４にカラムアドレスＣＡを列デコーダ１１５にそれぞれ出力する。行デコーダ１１４は、制御部１１３から出力されたロウアドレスＲＡに対応したメモリセルＭＣに接続されているワード線ＷＬを選択する。列デコーダ１１５は、制御部１１３から出力されたカラムアドレスＣＡに対応したメモリセルＭＣに接続されているビット線ＢＬを選択する。これにより、入力アドレスＡＤＤに対応するデータＤＡＴＡ_ＳＥＬがセンスアンプ１１６に出力される。センスアンプ１１６は、メモリセルアレイ１１０から出力されたデータＤＡＴＡ_ＳＥＬ（つまり、ビット線ＢＬに流れる電流）を検出して増幅し、増幅後のデータを読み出しデータＤＡＴＡ_ＲＤとして反転回路１１７に出力する。反転回路１１７は、読み出しデータＤＡＴＡ_ＲＤを反転することなく誤り検出訂正部１１８に出力する。このとき、制御部１１３から出力される反転信号ＲＥＶ_１〜ＲＥＶ_ｎは全てロウレベルである。
【００９７】
次に、誤り検出訂正部１１８は、反転回路１１７から出力された読み出しデータＤＡＴＡ_ＲＤ'に含まれているＥＣＣコードを用いて、読み出しデータＤＡＴＡ_ＲＤ'にエラーが含まれているか判定する（ステップＳ１０２）。そして、読み出しデータＤＡＴＡ_ＲＤ'に誤りがない場合（ステップＳ１０２：Ｎｏ）、誤り検出訂正部１１８は、反転回路１１７から出力された読み出しデータＤＡＴＡ_ＲＤ'をそのまま出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ１０３）。この場合、誤り検出訂正部１１８は制御部１１３に対してエラーを検出しなかったことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。そして、制御部１１３は、新たに入力アドレスＡＤＤが供給されるとステップＳ１０１からの動作を繰り返す。
【００９８】
一方、読み出しデータＤＡＴＡ_ＲＤ'に誤りがあり（ステップＳ１０２：Ｙｅｓ）、且つ、その誤りが２ビットの誤りである場合（つまり、訂正できない数の誤りビットを含む場合）はＥＣＣコードを用いてエラー訂正することはできないので（ステップＳ１０４：Ｎｏ）、図１６に示すビット反転処理を実施する。ビット反転処理については後で詳細に説明する。また、読み出しデータＤＡＴＡ_ＲＤ'に１ビットの誤りがある場合（つまり、訂正可能な誤りビットを含む場合）は誤り訂正可能であるので（ステップＳ１０４：Ｙｅｓ）、誤り検出訂正部１１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーを訂正する（ステップＳ１０５）。この場合、誤り検出訂正部１１８は制御部１１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。また、誤り検出訂正部１１８は、エラー訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ１０６）。
【００９９】
誤り検出訂正部１１８がエラー訂正（つまり、１ビットの誤り訂正）をしたことを通知するエラー通知信号ＥＣＣ_ＯＵＴ信号が供給されると、制御部１１３は、エラーがあったデータに対応する入力アドレスＡＤＤがレジスタ１１９に格納されているか確認する。つまり、制御部１１３は、レジスタ１１９に格納されている対象アドレスにこの入力アドレスＡＤＤが含まれているかを確認する。そして、この入力アドレスＡＤＤが既に対象アドレスとしてレジスタ１１９に格納されている場合は（ステップＳ１０７：Ｙｅｓ）、データの読み出し処理を終了する。
【０１００】
一方、エラーがあったデータに対応する入力アドレスＡＤＤが対象アドレスとしてレジスタ１１９に保存されていない場合（ステップＳ１０７：Ｎｏ）、制御部１１３は、この入力アドレスＡＤＤと、エラーを含むデータの誤りビットの位置とをレジスタ１１９に格納する（ステップＳ１０８）。このように、読み出しデータＤＡＴＡ_ＲＤ'に１ビットの誤りがある場合、この１ビットの誤りの位置と、読み出しデータＤＡＴＡ_ＲＤ'を読み出した際の入力アドレスＡＤＤとを関連付けて格納することで、誤りビット位置情報が蓄積される。
【０１０１】
次に、ステップＳ１０４でＥＣＣコードを用いてエラー訂正することができないと判断された場合の動作（ビット反転処理）について、図１６を用いて詳細に説明する。読み出しデータＤＡＴＡ_ＲＤ'に２ビットの誤りがある場合、誤り検出訂正部１１８は、ＥＣＣコードを用いてエラー訂正することができないと判断し（ステップＳ１０４：Ｎｏ）、制御部１１３に対してＥＣＣエラーであることを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。
【０１０２】
制御部１１３は、ＥＣＣエラーを通知するエラー通知信号ＥＣＣ_ＯＵＴが供給されると、読み出しデータＤＡＴＡ_ＲＤを読み出した際の入力アドレスＡＤＤが、レジスタ１１９に格納されている対象アドレスに含まれているか照合する。そして、入力アドレスＡＤＤが対象アドレスに含まれている場合（ステップＳ１１１：Ｙｅｓ）、制御部１１３は、リトライ信号ＲＥＴとしてハイレベルの信号を出力する（ステップＳ１１２）。制御部１１３からハイレベルのリトライ信号ＲＥＴを出力することで、誤り検出訂正部１１８から現在出力されている出力データはエラー訂正前のデータであることを周辺回路に通知することができる。
【０１０３】
その後、制御部１１３は、レジスタ１１９に格納されている誤りビットの位置に関する情報に基づいて、センスアンプ１１６から出力されている読み出しデータＤＡＴＡ_ＲＤに含まれる誤りビットを反転させる（ステップＳ１１３）。つまり、制御部１１３は、誤りビットの位置に対応する排他的論理和回路ＸＯＲにハイレベルの反転信号ＲＥＶを出力する。これにより、センスアンプ１１６から出力された読み出しデータＤＡＴＡ_ＲＤに含まれる誤りビットを反転させることができ、この誤りビットのデータを正しいデータに訂正することができる。
【０１０４】
例えば、センスアンプ１１６から出力された読み出しデータＤＡＴＡ_ＲＤ_１が誤りビットであり、読み出しデータＤＡＴＡ_ＲＤ_１が誤った値である"０"を出力している場合、制御部１１３はＸＯＲ_１にハイレベルの反転信号ＲＥＶ_１を出力する。これにより、読み出しデータＤＡＴＡ_ＲＤ_１の"０"がＸＯＲ_１で反転されて"１"となり、反転回路１１７から読み出しデータＤＡＴＡ_ＲＤ'_１として"１"（正しい値）が出力される。
【０１０５】
よって、読み出されたデータＤＡＴＡ_ＲＤ'に含まれるエラーの数は２ビットから１ビットになるので、ＥＣＣコードを用いてエラー訂正ができるレベルになる。その後、誤り検出訂正部１１８はＥＣＣコードを用いて読み出しデータＤＡＴＡ_ＲＤ'に含まれているエラーを訂正する（ステップＳ１１４）。そして、誤り検出訂正部１１８は制御部１１３に対してエラー訂正したことを通知するエラー通知信号ＥＣＣ_ＯＵＴを出力する。また、誤り検出訂正部１１８は、エラー訂正後のデータを出力データＤＡＴＡ_ＯＵＴとして出力する（ステップＳ１１５）。その後、制御部１１３は、リトライ信号ＲＥＴをロウレベルにする（ステップＳ１１６）。これにより、誤り検出訂正部１１８から現在出力されている出力データがエラー訂正後のデータであることを周辺回路に通知することができる。
【０１０６】
一方、ステップＳ１１１において、入力アドレスＡＤＤが対象アドレスに含まれていないと判断された場合（ステップＳ１１１：Ｎｏ）、制御部１１３は、ＥＣＣエラー信号ＥＲＲを出力する（ステップＳ１１７）。ＥＣＣエラー信号ＥＲＲを出力することで、周辺回路にＥＣＣエラーを通知することができる。その後、ステップＳ１１７の処理を実施する。
【０１０７】
背景技術で説明したように、半導体記憶装置に誤り検出訂正機能を設けることで、半導体記憶装置の信頼性を向上させることができる。誤り検出訂正機能は、読み出されたデータに含まれるＥＣＣコードを用いて、データに含まれるエラーを検出して訂正する機能である。よって、読み出されたデータに含まれるエラーの数が訂正可能な範囲内である場合は、誤り検出訂正機能を用いてデータに含まれるエラーを訂正することができる。しかしながら、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合は、誤り検出訂正機能を用いてデータに含まれるエラーを訂正することができないという問題があった。例えば、１ビット誤り訂正かつ２ビット誤り検出能力を持つ誤り検出訂正機能を用いた場合、１ビットの誤りは訂正できるが、２ビットの誤りは検出できるのみで訂正することはできない。また、読み出しデータに付加されるＥＣＣコードを増やすことで、誤り訂正能力を向上させることができる。しかし、ＥＣＣコードを増やすとメモリセルアレイに占めるＥＣＣ領域の割合が増加するという問題があった。よって、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる半導体記憶装置が必要とされていた。
【０１０８】
そこで本実施の形態にかかる半導体記憶装置では、レジスタ１１９に、対象アドレスと当該対象アドレスに対応するデータに含まれる誤りビットの位置に関する情報とを対応づけて格納している。そして、所定のデータをメモリセルアレイ１１０から読み出した際の入力アドレスＡＤＤがレジスタ１１９に格納されている対象アドレスに含まれている場合、読み出されたデータに含まれる誤りビットを、誤りビットの位置に関する情報を用いて反転させている。
【０１０９】
よって、読み出されたデータに訂正できない数の誤りビットが含まれている場合であっても、レジスタ１１９に格納されている誤りビットの位置に関する情報に基づいて、読み出されたデータに含まれている誤りビットを反転させているので、読み出されたデータのエラーの数をＥＣＣコードを用いて訂正できる範囲とすることができる。よって、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる。
【０１１０】
例えば、１ビット誤り訂正かつ２ビット誤り検出能力を持つ誤り検出訂正部１１８を用いた場合、読み出されたデータに２ビットの誤りが含まれている場合であっても、レジスタ１１９に格納されている誤りビットの位置に関する情報に基づいて、読み出されたデータに含まれている誤りビットを反転させることで、読み出されたデータに含まれているエラーの数を１ビットにすることができる。よって、読み出されたデータに含まれているエラーを、ＥＣＣコードを用いて訂正することができる。
【０１１１】
つまり、本実施の形態にかかる半導体記憶装置では、メモリセルアレイ１１０から読み出されたデータが訂正可能な誤りビット（例えば、１ビット）を含む場合に、誤りビットの位置をこの場合の入力アドレスＡＤＤと関連づけてレジスタ１１９に格納している。よって、同一のアドレスに対応するデータを読み出した際に、当該データにエラー訂正できない数の誤りビット（例えば、２ビット）が含まれるようになったとしても、レジスタ１１９に格納されている誤りビットの位置に関する情報に基づいて、読み出されたデータに含まれている誤りビットを反転させることで、再度読み出されたデータをＥＣＣコードを用いてエラー訂正ができるレベルにすることができる。
【０１１２】
以上で説明した本実施の形態により、読み出されたデータに含まれるエラーの数が訂正可能な数よりも多い場合でも、読み出されたデータに含まれているエラーを訂正することができる半導体記憶装置およびその制御方法を提供することができる。
【０１１３】
なお、本実施の形態にかかる半導体記憶装置では、レジスタ１１９に誤りビット位置情報を格納する処理（ステップＳ１０８の処理）を、ＢＩＳＴを実行する際に予め行ってもよい。この場合は、例えば制御部１３にＢＩＳＴ信号が供給されるように構成する。
【０１１４】
なお、これまで示した実施の形態１乃至４にかかる半導体記憶装置では、レジスタ１９または１１９に不揮発性半導体記憶装置を用いてもよい。不揮発性半導体記憶装置としては、例えばＲｅＲＡＭ（Resistive Random Access Memory）、ＭＲＡＭ（Magnetic Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）を用いることができる。レジスタ１９または１１９に不揮発性半導体記憶装置を用いることで、書き込み時間を読み出し時間と同程度に短くすることができる。このため、レジスタ１９または１１９に情報を格納する際に処理時間が増加することを抑制することができ、また、電源再投入時には、既にテスト済みのアドレスに対してはレジスタに格納された情報が残されているため、情報を格納する処理を省略することができ、高速化が図れる。
【０１１５】
なお、実施の形態４にかかる半導体記憶装置は、下記の通り表現することができる。
【０１１６】
（付記１）
複数のメモリセルが配列されたメモリセルアレイと、
前記メモリセルアレイから出力されたデータを検出して増幅するセンスアンプと、
前記センスアンプから出力された各々の読み出しデータのビットの一部を反転させる反転回路と、
前記メモリセルアレイへのアクセスを制御し、対象アドレスと当該対象アドレスに対応するデータに含まれる誤りビットの位置に関する情報とを備える制御部と、を有し、
前記制御部は、前記所定のデータを前記メモリセルアレイから読み出した際の入力アドレスが前記対象アドレスに含まれている場合、前記読み出されたデータに含まれる前記誤りビットを前記誤りビットの位置に関する情報を用いて反転させる、
半導体記憶装置。
（付記２）
前記反転回路から出力されたデータに含まれているエラーを検出して訂正し、エラー訂正後のデータを出力する誤り検出訂正部を更に備え、
前記制御部は、前記メモリセルアレイから読み出された前記所定のデータに訂正できない数の誤りビットが含まれている場合に、前記読み出されたデータに含まれる前記誤りビットを前記誤りビットの位置に関する情報を用いて反転させ、
前記誤り検出訂正部は、前記誤りビットを反転させた後のデータに含まれているエラーを訂正する、
付記１に記載の半導体記憶装置。
（付記３）
前記制御部は、前記メモリセルアレイから読み出された前記入力アドレスに対応するデータが訂正可能な誤りビットを含む場合、前記入力アドレスを前記対象アドレスとして、前記読み出されたデータに含まれる誤りビットの位置を前記誤りビットの位置に関する情報としてそれぞれ格納する、付記２に記載の半導体記憶装置。
（付記４）
前記制御部は、前記読み出されたデータの前記誤りビットを反転させる間、現在出力されている出力データがエラー訂正前のデータであることを通知するための信号を出力する、付記３に記載の半導体記憶装置。
（付記５）
前記制御部は、前記メモリセルアレイのＢＩＳＴを実行している間に、前記対象アドレスと当該対象アドレスに対応するデータに含まれる誤りビットの位置に関する情報とを格納する、付記３に記載の半導体記憶装置。
（付記６）
入力アドレスに応じた所定のデータをメモリセルアレイから読み出し、
対象アドレスと当該対象アドレスに対応するデータに含まれる誤りビットの位置に関する情報とが格納されたテーブルを参照し、前記入力アドレスが前記対象アドレスに含まれているかを判定し、
前記入力アドレスが前記対象アドレスに含まれている場合、前記読み出されたデータに含まれる前記誤りビットを前記誤りビットの位置に関する情報を用いて反転させる、
半導体記憶装置の制御方法。
（付記７）
前記メモリセルアレイから読み出された前記所定のデータに訂正できない数の誤りビットが含まれている場合に、前記読み出されたデータに含まれる前記誤りビットを前記誤りビットの位置に関する情報を用いて反転させ、
前記誤りビットを反転させた後のデータに含まれているエラーを訂正する、
付記６に記載の半導体記憶装置の制御方法。
（付記８）
前記メモリセルアレイから読み出された前記入力アドレスに対応するデータが訂正可能な誤りビットを含む場合、前記入力アドレスを前記対象アドレスとして、前記読み出されたデータに含まれる誤りビットの位置を前記誤りビットの位置に関する情報としてそれぞれ格納する、付記７に記載の半導体記憶装置の制御方法。
【０１１７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１１８】
１０  メモリセルアレイ
１１  データ領域
１２  ＥＣＣ領域
１３  制御部
１４  行デコーダ
１５  列デコーダ
１６  参照信号設定部
１７  センスアンプ
１８  誤り検出訂正部
１９  レジスタ
２１  入力データ選択回路
２２  書込回路
１１０  メモリセルアレイ
１１１  データ領域
１１２  ＥＣＣ領域
１１３  制御部
１１４  行デコーダ
１１５  列デコーダ
１１６  センスアンプ
１１７  反転回路
１１８  誤り検出訂正部
１１９  レジスタ
【図１】
2014010850.tif 000003
【図２】
2014010850.tif 000004
【図３】
2014010850.tif 000005
【図４】
2014010850.tif 000006
【図５】
2014010850.tif 000007
【図６】
2014010850.tif 000008
【図７Ａ】
2014010850.tif 000009
【図７Ｂ】
2014010850.tif 000010
【図８】
2014010850.tif 000011
【図９】
2014010850.tif 000012
【図１０】
2014010850.tif 000013
【図１１】
2014010850.tif 000014
【図１２】
2014010850.tif 000015
【図１３】
2014010850.tif 000016
【図１４】
2014010850.tif 000017
【図１５】
2014010850.tif 000018
【図１６】
2014010850.tif 000019