複数のメモリセルからなるメモリセルアレイ、並びに、当該メモリセルアレイに対して書込データの書込動作を実行する書込回路を有するデータ記憶部と、情報データから前記書込データを生成した上で前記書込回路に前記メモリセルアレイに対する当該書込データの書込動作を実行させるエンコーダと、規定回数内の前記書込動作によって前記メモリセルアレイに対する前記書込データの書き込みの成功又は失敗を判定し、失敗の場合、前記書込データを反転させた新たな書込データを生成した上で前記書込回路に前記メモリセルアレイに対して当該新たな書込データの書込動作を実行させる書込判定回路と、前記書込判定回路による判定が失敗であった場合、前記メモリセルから読み出された読出データを反転させた新たな読出データを生成するスイッチ回路と、前記メモリセルアレイから読み出された前記読出データを前記スイッチ回路を介して入力した上で当該読出データから前記情報データを復元するデコーダとを備えることを特徴とする不揮発性半導体メモリ。一の前記書込データの長さは、前記書込動作の際に、所定ビット数のエラーが一定程度現れるビット長に基づいて予め設定されることを特徴とする請求項1記載の不揮発性半導体メモリ。前記書込判定回路の判定結果は、前記データ記憶部に記録されることを特徴とする請求項1又は2記載の不揮発性半導体メモリ。前記書込判定回路の判定結果は、当該判定結果に基づいて生成されたパリティ情報が付加された上で記録されることを特徴とする請求項1~3のいずれか1項記載の不揮発性半導体メモリ。前記メモリセルが1つ以上の抵抗可変膜を具備しており、前記抵抗可変膜の抵抗状態変化において、低抵抗状態から高抵抗状態、若しくは、高抵抗状態から低抵抗状態のどちらか一方の変化が、他方に比べて困難であることを特徴とする請求項1~4のいずれか1項記載の不揮発性半導体メモリ。前記抵抗可変膜が、カーボンナノチューブ、フラーレン、その他の立体構造を有する炭素材料である炭素系ナノマテリアルからなることを特徴とする請求項5記載の不揮発性半導体メモリ。抵抗可変膜をメモリセルに用いたReRAMにおいて、抵抗可変膜が特性上、低抵抗状態から高抵抗状態への変化、或いは、高抵抗状態から低抵抗状態への変化のどちらかが困難である場合に、データ書き込み、或いは、消去時に発生するエラーの訂正をも可能とするような、従来よりも高いエラー訂正能力を実現しつつ、パリティデータの増大を抑制することを目的とする。実施形態に係る不揮発性半導体メモリは、複数のメモリセルからなるメモリセルアレイ、並びに、当該メモリセルアレイに対して書込データの書込動作を実行する書込回路を有するデータ記憶部と、情報データから前記書込データを生成した上で前記書込回路に前記メモリセルアレイに対する当該書込データの書込動作を実行させるエンコーダと、規定回数内の前記書込動作によって前記メモリセルアレイに対する前記書込データの書き込みの成功又は失敗を判定し、失敗の場合、前記書込データを反転させた新たな書込データを生成した上で前記書込回路に前記メモリセルアレイに対して当該新たな書込データの書込動作を実行させる書込判定回路と、前記書込判定回路による判定が失敗であった場合、前記メモリセルから読み出された読出データを反転させた新たな読出データを生成するスイッチ回路と、前記メモリセルアレイから読み出された前記読出データを前記スイッチ回路を介して入力した上で当該読出データから前記情報データを復元するデコーダとを備える。以下、図面を参照しながら実施形態に係る半導体記憶装置について説明する。実施形態に係る半導体記憶装置は、ECCErrorCorrectingCodeを用いた符号誤り訂正機能を有している。先ず、実施形態に係る半導体記憶装置のメモリセルアレイの一例を説明しておく。図1中Aは、実施形態に係るメモリセルアレイMAの一部を示す等価回路図であり、図1中Bは、図1中Aに示すメモリセルMCの一部を示す構造図である。メモリセルアレイMAは、図1中Aに示すように、複数のワード線WL、これら複数のワード線WLに交差する複数のビット線BL、並びに、これら複数のワード線WL及びビット線BLの各交差部に設けられた複数のメモリセルMCを備える。メモリセルMCは、直列接続された可変抵抗素子VR、及び、電流整流素子100からなる。このメモリセルMCは、可変抵抗素子VRの抵抗値の違いによってデータを記憶する。すなわち、例えば、可変抵抗素子VRの抵抗値の大きさによって、‘0’/‘1’のデータを規定する。また、可変抵抗素子VRの抵抗値は、可変抵抗素子VRに対して所定の電圧を所定の時間印加することで変化させることができる。以下において、可変抵抗素子VRの抵抗値が低抵抗である状態をセット状態、高抵抗である状態をリセット状態と呼ぶこともある。また、高抵抗状態の可変抵抗素子VRを低抵抗状態に遷移させる動作をセット動作、低抵抗状態の可変抵抗素子VRを高抵抗状態に遷移させる動作をリセット動作と呼ぶこともある。更に、セット動作及びリセット動作させることを書込動作と呼ぶこともある。可変抵抗素子VRは、図1中Bに示すように、下部電極、上部電極、並びに、これら上部電極及び下部電極に挟まれた抵抗可変膜を備える。抵抗可変膜としては、まず広く研究、開発されている、ニッケル酸化物NiOを始めとした二元系金属酸化物や、ストロンチウムジルコニウム酸化物SrZrO3を始めとして多元系金属酸化物が挙げられる。しかし、金属酸化物は組成や結晶構造を制御して作製することが難しく、組成や結晶構造の制御性の低さに起因すると考えられる抵抗変化膜の電気特性不安定性やばらつきが大きく、再現性良く所望の電気特性を得ることが困難という欠点もある。炭素系材料もまた抵抗変化層の候補として材料探索や作製方法の検討がなされている。炭素系材料は、単一の炭素で構成されるため、組成の制御は比較的容易でプロセス条件の依存性が少なく、制御しやすいメリットがある。しかし、炭素膜は高温高圧で作製しない限り、黒鉛、所謂、グラファイト構造が容易に形成されるため、電気抵抗率は低い。電気抵抗率が低すぎると、電気抵抗状態を変化させる際にメモリセルに流れる電流が大きくなり、消費電力も大きくなる。また抵抗状態の変化は、膜の炭素の結合状態sp3結合とsp2結合の違いに起因するとも考えられており、結合状態を変えるためには大電流が必要であることが予想され、抵抗変化に必要な電流の低減が困難である可能性がある。一方、同じ炭素系膜の中でも炭素系ナノマテリアルもまた、抵抗変化メモリ素子の一候補である。炭素系ナノマテリアルとは、カーボンナノチューブ、フラーレン、その他の立体構造を有する炭素材料の総称である。この炭素系ナノマテリアルを積層した層では、均質膜として形成されるバルク膜と異なり、微細チューブが積み上げられた間隙の多い立体構造であるが故に、電流パスが空間的に制限される。従って、炭素系ナノマテリアル自体が導電体であっても、炭素系ナノマテリアル層を流れる電流は少なく、炭素系ナノマテリアル層の電気抵抗状態を変化させる際に必要な電流を下げることが可能である。詳細な炭素系ナノマテリアル層の抵抗変化のメカニズムは明らかではないが、上述のような炭素系ナノマテリアル特有の電流制限機構により、炭素系ナノマテリアルを使った抵抗変化型メモリは、電気抵抗状態を変化させる際に必要な電流を低減できる可能性があるため、注目を集めている。上述のような理由から、抵抗可変膜として、炭素系ナノマテリアルを使うことが望ましい。また、下部電極、上部電極に関しては、熱に強く、且つ、抵抗値の低い材料が望ましく、例えばタングステンW、チタンTi、窒化タングステンWN、窒化チタンTiN、タングステンシリサイドWSi、ニッケルシリサイドNiSi、コバルトシリサイドCoSi等を用いることができる。電流整流素子100は、電圧電流特性において所定の電流整流特性を有すれば、材質、構造等は、特に限定されない。電流整流素子100としては、例えば、ポリシリコンPoly-Siで作製したダイオードが挙げられる。ダイオードの一例としては、不純物を含有するp型層及びn型層を備えるPN接合ダイオードが用いられる。また他にも、ダイオードとして、PN接合ダイオードのほかに、ショットキーダイオードや、p型層及びn型層の間に不純物を含有しないi層を挿入したPINダイオード等の各種ダイオード、パンチスルーダイオード等を用いることもできる。また、選択されたメモリセルMCの可変抵抗素子VRに所望の電圧、電流が供給できるような電流整流特性を得られるように、電流整流素子100に用いられる材料として、シリコンSi以外に、シリコンゲルマニウムSiGe、ゲルマニウムGe等の半導体、半導体と金属の混晶、酸化物等の絶縁体を用いることも可能である。可変抵抗素子VRの抵抗可変膜として炭素系ナノマテリアルを用いた場合、発明者等の独自の研究開発に結果によると、可変抵抗素子VRは、リセット動作は容易に起こるものの、セット動作が困難であるという特徴を持つ。そのため、可変抵抗素子VRをセット動作させるには、書込動作を繰り返し実行する必要がある。但し、書込動作を繰り返し実行することは、当然、データ書き込みの処理時間の増大を招くことになる。そこで、可変抵抗素子VRがセット動作しにくいことに起因するデータ書き込み処理時間の増大を回避するため、予め定めた規定回数の書込動作を繰り返しても可変抵抗素子VRがセット動作しなかった場合、書込動作を中止するという手法を採ることがある。そうすることで、データ書き込みの処理時間を抑制することができる。また、搭載したECCによる符号誤り訂正能力の範囲であれば、データ読み出しデコード時に、本来書き込まれるべき正しいデータを復元することができるため、メモリ動作の信頼性は確保される。しかし、上述のように、書き込み動作を規定回数繰り返しても可変抵抗膜VRがセット動作しなかった場合、書込動作を中止し、データ読み出しデコード時に、ECCにより正しいデータを復元するという手法においては、元々必要としていた、書き込んだデータを不揮発に保持するデータ保持特性を保証するためのパリティデータに加えて、セット動作が困難な可変抵抗素子VRに対する書込動作時に発生する書き込みエラーを保証するためのパリティデータも必要となる。この場合、本来記憶したい情報データに対するパリティデータの割合が増大してしまい、半導体記憶装置の実効的な記憶容量が損なわれることになる。ところで、従来のECCを用いた符号誤り訂正では、エンコードによりデータを符号化してから、データの読み出しデコードにより、情報データを復元するまでの、どの箇所でデータが反転するようなエラーが発生したかを明らかにすることなく、ECCの符号誤り訂正により、情報データを復号処理していた。つまり、従来のECCを用いた符号誤り訂正では、データ反転エラーが発生する箇所が考慮されていないと言える。以下では、データ反転エラーが発生する箇所を考慮した手法によって効率の良い符号誤り訂正を実現する。特に断りがない限り、炭素系ナノマテリアルからなる可変抵抗素子VRを用いた半導体記憶装置のように、書込動作時にエラーが生じ易い半導体記憶装置において有効である。以下では、特に断りがない限り、炭素系ナノマテリアルからなる可変抵抗素子VRを用いた半導体記憶装置において、1ビットのエラー訂正が可能なハミング符号を用いた場合を例に説明する。また、メモリセルアレイMAに書き込むデータを書込データ、メモリセルアレイMAが記憶するデータを記憶データ、メモリセルMAから読み出したデータを読出データと呼ぶことにする。したがって、メモリセルアレイMAに対する書込動作実行からメモリセルアレイMAに対する読出動作実行までの間にエラーが生じなかった場合、書込データ、記憶データ及び読出データは、同じになる。図2は、実施形態に係る半導体記憶装置のブロック図である。この半導体記憶装置は、データを記憶するデータ記憶部10、外部入力された情報データから書込データを生成するエンコーダ20、並びに、データ記憶部10に対して書込データが書き込まれたかを判定する書込判定回路であるセット判定回路30を備える。データ記憶部10は、図1に示すメモリセルアレイMAの他、データ記憶部10外から入力された書込データをメモリセルアレイMAに書き込む書込回路WRC、並びに、メモリセルアレイMAが記憶する記憶データを読み出し、読出データとしてデータ記憶部10外に出力する読出回路RDCを備える。エンコーダ20は、外部から入力された情報データを1ビットのエラー訂正が可能なハミング符号に符号化する回路である。図3は、エンコーダ20のブロック図の例であり、4ビットの情報データから3ビットのパリティデータを含む書込データを生成する回路である。このエンコーダ20は、例えば1クロック毎に、第1入力に情報データが入力されるXORゲートG1、フィードバックされたXORゲートG1の出力を保持する遅延フリップフロップD1、第1入力に遅延フリップフロッップD1の出力が入力され、第2入力にXORゲートG1の出力が入力されるXORゲートG2、XORゲートG2の出力を保持する遅延フリップフロップD2、遅延フリップフロップD2の出力を保持する遅延フリップフロップD3を備える。この遅延フリップフロップD3の出力は、XORゲートG2の第2入力に入力される。また、XORゲートG1の出力がエンコーダ20の出力となる。なお、上記遅延フリップフロップは、1クロック毎に、保持しているデータを出力し、新しく入力されるデータを保持する機能を有する。以上の構成によるエンコーダ20は、生成多項式をGx=x3x1とするハミング符号の符号化回路となっている。このエンコーダ20に入力される4ビットの情報データは、そのまま書込データの1~4ビット目として出力されると同時に、XORゲートG1、G2及び遅延フリップフロップD1~D4からなるシフトレジスタに入力される。シフトレジスタでは、生成多項式Gxによる情報データの割り算がなされ、その剰余がパリティデータとして遅延フリップフロップD1~D3に保持される。そして、この遅延フリップフロップD1~D3に保持されたパリティデータは、書込データの5~7ビット目として順次出力される。なお、上記では例として、4ビットの情報データの場合について説明したが、1つの書込データの長さは、1つの書込データにおいて、書込動作時、及び、データ保持期間中において、それぞれ高々1ビットのビット反転誤りが発生する程度の長さに予め設定しておく。このエンコーダ20から出力された書込データは、データ記憶部1の書込回路WRCに入力され、書込回路WRCによってメモリセルアレイMAに書き込まれる。セット判定回路30は、書込データに基づいてセット動作すべき可変抵抗素子VRが正常にセット動作したか以下、成功ともいうを確認する回路である。また、予め定められた規定回数の書込動作によっても可変抵抗素子VRがセット動作しなかった場合以下、失敗ともいう、エンコーダ20で生成された書込データの‘0’/‘1’を反転させた上で、新たな書込データとして書込回路WRCに送信する。そして、可変抵抗素子VRが正常にセット動作したか否かを示す書込エラー情報をデータ記憶部10例えば、図2中点線で示すメモリセルアレイMAの特定領域に記憶させる。この書込エラー情報は、書込データとは別に、例えば、メモリセルアレイMAの所定のアドレス領域に記憶される。この書込エラー情報は、メモリセルMCが正常にセット動作したか否かを示すだけなので、‘0’/‘1’の1ビットデータで足りる。なお、この書込エラー情報自身の信頼性を確保するためには、例えば、書込エラー情報にパリティデータを付加したハミング符号として保存しておくことが好ましい。この場合、書込エラー情報は、‘111’‘1’の場合又は‘000’‘0’の場合の3ビットのデータとなる。また、図2では、書込判定回路としてセット判定回路30を用いたが、リセット動作困難なメモリセルMCを用いた半導体記憶装置の場合には、このセット判定回路30に替えて、メモリセルMCが正常にリセット動作したことを確認するリセット判定回路を用いても良い。更に、本実施形態に係る半導体記憶装置は、書込エラーの有無を判定する書込エラー有無判定回路40、書込エラーが有った場合に読出データを反転させるスイッチ部50、並びに、読出データから情報データを復元するデコーダ60を備える。書込エラー有無判定回路40は、データ記憶部10に記憶されている書込エラー情報を取得し、書込エラーの有無を判定し、その判定結果である書込エラー有無情報をスイッチ部50に送信する。スイッチ部50は、図4に示すように、書込エラー有無判定回路40から入力された書込エラー有無情報によって制御されるスイッチSW1と読出データを反転させるインバータIV1を備える。書込エラーが有った場合、読出回路RDCから出力された読出データは、インバータIV1を介してビット毎に反転された上でデコーダ60に送信される。一方、書込エラーが無かった場合、読出回路RDCから出力された読出データがそのままデコーダ60に送信される。デコーダ60は、スイッチ部50から出力された読出データの符号誤り訂正を行い、正しい情報データを復元させる回路であり、図4に示すブロック図は、その一例である。このデコーダ60は、第1入力にスイッチ部50から出力された読出データが入力されるXORゲートG1、XORゲートG1の出力を保持する遅延フリップフロップD1、第1入力に遅延フリップフロップD1の出力が入力されるXORゲートG2、XORゲートG2の出力を保持する遅延フリップフロップD2、遅延フリップフロップD2の出力を保持する遅延フリップフロップD3を備える。この遅延フリップフロップD3の出力は、XORゲートG1の第2入力及びXORゲートG2の第2入力にそれぞれフィードバックされる。また、デコーダ60は、スイッチ部50から出力された読出データが入力される7単位時間遅延回路D4、7単位時間遅延回路D4の出力を保持する遅延フリップフロップD5、正論理の第1入力、負論理の第2入力及び負論理の第3入力にそれぞれ遅延フリップフロップD1、D2及びD3の出力が入力される3入力のANDゲートG3、並びに、第1入力に遅延フリップフロップD5の出力が入力され、第2入力にANDゲートG3の出力が入力されるXORゲートG4を備える。なお、7単位時間遅延回路D4は、7個の遅延フリップフロップを直列接続した回路である。また、XORゲートG4の出力がデコーダ60の出力となる。なお、上記遅延フリップフロップは、1クロック毎に、保持しているデータを出力し、新しく入力されるデータを保持する機能を有する。以上の構成によるデコーダ60は、生成多項式をGx=x3x1とするハミング符号の復号化回路となっている。次に、上記構成によるデータの書き込みを図5に示すフローを用いて説明する。始めに、ステップS11では、エンコーダ20が、外部から入力された情報データDiからパリティデータを含む書込データDwを生成する。この書込データDwは、エンコーダ20からデータ記憶部10の書込回路WRCに送信される。続いて、ステップS12では、書込回路WRCが、メモリセルアレイMAに対して書込データDwの書込動作を実行する。続いて、ステップS13では、セット判定回路30が、書込回路WRCによる書込動作によってメモリセルMCが正常にセット動作したかを確認する。その結果、正常にセット動作した場合、以下のステップS17に処理を移す。一方、正常にセット動作しなかった場合、予め決められた規定回数を限度として、ステップS12の書込動作を繰り返し実行するステップS14。書込動作の繰り返し回数が規定回数以内で、書込データDwの書込動作を実行できた場合には、ステップS17に移行する。一方、ステップS14では、書込動作の繰り返し回数が規定回数に達しても書込動作が完了しない場合、ステップS15において、セット判定回路30が、書込データDwを反転させた新たな書込データ/Dwを生成し、書込回路WRCに送信する。このように書込データDwを反転させることで、セット動作困難な可変抵抗素子VRをセット動作する必要がなくなる。続いて、ステップS16では、書込回路WRCが、メモリセルアレイMAに対して書込データ/Dwの書込動作を実行する。この書込動作は書込データ/Dwが正常に書き込まれるまで繰り返し実行しても良い。最後に、ステップS17において、セット判定回路30が、書込データDwの書込動作の結果に基づいて、書込データDwを書き込んだが、反転させた新たな書込データ/Dwを書き込んだかの情報を生成し、データ記憶部10に記憶しておく。以上によって、メモリセルアレイMAへのデータ書き込みが完了する。次に、データの読み出しを図6に示すフローを用いて説明する。始めに、ステップS21では、データ記憶部10の読出回路RDCが、メモリセルアレイMAが保持する記憶データを読み出し、読出データDrとしてスイッチ部50に送信する。続いて、ステップS22において、データ記憶部10の読出回路RDCが、例えばメモリセルアレイMAの特定領域に記憶された書込エラー情報を読み出し、書込エラー有無判定回路40に送信する。続いて、ステップS23において、書込エラー有無判定回路40が、書込エラー情報から、書込データDwを書き込んだが、反転させた新たな書込データ/Dwを書き込んだかを判定し、その判定の結果を書込エラー有無情報としてスイッチ部50に送信する。続いて、スイッチ部50が、書込エラー有無情報に基づいて、読出データDrを処理する。ここで、書込エラーが無かった場合、読出回路RDCから入力された読出データDrはそのままデコーダ60に送信される。一方、書込エラーが有った場合、ステップS24において、スイッチ部50で読出データDrを反転させた読出データ/Drが生成されデコーダ60に送信される。最後に、ステップS25において、デコーダ60が、読出データDr或いは/Drから情報データDiを復元する。以上によって、メモリセルアレイMAからのデータ読み出しが完了する。次に、本実施形態に係る半導体記憶装置の符号誤り訂正の効率を、比較例の符号誤り訂正の効率と比較しながら説明する。図7は、実施形態図中のEmbodiment及び比較例図中のComparisonexampleにおける、書込データ長とパリティデータ長との関係を示すグラフである。書き込みデータ長が同じであれば、パリティデータ長が短い方が、より多くのメモリ容量を本来記憶したい情報データの記憶にあてがえるため、好ましい。なお、このグラフは、符号反転エラー発生頻度が、所定の書込データ長のデータ書き込み、及び、読み出みをする場合において、書込動作時、及び、データ保持期間中に、それぞれ高々1ビットのビット反転誤りが発生する程度であることを条件としてプロットされている。なお、本実施形態では、書込データを符号化する際、1ビットの符号誤り訂正が可能なハミング符号を利用する場合を想定している。一方、比較例では、ECCとして現在良く用いられている2ビットの符号誤り訂正が可能なBCH符号を利用した場合を想定している。図7から、本実施形態によれば、如何なる書込データ長図7中のLengthofCodeWordsであっても、比較例と比べて、パリティデータ長図7中のNumberofParityBitsが短いことが分かる。例えば、書込データ長を2047ビットとした場合を見てみると、比較例では、情報データが2025ビットに対し、バリティデータが22ビット必要となる。これに対し、本実施形態では、情報データが2036ビットに対し、パリティデータが11ビットしか必要ない。ハミング符号化された書込エラー情報の3ビットを考慮しても、パリティデータは14ビットに留まる。以上、本実施形態によれば、書込エラーを他のエラーと別途取り扱うことで、比較例の符号誤り訂正と比べて、パリティデータの低減を図ることができる。したがって、より高効率な符号誤り訂正を実現した半導体記憶装置を提供することができる。[その他]以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。