演算回路、符号化回路及び復号回路

申请号 JP2016520885 申请日 2014-05-23 公开(公告)号 JPWO2015177917A1 公开(公告)日 2017-04-20
申请人 富士通株式会社; 发明人 富田 憲範; 憲範 富田;
摘要 演算処理を高速化する。メモリ(M0〜M15)は、排他的論理和演算を行う単位となるデータブロックを保持し、選択回路(2a〜2p)は、選択 信号 を受け、メモリ(M0〜M15)から読み出される複数のデータブロックのうち、排他的論理和演算に使用する2以上のデータブロックを選択信号に基づき選択し、XOR回路(3a〜3o)(排他的論理和演算回路)は、選択回路(2a〜2p)で選択された2以上のデータブロックに基づく排他的論理和演算を行う。
权利要求

排他的論理和演算を行う単位となるデータブロックを保持する複数のメモリと、 選択信号を受け、前記複数のメモリから読み出される複数の前記データブロックのうち、排他的論理和演算に使用する2以上のデータブロックを前記選択信号に基づき選択する複数の選択回路と、 前記複数の選択回路で選択された前記2以上のデータブロックに基づく排他的論理和演算を行う1または複数の排他的論理和演算回路と、 を有することを特徴とする演算回路。前記複数の選択回路のそれぞれは論理積演算回路であり、前記論理積演算回路の、第1の入端子には、前記複数のメモリに保持されている複数の前記データブロックの何れかが入力され、第2の入力端子には、前記選択信号が入力され、前記論理積演算回路は、前記選択信号の値に基づいて、前記第1の入力端子に入力されるデータブロックを出力するか否かを選択する、ことを特徴とする請求項1に記載の演算回路。前記複数のメモリのそれぞれと、前記複数の選択回路のそれぞれとの間には、前記データブロックを保持し、保持した前記データブロックの出力タイミングを調整するレジスタが接続されていることを特徴とする請求項1または2に記載の演算回路。前記複数の排他的論理和演算回路は、複数段に渡って接続されており、前記複数の排他的論理和演算回路の一部の出力端子には、排他論理和演算の結果を格納するメモリが接続されていること、を特徴とする請求項1乃至3の何れか一項に記載の演算回路。排他的論理和演算を行う単位となるデータブロックを保持する複数のメモリと、 選択信号を受け、前記複数のメモリから読み出される複数の前記データブロックのうち、排他的論理和演算に使用する2以上のデータブロックを前記選択信号に基づき選択する複数の選択回路と、 前記複数の選択回路で選択された前記2以上のデータブロックに基づく排他的論理和演算を行い、符号化データを生成する1または複数の排他的論理和演算回路と、 を有することを特徴とする符号化回路。排他的論理和演算を行う単位となる符号化データであるデータブロックを保持する複数のメモリと、 選択信号を受け、前記複数のメモリから読み出される複数の前記データブロックのうち、排他的論理和演算に使用する2以上のデータブロックを前記選択信号に基づき選択する複数の選択回路と、 前記複数の選択回路で選択された前記2以上のデータブロックに基づく排他的論理和演算を行い、復号データを生成する1または複数の排他的論理和演算回路と、 を有することを特徴とする復号回路。

说明书全文

本発明は、演算回路、符号化回路及び復号回路に関する。

XOR(排他的論理和)演算は、例えば、送信データに付加するパリティビットを生成する際等に行われる。 近年、TCP(Transmission Control Protocol)/IP(Internet Protocol)を用いた通信時に発生するパケット欠落による通信速度の低下を回避するため、RPS(Random Packet Stream)技術が提案された。RPS技術は、データ転送時に消失したパケットを自動生成する技術である。RPS技術では、パケット復元に用いる符号化データ(冗長データ)を生成するため、送信装置にて、一定のデータ量のデータブロック間のXOR演算が多数回行われる。

特開平11−237997号公報

特開2001−147827号公報

特開平11−102301号公報

ところで、RPS技術による符号化処理のように、複数のデータブロックの組み合わせでXOR演算を多数回繰り返す処理は、ソフトウェアで行うと処理時間がかかり、通信速度の高速化が進む状況に対応できなくなることが考えられる。

そこで、XOR演算をハードウェアで行うことが考えられる。しかし、単にソフトウェアをハードウェア化するだけでは、演算の高速化にはつながらない可能性がある。例えば、あるデータブロック間のXOR演算結果を一旦メモリに格納し、その結果と別のデータブロック間でXOR演算する、といった処理を繰り返すと、メモリのデータ転送速度が遅い場合、処理時間が長くなってしまう。

発明の一観点によれば、排他的論理和演算を行う単位となるデータブロックを保持する複数のメモリと、選択信号を受け、前記複数のメモリから読み出される複数の前記データブロックのうち、排他的論理和演算に使用する2以上のデータブロックを前記選択信号に基づき選択する複数の選択回路と、前記複数の選択回路で選択された前記2以上のデータブロックに基づく排他的論理和演算を行う1または複数の排他的論理和演算回路と、を有する演算回路が提供される。

また、発明の一観点によれば、排他的論理和演算を行う単位となるデータブロックを保持する複数のメモリと、選択信号を受け、前記複数のメモリから読み出される複数の前記データブロックのうち、排他的論理和演算に使用する2以上のデータブロックを前記選択信号に基づき選択する複数の選択回路と、前記複数の選択回路で選択された前記2以上のデータブロックに基づく排他的論理和演算を行い、符号化データを生成する1または複数の排他的論理和演算回路と、を有する符号化回路が提供される。

また、発明の一観点によれば、排他的論理和演算を行う単位となる符号化データであるデータブロックを保持する複数のメモリと、選択信号を受け、前記複数のメモリから読み出される複数の前記データブロックのうち、排他的論理和演算に使用する2以上のデータブロックを前記選択信号に基づき選択する複数の選択回路と、前記複数の選択回路で選択された前記2以上のデータブロックに基づく排他的論理和演算を行い、復号データを生成する1または複数の排他的論理和演算回路と、を有する復号回路が提供される。

開示の演算回路、符号化回路及び復号回路によれば、演算処理を高速化できる。 本発明の上記及び他の目的、特徴及び利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。

第1の実施の形態による演算回路の一例を示す図である。

RPS符号化処理の一例を説明する図である。

情報処理装置の一例を示す図である。

RPS符号化処理を行うFPGAの一例について説明する図である。

第2の実施の形態による符号化回路の一例を示す図である。

制御回路の一例を示す図である。

RPS符号化行列の一例を示す図である。

RPS符号化処理の一例の流れを示すフローチャートである。

RPS符号化処理で得られた符号化データに対する復号処理の一例を説明する図である。

第2の実施の形態による復号回路の一例を示す図である。

受信符号化行列の生成例を説明する図である。

生成された受信符号化行列の一例を示す図である。

復号ベクトルの生成処理の一例の流れを示すフローチャートである。

更新された受信符号化行列の一例を示す図である。

行列opsの一例を示す図である。

行列opsの列ベクトル(復号ベクトル)と、その列ベクトルにより復号されるデータブロックとの関係の一例を示す図である。

第2の実施の形態による符号化回路の変形例を示す図である(その1)。

第2の実施の形態による符号化回路の変形例を示す図である(その2)。

第2の実施の形態による符号化回路の変形例を示す図である(その3)。

符号化処理の一例の流れを説明する図である。

以下、発明を実施するための形態を、図面を参照しつつ説明する。 (第1の実施の形態) 図1は、第1の実施の形態による演算回路の一例を示す図である。

演算回路1は、例えば、符号化処理を行う符号化回路、または復号処理を行う復号回路等である。 演算回路1は、メモリM0〜M15、選択回路2a〜2p、XOR回路3a〜3o、選択信号が入される入力端子P1、XOR演算結果が出力される出力端子P2を有する。なお、回路素子間を接続する信号線は、例えば、64ビット幅等の複数ビットを束ねていてもよい。

メモリM0〜M15は、例えば、RAM(Random Access Memory)であり、XOR演算を行う単位となる複数のデータブロックを保持する。データブロックは、例えば、符号化対象データが一定のデータサイズで分割されたものである。図1の例では、16個のデータブロックのそれぞれが、メモリM01〜M15の何れかに保持される。また、メモリM0〜M15は、それぞれ、保持したデータブロックを、選択回路2a〜2pに出力する。

選択回路2a〜2pは、入力端子P1から入力される選択信号を受け、その選択信号に基づき、メモリM0〜M15に保持されたデータブロックをXOR演算に使用するか否かを選択する。選択回路2a〜2pとしては、AND回路(論理積演算回路)を用いることができる。選択回路2a〜2pは、AND回路に限定されないが、AND回路を用いることで、簡単な回路にすることができる。

以下では、選択回路2a〜2pはAND回路であるものとして説明する。 選択回路2a〜2pは、メモリM0〜M15が出力したデータブロックと、16ビットの選択信号とのAND演算を行い、その演算結果をXOR回路3a〜3hに出力する。このとき、入力端子P1から入力される16ビットの選択信号の“1”となるビットに応じて、メモリM0〜M15に保持されている複数のデータブロックの1つまたは複数が、選択回路2a〜2pから出力される。

図1の上側には、演算回路1がRPS技術による符号化処理(以下RPS符号化処理と呼ぶ)を行う場合を想定して、RPS符号化行列の一例が示されている。RPS符号化行列は、図示しない記憶部に記憶されており、選択信号として、16ビットの列ベクトルが入力端子P1に順番に入力される。図1のRPS符号化行列は、16行30列の行列である。列ベクトルにおける行は、メモリM0〜M15に対応している。つまり、列ベクトルにおけるある行の値が“1”のときには、その行に対応するメモリに保持されているデータブロックがXOR演算に用いられる。

例えば、列番号が17の列ベクトルが入力端子P1から入力された場合、1,3,5〜13,15行目に対応した、メモリM0,M2,M4,…,M12,M14に保持されているデータブロックが、選択回路2a,2c,2e,…,2m,2oから出力される。

また、列番号が25の列ベクトルが入力端子P1から入力された場合、2,4,…,12,14,16行目に対応した、メモリM1,M3,…,M11,M13,M15に保持されているデータブロックが、選択回路2b,2d,…,2l,2n,2pから出力される。

XOR回路3a〜3oは、選択回路2a〜2pで選択されたデータブロックに基づくXOR演算を行う。XOR演算結果は、出力端子P2から出力される。 XOR回路3aの2つの入力端子は、選択回路2a,2bの出力端子に接続されており、XOR回路3bの2つの入力端子は、選択回路2c,2dの出力端子に接続されている。また、XOR回路3cの2つの入力端子は、選択回路2e,2fの出力端子に接続されており、XOR回路3dの2つの入力端子は、選択回路2g,2hの出力端子に接続されている。また、XOR回路3eの2つの入力端子は、選択回路2i,2jの出力端子に接続されており、XOR回路3fの2つの入力端子は、選択回路2k,2lの出力端子に接続されている。また、XOR回路3gの2つの入力端子は、選択回路2m,2nの出力端子に接続されており、XOR回路3hの2つの入力端子は、選択回路2o,2pの出力端子に接続されている。

XOR回路3iの2つの入力端子は、XOR回路3a,3bの出力端子に接続されており、XOR回路3jの2つの入力端子は、XOR回路3c,3dの出力端子に接続されている。また、XOR回路3kの2つの入力端子は、XOR回路3e,3fの出力端子に接続されており、XOR回路3lの2つの入力端子は、XOR回路3g,3hの出力端子に接続されている。XOR回路3mの2つの入力端子は、XOR回路3i,3jの出力端子に接続されており、XOR回路3nの2つの入力端子は、XOR回路3k,3lの出力端子に接続されている。XOR回路3oの2つの入力端子は、XOR回路3m,3nの出力端子に接続されており、XOR回路3oの出力端子は、出力端子P2に接続されている。

図1の例では、上記のようにXOR回路3a〜3oは、ツリー状(トーナメント状)に接続されている。なお、XOR回路は2入力に限定されず、3入力以上としてもよく、例えば、1つのXOR回路で選択回路2a〜2pから出力されるデータブロックのXOR演算を行ってもよい。

(演算回路1の動作例) 以下、演算回路1の動作の一例を説明する。なお、以下では図1に示されているようなRPS符号化行列の列ベクトルが、選択回路2a〜2pに入力される選択信号であるものとして説明する。

入力端子P1には、列番号が0から29までの列ベクトルが選択信号として順に入力される。 列番号が0〜15までの各列ベクトルでは、ある行の値が1であり、他の行の値は0である。選択信号としてこのような列ベクトルが入力端子P1に入力されたときには、値が1の行に対応するメモリに保持されているデータブロックが、選択回路2a〜2pの何れかから出力される。その他の選択回路からは、0が出力される。

これにより、上記のような接続関係をもつXOR回路3a〜3oの最後段のXOR回路3oからは、メモリM0〜M15の何れかに保持されたデータブロックそのものが出力される。

列番号が16〜29までの各列ベクトルでは、複数の行の値が1である。選択信号としてこのような列ベクトルが入力端子P1に入力されたときには、値が1の行に対応するメモリに保持されている複数のデータブロックが、選択回路2a〜2pの何れか2以上から出力される。その他の選択回路からは、0が出力される。

これにより、上記のような接続関係をもつXOR回路3a〜3oの最後段のXOR回路3oからは、選択回路2a〜2pの何れか2以上から出力される複数のデータブロックのXOR演算結果が出力される。

以上のように、本実施の形態による演算回路1は、一旦複数のメモリM0〜M15で各データブロックを保持し、メモリM0〜M15から読み出された複数のデータブロックから、選択回路2a〜2pで演算に用いるものを選びXOR回路3a〜3oに渡す。このような並列化処理により、RPS符号化処理のように複数のデータブロック間の組み合わせで多くのXOR演算を行う際、演算処理が効率化され、高速な演算が可能になる。

(第2の実施の形態) 以下、XOR演算を行う演算回路の例として、送信回路に含まれ、RPS符号化処理を行う符号化回路、また受信回路に含まれ、RPS符号化処理で符号化された符号化データを復号する復号回路を説明する。

まず、RPS符号化処理の一例を説明する。 図2は、RPS符号化処理の一例を説明する図である。 まず、RPS符号化による処理では、データが、一定サイズのデータブロックに分割される。ここでは、説明のため、16KBのデータが、1KBごとの16個のデータブロックに分割されるとし、分割された端子ブロックをブロックb0〜b15とする。

次に、符号化回路は、データの分割により得られたブロックb0〜b15から1つまたは複数個を選択して、選択されたブロックでXOR演算を行うことで、符号化データd0〜d15及び冗長符号化データe0〜e13を生成する。

その後、符号化データ等に、パケットとして、そのパケットヘッダに組み合わせ情報(後述の例では、図7のRPS符号化行列の列ベクトル)が追加され、さらに通信パケットヘッダが付与された後、UDP(User Datagram Protocol)通信により送信される。このとき、伝送経路でパケットの消失や入れ換えが生じても、受信側は、受信した符号化データ等と、受信した組み合わせ情報(後述の例では、図12の受信符号化行列)にガウスの消去法等を適用することで、元の送信データを復号することができる。

次に、データ通信に用いる情報処理装置の一例を説明する。 図3は、情報処理装置の一例を示す図である。 情報処理装置4は、コンピュータ5と、コンピュータ5に装着された機能拡張ボード6を有する。コンピュータ5は、CPU(Central Processing Unit)5A、主記憶部5B、PCIe(PCI express)バス5Cを有している。機能拡張ボード6には、メモリチップ6A、FPGA(Field-Programmable Gate Array)6B、LAN(Local Area Network)コネクタ6Cが搭載されている。また、CPU5AとFPGA6Bは、PCIeバス5Cを介して接続されている。

CPU5Aは、送信データを図示しないHDD(Hard Disk Drive)等から読み出し、主記憶部5Bに格納させる。また、FPGA6Bに、RPS符号化処理の実行等を指示する。

主記憶部5Bは、送信データや、CPU5Aによる処理に必要な各種データを格納している。主記憶部5Bには、例えば、RAMが用いられる。 メモリチップ6Aは、FPGA6Bの有するDMA(Direct Memory Access)コントローラにより、主記憶部5Bから転送されてきたデータを格納する。メモリチップ6Aには、例えば、RAMが用いられる。

FPGA6Bは、データのRPS符号化処理等を行い、通信用のパケットを生成し、LANコネクタ6Cに出力する。 LANコネクタ6Cは、FPGA6Bが出力したパケットを、ネットワークを介して、図示しない受信装置等に転送する。

(FPGA6Bの一例) 図4は、RPS符号化処理を行うFPGAの一例について説明する図である。 なお、図4では、送信データのRPS符号化処理以外の制御及び機能を実行する部分については図示が省略されている。

FPGA6Bは、PCIeインターフェース6B1、メモリコントローラ6B2、通信処理回路6B3、制御回路7、符号化回路8を有する。 PCIeインターフェース6B1は、I/Oデバイス等によるPCIeエンドポイントであり、PCIeバス5Cを介して転送されてきたデータ等に対して、物理層、データリンク層における処理等を行う。

メモリコントローラ6B2は、メモリチップ6Aに格納されたデータを、一定サイズのデータブロックに分割し、BRAM(Block RAM)m0〜m15に転送するメモリインターフェースである。メモリコントローラ6B2は、例えば、図2に示したように、16KBのデータを、一定サイズ1KBの16個のブロックb0〜b15に分割し、BRAMm0〜m15に転送する。

通信処理回路6B3は、符号化回路8が出力した符号化データ等に対して、ネットワーク層、データリンク層、物理層における処理等を行い、通信用のパケットを生成してLANコネクタ6Cに出力する。

制御回路7は、符号化回路8が符号化データを生成する際の制御等を行う回路である。制御回路7の回路構成については、後述する。 符号化回路8は、複数のデータブロック間のXOR演算を行うことで、符号化データを生成する回路である。図2の例では、符号化回路8は、ブロックb0〜b15間のXOR演算を行い、符号化データd0〜d15及び冗長符号化データe0〜e13を生成する。

(符号化回路8の一例) 図5は、第2の実施の形態による符号化回路の一例を示す図である。 符号化回路8は、BRAMm0〜m15、レジスタ9a〜9p、AND回路10a〜10p、XOR回路11a〜11o、レジスタ12a〜12o、入力端子P3,P4,P5、出力端子P6を有する。

入力端子P3には、BRAMm0〜m15へのデータブロックの書き込みを可能にするWE(Write Enable)信号が、制御回路7から入力される。 入力端子P4には、BRAMm0〜m15がデータブロックを書き込む際の書き込みアドレス信号や、BRAMm0〜m15がデータブロックを読み出してAND回路10a〜10pに出力する際の読み出しアドレス信号が、制御回路7から入力される。

入力端子P5には、AND回路10a〜10pに、後述するRPS符号化行列の列ベクトルの各要素が、制御回路7から入力される。 符号化回路8には、メモリチップ6Aからメモリコントローラ6B2を介して、一定サイズに分割された16個のデータブロックが供給される。

BRAMm0〜m15は、入力端子P3,P4を介して制御回路7から書き込みアドレス信号及びWE信号が入力されると、供給された16個のデータブロック、例えば、図2のブロックb0〜b15を、それぞれ1ブロックずつ書き込み格納する。また、BRAMm0〜m15は、入力端子P3を介して制御回路7から読み出しアドレス信号が入力されると、それぞれ、格納したデータブロックを読み出し、例えば、64ビットずつ、レジスタ9a〜9pに出力する。

レジスタ9a〜9pは、BRAMm0〜m15のそれぞれと、AND回路10a〜10bのそれぞれとの間に接続されている。レジスタ9a〜9pは、BRAMm0〜m15が出力したデータブロックを保持し、保持したデータブロックのAND回路出力タイミングを調整する。例えば、レジスタ9a〜9bは、図示しないクロック信号に同期したタイミングで、BRAMm0〜m15から供給されたデータブロックを保持し、出力する。BRAMm0〜m15から、AND回路10a〜10pまでの距離にばらつきがある場合、AND回路10a〜10pの入力側にこのようなレジスタ9a〜9pを設けることで、AND回路10a〜10pへの入力タイミングをそろえることができる。

AND回路10a〜10pは、選択回路として機能する。AND回路10a〜10pは、それぞれ、BRAMm0〜m15が出力したデータブロックと、入力端子P5から入力されたRPS符号化行列の各値(選択信号に相当する)とのAND演算を行い、その演算結果をXOR回路11a〜11hに出力する。このとき、AND回路10a〜10pは、それぞれ、入力端子P5を介して入力された列ベクトルの値が“1”となる行に対応したBRAMm0〜m15に保持されているデータブロックを選択し出力する。RPS符号化行列の列ベクトルについては後述する。

XOR回路11a〜11oは、AND回路10a〜10pが選択し出力したデータブロック間のXOR演算を行い、その演算結果を出力端子P6に出力する。 XOR回路11aの2つの入力端子は、AND回路10a,10bの出力端子に接続されており、XOR回路11bの2つの入力端子は、AND回路10c,10dの出力端子に接続されている。また、XOR回路11cの2つの入力端子は、AND回路10e,10fの出力端子に接続されており、XOR回路11dの2つの入力端子は、AND回路10g,10hの出力端子に接続されている。また、XOR回路11eの2つの入力端子は、AND回路10i,10jの出力端子に接続されており、XOR回路11fの2つの入力端子は、AND回路10k,10lの出力端子に接続されている。また、XOR回路11gの2つの入力端子は、AND回路10m,10nの出力端子に接続されており、XOR回路11hの2つの入力端子は、AND回路10o,10pの出力端子に接続されている。

XOR回路11iの2つの入力端子は、レジスタ12a,12bを介してXOR回路11a,11bの出力端子に接続されている。XOR回路11jの2つの入力端子は、レジスタ12c,12dを介してXOR回路11c,11dの出力端子に接続されている。また、XOR回路11kの2つの入力端子は、レジスタ12e,12fを介してXOR回路11e,11fの出力端子に接続されている。また、XOR回路11lの2つの入力端子は、レジスタ12g,12hを介してXOR回路11g,11hの出力端子に接続されている。XOR回路11mの2つの入力端子は、レジスタ12i,12jを介してXOR回路11i,11jの出力端子に接続されている。XOR回路11nの2つの入力端子は、レジスタ12k,12lを介してXOR回路11k,11lの出力端子に接続されている。XOR回路11oの2つの入力端子は、レジスタ12m,12nを介してXOR回路11m,11nの出力端子に接続されており、XOR回路11oの出力端子は、レジスタ12oを介して出力端子P6に接続されている。出力端子P6は、XOR回路11a〜11oが行ったデータブロック間のXOR演算結果を、符号化データ(前述の符号化データと冗長符号化データを含む)として通信処理回路6B3(図4)に出力する。

レジスタ12a〜12pは、レジスタ9a〜9pと同様の機能をもち、XOR回路11a〜11o間のデータ入出力のタイミング調整を行う。 図5の例では、上記のようにXOR回路11a〜11oは、複数段に渡ってツリー状(トーナメント状)に接続されている。なお、XOR回路は2入力に限定されず、3入力以上としてもよく、例えば、1つのXOR回路でAND回路10a〜10pから出力されるデータブロックのXOR演算を行ってもよい。

(制御回路7の一例) 図6は、制御回路の一例を示す図である。 制御回路7と前述した符号化回路8との接続を説明するために、符号化回路8の一部についても図示されている。

なお、図6では、符号化処理の制御を行う部分以外については、図示が省略されている。 制御回路7は、メイン制御回路13を有している。メイン制御回路13は、加算器14、レジスタ15、符号化行列保持部16、比較回路17、レジスタ18、加算器19を有している。さらに、制御回路7は、レジスタ20,21を有する。

加算器14は、例えば、1を保持するフリップフロップを有し、レジスタ15に保持されているアドレスをインクリメント(+1)する。 レジスタ15は、BRAMm0〜m15の書き込みアドレスや読み出しアドレスを保持し、また、保持した書き込みアドレスや読み出しアドレスを、入力端子P3を介して、BRAMm0〜m15に出力する。レジスタ15は、図示しないクロック信号に同期して、保持しているアドレスに、加算器14により+1加算されたアドレスを保持する。

符号化行列保持部16は、例えば、複数のレジスタを有し、RPS符号化行列を格納する。 図7は、RPS符号化行列の一例を示す図である。

図7に示すRPS符号化行列は、16行30列の行列である。 RPS符号化処理による符号化データは、RPS符号化行列の列ベクトルごとに生成される。RPS符号化行列の列番が0〜15の列ベクトルは、図2の例では、符号化データd0〜d15を生成する際に用いられる列ベクトルである。また、RPS符号化行列の列番が16〜29の列ベクトルは、図2の例では、冗長符号化データe16〜e29を生成する際に用いられる列ベクトルである。

列ベクトルにおける行は、BRAMm0〜m15に対応している。つまり、列ベクトルにおけるある行の値が“1”のときには、その行に対応するBRAMに保持されているデータブロックがXOR演算に用いられる。

図6の符号化行列保持部16は、RPS符号化行列の列ベクトルを、レジスタ18から出力される列番号に応じて、レジスタ21に出力する。初期状態の場合、レジスタ18に保持された値は0であるので、符号化行列保持部16は、列番号が0(j=0)の列ベクトルを、レジスタ21に出力する。

比較回路17は、加算器14でのインクリメント回数に基づき、BRAMm0〜m15に1データブロック分(例えば、1KB)の書き込みが終わったかを判定し、1データブロック分の書き込みが終わると、レジスタ18にセット信号を出力する。

レジスタ18は、RPS符号化行列の列番号を保持する。また、レジスタ18は、比較回路17が出力するセット信号を受けると、図示しないクロック信号に同期して、保持している列番号に、加算器19により+1加算された列番号の値を保持する。

加算器19は、例えば、1を保持するフリップフロップを有し、レジスタ18に保持されている列番号をインクリメントする。 レジスタ20は、BRAMm0〜m15への書き込みが可能になると、メイン制御回路13内の、図示しないWE信号生成部で生成されるWE信号を保持する。また、レジスタ20は、保持しているWE信号を、入力端子P4を介して、BRAMm0〜15に出力する。

レジスタ21は、保持しているRPS符号化行列の列ベクトルの各値を、入力端子P5を介して、AND回路10a〜10pに出力する。例えば、列ベクトルの1行目の値はAND回路10aへ、2行目の値はAND回路10bへと、順次、入力される。

なお、本実施の形態による符号化回路8は、FPGA6B内に含まれるものとしたが、ASIC(Application Specific Integrated Circuit)等で実現するようにしてもよい。

(RPS符号化処理の一例) 以下、符号化回路8によるRPS符号化処理の一例を説明する。 図8は、RPS符号化処理の一例の流れを示すフローチャートである。

まず、BRAMm0〜m15への、データブロックの書き込みが行われる(ステップS1)。ステップS1の処理では、制御回路7がWE信号をアサートし、BRAMm0〜15に書き込みアドレスを供給する。そして、BRAMm0〜m15は、メモリチップ6Aからメモリコントローラ6B2を介して一定サイズに分割された16個のデータブロックを書き込む。

また、メイン制御回路13は、列番号jを0に設定する(ステップS2)。ステップS2の処理では、メイン制御回路13のレジスタ18の初期値が0に設定される。 次に、制御回路7は、RPS符号化行列の列番号jの列ベクトルの各値をAND回路10a〜10pに入力する(ステップS3)。ステップS3の処理では、図6に示したようなレジスタ21が、入力端子P5を介して、保持しているRPS符号化の列番号jの列ベクトルの各値を、AND回路10a〜10pに入力する。

例えば、列番号jの列ベクトルの1行目の値はAND回路10aへ、2行目の値はAND回路10bへと、順次、入力される。このとき、AND回路10a〜10pは、列番号jの列ベクトルの各値と、BRAMm0〜15のデータブロックとのAND演算を行い、その演算結果をXOR回路11a〜11hに出力する。これにより、AND回路10a〜10pは、列ベクトルの“1”となる行の値に応じて、BRAMm0〜15に保持されているデータブロックを選択しXOR回路11a〜11hに出力する。例えば、図7に示すRPS符号化行列の列番号が0の列ベクトル(j=0)がAND回路10a〜10pに入力された場合、1行目の値のみが“1”であるため、1行目の値が入力されるAND回路10aは、BRAMm0のデータブロックを選択し出力する。

その後、符号化回路8は、XOR演算を行う(ステップS4)。ステップS4の処理では、XOR回路11a〜11hにより、BRAMm0〜m15に保持されているデータブロックを用いたXOR演算が行われる。

列番号jが0〜15までの各列ベクトルは、ある行の値が1であり、他の行の値は0である。このような列ベクトルが入力端子P5に入力されたときには、上記のような接続関係をもつXOR回路11a〜11oの最後段のXOR回路11oからは、値が1の行に対応するBRAMに保持されているデータブロックそのものが出力される。

列番号が16〜29までの各列ベクトルは、複数の行の値が1である。このような列ベクトルが入力端子P5に入力されたとき、上記のような接続関係をもつXOR回路11a〜11oの最後段のXOR回路11oからは、AND回路10a〜10pの何れか2以上から出力される複数のデータブロックのXOR演算結果が出力される。

次に、メイン制御回路13は、列番号jが最大値である29に達したか否かを判定し(ステップS5)、列番号jが29より小さい間は、加算器19により列番号jに+1を加算させる(ステップS6)。ステップS6の後は、ステップS3からの処理が繰り返される。

また、列番号jが29に達した場合、1データブロックに関するRPS符号化処理は完了する。符号化回路8が、次のデータブロックに関するRPS符号化処理を行う際には、ステップS1からの処理が繰り返される。

その後、符号化回路8から出力される符号化データ及び冗長符号化データは、通信処理回路6B3の処理等を経て、パケットとして転送される。また、このとき、符号化に用いられた列ベクトルは、そのパケットヘッダに追加され、符号化データ及び冗長符号化データと共に転送される。

以上のように、本実施の形態による符号化回路8は、一旦複数のBRAMm0〜m15で各データブロックを保持し、列ベクトルの値に基づきAND回路10a〜10pで演算に用いるデータブロックを選びXOR回路11a〜11oでXOR演算する。このような並列化処理により、多くのXOR演算を行うRPS符号化処理等において、演算処理が効率化され、高速な演算(符号化処理)が可能になる。

なお、符号化回路8において、BRAMm0〜m15を64ビット×512ワードで使用する場合、BRAMm0〜m15は、1KBのデータブロックであれば、それぞれ、4個分のデータブロックを保持することが可能となる。これにより、BRAMm0〜m15は、4個分のデータブロックを連続してレジスタ9a〜9pへ入力することができるので、符号化処理のスループットがより向上する。さらには、BRAMm0〜m15を、書き込みと読み出しが同時実行可能なデュアルポートメモリにすることで、BRAMへ新たなデータブロックを書き込む時間を隠ぺいすることが可能になるため、よりスループットを向上できる。

次に、復号処理の一例を説明する。 (復号処理の一例) 図9は、RPS符号化処理で得られた符号化データに対する復号処理の一例を説明する図である。

図9では、前述した符号化回路8から、ネットワークを介して、復号回路(図10参照)に送られてくるパケットに含まれる符号化データd0〜d15及び冗長符号化データe0〜e13を復号する様子が示されている。

復号回路(図10参照)では、受信したパケットのヘッダが参照され、ヘッダから符号化に用いたデータブロックの組み合わせ情報(RPS符号化行列の列ベクトル)が抽出される。

符号化データd0,d1,d3〜d15は、データブロックであるブロックb0,b1,b3〜b15に相当するので、そのまま出力される。 図9の例では、符号化データd2を含むパケットが消失している例が示されている。復号回路は、受信できた符号化データ及び冗長符号化データと、抽出した組み合わせ情報から、消失したパケットのブロックb2を生成(復号)する。例えば、ブロックb2は、図9に示すように、符号化データd0,d1,d3,…,d15、冗長符号化データe0のXOR演算により生成される。

このように、復号回路でも、XOR演算が行われ、回路構成は符号化回路8と同様なものとなる。 次に、復号処理を行う際に用いる復号回路について、図10を用いて説明する。なお、復号回路は、例えば、図3に示したFPGA6B内に符号化回路8と共に含まれていてもよい。復号回路を制御する制御回路については、図6に示したような制御回路7と同様の回路で実現できる。

(復号回路の一例) 図10は、第2の実施の形態による復号回路の一例を示す図である。 復号回路8aは、BRAMn0,n1,n2,n3,…,n26,n27,n28,n29、レジスタra0,ra1,ra2,ra3,…,ra26,ra27,ra28,ra29を有している。さらに復号回路8aは、AND回路a0,a1,a2,a3,…,a26,a27,a28,a29とXOR回路部22、入力端子P13〜P15、出力端子P16を有する。

入力端子P13には、BRAMn0〜n29の符号化データ等の書き込みを可能にするWE信号が入力される。 入力端子P14には、BRAMn0〜n29が符号化データ等を書き込む際の書き込みアドレスや、BRAMn0〜n29が符号化データ等を読み出してAND回路a0〜a29に出力する際の読み出しアドレスが入力される。

入力端子P15には、AND回路a0〜a29に供給される、後述する復号ベクトルの各値が入力される。 BRAMn0〜n29は、入力端子P13,P14を介して、書き込みアドレス、WE信号が入力されると、受信された符号化データ等を、それぞれ、1ブロックずつ書き込み保持する。また、BRAMn0〜n29は、入力端子P13を介して読み出しアドレスが入力されると、それぞれ、保持している符号化データ等を、例えば、64ビットずつ、レジスタra0〜ra29に出力する。

BRAMn0〜n29は、符号化回路8が出力する30個のデータブロック(符号化データ)、すなわち符号化データd0〜d15と冗長符号化データe0〜e13に対応して、30個ある。レジスタra0〜ra29、AND回路a0〜a29も同様である。

レジスタra0〜ra29は、図5に示したレジスタ9a〜9pと同様の機能を有する。 AND回路a0〜a29は、図5に示したAND回路10a〜10pと同様に選択回路として機能する。AND回路a0〜a29は、それぞれ、BRAMn0〜n29が出力した符号化データまたは冗長符号化データと、入力端子P5から入力された復号ベクトル(選択信号として機能する)の各値とのAND演算を行う。そして、AND回路a0〜a29は、その演算結果をXOR回路部22に出力する。このとき、AND回路a0〜a29は、それぞれ、入力端子P15を介して入力された復号ベクトル(列ベクトル)が“1”となる行に応じて、BRAMn0〜n29の符号化データまたは冗長符号化データを選択し出力する。

XOR回路部22は、図示を省略しているが、例えば、図5に示した符号化回路8と同様に、複数のXOR回路とレジスタがツリー状に接続されている回路となっている。 XOR回路部22は、AND回路a0〜a29により選択され入力された符号化データまたは冗長符号化データのXOR演算を行い、元のデータブロックを復号する。

出力端子P16は、復号された元のデータブロックを出力する。 以下、復号回路8aの動作を説明する前に、復号処理に用いる復号ベクトルの生成処理を説明する。

(復号ベクトルの生成処理例) 復号ベクトルは、例えば、復号回路8aを制御する図示しない制御回路にて生成される。

復号ベクトルの生成にあたって、まず、以下のような受信符号化行列が生成される。 図11は、受信符号化行列の生成例を説明する図である。 また、図12は、生成された受信符号化行列の一例を示す図である。

RPS符号化処理で符号化されたデータ(符号化データまたは冗長符号化データ)を含むパケットのヘッダには、RPS符号化行列の列ベクトルが含まれている。 例えば、受信側の制御回路は、上記のようなパケットを受信するたびに、ヘッダから上記列ベクトルを抽出し、列番号=0から受信順に並べていくことで、図12に示すような受信符号化行列を生成する。

図12に示す受信符号化行列(16行16列)は、16個のパケットを受信した時点で生成されたものである。以下では、受信符号化行列の列ベクトルを、例えば、列番号cを用いて列ベクトルD(c)と表すものとし、列ベクトルD(c)のu行目の値を、要素[u]と表すものとする。

なお、図12に示されている「基底ベクトル」と、「基底ベクトル候補」については後述する。 上記のような受信符号化行列から、復号ベクトルが生成される。

復号処理は、例えば、1次の連立方程式の解法として知られているガウスの消去法に似ている。例えば、1次の連立方程式における、解の係数である行列がA、解である列ベクトルがX、定数である列ベクトルがCであるとしたとき、1次の連立方程式は、AX=Cと表せる。そして、AX=Cに対し、行列Aが単位行列Eとなるように、ガウスの消去法が適用され、EX=C1、すなわち、X=C1が求められる。

本実施の形態による復号処理では、受信符号化行列は行列A、元のデータブロックは列ベクトルX、符号化データまたは冗長符号化データは列ベクトルCで表される。 ここで、復号回路8aのAND回路a0〜a29に入力される選択信号として機能する復号ベクトルは、受信符号化行列に基づき、例えば、復号回路8aを制御する図示しない制御回路において、例えば、以下のように生成される。

図13は、復号ベクトルの生成処理の一例の流れを示すフローチャートである。 まず、複数の復号ベクトルの値が代入される行列opsの初期化が行われる(ステップS10)。

行列opsの初期化は、行列opsの対要素が1、その他の要素が0となる単位行列を算出することにより行われる。また、行列opsは、受信符号化行列の列数と、同数の行数及び列数をもつ。

次に、受信符号化行列の列番号cが0に設定される(ステップS11)。列番号cは、後述のステップS13の処理で、基底ベクトルまたは基底ベクトル候補の列番号が代入される変数である。

その後、受信符号化行列に含まれる列ベクトルについて、基底ベクトル、基底ベクトル候補の決定が行われる(ステップS12)。 基底ベクトルは、1となる要素を1つだけ有し、また、互いに直交するベクトルである。また、以下において、要素[u](行番号がuの値)が1となる基底ベクトルを、要素[u]の基底ベクトルという。図12に示した受信符号化行列の例において、列番号cの列ベクトルをD[c]とすると、列番号cが0〜12の列ベクトルD(0)〜D(12)が、それぞれ、要素[3]〜[12]の基底ベクトルと決定される。

基底ベクトル候補は、受信符号化行列に要素[u]の基底ベクトルが存在しない場合、要素[u]が1となる列ベクトルのことである。例えば、図12に示した受信符号化行列では、要素[0]〜[2]の基底ベクトルが存在しない。そのため、要素[0]が1となる列ベクトルD(13)が要素[0]の基底ベクトル候補、要素[2]が1となる列ベクトルD(14)が要素[2]の基底ベクトル候補と決定される。また、要素[1]が1となる列ベクトルD(15)が要素[1]の基底ベクトル候補と決定される。

次に、受信符号化行列の列ベクトルを、基底ベクトルへと変換していく処理が行われる(ステップS13)。 ステップS13の処理では、まず、受信符号化行列において、基底ベクトル(または基底ベクトル候補)の1となる要素と同じ行番号で要素が1となる列ベクトルが検出される。そして、検出された列ベクトルの当該要素を、当該要素と基底ベクトルの当該要素とのXOR演算結果で更新する。1と1のXOR演算結果は0であるため、検出された列ベクトルの当該要素は0となる。このような処理が受信符号化行列の各基底ベクトル(または基底ベクトル候補)で繰り返されることにより、受信符号化行列の基底ベクトル候補が、基底ベクトルに変換される。

図14は、更新された受信符号化行列の一例を示す図である。 ステップS13の処理によって、図12に示した基底ベクトル候補であった列ベクトルD(13)〜(15)が、図14に示されているように要素[0]〜[1]の基底ベクトルとなっている。

また、上記のステップS13の処理では、受信符号化行列の基底ベクトル候補を基底ベクトルに変換させていく際のXOR演算処理結果が、行列opsの各要素に代入されていき、例えば、以下のような行列opsが生成される。

図15は、行列opsの一例を示す図である。 行列opsの各要素には、受信符号化行列の基底ベクトル候補を基底ベクトルへと変換していく際の、XOR演算結果が代入されている。以下、行列opsの列番号iの列ベクトルを列ベクトルop(i)と表記する。

図12に示した受信符号化行列では、列ベクトルD(13)〜D(15)を基底ベクトルに変換するために、上記のようなXOR演算による更新処理が行われる。そのXOR演算結果により、行列opsの列ベクトルop(13)〜(15)は、行列の対角要素以外で、1となる要素を有している。

この行列opsの列ベクトルが復号ベクトルとして用いられる。 図16は、行列opsの列ベクトル(復号ベクトル)と、その列ベクトルにより復号されるデータブロックとの関係の一例を示す図である。

なお、図16では、図15に示した行列opsの列ベクトルop(0)〜op(15)のそれぞれが、便宜的に、32ビットの2進数で表現されている。 列ベクトルop(0)〜op(15)の右端の要素が、ビット0であり、列ベクトルop(0)〜op(15)の1行目の要素に対応している。

上記のように、行列opsの列ベクトルop(0)〜op(15)の値は、対応する列番号の受信符号化行列の列ベクトルを基底ベクトルへと変更していく際のXOR演算結果の値となっている。

このような行列opsの列ベクトルを復号ベクトルとして用いることにより、復号回路8aでは、符号化データまたは冗長符号化データ間で、受信符号化行列を基底ベクトルへと変換していく際のXOR演算と同様の処理が行われる。

行列opsの列ベクトルop(0)〜op(15)により復号できるデータブロックは、その列ベクトルop(0)〜op(15)と同じ列番号の更新後の受信符号化行列の基底ベクトルの1となる要素の行番号に対応する。

また、ここで、受信符号化行列は、符号化行列(図7)の列ベクトルから生成されているので、受信符号化行列の1〜16行目の各要素は、符号化行列と同様に、データブロックが格納されたBRAMm0〜m15に対応する。すなわち、行列opsの列ベクトルにより復号されるデータブロックは、その列ベクトルと同じ列番号の、更新後の受信符号化行列の基底ベクトルの1となる要素の行番号に対応したBRAMに保持していたデータブロックとなる。

例えば、列ベクトルop(2)を用いてデータブロックを復号する場合、更新後の受信符号化行列(図14)において、行列opsの列ベクトルop(2)と同じ列番号となる列ベクトルは、列ベクトルD(2)である。また、列ベクトルD(2)は、要素[5]が1の基底ベクトルであるため、受信符号化行列の行番号5に対応したBRAMm5に格納されたブロックb5が復号される。

列ベクトルop(15)を用いてデータブロックを復号する場合、更新後の受信符号化行列(図14)において、行列opsの列ベクトルop(15)と同じ列番号となる列ベクトルは、列ベクトルD(15)である。また、列ベクトルD(15)は、要素[2]が1の基底ベクトルであるため、受信符号化行列の行番号2に対応したBRAMm2に格納されたブロックb2が復号される。

なお、パケット通信において、伝送経路で、消失した符号化データが少ない場合には、予め、復号ベクトルを計算しておき、復号回路8aを制御する図示しない制御回路内の記憶部に格納しておくこともできる。

(復号回路8aの動作) 図10に示したような復号回路8aは、複数のBRAMn0〜n29で各データブロック(符号化データ(冗長符号化データも含む))を保持し、上記のような復号ベクトルの値に基づきAND回路a0〜a29で演算に用いるデータブロックを選ぶ。そして、選ばれたデータブロック間でのXOR演算が、XOR回路部22で行われる。このような並列化処理により、多くのXOR演算を行う復号処理において、演算処理が効率化され、高速な演算が可能になる。

なお、復号回路8aにより、元のデータブロックがすべて再現(復号)された場合、復号回路8aを含む受信側の装置は、送信側の装置に対して復号完了信号を送るようにしてもよい。例えば、パケットの欠落がない場合には、符号化データd0〜d15を含む複数のパケットの受信が完了すると、受信側の装置は、復号完了信号を送信側の装置に送る。送信側の装置では、復号完了信号を受信した時点で、図8に示したような符号化回路8での符号化処理を停止させる。これにより、図7に示したようなRPS符号化行列のすべての列ベクトルに関して、XOR演算を行わなくてもよくなる。

(変形例) 図17,18は、第2の実施の形態による符号化回路の変形例を示す図である。なお、図17,18は、図5に示した符号化回路8の一部に対応している。符号化回路8と同様の要素については、図5と同一の符号を付し、その説明を省略する。

図17において、XOR回路11aの出力側に、BRAM30が接続されている。また、レジスタ12aとBRAM30の出力側に、セレクタ31が接続されている。 BRAM30は、XOR回路11aのXOR演算結果、すなわち、BRAMm0〜m1のデータブロック間のXOR演算結果を保持する。また、セレクタ31は、入力される選択信号に基づき、レジスタ12aと、BRAM30の何れかを選択し出力する。選択信号は、例えば、図4に示した制御回路7から供給される。

図18において、XOR回路11iの出力側に、BRAM32が接続されている。また、レジスタ12iとBRAM32の出力側に、セレクタ33が接続されている。 BRAM32は、XOR回路11iのXOR演算結果、すなわち、BRAMm0〜m3のデータブロック間のXOR演算結果を保持する。また、セレクタ33は、入力される選択信号に基づき、レジスタ12iと、BRAM32の何れかを選択し出力する。選択信号は、例えば、図4に示した制御回路7から供給される。

図17,18では、XOR回路11a,11iの出力側にBRAM30,32やセレクタ31,33を設ける例について説明したが、同様にして、他のXOR回路11b〜11h,11j〜nの出力側に設けることもできる。

図19は、第2の実施の形態による符号化回路の変形例を示す図である。なお、図19に示す符号化回路8bは、図5に示した符号化回路8の一部にBRAM及びセレクタを設けたものである。また、符号化回路8と同様の要素については、図5に示した要素と同一の符号を付し、その説明を省略する。

図19の符号化回路8bのXOR回路11aの出力側には、BRAM30が接続されている。また、レジスタ12aとBRAM30の出力側に、セレクタ31が接続されている。

BRAM30は、XOR回路11aのXOR演算結果を保持し、また、セレクタ31は、入力される信号に基づき、レジスタ12aと、BRAM30の何れかを選択し出力する。これにより、BRAMm0とBRAMm1に保持されているデータブロック間のXOR演算結果が、BRAM30に保持されるため、再度、そのXOR演算結果を利用することができる。

図19に示す符号化回路8bを用いた符号化処理の流れを以下に説明する。 図20は、符号化処理の一例の流れを説明する図である。 例えば、列番号が0の列ベクトルが入力端子P5を介して符号化回路8bに入力されたとき、BRAMm0とBRAMm1に保持されているデータブロック間のXOR演算結果がBRAM30に保持される。図20に示すRPS符号化行列において、列番号が0の列ベクトルによるBRAMm0とBRAMm1に保持されているデータブロック間のXOR演算と同様の演算が、列番号が28の列ベクトルにおいても行われる。

そのため、列番号が0の列ベクトルにおいてBRAM30に保持されたXOR演算結果を、列番号が28の列ベクトルによる符号化データ生成の際にも利用することができる。このとき、列番号が27の列ベクトル以降において、BRAMm0〜m2のデータを用いることがないので、列番号が27の列ベクトル以降において、BRAMm0〜m2に、次のデータブロックを書き込むことができる。これにより、符号化処理のスループットを向上させることができる。

なお、上記のような変形は、図10に示した復号回路8aにも同様に適用できる。 以上、XOR演算を行う演算回路の例として、符号化回路、復号回路を説明してきたが、これらに限定されるものではない。例えば、RAID(Redundant Arrays of Inexpensive Disks)6等のように、複数回のXOR演算を行う(パリティデータの算出のため)ものにも適用可能である。

上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成及び応用例に限定されるものではなく、対応するすべての変形例及び均等物は、添付の請求項及びその均等物による本発明の範囲とみなされる。

1 演算回路 2a〜2p 選択回路 3a〜3o XOR回路 M0〜M15 メモリ P1 入力端子 P2 出力端子

QQ群二维码
意见反馈