(57)【要約】【課題】（１）任意のデータ数を入力とする演算に対応することができ処理効率の良い演算回路（アクセラレータ）の実現、（２）演算回路内に具備するデータレジスタ（処理用バッファ）のサイズを小さくしてコスト削減、の２つを実現できる技術を提供する。【解決手段】演算回路１０３は、ディスクリプタ制御に従い、ＤＭＡ転送を用いて、任意数の入力データを演算して結果を出力するものであり、任意数の入力データを一度に演算せずに、複数に分割して演算処理する。演算回路１０３は、前記分割した演算毎の途中結果を、一旦外部記憶装置１０２に格納し、次の演算処理にて前記途中結果を読み込んで演算処理し、その繰り返しにより、最終結果を得る。演算回路１０３に具備するアドレスレジスタ１３０の数に対応した周期的な処理単位で演算を行う。【選択図】図１
2008129632.tif 000002
【特許請求の範囲】
【請求項１】
ディスクリプタによる制御に従い、ＤＭＡ転送を用いて、外部の演算対象の第１のデータに対する所定の演算をアクセラレートする演算回路であって、
前記ディスクリプタによる制御に従い、前記ＤＭＡ転送を用いて、前記第１のデータである任意の入力データ数のデータ群を内部に入力して演算処理を行い最終的に前記演算の結果を出力するものであり、
前記ＤＭＡ転送におけるアドレス情報として前記第１のデータが格納される外部記憶装置上におけるアドレスを保持する複数のアドレスレジスタと、
前記演算処理の結果のデータを保持するデータレジスタとを有し、
前記第１のデータの演算において、前記ディスクリプタによる制御に従い、前記第１のデータを、前記アドレスレジスタの数に応じた、複数の周期的処理に分けて、前記演算処理を繰り返し行うものであり、
前記周期的処理では、前記演算処理毎に、前記ＤＭＡ転送により、前記外部記憶装置から前記データレジスタに、前記第１のデータにおける部分データを読み込み、その部分データと前記データレジスタに保存している前記演算処理の結果のデータとを入力として前記演算処理を行い、その結果のデータを前記データレジスタに保存し、前記演算処理の結果のデータを前記外部記憶装置上に書き戻す動作を行うことを特徴とする演算回路。
【請求項２】
ディスクリプタによる制御に従い、ＤＭＡ転送を用いて、外部の演算対象の第１のデータに対する所定の演算をアクセラレートする演算回路であって、
前記ディスクリプタによる制御に従い、前記ＤＭＡ転送を用いて、前記第１のデータである任意の入力データ数のデータ群を内部に入力して演算処理を行い最終的に前記演算の結果である１つの出力データを出力するものであり、
前記ＤＭＡ転送におけるアドレス情報として、前記第１のデータが格納される外部記憶装置上における転送元アドレスと、前記演算処理の結果のデータを書き戻す転送先アドレスとを保持する複数のアドレスレジスタと、
前記演算処理の結果のデータを保持する、一度のＤＭＡ転送でアクセス可能な第１のデータサイズに対して十分な第２のデータサイズを持つデータレジスタとを有し、
前記第１のデータの演算において、前記ディスクリプタによる制御に従い、前記第１のデータを、前記アドレスレジスタの数に応じた、複数の周期的処理に分けて、前記演算処理を繰り返し行うものであり、
一旦前記複数のアドレスレジスタに格納可能な分の第１のアドレスが参照する前記第１のデータの入力データ群のうちの部分データについての前記演算処理を行うために、前記第１のアドレスの各転送元アドレスが指し示す前記外部記憶装置上の前記部分データを、前記第１のデータサイズ単位のＤＭＡ転送で読み込み、その部分データと前記データレジスタに保存されている前記演算処理の結果のデータとを入力として前記演算処理を行い、その結果のデータを、前記データレジスタに保存し、前記第１のデータサイズ単位のＤＭＡ転送で、前記転送先アドレスが指し示す前記外部記憶装置上の領域に書き戻す第１の動作と、
前記第１の動作での演算処理の続きの演算処理に使用する前記第１のデータのうちの部分データを取得するために、前記第１のアドレスの各転送元アドレスを前記ＤＭＡ転送で読み込んだサイズ分インクリメントし、前記転送先アドレスを前記書き戻したサイズ分インクリメントする第２の動作とを有し、
前記第１と第２の動作による第１の処理単位を繰り返し行うことにより、前記第１のアドレスが参照する前記部分データについての前記演算の途中結果のデータを得る、前記周期的処理である第２の処理単位を行い、
前記第２の処理単位による前記第１のデータのうちの未演算のデータについての前記演算処理を継続するにあたり、直前の周期の第２の処理単位での前記演算の途中結果のデータを引き継ぐために、そのデータと、前記未演算のデータのうちの部分データとを入力として読み込み、同様に前記第２の処理単位を行い、
前記第２の処理単位を、前記第１のデータの全転送元データに対して、１回以上行うことにより、前記第１のデータの最終的な前記演算の結果の１つの出力データを得ることを特徴とする演算回路。
【請求項３】
請求項２記載の演算回路において、
前記第１のデータの演算が制御される前記ディスクリプタの構造において、
前記第１の処理単位の動作を制御するための必要な情報として、転送元アドレス、転送元データサイズ、転送元アドレス数、及び転送先アドレスを含み、
１つのディスクリプタにおいて、前記転送元アドレス、転送元データサイズ、及び転送先アドレスが、前記アドレスレジスタの数を単位として周期的に記述され、
１つのディスクリプタにより、１つ以上の前記第１及び第２の処理単位が制御されることを特徴とする演算回路。
【請求項４】
請求項２記載の演算回路において、
前記複数のアドレスレジスタのうち、転送元アドレスと転送先アドレスとの両方を指し示すアドレスを格納するアドレスレジスタを有し、
前記第１のデータの演算が制御される前記ディスクリプタの構造において、
前記第１の処理単位の動作を制御するための必要な情報として、転送元アドレス、転送元データサイズ、転送元アドレス数、前記両方を指し示すアドレス、及び、前記両方を指し示すアドレスの取り扱いを示すフラグを含み、
１つのディスクリプタにおいて、前記転送元アドレス、転送元データサイズ、及び前記両方を指し示すアドレスが、前記アドレスレジスタの数を単位として周期的に記述され、
１つのディスクリプタにより、１つ以上の前記第１及び第２の処理単位が制御されることを特徴とする演算回路。
【請求項５】
請求項２記載の演算回路において、
前記第１のデータの演算が制御される前記ディスクリプタの構造において、
前記第１の処理単位の動作を制御するための必要な情報として、転送元アドレス、転送元データサイズ、転送元アドレス数、及び、転送先アドレスを含み、
複数のディスクリプタを自動的に連続処理するチェーン方式もしくはリング方式により制御されるものであり、
１つのディスクリプタにおいて、前記アドレスレジスタの数に応じた入力データ群の演算処理を実行するように記述され、
複数のディスクリプタにより、複数の前記第２の処理単位を、前記アドレスレジスタの数の単位で周期的に行うことを特徴とする演算回路。
【請求項６】
請求項２記載の演算回路において、
前記複数のアドレスレジスタのうち、転送元アドレスと転送先アドレスとの両方を指し示すアドレスを格納するアドレスレジスタを有し、
複数のディスクリプタを自動的に連続処理するチェーン方式もしくはリング方式により制御されるものであり、
１つのディスクリプタにおいて、前記アドレスレジスタの数に応じた入力データ群の演算処理を実行するように記述され、
複数のディスクリプタにより、複数の前記第２の処理単位を、前記アドレスレジスタの数の単位で周期的に行うことを特徴とする演算回路。
【請求項７】
請求項２記載の演算回路において、
前記第１のデータサイズと前記第２のデータサイズが同じであることを特徴とする演算回路。
【請求項８】
請求項１〜７のいずれか一項に記載の演算回路において、
前記演算は、ＸＯＲ演算により構成されるＦＥＣ演算であることを特徴とする演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力データに対して演算を実行し結果を出力する演算回路に関し、特に、ＦＥＣ（Forward Error Correction）等の誤り訂正における冗長パケット生成操作及びロスパケット修復操作などのように、任意の数の入力データに対して演算を実行し結果を出力する演算回路、及び当該演算をアクセラレート（高速化）する回路（アクセラレータ）に関する。
【背景技術】
【０００２】
近年の放送と通信が融合したサービスの提供などに伴い、高速なネットワークプロトコル処理が要求されている。ネットワークプロトコル処理などの高速化の手段として、アクセラレータがある。ハードウェアアクセラレータをＣＰＵの周辺機器として用意する場合、メモリ（外部記憶装置）と周辺機器（ハードウェアアクセラレータ）との間のデータ転送については、ＤＭＡ（Direct Memory Access）方式で行われることが一般的である。このＤＭＡ転送の方式としては、レジスタダイレクト方式と、チェーンもしくはリング方式とに大きく分類される。
【０００３】
一般にＤＭＡ装置を含むハードウェアアクセラレータは、その特性上、一度に処理可能な最大データ数や最大データサイズが固定である。ＤＭＡ装置であれば、転送元アドレスや転送先アドレスを格納するアドレスレジスタの個数や、ＤＭＡ装置に転送されたデータを一時格納するデータレジスタ（処理用バッファ）のサイズが固定となる。
【０００４】
ゆえに、任意データ数を処理する演算をＤＭＡ装置で行う場合、また、大きなデータサイズを保持する必要がある処理をＤＭＡ装置で行う場合、問題が発生する。以下、ＤＭＡ転送により得られる入力データに対して演算を実行してその結果を出力する、ＤＭＡ転送を用いて高速に所定の演算を行うハードウェアアクセラレータ（ＤＭＡ装置）を、演算回路とも称する。
【０００５】
上記演算回路に関し、例えばＦＥＣ演算をハードウェア化することが考えられる。ＦＥＣに関しては、非特許文献１記載の技術がある。ＦＥＣに関しては、非特許文献１記載の技術がある。ＦＥＣでは、転送パケットの整列や誤り訂正演算を、転送にあたり実行する必要があるため、ＣＰＵパワーが要求される。ＦＥＣ処理をハードウェアアクセラレータ（演算回路）で実現してプロトコル処理を効率化することが望まれる。
【０００６】
ＦＥＣ演算のハードウェア化にあたり、類似した技術であることから、例えば特開平６−２５９２６８号公報（特許文献１）記載の構造を持つアクセラレータを適用することができる。特許文献１の技術は、パケットデータの誤り検出のためのチェックサムを演算するハードウェアアクセラレータである。ＦＥＣもチェックサムも、多数のデータから一つのデータを導出する多入力１出力の演算処理である。
【特許文献１】特開平６−２５９２６８号公報
【非特許文献１】Rosenberg, J. and H. Schulzrinne, “An RTP Payload Format for Generic Forward Error Correction”, RFC2733, December 1999.
【発明の開示】
【発明が解決しようとする課題】
【０００７】
前記特許文献１の手法を前記ＦＥＣ（ＸＯＲ演算を含む演算）に適用するアクセラレータでは、誤り訂正演算の途中結果を全ての入力データに対する演算が終了するまでハードウェア内に保持する必要がある。ＦＥＣでは最大１パケット分の比較的大きな処理用バッファを必要とする。
【０００８】
前提として、（１）通常、転送パケットのデータは、メモリなどの外部記憶装置に格納される。ＦＥＣ演算を前記演算回路として実現するには、外部記憶装置に格納されたデータを読み込むために、前記演算回路内にデータ領域を指し示すアドレスを保持するレジスタ（アドレスレジスタ）を設ける必要がある。また、（２）前記非特許文献１の技術では、冗長パケットを生成するための行列の行数及び列数は可変である。また、インターリーブ方式を用いた誤り訂正符号方式においても、冗長データ生成に使用するデータブロックは任意である。これら（１），（２）から、前記特許文献１のような従来技術の手法では、演算回路内に具備するアドレスレジスタ数以上のデータ数を入力とする誤り訂正演算には対応できないという問題があった。
【０００９】
本発明は以上のような問題に鑑みてなされたものであり、その目的は、（１）任意のデータ数を入力とする演算に対応することができ処理効率の良い演算回路（アクセラレータ）の実現、及び、（２）当該演算回路内に具備するデータレジスタ（処理用バッファ）の容量（サイズ）を小さくしてコスト削減の２つの点を実現できる技術を提供することである。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。前記目的を達成するために、本発明は、以下に示す技術的手段を備えることを特徴とする。本発明の演算回路は、上位装置から指示されるディスクリプタによる制御に従い、ＤＭＡ転送を用いて、所定の演算を高速化するものであって、任意数のデータを入力として結果を出力する演算処理（計算処理）を行うものである。
【００１１】
本演算回路は、演算の対象データ（Ｄ：第１のデータ）である任意数の入力データを、一度に演算せずに、所定のディスクリプタ構造での制御に従い、複数に分割して演算することを第１の特徴とする。本演算回路は、ＤＭＡ転送アクセスにより、外部記憶装置から、内部のデータレジスタ（処理用バッファ）に、前記第１のデータを分割した部分データを読み込み、当該データと、内部に保存している途中結果（前回の演算処理結果）データとを入力として演算処理し、結果を内部に保存する。
【００１２】
さらに、本演算回路は、前記内部に読み込んだ部分データについての演算処理毎の結果（途中結果）のデータを、一旦外部記憶装置に格納（書き戻し）し、次回の演算処理において、前記途中結果のデータを内部のデータレジスタに読み込んで、同様に演算処理を行う。それらの処理単位の繰り返しにより、対象データについての最終的な演算結果を得ることを第２の特徴とする。
【００１３】
本演算回路は、詳しくは例えば以下の構成である。
【００１４】
（１）本演算回路は、ディスクリプタによる制御に従い、ＤＭＡ転送を用いてデータを入出力する制御部と、入出力データに対する所定の演算処理（計算処理）を行うデータ処理部（計算回路）とを備える。また、本演算回路は、ＤＭＡ転送におけるアドレス情報として、第１のデータ（Ｄ）が格納されている外部記憶装置上における転送元アドレスと、前記演算の結果（途中結果）のデータを書き戻す転送先アドレスとを保持する、複数（ｍ）のアドレスレジスタを備える。また、本演算回路は、一度のＤＭＡ転送でアクセス可能な第１のデータサイズ（Ｓ１）に対して十分かつ適当な第２のデータサイズ（Ｓ２）を持つ、前記データ処理部の演算処理結果を保持するデータレジスタ（処理用バッファ）を備える。第１のデータ（Ｄ）の全サイズ分を、ＤＭＡ転送サイズ（Ｓ１）及びデータレジスタサイズ（Ｓ２）に応じた、複数の演算処理に分けて実行するものである。
【００１５】
本演算回路は、ディスクリプタ制御に従った第１のデータ（Ｄ）の演算において、以下の動作を行う。本演算回路は、一旦、内部の複数（ｍ）のアドレスレジスタに格納可能な分のアドレス（Ａ１）が参照する第１のデータ（Ｄ）（少なくとも部分データ）についての演算を行うために、各転送元アドレスが指し示す外部記憶装置上の第１のデータ（Ｄ）のうちの部分データを、第１のデータサイズ（Ｓ１）単位のＤＭＡ転送で読み込み、その読み込んだ部分データと、データレジスタに保持されている演算処理結果（途中結果）のデータとを入力として、演算処理（計算処理）を実行する。そして、その演算処理結果のデータ（出力データ：ｄ１）を、第１のデータサイズ（Ｓ１）単位のＤＭＡ転送で、転送先アドレスが指し示す外部記憶装置上の領域に書き戻す。これにより、第２のデータサイズ（Ｓ２）分に対応した、第１の演算処理動作を行う。
【００１６】
次に、本演算回路は、上記演算処理（例えば１回目）の続きの演算処理（例えば２回目）に使用する第１のデータ（Ｄ）のうちの部分データを取得するために、転送元アドレスを前記ＤＭＡ転送で読み込んだサイズ分インクリメントし、転送先アドレスを前記書き戻したサイズ分インクリメントするアドレスインクリメント動作を行う。
【００１７】
本演算回路は、これらの動作（第１の演算処理動作とアドレスインクリメント動作）を交互に繰り返し行うこと、換言すればそれら動作による第１の処理単位（Ｐ１）を１回以上実行することにより、前記アドレス（Ａ１）が参照する第１のデータ（Ｄ）についての演算の結果（途中結果）のデータ（出力データ：ｄ２）を得る、周期的な処理（第２の処理単位：Ｐ２）を行う。
【００１８】
第２の処理単位（Ｐ２）による第１のデータ（Ｄ）のうちの未演算のデータについての演算を継続するにあたり、直前の周期の第２の処理単位（Ｐ２）での演算途中結果のデータ（ｄ２）を引き継ぐために、そのデータ（ｄ２）と、未演算のデータのうちの部分データとを入力として、同様の動作（第１の処理単位（Ｐ１）の繰り返し）を行う。第２の処理単位（Ｐ２）を、第１のデータ（Ｄ）の全転送元データ（全サイズ）に対して、１回以上行うことにより、第１のデータ（Ｄ）の最終的な演算の結果のデータを得る。
【００１９】
（２）  また、本演算回路は、第１のデータ（Ｄ）についての演算が制御されるディスクリプタの構造において、第１の処理単位（Ｐ１）の動作を制御するための必要な情報として、転送元アドレス、転送元データサイズ、転送元アドレス数（フラグ）、及び転送先アドレスを含む。そして、個々のディスクリプタをダイレクトに処理する方式により制御されるものであり、１つのディスクリプタにおいて、転送元アドレス、転送元データサイズ、及び転送先アドレスが、当該演算回路に実装されるアドレスレジスタ数（ｍ）を単位として、周期的に記述される。第１のデータ（Ｄ）の演算において、１つのディスクリプタの使用により、第１及び第２の処理単位を行う。
【００２０】
（３）  また、本演算回路は、第１のデータ（Ｄ）についての演算が制御されるディスクリプタの構造において、第１の処理単位（Ｐ１）の動作を行うために必要な情報として、転送元アドレス、転送元データサイズ、転送元アドレス数（フラグ）、及び、転送先アドレスを含む。そして、複数のディスクリプタを自動的に連続処理するディスクリプタチェーン方式もしくはリング方式により制御されるものであり、１つのディスクリプタにおいて、当該演算回路に実装されるアドレスレジスタ数（ｍ）に応じたデータの演算処理を実行するように記述される。第１のデータ（Ｄ）の演算において、複数のディスクリプタの使用により、第２の処理単位（Ｐ２）をアドレスレジスタ数（ｍ）の単位で周期的に行う（１つのディスクリプタで１つの第２の処理単位（Ｐ２）を制御する）。
【００２１】
（４）  また、本演算回路は、複数のアドレスレジスタの中に、一つだけ、転送元アドレスと転送先アドレスとの両方を指し示すアドレス（転送先・転送元アドレス）を格納するアドレスレジスタを設ける。ディスクリプタの構造において、前記両方を指し示すアドレス、及び、前記両方を指し示すアドレスの取り扱いを示すフラグを含める。
【発明の効果】
【００２２】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。本発明によれば、（１）任意のデータ数を入力とする演算に対応することができ処理効率の良い演算回路（アクセラレータ）の実現、及び、（２）当該演算回路内に具備するデータレジスタ（処理用バッファ）の容量（サイズ）を小さくしてコスト削減の２つの点を実現できる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。
【００２４】
本実施の形態は、任意の数のデータを入力とする演算処理の例としてＸＯＲ演算を含むＦＥＣ演算に対応した演算回路（ハードウェアアクセラレータ）を、必要最低限のハードウェア構成により実現したものである。本実施の形態は、ＦＥＣ演算に係わる、複数の入力データから冗長データを生成する操作、もしくは複数の入力データ及び冗長データからロスデータを修復する操作を実現する例である。
【００２５】
＜従来技術＞
以下、実施の形態を説明する前に、本発明の前提技術となる従来技術及び問題点などについて簡単に説明する。
【００２６】
＜ネットワークプロトコル処理＞
近年のインターネット網のブロードバンド化やネットワークに接続される機器のハードウェア性能の高性能化、及び取り扱うデータのデジタル化に伴い、インターネットを利用したブロードキャスト型配信などにみられる、放送と通信が融合したサービスが提供されつつある。配信されるコンテンツを受信する端末装置は、ネットワークプロトコルに従いパケット化されたデータからコンテンツデータを抽出する作業が要求される。一般に、インターネットを利用した配信サービスで取り扱うデータは映像データであり、大きなデータであることが多いため、プロトコル処理にかかる負荷は大きい。さらにストリーミング形式で配信される場合、リアルタイムな視聴に耐えうるよう高速なネットワークプロトコル処理が要求される。
【００２７】
＜アクセラレータ及びＤＭＡ方式＞
ネットワークプロトコル処理などの高速化の手段として、アクセラレータがある。ハードウェアアクセラレータをＣＰＵの周辺機器として用意する場合、メモリ（外部記憶装置）と周辺機器（ハードウェアアクセラレータ）との間のデータ転送については、ＤＭＡ（Direct Memory Access）方式で行われることが一般的である。このＤＭＡ転送の方式としては、レジスタダイレクト方式と、チェーンもしくはリング方式とに大きく分類される。
【００２８】
＜レジスタダイレクト方式及びディスクリプタ＞
レジスタダイレクト方式では、ＤＭＡ転送を実行する前に、ＣＰＵが、転送データの転送元アドレスや転送先アドレス及び転送データサイズを、ＤＭＡ装置（ハードウェアアクセラレータ）のレジスタに直接書き込むことにより、データの転送を行う。通常、先に挙げた転送元アドレスや転送先アドレス及び転送データサイズ等のＤＭＡ転送に必要な情報については、ディスクリプタ（記述子）と呼ばれる制御情報に格納する。そして、そのディスクリプタを格納したメモリアドレスを、ＤＭＡ装置に指定する。ＤＭＡ装置は、その指定されたメモリアドレスにあるディスクリプタを、ＤＭＡ装置内のレジスタに格納し、その情報をもとにＤＭＡ転送を実行する。
【００２９】
このレジスタダイレクト方式では、連続していないアドレスに格納されたデータを連続には処理できないという問題がある。当該処理のためには、ＣＰＵは、複数のディスクリプタによる複数のデータの処理をＤＭＡ装置に行わせる必要がある。しかし、ＤＭＡ装置に対して、一度に複数のディスクリプタの設定・指定をすることはできない。このため、ＣＰＵは、ＤＭＡ装置に、次の１つのディスクリプタによるデータ転送を実行させるために、ＤＭＡ装置がその前の１つのディスクリプタによるデータ転送処理が終了するのを待つ必要がある。
【００３０】
＜チェーン方式もしくはリング方式＞
上記レジスタダイレクト方式における問題を改善する方式が、チェーンもしくはリング方式である。チェーン方式では、レジスタダイレクト方式のディスクリプタを拡張し、次に処理すべきディスクリプタが格納されたアドレスの情報をディスクリプタ内に含む。ＤＭＡ装置は、１つのディスクリプタの処理を終了すると、次のディスクリプタが格納されたアドレスを参照し、このアドレスが有効なものであれば、そのディスクリプタの処理を実行する。このように、ディスクリプタチェーンにより、複数のディスクリプタの処理を連鎖的に行う。このチェーン方式により、ＣＰＵは、ＤＭＡ装置の処理の進行を意識することなくディスクリプタを用意することができ、ＤＭＡ装置は、ディスクリプタチェーンが続く限り、連続的にＤＭＡ転送を実行できる。
【００３１】
またリング方式も、ディスクリプタの連続実行が可能である点ではチェーン方式と共通するが、その実現方法が異なる。リング方式では、ディスクリプタをリング状に配置する。即ち、ディスクリプタリングを構成する。それらの各ディスクリプタには、そのディスクリプタが有効であるかを示すフラグ情報、ディスクリプタリングの最終であるかを示すフラグ情報などが挿入される。ＤＭＡ装置は、読み込むディスクリプタが有効である間、連続的に処理を行い、リングの最終を示すフラグを持つディスクリプタ処理の終了後、自動的にリングの先頭ディスクリプタが格納されたアドレスに戻る。この先頭ディスクリプタが有効であれば、続けてＤＭＡ処理を実行する。これにより、ＣＰＵがリング状にディスクリプタを配置するだけで、連続的なＤＭＡ転送が可能となる。なお、各ディスクリプタの長さが異なる場合は、そのディスクリプタサイズを明記することで対応可能である。
【００３２】
＜アクセラレータのレジスタ＞
ところで、一般にＤＭＡ装置を含むハードウェアアクセラレータは、その特性上、一度に処理可能な最大データ数や最大データサイズが固定である。ＤＭＡ装置であれば、転送元アドレスや転送先アドレスを格納するアドレスレジスタの個数や、ＤＭＡ装置に転送されたデータを一時格納するデータレジスタ（処理用バッファ）のサイズが固定となる。
【００３３】
ゆえに、任意データ数を処理する演算をＤＭＡ装置で行う場合、また、大きなデータサイズを保持する必要がある処理をＤＭＡ装置で行う場合、問題が発生する。
【００３４】
＜ＦＥＣ演算＞
ここでは、上記演算回路に関し、ＦＥＣ演算をハードウェア化する際の問題を例とする。ＦＥＣは、元となる複数のデータから冗長データを生成しておき、元のデータをロスした際に冗長データを利用してロスデータを修復する方法である。インターネットは、ベストエフォート型のネットワークであり、パケットデータの伝送中に発生するノイズやネットワークの輻輳が原因でデータをロスすることがある。ロスパケットの修復方法には、ＦＥＣとＡＲＱ（Automatic Repeat Request）がある。
【００３５】
ＡＲＱによるシステムでは、受信側でロスしたデータを検出し、送信側にデータが届かなかったことを通知し、送信側からロスデータを再送する。但し、先に挙げた映像配信サービスにおいては、比較的大きなデータを伝送するため、ＡＲＱによるロスパケットの再送は、パケット再送による遅延が発生するだけでなく、ネットワークに大きな負荷を与える。
【００３６】
一方、ＦＥＣでは、データを伝送する際、パリティ（排他的論理和：ＸＯＲ）、ハミング符号、リード・ソロモン符号などの誤り訂正符号アルゴリズムにより、冗長データを付加して送信する。転送中にパケットロスが発生した場合、受信側では、転送パケットとそれに付加される冗長パケットにより、ロスパケットの修復を行う。
【００３７】
ＦＥＣに関し、非特許文献１の技術では、転送パケットを行列に整列し、１行もしくは１列に属するパケットのＸＯＲにより生成されたデータを冗長パケットとする。列における冗長パケットの生成（下記インターリーブ方式）は、連続したパケットの消失、即ちバーストロスに対応するためである。なお、上記整列する行列の行数及び列数は可変である。これは、効率的な転送を実現するにあたり、ネットワーク品質により冗長パケット数を調整する必要があるためである。
【００３８】
ハミング符号やリード・ソロモン符号を用いた誤り訂正符号では、適当な大きさのデータブロックに対して冗長符号を生成する。通常、これらの誤り訂正符号では、連続したデータ単位、例えばパケット単位で、冗長符号を生成する。しかし、バーストロスに対応できないため、インターリーブ方式を用いることがある。
【００３９】
図６において、データであるＡ１，Ａ２，Ａ３，……，Ａｎは、連続するデータＡの１ブロックを示している。即ち、データＡ＝｛Ａ１，Ａ２，Ａ３，……，Ａｎ｝である。冗長符号（Ｒ）は、それぞれ連続するデータから生成される。詳細には、Ａ＝｛Ａ１，……，Ａｎ｝から冗長符号ＲＡを生成する。データＢ，……，データＭでも同様であり、データＢから冗長符号ＲＢを、データＭから冗長符号ＲＭを生成する。
【００４０】
インターリーブ方式を用いない方式では、例えばデータＡでは、Ａ１（第１ブロック），Ａ２（第２ブロック），Ａ３（第３ブロック），……，Ａｎ（第ｎブロック），及びＲＡ（データＡに関する冗長符号）を、１つのパケットデータとして転送する。図２中の行（横）方向が冗長符号生成の方向である。データＢ等も同様である。この方式では、転送中にバーストロスが発生することでパケットデータを消失した場合、冗長符号を含めたパケットの全データを消失するため、修復が不可能である。
【００４１】
インターリーブ方式では、図６の列（縦）方向のデータを転送パケットとする。詳細には、データブロック｛Ａ１，Ｂ１，……，Ｍ１｝をパケットデータ（「パケット１」）とし、データブロック｛Ａ２，Ｂ２，……，Ｍ２｝をパケットデータ（「パケット２」）とし、同様に、データブロック｛Ａｎ，Ｂｎ，……，Ｍｎ｝をパケットデータ（「パケットｎ」）として、冗長符号｛ＲＡ，ＲＢ，……，ＲＭ｝をパケットデータ（「冗長パケット」）として、転送する。これにより、転送中のバーストロスにより例えば２番目のパケットデータ（「パケット２」）が消失したとしても、「パケット１」、「パケット３」、……、「パケットｎ」、「冗長パケット」が受信できれば、「パケット２」に含まれるデータ｛Ａ２，Ｂ２，……，Ｍ２｝の修復が可能である。
【００４２】
なお、冗長データの生成単位、具体的には図６中のｎは、ネットワーク品質により可変・任意であり、また、パケットデータサイズ（データ数）、具体的に図６中のＭも、可変・任意である。
【００４３】
＜ＦＥＣ演算の高速化＞
ＦＥＣでは、ＡＲＱのように再送による遅延が発生しない利点があるが、転送パケットの整列や誤り訂正演算を、転送にあたり実行する必要があるため、ＣＰＵパワーが要求される。前述の通り、インターネットを利用した配信サービスで取り扱うデータは映像コンテンツに代表される大きなデータであることが多いため、プロトコル処理にかかる負荷が大きい。さらにストリーミング形式で配信される場合、リアルタイムな視聴に耐えうるよう高速なネットワークプロトコル処理が要求される。それゆえ、ＦＥＣ処理をハードウェアアクセラレータ（演算回路）で実現してプロトコル処理を効率化することが望まれる。
【００４４】
ＦＥＣ演算のハードウェア化にあたり、類似した技術であることから、例えば特開平６−２５９２６８号公報（特許文献１）記載の構造を持つアクセラレータを適用することができる。特許文献１の技術は、パケットデータの誤り検出のためのチェックサムを演算するハードウェアアクセラレータである。ＦＥＣもチェックサムも、多数のデータから一つのデータを導出する多入力１出力の演算処理である。
【００４５】
前記特許文献１では、１６ビット単位に分割されたパケットデータの奇数番目を第１の加算器に入力し偶数番目を第２の加算器に入力し、それぞれの加算器で奇数番部分の１の補数和と偶数番部分の１の補数和を保持し、第３の加算器で前記奇数番部分の１の補数和と偶数番部分の１の補数和を加算するアクセラレータについて記載されている。
【００４６】
前記特許文献１の手法を前記ＦＥＣ（ＸＯＲ演算を含む演算）に適用するアクセラレータでは、誤り訂正演算の途中結果を全ての入力データに対する演算が終了するまでハードウェア内に保持する必要がある。チェックサムは高々２バイトのデータバッファで十分であるが、ＦＥＣは最大１パケット分の比較的大きなデータバッファを必要とする。例えばＥｔｈｅｒｎｅｔ（登録商標）の場合、約１５００バイトのデータバッファをハードウェアに用意する必要がある。
【００４７】
（実施の形態１）
以上を踏まえて、図１〜図３を用いて、本発明の実施の形態１を説明する。図１は、本演算回路（１０３）を含んだシステムの全体構成、図２は、外部記憶装置（１０２）に格納されたディスクリプタ（ディスクリプタリングの一部）及び対象データの構成、図３は、ディスクリプタ（１１０）の構成を示している。なお、図１の構成は、各実施の形態（１，２）で共通である。
【００４８】
実施の形態１は、特徴として、１つのディスクリプタ内の処理において、所定の周期的処理（第２の処理単位）を１回以上実行する構成である。また、図１に示すように、本演算回路の内部に具備するアドレスレジスタの数をｍ（番号で言えば＃０〜＃ｍ−１）とする。上記周期的処理は、ｍ単位で行われる。
【００４９】
尚、実施の形態１の構成は、必ずしも前記ディスクリプタチェーンもしくはリング方式による制御でなくとも構わない構成である。後述の実施の形態２では、特に、前記ディスクリプタチェーンもしくはリング方式による制御の構成を示す。
【００５０】
また、本構成上の一処理例として、図２に示すように、演算の対象データ（第１のデータ：Ｄ）として、（ｍ＋２）個の入力データであるデータ＃０（１１３）〜データ＃ｍ＋１（１１７）を処理する場合について説明する。１つのディスクリプタ内での２回の周期的処理で対象データ（Ｄ）の演算が終了する例である。
【００５１】
＜演算回路＞
図１において、本演算回路１０３のブロック構成を説明する。本システムは、ＣＰＵ１００、バス１０１、外部記憶装置（メモリ）１０２、及び、本演算回路１０３を有する構成である。
【００５２】
メモリ１０２において、ディスクリプタ１１０は、演算回路１０３がＣＰＵ１００の介在なくメモリ１０２との間でデータ転送（ＤＭＡ転送）を行うために必要な制御情報を示すものであり、メモリ１０２に格納される。ディスクリプタ１１０の詳細な説明は図４にて後述する。
【００５３】
メモリ１０２において、データバッファ（領域）１１１，１１２は、演算回路１０３が取り扱うデータ（対象データ）が格納された領域を示し、これらの領域のデータは、ディスクリプタ１１０の情報の参照に従い、演算回路１０３に入出力される。特に、１１１は、転送先データを格納する転送先データバッファ、１１２は、転送元データを格納している転送元データバッファを示す。
【００５４】
演算回路１０３は、ディスクリプタ制御部１２０、ＤＭＡ動作制御部１２５、データ転送制御部１２８、データ処理部１７０（データレジスタ１７２を含む）、及び各種レジスタ｛１２１〜１２４，１２６，１３０，１４０｝を有して構成される。
【００５５】
＜ディスクリプタ制御部＞
ディスクリプタ制御部１２０は、ディスクリプタ制御レジスタ１２１、ディスクリプタリング開始アドレスレジスタ１２２、ディスクリプタリング現在アドレスレジスタ１２３、及び転送元アドレス数レジスタ１２４を制御する。
【００５６】
ディスクリプタ制御レジスタ１２１は、ディスクリプタの制御情報を格納する。ディスクリプタ制御レジスタ１２１は、ディスクリプタ１１０に含まれるディスクリプタ制御に関する情報（ディスクリプタ制御情報）を格納する。このディスクリプタ制御情報に関しては、図２にて詳細に説明する。
【００５７】
ディスクリプタリング開始アドレスレジスタ（ディスクリプタ先頭アドレスレジスタ）１２２は、ディスクリプタリングの開始位置に配置されるディスクリプタの先頭アドレス、もしくは単一のディスクリプタの先頭アドレスを格納する。ディスクリプタリング開始アドレスレジスタ１２２は、演算回路１０３がリングにおける最終ディスクリプタの処理を終了し、リングの先頭に位置するディスクリプタの処理に戻る際に使用される。
【００５８】
ディスクリプタリング現在アドレスレジスタ（ディスクリプタ現在アドレスレジスタ）１２３は、ディスクリプタリングにおける演算回路１０３が現在処理しているディスクリプタのアドレス、もしくは単一のディスクリプタの現在処理しているアドレスを格納する。
【００５９】
転送元アドレス数レジスタ１２４は、ディスクリプタ１１０で指定される転送元アドレス数を格納する。
【００６０】
ディスクリプタリング開始アドレスレジスタ１２２及びディスクリプタリング現在アドレスレジスタ１２３の値は、ＣＰＵ１００を介してユーザ（上位アプリケーション等）により書き込まれる。
【００６１】
＜ＤＭＡ動作制御部＞
ＤＭＡ動作制御部１２５は、ＤＭＡ動作制御レジスタ１２６を制御する。ＤＭＡ動作制御レジスタ１２６は、ＤＭＡが動作中か否かを示す情報を格納する。ＤＭＡ動作制御レジスタ１２６は、ＤＭＡ転送動作を開始する際にＣＰＵ１００を介してユーザにより書き込まれる。
【００６２】
＜データ転送制御部＞
データ転送制御部１２８は、アドレスレジスタ１３０｛１３０−０，……，１３０−（ｍ−１）｝、及び、データサイズレジスタ１４０｛１４０−０，……，１４０−（ｍ−１）｝を参照して、メモリ１０２に格納されたデータバッファ（１１１，１１２）へのアクセスを制御する。
【００６３】
＜アドレスレジスタ及びデータサイズレジスタ＞
アドレスレジスタ（ＡＲ）１３０は、ディスクリプタ１１０で指定される転送先アドレスと複数の転送元アドレスを格納するものであり、転送先・転送元アドレス＃０レジスタ１３０−０，転送元アドレス＃１レジスタ１３０−１，転送元アドレス＃２レジスタ１３０−２，……，転送元アドレス＃ｍ−１レジスタ１３０−（ｍ−１）というｍ個（＃０〜＃ｍ−１）のレジスタを有する。なお記号＃は識別番号を表す。
【００６４】
データサイズレジスタ（ＳＲ）１４０は、アドレスレジスタ１３０に対応して、転送先アドレスと複数の転送元アドレスが指し示すデータのサイズを格納するものであり、転送先・転送元データサイズ＃０レジスタ１４０−０，転送元データサイズ＃１レジスタ１４０−１，転送元データサイズ＃２レジスタ１４０−２，……，転送元データサイズ＃ｍ−１レジスタ１４０−（ｍ−１）という、ｍ個（＃０〜＃ｍ−１）のレジスタを有する。
【００６５】
アドレスレジスタ１３０のうち特に、転送先・転送元アドレス＃０レジスタ１３０−０は、転送先のデータバッファ領域（転送先アドレス）と転送元のデータバッファ領域（転送元アドレス）との両方を指し示す１つのアドレスを格納する。転送先アドレス及び転送元アドレスは、ディスクリプタ１１０により設定される。その他の各アドレスレジスタ｛１３０−１〜１３０−（ｍ−１）｝は、転送元アドレスのみを指定するアドレスを格納する。アドレスレジスタ１３０に設定される各アドレスに関する詳細は図２にて説明する。
【００６６】
データサイズレジスタ１４０のうち特に、転送先・転送元データサイズ＃０レジスタ１４０−０は、転送先・転送元アドレス＃０レジスタ１３０−０が指し示す転送先かつ転送元のデータバッファ領域のサイズを格納する。その他のデータサイズレジスタ｛１４０−１〜１４０−（ｍ−１）｝は、それぞれ対応する転送元アドレスレジスタ｛１３０−１〜−（ｍ−１）｝が指し示す転送元データバッファ領域のサイズを格納する。データサイズレジスタに設定される各サイズに関する詳細は図３にて説明する。データサイズレジスタ数は、アドレスレジスタ数（ｍ）と同じである。
【００６７】
なお、転送先・転送元アドレス＃０レジスタ１３０−０（及び対応する１４０−０）については、転送元アドレスと転送先アドレスとを別々のレジスタにする構成も可能であるが、本構成のように一緒にすることで、処理効率が向上できる。
【００６８】
＜データ転送制御部−ポインタ＞
データ転送制御部１２８は、その内部に、リードポインタ１５０及びライトポインタ１６０を持つ。リードポインタ１５０は、データ処理部１７０に対して現在までに読み込んだデータサイズ（処理済みサイズ）を示す、ｍ個のポインタ｛１５０−０，……，１５０−（ｍ−１）｝である。ライトポインタ１６０は、データ処理部１７０からメモリ１０２に対して書き戻したデータサイズを示す１つのポインタである。リードポインタ１５０は、転送元アドレス数に合わせてｍ個用意され、ライトポインタ１６０は、１つのみ用意される。詳しくは、リードポインタ（＃０）１５０−０は、転送先・転送元アドレス＃０レジスタ１３０−０に格納されるアドレスが指し示すデータ領域から読み込んだデータサイズを示す。また、各リードポインタ（＃１〜＃ｍ−１）｛１５０−１〜１５０−(ｍ−１)｝は、それぞれ対応する転送元アドレスレジスタ｛１３０−１〜１３０−（ｍ−１）｝に格納されるアドレスが指し示すデータ領域から読み込んだデータサイズを示す。また、ライトポインタ１６０は、転送先・転送元アドレス＃０レジスタ１３０−０に格納されるアドレスが指し示すデータ領域へ書き戻したデータサイズを示す。
【００６９】
＜データ処理部＞
データ処理部１７０は、計算回路１７１を持つ。計算回路１７１は、データ転送制御部１２８により読み込み（入力）されたデータに対してＸＯＲ（排他的論理和）演算を実行する。計算回路１７１には、演算処理の結果（処理途中結果）を保持する処理用バッファ（データレジスタ）１７２を有する。本例では、ＦＥＣ演算に対応して、計算回路１７１は、ＸＯＲ演算のみを行う。１回のＸＯＲ演算では、２つの入力データのＸＯＲ結果を出力する。複数回のＸＯＲ演算により、多入力１出力のＸＯＲ演算結果が得られる。
【００７０】
処理用バッファ１７２のサイズ（第２のデータサイズ：Ｓ２）は、ＤＭＡ転送サイズ、即ち演算回路１０３がＤＭＡ転送を用いて一度にアクセス可能なデータサイズ（第１のデータサイズ：Ｓ１）に対して十分かつ適当なサイズである。本例では、第１のデータサイズ（Ｓ１）と第２のデータサイズ（Ｓ２）とを、同じサイズ（Ｓ１ａ）とする。例えば、Ｓ１ａ＝３２バイトとする。本例では、演算回路１０３において、Ｓ１ａ＝３２バイトの単位でのバースト転送（ＤＭＡ転送）を行う機能を備える。これらサイズは、本システム（組込みシステム等）の用途の要求性能を考慮した適切なサイズに設計すればよい。当該サイズに関し、一般に、組込みシステムの用途に応じて最適なサイズが決まる。
【００７１】
＜ディスクリプタ＞
図２，図３において、（ｍ＋２）個の入力データの演算（ＸＯＲ演算）の実行を制御する場合のディスクリプタ１１０、及び、本ディスクリプタ１１０の各アドレスが参照するデータを説明する。ここで例えば、ディスクリプタ１１０内の各情報は、それぞれ図２中の括弧内に示した値を持つものとする。１つのディスクリプタ１１０内で（ｍ＋２）個の入力データ分の処理が制御される。
【００７２】
以下、ディスクリプタ１１０の持つ各情報を説明する。ディスクリプタ１１０は、ディスクリプタ有効フラグ２２０、ディスクリプタリングフラグ２２１、転送先ＲＥＡＤフラグ２２２、転送元アドレス数２２３、転送元アドレス（２２４，２２６，……，２３６）、転送元データサイズ（２２５，２２７，……，２３７）を有する。
【００７３】
ディスクリプタ有効フラグ２２０は、ディスクリプタ１１０が有効であるかどうかを示すフラグである。本例では、有効であることを示す「ＯＮ」が指定される。
【００７４】
ディスクリプタリングフラグ２２１は、ディスクリプタ１１０をリング状に構成（ディスクリプタリングまたは単にリングと称する）する際に、ディスクリプタ１１０がリング上のどこに位置するかを示すフラグである（リング構成については特に実施の形態２を参照）。通常、このフラグでは、演算回路１０３のディスクリプタ制御部１２０が現在参照しているディスクリプタがリングの最終かどうかを区別できればよい。本例では、複数の入力データから一つの冗長データを生成する操作、もしくは複数の入力データ及び冗長データから一つのロスデータを修復する操作を実現する例を示すものである。そのため、ディスクリプタリングにより複数のディスクリプタを連続実行する必要は特に無い。それゆえ、ディスクリプタリングフラグ２２１は、リングの最終を示す「ＯＦＦ（＝ＬＡＳＴ）」としている。なお、ディスクリプタリングフラグ２２１を「ＯＮ」としたディスクリプタを、ディスクリプタリング方式に適用することで、複数の冗長データの生成、もしくは複数のロスデータの修復を連続実行することが可能である。
【００７５】
転送先ＲＥＡＤフラグ２２２は、転送元アドレス（＃０）２２４の取り扱いを示すフラグである。転送元アドレス（＃０）２２４は、前記転送先・転送元アドレス＃０レジスタ１３０−０に関係して、転送先アドレスとしても使用される。それゆえ、この転送先ＲＥＡＤフラグ２２２で、転送先としてのみ参照されるアドレスであるか（「ＯＦＦ」）、転送先かつ転送元アドレスとして参照されるアドレスであるか（「ＯＮ」）を指し示す。本例では、当該アドレスは転送元アドレスとしても利用する必要があるため、この転送先ＲＥＡＤフラグ２２２は「ＯＮ」となる。
【００７６】
転送元アドレス数２２３は、対象データ（Ｄ）における転送元アドレスの個数を示す。転送元アドレス数２２３は、転送元アドレスの個数をディスクリプタ制御部１２０に認識させるだけでなく、ディスクリプタ１１０のサイズを認識させるために使用する。前述したように、本ディスクリプタ１１０は、任意の入力データ数に対応する、可変長な構造を採る。本ディスクリプタ１１０をリング方式で使用する場合、演算回路１０３のディスクリプタ制御部１２０は、各ディスクリプタサイズを把握する必要がある。ディスクリプタ１１０を可変長たらしめるのは、転送元アドレスの個数及びアドレスレジスタ数（ｍ）の２つのパラメータである。但し、ｍは、演算回路１０３で固有であり、転送元アドレス数２２３が唯一の可変長パラメータである。それゆえ、演算回路１０３のディスクリプタ制御部１２０は、転送元アドレス数２２３によりディスクリプタサイズを把握できる。本例では、（ｍ＋２）個の入力データ（１１３〜１１７）を対象とするため、転送元アドレス数は、「ｍ＋２」となる。
【００７７】
第１の転送元アドレス（＃０）２２４は、第１の転送元データ（＃０）１１３の領域を指すアドレスを示す。なお、本例では、これはアドレス「Ａ」を指すものとする。第１の転送元データサイズ（＃０）２２５は、第１の転送元アドレス（＃０）２２４が指すデータ（１１３）のサイズを示す。なお、本例では、これはサイズ「Ｓ＿Ｄ」が指定される。
【００７８】
同様に、第２の転送元アドレス（＃１）２２６は、第２の転送元データ（＃１）１１４の領域を指すアドレス（例：Ｂ）を示す。第２の転送元データサイズ（＃１）２２７は、第２の転送元アドレス（＃１）２２６が指すデータ（１１４）のサイズ（例：Ｓ＿Ｄ）を示す。第３番目（＃２）以降も同様であり、第ｍの転送元アドレス（＃ｍ−１）２３０は、第ｍの転送元データ（＃ｍ−１）１１５の領域を指すアドレス（例：Ｃ）を示す。第ｍの転送元データサイズ（＃ｍ−１）２３１は、第ｍの転送元アドレス（＃ｍ−１）２３０が指すデータ（１１５）のサイズ（例：Ｓ＿Ｄ）を示す。
【００７９】
また、第ｍ＋１番目（＃ｍ）以降は、＃０〜＃ｍ−１で同様に繰り返しである。まず、転送元アドレス（＃０）２３２は、第１の転送元アドレス（＃０）２２４と同じであり、転送元データ（＃０）１１３の領域を指すアドレス（例：Ａ）を示す。転送元データサイズ（＃０）２３３は、第１の転送元データサイズ（＃０）２２５と同じであり、転送元アドレス（＃０）２３２が指すデータ（１１３）のサイズ（例：Ｓ＿Ｄ）を示す。
【００８０】
第ｍ＋１の転送元アドレス（＃ｍ）２３４は、第ｍ＋１の転送元データ（＃ｍ）１１６の領域を指すアドレス（例：Ｄ）を示す。第ｍ＋１の転送元データサイズ（＃ｍ）２３５は、第ｍ＋１の転送元アドレス（＃ｍ）２３４が指すデータ（１１６）のサイズ（例：Ｓ＿Ｄ）を示す。同様に、第ｍ＋２の転送元アドレス（＃ｍ＋１）２３６は、第ｍ＋２の転送元データ（＃ｍ＋１）１１７の領域を指すアドレス（例：Ｅ）を示す。第ｍ＋２の転送元データサイズ（＃ｍ＋１）２３７は、第ｍ＋２の転送元アドレス（＃ｍ＋１）２３６が指すデータ（１１７）のサイズ（例：Ｓ＿Ｄ）を示す。
【００８１】
＜動作＞
次に、図１〜図３を参照しながら、本演算回路１０３の動作を順に説明する。なお、前述のように、ＤＭＡ転送サイズ（第１のデータサイズ：Ｓ１）と、処理用バッファ１７２のサイズ（第２のデータサイズ：Ｓ２）とを、同じサイズＳ１ａとする。また、図２のように、演算における入力データ及び出力データのサイズは、すべて同じサイズＳ＿Ｄとする。また、データ転送制御部１２８は、リードポインタ１５０を各転送元アドレスに対して持つ。ここでは、転送元アドレス＃０レジスタ１３０−０用のものをリードポインタ（＃０）１５０−０とし、以降同様に、転送元アドレス＃ｍ−１レジスタ１３０−（ｍ−１）用のものをリードポインタ（＃ｍ−１）１５０−（ｍ−１）とする。また、データ＃０（１１３）は、ゼロクリアされているものとする。
【００８２】
本演算回路１０３は、アドレスレジスタ数（ｍ）を単位とする周期で、入力データ（対象データ：Ｄ）を処理する。ここでは、図２のように、１番目のデータ＃０（１１３）からｍ番目のデータ＃ｍ−１（１１５）までの処理を、周期＃０（第１周期）：Ｃ１とし、続く、ｍ＋１番目のデータ＃ｍ（１１６）とｍ＋２番目のデータ＃ｍ＋１（１１７）の処理を、周期＃１（第２周期）：Ｃ２とする。前述のようにディスクリプタ１１０は、演算回路１０３の動作に合わせて、ｍを単位とする周期で構成される。また、ディスクリプタ制御部１２０は、アドレスレジスタ数（ｍ）を最大としてディスクリプタ１１０から転送元アドレス及び転送元データサイズを読み込み、転送元アドレスレジスタ（１３０）及び転送元データサイズレジスタ（１４０）に格納する。
【００８３】
なお、図２のように、Ｃ１での取り扱いデータ（１１３〜１１５）をＤ１とし、Ｃ２での取り扱いデータ（１１６，１１７）をＤ２とする。各周期（Ｃ１，Ｃ２）の処理は、第２の処理単位（Ｐ２）に対応する。本例では、Ｃ２内の途中で対象データ：Ｄ（Ｄ２）の演算が終了した場合である。また、各周期の処理（Ｐ２）内では、サイズＳ１ａ単位での処理（第１の処理単位：Ｐ１）が繰り返される。
【００８４】
ＤＭＡ動作制御部１２５は、ユーザによってＣＰＵ１００を介してＤＭＡ動作制御レジスタ１２６に０ｘ１（１６進数で１）を書き込まれた時点で処理を開始する。なお、ユーザは、ＤＭＡ動作制御レジスタ１２６に０ｘ１を書き込む前に、ディスクリプタリング開始アドレスレジスタ１２２にディスクリプタ１１０の先頭アドレスを指定し、ディスクリプタリング現在アドレスレジスタ１２３にも同様にディスクリプタ１１０の先頭アドレスを指定する必要がある。
【００８５】
ディスクリプタ制御部１２０は、ＤＭＡ動作制御部１２５から処理開始の通知を受け、ディスクリプタリング現在アドレスレジスタ１２２に指定されたアドレスを参照し、ディスクリプタ１１０を読み込む。ディスクリプタ制御部１２０は、データ転送制御部１２８を介してメモリ１０２へアクセスする。ディスクリプタ有効フラグ２２０、ディスクリプタリングフラグ２２１、及び転送先ＲＥＡＤフラグ２２２は、ディスクリプタ制御レジスタ１２１に格納される。転送元アドレス数２２３は、転送元アドレス数レジスタ１２４に格納される。転送元アドレス＃０（２２４）は、転送先・転送元アドレス＃０レジスタ１３０−０に格納される。転送元データサイズ＃０（２２５）は、転送先・転送元データサイズ＃０レジスタ１４０−０に格納される。同様に、転送元アドレス＃１〜＃ｍ−１は、それぞれ対応する転送元アドレスレジスタ｛１３０−１〜１３０−（ｍ−１）｝に格納される。転送元データサイズ＃１〜＃ｍ−１は、それぞれ対応する転送元データサイズレジスタ｛１４０−１〜１４０−（ｍ−１）｝に格納される。
【００８６】
なお、転送元アドレス数２２３がｍより大きい場合、ディスクリプタ制御部１２０は、ｍ番目までに対応して、転送元データサイズ＃ｍ−１（２３０）までを読み込む。その後、ディスクリプタリング現在アドレスレジスタ１２２を、読み込んだディスクリプタサイズだけインクリメントする。
【００８７】
なお、ディスクリプタのサイズは、転送元アドレス数２２３及びアドレスレジスタ数（ｍ）により、下記（式１）により計算される。ここで、入力データ数をＮｄとしている。
【００８８】
【数１】
2008129632.tif 000003
【００８９】
ディスクリプタ制御部１２０は、必要なだけのディスクリプタ１１０を読み込み、データ転送制御部１２８とデータ処理部１７０は、初期化を実行する。この初期化とは、データ処理部１７０が計算回路１７１の処理用バッファ１７２をゼロクリアすること、データ転送制御部１２８が各リードポインタ１５０及びライトポインタ１６０を０に設定することである。詳しくは、リードポインタ（＃０）１５０−０は、アドレス「Ａ」を開始点とするオフセット、リードポインタ（＃１）１５０−１は、アドレス「Ｂ」を開始点とするオフセット、リードポインタ（＃ｍ−１）１５０−（ｍ−１）は、アドレス「Ｃ」を開始点とするオフセット、ライトポインタ１６０は、アドレス「Ａ」を開始点とするオフセットとなる。
【００９０】
周期＃０（Ｃ１）において、データ転送制御部１２８は、「転送元アドレス＃０レジスタ１３０−０が指すアドレス」＋「リードポインタ（＃０）１５０−０の値」の領域から、第１の入力データであるデータ＃０（１１３）をサイズＳ１ａだけ読み込む。そして、データ処理部１７０は、その読み込んだデータと、計算回路１７１内の処理用バッファ１７２に格納されたデータとの間で、ＸＯＲをとり、その結果を、処理用バッファ１７２に上書きする。その後、データ転送制御部１２８は、リードポインタ（＃０）１５０−０を、Ｓ１ａだけインクリメントする。ここでは、ゼロクリアされたデータ間でとるＸＯＲであるため、結果も０となる。
【００９１】
続けて、同様に、データ転送制御部１２８は、次の「転送元アドレス＃１レジスタ１３０−１が指すアドレス」＋「リードポインタ（＃１）１５０−１の値」の領域から、次のデータ＃１（１１４）を、Ｓ１ａだけ読み込み、データ処理部１７０は、そのデータと、計算回路１７１内の処理用バッファ１７２に格納されたデータとの間で、ＸＯＲをとり、その結果を処理用バッファ１７２に上書きする。その後、データ転送制御部１２８は、リードポインタ（＃１）１５０−１をＳ１ａだけインクリメントする。データ転送制御部１２８及びデータ処理部１７０は、以上の操作を、第ｍの入力データであるデータ＃ｍ−１（１１５）まで繰り返す。これにより、データ＃ｍ−１（１１５）までのＸＯＲ演算の途中結果を、サイズＳ１ａだけ得る。続けて、データ転送制御部１２８は、上記得られたサイズＳ１ａ分のＸＯＲ演算途中結果を、「転送元アドレス＃０レジスタ１３０−０が指すアドレス」＋「ライトポインタ１６０の値」の領域（転送先）へ書き戻す。その後、データ転送制御部１２８は、ライトポインタ１６０をＳ１ａだけインクリメントする。データ処理部１７０は、次のサイズＳ１ａ分の処理を同様に行うために、計算回路１７１内の処理用バッファ１７２をゼロクリアする。
【００９２】
データ転送制御部１２８及びデータ処理部１７０は、周期＃０（Ｃ１）での上記操作を、各リードポインタ１５０及びライトポインタ１６０がサイズＳ＿Ｄに達するまで繰り返す。これにより、周期＃０（Ｃ１）の処理（Ｐ２）における、データ＃０（１１３）からデータ＃ｍ−１（１１５）までのｍ個のデータ（Ｄ１）についての、ＸＯＲ演算途中結果得る。
【００９３】
次に、周期＃１（Ｃ２）の処理（Ｐ２）を実行する前に、ディスクリプタ制御部１２０は、ディスクリプタリング現在アドレスレジスタ１２２に指定されたアドレスを参照し、ディスクリプタ１１０の続きを読み込む。ここで、転送元アドレス（＃０）２２４は、転送先・転送元アドレス＃０レジスタ１３０−０に格納される。転送元データサイズ（＃０）２２５は、転送先・転送元データサイズ＃０レジスタ１４０−０に格納される。転送元アドレス（＃ｍ）２３４は、転送元アドレス＃１レジスタ１３０−１に格納される。転送元データサイズ（＃ｍ）２３５は、転送元データサイズ＃１レジスタ１４０−１に格納される。転送元アドレス（＃ｍ＋１）２３６は、転送元アドレス＃２レジスタ１３０−２に格納される。転送元データサイズ（＃ｍ＋１）２３７は、転送元データサイズ＃２レジスタ１４０−２に格納される。その後、ディスクリプタ制御部１２０は、ディスクリプタリング現在アドレスレジスタ１２２を、読み込んだディスクリプタサイズだけインクリメントする。
【００９４】
続けて、データ転送制御部１２８及びデータ処理部１７０は、初期化を実行する。この初期化とは、データ処理部１７０が計算回路１７１内の処理用バッファ１７２をゼロクリアすること、データ転送制御部１２８が各リードポインタ（＃０〜＃２）１５０−１〜１５０−２及びライトポインタ１６０をゼロに設定することである。詳しくは、リードポインタ（＃０）１５０−０は、アドレス「Ａ」を開始点とするオフセット、リードポインタ（＃１）１５０−１は、アドレス「Ｄ」を開始点とするオフセット、リードポインタ（＃２）１５０−２は、アドレス「Ｅ」を開始点とするオフセット、ライトポインタ１６０は、アドレス「Ａ」を開始点とするオフセットとなる。
【００９５】
周期＃１（Ｃ２）において、データ転送制御部１２８は、「転送元アドレス＃０レジスタ１３０−０が指すアドレス」＋「リードポインタ（＃０）１５０−０の値」の領域から、データ＃０（１１３）をサイズＳ１ａだけ読み込む。そして、データ処理部１７０は、そのデータと、計算回路１７１内の処理用バッファ１７２に格納されたデータとの間で、ＸＯＲをとり、その結果を処理用バッファ１７２に上書きする。その後、データ転送制御部１２８は、リードポインタ（＃０）１５０−０をＳ１ａだけインクリメントする。なお、上記の操作は、周期＃０（Ｃ１）の演算結果を周期＃１（Ｃ２）に引き継ぐことを意味する。
【００９６】
続けて、データ転送制御部１２８は、「転送元アドレス＃１レジスタ１３０−１が指すアドレス」＋「リードポインタ（＃１）１５０−１の値」の領域から、第ｍ＋１の入力データであるデータ＃ｍ（１１６）を、サイズＳ１ａだけ読み込む。そして、データ処理部１７０は、そのデータと、計算回路１７１内の処理用バッファ１７２に格納されたデータとの間で、ＸＯＲをとり、その結果を処理用バッファ１７２に上書きする。その後、データ転送制御部１２８は、リードポインタ（＃１）１５０−１をＳ１ａだけインクリメントする。続けて、データ転送制御部１２８は、「転送元アドレス＃２レジスタ１３０−２が指すアドレス」＋「リードポインタ（＃２」１５０−２の値」の領域から、第ｍ＋２の入力データであるデータ＃ｍ＋１（１１７）を、サイズＳ１ａだけ読み込む。そして、データ処理部１７０は、そのデータと、計算回路１７１内の処理用バッファ１７２に格納されたデータとの間で、ＸＯＲをとり、その結果を処理用バッファ１７２に上書きする。その後、データ転送制御部１２８は、リードポインタ（＃２）１５０−２をＳ１ａだけインクリメントする。
【００９７】
データ転送制御部１２８及びデータ処理部１７０は、以上の操作により、データ＃ｍ＋１（１１７）までのＸＯＲ演算結果を、サイズＳ１ａだけ得る。続けて、データ転送制御部１２８は、得られたサイズＳ１ａ分のＸＯＲ演算結果を、「転送先・転送元アドレス＃０レジスタ１３０−０が指すアドレス」＋「ライトポインタ１６０の値」の領域へ、書き戻す。その後、データ転送制御部１２８は、ライトポインタ１６０をＳ１ａだけインクリメントする。データ処理部１７０は、次のサイズＳ１ａ分の処理を同様に行うために、計算回路１７１内の処理用バッファ１７２をゼロクリアする。
【００９８】
データ転送制御部１２８及びデータ処理部１７０は、周期＃１（Ｃ２）での上記操作を、各リードポインタ１５０及びライトポインタ１６０がサイズＳ＿Ｄに達するまで繰り返す。これにより、周期＃１（Ｃ２）の処理（Ｐ２）における、データ＃ｍ（１１６）及びデータ＃ｍ＋１（１１７）までのデータ（Ｄ２）についてのＸＯＲ演算結果を得る。換言すれば、データ＃０（１１３）からデータ＃ｍ＋１（１１７）までの（ｍ＋２）個のデータ（Ｄ１，Ｄ２）についてのＸＯＲ演算最終結果、即ち対象データ（Ｄ）の演算結果を得る。データ転送制御部１２８がＸＯＲ演算最終結果を出力した後、ディスクリプタ制御部１２０は、最終のディスクリプタの処理が終了したことをＤＭＡ動作制御部１２５に通知し、ＤＭＡ動作制御レジスタ１２６を０ｘ０に設定する。以上で処理完了する。
【００９９】
＜その他＞
本ディスクリプタ１１０は、転送先アドレスと転送先データサイズ、転送元アドレスと転送元データサイズの情報を、ｍ単位の周期で繰り返す可変長な構造であり、メモリ１０２が許す限りの任意数の入力データを扱うことが可能である（図３）。また、ディスクリプタリングフラグ２２１を「ＯＮ」としたディスクリプタ１１０をディスクリプタリング方式に適用することで、複数の冗長データの生成もしくは複数のロスデータの修復を、自動連続実行することが可能である。
【０１００】
また、本例では各入力データの読み込みサイズ及び書き戻しサイズを同じ（Ｓ１ａ）にしたが、これは統一しなくともよい。その場合、データ転送制御部１２８が、処理単位毎に各リードポインタ１５０がライトポインタ１６０を超えていることを管理し、かつ各リードポインタ１５０が「ライトポインタ１６０の値」＋「処理用バッファ１７２のサイズ（Ｓ２）」を超えないよう、各リードポインタ１５０を管理する。これにより、各入力データの読み込みサイズ及び書き戻しサイズを任意に設定できる。
【０１０１】
また、本例では入力データ及び出力データのサイズを同じ（Ｓ＿Ｄ）にしたが、各転送元データサイズ及び転送先データサイズが任意であるような入力データにも対応することができる。
【０１０２】
また、本例ではＦＥＣ演算の場合を示したが、データ処理部１７０の計算回路１７１を変更した構成により、インターリーブ方式を併用したハミング符号方式及びリード・ソロモン符号方式などの誤り訂正符号方式にも対応することができる。
【０１０３】
また、ハードウェア構成及びコストに制約が無い（少ない）場合、データ処理部１７０内に、処理用バッファ１７２のサイズ（Ｓ２）として、前記Ｓ１ａ程度のサイズではなく、転送元データサイズＳ＿Ｄ分を具備してもよい。この構成の場合、計算回路１７２の演算途中結果を処理毎にメモリ１０２上へ書き戻す必要が無くなり（または少なくなり）、前記演算途中結果の書き戻しにより発生するオーバーヘッドが軽減される利点がある。
【０１０４】
本実施の形態の演算回路１０３では、演算途中結果を一旦メモリ１０２に書き戻すため、その書き戻し処理がオーバーヘッドとなるものの、軽微なオーバーヘッドである。詳しくは、従来技術では、入力データ個数Ｎｄの処理に対して外部記憶装置へのアクセスは、Ｎｄ回の読み込み処理と１回の最終演算結果書き戻し処理である。一方、本実施の形態におけるメモリ１０２へのアクセスは、Ｎｄ回のデータ読み込み処理と１回の最終演算結果書き戻し処理に加え、Ｎｄ／（ｍ−１）回の演算途中結果を書き戻す処理である。具体的に、Ｎｄ＝１００，ｍ＝１１とした場合、上記オーバーヘッドは、高々１０％である。
【０１０５】
＜効果＞
以上説明したように、本実施の形態１によれば、下記効果が得られる。本演算回路１０３では、任意数の入力データを一度に演算せずに複数に分割して演算することにより、演算回路１０３内に具備するデータレジスタ（処理用バッファ１７２）の軽減による回路コストの削減が可能となる。また、任意数のデータを入力とする演算に対して、従来技術では入力データ個数分のアドレスレジスタを演算回路内に具備する必要があるが、本実施の形態では、少ないアドレスレジスタ数（ｍ）で処理可能となる。また、本演算回路１０３では、前記複数に分割した演算の途中結果を一旦外部記憶装置１０２に書き戻し、次の演算にて前記演算途中結果を読み込んで演算する操作を繰り返すことにより、最終的な演算結果を得る。それゆえ、全ての演算結果を演算回路１０３内に保存する必要がない。従来技術では、最終的な演算結果を出力するまでの間に、演算途中の全データを演算回路内に保持する必要がある。一方、本演算回路１０３により、例えば演算回路１０３がＤＭＡ転送で一度にアクセス可能なデータサイズ（Ｓ１）に適したサイズ（Ｓ２＝Ｓ１ａ）を持つデータレジスタを具備するだけで、効率的な処理が実現可能である。
【０１０６】
（実施の形態２）
次に、更に図４，図５を用いて、本発明の実施の形態２を説明する。図４は、本演算回路１０３において、（ｍ＋２）個の入力データのＸＯＲ演算を行う場合における、外部記憶装置（１０２）に格納されたディスクリプタ（ディスクリプタリングの一部）及びその各情報から参照されるデータとの関係を示している。図５は、リング方式のディスクリプタの構成を示している。
【０１０７】
実施の形態２は、ＸＯＲ演算を行う演算回路１０３及びディスクリプタ構造を、実施の形態１とは異なる方式で実現した構成である。実施の形態２では、実施の形態１における１つのディスクリプタでの処理を、複数のディスクリプタでの処理に分割し、ディスクリプタリング方式に適用することで、任意のデータ数を入力とする演算に対応するものである。実施の形態２では、１つのディスクリプタで１つの周期の処理（第２の処理単位：Ｐ２）を行い、ディスクリプタリングにおける複数のディスクリプタで複数の周期的処理（Ｐ２）を連続実行する。演算回路１０３の構成及び動作例は、実施の形態１で示したのと同様である。但し、周期的処理（Ｐ２）を実行するたびに次のディスクリプタを読み込む処理が必要となる。
【０１０８】
また、１つのディスクリプタ１１０でｍ個のデータ分の処理（Ｐ２）を制御するので、一処理例として、図４のように、（ｍ＋２）個の入力データの演算のために、第１及び第２の２つのディスクリプタ４００，４０１を使用する例である。第１ディスクリプタ４００により、周期＃０（Ｃ１）でｍ個の入力データ（Ｄ１）の処理（Ｐ２）を行い、第２ディスクリプタ４０１により、周期＃１（Ｃ２）で残りの２個の入力データ（Ｄ２）の処理（Ｐ２）を行い、Ｃ２途中で終了する。
【０１０９】
図４において、第１ディスクリプタ４００は、データ＃０（１１３）からデータ＃ｍ−１（１１５）までのｍ個のデータ（Ｄ１）を参照する転送元アドレス及び転送元データサイズを含む。第２ディスクリプタ４０１は、残りのデータであるデータ＃ｍ（１１６）及びデータ＃ｍ＋１（１１７）の転送元アドレス及び転送元サイズを含む。なお、ディスクリプタ有効フラグ２２０、ディスクリプタリングフラグ２２１、転送ＲＥＡＤフラグ２２２、転送元アドレス数２２３、各転送元アドレス（２２４，２２６，２３０，２３２，２３４，２３６）、各転送元データサイズ（２２５，２２７，２３１，２３３，２３５，２３７）は、実施の形態１で説明したディスクリプタ１１０で示した情報と同じ定義である。
【０１１０】
＜ディスクリプタリング＞
図５において、複数のディスクリプタをリング状に配置してディスクリプタリングを構成したイメージ（リング）５０１を示している。リング５０１上に配置されるディスクリプタは、開始（先頭）ディスクリプタ、最終ディスクリプタ、終了ディスクリプタ、それ以外のディスクリプタに分類される。リング５０１における「ｖａｌｉｄ」、「ｌａｓｔ」、「ｓｉｚｅ」は、各ディスクリプタが、開始（先頭）、最終、終了、及びそれ以外の各種ディスクリプタのいずれであるかを示すフラグである。これらフラグは、それぞれ図４で示した、ディスクリプタ有効フラグ２２０、ディスクリプタリングフラグ２２１、転送元アドレス数２２３に対応している。
【０１１１】
それゆえ、「ｖａｌｉｄ＝ＯＮ」は、そのディスクリプタが有効、つまり処理すべきディスクリプタであることを示し、「ｖａｌｉｄ＝ＯＦＦ」は、無効、つまり処理する必要のないことを示す。「ｖａｌｉｄ＝ＯＦＦ」であるディスクリプタを読み込んだ演算回路１０３のディスクリプタ制御部１２８は、処理すべきディスクリプタが終了したと見なして、ディスクリプタリング５０１の処理を終了する。また、「ｌａｓｔ＝ＹＥＳ」は、そのディスクリプタが最終ディスクリプタ５０５であることを示し、ディスクリプタ制御部１２８は、この最終ディスクリプタ５０５の処理完了後、ディスクリプタリング開始アドレスレジスタ１２２で指定されるアドレス、つまり開始ディスクリプタ５０２が配置されるアドレスを参照し、開始ディスクリプタ５０２を処理する。「ｓｉｚｅ」は、そのディスクリプタのサイズを示し、次のディスクリプタが位置するアドレスを認識するために使用する。
【０１１２】
以下、本例におけるリング５０１に配置されるディスクリプタについて説明する。このディスクリプタは、例えば図４で示した第１及び第２のディスクリプタ（４００，４０１）の構造を採る。なお、ディスクリプタリング先頭アドレスポインタは、リング５０１上の開始ディスクリプタ５０２を指し示す。また、ディスクリプタリング現在アドレスポインタは、リング５０１上の現在処理しているディスクリプタを指し示す。
【０１１３】
開始ディスクリプタ５０２は、リング５０１上の処理開始位置（リング５０１の先頭位置でもある）に位置するディスクリプタである。開始ディスクリプタ５０２の「ｖａｌｉｄ＝ＯＮ」であるため、演算回路１０３は、このディスクリプタ（５０２）の処理後、その次に配置されるディスクリプタ（開始＋１ディスクリプタ５０３）の処理を連続に実行する。開始＋１ディスクリプタ５０３は、「ディスクリプタ（５０２）のアドレス」＋「ディスクリプタ（５０２）のサイズ」が指し示すアドレスに位置する。開始＋１ディスクリプタ５０３の「ｖａｌｉｄ＝ＯＮ」であるため、演算回路１０３は、そのディスクリプタ（５０３）の処理後、その次の位置のディスクリプタ（５０６）の処理を連続に実行する。以降同様に順にディスクリプタが配置されている。
【０１１４】
最終−１ディスクリプタ５０４は、最終ディスクリプタ５０５の直前に配置されるディスクリプタである。最終−１ディスクリプタ５０４の「ｖａｌｉｄ＝ＯＮ」であるため、演算回路１０３は、そのディスクリプタ（５０４）の処理後、次のディスクリプタ（５０５）の処理を連続に実行する。この最終ディスクリプタ５０５は、リング５０１上の最終位置のディスクリプタである。このディスクリプタ（５０５）では、「ｖａｌｉｄ＝ＯＮ」かつ「ｌａｓｔ＝ＹＥＳ」であるため、演算回路１０３は、そのディスクリプタ（５０５）の処理後、ディスクリプタリング開始アドレスレジスタ１２２が指すアドレスに配置される開始ディスクリプタ５０２の処理を連続に実行する。それゆえ、ユーザ（ソフトウェア）は、処理すべきデータが続く場合に演算回路１０３で処理するディスクリプタが枯渇しないように、リング５０１に従いディスクリプタを用意する必要がある。
【０１１５】
終了ディスクリプタ５０６は、処理終了位置のディスクリプタである。終了ディスクリプタ５０６は、リング５０１上のいずれかの位置に配置され、そのフラグは、「ｖａｌｉｄ＝ＯＦＦ」と指定される。演算回路１０３は、終了ディスクリプタ５０６を読み込んだ時点で処理すべきディスクリプタが終了したと見なし、リング５０１の処理を終了する。図４のディスクリプタ構成を、図５のリング５０１構成と対応させると、第１ディスクリプタ４００は、開始ディスクリプタ５０２、第２ディスクリプタ４０１は、終了ディスクリプタ５０６となる。
【０１１６】
また、本実施の形態２の構成における、複数のディスクリプタに継続して、他の演算処理を行うためのディスクリプタをリング５０１上に配置することで、複数の冗長データの生成もしくは複数のロスデータの修復を連続実行することが可能である。
【０１１７】
以上の実施の形態２の構成により、実施の形態１で説明したのと同様の効果を得る。
【０１１８】
本実施の形態の構成は、任意のデータ数を入力とする演算における出力データが比較的大きなデータとなる場合に特に効果を発揮する。この多入力１出力の演算の例としては、加算器、行列演算器、映像データデコーダ、音声データデコーダなどが挙げられる。
【０１１９】
また、本実施の形態のディスクリプタ及びアドレスレジスタの構成を改変することで、任意のデータ数を入力として演算結果の複数のデータを出力する演算処理にも応用可能である。詳しくは、転送先アドレスをディスクリプタに複数用意し、また転送先アドレスレジスタを複数具備する構成とすることで対応可能である。あるいは、転送先と転送元のアドレスの両方を指すアドレスをディスクリプタに複数用意し、また転送先と転送元のアドレスの両方を示すアドレスレジスタを複数具備する構成とすることで対応可能である。
【産業上の利用可能性】
【０１２０】
本発明は、演算回路（アクセラレータ）及びそれを用いるネットワーク通信装置などの情報処理システムに利用可能である。
【図面の簡単な説明】
【０１２１】
【図１】本発明の実施の形態１及び実施の形態２における演算回路を含んで構成されるシステムの全体の構成を示す図である。
【図２】本発明の実施の形態１において、（ｍ＋２）個の入力データを処理する場合における、外部記憶装置上のディスクリプタ及び対象データの構成を示す図である。
【図３】本発明の実施の形態１において、（ｍ＋２）個の入力データを処理する場合における、単一のディスクリプタの構造を説明するための図である。
【図４】本発明の実施の形態２において、（ｍ＋２）個の入力データを処理する場合における、外部記憶装置上のディスクリプタ及び対象データの構成を示す図である。
【図５】本発明の実施の形態２において、リング方式のディスクリプタの構造を説明するための図である。
【図６】従来技術における、誤り訂正方式の特にインターリーブ方式における、データからの冗長データの生成に関する説明のための図である。
【符号の説明】
【０１２２】
１００…ＣＰＵ、１０１…バス、１０２…外部記憶装置（メモリ）、１０３…演算回路（ハードウェアアクセラレータ）、１１０…ディスクリプタ、１１１…転送先データバッファ、１１２…転送元データバッファ、１１３…データ＃０、１１４…データ＃１、１１５…データ＃ｍ−１、１１６…データ＃ｍ、１１７…データ＃ｍ＋１、１２０…ディスクリプタ制御部、１２１…ディスクリプタ制御レジスタ、１２２…ディスクリプタリング開始アドレスレジスタ、１２３…ディスクリプタリング現在アドレスレジスタ、１２４…転送元アドレス数レジスタ、１２５…ＤＭＡ動作制御部、１２６…ＤＭＡ動作制御レジスタ、１２８…データ転送制御部、１３０…アドレスレジスタ、１３０−０…転送先・転送元アドレス＃０レジスタ、１３０−１…転送元アドレス＃１レジスタ、１３０−（ｍ−１）…転送元アドレス＃ｍ−１レジスタ、１４０…データサイズレジスタ、１４０−０…転送先・転送元データサイズ＃０レジスタ、１４０−１…転送元データサイズ＃１レジスタ、１４０−（ｍ−１）…転送元データサイズ＃ｍ−１レジスタ、１５０…リードポインタ、１５０−０…リードポインタ＃０、１５０−（ｍ−１）…リードポインタ＃ｍ−１、１６０…ライトポインタ、１７０…データ処理部、１７１…計算回路、１７２…処理用バッファ（データレジスタ）、２２０…ディスクリプタ有効フラグ、２２１…ディスクリプタリングフラグ、２２２…転送先ＲＥＡＤフラグ、２２３…転送元アドレス数、２２４…転送元アドレス＃０（転送先アドレス）、２２５…転送元データサイズ＃０、２２６…転送元アドレス＃１、２２７…転送元データサイズ＃１、２３０…転送元アドレス＃ｍ−１、２３１…転送元データサイズ＃ｍ−１、２３２…転送元アドレス＃０（転送先アドレス）、２３３…転送元データサイズ＃０、２３４…転送元アドレス＃ｍ、２３５…転送元データサイズ＃ｍ、２３６…転送元アドレス＃ｍ＋１、２３７…転送元データサイズ＃ｍ＋１、４００…第１ディスクリプタ、４０１…第２ディスクリプタ、５０１…ディスクリプタリング、５０２…開始ディスクリプタ、５０３…開始＋１ディスクリプタ、５０４…最終−１ディスクリプタ、５０５…最終ディスクリプタ、５０６…終了ディスクリプタ。
【図１】
2008129632.tif 000004
【図２】
2008129632.tif 000005
【図３】
2008129632.tif 000006
【図４】
2008129632.tif 000007
【図５】
2008129632.tif 000008
【図６】
2008129632.tif 000009