(57)【要約】【課題】バッファメモリにおいて、メモリ幅を変えずにエラー検出を可能なエラー検出装置を提供する。【解決手段】所定の長さの入力データを一時的に記憶し、前記所定の長さの出力データを出力する記憶装置により前記入力データを転送する際のエラーを検出するエラー検出装置であって、前記所定の長さの保持データを記憶する記憶部と、前記保持データの初期値を前記記憶部に設定し、前記入力データと前記保持データとの第１の排他的論理和を算出し、前記出力データと前記第１の排他的論理和との第２の排他的論理和を算出する論理制御回路と、前記第２の排他的論理和が前記初期値と一致しない場合に、エラーが発生していると判別する判別回路と、を有することを特徴とするエラー検出装置を提供する。【選択図】図１
2014086924.tif 000002
【特許請求の範囲】
【請求項１】
所定の長さの入力データを一時的に記憶し、前記所定の長さの出力データを出力する記憶装置により前記入力データを転送する際のエラーを検出するエラー検出装置であって、
前記所定の長さの保持データを記憶する記憶部と、
前記保持データの初期値を前記記憶部に設定し、前記入力データと前記保持データとの第１の排他的論理和を算出し、前記出力データと前記第１の排他的論理和との第２の排他的論理和を算出する論理制御回路と、
前記第２の排他的論理和が前記初期値と一致しない場合に、エラーが発生していると判別する判別回路と、
を有することを特徴とするエラー検出装置。
【請求項２】
前記記憶装置は、対象データを前記所定の長さに順次分割した複数の前記入力データを分割された順番で一時的に記憶し、前記複数の入力データに対応した複数の前記出力データを前記順番で出力し、
前記論理制御回路は、算出された前記第１の排他的論理和と次の前記入力データとの第３の排他的論理和を算出して、前記第１の排他的論理和を前記第３の排他的論理和に更新することを最後に記憶される前記入力データまで前記順番で繰り返し、前記第１の排他的論理和と最初の出力データに基づき算出された前記第２の排他的論理和と、次の出力データとの第４の排他的論理和を算出し、前記第２の排他的論理和を前記第４の排他的論理和に更新することを、少なくとも最後から２番目に出力された前記出力データまで前記順番で繰り返し、
前記判別回路は、最後に出力される前記出力データに基づく前記第２の排他論理和が前記初期値と一致しない場合にエラーが発生していると判別することを特徴とする請求項１に記載のエラー検出装置。
【請求項３】
請求項１または請求項２に記載のエラー検出装置と、
前記出力データを送信する送信回路、
をさらに有し、
前記判別回路は、エラー有りと判別すると、前記送信回路への前記出力データの書込を停止することを特徴とする送信装置。
【請求項４】
前記記憶装置から出力された出力データと、前記記憶部に保持された更新前の前記第２の排他的論理和とを比較する比較回路、
をさらに有し、
前記判別回路は、最後に出力された前記出力データと、最後から２番目に出力された前記出力データに基づく前記第２の排他的論理和とが前記初期値に応じた関係にない場合、前記最後の出力データの書込を抑止することを特徴とする請求項３に記載の送信装置。
【請求項５】
前記対象データを保持する主記憶部と、
前記主記憶部の動作を制御する中央演算処理装置と、
をさらに有し、
前記対象データは、前記中央演算処理装置により、前記主記憶部から読み出され、前記記憶装置に前記所定の長さ毎に記憶されることを特徴とする請求項３または請求項４に記載の送信装置。
【請求項６】
前記中央演算処理装置は、前記主記憶部において前記所定の長さの初期値を設定し、前記記憶装置に最初に記憶される前記入力データと前記初期値との第１の排他的論理和を算出し、算出された前記第１の排他的論理和と、次に記憶される前記入力データとの第３の排他的論理和を算出し、前記第１の排他的論理和を算出された前記第３の排他的論理和に更新することを、最後に記憶される前記入力データまで繰り返し、更新された結果の前記第１の排他的論理和を前記記憶部に書き込み、
前記論理制御回路は、前記記憶部に書き込まれた前記第１の排他的論理和に基づき、前記第２の排他的論理和を算出する
ことを特徴とする請求項５に記載の送信装置。
【請求項７】
請求項１または請求項２に記載のエラー検出装置と、
前記対象データを受信する受信回路と、
前記記憶装置により転送された前記対象データを保持する主記憶部と、
前記主記憶部の動作を制御する中央演算処理装置と、
をさらに有し、
前記中央演算処理装置は、前記判別回路としての処理を実行することを特徴とする受信装置。
【請求項８】
請求項１または請求項２に記載のエラー検出装置と、
前記対象データを受信する受信回路と、
前記記憶装置により転送された前記対象データを保持する主記憶部と、
前記主記憶部の動作を制御する中央演算処理装置と、
をさらに有し、
前記論理制御回路は、前記第１の排他的論理和を算出及び更新する処理を行い、
前記中央演算処理装置は、前記第２の排他的論理和を算出及び更新する処理、並びに前記判別回路としての処理を行うことを特徴とする受信装置。
【請求項９】
所定の長さの入力データを一時的に記憶し、前記所定の長さの出力データを出力する記憶装置により前記入力データを転送する際のエラーを検出するエラー検出方法であって、
前記所定の長さの保持データを記憶部に記憶する記憶処理と、
前記保持データの初期値を前記記憶部に設定し、前記入力データと前記保持データとの第１の排他的論理和を算出し、前記出力データと前記第１の排他的論理和との第２の排他的論理和を算出する論理制御処理と、
前記第２の排他的論理和が前記初期値と一致しない場合に、エラーが発生していると判別する判別処理と、を実行することを特徴とするエラー検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エラー検出装置及びエラー検出方法に関する。
【背景技術】
【０００２】
メモリに記録された「０」または「１」のデータが、回路が正常であっても放射線の影響などで自然にデータ反転する、ソフトエラーという現象が知られている。信頼性が要求されるサーバなどでは、メモリのソフトエラーの対策として、パリティビットやＥｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ（ＥＣＣ）を付加することなどが行われている。
【０００３】
パリティビットは、通常のメモリに対し、たとえば８ビット毎に１ビットなどの割合で追加される冗長ビットである。メモリへの書き込み時に、「１」の数が奇数または偶数となるようにパリティビットに「０」または「１」が書込まれ、読み出し時に通常のメモリとパリティビットの「１」の数が奇数、偶数のいずれであるかにより、メモリの正当性が確認される。パリティエラーが検出された場合は、プログラムやデータの正当性が保証されないため、システムダウンし、予備系に切替られる。
【０００４】
ＥＣＣは、例えば、３２ビット幅のメモリの場合、７ビットの冗長ビットである。ＥＣＣを用いるエラー検出では、メモリへの書込み時にＥＣＣが書き込まれ、読み出し時には、１ビットエラーであれば通常のメモリデータとＥＣＣのデータにより自動訂正され、２ビットエラーの検出が行われるものである。ＥＣＣの場合は、１ビットエラーはデータが正しく訂正されて読み出せるので、より信頼性が向上する。２ビットエラーの場合はパリティエラー同様、システムダウンし、予備系に切り替えるなどの対応を行う。
【０００５】
一方、バッファメモリへのデータの読み書き時に発生したソフトエラーに起因する不都合を回避するため、以下のような方法が知られている。すなわち、バッファメモリ装置は、データをバッファ内の領域に書込み、当該バッファ内の領域からデータを読み出す際に、バッファ内の領域を順次指定する。その指定が、指定されるべきではない領域の指定である誤指定であった場合には、当該誤指定より後の指定に基づいて、当該誤指定により指定されるべきであった領域を検出する方法である。（例えば、特許文献１参照）
分布Ｅｘｃｌｕｓｉｖｅ  ＯＲ（ＸＯＲ）デバイスを用いたエラー検出方法も知られている。分布ＸＯＲデバイスは、少なくとも二つのデータブロックをインターリーブ化した態様で格納するデータバッファを好適に含む。これらデータブロックはデータワードを含み、各データブロックのある特定のデータワードがＣｙｃｌｉｃ Ｒｅｄｕｎｄａｎｃｙ Ｃｈｅｃｋ（ＣＲＣ）ビットを含む。この方法では、ＣＲＣビットを用いてエラーを検出する。（例えば、特許文献２参照）
【０００６】
また、Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＳＲＡＭ）に回路構成の情報を保持させるＦｉｅｌｄ  Ｐｒｏｇｒａｍａｂｌｅ  Ｇａｔｅ  Ａｒｒｅｙ（ＦＰＧＡ）において、ＳＲＡＭのソフトエラーを修復する方法が知られている。このエラー修復方法では、ＦＰＧＡに論理回路を定義するための属性情報が読み出され予め用意しておいた期待値と比較される。これにより、ＦＰＧＡに書き込まれている属性情報にソフトエラーに起因する誤りや欠落がないかを判定することができる。ソフトエラーが検出された場合、期待値をＦＰＧＡに書き込み、問題のあった属性情報を上書きすることで、問題のあったＦＰＧＡの回路構成を定義し直し、ソフトエラーの影響を修復する。（例えば、特許文献３参照）
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−１１３４０４号公報
【特許文献２】特表２００１−５１８２１１号公報
【特許文献３】特開２００８−１５９６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記のようなメモリのビット化け対策は、メインメモリやＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）内部のキャッシュなど重要なメモリに対して付加される。一方、シリアル通信などのバッファ用のメモリについては、対策を設けることが困難である場合が多い。例えば、冗長ビットや属性情報を付加する方法では、冗長ビット等を付加することによるコストが問題となる場合がある。また、ＦＰＧＡなど予めメモリ内蔵の素子の内部メモリをバッファとして利用する場合には、もともと冗長ビットを追加できない場合もある。よって、上記のような従来の方法では、バッファ用のメモリについて、メモリ幅を変えずに、ビット化けなどのエラーを検出することはできない。
【０００９】
しかしながら、通信のバッファ用メモリもソフトエラーが発生する可能性は当然ある。通信相手への送信データや相手からの受信データに金額情報などがあった場合、１ビット化けが、高額の桁、たとえば１００万円の桁で発生すると、１００万円単位の間違いが発生し、その間違いに気付かずに処理されてしまうという危険性がある。
【００１０】
上記課題に鑑み、本発明では、バッファ用のメモリにおいて、メモリ幅を変えずにメモリのソフトエラーを検出することにより、信頼性が高い通信を実現することを目的としている。
【課題を解決するための手段】
【００１１】
本発明の一つの態様によれば、所定の長さの入力データを一時的に記憶し、前記所定の長さの出力データを出力する記憶装置により前記入力データを転送する際のエラーを検出するエラー検出装置であって、前記所定の長さの保持データを記憶する記憶部と、前記保持データの初期値を前記記憶部に設定し、前記入力データと前記保持データとの第１の排他的論理和を算出し、前記出力データと前記第１の排他的論理和との第２の排他的論理和を算出する論理制御回路と、前記第２の排他的論理和が前記初期値と一致しない場合に、エラーが発生していると判別する判別回路と、を有するエラー検出装置が提供される。
【００１２】
別の態様によれば、上記エラー検出装置と、前記出力データを送信する送信回路と、を有し、前記判別回路は、エラー有りと判別すると、前記送信回路への前記出力データの書込を停止する送信装置が提供される。
【００１３】
また、別の態様によれば、上記エラー検出装置と、前記対象データを受信する受信回路と、前記記憶装置により転送された前記対象データを保持する主記憶部と、前記主記憶部の動作を制御する中央演算処理装置と、をさらに有し、前記中央演算処理装置は、前記判別回路としての処理を実行する受信装置が提供される。
【００１４】
さらに、別の態様によれば、所定の長さの入力データを一時的に記憶し、前記所定の長さの出力データを出力する記憶装置により前記入力データを転送する際のエラーを検出するエラー検出方法であって、前記所定の長さの保持データを記憶部に記憶する記憶処理と、前記保持データの初期値を前記記憶部に設定し、前記入力データと前記保持データとの第１の排他的論理和を算出し、前記出力データと前記第１の排他的論理和との第２の排他的論理和を算出する論理制御処理と、前記第２の排他的論理和が前記初期値と一致しない場合に、エラーが発生していると判別する判別処理と、を実行するエラー検出方法が提供される。
【発明の効果】
【００１５】
本発明によるエラー検出装置及びエラー検出方法によれば、バッファメモリのメモリ幅を変えることなく、エラー検出を行なうことができる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態による送信装置の構成を示すブロック図である。
【図２】第１の実施の形態によるメインメモリから送信用バッファメモリへのデータの書込について説明する図である。
【図３】第１の実施の形態による送信用バッファメモリへのデータ書込み時のＦＰＧＡの動作を説明するタイミングチャートである。
【図４】第１の実施の形態による送信用バッファメモリからのデータ読出し時のＦＰＧＡの動作を説明するタイミングチャートである。
【図５】第１の実施の形態による送信データを送信用バッファメモリに格納する場合のＣＰＵの動作を示すフローチャートである。
【図６】第１の実施の形態による送信データを送信回路に格納する場合のＣＰＵの動作を示すフローチャートである。
【図７】第２の実施の形態による受信装置の構成を示すブロック図である。
【図８】第２の実施の形態による受信データを受信用バッファメモリに書き込む際のＦＰＧＡの動作を説明するタイミングチャートである。
【図９】第２の実施の形態による受信用バッファメモリから受信データを読み出す際のＦＰＧＡの動作を説明するタイミングチャートである。
【図１０】第２の実施の形態によるＣＰＵによる受信用ＤＭＡコントローラの起動処理を示すフローチャートである。
【図１１】第２の実施の形態による受信データをメインメモリに格納する場合のＣＰＵの動作を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら、第１の実施の形態によるエラー検出装置について説明する。第１の実施の形態においては、送信用のバッファメモリに対するエラー検出装置を例にして説明する。
【００１８】
図１は、第１の実施の形態による送信装置の構成を示すブロック図である。図１に示すように、送信装置１は、ＣＰＵ３、メインメモリ５、ＦＰＧＡ１０を有している。ＣＰＵ３は、送信装置１の動作を制御する中央演算処理装置である。メインメモリ５は、送信装置１の動作に必要な各種データを格納する記憶装置である。ＦＰＧＡ１０は、送信を制御する送信制御回路である。ＣＰＵ３、メインメモリ５、ＦＰＧＡ１０は、いずれもデータバス７に接続されており、ＣＰＵ３の管理の下で各種のデータを相互に授受することができる。
【００１９】
ＦＰＧＡ１０は、送信用バッファメモリ１２、送信用Ｅｘｃｌｕｓｉｖｅ  ＯＲ（ＥＯＲ）レジスタ１４、送信用ＥＯＲ制御回路１６、送信用Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＤＭＡ）コントローラ１８、比較回路２４、送信回路２６を有している。これらの構成要素は、いずれもデータバス７に接続されており、各種のデータを相互に授受することができる。
【００２０】
送信用バッファメモリ１２は、ＣＰＵ３がメインメモリ５から読み出した送信データを一時的に記憶する記憶装置である。このとき、送信用バッファメモリ１２は、送信データを所定の長さに分割した状態の入力データとして記憶し、出力する際には所定の長さの出力データとして出力する。送信用ＥＯＲレジスタ１４は、送信用バッファメモリ１２と同一の長さのデータを記憶する記憶部である。送信用ＥＯＲ制御回路１６は、送信用バッファメモリ１２の入力データまたは出力データと送信用ＥＯＲレジスタ１４に保持されている保持データとのＥＯＲ演算を実行させる演算制御回路である。
【００２１】
送信用ＤＭＡコントローラ１８は、転送カウンタ２０、書込制御回路２２を有しており、送信用バッファメモリ１２から送信データを読出し、送信回路２６に書き込む動作を制御する。すなわち、送信用ＤＭＡコントローラ１８は、送信用バッファメモリ１２へリード信号を出力して、送信データに対応する出力データを読み出す。また、送信用ＤＭＡコントローラ１８は、送信回路２６へライト信号を出力して、送信用バッファメモリ１２から読み出した出力データを送信回路２６へ転送する。転送カウンタ２０は、送信回路２６へ出力データを転送する際のデータ量をカウントするカウンタである。書込制御回路２２は、転送カウンタ２０の値及び後述する比較回路２４からの比較結果に基づき、送信回路２６への出力データの書込を制御する。
【００２２】
比較回路２４は、各出力データに基づくＥＯＲ演算を実行した際の送信用ＥＯＲレジスタ１４の保持データと、各出力データとを比較し、比較結果を書込制御回路２２へ出力する。書込制御回路２２は、転送カウンタ２０のカウンタ値と比較回路２４の比較結果とに基づき、送信用バッファメモリ１２の入力データと出力データとが異なっていることを示している場合には、送信回路２６への送信データの書込を行わないように制御する。送信回路２６は、書き込まれた送信データ１１０を外部へ送信する。
【００２３】
図２は、メインメモリ５から送信用バッファメモリ１２へのデータの書込について説明する図である。図２に示すように、メインメモリ５に送信データ１００が記憶されている。送信データ１００は、例えば１バイトなど、所定のデータ長の「Ｄ０」で表される送信データ１００−０、・・・、「Ｄｎ」で表される送信データ１００−ｎ等を含んでいる。ＣＰＵ３は、メインメモリ５から所定のデータ長の送信データ１００−０、１００−１、・・・、１００−ｎ毎にデータを送信用バッファメモリ１２に転送して書き込む。すなわち、送信データ１００−０、１００−１、・・・、１００−ｎが送信用バッファメモリ１２へ転送され、送信用バッファメモリ１２には、送信データ１１０が記憶される。送信データ１１０は、送信データ１００−１、１００−２、・・・、１００−ｎに対応する、所定の長さの送信データ１１０−１、・・・、１１０−ｎが含まれる。なお、正常に書込みが行われ、その後のビット化けなどがなければ、送信データ１１０は送信データ１００と同一のものであるが、ここでは異なる名称として記載している。
【００２４】
図３は、送信用バッファメモリ１２へのデータ書込み時のＦＰＧＡ１０の動作を説明するタイミングチャートである。図３は、バッファライト信号１２０、レジスタ更新信号１２２、送信データ１００、レジスタライト信号１２６、レジスタデータ１２８を示している。
【００２５】
バッファライト信号１２０は、送信用バッファメモリ１２に送信データ１００を書き込むタイミングを示す信号であり、図３の例では負論理となっている。バッファライト信号１２０は、ＣＰＵ３から出力され、送信用バッファメモリ１２、送信用ＥＯＲ制御回路１６に入力される。
【００２６】
レジスタ更新信号１２２は、送信用ＥＯＲレジスタ１４のレジスタ値を更新するタイミングを示す信号である。レジスタ更新信号１２２は、送信用ＥＯＲ制御回路１６から出力され、送信用ＥＯＲレジスタ１４に入力される。
【００２７】
送信データ１００は、メインメモリ５から読み出され、送信用バッファメモリ１２に書き込まれるデータである。送信データ１００は、送信データ１００−０、１００−１、・・・、１００−ｎを含んでいる。レジスタライト信号１２６は、ＣＰＵ３から出力され、送信用ＥＯＲレジスタ１４への書込みを開始するための信号であり、図３の例では、負論理となっている。
【００２８】
レジスタデータ１２８は、送信用ＥＯＲレジスタ１４に保持されているデータであり、送信用ＥＯＲレジスタ１４のデータと、送信データ１００とを順次ＥＯＲ演算した結果により逐次更新される。例えば、レジスタデータ１２８の「０Ｘ００」は、送信用ＥＯＲレジスタ１４の初期値であり、レジスタライト信号１２６に応じてＣＰＵ３により設定される。レジスタデータ１２８の「ＥＯＲ０」は、レジスタデータ１２８の「０Ｘ００」と送信データ１００の「Ｄ０」とのＥＯＲの結果である。レジスタデータ１２８の「ＥＯＲ１」は、レジスタデータ１２８の「ＥＯＲ０」と送信データ１００の「Ｄ１」とのＥＯＲの結果である。同様に順次ＥＯＲ演算が行われ、レジスタデータ１２８の「ＥＯＲｎ」は、レジスタデータ１２８の「ＥＯＲｎ―１」と送信データ１００の「Ｄｎ」とのＥＯＲの結果である。このとき、送信データ１００は、例えばＥＣＣなどでデータの正確性が保証されたデータであるため、送信用ＥＯＲレジスタ１４に更新されるデータも正しいことが保証される。
【００２９】
図４は、送信用バッファメモリ１２からのデータ読出し時のＦＰＧＡ１０の動作を説明するタイミングチャートである。図４は、送信ＤＭＡ要求１３０、バッファリード信号１３２、レジスタ更新信号１３４、バッファデータ１３６、転送カウンタ値１３８、送信回路ライト信号１４０、レジスタデータ１４２、比較結果１４４、書込抑止信号１４６を示している。
【００３０】
送信ＤＭＡ要求１３０は、送信回路２６が送信用ＤＭＡコントローラ１８へ、送信データを要求するタイミングを示す信号であり、図４の例では負論理となっている。バッファリード信号１３２は、送信用ＤＭＡコントローラ１８が送信用バッファメモリ１２から送信データを読み込むタイミングを示す信号であり、図４の例では負論理となっている。バッファリード信号１３２は、送信用ＤＭＡコントローラ１８から出力され、送信用ＥＯＲ制御回路１６及び送信用バッファメモリ１２に入力されている。レジスタ更新信号１３４は、送信用ＥＯＲレジスタ１４を更新するタイミングを示す信号であり、送信用ＥＯＲ制御回路１６から出力される。
【００３１】
バッファデータ１３６は、送信用バッファメモリ１２から読み出されたデータであり、バッファデータ１３６−０、１３６−１、・・・、１３６−ｎを含んでいる。転送カウンタ値１３８は、送信用バッファメモリ１２から読み出されて送信回路２６へ転送されるバッファデータ１３６のうちの未転送データの数（例えば、バイト数）を示す数である。送信回路ライト信号１４０は、送信回路２６へのデータ書込みを制御する信号であり、書込制御回路２２から出力される。バッファデータ１３６は、送信回路ライト信号１４０に基づき、順次送信回路２６に書き込まれる。
【００３２】
レジスタデータ１４２は、送信用ＥＯＲレジスタ１４に保持されたデータであり、送信用ＥＯＲレジスタ１４のデータと、バッファデータ１３６とを順次ＥＯＲ演算した結果に逐次更新されるデータである。例えば、レジスタデータ１４２の「ＥＯＲｎ」は、図３に示したレジスタデータ１２８の「ＥＯＲｎ」である。レジスタデータ１４２の「ＥＯＲ０’」は、レジスタデータ１４２の「ＥＯＲｎ」とバッファデータ１３６の「Ｄ０」とのＥＯＲの結果である。レジスタデータ１４２の「ＥＯＲ１’」は、レジスタデータ１４２の「ＥＯＲ０’」とバッファデータ１３６の「Ｄ１」とのＥＯＲの結果である。同様に順次ＥＯＲ演算が行われ、レジスタデータ１４２の「ＥＯＲｎ’」は、レジスタデータ１４２の「ＥＯＲｎ―１’」とバッファデータ１３６の「Ｄｎ」とのＥＯＲの結果である。
【００３３】
比較結果１４４は、レジスタデータ１４２が送信データ１００に等しいか否かを示す信号であり、比較回路２４から出力される。送信データ１００とレジスタデータ１４２とが等しくない場合には、比較結果１４４として、例えば「ＯＮ」信号が出力される。
【００３４】
書込抑止信号１４６は、送信回路２６への送信データの書込を抑止する信号である。本実施の形態では、比較結果１４４が「ＯＮ」で、転送カウンタ２０のカウンタ値が「０」のとき、図４の点線のように、書込抑止信号が出力される。すなわち、送信用バッファメモリ１２の入力データと出力データとの間に相違が生じていると判断されることになる。これにより、送信回路２６において、「Ｄｎ」に対応する書込みが行われなくなる。
【００３５】
以下、送信装置１におけるエラー検出処理を、フローチャートを参照しながらさらに説明する。図５は、送信データを送信用バッファメモリ１２に格納する場合のＣＰＵ３の動作を示すフローチャートである。図６は、送信データを送信回路２６に格納する場合のＣＰＵ３の動作を示すフローチャートである。
【００３６】
図５に示すように、ＣＰＵ３は、メインメモリ５に送信データ１００を格納する（Ｓ１５１）。ＣＰＵ３は、送信用ＥＯＲレジスタ１４をクリアして、初期化する（Ｓ１５２）。初期値は、「０」とする。このとき、図３を参照しながら説明したように、レジスタライト信号１２６により、ＥＯＲ演算及び送信用ＥＯＲレジスタ１４の更新が開始される。
【００３７】
ＣＰＵ３は、転送元アドレスを、メインメモリ５の送信データ１００の格納先頭アドレスに設定し（Ｓ１５３）、転送先アドレスを、送信用バッファメモリ１２の先頭アドレスに設定する（Ｓ１５４）。また、ＣＰＵ３は、ループカウンタを、残りの転送データ数（例えば、ｎ）に設定する（Ｓ１５５）。
【００３８】
ＣＰＵ３は、ループカウンタ＝０であるか否か判別し（Ｓ１５６）、ループカウンタがゼロであれば（Ｓ１５６：ＹＥＳ）処理を終了する。ループカウンタがゼロでない場合には（Ｓ１５６：ＮＯ）、図３を参照しながら説明したように、ＦＰＧＡ１０では、送信用ＥＯＲ制御回路１６が、メインメモリ５から読み出された送信データ１００と送信用ＥＯＲレジスタ１４とのＥＯＲを計算する。送信用ＥＯＲ制御回路１６は、送信用ＥＯＲレジスタ１４の値（レジスタデータ１４２）を、ＥＯＲの計算結果に更新する。
【００３９】
一方、ＣＰＵ３は、送信用バッファメモリ１２の転送先アドレスに、メインメモリ５の転送元アドレスの送信データ１００を格納する（Ｓ１５７）。図２の例では、送信データ１００は、送信用バッファメモリ１２に、送信データ１１０として格納される。
【００４０】
ＣＰＵ３は、転送元アドレスを、（転送元アドレス＋１）に更新し（Ｓ１５８）、転送先アドレスを、（転送先アドレス＋１）に更新し（Ｓ１５９）、ループカウンタを、（ループカウンタ−１）に更新し（Ｓ１６０）、処理をＳ１５６に戻す。
【００４１】
上記の処理により、ＣＰＵ３は、送信用バッファメモリ１２に、送信データ１１０を例えば１バイトずつ格納する。送信用ＥＯＲ制御回路１６は、送信データ１１０が送信用バッファメモリ１２に書き込まれるたびに、送信用ＥＯＲレジスタ１４のレジスタ値と送信データ１００とのＥＯＲ演算を行い、その演算結果で、送信用ＥＯＲレジスタ１４を更新する。全ての送信データ１１０を送信用バッファメモリ１２に書き込み終わると、送信用ＥＯＲレジスタ１４には、全送信データ１００を順次ＥＯＲした結果が格納されていることになる。
【００４２】
図６に示すように、ＣＰＵ３は、送信回路２６の起動設定（Ｓ１７１）、及び送信用ＤＭＡコントローラ１８の起動設定を行う（Ｓ１７２）。ＣＰＵ３は、データの転送元アドレスを、送信用バッファメモリ１２の先頭アドレスに設定するとともに、転送カウンタに転送バイト数などを設定（Ｓ１７３）し、送信用ＤＭＡコントローラ１８を起動し（Ｓ１７４）、ＦＰＧＡ１０による送信処理を行う。
【００４３】
図４を参照しながら説明したように、ＦＰＧＡ１０では、シリアル通信の送信回路２６の送信ＤＭＡ要求１３０に応じて、送信用ＤＭＡコントローラ１８は、送信用バッファメモリ１２から、送信データ１１０を順次読み出していく。このとき、送信用ＥＯＲ制御回路１６は、送信用ＤＭＡコントローラ１８が送信用バッファメモリ１２から送信データ１１０を読み出すたびにＥＯＲ計算を行い、送信用ＥＯＲレジスタ１４を更新する。
【００４４】
比較回路２４は、送信用ＤＭＡコントローラ１８が、送信用バッファメモリ１２から送信データ１１０の読み出しを行うタイミングで、送信データ１００と、送信用ＥＯＲレジスタ１４との値を比較し、その結果を、送信用ＤＭＡコントローラ１８へ通知する。
【００４５】
送信用ＤＭＡコントローラ１８内の書込制御回路２２は、転送カウンタ２０のカウンタ値が「０」、つまり、最終データ書込みのときに、比較回路２４の比較結果に基づき、書込みを抑止するか否かを判定する。すなわち、比較結果が一致していた場合は、書込制御回路２２は、メモリのビット化けがないと判定し、送信用ＤＭＡコントローラ１８が、送信回路２６に最終データを書き込むことを許容する。不一致だった場合は、書込制御回路２２は、ビット化けが発生していると判定し、送信回路２６への最終データ書き込みを抑止する書込抑止信号１４６を出力する。
【００４６】
以上説明したように、第１の実施の形態による送信装置１によれば、送信用バッファメモリ１２に送信データ１００を書き込むたびに送信用ＥＯＲレジスタ１４の値とのＥＯＲ演算が行われ、送信用ＥＯＲレジスタ１４が更新される。このとき、送信データ１００はデータの正確性が保証されたデータであるため、送信用ＥＯＲレジスタ１４に更新されるデータも正しいことが保証される。さらに、送信用バッファメモリ１２に格納された送信データ１１０が読み出されるたびに、送信用ＥＯＲレジスタ１４との値とのＥＯＲ演算が行われ、送信用ＥＯＲレジスタ１４が更新される。
【００４７】
全ての送信データ１１０に基づくＥＯＲ演算が終了した場合、全ての送信データ１１０が全ての送信データ１００と一致している場合には、送信用ＥＯＲレジスタ１４の値は初期値に戻る。よって、送信用ＥＯＲレジスタ１４の初期値を「０」に設定しておけば、最後の送信データ１１０−ｎとのＥＯＲ演算を行う直前の送信用ＥＯＲレジスタ１４の値は、送信データ１１０−ｎに等しくなる。これを利用して、送信データ１１０が送信データ１００と等しくない場合をエラーとして検出し、最後の送信データ１１０−ｎを送信回路２６に書き込むことを抑止する。
【００４８】
以上のように、本実施の形態による送信装置１によれば、送信用バッファメモリ１２のメモリ幅を増加させることなく、送信用バッファメモリ１２におけるビット化けを検出することが可能になる。また、送信回路２６により送信データ１１０が送信された場合には、受信側では、最後の送信データ１１０−ｎが抜けた中途半端なデータ受信となるため、伝送エラーを検出することができる。その後は、受信側で、ソフトウェア的なリトライ動作により、リカバリが可能である。
【００４９】
以下、図７から図１０を参照しながら、第２の実施の形態によるエラー検出装置について説明する。第２の実施の形態においては、受信用のバッファメモリに対するエラー検出装置を例にして説明する。
【００５０】
図７は、第２の実施の形態による受信装置の構成を示すブロック図である。図７に示すように、受信装置５０は、ＣＰＵ５３、メインメモリ５５、ＦＰＧＡ６０を有している。ＣＰＵ５３は、受信装置５０の動作を制御する中央演算処理装置である。メインメモリ５５は、受信装置５０の動作に必要な各種データを格納する記憶装置である。ＦＰＧＡ６０は、受信を制御する受信制御回路である。ＣＰＵ５３、メインメモリ５５、ＦＰＧＡ６０は、いずれもデータバス５７に接続されており、ＣＰＵ５３の管理の下で各種のデータを相互に授受することができる。
【００５１】
ＦＰＧＡ６０は、受信用バッファメモリ６２、受信用ＥＯＲレジスタ６４、受信用ＥＯＲ制御回路６６、受信用ＤＭＡコントローラ６８、受信回路７０を有している。これらの構成要素は、いずれもデータバス５７に接続されており、各種のデータを相互に授受することができる。
【００５２】
受信用バッファメモリ６２は、受信回路７０から読み出された受信データを一時的に記憶する記憶装置である。このとき、受信用バッファメモリ６２は、送信データを所定の長さに分割した状態の入力データとして記憶し、出力する際には所定の長さの出力データとして出力する。受信用ＥＯＲレジスタ６４は、受信用バッファメモリ６２と同一の長さのデータを記憶する記憶部である。受信用ＥＯＲ制御回路６６は、受信用バッファメモリ６２の入力データまたは出力データと受信用ＥＯＲレジスタ６４に保持されている保持データとのＥＯＲ演算を実行させる演算制御回路である。
【００５３】
受信用ＤＭＡコントローラ６８は、受信回路７０から受信データを読出し、受信用バッファメモリ６２に書き込む動作を制御する制御回路である。すなわち、受信用ＤＭＡコントローラ６８は、受信回路７０へリード信号を出力して、外部からの受信データを読み出す。また、受信用ＤＭＡコントローラ６８は、受信用バッファメモリ６２へライト信号を出力して、受信回路７０から読み出した受信データを受信用バッファメモリ６２へ出力する。受信回路７０は、外部からのデータを受信し、データを受信すると受信用ＤＭＡコントローラ６８へデータ読み出しを要求する受信回路である。
【００５４】
図８は、受信データを受信用バッファメモリ６２に書き込む際のＦＰＧＡ６０の動作を説明するタイミングチャートである。図８は、受信ＤＭＡ要求１８０、受信回路リード信号１８２、受信データ１８４、バッファライト信号１８６、レジスタ更新信号１８８、レジスタデータ１９０を示している。
【００５５】
受信ＤＭＡ要求１８０は、受信回路７０が受信用ＤＭＡコントローラ６８に受信データの読み出しを要求するタイミングを示す信号であり、図８の例では負論理となっている。受信回路リード信号１８２は、受信用ＤＭＡコントローラ６８が、受信回路７０から受信データを読み出すタイミングを示す信号であり、図８の例では負論理になっている。
【００５６】
受信データ１８４は、受信用バッファメモリ６２に書き込むデータを示す信号である。受信データ１８４は、例えば１バイトなど、所定のデータ長の「Ｄ０」で表される受信データ１８４−１、・・・、「Ｄｎ」で表される受信データ１８４−ｎ等を含んでおり、所定のデータ長毎に受信用バッファメモリ６２に格納される。
【００５７】
バッファライト信号１８６は、受信用バッファメモリ６２に受信データ１８４を書き込むタイミングを示す信号であり、図８の例では負論理になっている。バッファライト信号１８６は、受信用ＤＭＡコントローラ６８から出力される。レジスタ更新信号１８８は、受信用ＥＯＲレジスタ６４を更新するタイミングを示す信号であり、受信用ＥＯＲ制御回路６６から出力され、受信用ＥＯＲレジスタ６４に入力される。
【００５８】
レジスタデータ１９０は、受信用ＥＯＲレジスタ６４に保持されているデータであり、受信用ＥＯＲレジスタ６４のデータと、受信データ１８４とを順次ＥＯＲ演算した結果により逐次更新される。例えば、レジスタデータ１９０の「０Ｘ００」は、受信用ＥＯＲレジスタ６４の初期値であり、ＣＰＵ５３により設定される。レジスタデータ１９０の「ＥＯＲ０」は、レジスタデータ１９０の「０Ｘ００」と受信データ１８４−１の「Ｄ０」とのＥＯＲの結果である。レジスタデータ１９０の「ＥＯＲ１」は、レジスタデータ１９０の「ＥＯＲ０」と受信データ１８４の「Ｄ１」とのＥＯＲの結果である。同様に順次ＥＯＲ演算が行われ、レジスタデータ１９０の「ＥＯＲｎ」は、レジスタデータ１９０の「ＥＯＲｎ―１」と受信データ１８４の「Ｄｎ」とのＥＯＲの結果である。
【００５９】
図９は、受信用バッファメモリ６２から受信データを読み出す際のＦＰＧＡ６０の動作を説明するタイミングチャートである。図９は、バッファリード信号１９２、バッファデータ１９４、レジスタ更新信号１９６、レジスタ値１９８を示している。
【００６０】
バッファリード信号１９２は、受信用バッファメモリ６２から受信データを読み出すタイミングを示す信号であり、図９の例では負論理になっている。バッファリード信号１９２は、ＣＰＵ５３により出力され、受信用バッファメモリ６２および受信用ＥＯＲレジスタ６４に入力されている。バッファデータ１９４は、受信用バッファメモリ６２より読み出されたデータであり、バッファデータ１９４−０、１９４−１、・・・、１９４−ｎを含んでいる。バッファデータ１９４は、ＣＰＵ５３によりメインメモリ５５へ転送される。レジスタ更新信号１９６は、受信用ＥＯＲレジスタ６４を更新するタイミングを示す信号であり、受信用ＥＯＲ制御回路６６により出力される。
【００６１】
レジスタデータ１９８は、受信用ＥＯＲレジスタ６４に保持されたデータであり、バッファデータ１９４とレジスタデータ１９８とを順次ＥＯＲ演算した結果に逐次更新されるデータである。例えば、レジスタデータ１９８の「ＥＯＲ０’」は、レジスタデータ１９８の「ＥＯＲｎ」とバッファデータ１９４の「Ｄ０」とのＥＯＲの結果である。「ＥＯＲｎ」は、レジスタデータ１９０の「ＥＯＲｎ」である。レジスタデータ１９８の「ＥＯＲ１’」は、レジスタデータ１９８の「ＥＯＲ０’」とバッファデータ１９４の「Ｄ１」とのＥＯＲの結果である。同様に順次ＥＯＲ演算が行われ、レジスタデータ１９８の「ＥＯＲｎ’」は、レジスタデータ１９８の「ＥＯＲｎ―１」とバッファデータ１９４の「Ｄｎ」とのＥＯＲの結果である。受信用ＥＯＲ制御回路６６は、受信用ＥＯＲレジスタ６４のレジスタデータ１９８の「ＥＯＲｎ’」をメインメモリ５５へ出力する。
【００６２】
以下、受信装置５０におけるエラー検出処理を、フローチャートを参照しながらさらに説明する。図１０は、ＣＰＵ５３による受信用ＤＭＡコントローラ６８の起動処理を示すフローチャートである。図１１は、受信データをメインメモリ５５に格納する場合のＣＰＵ５３の動作を示すフローチャートである。
【００６３】
図１０に示すように、ＣＰＵ５３は、受信動作を開始する前に、まず受信用ＥＯＲレジスタ６４を「０」に初期化する（Ｓ２０１）。ＣＰＵ５３は、受信回路７０に起動設定を行う（Ｓ２０２）。また、ＣＰＵ５３は、受信用ＤＭＡコントローラ６８に起動設定を行う（Ｓ２０３）。ＣＰＵ５３は、転送先アドレスを、受信用バッファメモリ６２の先頭アドレスに指定する（Ｓ２０４）。そしてＣＰＵ５３は、受信用ＤＭＡコントローラ６８を起動する（Ｓ２０５）。
【００６４】
図８を参照しながら説明したように、ＦＰＧＡ６０では、受信回路７０が受信データを受信すると、受信ＤＭＡ要求１８０を受信用ＤＭＡコントローラ６８に出力する。受信用ＤＭＡコントローラ６８は、受信回路７０からの受信ＤＭＡ要求１８０を受信すると、受信回路７０から、受信データ１８４を読み出し、受信用バッファメモリ６２に受信データ１８４を書き込む。
【００６５】
受信用ＥＯＲ制御回路６６は、受信用ＤＭＡコントローラ６８が受信回路７０から受信データ１８４を読み出して、受信用バッファメモリ６２に書き込むたびに、受信用ＥＯＲレジスタ６４のレジスタデータ１９０と受信データ１８４のＥＯＲ演算を行う。また、受信用ＥＯＲ制御回路６６は、ＥＯＲ演算の結果で、受信用ＥＯＲレジスタ６４を更新する。
【００６６】
受信用ＤＭＡコントローラ６８が、受信回路７０が受信した受信データ１８４を全て受信用バッファメモリ６２に書き込み終わると、受信用ＥＯＲレジスタ６４には、全受信データ１８４を順次ＥＯＲした結果が格納されていることになる。
【００６７】
図１１に示すように、ＣＰＵ５３は、転送先アドレスを、メインメモリ５５の受信データ格納先頭アドレスに設定し（Ｓ２１１）、転送元アドレスを、受信用バッファメモリ６２の先頭アドレスに設定する（Ｓ２１２）。ＣＰＵ５３は、ループカウンタを、受信データの残数（例えばｎ）に設定する（Ｓ２１３）。
【００６８】
ＣＰＵ５３は、ループカウンタ＝０であるか否か判別し（Ｓ２１４）、ループカウンタがゼロであれば（Ｓ２１４：ＹＥＳ）、Ｓ２１９の処理に進む。ループカウンタがゼロでない場合には（Ｓ２１４：ＮＯ）、図９を参照しながら説明したように、ＦＰＧＡ６０では、受信用ＥＯＲ制御回路６６が、受信用バッファメモリ６２から読み出されたバッファデータ１９４と受信用ＥＯＲレジスタ６４とのＥＯＲを計算する。受信用ＥＯＲ制御回路６６は、受信用ＥＯＲレジスタ６４の値（レジスタデータ１９８）を、ＥＯＲの計算結果に更新する。
【００６９】
一方、ＣＰＵ５３は、メインメモリ５５の転送先アドレスに、受信用バッファメモリ６２の転送元アドレスのバッファデータ１９４を格納する（Ｓ２１５）。ＣＰＵ５３は、転送元アドレスを、（転送元アドレス＋１）に更新し（Ｓ２１６）、転送先アドレスを、（転送先アドレス＋１）に更新し（Ｓ２１７）、ループカウンタを、（ループカウンタ−１）に更新し（Ｓ２１８）、処理をＳ２１４に戻す。
【００７０】
Ｓ２１９では、ＣＰＵ５３は、受信用ＥＯＲレジスタ６４が「０」であるか否かを判別する。受信用ＥＯＲレジスタ６４の値が「０」である場合には（Ｓ２１９：ＹＥＳ）、ＣＰＵ５３は、処理を正常終了させ、「０」でない場合には（Ｓ２１９：ＮＯ）、リトライ処理などを行う（Ｓ２２１）。
【００７１】
上記の処理において、受信用ＤＭＡコントローラ６８は、受信用バッファメモリ６２に、受信データ１８４を例えば１バイトずつ格納する。受信用ＥＯＲ制御回路６６は、受信データ１８４が受信用バッファメモリ６２に書き込まれるたびに、受信用ＥＯＲレジスタ６４のレジスタ値と受信データ１８４とのＥＯＲ演算を行い、その演算結果で、受信用ＥＯＲレジスタ６４を更新する。全ての受信データ１８４を受信用バッファメモリ６２に書き込み終わると、受信用ＥＯＲレジスタ６４には、全受信データ１８４を順次ＥＯＲした結果が格納されていることになる。
【００７２】
さらにＣＰＵ５３は、受信用バッファメモリ６２に格納されたバッファデータ１９４を例えば１バイトずつ読み出し、メインメモリ５５に転送する。受信用ＥＯＲ制御回路６６は、バッファデータ１９４が受信用バッファメモリ６２から読み出されるたびに、受信用ＥＯＲレジスタ６４のレジスタ値とのＥＯＲ演算を行い、その演算結果で、受信用ＥＯＲレジスタ６４を更新する。全てのバッファデータ１９４を受信用バッファメモリ６２から読み出すと、受信用ＥＯＲレジスタ６４には、全受信データ１８４および全バッファデータ１９４を順次ＥＯＲした結果が格納されることになる。
【００７３】
ＣＰＵ５３は、受信用ＥＯＲレジスタ６４から、全バッファデータ１９４が読み出された際の受信用ＥＯＲレジスタ６４のレジスタデータ１９８を読出す。そのレジスタデータ１９８が「０」である場合には、全データが正しく受信されたものと判断できるため、読みだしたバッファデータ１９４を受信データとして使って継続処理する。受信用ＥＯＲレジスタ６４に格納されているデータが「０」でない場合には、エラーがあったと判断して、読み出されたバッファデータ１９４を破棄し、リトライ処理などの起動を行う。
【００７４】
このとき、ＣＰＵ５３は、受信用バッファメモリ６２からバッファデータ１９４を順次読み出しするが、ハード的には受信用ＥＯＲレジスタ６４の更新は行わず、ＣＰＵ５３が順次バッファデータ１９４のＥＯＲ計算を実施することもできる。この場合には、ＣＰＵ５３は、全バッファデータ１９４のＥＯＲを計算した結果と受信用ＥＯＲレジスタ６４のＥＯＲ結果を比較し、一致なら正常、不一致ならビット化けなどのエラーが発生したものと判定する。
【００７５】
以上説明したように、第２の実施の形態による受信装置５０によれば、受信用バッファメモリ６２に受信データ１８４を書き込むたびに、受信用ＥＯＲレジスタ６４の値とのＥＯＲ演算が行われ、受信用ＥＯＲレジスタ６４が更新される。さらに、受信用バッファメモリ６２に格納されたバッファデータ１９４が読み出されるたびに、受信用ＥＯＲレジスタ６４との値とのＥＯＲ演算が行われ、受信用ＥＯＲレジスタ６４が更新される。
【００７６】
受信用バッファメモリ６２から全てのバッファデータ１９４が読み出され、ＥＯＲ演算が終了した際に、受信データ１８４が全てバッファデータ１９４と一致している場合には、受信用ＥＯＲレジスタ６４のレジスタ値は初期値に戻る。よって、受信用ＥＯＲレジスタ６４が初期値に等しいか否かを確認することにより、受信データ１８４のデータの欠損や、受信用ＥＯＲレジスタ６４におけるビット化け等のエラー検出を行なうことができる。
【００７７】
以上のように、本実施の形態による受信装置５０によれば、受信用バッファメモリ６２のメモリ幅を増加させることなく、受信用バッファメモリ６２におけるビット化け等のエラーを検出することが可能になる。また、送信装置１によりエラーが検出されて最後の送信データ１１０−ｎが抜けた中途半端なデータが受信された場合など、伝送エラーを検出することもできる。その後は、ソフトウェア的なリトライ動作により、リカバリが可能である。
【００７８】
以上のように、本発明の第１及び第２の実施の形態によれば、ビット幅を増やさずにバッファメモリのビット化け等のエラーを検出することができ、より信頼性の高いデータ送受信が可能である。
【００７９】
なお、送信データ１００、受信データ１８４は、対象データの一例であり、送信データ１００−０、・・・、１００−ｎ、受信データ１８４−０、・・・、１８４−ｎは、入力データの一例である。レジスタデータ１２８、レジスタデータ１９０は、保持データの一例である。バッファデータ１３６−０、・・・、１３６−ｎ、バッファデータ１９４―０、・・・、１９４−ｎは、出力データの一例である。また、送信用バッファメモリ１２，受信用バッファメモリ６２は、記憶装置の一例であり、送信用ＥＯＲレジスタ１４、受信用ＥＯＲレジスタ６４は、記憶部の一例である。
【００８０】
送信用バッファメモリ１２、受信用バッファメモリ６２は、記憶装置の一例であり、送信用ＥＯＲレジスタ１４、受信用ＥＯＲレジスタ６４は、記憶部の一例である。送信用ＥＯＲ制御回路１６、受信用ＥＯＲ制御回路６６は、論理制御回路の一例であり、書込制御回路２２、ＣＰＵ５３は、判別回路の一例である。
【００８１】
なお、本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または実施形態を採ることができる。上記各実施の形態においては、ＦＰＧＡを例にして説明したが、同様の動作が可能なものであればこれに限定されない。また、例えば、ＦＰＧＡ１０、ＦＰＧＡ６０を簡略化するため、ＥＯＲ演算をＣＰＵ３、またはＣＰＵ５３側で行うようにしてもよい。すなわち、ＣＰＵ３、５３側のバッファメモリ５、５５のデータ書き込み・読み出しの際に、送信用ＥＯＲレジスタ１４、受信用ＥＯＲレジスタ６４ＥＯＲレジスタを更新する制御回路なしに、ＣＰＵのソフトウェア処理にまかせる方法である。この場合、ＣＰＵ３、５３側の処理は増えるが、上記実施の形態による送信装置１、受信装置５０と同様に、送信用バッファメモリ１２、受信用バッファメモリ６２のメモリ幅を変えずに、エラー検出を行なうことができる。
【００８２】
この場合、送信時は、ＣＰＵ３がメモリ５に書き込みする際の送信用ＥＯＲレジスタ１４の更新制御は行わず、あらかじめＣＰＵ３で実行されるソストウェアが、全送信データ１００のＥＯＲ結果を、送信用ＥＯＲレジスタ１４に書き込みしておく。送信用ＥＯＲ制御回路１６は、送信用ＤＭＡコントローラ１８が、送信用バッファメモリ１２からバッファデータ１３６を読み出すときに、送信用ＥＯＲレジスタ１４の計算を実施する。書込制御回路２２は、比較回路２４、転送カウンタ２０からの信号に基づき、送信回路２６への書き込み処理を抑止する。
【００８３】
受信装置５０におけるエラー判別時においては、入力データと出力データを順次ＥＯＲ演算したが、これに限定されない。例えば、入力データに関するＥＯＲ演算と、出力データに関するＥＯＲ演算とを受信用ＥＯＲ制御回路６６が別々に計算し、互いに一致しているか否かをＣＰＵ５３で判別するといった方法でもよい。また、受信装置５０においては、受信用ＥＯＲレジスタ６４に設定される初期値は「０」に限定されない。初期値を「０」以外にしたときには、判別を行う際に、最後の入力データと比較対象の送信用ＥＯＲレジスタ１４または受信用ＥＯＲレジスタ６４の値が、初期値に応じた関係になっていない場合にエラーが発生すると判別すればよい。例えば、４ビットのデータで初期値を「１１１１」とした場合には、比較対象の値が、最後の入力データの各ビットを反転させた値になっていればよい。
【符号の説明】
【００８４】
１      送信装置
３      ＣＰＵ
５      メインメモリ
７      データバス
１０      ＦＰＧＡ
１２      送信用バッファメモリ
１４      送信用ＥＯＲレジスタ
１６      送信用ＥＯＲ制御回路
１８      送信用ＤＭＡコントローラ
２０      転送カウンタ
２２      書込制御回路
２４      比較回路
２６      送信回路
５０      受信装置
５３      ＣＰＵ
５５      メインメモリ
５７      データバス
６０      ＦＰＧＡ
６２      受信用バッファメモリ
６４      受信用ＥＯＲレジスタ
６６      受信用ＥＯＲ制御回路
６８      受信用ＤＭＡコントローラ
７０      受信回路
１００      送信データ
１１０      送信データ
１２０      バッファライト信号
１２２      レジスタ更新信号
１２６      レジスタライト信号
１２８      レジスタデータ
１３０      送信ＤＭＡ要求
１３２      バッファリード信号
１３４      レジスタ更新信号
１３６      バッファデータ
１３８      転送カウンタ値
１４０      送信回路ライト信号
１４２      レジスタデータ
１４４      比較結果
１４６      書込抑止信号
【図１】
2014086924.tif 000003
【図２】
2014086924.tif 000004
【図３】
2014086924.tif 000005
【図４】
2014086924.tif 000006
【図５】
2014086924.tif 000007
【図６】
2014086924.tif 000008
【図７】
2014086924.tif 000009
【図８】
2014086924.tif 000010
【図９】
2014086924.tif 000011
【図１０】
2014086924.tif 000012
【図１１】
2014086924.tif 000013