(57)【特許請求の範囲】
【請求項１】
アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセルと、
前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段と、
前記メモリセルから読み出されたデータのエラーを訂正するエラー訂正手段と、
前記エラー訂正後のデータを保持するデータ保持手段と、
２サイクルに１回アドレスをインクリメントするアドレス生成手段と、
前記メモリセルからのデータの読み出しまたは前記メモリセルへのデータの書き込みをサイクル毎に交互に切り替える切り替え手段と、を備え、
前記メモリセルは、前記検出手段の検出結果に応じて、前記データ保持手段に保持されている前記データを前記アドレスに対応づけて書き込み、
前記データ保持手段は、前記アドレスに応じた読み出しデータとして前記データ保持手段に保持されている前記データを出力し、
更に、前記メモリセルは、前記切り替え手段からの信号に応じて、前記アドレス生成手段で生成されたアドレスに応じたデータの読み出し、または当該アドレスに対応づけた前記データ保持手段に保持されている前記データの書き込みを実施する、
半導体記憶装置。
【請求項２】
前記同一アドレスが入力される１サイクル目に対応するタイミングにおいて、前記データ保持手段は前記アドレスに対応した前記エラー訂正後のデータを保持し、
前記同一アドレスが入力される２サイクル目に対応するタイミングにおいて、前記メモリセルは前記アドレスに対応づけて前記データ保持手段に保持されている前記データを書き込み、前記データ保持手段は、前記アドレスに対応した読み出しデータとして前記データ保持手段に保持されている前記データを出力する、
請求項１に記載の半導体記憶装置。
【請求項３】
前記データ保持手段は、前記エラー訂正後のデータを保持する第１のデータ保持手段と、前記エラー訂正後のデータを保持すると共に当該データを前記検出手段の検出結果に応じてホールド可能な第２のデータ保持手段と、を備え、
前記同一アドレスｎ（ｎは任意の整数とする）が入力される１サイクル目に対応するタイミングにおいて、前記第１および第２のデータ保持手段はアドレスｎに対応した前記エラー訂正後のデータを保持し、
前記同一アドレスｎが入力される２サイクル目に対応するタイミングにおいて、前記メモリセルは前記アドレスｎに対応づけて前記第１のデータ保持手段に保持されている前記データを書き込み、前記第２のデータ保持手段は、前記アドレスｎに対応した読み出しデータとして前記第２のデータ保持手段に保持されている前記データを出力し、
前記同一アドレスｎが入力される３サイクル目に対応するタイミングにおいて、前記第１のデータ保持手段は前記アドレス生成手段で生成されたアドレスｎ＋１に対応した前記エラー訂正後のデータを保持し、
前記同一アドレスｎが入力される４サイクル目に対応するタイミングにおいて、前記メモリセルは前記アドレスｎ＋１に対応づけて前記第１のデータ保持手段に保持されている前記データを書き込み、前記第２のデータ保持手段は、前記アドレスｎに対応した読み出しデータとして前記第２のデータ保持手段に保持されている前記データを出力する、
請求項１に記載の半導体記憶装置。
【請求項４】
アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセルと、
前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段と、
前記メモリセルから読み出されたデータのエラーを訂正するエラー訂正手段と、
前記エラー訂正後のデータを保持するデータ保持手段と、
半導体記憶装置に供給される書き込みデータと、前記データ保持手段に保持されている前記データと、を選択的に出力する第１のセレクタと、を備え、
前記メモリセルへの書き込みを指示するライトイネーブル信号が前記半導体記憶装置に供給された場合、前記第１のセレクタは前記書き込みデータを前記メモリセルに供給し、
前記検出手段が前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出した場合、前記第１のセレクタは前記アドレスに応じた読み出しデータとして前記データ保持手段に保持されている前記データを前記メモリセルに供給し、前記メモリセルは前記データ保持手段に保持されている前記データを前記アドレスに対応づけて書き込む、
半導体記憶装置。
【請求項５】
前記半導体記憶装置に供給される書き込みデータと、前記第１のデータ保持手段に保持されている前記データと、を選択的に出力する第２のセレクタを更に備え、
前記メモリセルへの書き込みを指示するライトイネーブル信号が前記半導体記憶装置に供給された場合、前記第２のセレクタは前記書き込みデータを前記メモリセルに供給し、
前記切り替え手段が前記メモリセルへのデータの書き込みを指示する信号を出力した場合、前記第２のセレクタは前記第１のデータ保持手段に保持されている前記データを前記メモリセルに供給する、
請求項３に記載の半導体記憶装置。
【請求項６】
アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセルと、
前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段と、
前記メモリセルから読み出されたデータのエラーを訂正するエラー訂正手段と、
前記エラー訂正後のデータを保持するデータ保持手段と、を備え、
前記メモリセルは、前記検出手段の検出結果に応じて、前記データ保持手段に保持されている前記データを前記アドレスに対応づけて書き込み、
前記データ保持手段は、前記アドレスに応じた読み出しデータとして前記データ保持手段に保持されている前記データを出力し、
前記検出手段は、
一方の入力に半導体記憶装置に供給される前記アドレスが供給され、他方の入力に第１のレジスタを介して前記アドレスが供給される比較器と、
一方の入力に前記半導体記憶装置に供給されるライトイネーブル信号が反転された信号が供給され、他方の入力に第２のレジスタを介して前記ライトイネーブル信号が反転された信号が供給される第１のＡＮＤゲートと、
一方の入力に前記比較器の出力が供給され、他方の入力に前記第１のＡＮＤゲートの出力が供給される第２のＡＮＤゲートと、を備える
半導体記憶装置。
【請求項７】
半導体記憶装置の制御方法であって、
前記半導体記憶装置は、
アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセルと、
前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段と、
前記メモリセルから読み出されたデータのエラーを訂正するエラー訂正手段と、
前記エラー訂正後のデータを保持する第１のデータ保持手段と、
前記エラー訂正後のデータを保持すると共に当該データを前記検出手段の検出結果に応じてホールド可能な第２のデータ保持手段と、
２サイクルに１回アドレスをインクリメントするアドレス生成手段と、
前記メモリセルからのデータの読み出しまたは前記メモリセルへのデータの書き込みをサイクル毎に交互に切り替える切り替え手段と、を備え、
前記同一アドレスｎ（ｎは任意の整数とする）が入力される１サイクル目に対応するタイミングにおいて、前記第１および第２のデータ保持手段がアドレスｎに対応した前記エラー訂正後のデータを保持し、
前記同一アドレスｎが入力される２サイクル目に対応するタイミングにおいて、前記メモリセルが前記アドレスｎに対応づけて前記第１のデータ保持手段に保持されている前記データを書き込み、前記第２のデータ保持手段が、前記アドレスｎに対応した読み出しデータとして前記第２のデータ保持手段に保持されている前記データを出力し、
前記同一アドレスｎが入力される３サイクル目に対応するタイミングにおいて、前記第１のデータ保持手段が前記アドレス生成手段で生成されたアドレスｎ＋１に対応した前記エラー訂正後のデータを保持し、
前記同一アドレスｎが入力される４サイクル目に対応するタイミングにおいて、前記メモリセルが前記アドレスｎ＋１に対応づけて前記第１のデータ保持手段に保持されている前記データを書き込み、前記第２のデータ保持手段が、前記アドレスｎに対応した読み出しデータとして前記第２のデータ保持手段に保持されている前記データを出力する、
半導体記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体記憶装置およびその制御方法に関し、特に誤り訂正回路を含む半導体記憶装置およびその制御方法に関する。
【背景技術】
【０００２】
一般的に、ＤＲＡＭ（Dynamic Random Access Memory）等の半導体メモリを含む回路では、α線や中性子線が原因で発生するソフトエラーの影響を受ける。このソフトエラーの影響を少なくするために、１ビットエラー訂正、２ビットエラー検出の機能を有するＥＣＣ（Error Checking & Correction）回路が設けられている。さらに、メモリからデータを読み出す際に１ビットエラーが発生するとＥＣＣ回路によりそのデータを訂正し、その訂正後のデータを同じアドレスに書き込む動作（再書き込み動作）を行うことにより、メモリから読み出されるデータの信頼性を高めることができる。このような再書き込み動作はパトロール方式とも呼ばれ、特許文献１乃至３にその技術が開示されている。
【０００３】
また、ＳＲＡＭ（Static Random Access Memory）においても、半導体素子構造の微細化および記憶容量の増加に伴い、ソフトエラーによる影響が無視できないものとなってきている。特許文献４には、このソフトエラーによる影響を少なくするための技術が開示されている。特許文献４に開示されている半導体メモリでは、メモリセルからのデータを読み出し、エラー訂正、メモリセルへの書き戻し、といった一連の動作を１クロックサイクルで実現している。また、特許文献５には強誘電体メモリのソフトエラーによりシステムへの大きなダメージが引き起こされる確率を低減する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭５９−５３９４９号公報
【特許文献２】特開平２−１０３６５２号公報
【特許文献３】特開平４−２３２９５号公報
【特許文献４】特開２００６−１１４１４１号公報
【特許文献５】特開２００４−１９９７１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
背景技術で説明したように、パトロール方式を用いた半導体記憶装置（例えば、ＤＲＡＭ）では、１ビットエラーや２ビットエラー等が発生する割合を小さくすることができるため、半導体記憶装置の信頼性を向上させることができる。しかしながら、パトロール方式を用いた半導体記憶装置では、パトロール処理を実行している間、プログラムを処理するためのメモリアクセスは待たされるため、プログラム処理性能を損なうという問題があった。
【０００６】
上記課題に鑑み本発明の目的は、プログラム処理性能を損なうことなくデータの信頼性を向上させることが可能な半導体記憶装置およびその制御方法を提供することである。
【課題を解決するための手段】
【０００７】
本発明にかかる半導体記憶装置は、アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセルと、前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段と、前記メモリセルから読み出されたデータのエラーを訂正するエラー訂正手段と、前記エラー訂正後のデータを保持するデータ保持手段と、を備え、前記メモリセルは、前記検出手段の検出結果に応じて、前記データ保持手段に保持されている前記データを前記アドレスに対応づけて書き込み、前記データ保持手段は、前記アドレスに応じた読み出しデータとして前記データ保持手段に保持されている前記データを出力する。
【０００８】
本発明にかかる、アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセルと、前記メモリセルに対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段と、前記メモリセルから読み出されたデータのエラーを訂正するエラー訂正手段と、前記エラー訂正後のデータを保持するデータ保持手段と、を備える半導体記憶装置の制御方法は、前記メモリセルが、前記検出手段の検出結果に応じて、前記データ保持手段に保持されている前記データを前記アドレスに対応づけて書き込み、前記データ保持手段が、前記アドレスに応じた読み出しデータとして前記データ保持手段に保持されている前記データを出力する。
【発明の効果】
【０００９】
本発明により、プログラム処理性能を損なうことなくデータの信頼性を向上させることが可能な半導体記憶装置およびその制御方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１にかかる半導体記憶装置を示す図である。
【図２】実施の形態１にかかる半導体記憶装置の動作を説明するためのタイミングチャートである。
【図３】実施の形態２にかかる半導体記憶装置を示す図である。
【図４】実施の形態２にかかる半導体記憶装置の動作を説明するためのタイミングチャートである。
【発明を実施するための形態】
【００１１】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本発明の実施の形態１にかかる半導体記憶装置を示す図である。
本実施の形態にかかる半導体記憶装置１は、アドレスに応じたデータの読み出しまたは書き込みを実施するメモリセル２と、メモリセル２に対して２サイクル以上同一アドレスで読み出しを行なっていることを検出する検出手段１５と、メモリセル２から読み出されたデータのエラーを訂正するエラー訂正手段（ＥＣＣ回路）３と、エラー訂正後のデータを保持するデータ保持手段（レジスタ（ＲＥＷＲ））６と、を備える。メモリセル２は、検出手段１５の検出結果に応じて、データ保持手段６に保持されているデータを前記アドレスに対応づけて書き込む。また、データ保持手段６は、前記アドレスに応じた読み出しデータとしてデータ保持手段６に保持されているデータを出力する。以下、本実施の形態にかかる半導体記憶装置について詳細に説明する。
【００１２】
図１に示す半導体記憶装置は、１ポートＲＡＭと呼ばれ（１ＲＷ  ＲＡＭとも呼ばれる）、１サイクルに読み出し又は書き込みのどちらか一方しか実行できないタイプのＲＡＭである。図１に示す半導体記憶装置では、２サイクル以上読み出しアドレスに変化がなかった際に、読み出したデータをＥＣＣ回路にて訂正後、メモリセル２への再書き込みを実施することが可能である。
【００１３】
図１に示す半導体記憶装置１は、メモリセル２、ＥＣＣ回路３、レジスタ４〜６、比較器７、ＡＮＤゲート８、９、セレクタ１０、１３、１４、インバータ１１、およびＯＲゲート１２を有する。ここで、レジスタ４、５、比較器７、およびＡＮＤゲート８、９は検出手段１５を構成する。半導体記憶装置１にはアドレス信号（ＡＤＩＮ）、ライトイネーブル信号（ＷＥＩＮ）、および書き込みデータ（ＷＤＩＮ）が入力される。また、半導体記憶装置１はアドレス信号（ＡＤＩＮ）に対応する読み出しデータ（ＲＤＯＵＴ）を出力する。なお、ライトイネーブル信号（ＷＥＩＮ）が"１"の時に書き込みを行なうか、また"０"の時に書き込みを行なうかについては任意に設定することができるが、本実施の形態ではライトイネーブル信号（ＷＥＩＮ）が"１"の時に書き込みを行なうものとする。
【００１４】
レジスタ（ＡＤＲ）４は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）を保持するレジスタである。比較器７は、一方の入力に端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が供給され、他方の入力にレジスタ４の出力が供給され、これらの比較結果をＡＮＤゲート９に出力する。すなわち、比較器７は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）と、レジスタ４に保持された１サイクル前のアドレス信号とを比較し、２サイクル以上アドレス信号に変化がないか否かをチェックする。比較器７は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）と、レジスタ４に保持された１サイクル前のアドレス信号とが同一である場合、ハイレベルの信号（"１"）を出力する。
【００１５】
レジスタ（ＷＥＲ）５は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）をインバータ１１で反転させた信号を保持するレジスタである。ＡＮＤゲート（第１のＡＮＤゲート）８は、一方の入力に端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）をインバータ１１で反転させた信号が供給され、他方の入力にレジスタ５の出力が供給され、これらの論理積をＡＮＤゲート９に出力する。すなわち、ＡＮＤゲート８は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）をインバータ１１で反転させた信号と、レジスタ５に保持された１サイクル前の反転されたライトイネーブル信号（ＷＥＩＮ）とを比較し、２サイクル以上書き込みがないこと（つまり、２サイクル以上ライトイネーブル信号（ＷＥＩＮ）が"０"であること）をチェックする。
【００１６】
ＡＮＤゲート（第２のＡＮＤゲート）９は、一方の入力に比較器７の出力が供給され、他方の入力にＡＮＤゲート８の出力が供給され、これらの論理積を出力する。つまり、ＡＮＤゲート９は、２サイクル以上同じアドレスで読み出しを行なっていることを検出する。半導体記憶装置１が２サイクル以上同じアドレスで読み出しを行なっている場合、ＡＮＤゲート９はハイレベルの信号（"１"）を出力する。
【００１７】
ＯＲゲート１２は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）とＡＮＤゲート９の出力とを入力し、論理和を出力する。ここで、ＡＮＤゲート９の出力はメモリセル２への再書き込み時のライトイネーブル信号となる。よって、ＯＲゲート１２はメモリセル２のライトイネーブル（ＷＥ）に、メモリセル２への再書き込みを意味するライトイネーブル信号（ＡＮＤゲート９の出力）、またはメモリセル２への書き込みを意味するライトイネーブル信号（ＷＥＩＮ）を出力する。
【００１８】
メモリセル２は、ライトイネーブル（ＷＥ）がハイレベルの時にアドレス（ＡＤ）に対応した書き込みデータ（ＷＤ）を保持する。また、ライトイネーブル（ＷＥ）がロウレベルの時にアドレス（ＡＤ）に対応した読み出しデータ（ＲＤ）を出力する。
【００１９】
ＥＣＣ回路３は、メモリセル２の読み出しデータ（ＲＤ）を入力し、当該データにエラーがある場合は当該データを訂正する。レジスタ（ＲＥＷＲ）６は、ＥＣＣ回路３で訂正されたデータをメモリセル２に書き戻すために、当該訂正されたデータを保持する。
【００２０】
セレクタ１４は、ＡＮＤゲート９の出力に応じて、ＥＣＣ回路３で訂正されたデータまたはレジスタ６に保持されているデータを選択し、レジスタ６に出力する。つまり、セレクタ１４は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が毎サイクル異なる場合（この場合はＡＮＤゲート９がロウレベルであり、メモリセル２への再書き込みが実施されない）、ＥＣＣ回路３で訂正されたデータを選択する。また、セレクタ１４は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が２サイクル以上同一でかつ読み出しを行なっている場合（この場合はＡＮＤゲート９がハイレベルであり、メモリセル２への再書き込みが実施される）、レジスタ６のデータをホールドする。
【００２１】
セレクタ（第１のセレクタ）１３は、ＡＮＤゲート９の出力に応じて、書き込みデータ（ＷＤＩＮ）またはレジスタ６に保持されているデータを選択し、メモリセル２へ出力する。つまり、セレクタ１３は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が毎サイクル異なる場合またはメモリセル２への書き込みを指示するライトイネーブル信号（ＷＥＩＮ）が供給された場合（この場合はＡＮＤゲート９がロウレベルであり、メモリセル２への再書き込みが実施されない）、書き込みデータ（ＷＤＩＮ）を選択する。また、セレクタ１３は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が２サイクル以上同一でかつ読み出しを行なっている場合（この場合はＡＮＤゲート９がハイレベルであり、メモリセル２への再書き込みが実施される）、レジスタ６に保持されているデータを選択する。
【００２２】
セレクタ１０は、ＡＮＤゲート９の出力に応じて、ＥＣＣ回路３で訂正されたデータまたはレジスタ６に保持されているデータを選択し、半導体記憶装置１の読み出しデータ（ＲＤＯＵＴ）として出力する。つまり、セレクタ１０は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が毎サイクル異なる場合（この場合はＡＮＤゲート９がロウレベルであり、メモリセル２への再書き込みが実施されない）、ＥＣＣ回路３で訂正されたデータを選択する。また、セレクタ１０は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が２サイクル以上同一でかつ読み出しを行なっている場合（この場合はＡＮＤゲート９がハイレベルであり、メモリセル２への再書き込みが実施される）、レジスタ６に保持されているデータを選択する。
【００２３】
次に、本実施の形態にかかる半導体記憶装置の動作について、図２に示すタイミングチャートを用いて説明する。図２に示すタイミングチャートでは、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が"２"の時に２サイクル間同一アドレスの読み出しが実施される。また、アドレス信号（ＡＤＩＮ）が"５"の時に３サイクル間同一アドレスが続くが、最初の１サイクルはアドレス"５"への書き込み（つまり、ＷＥＩＮがハイレベルとなる）が実施される。また、アドレス信号（ＡＤＩＮ）が"６"の時に３サイクル間同一アドレスの読み出しが実施される。なお、図２のタイミングチャートに示すように、本実施の形態にかかる半導体記憶装置ではアドレス信号（ＡＤＩＮ）が入力された後、１サイクル遅れて各アドレス信号（ＡＤＩＮ）に対応した各レジスタへのデータの保持や読み出しデータ（ＲＤＯＵＴ）の出力等が行なわれる。
【００２４】
まず、半導体記憶装置１にアドレス信号（ＡＤＩＮ）として"０"が供給されると、レジスタ（ＡＤＲ）４はＡＤＲ＝"０"を保持する。このとき、ライトイネーブル信号（ＷＥＩＮ）はロウレベル（"０"）であるので、レジスタ（ＷＥＲ）５はＷＥＲ＝"１"を保持する。ＡＮＤゲート９の出力はロウレベルとなる。ライトイネーブル信号（ＷＥＩＮ）およびＡＮＤゲート９の出力が共にロウレベルであるので、メモリセル２のライトイネーブル（ＷＥ）はロウレベルとなる。メモリセル２のアドレス（ＡＤ）には、アドレス信号（ＡＤＩＮ）である"０"が供給される。このとき、メモリセル２は、ＡＤ＝"０"に対応した読み出しデータ（ＲＤ＝"Ｄ０"）をＥＣＣ回路３に出力する。セレクタ１４は、ＡＮＤゲート９の出力がロウレベルであるので、ＥＣＣ回路３の出力を選択する。レジスタ（ＲＥＷＲ）６はＥＣＣ回路３の出力"Ｄ０"を保持する。セレクタ１０は、ＡＮＤゲート９の出力がロウレベルであるので、ＥＣＣ回路３の出力を選択する。よって、半導体記憶装置１の出力（ＲＤＯＵＴ）として"Ｄ０"が出力される。以降、アドレス信号（ＡＤＩＮ）が"１"、１つ目の"２"の場合も同様の動作となる。
【００２５】
半導体記憶装置１にアドレス信号（ＡＤＩＮ）として２つ目の"２"が供給されると、比較器７は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）４に保持されている値が共に"２"であるので、ＡＮＤゲート９にハイレベルの信号を出力する。また、ＡＮＤゲート８は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号とレジスタ（ＷＥＲ）５に保持されている値が共にハイレベルであるので、ＡＮＤゲート９にハイレベルの信号を出力する。よって、ＡＮＤゲート９の出力はハイレベルとなる。
【００２６】
ＡＮＤゲート９の出力がハイレベルであるので、ＯＲゲート１２はメモリセル２のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。メモリセル２のアドレス（ＡＤ）には、アドレス信号（ＡＤＩＮ）である"２"が供給される。セレクタ１４は、ＡＮＤゲート９の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）６の値をホールドする。セレクタ１３は、ＡＮＤゲート９の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）６の値であるＲＥＷＲ＝"Ｄ２"をメモリセル２の書き込みデータ（ＷＤ）として供給する。このとき、メモリセル２のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"２"）に対応した書き込みデータＷＤ＝"Ｄ２"がメモリセル２に再書き込みされる。一方、セレクタ１０はＡＮＤゲート９の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）６に保持されているデータ"Ｄ２"を選択する。よって、半導体記憶装置１の出力（ＲＤＯＵＴ）として"Ｄ２"が出力される。
【００２７】
アドレス信号（ＡＤＩＮ）として"３"、"４"が供給された場合の動作についても、上記で説明したアドレス信号（ＡＤＩＮ）として"０"が供給された場合の動作と同様である。
【００２８】
次に、アドレス信号（ＡＤＩＮ）として３サイクル間"５"が供給される場合について説明する。この場合、最初の１サイクルはアドレス"５"への書き込み（つまり、ＷＥＩＮがハイレベル）が実施される。アドレス信号（ＡＤＩＮ）として最初のアドレス信号ＡＤＩＮ＝"５"が供給されると、比較器７は、レジスタ４に保持されているＡＤＲ＝"４"と、供給されたアドレス信号ＡＤＩＮ＝"５"とが異なるのでＡＮＤゲート９にロウレベルの信号を出力する。よって、ＡＮＤゲート９の出力はロウレベルとなる。
【００２９】
また、端子ＷＥＩＮからハイレベルのライトイネーブル信号（ＷＥＩＮ）が供給されると、ＯＲゲート１２は、メモリセル２のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。このとき、セレクタ１３は、ＡＮＤゲート９の出力がロウレベルであるので、端子ＷＤＩＮから供給された書き込みデータＷＤＩＮ＝"Ｄ５"をメモリセル２の書き込みデータ（ＷＤ）として出力する。そして、メモリセル２のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"５"）に対応した書き込みデータ（ＷＤ＝"Ｄ５"）がメモリセル２に書き込まれる。
【００３０】
なお、この場合はＡＮＤゲート９の出力がロウレベルであるので、セレクタ１０、１４はＥＣＣ回路３の出力を選択する。しかし、メモリセル２からは読み出しデータ（ＲＤ）が出力されないので、半導体記憶装置１のデータ出力（ＲＤＯＵＴ）とレジスタ（ＲＥＷＲ）６の値は"不定"となる。
【００３１】
次に、アドレス信号（ＡＤＩＮ）として、２つ目のＡＤＩＮ＝"５"と３つ目のＡＤＩＮ＝"５"が順次供給される。このときの動作は、上記で説明した１つ目のＡＤＩＮ＝"２"と２つ目のＡＤＩＮ＝"２"が供給された場合の動作と同様であるので重複した説明は省略する。
【００３２】
次に、アドレス信号（ＡＤＩＮ）として、３サイクル間ＡＤＩＮ＝"６"が供給される。アドレス信号（ＡＤＩＮ）として、１つ目のＡＤＩＮ＝"６"と２つ目のＡＤＩＮ＝"６"が供給された場合の動作は、上記で説明した１つ目のＡＤＩＮ＝"２"と２つ目のＡＤＩＮ＝"２"が供給された場合の動作と同様であるので重複した説明は省略する。
【００３３】
２つ目のＡＤＩＮ＝"６"が供給された後、アドレス信号（ＡＤＩＮ）として３つ目のＡＤＩＮ＝"６"が供給される。このとき、比較器７は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）４に保持されている値が共に"６"であるので、ＡＮＤゲート９にハイレベルの信号を出力する。また、ＡＮＤ８は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号とレジスタ（ＷＥＲ）５に保持されている値が共にハイレベルであるので、ＡＮＤゲート９にハイレベルの信号を出力する。よって、ＡＮＤゲート９の出力はハイレベルとなる。
【００３４】
ＡＮＤゲート９の出力がハイレベルであるので、ＯＲゲート１２はメモリセル２のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。メモリセル２のアドレス（ＡＤ）には、アドレス信号（ＡＤＩＮ）である"６"が供給される。セレクタ１４は、ＡＮＤゲート９の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）６の値をホールドする。セレクタ１３は、ＡＮＤゲート９の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）６の値であるＲＥＷＲ＝"Ｄ６"をメモリセル２の書き込みデータ（ＷＤ）として供給する。このとき、メモリセル２のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"６"）に対応した書き込みデータ（ＷＤ＝"Ｄ６"）がメモリセル２に再書き込みされる。一方、セレクタ１０はＡＮＤゲート９の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）６に保持されているＥＣＣ回路３でエラー訂正済みのデータ"Ｄ６"を選択する。よって、半導体記憶装置１の出力（ＲＤＯＵＴ）として"Ｄ６"が出力される。
【００３５】
本実施の形態にかかる半導体記憶装置の動作についてまとめると次のようになる。
（１）同一アドレスｎ（ｎは任意の整数）が入力される１サイクル目に対応するタイミング。
ＡＮＤゲート９の出力はロウレベルとなる。メモリセル２は、アドレスｎに対応した読み出しデータ（ＲＤ）を出力する。レジスタ（ＲＥＷＲ）６はアドレスｎに応じたエラー訂正後のデータを保持する。また、セレクタ１０は、ＥＣＣ回路３から出力されたアドレスｎに対応したエラー訂正後のデータを半導体記憶装置の出力（ＲＤＯＵＴ）として出力する。
【００３６】
（２）同一アドレスｎが入力される２サイクル目に対応するタイミング。
ＡＮＤゲート９の出力はハイレベルとなる。メモリセル２はアドレスｎに対応づけてレジスタ（ＲＥＷＲ）６に保持されているデータを書き込む（再書き込み）。レジスタ（ＲＥＷＲ）６は、アドレスｎに対応した読み出しデータとしてレジスタ（ＲＥＷＲ）６に保持されているデータを半導体記憶装置１のデータ出力（ＲＤＯＵＴ）として出力する。
【００３７】
背景技術で説明したように、パトロール方式を用いた半導体記憶装置（例えば、ＤＲＡＭ）では、パトロール処理を実行している間、プログラムを処理するためのメモリアクセスは待たされるため、プログラム処理性能を損なうという問題があった。すなわち、パトロール実行中のメモリアドレスやバンクが、プログラムを処理する通常命令によるメモリアクセスと重なった場合、通常のメモリアクセスはパトロール処理を実行しているアドレスが異なるアドレスに遷移するまで待たされるという問題があった。
【００３８】
また、キャッシュメモリなどに使われる半導体記憶装置（例えば、ＳＲＡＭ）に於いては、高速でプログラムを処理する情報処理装置のクロック周波数が高いため、特許文献４に開示されているような技術では遅延制約を満たすことが困難であるという問題があった。
【００３９】
これに対して本実施の形態にかかる半導体記憶装置１では、２サイクル以上同じアドレスで読み出しを行なっている場合、レジスタ（ＲＥＷＲ）６に保持されている１つ前のサイクルのデータをメモリセル２へ再書き込みすると同時に、当該保持されているデータを半導体記憶装置１の出力（ＲＤＯＵＴ）として出力している。よって、メモリセル２が１サイクルに読み出し又は書き込みのどちらか一方しか実行できない場合であっても、メモリセル２へのデータの再書き込みと、半導体記憶装置１からのデータの出力（データの読み出し）とを１サイクルで同時に実施することができる。したがって、メモリアクセスタイミングを変更する必要がなくなり、クロック周波数が高い場合であっても遅延制約を満たすことができる。
【００４０】
よって、本実施の形態にかかる発明により、プログラム処理性能を損なうことなくデータの信頼性を向上させることが可能な半導体記憶装置およびその制御方法を提供することができる。
【００４１】
実施の形態２
次に、本発明の実施の形態２について説明する。図３は、実施の形態２にかかる半導体記憶装置を示す図である。本実施の形態にかかる半導体記憶装置では、再書き込み動作ついて巡回機能を追加している。これ以外の構成は、基本的には実施の形態１で説明した半導体記憶装置と同様である。ここで巡回機能とは、１ポートＲＡＭにおいて４サイクル以上読み出しアドレスに変化がない場合に、その変化しなくなったアドレスを開始アドレスとして２サイクルに１回の割合でアドレスをインクリメントし、１サイクル目に読み出したデータをＥＣＣ回路にて訂正後、２サイクル目に書き戻すことを順次繰り返す機能である。
【００４２】
図３に示す半導体記憶装置２０は、メモリセル２１、ＥＣＣ回路２２、レジスタ２３〜２８、比較器２９、ＡＮＤゲート３０、３１、セレクタ３２、３４〜３７、４０、インバータ３３、３８、およびＯＲゲート３９を有する。ここで、レジスタ２３、２４、比較器２９、およびＡＮＤゲート３０、３１は検出手段４５を構成する。また、レジスタ２８、セレクタ３２、およびインバータ３３は、メモリセル２１からのデータの読み出しまたはメモリセル２１へのデータの書き込みをサイクル毎に交互に切り替える切り替え手段４６を構成する。また、レジスタ２５およびセレクタ３４、３５は、２サイクルに１回アドレスをインクリメントするアドレス生成手段４７を構成する。また、本実施の形態ではデータ保持手段４８は、エラー訂正後のデータを保持する第１のデータ保持手段（レジスタ（ＲＥＷＲ））２７と、エラー訂正後のデータを保持すると共に当該データを検出手段４５の検出結果に応じてホールド可能な第２のデータ保持手段（レジスタ（ＨＬＤＲ））２６と、を備える。
【００４３】
半導体記憶装置２０にはアドレス信号（ＡＤＩＮ）、ライトイネーブル信号（ＷＥＩＮ）、および書き込みデータ（ＷＤＩＮ）が入力される。また、半導体記憶装置２０はアドレス信号（ＡＤＩＮ）に対応する読み出しデータ（ＲＤＯＵＴ）を出力する。なお、ライトイネーブル信号（ＷＥＩＮ）が"１"の時に書き込みを行なうか、また"０"の時に書き込みを行なうのかについては任意に設定することができるが、本実施の形態ではライトイネーブル信号（ＷＥＩＮ）が"１"の時に書き込みを行なうものとする。
【００４４】
レジスタ（ＡＤＲ）２３は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）を保持するレジスタである。比較器２９は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）とレジスタ２３の出力とを入力し、これらの比較結果をＡＮＤゲート３１に出力する。すなわち、比較器２９は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）と、レジスタ２３に保持された１サイクル前のアドレス信号とを比較し、２サイクル以上アドレス信号に変化がないか否かをチェックする。比較器２９は、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）と、レジスタ２３に保持された１サイクル前のアドレス信号とが同一である場合、ハイレベルの信号を出力する。
【００４５】
レジスタ（ＷＥＲ）２４は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）をインバータ３８で反転させた信号を保持するレジスタである。ＡＮＤゲート３０は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）をインバータ３８で反転させた信号とレジスタ２４の出力とを入力し、これらの論理積をＡＮＤゲート３１に出力する。すなわち、ＡＮＤゲート３０は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）をインバータ３８で反転させた信号と、レジスタ２４に保持された１サイクル前の反転されたライトイネーブル信号（ＷＥＩＮ）とを比較し、２サイクル以上書き込みがないこと（つまり、２サイクル以上ライトイネーブル信号（ＷＥＩＮ）が"０"であること）をチェックする。
【００４６】
ＡＮＤゲート３１は、比較器２９の出力およびＡＮＤゲート３０の出力を入力し、これらの論理積を出力する。つまり、ＡＮＤゲート３１は、２サイクル以上同じアドレスで読み出しを行なっていることを検出する。半導体記憶装置２０が２サイクル以上同じアドレスで読み出しを行なっている場合、ＡＮＤゲート３１はハイレベルの信号（"１"）を出力する。なお、本実施の形態では、半導体記憶装置２０が２サイクル以上同じアドレスで読み出しを行なっている状態、つまりＡＮＤゲート３１がハイレベルの信号を出力している状態を便宜上"ＲＡＭの巡回中"と表現する。
【００４７】
セレクタ３２は、ＡＮＤゲート３１がハイレベルの信号を出力している場合には、レジスタ（ＴＭＧＲ）２８に保持されている値をインバータ３３で反転させた信号を選択し、ＡＮＤゲート３１がロウレベルの信号を出力している場合には"０"を選択する。レジスタ（ＴＭＧＲ）２８は、セレクタ３２の出力を保持する。つまり、ＡＮＤゲート３１がハイレベルの信号を２サイクル以上出力し続けている間、セレクタ３２はサイクル毎に"０"と"１"を交互に出力する。
【００４８】
セレクタ３４は、ＡＮＤゲート３１がロウレベルの信号を出力している場合、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）を選択する（"０Ｘ"）。また、セレクタ３４は、ＡＮＤゲート３１がハイレベルの信号を出力している場合で、かつセレクタ３２の出力がロウレベルである場合、レジスタ（パトロールレジスタ：ＰＡＴＲ）２５に保持されている値を選択する（"１０"）。また、セレクタ３４は、ＡＮＤゲート３１がハイレベルの信号を出力している場合で、かつセレクタ３２の出力がハイレベルである場合、レジスタ２５に保持されている値をインクリメントした値を選択する（"１１"）。レジスタ（ＰＡＴＲ）２５はセレクタ３４の出力を保持する。
【００４９】
つまり、セレクタ３４は、ＡＮＤゲート３１がハイレベルの信号を出力し続けている場合、２サイクルに１回カウントアップした値をアドレスとして出力する。これにより、ＲＡＭの巡回中に読み出し動作と再書き込み動作を交互に繰り返すことができる。
【００５０】
セレクタ３５は、ＡＮＤゲート３１がロウレベルの信号を出力している場合、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）を選択する。また、セレクタ３４は、ＡＮＤゲート３１がハイレベルの信号を出力している場合、レジスタ（ＰＡＴＲ）２５に保持されている値を選択する。セレクタ３５の出力は、メモリセル２１に対するアドレス（ＡＤ）となる。
【００５１】
ＯＲゲート３９は、端子ＷＥＩＮから供給されたライトイネーブル信号（ＷＥＩＮ）とセレクタ３２の出力とを入力し、論理和を出力する。ここで、セレクタ３２の出力はメモリセル２１への再書き込み時のライトイネーブル信号となる。よって、ＯＲゲート３９はメモリセル２１のライトイネーブル（ＷＥ）に、メモリセル２１への再書き込みを意味するライトイネーブル信号（セレクタ３２の出力）、またはメモリセル２１への書き込みを意味するライトイネーブル信号（ＷＥＩＮ）を出力する。
【００５２】
メモリセル２１は、ライトイネーブル（ＷＥ）がハイレベルの時にアドレス（ＡＤ）に対応した書き込みデータ（ＷＤ）を保持する。また、ライトイネーブル（ＷＥ）がロウレベルの時にアドレス（ＡＤ）に対応した読み出しデータ（ＲＤ）を出力する。すなわち、メモリセル２１は、切り替え手段４６からの信号に応じて、アドレス生成手段４７で生成されたアドレスに応じたデータの読み出し、または当該アドレスに対応づけたレジスタ２７に保持されているデータの書き込みを実施する。
【００５３】
ＥＣＣ回路２２は、メモリセル２１の読み出しデータ（ＲＤ）を入力し、当該データにエラーがある場合は当該データを訂正する。レジスタ（ＲＥＷＲ：第１のレジスタ）２７は、ＥＣＣ回路２２で訂正されたデータをメモリセル２１に書き戻すために、当該訂正されたデータを保持する。
【００５４】
セレクタ（第２のセレクタ）４０は、ＡＮＤゲート３１の出力に応じて、書き込みデータ（ＷＤＩＮ）またはレジスタ２７に保持されているデータを選択し、メモリセル２１へ出力する。つまり、セレクタ４０は、ＡＮＤゲート３１の出力がハイレベルである場合にはレジスタ（ＲＥＷＲ）２７に保持されているデータを、ＡＮＤゲート３１の出力がロウレベルである場合には端子ＷＤＩＮに供給される書き込みデータ（ＷＤＩＮ）を、メモリセル２１にそれぞれ供給する。
【００５５】
セレクタ３６は、ＡＮＤゲート３１の出力に応じて、ＥＣＣ回路２２で訂正されたデータまたはレジスタ（ＨＬＤＲ：第２のレジスタ）２６に保持されているデータを選択し、レジスタ２６に出力する。つまり、セレクタ３６は、ＡＮＤゲート３１の出力がロウレベルである場合にはＥＣＣ回路２２で訂正されたデータを選択する。また、セレクタ３６は、ＡＮＤゲート３１の出力がハイレベルである場合にはレジスタ２６のデータをホールドする。
【００５６】
セレクタ３７は、ＡＮＤゲート３１の出力に応じて、ＥＣＣ回路２２で訂正されたデータまたはレジスタ２６に保持されているデータを選択し、半導体記憶装置２０の読み出しデータ（ＲＤＯＵＴ）として出力する。つまり、セレクタ３７は、ＡＮＤゲート３１の出力がロウレベルである場合にはＥＣＣ回路２２で訂正されたデータを選択する。また、セレクタ３７は、ＡＮＤゲート３１の出力がハイレベルである場合にはレジスタ２６に保持されているデータを選択する。
【００５７】
次に、本実施の形態にかかる半導体記憶装置の動作について、図４に示すタイミングチャートを用いて説明する。図４に示すタイミングチャートでは、端子ＡＤＩＮから供給されたアドレス信号（ＡＤＩＮ）が"２"の時に２サイクル間同一アドレスの読み出しが実施される。また、アドレス信号（ＡＤＩＮ）が"５"以降において同一アドレスが続くが、最初の１サイクルはアドレス"５"への書き込み（つまり、ＷＥＩＮがハイレベルとなる）が実施される。なお、図４のタイミングチャートに示すように、本実施の形態にかかる半導体記憶装置ではアドレス信号（ＡＤＩＮ）が入力された後、１サイクル遅れて各アドレス信号（ＡＤＩＮ）に対応した各レジスタへのデータの保持や読み出しデータ（ＲＤＯＵＴ）の出力等が行なわれる。
【００５８】
まず、半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として"０"が供給されると、レジスタ（ＡＤＲ）２３はＡＤＲ＝"０"を保持する。このとき、ライトイネーブル信号（ＷＥＩＮ）はロウレベル（"０"）であるので、レジスタ（ＷＥＲ）２４はＷＥＲ＝"１"を保持する。また、ＡＮＤゲート３１の出力はロウレベルであるので、セレクタ３２は"０"を出力する。ライトイネーブル信号（ＷＥＩＮ）およびセレクタ３２の出力は共にロウレベルであるので、メモリセル２１のライトイネーブル（ＷＥ）はロウレベルとなる。
【００５９】
また、ＡＮＤゲート３１の出力はロウレベルであるので、セレクタ３５はアドレス信号（ＡＤＩＮ）である"０"を出力する。よって、メモリセル２１のアドレス（ＡＤ）には、アドレス信号（ＡＤＩＮ）である"０"が供給される。このとき、メモリセル２１は、ＡＤ＝"０"に対応した読み出しデータ（ＲＤ＝"Ｄ０"）をＥＣＣ回路２２に出力する。セレクタ３６は、ＡＮＤゲート３１の出力がロウレベルであるので、ＥＣＣ回路２２の出力を選択する。レジスタ（ＨＬＤＲ）２６はＥＣＣ回路２２の出力"Ｄ０"を保持する。また、レジスタ（ＲＥＷＲ）２７もＥＣＣ回路２２の出力"Ｄ０"を保持する。セレクタ３７は、ＡＮＤゲート３１の出力がロウレベルであるので、ＥＣＣ回路２２の出力を選択する。よって、半導体記憶装置２０の出力（ＲＤＯＵＴ）として"Ｄ０"が出力される。以降、アドレス信号（ＡＤＩＮ）が"１"、最初の"２"の場合も同様の動作となる。
【００６０】
半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として２つ目の"２"が供給されると、比較器２９は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）２３に保持されている値が共に"２"であるので、ＡＮＤゲート３１にハイレベルの信号を出力する。また、ＡＮＤゲート３０は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号とレジスタ（ＷＥＲ）２４に保持されている値が共にハイレベルであるので、ＡＮＤゲート３１にハイレベルの信号を出力する。よって、ＡＮＤゲート３１の出力はハイレベルとなる。
【００６１】
セレクタ３２は、ＡＮＤゲート３１の出力がハイレベルであるので、インバータ３３の出力を選択する。ここで、レジスタ（ＴＭＧＲ）２８の初期値はロウレベル（"０"）であるので、セレクタ３２からはハイレベルの信号が出力される。セレクタ３４は、ＡＮＤゲート３１の出力およびセレクタ３２の出力が共にハイレベルであるので、レジスタ（ＰＡＴＲ）２５に保持されている値"２"に１を加えた"３"を出力する。レジスタ（ＰＡＴＲ）２５は、セレクタ３４の出力値"３"を保持する。一方、セレクタ３５は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＰＡＴＲ）２５に既に保持されている値（つまり、セレクタ３４で選択される前の値"２"）を選択する。
【００６２】
セレクタ３２の出力がハイレベルであるので、ＯＲゲート３９はメモリセル２１のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。メモリセル２１のアドレス（ＡＤ）には、セレクタ３５の出力値である"２"が供給される。セレクタ４０は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）２７の値であるＲＥＷＲ＝"Ｄ２"をメモリセル２１の書き込みデータ（ＷＤ）として供給する。このとき、メモリセル２１のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"２"）に対応した書き込みデータ（ＷＤ＝"Ｄ２"）がメモリセル２１に再書き込みされる。
【００６３】
セレクタ３６は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６の値をホールドする。一方、セレクタ３７はＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６に保持されているＥＣＣ回路２２でエラー訂正済みのデータ"Ｄ２"を選択する。よって、半導体記憶装置２０の出力（ＲＤＯＵＴ）として"Ｄ２"が出力される。
【００６４】
アドレス信号（ＡＤＩＮ）として"３"、"４"が供給された場合についても、上記で説明したアドレス信号（ＡＤＩＮ）として"０"が供給された場合と同様である。
【００６５】
次に、アドレス"５"への書き込み（つまり、ＷＥＩＮ＝"１"）が実施される場合（符号５０で示す）について説明する。アドレス信号（ＡＤＩＮ）としてＡＤＩＮ＝"５"が供給されると、比較器２９は、レジスタ２３に保持されているＡＤＲ＝"４"と、供給されたアドレス信号ＡＤＩＮ＝"５"とが異なるのでＡＮＤゲート３１にロウレベルの信号を出力する。よって、ＡＮＤゲート３１の出力はロウレベルとなる。このとき、セレクタ３２の出力はロウレベルとなる。
【００６６】
一方、端子ＷＥＩＮからはハイレベルのライトイネーブル信号（ＷＥＩＮ）が供給されるので、ＯＲゲート３９は、メモリセル２１のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。このとき、セレクタ４０は、ＡＮＤゲート３１の出力がロウレベルであるので、端子ＷＤＩＮから供給された書き込みデータ（ＷＤＩＮ＝"Ｄ５"）をメモリセル２１の書き込みデータ（ＷＤ）として出力する。また、ＡＮＤゲート３１の出力はロウレベルであるので、セレクタ３５はアドレス信号（ＡＤＩＮ）である"５"を出力する。よって、メモリセル２１のアドレス（ＡＤ）には、アドレス信号（ＡＤＩＮ）である"５"が供給される。そして、メモリセル２１のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"５"）に対応した書き込みデータ（ＷＤ＝"Ｄ５"）がメモリセル２１に書き込まれる。
【００６７】
なお、この場合はＡＮＤゲート３１の出力がロウレベルであるので、セレクタ３６、３７はＥＣＣ回路２２の出力を選択する。しかし、メモリセル２１からは読み出しデータ（ＲＤ）が出力されないので、半導体記憶装置２０のデータ出力（ＲＤＯＵＴ）、レジスタ（ＨＬＤＲ）２６、およびレジスタ（ＲＥＷＲ）２７の値は"不定"となる。
【００６８】
次に、アドレス信号（ＡＤＩＮ）として４サイクル以上同じアドレス"５"が供給され、かつ読み出しを行なっている場合（符号５１〜５４で示す）について説明する。
半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として１つ目の"５"（符号５１で示す）が供給されると、比較器２９は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）２３に保持されている値が共に"５"であるので、ＡＮＤゲート３１にハイレベルの信号を出力する。一方、ＡＮＤゲート３０は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号（ハイレベル）とレジスタ（ＷＥＲ）２４に保持されている値（ロウレベル）とが異なるので、ＡＮＤゲート３１にロウレベルの信号を出力する。よって、ＡＮＤゲート３１の出力はロウレベルとなる。
【００６９】
ＡＮＤゲート３１の出力がロウレベルであるので、セレクタ３２は"０"を出力する。ＯＲゲート３９は、ライトイネーブル信号（ＷＥＩＮ）およびセレクタ３２の出力が共にロウレベルであるので、メモリセル２１のライトイネーブル（ＷＥ）にロウレベルの信号を出力する。
【００７０】
ＡＮＤゲート３１の出力がロウレベルであるので、セレクタ３４はアドレス信号（ＡＤＩＮ）である"５"をレジスタ（ＰＡＴＲ）２５に保持する。また、ＡＮＤゲート３１の出力はロウレベルであるので、セレクタ３５はアドレス信号（ＡＤＩＮ）である"５"を出力する。よって、メモリセル２１のアドレス（ＡＤ）には、アドレス信号（ＡＤＩＮ）である"５"が供給される。このとき、メモリセル２１は、ＡＤ＝"５"に対応した読み出しデータ（ＲＤ＝"Ｄ５"）をＥＣＣ回路２２に出力する。セレクタ３６は、ＡＮＤゲート３１の出力がロウレベルであるので、ＥＣＣ回路２２の出力を選択する。レジスタ（ＨＬＤＲ）２６はＥＣＣ回路２２の出力"Ｄ５"を保持する。また、レジスタ（ＲＥＷＲ）２７もＥＣＣ回路２２の出力"Ｄ５"を保持する。セレクタ３７は、ＡＮＤゲート３１の出力がロウレベルであるので、ＥＣＣ回路２２の出力を選択する。よって、半導体記憶装置２０の出力（ＲＤＯＵＴ）として"Ｄ５"が出力される。
【００７１】
次に、半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として２つ目の"５"（符号５２で示す）が供給されると、比較器２９は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）２３に保持されている値が共に"５"であるので、ＡＮＤゲート３１にハイレベルの信号を出力する。また、ＡＮＤゲート３０は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号とレジスタ（ＷＥＲ）２４に保持されている値とが共にハイレベルであるので、ＡＮＤゲート３１にハイレベルの信号を出力する。よって、ＡＮＤゲート３１の出力はハイレベルとなる。
【００７２】
セレクタ３２は、ＡＮＤゲート３１の出力がハイレベルであるので、インバータ３３の出力を選択する。ここで、レジスタ（ＴＭＧＲ）２８に保持されている値がロウレベル（"０"）であるので、セレクタ３２からはハイレベルの信号が出力される。セレクタ３４は、ＡＮＤゲート３１の出力およびセレクタ３２の出力が共にハイレベルであるので、レジスタ（ＰＡＴＲ）２５に保持されている値"５"に１を加えた"６"を出力する。レジスタ（ＰＡＴＲ）２５は、セレクタ３４の出力値"６"を保持する。一方、セレクタ３５は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＰＡＴＲ）２５に既に保持されている値（つまり、セレクタ３４で選択される前の値"５"）を選択する。
【００７３】
セレクタ３２の出力がハイレベルであるので、ＯＲゲート３９はメモリセル２１のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。メモリセル２１のアドレス（ＡＤ）には、セレクタ３５の出力値である"５"が供給される。セレクタ４０は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）２７の値であるＲＥＷＲ＝"Ｄ５"をメモリセル２１の書き込みデータ（ＷＤ）として供給する。このとき、メモリセル２１のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"５"）に対応した書き込みデータ（ＷＤ＝"Ｄ５"）がメモリセル２１に再書き込みされる。
【００７４】
なお、このときメモリセル２１は再書き込み動作を実施しているため、メモリセル２１から読み出しデータ（ＲＤ）は出力されない。よって、レジスタ（ＲＥＷＲ）２７に保持されるデータは"不定"となる。しかし、この"不定"のデータはメモリセル２１への再書き込み用データとして使用されないため、半導体記憶装置２０の動作には影響しない。
【００７５】
セレクタ３６は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６の値をホールドする。一方、セレクタ３７はＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６に保持されているＥＣＣ回路２２でエラー訂正済みのデータ"Ｄ５"を選択する。よって、半導体記憶装置２０の出力（ＲＤＯＵＴ）として"Ｄ５"が出力される。
【００７６】
次に、半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として３つ目の"５"（符号５３で示す）が供給されると、比較器２９は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）２３に保持されている値が共に"５"であるので、ＡＮＤゲート３１にハイレベルの信号を出力する。また、ＡＮＤゲート３０は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号とレジスタ（ＷＥＲ）２４に保持されている値とが共にハイレベルであるので、ＡＮＤゲート３１にハイレベルの信号を出力する。よって、ＡＮＤゲート３１の出力はハイレベルとなる。
【００７７】
セレクタ３２は、ＡＮＤゲート３１の出力がハイレベルであるので、インバータ３３の出力を選択する。ここで、レジスタ（ＴＭＧＲ）２８に保持されている値がハイレベル（"１"）であるので、セレクタ３２からはロウレベルの信号が出力される。セレクタ３４は、ＡＮＤゲート３１の出力がハイレベル、セレクタ３２の出力がロウレベルであるので、レジスタ（ＰＡＴＲ）２５に保持されている値"６"を出力する。レジスタ（ＰＡＴＲ）２５は、セレクタ３４の出力値"６"を保持する。一方、セレクタ３５は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＰＡＴＲ）２５に既に保持されている値"６"を選択する。
【００７８】
ＯＲゲート３９は、セレクタ３２の出力および供給されたライトイネーブル信号（ＷＥＩＮ）が共にロウレベルであるので、メモリセル２１のライトイネーブル（ＷＥ）にロウレベルの信号を出力する。メモリセル２１のアドレス（ＡＤ）には、セレクタ３５の出力値である"６"が供給される。このとき、メモリセル２１は、ＡＤ＝"６"に対応した読み出しデータ（ＲＤ＝"Ｄ６"）をＥＣＣ回路２２に出力する。レジスタ（ＲＥＷＲ）２７はＥＣＣ回路２２の出力"Ｄ６"を保持する。セレクタ３６は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６の値"Ｄ５"をホールドする。セレクタ３７はＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６に保持されているＥＣＣ回路２２でエラー訂正済みのデータ"Ｄ５"を選択する。よって、半導体記憶装置２０の出力（ＲＤＯＵＴ）として"Ｄ５"が出力される。
【００７９】
次に、半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として４つ目の"５"（符号５４で示す）が供給されると、比較器２９は、供給されたアドレス信号（ＡＤＩＮ）とレジスタ（ＡＤＲ）２３に保持されている値が共に"５"であるので、ＡＮＤゲート３１にハイレベルの信号を出力する。また、ＡＮＤゲート３０は、供給されたライトイネーブル信号（ＷＥＩＮ）を反転した信号とレジスタ（ＷＥＲ）２４に保持されている値とが共にハイレベルであるので、ＡＮＤゲート３１にハイレベルの信号を出力する。よって、ＡＮＤゲート３１の出力はハイレベルとなる。
【００８０】
セレクタ３２は、ＡＮＤゲート３１の出力がハイレベルであるので、インバータ３３の出力を選択する。ここで、レジスタ（ＴＭＧＲ）２８に保持されている値がロウレベル（"０"）であるので、セレクタ３２からはハイレベルの信号が出力される。セレクタ３４は、ＡＮＤゲート３１の出力およびセレクタ３２の出力が共にハイレベルであるので、レジスタ（ＰＡＴＲ）２５に保持されている値"６"に１を加えた"７"を出力する。レジスタ（ＰＡＴＲ）２５は、セレクタ３４の出力値"７"を保持する。一方、セレクタ３５は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＰＡＴＲ）２５に既に保持されている値（つまり、セレクタ３４で選択される前の値"６"）を選択する。
【００８１】
セレクタ３２の出力がハイレベルであるので、ＯＲゲート３９はメモリセル２１のライトイネーブル（ＷＥ）にハイレベルの信号を出力する。メモリセル２１のアドレス（ＡＤ）には、セレクタ３５の出力値である"６"が供給される。セレクタ４０は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＲＥＷＲ）２７の値であるＲＥＷＲ＝"Ｄ６"をメモリセル２１の書き込みデータ（ＷＤ）として供給する。このとき、メモリセル２１のライトイネーブル（ＷＥ）がハイレベルであるので、アドレス（ＡＤ＝"６"）に対応した書き込みデータ（ＷＤ＝"Ｄ６"）がメモリセル２１に再書き込みされる。
【００８２】
セレクタ３６は、ＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６の値"Ｄ５"をホールドする。一方、セレクタ３７はＡＮＤゲート３１の出力がハイレベルであるので、レジスタ（ＨＬＤＲ）２６に保持されているＥＣＣ回路２２でエラー訂正済みのデータ"Ｄ５"を選択する。よって、半導体記憶装置２０の出力（ＲＤＯＵＴ）として"Ｄ５"が出力される。
【００８３】
以降、半導体記憶装置２０にアドレス信号（ＡＤＩＮ）として"５"が供給され続ける限り、上記で説明した動作と同様の動作を繰り返す。
以上で説明した本実施の形態にかかる半導体記憶装置の動作をまとめると次のようになる。
【００８４】
（１）同一アドレスｎ（ｎは任意の整数とする）が入力される１サイクル目に対応するタイミング。
ＡＮＤゲート３１の出力はロウレベル、セレクタ３２出力はロウレベルとなる。アドレス生成手段４７は、入力アドレス（ＡＤＩＮ）ｎをアドレスとして出力する。メモリセル２１は、アドレスｎに対応した読み出しデータ（ＲＤ＝Ｄｎ）を出力する。レジスタ（ＨＬＤＲ）２６およびレジスタ（ＲＥＷＲ）２７はアドレスｎに応じたエラー訂正後のデータＤｎを保持する。また、セレクタ３７は、ＥＣＣ回路２２から出力されたアドレスｎに対応したエラー訂正後のデータＤｎを半導体記憶装置の出力（ＲＤＯＵＴ）として出力する。
【００８５】
（２）同一アドレスｎが入力される２サイクル目に対応するタイミング。
ＡＮＤゲート３１の出力はハイレベル、セレクタ３２出力はハイレベルとなる。アドレス生成手段４７はアドレスをインクリメントし、このアドレスｎ＋１をレジスタ（ＰＡＴＲ）２５に保持する（このアドレスｎ＋１は、次回のサイクルで用いられる）。このとき、アドレス生成手段４７はアドレスｎを出力する。メモリセル２１はアドレスｎに対応づけてレジスタ（ＲＥＷＲ）２７に保持されているデータＤｎを書き込む（再書き込み）。レジスタ（ＨＬＤＲ）２６は、アドレスｎに対応した読み出しデータとしてレジスタ（ＨＬＤＲ）２６に保持されているデータＤｎを出力する。セレクタ３７は、レジスタ（ＨＬＤＲ）２６に保持されているデータＤｎを半導体記憶装置の出力（ＲＤＯＵＴ）として出力する。
【００８６】
（３）同一アドレスｎが入力される３サイクル目に対応するタイミング。
ＡＮＤゲート３１の出力はハイレベル、セレクタ３２出力はロウレベルとなる。アドレス生成手段４７はレジスタ（ＰＡＴＲ）２５に保持されているアドレスｎ＋１をホールドする。このとき、アドレス生成手段４７はアドレスｎ＋１を出力する。メモリセル２１は、アドレスｎ＋１に対応した読み出しデータ（ＲＤ＝Ｄｎ＋１）を出力する。レジスタ（ＲＥＷＲ）２７はアドレスｎ＋１に対応したエラー訂正後のデータＤｎ＋１を保持する。また、セレクタ３７は、レジスタ（ＨＬＤＲ）２６に保持されているアドレスｎに対応したデータＤｎを半導体記憶装置の出力（ＲＤＯＵＴ）として出力する。
【００８７】
（４）同一アドレスｎが入力される４サイクル目に対応するタイミング。
ＡＮＤゲート３１の出力はハイレベル、セレクタ３２出力はハイレベルとなる。アドレス生成手段４７はアドレスをインクリメントし、このアドレスｎ＋２をレジスタ（ＰＡＴＲ）２５に保持する（このアドレスｎ＋２は、次回のサイクルで用いられる）。このとき、アドレス生成手段４７はアドレスｎ＋１を出力する。メモリセル２１はアドレスｎ＋１に対応づけてレジスタ（ＲＥＷＲ）２７に保持されているデータＤｎ＋１を書き込む（再書き込み）。レジスタ（ＨＬＤＲ）２６は、アドレスｎに対応した読み出しデータとしてレジスタ（ＨＬＤＲ）２６に保持されているデータＤｎを出力する。セレクタ３７は、レジスタ（ＨＬＤＲ）２６に保持されているデータＤｎを半導体記憶装置の出力（ＲＤＯＵＴ）として出力する。
【００８８】
以上で説明したように、本実施の形態にかかる半導体記憶装置２０では、４サイクル以上同じアドレスで読み出しを行なっている場合、再書き込みを実施した読み出しアドレスから２サイクルに１回の割合でアドレスをインクリメントし、インクリメント後のアドレスを用いてメモリセル２１からデータを読み出し、当該データをＥＣＣ回路２２で訂正後、この訂正後のデータを同一アドレス（インクリメント後のアドレス）を用いて再書き込みしている。このとき、半導体記憶装置２０は出力（ＲＤＯＵＴ）としてレジスタ（ＨＬＤＲ）２６に保持されているデータを出力しているので、入力アドレス（ＡＤＩＮ）に対応したデータを出力していることになる。
【００８９】
このように、本実施の形態にかかる半導体記憶装置２０では、メモリセル２１からの読み出しとメモリセル２１への書き込みを交互に繰り返す巡回機能を実装しているので、半導体記憶装置の信頼性を向上させることができる。よって、本実施の形態にかかる発明により、プログラム処理性能を損なうことなくデータの信頼性を向上させることが可能な半導体記憶装置およびその制御方法を提供することができる。
【００９０】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。上記の実施の形態では１サイクルに読み出し又は書き込みのどちらかしかできない１ポートＲＡＭについて説明したが、本発明はこれに限定されるものではない。例えば、２ポートＲＡＭ(１Ｒ１Ｗとも呼ばれる)や４ポートＲＡＭ(２Ｒ２Ｗとも呼ばれる)等の多ポートＲＡＭに本発明を適用してもよい。
【００９１】
以上、本発明を上記実施形態に即して説明したが、上記実施形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。
【符号の説明】
【００９２】
１、２０  半導体記憶装置
２、２１  メモリセル
３、２２  ＥＣＣ回路
４、２３  レジスタ（ＡＤＲ）
５、２４  レジスタ（ＷＥＲ）
６、２７  レジスタ（ＲＥＷＲ）
７、２９  比較器
８、３０  ＡＮＤゲート（第１のＡＮＤゲート）
９、３１  ＡＮＤゲート（第２のＡＮＤゲート）
１０、１３、１４、３２、３４、３５、３６、３７、４０  セレクタ
１１、３３、３８  インバータ
１２、３９  ＯＲゲート
１５、４５  検出手段
２５  レジスタ（ＰＡＴＲ）
２６  レジスタ（ＨＬＤＲ）
２８  レジスタ（ＴＭＧＲ）
４６  切り替え手段
４７  アドレス生成手段
４８  データ保持手段
【図１】
0005344634.tif 000002
【図２】
0005344634.tif 000003
【図３】
0005344634.tif 000004
【図４】
0005344634.tif 000005