(57)【要約】【課題】ＴＤＰで動作させてもＥＣＣ機能の使用を可能とし、ビット化けに対して記憶データを保護することを可能とするブロックメモリ装置等を提供する。【解決手段】第１のエラーチェック機能を有する第１のブロックＲＡＭ１０１と、第２のエラーチェック機能を持つ第２のブロックＲＡＭ１１０，１２０と、一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに同時に送信するアクセス機能部１５０，１６０とを有すると共に、データ読み出しの際に第１のブロックＲＡＭから読み出されたデータに対して第１のエラーチェック機能でエラーチェックを行い、この第１のエラーチェック機能でエラーが検出されなければ第１のブロックＲＡＭから読み出されたデータをアクセス機能部および入出力ポートを介して外部に出力するエラー補正機能部１３０，１４０を備える。【選択図】図１
2014096021.tif 000002
【特許請求の範囲】
【請求項１】
外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置であって、
第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の前記入出力ポートを介して外部から受信した書き込みデータを前記第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有すると共に、
データ読み出しの際に前記第１のブロックＲＡＭから読み出されたデータに対して前記第１のエラーチェック機能でエラーチェックを行い、この前記第１のエラーチェック機能でエラーが検出されなければ前記第１のブロックＲＡＭから読み出されたデータを前記アクセス機能部および前記入出力ポートを介して外部に出力するエラー補正機能部を備えることを特徴とするブロックメモリ装置。
【請求項２】
前記エラー補正機能部は、
前記第１のエラーチェック機能でエラーが検出された場合に、前記第２のブロックＲＡＭから読み出されたデータに対して前記第２のエラーチェック機能でエラーチェックを行い、前記第２のエラーチェック機能でエラーが検出されなければ前記第２のブロックＲＡＭから読み出されたデータを前記アクセス機能部および前記入出力ポートを介して外部に出力する機能を有することを特徴とする、請求項１に記載のブロックメモリ装置。
【請求項３】
前記エラー補正機能部は、
前記第２のエラーチェック機能でエラーが検出されればリードエラーを前記アクセス機能部および前記入出力ポートを介して外部に出力する機能を有することを特徴とする、請求項２に記載のブロックメモリ装置。
【請求項４】
前記アクセス機能部が一方の前記入出力ポートを介して外部から受信した前記書き込みデータを前記第１および第２のブロックＲＡＭに送信した際に、この書き込みデータを他方の前記入出力ポート側に備えられた第３のブロックＲＡＭにも送信するライトアクセス制御部を、前記アクセス機能部に併設したことを特徴とする、請求項１に記載のブロックメモリ装置。
【請求項５】
前記第１のエラーチェック機能でエラーが検出され且つ前記第２のエラーチェック機能でエラーが検出されなかった場合に、前記第１のブロックＲＡＭに記憶されたデータを訂正するＢＲＡＭ補正部を、当該第１のブロックＲＡＭに併設したことを特徴とする、請求項２に記載のブロックメモリ装置。
【請求項６】
前記第１のエラーチェック機能がパリティビットを利用したパリティ機能であり、前記第２のエラーチェック機能が誤り訂正符号を利用したＥＣＣ（Error Check and Correct、誤りエラー検出訂正）機能であることを特徴とする、請求項１に記載のブロックメモリ装置。
【請求項７】
外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置にあって、
このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の前記入出力ポートを介して外部から受信した書き込みデータを前記第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有するものであり、
データ読み出しの際に前記第１のブロックＲＡＭから読み出されたデータに対して、エラー補正機能部が前記第１のエラーチェック機能でエラーチェックを行い、
この前記第１のエラーチェック機能でエラーが検出されなければ、前記第１のブロックＲＡＭから読み出されたデータを前記エラー補正機能部が前記アクセス機能部に出力し、
当該データを前記アクセス機能部が前記入出力ポートを介して外部に出力する
ことを特徴とするデータ補正方法。
【請求項８】
前記第１のエラーチェック機能でエラーが検出された場合に、前記第２のブロックＲＡＭから読み出されたデータに対して前記エラー補正機能部が前記第２のエラーチェック機能でエラーチェックを行い、
前記第２のエラーチェック機能でエラーが検出されなければ、前記第２のブロックＲＡＭから読み出されたデータを前記エラー補正機能部が前記アクセス機能部に出力し、
前記第２のエラーチェック機能でエラーが検出されれば、リードエラーを前記エラー補正機能部が前記アクセス機能部に出力する
ことを特徴とする、請求項７に記載のデータ補正方法。
【請求項９】
外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置にあって、
このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の前記入出力ポートを介して外部から受信した書き込みデータを前記第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有するものであり、
前記ブロックメモリ装置が備えるプロセッサに、
データ読み出しの際に前記第１のブロックＲＡＭから読み出されたデータに対して、前記第１のエラーチェック機能でエラーチェックを行う手順、
この前記第１のエラーチェック機能でエラーが検出されなければ、前記第１のブロックＲＡＭから読み出されたデータを前記アクセス機能部に出力する手順、
および当該データを前記アクセス機能部および前記入出力ポートを介して外部に出力する手順
を実行させることを特徴とするデータ補正プログラム。
【請求項１０】
前記第１のエラーチェック機能でエラーが検出された場合に、前記第２のブロックＲＡＭから読み出されたデータに対して前記第２のエラーチェック機能でエラーチェックを行う手順、
前記第２のエラーチェック機能でエラーが検出されなければ、前記第２のブロックＲＡＭから読み出されたデータを前記アクセス機能部に出力する手順、
前記第２のエラーチェック機能でエラーが検出されれば、リードエラーを前記アクセス機能部に出力する手順
をさらに実行させることを特徴とする、請求項９に記載のデータ補正プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はブロックメモリ装置、データ補正方法およびプログラムに関し、特にＦＰＧＡ（Field Programmable Gate Array）で動作プログラムを記憶するブロックメモリで、ビット化けに対して記憶データを保護するブロックメモリ装置等に関する。
【背景技術】
【０００２】
現在のネットワーク製品や汎用コンピュータにおいて、メモリ製品、またはメモリ機能を有するデバイス製品はなくてはならないものになっている。半導体メモリにおいてはビット化けの発生は不可避であるので、ビット化けが発生した場合にそれを検出あるいは訂正して、これによって記憶されたデータの信頼性を確保している。
【０００３】
より具体的には、たとえばパリティビットやＣＲＣ（Cyclic Redundancy Check、巡回冗長検査）コードなどを付加することによるエラー検出や、ＥＣＣ（Error Check and Correct、誤りエラー検出訂正）コードなどを付加することによるエラー検出訂正が一般的に行われている。汎用コンピュータのメインメモリ領域として使用されるデバイスなどにおいては特に、ビット化けが致命的な問題となるため、データ６４ビット中１ビットの化けを検出して訂正することが可能なＥＣＣ機能をもつデバイスが選択されることが多い。
【０００４】
それに加えて、近年は、汎用コンピュータのプログラムや作業データのみならず、ＦＰＧＡの出現により、ハードウェアもハードウェア記述言語のプログラミングによって動作するようになっている。オーディオ、ビデオ、通信、コンピュータなどの民生用の各種製品、あるいはインフラ用のネットワーク機器などにも、そのようなＦＰＧＡが多く搭載されている（非特許文献１より）。
【０００５】
さらに、Ｃ言語などで書かれたコンピュータプログラム、あるいはＳＱＬ（Structured Query Language）で記述されたデータ処理内容なども、これらをハードウェア記述言語に変換してＦＰＧＡで動作させることによって、ハードウェアとして高速に、かつ高い信頼性をもって処理することを可能とするという技術も開発されている（非特許文献２より）。即ち、ＦＰＧＡの動作プログラムに対しても、信頼性を確保するためにビット化けを訂正および検出する仕組みが欠かせない。
【０００６】
ＦＰＧＡの動作プログラム（ハードウェア記述言語）は、フラッシュメモリなどのような外部の記憶手段から、内部のＢＲＡＭ（Block Random Access Memory）に読み込まれる。これによって、ＦＰＧＡは任意の論理演算を実現することが可能となる。たとえばネットワーク機器で使用される多くのインタフェースも、これによって実現される。
【０００７】
また、このＢＲＡＭでパリティ機能（パリティビット付加によるエラー検出機能）やＥＣＣ機能（ＥＣＣコード付加によるエラー検出訂正機能）などを使用するか否かも、ハードウェア記述言語を記述する段階で選択可能である。
【０００８】
これに関連して、次のような技術文献がある。その中でも特許文献１には、二重化されたシステムバスとメモリを備えたコンピュータで、各バスに備えられたエラー検出回路による検出結果を比較して、この比較結果に応じてどちらのバスを使用するかを切り替えるという計算機システムが記載されている。
【０００９】
特許文献２には、ＥＣＣ動作のための不足ビットを、パリティビットを記憶するメモリから供給するというコンピュータが記載されている。特許文献３には、第１〜２のメモリ部の各々のパリティビットから、これらのメモリのうちいずれのデータを使用するかを選択するという二重化メモリ装置が記載されている。特許文献４には、一方の記憶手段でエラーが検出された場合に、他方の記憶手段の同一アドレスのデータを書き込んでエラーチェックを行うという二重化記憶システムが記載されている。
【００１０】
非特許文献１にはＦＰＧＡの技術についての概要が記載されている。非特許文献２にはコンピュータプログラムやデータ処理内容をハードウェア記述言語に変換し、ＦＰＧＡによってこれをハードウェアとして動作させるということが記載されている。非特許文献３には、ＦＰＧＡを効率よく動作させることが可能であるＢＲＡＭの使用方法について記載されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００４−００５６２７号公報
【特許文献２】特開平０５−１７３８９８号公報
【特許文献３】特開平０４−２３３０５２号公報
【特許文献４】特開平０１−０７０８４７号公報
【非特許文献】
【００１２】
【非特許文献１】荒井雅、「いまさら聞けないＦＰＧＡ入門」、２００６年９月２０日、［平成２４年１０月１５日検索］、（株）アイティメディア（株）、インターネット＜URL：http://monoist.atmarkit.co.jp/mn/articles/0609/20/news118.html＞
【非特許文献２】「ＮＥＣ、ビッグデータ処理の高速化を実現するハードウェアを従来比１／５０の期間で設計できる技術を開発（ニュースリリース）」、２０１２年８月３１日、［平成２４年１０月１５日検索］、日本電気株式会社、インターネット＜URL：http://jpn.nec.com/press/201208/20120831_01.html＞
【非特許文献３】内藤竜治、「ブロックＲＡＭの使い方（FPGAとVHDLのTipsより）」、平成１４年１０月１２日、［平成２４年１０月１５日検索］、インターネット＜URL：http://www.nahitech.com/nahitafu/fpgavhdl/bram/bram.html＞
【発明の概要】
【発明が解決しようとする課題】
【００１３】
前述のように、開発者がプログラミングすることによってハードウェアを構築することが可能なＦＰＧＡは、ネットワーク製品にも適用されることが多くなっている。その場合にもビット化けは発生しうるので、それらに対しては前述のパリティ機能やＥＣＣ機能を利用して障害を検出し、障害発生時の動作（データの廃棄および再送など）をハードウェア記述言語のプログラム上で記述して対処することが一般的である。
【００１４】
しかしながら、ネットワーク装置では特に、本来なら有効とすべきデータでもビット化けが発生したらパケット廃棄や装置再起動などとなるので、ビット化けの多発は正常パケットに対してもパケット廃棄や装置再起動の多発となり、当該ネットワーク全体に対して悪影響を及ぼすこととなる。そのため、ビット化けに対する処理はＦＰＧＡ内、特にメモリ装置内で適切に処理される必要がある。ＦＰＧＡの他の用途に対しても、これと同様の問題点は多かれ少なかれ存在する。
【００１５】
図１９は、ＦＰＧＡにおける一般的なブロックメモリ装置９００の構成について示す説明図である。ブロックメモリ装置９００は、２つの入出力ポートであるポートＡ９０３ａおよびポートＢ９０３ｂを備え、これらのポートＡ９０３ａおよびポートＢ９０３ｂのそれぞれから独立してアクセス可能なメモリ用ＢＲＡＭ９０１を備える。このメモリ用ＢＲＡＭ９０１は、ポートＡ側およびポートＢ側のそれぞれで使用される記憶領域であるポートＡ領域９０１ａとポートＢ領域９０１ｂとに分かれる。
【００１６】
そして、ブロックメモリ装置９００は、ポートＡ側およびポートＢ側のそれぞれにデータの読み書きをするポートＡ用ＢＲＡＭアクセス機能部９１０とポートＢ用ＢＲＡＭアクセス機能部９２０を備える。
【００１７】
ポートＡ用ＢＲＡＭアクセス機能部９１０およびポートＢ用ＢＲＡＭアクセス機能部９２０のそれぞれには、ポートＡ９０３ａおよびポートＢ９０３ｂを介してＦＰＧＡで論理回路を実現するロジックセルや乗算器などが接続され、ハードウェア記述言語で記述されたプログラムによって任意の論理演算を実現することが可能となる。このような構造のメモリ装置を、通常はデュアルポートメモリという。
【００１８】
その際、ポートＡ／Ｂの両方からのリード／ライトアクセスがいずれも可能である動作モードと、一方のポートからはリードのみ、もう一方からはライトのみが可能である動作モードが存在する。前者をＴＤＰ（True Dual Port Memory）、後者をＳＤＰ（Single Dual Port Memory）という。
【００１９】
しかしながら、ブロックメモリ装置９００は、ＴＤＰで動作させる場合にはＥＣＣ機能が使用できずにパリティ機能しか使用できないというハードウェア上の制約が存在する。即ち、ＥＣＣ機能を使用したい場合にはＳＤＰで動作させる必要がある。ビット化けに対する保護は、１ビットの化けを検出することしかできないパリティ機能よりも、６４ビット中１ビットの化けの訂正と２ビットの検出ができるＥＣＣ機能の方が望ましい。しかしながら、ＢＲＡＭをＴＤＰで動作させるとＥＣＣ機能が使用できないので、データに対する信頼性を犠牲にすることとなる。
【００２０】
この問題を解決しうる技術は、前述の特許文献１〜４、および非特許文献１〜３のいずれにも記載されていない。特許文献１〜４に記載の技術はいずれも、ＦＰＧＡに搭載されるデュアルポートメモリに関するものではなく、またこの用途に適用可能なものでもない。非特許文献１〜３は、前述のようなＦＰＧＡについての既存技術の概要について述べているに過ぎない。
【００２１】
本願発明の目的は、ＴＤＰで動作させてもＥＣＣ機能、もしくはこれと同等のデータ補正検出機能を使用することを可能とし、これによってビット化けに対して記憶データを保護することを可能とするブロックメモリ装置、データ補正方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００２２】
上記目的を達成するため、本発明に係るブロックメモリ装置は、外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置であって、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有すると共に、データ読み出しの際に第１のブロックＲＡＭから読み出されたデータに対して第１のエラーチェック機能でエラーチェックを行い、この第１のエラーチェック機能でエラーが検出されなければ第１のブロックＲＡＭから読み出されたデータをアクセス機能部および入出力ポートを介して外部に出力するエラー補正機能部を備えることを特徴とする。
【００２３】
上記目的を達成するため、本発明に係るデータ補正方法は、外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置にあって、このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有するものであり、データ読み出しの際に第１のブロックＲＡＭから読み出されたデータに対して、エラー補正機能部が第１のエラーチェック機能でエラーチェックを行い、この第１のエラーチェック機能でエラーが検出されなければ、第１のブロックＲＡＭから読み出されたデータをエラー補正機能部がアクセス機能部に出力し、当該データをアクセス機能部が入出力ポートを介して外部に出力することを特徴とする。
【００２４】
上記目的を達成するため、本発明に係るデータ補正プログラムは、外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置にあって、このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有するものであり、ブロックメモリ装置が備えるプロセッサに、データ読み出しの際に第１のブロックＲＡＭから読み出されたデータに対して、第１のエラーチェック機能でエラーチェックを行う手順、この第１のエラーチェック機能でエラーが検出されなければ、第１のブロックＲＡＭから読み出されたデータをアクセス機能部に出力する手順、および当該データをアクセス機能部および入出力ポートを介して外部に出力する手順を実行させることを特徴とする。
【発明の効果】
【００２５】
本発明は、上記したように、第１および第２のブロックＲＡＭのエラーチェック結果に応じてこれらのブロックＲＡＭから読み出されたデータを出力するように構成したので、ブロックＲＡＭの動作モードに起因するハードウェア的な制約に関係なくエラーチェックを行う事が出来る。これによって、ＴＤＰで動作させてもＥＣＣ機能、もしくはこれと同等のデータ補正検出機能を使用することを可能とし、これによってビット化けに対して記憶データを保護することを可能が可能であるという、優れた特徴を持つブロックメモリ装置、データ補正方法およびプログラムを提供することにある。
【図面の簡単な説明】
【００２６】
【図１】本発明の第１の実施形態に係るブロックメモリ装置の構成について示す説明図である。
【図２】図１で示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）のより詳しい構成について示す説明図である。
【図３】図１〜２に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）の、メモリ用ＢＲＡＭに対してリードアクセスがあった場合の動作について示すフローチャートである。
【図４】図３に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）の動作で、メモリ用ＢＲＡＭに対してのリードアクセスでエラーが発生していない時の動作（図３・ステップＳ１０６）について示す説明図である。
【図５】図３に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）の動作で、メモリ用ＢＲＡＭに対してのリードアクセスでメモリ用ＢＲＡＭにエラーが発生した時の動作（図３・ステップＳ１０７）について示す説明図である。
【図６】図３に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）の動作で、メモリ用ＢＲＡＭに対してのリードアクセスでメモリ用ＢＲＡＭとポートＡ用ＢＲＡＭ（ポートＢ用ＢＲＡＭ）の両方にエラーが発生した時の動作（図３・ステップＳ１０８）について示す説明図である。
【図７】図２に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）のパリティチェック機能部の、図３のステップＳ１０４として示した動作の詳細について示すフローチャートである。
【図８】図７に示したパリティチェック機能部の動作で、パリティチェック（ステップＳ１１２）でエラーが検出されなかった場合（エラー状態＝０）の動作について示す説明図である。
【図９】図７に示したパリティチェック機能部の動作で、パリティチェック（ステップＳ１１２）でエラーが検出された場合（エラー状態＝１）の動作について示す説明図である。
【図１０】図２に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）のＥＣＣチェック機能部の、図３のステップＳ１０５として示した動作の詳細について示すフローチャートである。
【図１１】図１０に示したＥＣＣチェック機能部の動作で、ＥＣＣチェック（ステップＳ１２２）でエラーが検出されなかった場合（エラー状態＝０）の動作について示す説明図である。
【図１２】図１０に示したＥＣＣチェック機能部の動作で、ＥＣＣチェック（ステップＳ１２２）でエラーが検出された場合（エラー状態＝１）の動作について示す説明図である。
【図１３】図２に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）の出力選択部のさらに詳細な構成について示す説明図である。
【図１４】図２に示したポートＡ用エラー補正機能部（ポートＢ用エラー補正機能部）の出力選択部の、図３のステップＳ１０６〜１０８として示した動作の詳細について示すフローチャートである。
【図１５】本発明の第２の実施形態に係るブロックメモリ装置の構成について示す説明図である。
【図１６】図１５で示したライトアクセス制御部Ａ（ライトアクセス制御部Ｂ）の動作について示す説明図である。
【図１７】本発明の第３の実施形態に係るブロックメモリ装置の構成について示す説明図である。
【図１８】本発明の第４の実施形態に係るブロックメモリ装置の構成について示す説明図である。
【図１９】ＦＰＧＡにおける一般的なブロックメモリ装置の構成について示す説明図である。
【発明を実施するための形態】
【００２７】
（第１の実施形態）
以下、本発明の第１の実施形態の構成について添付図１に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係るブロックメモリ装置１０は、外部から各々独立してデータの入出力が可能な２つの入出力ポート（ポートＡ１０２ａ，ポートＢ１０２ｂ）を備えたブロックメモリ装置である。そして、第１のエラーチェック機能を有する第１のブロックＲＡＭ（メモリ用ＢＲＡＭ１０１）と、第２のエラーチェック機能を持つ第２のブロックＲＡＭ（ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０）と、一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに同時に送信するアクセス機能部（ポートＡ用ＢＲＡＭアクセス機能部１５０およびポートＢ用ＢＲＡＭアクセス機能部１６０）とを有する。そして、データ読み出しの際に第１のブロックＲＡＭから読み出されたデータに対して第１のエラーチェック機能でエラーチェックを行い、この第１のエラーチェック機能でエラーが検出されなければ第１のブロックＲＡＭから読み出されたデータをアクセス機能部および入出力ポートを介して外部に出力するエラー補正機能部（ポートＡ用エラー補正機能部１３０およびポートＢ用エラー補正機能部１４０）を備える。
【００２８】
そして、このエラー補正機能部（ポートＡ用エラー補正機能部１３０およびポートＢ用エラー補正機能部１４０）は、第１のエラーチェック機能でエラーが検出された場合に、第２のブロックＲＡＭから読み出されたデータに対して第２のエラーチェック機能でエラーチェックを行い、第２のエラーチェック機能でエラーが検出されなければ第２のブロックＲＡＭから読み出されたデータをアクセス機能部および入出力ポートを介して外部に出力するという機能を有する。さらに、第２のエラーチェック機能でエラーが検出されればリードエラーをアクセス機能部および入出力ポートを介して外部に出力するという機能も備える。
【００２９】
ここで、第１のエラーチェック機能はパリティビットを利用したパリティ機能であり、第２のエラーチェック機能は誤り訂正符号を利用したＥＣＣ（Error Check and Correct、誤りエラー検出訂正）機能である。
【００３０】
以上の構成を備える事により、このブロックメモリ装置１０は、ＴＤＰで動作させてもＥＣＣ機能、もしくはこれと同等のデータ補正検出機能を使用することが可能となる。
以下、これをより詳細に説明する。
【００３１】
図１は、本発明の第１の実施形態に係るブロックメモリ装置１０の構成について示す説明図である。ブロックメモリ装置１０は、ＦＰＧＡ（Field Programmable Gate Array）で、このＦＰＧＡを任意の論理回路として動作させるためのプログラムを記憶するＢＲＡＭ（ブロックＲＡＭ）として利用されるものである。
【００３２】
ブロックメモリ装置１０は、デュアルポートメモリと呼ばれるものであり、２つの入出力ポートであるポートＡ１０２ａおよびポートＢ１０２ｂのそれぞれから独立してアクセス可能である。ブロックメモリ装置１０は、パリティ検出機能を有するメモリ用ＢＲＡＭ１０１と、ＥＣＣ機能を持つポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０とを備える。メモリ用ＢＲＡＭ１０１は、ポートＡ側およびポートＢ側のそれぞれで使用される記憶領域であるポートＡ領域１０１ａとポートＢ領域１０１ｂとに分かれる。
【００３３】
そしてブロックメモリ装置１０は、ポートＡおよびポートＢを介してそれぞれ外部と接続され、各々のＢＲＡＭに対してデータの読み書きを行うポートＡ用ＢＲＡＭアクセス機能部１５０およびポートＢ用ＢＲＡＭアクセス機能部１６０、ポートＡ側およびポートＢ側のそれぞれでデータエラーの補正を行うポートＡ用エラー補正機能部１３０およびポートＢ用エラー補正機能部１４０、そしてデータ書き込み要求（ライトアクセス）に含まれる書き込みデータ（ライトデータ）のパリティビットをＥＣＣビットに変換するライトアクセス制御部１７０および１８０を備える。これら各々の機能と動作については後述する。
【００３４】
ポートＡ用ＢＲＡＭアクセス機能部１５０およびポートＢ用ＢＲＡＭアクセス機能部１６０のそれぞれには、ポートＡ１０２ａおよびポートＢ１０２ｂを介して、ＦＰＧＡで論理回路を実現するロジックセルや乗算器などが接続され、ハードウェア記述言語で記述されたプログラムによって任意の論理演算を実現することが可能となる。
【００３５】
メモリ用ＢＲＡＭ１０１のポートＡ領域１０１ａ、およびポートＡ用ＢＲＡＭ１１０は、いずれもポートＡ用エラー補正機能部１３０に接続される。メモリ用ＢＲＡＭ１０１のポートＢ領域１０１ｂ、およびポートＢ用ＢＲＡＭ１２０は、いずれもポートＢ用エラー補正機能部１４０に接続される。
【００３６】
ここで、多くのＦＰＧＡで、メモリ用ＢＲＡＭ１０１のようにパリティ検出機能を備えるＢＲＡＭは、ポートＡ／Ｂの両方からのリード／ライトアクセスを可能としている。このような動作をＴＤＰ（True Dual Port Memory）という。その一方で、ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０のようにＥＣＣ機能を備えるＢＲＡＭでは、Ａ面はリードのみでＢ面はライトのみ（またはＡ面はライトのみでＢ面はリードのみ）という形でアクセスが制限されている場合もある。このような動作をＳＤＰ（Single Dual Port Memory）という。本実施形態では、メモリ用ＢＲＡＭ１０１の動作はＴＤＰ、ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０の動作はＳＤＰである。
【００３７】
メモリ用ＢＲＡＭ１０１は、パリティ検出機能を備えている。このパリティ検出とは、データ通信においてデータの誤り（エラー）を検出する手法の一つである。この手法では、メモリを含めた回路内で扱うデータ列を一定の個数で区切り、その中に含まれる１（または０）の個数を、パリティビットと呼ばれる偶奇を示すビットとして添付してデータを転送する。そして、データを受信した側は、添付されたパリティビットの値と実際のデータ中に含まれる１（または０）の個数を比較して、偶奇が合わなければデータに誤りがあると判定する。
【００３８】
ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０は、ＥＣＣ機能を備える。このＥＣＣ（Error Check and Correct、誤りエラー検出訂正）機能とは、データ６４ビットにつき８ビットの誤り訂正符号（ＥＣＣビット）を対応させて付加し、このＥＣＣビットを利用して、データ６４ビット中１ビットが誤った値になった場合にこれを検出して訂正するという機能である。また、データ６４ビット中２ビットが同時に誤った値になった場合は、訂正はできないが、誤りの発生を検出することができる。
【００３９】
ポートＡ用ＢＲＡＭアクセス機能部１５０およびポートＢ用ＢＲＡＭアクセス機能部１６０から発せられるライトアクセスには、ライトデータとこのライトデータのパリティビットが含まれる。従って、これらをメモリ用ＢＲＡＭ１０１には直接書き込めるが、ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０には直接書き込めない。そこで、ライトアクセス制御部１７０および１８０はライトデータからＥＣＣビットを生成して、このＥＣＣビットをライトデータに添付してポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０に書き込む。
【００４０】
図２は、図１で示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）のより詳しい構成について示す説明図である。図２にはポートＡ用エラー補正機能部１３０の構成について示しているが、ポートＢ用エラー補正機能部１４０の構成もこれと同一である。
【００４１】
ポートＡ用エラー補正機能部１３０は、パリティチェック機能部２０１、ＥＣＣチェック機能部２０３、および出力選択部２０２を備える。パリティチェック機能部２０１は、メモリ用ＢＲＡＭ１０１のポートＡ領域１０１ａからの出力信号の（リードデータ）のエラーの有無を検出する。ＥＣＣチェック機能部２０３は、ポートＡ用ＢＲＡＭ１１０からの出力信号（リードデータ）のエラーの有無を検出する。
【００４２】
出力選択部２０２は、詳細は後述するが、パリティチェック機能部２０１とＥＣＣチェック機能部２０３とから渡されたエラー検出後のデータのうちのいずれを、ポートＡ用ＢＲＡＭアクセス機能部１５０に出力するかを切り替える。
【００４３】
ポートＢ用エラー補正機能部１４０の構成も、ただ「ポートＡ」が「ポートＢ」に変わるのみで、図２に示したポートＡ用エラー補正機能部１３０と同一である。即ち、パリティチェック機能部２０１はメモリ用ＢＲＡＭ１０１のポートＢ領域１０１ｂからの出力信号の（リードデータ）のエラーの有無を検出する。ＥＣＣチェック機能部２０３は、ポートＢ用ＢＲＡＭ１２０からの出力信号（リードデータ）のエラーの有無を検出する。そして出力選択部２０２はポートＢ用ＢＲＡＭアクセス機能部１６０にデータを出力する。
【００４４】
図３は、図１〜２に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の、メモリ用ＢＲＡＭ１０１に対してリードアクセスがあった場合の動作について示すフローチャートである。
【００４５】
まず、ポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）からメモリ用ＢＲＡＭ１０１のポートＡ領域１０１ａ（ポートＢ領域１０１ｂ）に対してリード要求がなされる（ステップＳ１０１）。この時、ポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）は、メモリ用ＢＲＡＭ１０１とポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）に対して同時にリード要求を送信する。
【００４６】
このリード要求に対して、メモリ用ＢＲＡＭ１０１のポートＡ領域１０１ａ（ポートＢ領域１０１ｂ）からリードデータとパリティ値が読み出されてポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）に入力される（ステップＳ１０２）。そして、同じリード要求に対して、ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）からリードデータとＥＣＣビット値が読み出されてポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）に入力される（ステップＳ１０３）。
【００４７】
ポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）のパリティチェック機能部２０１が、メモリ用ＢＲＡＭ１０１から受け取ったリードデータとパリティ値に対してエラーチェックを行う（ステップＳ１０４）。これと並行して、ポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）のＥＣＣチェック機能部２０３が、ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）から受け取ったリードデータとＥＣＣビット値に対してエラーチェックと訂正を行う（ステップＳ１０５）。
【００４８】
メモリ用ＢＲＡＭ１０１でエラーが発生していなければ、ポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の出力選択部２０２が、メモリ用ＢＲＡＭ１０１から受け取ったリードデータとパリティ値をそのままポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）に出力する（ステップＳ１０６）。
【００４９】
メモリ用ＢＲＡＭ１０１でエラーが発生していて、かつ、ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）でエラーが発生していない場合は、ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）から受け取ったリードデータをポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）に出力する（ステップＳ１０７）。この時、出力するリードデータからパリティ値を算出して、これも該リードデータと同時に出力する。
【００５０】
メモリ用ＢＲＡＭ１０１でエラーが発生していて、かつ、ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）でもエラーが発生している場合、ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）から受け取ったリードデータをポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）に出力し、これと同時にリードエラー情報も出力して、メモリ用ＢＲＡＭ１０１とポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）とが同時にエラーが発生したことを通知する（ステップＳ１０８）。
【００５１】
図４は、図３に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の動作で、メモリ用ＢＲＡＭ１０１に対してのリードアクセスでエラーが発生していない時の動作（図３・ステップＳ１０６）について示す説明図である。
【００５２】
図５は、図３に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の動作で、メモリ用ＢＲＡＭ１０１に対してのリードアクセスでメモリ用ＢＲＡＭ１０１にエラーが発生した時の動作（図３・ステップＳ１０７）について示す説明図である。
【００５３】
図６は、図３に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の動作で、メモリ用ＢＲＡＭ１０１に対してのリードアクセスでメモリ用ＢＲＡＭ１０１とポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）の両方にエラーが発生した時の動作（図３・ステップＳ１０８）について示す説明図である。
【００５４】
図７は、図２に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）のパリティチェック機能部２０１の、図３のステップＳ１０４として示した動作の詳細について示すフローチャートである。
【００５５】
メモリ用ＢＲＡＭ１０１からリードデータとパリティ値を受け取る（ステップＳ１１１）と、パリティチェック機能部２０１内部のパリティチェック機能２０１ａが、リードデータ中の１（または０）の個数の偶奇をパリティ値と比較して、当該リードデータにエラーがあるか否かをチェックする（ステップＳ１１２）。
【００５６】
エラーがなければエラー状態＝０（ステップＳ１１３）、エラーがあればエラー状態＝１という信号を生成して（ステップＳ１１４）、リードデータとパリティ値にこのエラー状態を示す信号を付けて、これらを出力選択部２０２に出力する（ステップＳ１１５）。
【００５７】
図８は、図７に示したパリティチェック機能部２０１の動作で、パリティチェック（ステップＳ１１２）でエラーが検出されなかった場合（エラー状態＝０）の動作について示す説明図である。図９は、図７に示したパリティチェック機能部２０１の動作で、パリティチェック（ステップＳ１１２）でエラーが検出された場合（エラー状態＝１）の動作について示す説明図である。
【００５８】
図１０は、図２に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）のＥＣＣチェック機能部２０３の、図３のステップＳ１０５として示した動作の詳細について示すフローチャートである。
【００５９】
ポートＡ用ＢＲＡＭ１１０（ポートＢ用ＢＲＡＭ１２０）からリードデータとＥＣＣビット値を受け取る（ステップＳ１２１）と、ＥＣＣチェック機能部２０３内部のＥＣＣチェック機能２０３ａが、リードデータ中の各ビットの値とＥＣＣビット値とを比較して、当該リードデータに訂正不能なエラーがあるか否かをチェックする（ステップＳ１２２）。
【００６０】
エラーがない、またはエラーがあるが訂正可能な範囲であればエラー状態＝０（ステップＳ１２３）、訂正不能なエラーがあればエラー状態＝１という信号を生成して（ステップＳ１２４）、リードデータとＥＣＣビット値にこのエラー状態を示す信号を付けて、これらを出力選択部２０２に出力する（ステップＳ１２５）。
【００６１】
図１１は、図１０に示したＥＣＣチェック機能部２０３の動作で、ＥＣＣチェック（ステップＳ１２２）でエラーが検出されなかった場合（エラー状態＝０）の動作について示す説明図である。図１２は、図１０に示したＥＣＣチェック機能部２０３の動作で、ＥＣＣチェック（ステップＳ１２２）でエラーが検出された場合（エラー状態＝１）の動作について示す説明図である。
【００６２】
図１３は、図２に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の出力選択部２０２のさらに詳細な構成について示す説明図である。図１４は、図２に示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）の出力選択部２０２の、図３のステップＳ１０６〜１０８として示した動作の詳細について示すフローチャートである。
【００６３】
出力選択部２０２は、図１３に示すように、パリティチェック機能部２０１から受信したエラー状態について判断するパリティチェック状態判断機能２０２ａと、ＥＣＣチェック機能部２０３から受信したエラー状態について判断するＥＣＣチェック状態判断機能２０２ｂと、これら各々の判断結果から出力するデータを選択する出力選択機能２０２ｃとを備える。
【００６４】
パリティチェック機能部２０１とＥＣＣチェック機能部２０３から前述の各数値（信号）を受信した出力選択部２０２は（ステップＳ１３１）、まずパリティチェック機能部２０１から受信したエラー状態をパリティチェック状態判断機能２０２ａで判断する（ステップＳ１３２）。エラー状態＝０なら後述のステップＳ１３３、エラー状態＝１なら後述のステップＳ１３６に処理を進める。
【００６５】
パリティチェック機能部２０１から受信したエラー状態＝０である場合、出力選択機能２０２ｃがエラー状態＝０を示す信号を新たに生成し（ステップＳ１３３）、出力選択機能２０２ｃがパリティチェック機能部２０１から受信したリードデータからパリティ値を再計算する（ステップＳ１３４）。そして出力選択機能２０２ｃが、パリティチェック機能部２０１から受信したリードデータと、再計算されたパリティ値と、エラー状態＝０をポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）に出力して（ステップＳ１３５、図３のステップＳ１０６に該当）処理を終了する。
【００６６】
パリティチェック機能部２０１から受信したエラー状態＝１である場合、今度はＥＣＣチェック機能部２０３から受信したエラー状態をＥＣＣチェック状態判断機能２０２ｂで判断する（ステップＳ１３６）。エラー状態＝０なら出力選択機能２０２ｃがエラー状態＝０を示す信号を新たに生成し（ステップＳ１３７）、エラー状態＝１なら出力選択機能２０２ｃがエラー状態＝１を示す信号を新たに生成する（ステップＳ１３８）。
【００６７】
そして、出力選択機能２０２ｃが、ＥＣＣチェック機能部２０３から受信したリードデータからパリティ値を計算する。ここで、エラー状態＝１であれば、そのリードデータから実際に算出されるパリティ値とは逆の値（即ち、パリティチェックをした場合にエラーになる値）を、意図的にパリティ値とする（ステップＳ１３９）。
【００６８】
最後に出力選択機能２０２ｃが、ＥＣＣチェック機能部２０３から受信したリードデータと、再計算されたパリティ値と、エラー状態をポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）に出力して（ステップＳ１４０、図３のステップＳ１０７または１０８に該当）処理を終了する。
【００６９】
（第１の実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。
本実施形態に係るデータ補正方法は、外部から各々独立してデータの入出力が可能な２つの入出力ポート（ポートＡ１０２ａ，ポートＢ１０２ｂ）を備えたブロックメモリ装置１０にあって、このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭ（メモリ用ＢＲＡＭ１０１）と、第２のエラーチェック機能を持つ第２のブロックＲＡＭ（ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０）と、一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに同時に送信するアクセス機能部（ポートＡ用ＢＲＡＭアクセス機能部１５０およびポートＢ用ＢＲＡＭアクセス機能部１６０）とを有するものであり、データ読み出しの際に第１のブロックＲＡＭから読み出されたデータに対して、エラー補正機能部が第１のエラーチェック機能でエラーチェックを行い（図１３・ステップＳ１３２）、この第１のエラーチェック機能でエラーが検出されなければ、第１のブロックＲＡＭから読み出されたデータをエラー補正機能部がアクセス機能部に出力し（図１３・ステップＳ１３３〜１３５）、当該データをアクセス機能部が入出力ポートを介して外部に出力する（図３・ステップＳ１０６）。
【００７０】
また、第１のエラーチェック機能でエラーが検出された場合に、第２のブロックＲＡＭから読み出されたデータに対してエラー補正機能部が第２のエラーチェック機能でエラーチェックを行い（図１３・ステップＳ１３６）、第２のエラーチェック機能でエラーが検出されなければ、第２のブロックＲＡＭから読み出されたデータをエラー補正機能部がアクセス機能部に出力し（図１３・ステップＳ１３７，１３９，１４０）、第２のエラーチェック機能でエラーが検出されれば、リードエラーをエラー補正機能部がアクセス機能部に出力する（図１３・ステップＳ１３８〜１４０）。
【００７１】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行するプロセッサに実行させるようにしてもよい。本プログラムは、非一時的な記録媒体、例えば、ＤＶＤ、ＣＤ、フラッシュメモリ等に記録されてもよい。その場合、本プログラムは、記録媒体からコンピュータによって読み出され、実行される。
この動作により、本実施形態は以下のような効果を奏する。
【００７２】
前述したブロックメモリのハードウェア上の制約は、メモリ用ＢＲＡＭ１０１が単体で使用される場合のものである。本実施形態で追加されるポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０はこの制約とは特に関係ないので、メモリ用ＢＲＡＭ１０１がＴＤＰモードであってもＥＣＣ機能を使用することができる。
【００７３】
本実施形態は、この構成にすることによって、ＢＲＡＭの記憶内容を二重化することができるので、単にパリティ機能をＥＣＣ機能に置換するだけでは得られない信頼性の向上を得ることが可能となる。その際、外部装置（ＦＰＧＡの場合はロジックセルや乗算器など）に対しては、変更を一切必要とはせず、従来と同一のＢＲＡＭとして使用することが可能である。
【００７４】
（第２の実施形態）
本発明の第２の実施形態は、前述した第１の実施形態の構成に加えて、アクセス機能部（ポートＡ用ＢＲＡＭアクセス機能部１５０、ポートＢ用ＢＲＡＭアクセス機能部１６０）が一方の入出力ポートを介して外部から受信した書き込みデータを第１および第２のブロックＲＡＭに送信した際に、この書き込みデータを他方の入出力ポート側に備えられた第３のブロックＲＡＭにも送信するライトアクセス制御部（ライトアクセス制御部Ａ３７０とライトアクセス制御部Ｂ３８０）を、アクセス機能部に併設したものとした。
【００７５】
この構成によっても、第１の実施形態と同一の効果が得られることに加えて、さらに第３のブロックＲＡＭに記憶されたデータを、他方の入出力ポート（ポートＢ）側でエラーが発生した場合の補正に利用できるので、さらなる信頼性の向上を得ることが可能となる。
以下、これをより詳細に説明する。
【００７６】
図１５は、本発明の第２の実施形態に係るブロックメモリ装置３００の構成について示す説明図である。ブロックメモリ装置３００は、前述の第１の実施形態と同一のメモリ用ＢＲＡＭ１０１、ポートＡ用ＢＲＡＭアクセス機能部１５０、ポートＢ用ＢＲＡＭアクセス機能部１６０、ポートＡ用エラー補正機能部１３０、およびポートＢ用エラー補正機能部１４０に加えて、ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０は各々、別のポートＡ用ＢＲＡＭ３１０およびポートＢ用ＢＲＡＭ３２０に置換され、さらにポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０へのデータ書き込みを制御するライトアクセス制御部Ａ３７０とライトアクセス制御部Ｂ３８０を備えている。
【００７７】
ポートＡ用ＢＲＡＭ３１０はＡ面３１０ａおよびＢ面３１０ｂ、ポートＢ用ＢＲＡＭ３２０はＡ面３２０ａおよびＢ面３２０ｂといった記憶領域を備えている。これらの「Ａ面」「Ｂ面」は、各々メモリ用ＢＲＡＭ１０１のポートＡ領域１０１ａとポートＢ領域１０１ｂに対応し、同じアドレスに対して同じ値を保持するものである。
【００７８】
本実施形態では、メモリ用ＢＲＡＭ１０１、ポートＡ用ＢＲＡＭ３１０、ポートＢ用ＢＲＡＭ３２０は、いずれも同一の容量を持ち、動作中は同じアドレスに対して同じ値を保持する。ライトアクセス制御部Ａ３７０とライトアクセス制御部Ｂ３８０が、この「同じアドレスに対して同じ値を保持する」機能を担っている。
【００７９】
図１６は、図１５で示したライトアクセス制御部Ａ３７０（ライトアクセス制御部Ｂ３８０）の動作について示す説明図である。図１６には、ポートＡ用ＢＲＡＭアクセス機能部１５０からデータ書き込み要求（ライトアクセス）があった場合の動作を示しているので、ポートＢ用ＢＲＡＭアクセス機能部１６０については記載を省略している。
【００８０】
ライトアクセス制御部Ａ３７０およびライトアクセス制御部Ｂ３８０は、メモリ用ＢＲＡＭ１０１、ポートＡ用ＢＲＡＭ３１０、ポートＢ用ＢＲＡＭ３２０のいずれにおいても「同一アドレスが同一の値」となるように、ライトアクセスをこれらの各々に分配する。
【００８１】
まず、ポートＡ用ＢＲＡＭアクセス機能部１５０はメモリ用ＢＲＡＭ１０１とライトアクセス制御部Ａ３７０の双方にライトアクセスを送信する（ステップＳ２０１〜２０２、図３のステップＳ１０１）。メモリ用ＢＲＡＭ１０１では、このライトアクセスで送信されたデータをポートＡ領域１０１ａに書き込む（図３のステップＳ１０２）。
【００８２】
ライトアクセス制御部Ａ３７０は、このライトアクセスがポートＡ用ＢＲＡＭアクセス機能部１５０からのものだと認識して、これをポートＡ用ＢＲＡＭ３１０のＡ面３１０ａに転送すると共に（ステップＳ２０３、図３のステップＳ１０３）、ライトアクセス制御部Ｂ３８０にも同一のライトアクセスを転送する（ステップＳ２０４）。
【００８３】
ライトアクセス制御部Ｂ３８０は、このライトアクセスがライトアクセス制御部Ａ３７０からのものだと認識して、これをポートＢ用ＢＲＡＭ３２０のＡ面３２０ａに転送する（ステップＳ２０５）。ここで、ポートＡ用ＢＲＡＭアクセス機能部１５０から送信されたライトデータはパリティ方式であるので、ステップＳ２０３および２０４でライトアクセスを転送する際、ライトアクセス制御部Ａ３７０がライトデータから誤り訂正符号を作成して付加する。即ちパリティビットを誤り訂正符号に変換する処理を行う。
【００８４】
以上の動作で、ポートＡ用ＢＲＡＭアクセス機能部１５０からのライトアクセスに対して、メモリ用ＢＲＡＭ１０１のポートＡ領域１０１ａ、およびポートＡ用ＢＲＡＭ３１０とポートＢ用ＢＲＡＭ３２０の各々のＡ面３１０ａおよび３２０ａが、全て同じアドレスに対して同じ値が記憶される。ポートＢ用ＢＲＡＭアクセス機能部１６０からのライトアクセスについてもこれと同様に、メモリ用ＢＲＡＭ１０１のポートＢ領域１０１ｂ、およびポートＡ用ＢＲＡＭ３１０とポートＢ用ＢＲＡＭ３２０の各々のＢ面３１０ｂおよび３２０ｂが、全て同じアドレスに対して同じ値が記憶される。
【００８５】
リード要求があった場合の動作は、基本的に第１の実施形態と同一である。ただし、たとえばポートＡ用ＢＲＡＭアクセス機能部１５０からの要求の場合、メモリ用ＢＲＡＭ１０１とポートＡ用ＢＲＡＭ３１０から読み出されたデータの双方にエラーが検出された場合、エラー発生をリード要求元に通知して、ポートＡ用ＢＲＡＭ３１０からのリードデータを出力する。即ち図３のステップＳ１０８に記載した動作と同一である。図１６のステップＳ２０４〜２０５に示した動作でポートＢ用ＢＲＡＭ３２０に記憶されたデータは、ポートＢ側からのリード要求に対してエラーが発生した場合の、リードデータの補正に使用することができる。
【００８６】
（第３の実施形態）
本発明の第３の実施形態は、前述した第１の実施形態の構成に代えて、第１および第２のエラーチェック機能がいずれもパリティビットを利用したパリティ機能であるものとした。この構成によって、第１の実施形態と同一の効果を、より簡単な構成によって得る事が可能になる。
以下、これをより詳細に説明する。
【００８７】
図１７は、本発明の第３の実施形態に係るブロックメモリ装置４００の構成について示す説明図である。ブロックメモリ装置４００は、前述の第１の実施形態のブロックメモリ装置１０の構成で、ポートＡ用ＢＲＡＭ１１０およびポートＢ用ＢＲＡＭ１２０をデータ補正用ＢＲＡＭ４１０に置換し、またポートＡ用エラー補正機能部１３０とポートＢ用エラー補正機能部１４０とを各々別のポートＡ用エラー補正機能部４３０とポートＢ用エラー補正機能部４４０に置換したものである。
【００８８】
データ補正用ＢＲＡＭ４１０は、メモリ用ＢＲＡＭ１０１と同一のパリティ検出機能を備え、またポートＡ側およびポートＢ側のそれぞれで使用される記憶領域であるポートＡ領域４１０ａとポートＢ領域４１０ｂとに分かれる。即ちメモリ用ＢＲＡＭ１０１と同容量かつ同機能のＢＲＡＭを使用することが可能である。
【００８９】
ポートＡ用エラー補正機能部４３０（ポートＢ用エラー補正機能部４４０）の動作は、図２〜１４で示したポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）についての説明で、「ＥＣＣ」を全て「パリティ」に置き換えるだけでほとんど同一である。
【００９０】
この第３の実施形態では、第１の実施形態よりも簡単な構成で、ほぼ同一の効果を得ることが可能となる。ＥＣＣチェックでは訂正可能な範囲のエラーの訂正を行っていたが、パリティチェックではエラーの訂正は行わないが、実質上それで動作の問題を起こす事はほとんどない。
【００９１】
（第４の実施形態）
本発明の第４の実施形態は、前述した第１の実施形態の構成に加えて、第１のエラーチェック機能でエラーが検出され、かつ第２のエラーチェック機能でエラーが検出されなかった場合に、第１のブロックＲＡＭに記憶されたデータを訂正するＢＲＡＭ補正部（メモリ用ＢＲＡＭ補正部５１０および５２０）をこの第１のブロックＲＡＭに併設したものとした。
この構成によっても、第１の実施形態と同一の効果が得られることに加えて、さらにエラーとなったデータを積極的に訂正することが可能となるので、さらなる信頼性の向上を得ることが可能となる。
以下、これをより詳細に説明する。
【００９２】
図１８は、本発明の第４の実施形態に係るブロックメモリ装置５００の構成について示す説明図である。ブロックメモリ装置５００は、前述の第２の実施形態のブロックメモリ装置３００の構成で、メモリ用ＢＲＡＭ１０１とポートＡ用ＢＲＡＭアクセス機能部１５０との間にメモリ用ＢＲＡＭ補正部５１０、またメモリ用ＢＲＡＭ１０１とポートＢ用ＢＲＡＭアクセス機能部１６０との間にメモリ用ＢＲＡＭ補正部５２０を挿入し、ポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）からの出力がこのメモリ用ＢＲＡＭ補正部５１０（５２０）にも同時に入力される構成とした以外は、全て同一である。
【００９３】
このメモリ用ＢＲＡＭ補正部５１０（５２０）は、ポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）が、メモリ用ＢＲＡＭ１０１のリードデータにエラーを検出し、かつポートＡ用ＢＲＡＭ１１０のリードデータにエラーを検出しない場合（図１４のフローチャートのステップＳ１３７に該当）に動作する。
【００９４】
この場合に、ポートＡ用エラー補正機能部１３０（ポートＢ用エラー補正機能部１４０）がポートＡ用ＢＲＡＭアクセス機能部１５０（ポートＢ用ＢＲＡＭアクセス機能部１６０）に出力するリードデータと同一のリードデータが、メモリ用ＢＲＡＭ補正部５１０（５２０）にも出力される。この出力を受けたメモリ用ＢＲＡＭ補正部５１０（５２０）は、このリードデータの値をメモリ用ＢＲＡＭ１０１に書き込み、メモリ用ＢＲＡＭ１０１に記憶されている（エラーとなった）データを訂正する。
【００９５】
第１の実施形態のブロックメモリ装置１０や、第３の実施形態のブロックメモリ装置４００に、このメモリ用ＢＲＡＭ補正部５１０（５２０）を挿入した構成とすることももちろん可能である。この構成とすることにより、エラーの発生の原因となったメモリ用ＢＲＡＭ１０１の記憶データを積極的に訂正することができるようになり、さらなる信頼性の向上となりうる。
【００９６】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【００９７】
上述した実施形態について、その新規な技術内容の要点をまとめると、以下のようになる。なお、上記実施形態の一部または全部は、新規な技術として以下のようにまとめられるが、本発明は必ずしもこれに限定されるものではない。
【００９８】
（付記１）  外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置であって、
第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の前記入出力ポートを介して外部から受信した書き込みデータを前記第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有すると共に、
データ読み出しの際に前記第１のブロックＲＡＭから読み出されたデータに対して前記第１のエラーチェック機能でエラーチェックを行い、この前記第１のエラーチェック機能でエラーが検出されなければ前記第１のブロックＲＡＭから読み出されたデータを前記アクセス機能部および前記入出力ポートを介して外部に出力するエラー補正機能部を備えることを特徴とするブロックメモリ装置。
【００９９】
（付記２）  前記エラー補正機能部は、
前記第１のエラーチェック機能でエラーが検出された場合に、前記第２のブロックＲＡＭから読み出されたデータに対して前記第２のエラーチェック機能でエラーチェックを行い、前記第２のエラーチェック機能でエラーが検出されなければ前記第２のブロックＲＡＭから読み出されたデータを前記アクセス機能部および前記入出力ポートを介して外部に出力する機能を有することを特徴とする、付記１に記載のブロックメモリ装置。
【０１００】
（付記３）  前記エラー補正機能部は、
前記第２のエラーチェック機能でエラーが検出されればリードエラーを前記アクセス機能部および前記入出力ポートを介して外部に出力する機能を有することを特徴とする、付記２に記載のブロックメモリ装置。
【０１０１】
（付記４）前記アクセス機能部が一方の前記入出力ポートを介して外部から受信した前記書き込みデータを前記第１および第２のブロックＲＡＭに送信した際に、この書き込みデータを他方の前記入出力ポート側に備えられた第３のブロックＲＡＭにも送信するライトアクセス制御部を、前記アクセス機能部に併設したことを特徴とする、付記１に記載のブロックメモリ装置。
【０１０２】
（付記５）  前記第１のエラーチェック機能でエラーが検出され且つ前記第２のエラーチェック機能でエラーが検出されなかった場合に、前記第１のブロックＲＡＭに記憶されたデータを訂正するＢＲＡＭ補正部を、当該第１のブロックＲＡＭに併設したことを特徴とする、付記２に記載のブロックメモリ装置。
【０１０３】
（付記６）  前記第１のエラーチェック機能がパリティビットを利用したパリティ機能であり、前記第２のエラーチェック機能が誤り訂正符号を利用したＥＣＣ（Error Check and Correct、誤りエラー検出訂正）機能であることを特徴とする、付記１に記載のブロックメモリ装置。
【０１０４】
（付記７）  前記第１および第２のエラーチェック機能がいずれもパリティビットを利用したパリティ機能であることを特徴とする、付記１に記載のブロックメモリ装置。
【０１０５】
（付記８）  外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置にあって、
このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の前記入出力ポートを介して外部から受信した書き込みデータを前記第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有するものであり、
データ読み出しの際に前記第１のブロックＲＡＭから読み出されたデータに対して、エラー補正機能部が前記第１のエラーチェック機能でエラーチェックを行い、
この前記第１のエラーチェック機能でエラーが検出されなければ、前記第１のブロックＲＡＭから読み出されたデータを前記エラー補正機能部が前記アクセス機能部に出力し、
当該データを前記アクセス機能部が前記入出力ポートを介して外部に出力する
ことを特徴とするデータ補正方法。
【０１０６】
（付記９）  前記第１のエラーチェック機能でエラーが検出された場合に、前記第２のブロックＲＡＭから読み出されたデータに対して前記エラー補正機能部が前記第２のエラーチェック機能でエラーチェックを行い、
前記第２のエラーチェック機能でエラーが検出されなければ、前記第２のブロックＲＡＭから読み出されたデータを前記エラー補正機能部が前記アクセス機能部に出力し、
前記第２のエラーチェック機能でエラーが検出されれば、リードエラーを前記エラー補正機能部が前記アクセス機能部に出力する
ことを特徴とする、付記８に記載のデータ補正方法。
【０１０７】
（付記１０）  前記第１のエラーチェック機能がパリティビットを利用したパリティ機能であり、前記第２のエラーチェック機能が誤り訂正符号を利用したＥＣＣ（Error Check and Correct、誤りエラー検出訂正）機能であることを特徴とする、付記８に記載のデータ補正方法。
【０１０８】
（付記１１）  外部から各々独立してデータの入出力が可能な２つの入出力ポートを備えたブロックメモリ装置にあって、
このブロックメモリ装置が、第１のエラーチェック機能を有する第１のブロックＲＡＭと、第２のエラーチェック機能を持つ第２のブロックＲＡＭと、一方の前記入出力ポートを介して外部から受信した書き込みデータを前記第１および第２のブロックＲＡＭに同時に送信するアクセス機能部とを有するものであり、
前記ブロックメモリ装置が備えるプロセッサに、
データ読み出しの際に前記第１のブロックＲＡＭから読み出されたデータに対して、前記第１のエラーチェック機能でエラーチェックを行う手順、
この前記第１のエラーチェック機能でエラーが検出されなければ、前記第１のブロックＲＡＭから読み出されたデータを前記アクセス機能部に出力する手順、
および当該データを前記アクセス機能部および前記入出力ポートを介して外部に出力する手順
を実行させることを特徴とするデータ補正プログラム。
【０１０９】
（付記１２）  前記第１のエラーチェック機能でエラーが検出された場合に、前記第２のブロックＲＡＭから読み出されたデータに対して前記第２のエラーチェック機能でエラーチェックを行う手順、
前記第２のエラーチェック機能でエラーが検出されなければ、前記第２のブロックＲＡＭから読み出されたデータを前記アクセス機能部に出力する手順、
前記第２のエラーチェック機能でエラーが検出されれば、リードエラーを前記アクセス機能部に出力する手順
をさらに実行させることを特徴とする、付記１１に記載のデータ補正プログラム。
【０１１０】
（付記１３）  前記第１のエラーチェック機能がパリティビットを利用したパリティ機能であり、前記第２のエラーチェック機能が誤り訂正符号を利用したＥＣＣ（Error Check and Correct、誤りエラー検出訂正）機能であることを特徴とする、付記１１に記載のデータ補正プログラム。
【産業上の利用可能性】
【０１１１】
最初に述べた通り、ビット化けは半導体メモリにおいて不可避な現象であるので、半導体メモリを利用する全てのデバイスにおいて本発明は幅広く適用可能である。本発明はその中でも特に、ＦＰＧＡやＰＬＤ（Programmable Logic Device）、およびそれらを利用するデバイスにおいて優れた効果を発揮しうるものである。
【０１１２】
また、前述した非特許文献２にも記載されている、Ｃ言語などで書かれたコンピュータプログラムやＳＱＬで記述されたデータ処理内容などをハードウェア記述言語に変換してＦＰＧＡで動作させるという用途においても、それらの処理を高速かつ高信頼性で実行することが可能となるので、本発明の適用によって優れた効果を得られる用途であるといえる。
【符号の説明】
【０１１３】
１０、３００、４００、５００  ブロックメモリ装置
１０１  メモリ用ＢＲＡＭ
１０１ａ  ポートＡ領域
１０１ｂ  ポートＢ領域
１０２ａ  ポートＡ
１０２ｂ  ポートＢ
１１０、３１０  ポートＡ用ＢＲＡＭ
１２０、３２０  ポートＢ用ＢＲＡＭ
１３０、４３０  ポートＡ用エラー補正機能部
１４０、４４０  ポートＢ用エラー補正機能部
１５０  ポートＡ用ＢＲＡＭアクセス機能部
１６０  ポートＢ用ＢＲＡＭアクセス機能部
１７０、１８０  ライトアクセス制御部
２０１  パリティチェック機能部
２０１ａ  パリティチェック機能
２０２  出力選択部
２０２ａ  パリティチェック状態判断機能
２０２ｂ  ＥＣＣチェック状態判断機能
２０２ｃ  出力選択機能
２０３  ＥＣＣチェック機能部
２０３ａ  ＥＣＣチェック機能
３１０ａ、３２０ａ  Ａ面
３１０ｂ、３２０ｂ  Ｂ面
３７０  ライトアクセス制御部Ａ
３８０  ライトアクセス制御部Ｂ
４１０  データ補正用ＢＲＡＭ
５１０、５２０  メモリ用ＢＲＡＭ補正部
【図１】
2014096021.tif 000003
【図２】
2014096021.tif 000004
【図３】
2014096021.tif 000005
【図４】
2014096021.tif 000006
【図５】
2014096021.tif 000007
【図６】
2014096021.tif 000008
【図７】
2014096021.tif 000009
【図８】
2014096021.tif 000010
【図９】
2014096021.tif 000011
【図１０】
2014096021.tif 000012
【図１１】
2014096021.tif 000013
【図１２】
2014096021.tif 000014
【図１３】
2014096021.tif 000015
【図１４】
2014096021.tif 000016
【図１５】
2014096021.tif 000017
【図１６】
2014096021.tif 000018
【図１７】
2014096021.tif 000019
【図１８】
2014096021.tif 000020
【図１９】
2014096021.tif 000021