設計支援方法、設計支援プログラム、および設計支援装置

申请号 JP2016507155 申请日 2014-03-11 公开(公告)号 JPWO2015136611A1 公开(公告)日 2017-04-06
申请人 富士通株式会社; 发明人 富田 憲範; 憲範 富田;
摘要 設計支援装置(100)は、符号化行列(ma1)と、開始タイミングを示す情報と、を取得する。設計支援装置(100)は、符号化行列の列ベクトルに対応する各タイミングのうち取得した情報が示す開始タイミング以降のタイミングの各々について、BRAMに記憶された第1部分データのうち、タイミングにおいて第2部分データによって上書きされる第1部分データを特定する。設計支援装置(100)は、開始タイミング以降のタイミングの各々について、複数のXOR演算のうち、特定した第1部分データに基づくXOR演算を特定する。設計支援装置(100)は、開始タイミング以降のタイミングの各々について、各タイミングの中の開始タイミングより前の各タイミングのうち、特定したXOR演算の演算結果がタイミングに対応するベクトルに基づく特定したXOR演算の演算結果と同一となるタイミングを特定する。
权利要求

所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、 コンピュータが、 前記符号化行列を取得し、 符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、 前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、 前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、 前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、 処理を実行することを特徴とする設計支援方法。前記コンピュータが、 前記開始タイミング以降のタイミングのうちの異なる2つのタイミング同士で、特定した前記論理演算が同一であり、かつ特定した前記論理演算の演算結果が異なる場合には、前記異なる2つのタイミング同士で、特定する前記論理演算が重ならないように、前記論理演算を特定する処理と前記タイミングを特定する処理とを行う、 処理を実行することを特徴とする請求項1に記載の設計支援方法。前記コンピュータが、 前記開始タイミング以降のタイミングの各々について特定した前記論理演算の演算結果を格納する記憶領域を前記符号化回路に設けた第2符号化回路と、前記開始タイミング以降のタイミングの各々について特定した前記タイミングにおいて特定した前記論理演算の演算結果を前記記憶領域に格納させる制御回路と、を示す回路情報を生成する、 処理を実行することを特徴とする請求項1または2に記載の設計支援方法。前記コンピュータが、 取得した前記符号化行列のベクトルのうち、前記第1数より後のベクトルの各々について、先頭の成分から順に連続する前記所定値と異なる値の数を計数し、 前記符号化行列に基づいて、前記第1数より後のベクトルを計数した前記所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する、 処理を実行し、 前記論理演算を特定する処理では、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する生成した前記符号化行列の前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が前記所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定することを特徴とする請求項1〜3のいずれか一つに記載の設計支援方法。所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援プログラムであって、 コンピュータに、 前記符号化行列を取得し、 符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、 前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、 前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、 前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、 処理を実行させることを特徴とする設計支援プログラム。所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援装置であって、 前記符号化行列を取得し、符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する制御部を有することを特徴とする設計支援装置。所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援プログラムを記録した記録媒体であって、 前記符号化行列を取得し、 符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、 前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、 前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、 前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、 処理をコンピュータに実行させる設計支援プログラムを記録したことを特徴とする記録媒体。

所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、 コンピュータが、 前記符号化行列を取得し、 符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、 前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、 前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、 前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、 処理を実行することを特徴とする設計支援方法。前記コンピュータが、 前記開始タイミング以降のタイミングのうちの異なる2つのタイミング同士で、特定した前記論理演算が同一であり、かつ特定した前記論理演算の演算結果が異なる場合には、前記異なる2つのタイミング同士で、特定する前記論理演算が重ならないように、前記論理演算を特定する処理と前記タイミングを特定する処理とを行う、 処理を実行することを特徴とする請求項1に記載の設計支援方法。前記コンピュータが、 前記開始タイミング以降のタイミングの各々について特定した前記論理演算の演算結果を格納する記憶領域を前記符号化回路に設けた第2符号化回路と、前記開始タイミング以降のタイミングの各々について特定した前記タイミングにおいて特定した前記論理演算の演算結果を前記記憶領域に格納させる制御回路と、を示す回路情報を生成する、 処理を実行することを特徴とする請求項1または2に記載の設計支援方法。前記コンピュータが、 取得した前記符号化行列のベクトルのうち、前記第1数より後のベクトルの各々について、先頭の成分から順に連続する前記所定値と異なる値の数を計数し、 前記符号化行列に基づいて、前記第1数より後のベクトルを計数した前記所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する、 処理を実行し、 前記論理演算を特定する処理では、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する生成した前記符号化行列の前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が前記所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定することを特徴とする請求項1〜3のいずれか一つに記載の設計支援方法。所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援プログラムであって、 コンピュータに、 前記符号化行列を取得し、 符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、 前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、 前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、 前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、 処理を実行させることを特徴とする設計支援プログラム。所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援装置であって、 前記符号化行列を取得し、符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する制御部を有することを特徴とする設計支援装置。

说明书全文

本発明は、設計支援方法、設計支援プログラム、設計支援装置、および記録媒体に関する。

従来、インターネットにおいては、通信途中に存在するルータのバッファメモリあふれなどによってパケットが欠落する場合がある。例えば、一般的な通信プロトコルであるTCP/IP(Transmission Control Protocol/Internet Protocol)では、パケットの欠落が発生することにより、通信速度を一気に落としてしまう場合がある。このため、パケットの欠落が発生する通信環境では、通信速度が著しく遅くなってしまう場合がある。

TCP/IPの欠点を克服する手法として、RPS(Random Parity Stream)符号化処理が公知である(例えば、下記非特許文献1、特許文献1などを参照。)。RPS符号化処理において、データ送信側では冗長データを送付し、受信側では、欠落したパケットがある場合に冗長データを用いて欠落したパケットを再現する。また、従来、RPS符号化処理については、たとえばソフトウェアによって行われている。

また、パケットの送信において、パリティ計算によってパケットのエラーを検出する技術が公知である(例えば、下記特許文献2,3参照。)。

特開2007−258796号公報

特開平10−190481号公報

特開2005−102037号公報

亀山裕亮、佐藤裕一、“大規模データを扱うエンジニアリングアプリケーション向けの高速なASPシステムの構築”、[online]、マルチメディア,分散,協調とモバイル(DICOMO2008)シンポジウム、[平成25年12月6日検索]、インターネット

しかしながら、従来、ソフトウェアによって符号化処理を実現すると、符号化処理に時間がかかるという場合がある。また、符号化処理をハードウェア化すると、符号化処理は高速化できても、メモリが少ないと符号化処理のためのデータ転送に待ち時間がかかるという場合がある。そのため、符号化処理を効率よく行うことができないという問題点がある。

1つの側面では、本発明は、符号化処理の効率化を図ることができる設計支援方法、設計支援プログラム、設計支援装置、および記録媒体を提供することを目的とする。

本発明の一側面によれば、所定数(以下「第1数」と称する。)の成分を有するベクトルを前記第1数よりも多い第2数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第1数に分割した複数の部分データであって、前記第1数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第2数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、前記符号化行列を取得し、符号化の第1対象データを分割した複数の第1部分データであって、前記記憶領域に格納された複数の第1部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第2対象データを分割した複数の第2部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第1部分データのうち、前記タイミングにおいて前記第2部分データによって上書きされる第1部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第1部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第1部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する設計支援方法、設計支援プログラム、設計支援装置、および記録媒体が提案される。

本発明の一態様によれば、符号化処理の効率化を図ることができる。

図1は、本発明にかかる設計支援装置による一動作例を示す説明図である。

図2は、データ送信時のRPS符号化処理例を示す説明図である。

図3は、データ受信時のRPS復号処理例を示す説明図である。

図4は、データを送信するためのシステム構成例を示す説明図である。

図5は、FPGA内のブロック例を示す説明図である。

図6は、符号化回路例を示す説明図である。

図7は、符号化回路の部分例を示す説明図である。

図8は、各部分回路の変更例を示す説明図である。

図9は、符号化回路例2を示す説明図である。

図10は、実施の形態にかかる設計支援装置のハードウェア構成例を示すブロック図である。

図11は、設計支援装置の機能的構成例を示すブロック図である。

図12は、符号化行列例を示す説明図である。

図13は、前倒し数が0の場合におけるアクセスタイミング例を示す説明図(その1)である。

図14は、前倒し数が0の場合におけるアクセスタイミング例を示す説明図(その2)である。

図15は、入ブロック供給を前倒しした場合にデータが上書きされてしまうBRAMの分布例を示す説明図である。

図16は、前倒し数が1の場合におけるアクセスタイミング例を示す説明図である。

図17は、前倒し数が2の場合におけるアクセスタイミング例を示す説明図である。

図18は、前倒し数が3の場合におけるアクセスタイミング例を示す説明図である。

図19は、前倒し数が4の場合におけるアクセスタイミング例を示す説明図である。

図20は、前倒し数が5の場合におけるアクセスタイミング例を示す説明図である。

図21は、前倒し数が6の場合におけるアクセスタイミング例を示す説明図である。

図22は、前倒し数が7の場合におけるアクセスタイミング例を示す説明図である。

図23は、前倒し数が2または3の場合における符号化回路101例を示す説明図である。

図24は、前倒し数が4の場合における符号化回路101例を示す説明図である。

図25は、BRAMの位置例を示す説明図である。

図26は、テンプレート論理式例を示す説明図である。

図27は、変数とBRAMの位置との対応関係を示す説明図である。

図28は、BRAMの割り当て問題を解くプログラム例を示す説明図である。

図29は、生成される回路記述例を示す説明図である。

図30は、符号化回路101と符号化回路101を制御する制御回路とを示す説明図である。

図31は、図30に示す回路の動作例を示す説明図である。

図32は、前倒し実行処理例を示す説明図である。

図33は、前倒し実行処理を行うための回路構成例を示す説明図である。

図34は、符号化行列の列ベクトル入替例を示す説明図である。

図35は、列ベクトル入替によるBRAMの使用数の変化例を示す説明図である。

図36は、設計支援装置による設計支援処理手順例を示すフローチャート(その1)である。

図37は、設計支援装置による設計支援処理手順例を示すフローチャート(その2)である。

以下に添付図面を参照して、本発明にかかる設計支援方法、設計支援プログラム、設計支援装置、および記録媒体の実施の形態を詳細に説明する。

図1は、本発明にかかる設計支援装置による一動作例を示す説明図である。設計支援装置100は、符号化回路101の設計を支援するコンピュータである。符号化回路101は、符号化行列ma1と、複数の部分データと、によって符号化処理を行うことによって符号化データを得る。ここで、符号化データは、符号化ブロックと称する。符号化行列ma1は、符号化の対象データを分割した複数の部分データの所定数(以下「第1数」と称する。)の値を有するベクトルを第1数よりも多い第2数有する。ここでの符号化処理は、例えば、RPSの符号化処理である。また、ここでは、部分データをブロックと称する。図1の例では、対象データは16のブロックに分割される。図1の符号化行列ma1は、第1数である16個の値を有する列ベクトルを30個有する。列ベクトルの各成分は列ベクトルによって異なる。本実施の形態では、また、複数の記憶領域に、符号化回路101による符号化処理の対象となる複数のブロックを各々格納しておく。ここでの記憶領域は、BRAM(Block Random Access Memory)と称する。BRAMは、例えば、FPGA(Field Programmable Gate Array)内で利用可能なRAMの一種である。

従来、例えば、RPSの符号化処理を行うソフトウェアが、0.5[Gbps]で符号化データを出力すると、1[Gbps]の通信帯域であっても、0.5[Gbps]で符号化データが送信されることになる。また、近年の国際通信回線の通信帯域は100[Mbps]程度が主流であるが、将来的に10[Gbps]となった場合に、ソフトウェアによる処理では、通信帯域が効率よく利用できない。RPSの符号化処理および復号処理が利用される状況については、国と国を跨ぐ程度のネットワーク規模を想定する。そこで、本実施の形態では、RPSの符号化処理をハードウェア化することによって、符号化処理の高速化を図る。しかしながら、FPGAなどを利用してRPSの符号化処理をハードウェア化した場合、BRAMなどに符号化の対象データを格納しなければならないが、BRAMの容量が少ないと、BRAMなどに対象データを格納するためのデータ転送待ち時間が長くなる。そのため、通信帯域を効率よく利用できない。

そこで、本実施の形態では、設計支援装置100は、前倒し実行中の各タイミングについて、前倒し実行で上書きされるデータに基づく演算と、該演算の結果が該タイミングと同一の他のタイミングとを符号化行列ma1により特定する。これにより、省メモリ量で前倒し実行可能な符号化回路101を設計可能とする。したがって、符号化処理を効率よく行うことができる。符号化処理を効率よく行うとは、省メモリであっても高スループットで行えることである。

ここで、符号化回路101には、1つの符号化ブロックを生成する際に、1つの列ベクトルが符号化回路101に含まれるAND回路の一方に入力される。これにより、いずれのブロックがXOR回路によるXOR演算に入力されるか否かが定まる。また、本実施の形態では、冗長データの分だけ出力データ量が増加するため、前提条件として、「(データ入力レート)<(データ出力レート)」である。

まず、設計支援装置100は、符号化行列ma1を取得する。つぎに、設計支援装置100は、符号化処理における符号化行列ma1が有する列ベクトルに対応する複数のタイミングのうち、符号化の第2対象データd2を分割した複数の第2部分データへの複数のBRAMの格納を開始するタイミングを示す情報を取得する。ここでの符号化処理は、符号化の第1対象データd1を分割した複数の第1部分データであって、BRAMに格納された複数の第1部分データと取得した符号化行列ma1のベクトルの各成分とに基づく符号化処理である。タイミングを示す情報としては、タイミングに対応する列ベクトルの番号であってもよいし、後述する前倒し数であってもよい。例えば、図1の例では、開始タイミングは、列ベクトル0から列ベクトル29のうちの列ベクトル27に対応するタイミングである。

つぎに、設計支援装置100は、各タイミングのうち取得した情報が示す開始タイミング以降のタイミングの各々について、BRAMに記憶された複数の第1ブロックのうち、タイミングにおいて第2ブロックによって上書きされる第1部分データを特定する。図1の例では、列ベクトル27については、BRAM0に格納されていた第1ブロックが上書きされる。列ベクトル28については、BRAM0およびBRAM1に格納されていた第1ブロックが上書きされる。列ベクトル29については、BRAM0からBRAM2に格納されていた第1ブロックが上書きされる。

つぎに、設計支援装置100は、開始タイミング以降のタイミングの各々について、タイミングに対応する列ベクトルの各成分のうち、特定した第1ブロックに対応する成分が所定値である場合に、特定した第1ブロックに基づく論理演算を特定する。ここで、図1の例では、所定値は1である。ここでの論理演算とは、XOR演算である。図1の例では、列ベクトル28の各成分のうち、BRAM0に格納された第1ブロックに対応する成分が1である。また、列ベクトル27および列ベクトル29の各成分のうち、特定した第1ブロックに対応する成分は0である。ここでは、設計支援装置100は、例えば、符号化回路101のXOR回路のうち、BRAM0のデータが通過するXOR回路によるXOR演算を特定する。

そして、設計支援装置100は、開始タイミング以降のタイミングの各々について、各タイミングの中の開始タイミングより前の各タイミングのうち、特定したXOR演算の演算結果と同一となるタイミングを特定する。特定したXOR演算の演算結果は、特定したXOR演算の演算結果がタイミングに対応するベクトルに基づく演算結果である。例えば、設計支援装置100は、列ベクトル0に基づく特定した論理演算の演算結果と、列ベクトル28に基づく特定した論理演算の演算結果とは同一となるため(言い換えれば、列ベクトル0と列ベクトル28は、第0〜1因子からなる部分列ベクトルがともに[1 0]で等しいので、XOR演算結果も同一になる)、列ベクトル0に対応するタイミングを特定する。

また、図1に示していないが、設計支援装置100は、開始タイミング以降のタイミングのうちの異なる2つのタイミング同士で、特定した論理演算が同一であり、かつ特定した論理演算の演算結果が異なるか否かを判断する。設計支援装置100は、論理演算が同一であり、かつ特定した論理演算の演算結果が異なる場合には、異なる2つのタイミング同士で、特定する論理演算が重ならないように、論理演算を特定する処理とタイミングを特定する処理とを行う。

これにより、省メモリ量で前倒し実行可能な符号化回路101を設計可能とする。したがって、符号化処理を効率よく行うことができる。

また、図1に示していないが、設計支援装置100は、特定した論理演算と、特定したタイミングと、に基づいて、符号化回路101と、制御回路と、を示す回路情報を生成する。ここで、生成される符号化回路101は、開始タイミング以降のタイミングの各々について特定した論理演算の演算結果を格納するBRAMを符号化回路101に設けた回路である。また、制御回路は、開始タイミング以降のタイミングの各々について特定したタイミングにおいて特定した論理演算の演算結果をBRAMに格納させる制御を行う回路である。これにより、自動で符号化回路101を示す回路情報が得られるため、設計者の手間を省くことができる。

また、図1に示していないが、設計支援装置100は、取得した符号化行列ma1の列ベクトルのうち、第1数より後のベクトルの各々について、先頭行から順に連続する所定値と異なる値の数を計数する。上述したように所定値は1であり、所定値と異なる値は0である。そして、設計支援装置100は、符号化行列ma1に基づいて、第1数より後のベクトルを計数した所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する。並び替えた符号化行列の例は、後述する図34に示す。そして、設計支援装置100は、生成した符号化行列ma1を用いて、上述した論理演算を特定する処理と、タイミングを特定する処理と、を行う。これにより、少ないメモリ容量で、より多くの前倒し実行が可能となる。

(RPS符号化/復号) 図2は、データ送信時のRPS符号化処理例を示す説明図である。ここでは、本実施の形態で利用するRPS符号化について簡単に説明する。インターネットにおいては、通信途中に存在するルータのバッファメモリあふれなどによってパケットが欠落する場合がある。例えば、一般的な通信プロトコルであるTCP/IPでは、パケットの欠落が発生することにより、通信速度を一気に落としてしまう場合がある。このため、パケット欠落がしばしば発生する通信環境では、通信速度が著しく遅くなってしまう場合がある。

TCP/IPの欠点を克服する手法として、RPS符号化処理が公知である。RPS符号化処理におけるデータ送信側では冗長データを送付し、RPS符号化処理における受信側では、欠落したパケットがある場合に冗長データを用いて欠落したパケットを再現する。これにより、パケット欠落時のデータの再送回数の低減を図る。

図2に示すように、RPS符号化処理では、例えば、16[KB]のデータを1[KB]ごとにブロックとして切り出す。ここでは、16[KB]のデータがブロック[0]〜ブロック[15]として切り出される。つぎに、RPS符号化処理では、ブロック[0]〜ブロック[15]をそのまま送信する。そして、RPS符号化処理では、ブロック[0]〜ブロック[15]のうちの取りうる組合せごとにXOR演算を行うことによって生成した複数の冗長ブロックを送信する。

図3は、データ受信時のRPS復号処理例を示す説明図である。RPS復号処理では、インターネットを介して受信されたデータについて、データが正常かチェックする処理、欠落したパケットがあるかチェックする処理、パケットヘッダを除去してRPSのブロックを取り出す処理などがある。図3の例では、ブロック[2]がパケット欠落して受信できないとする。そこで、RPS復号処理では、ブロック[0][1][3]〜[15]と冗長ブロック[0]を利用してブロック[2]を再現する。このようにして、RPS復号処理では、受信した16個以上のブロック(冗長ブロック含む)を利用して元の16[KB]のデータにする。

また、図2および図3の例では、16[KB]のデータが1[KB]ずつに分割される例を示したが、元データのサイズやデータの分割方法、冗長ブロックの算出方法については特に限定しない。

図4は、データを送信するためのシステム構成例を示す説明図である。システム400は、CPU401と、主記憶装置402と、拡張ボード404と、を有する。CPU401と拡張ボード404とはPCI EXPRESSバス403を介して接続される。具体的に、例えば、拡張ボード404は、設計支援装置100であるサーバに設けられた拡張スロットに接続される。

拡張ボード404は、RAM411と、FPGA412と、LANコネクタ413と、を有する。また、FPGA412は、スイッチ、ルータを経由してLANコネクトがLANやWANなどのネットワークNETを介しデータ受信ホスト430などの他のサーバなどに接続される。

図5は、FPGA内のブロック例を示す説明図である。図5に示すFPGA412内のブロックは、符号化回路101がプログラムされた後の内部構成を示すブロック例である。FPGA412は、PCI EXPRESSエンドポイント501と、メモリコントローラ502と、複数のBRAMと、符号化回路101と、データ送信バッファ503と、パケットヘッダ追加部504と、MACレイヤー部505と、物理層部506と、を有する。また、FPGA412は、その他、各部を制御する回路を有する。

メモリコントローラ502と、複数のBRAMとは、バスを介して接続される。メモリコントローラ502は、図4に示したRAM411と、複数のBRAMを制御する機能を有し、PCI EXPRESSエンドポイント501を介して図4に示したCPU401からの指示を受け付ける。例えば、メモリコントローラ502は、RAM411からのデータをBRAMに格納する。PCI EXPRESSエンドポイント501は、図4に示したPCI EXPRESSバス403と、メモリコントローラ502と、に接続される。

符号化回路101は、BRAMからのデータをRPS符号化する。また、データ送信バッファ503は、符号化回路101による符号化データを一時的に格納する。パケットヘッダ追加部504は、例えば、UDP(User Datagram Protocol)/IPプロトコルに基づくパケットのヘッダを符号化データに追加する。MACレイヤー部505は、例えば、UDP/IPプロトコルの後の処理、MACレイヤーのプロトコルに応じた処理を行う。物理層部506は、例えば、MACレイヤー部505からのデジタルデータに対して、電気や光などを用いたアナログ信号媒体へ信号を送出するための処理を行う。物理層部506は、LANコネクタ413に接続される。

図6は、符号化回路例を示す説明図である。図7は、符号化回路の部分例を示す説明図である。図6の例では、符号化回路101−1への入力となるデータを記憶するBRAMが16の場合を例に挙げる。図6に示す符号化回路101−1は、符号化処理に対応する回路である。符号化回路101−1は、部分回路601−1〜601−8と、部分回路602−1〜602−7と、を有する。

図7に示すように、部分回路601は、レジスタ701,702と、AND回路703,704と、XOR回路705と、レジスタ706と、を有する。レジスタ701,702は、BRAMからのデータを一時的に格納する。図7に示すように、BRAMはある1構成例によれば、36[KBit]のRAMであり、1ワードが72ビット、ワード数が512として利用され、1[KB(Byte)]の入力ブロックを4個保持可能である。また、AND回路703,704は、レジスタからの信号と、0または1の信号と、を入力として、論理積演算結果をXOR回路へ出力する。0または1の信号としては、例えば、符号化行列内の対応する値が入力される。XOR回路705は、2つのAND回路703,704からの出力信号を入力として、演算結果をレジスタ706へ出力する。

また、図7に示すように、部分回路602は、XOR回路710と、レジスタ711と、を有する。XOR回路710は、各レジスタ706からの出力信号を入力として、XOR演算の演算結果をレジスタ711へ出力する。レジスタ711は、XOR回路の出力信号を一時的に格納する。図6に示すように、符号化回路101には、部分回路601は(BRAMの数/2)個設けられ、部分回路602は出力信号が1つになるまでの数だけ設けられる。

ここで、図4に示したRPSソフトウェア部421と、図4に示したRPSハードウェア部422と、の各々の処理について簡単に説明する。例えば、CPU401が実行するRPSソフトウェア部421は、送信したい対象データを主記憶装置402の転送バッファ領域に格納する。そして、RPSソフトウェア部421は、RPSハードウェア部422に実行を指示する。RPSハードウェア部422は、符号化回路101と、符号化回路101を制御する制御回路と、を含む。

(1)RPSハードウェア部422は、FPGA412内のDMA回路が転送バッファのデータをRAM411へ転送する。(2)RPSハードウェア部422は、RAM411から合計16[KB]のデータを1[KB]ずつ順にBRAM0〜BRAM15へ書き込む。(3)RPSハードウェア部422は、j=0とする。そして、(4)RPSハードウェア部422は、後述する符号化行列の第j列の値を符号化回路101のAND回路に入力する。つぎに、(5)RPSハードウェア部422は、BRAM0〜15のアドレス0〜1023を読み出しつつ、出力されるXOR演算後の1[KB]の符号化データをデータ送信バッファ503やパケットヘッダ追加部504などの後続の処理に渡す。そして、(6)RPSハードウェア部422は、j=j+1とし、jが符号化行列の列数より多くなるまで(4)〜(6)を繰り返し、jが符号化行列の列数より多くなったら(2)に戻る。なお、jが符号化行列の列数に達する以前に、データ受信ホスト430からデータ受信完了通知が届いた場合は、これ以上の冗長ブロックを送出する必要がないため、(2)に戻る。図4では省略しているが、データ受信完了通知を受け取るための回路が、RPSハードウェア部422に含まれる。このようにして、ハードウェアとソフトウェアとが協調して対象データを符号化して送信することができる。

図8は、各部分回路の変更例を示す説明図である。部分回路801は、部分回路601に含まれるXOR回路によるXOR演算の演算結果を格納するBRAMを設けた例である。部分回路801には、部分回路601に対して、XOR回路からの出力信号を格納するBRAMが設けられ、レジスタからの出力信号と、BRAMからの出力信号と、を選択して出力する選択回路811と、が設けられる。また、部分回路801には、選択回路811からの信号を出力するか否かを制御するAND回路812と、が設けられる。

部分回路802は、部分回路602に含まれるXOR回路によるXOR演算の演算結果を格納するBRAMを設けた例である。部分回路802には、部分回路602に対して、XOR回路からの出力信号を格納するBRAMが設けられ、レジスタからの出力信号とBRAMからの出力信号とを選択して出力する選択回路821が設けられる。

図9は、符号化回路例2を示す説明図である。符号化回路101−2は、符号化回路101−1に含まれる各部分回路601が部分回路801に置き換えられた回路である。また、符号化回路101−2は、符号化回路101−1に含まれる部分回路602−1〜602−6がそれぞれ部分回路802−1〜802−6に置き換えられた回路である。このようにXOR回路によるXOR演算の中間結果をBRAMに格納することによって、スループットの向上を図る。

また、ここでは、復号処理について簡単に説明する。復号処理のうち、欠落したブロックを、受信した符号化ブロックから再構成する処理は、符号化回路と同じ回路を利用可能である。ただし、復号回路の入力部に配置するBRAMの数は最大で、符号化行列の列ベクトル数になる。また、復号回路のうちのAND回路に入力するデータは、符号化行列の列ベクトルでなく、復号のためのベクトルである。復号回路は、復号ベクトルを、欠落したブロック数が1〜2程度などの少ないときは予め計算して記憶部に格納しておく。これにより、復号回路は、記憶部からテーブル引きのように復号ベクトルを取得できるため、高速になる。復号回路は、欠落したブロック数が多いときはガウス消去などのアルゴリズムに従って動的に計算して求める。動的に計算するため、時間がかかる。

以上を踏まえて設計支援装置100による符号化回路101を示す回路情報の生成処理について詳細に説明する。ここで、設計支援装置100は、例えば、利用者端末装置とするが、上述したシステム400であってもよい。

(設計支援装置100のハードウェア構成例) 図10は、実施の形態にかかる設計支援装置のハードウェア構成例を示すブロック図である。図10において、設計支援装置100は、CPU(Central Processing Unit)1001と、ROM(Read Only Memory)1002と、RAM1003と、ディスクドライブ1004と、ディスク1005と、を有する。設計支援装置100は、I/F(Interface)1006と、入力装置1007と、出力装置1008と、を有している。また、各部はバス1000によってそれぞれ接続されている。

ここで、CPU1001は、設計支援装置100の全体の制御を司る。ROM1002は、ブートプログラムなどのプログラムを記憶している。RAM1003は、CPU1001のワークエリアとして使用される。ディスクドライブ1004は、CPU1001の制御にしたがってディスク1005に対するデータのリード/ライトを制御する。ディスク1005は、ディスクドライブ1004の制御で書き込まれたデータを記憶する。ディスク1005としては、磁気ディスク、光ディスクなどが挙げられる。

I/F1006は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークNETに接続され、このネットワークNETを介して他の装置に接続される。そして、I/F1006は、ネットワークNETと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F1006には、例えばモデムやLANアダプタなどを採用することができる。

入力装置1007は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置1007は、カメラから画像や動画を取り込むこともできる。また、入力装置1007は、マイクから音声を取り込むこともできる。出力装置1008は、CPU1001の指示により、データを出力するインターフェースである。出力装置1008には、ディスプレイやプリンタが挙げられる。

(設計支援装置100の機能的構成例) 図11は、設計支援装置の機能的構成例を示すブロック図である。設計支援装置100は、制御部1101と、記憶部1102と、を有する。記憶部1102は、例えば、RAM1003やディスク1005などによって実現される。制御部1101の処理は、例えば、CPU1001がアクセス可能な記憶装置に記憶された設計支援プログラムにコーディングされる。そして、CPU1001が記憶装置から設計支援プログラムを読み出して、設計支援プログラムにコーディングされている処理を実行することにより、制御部1101の処理が実現される。また、制御部1101の処理結果は、例えば、記憶部1102に記憶される。

記憶部1102には、例えば、上述した部分回路601−1〜601−8の各々を示す回路情報がテンプレート回路情報として格納されてある。また、記憶部1102には、後述するテンプレート式が格納されてある。

まず、制御部1101は、符号化行列と、前倒し数と、を取得する。取得形式としては、例えば、RAM1003やディスク1005などの記憶装置に記憶された符号化行列と前倒し数とを読み出すことにより取得してもよいし、入力装置1007などを介して利用者から取得してもよい。前倒し実行とは、1回目の処理に2回目の処理を重ね合わせることである。重ね合わせる量を増やすことは、実行開始間隔を短縮することに相当する。前倒し数とは、重ね合わせる量を示す。

図12は、符号化行列例を示す説明図である。符号化行列ma1の各行は、分割された各ブロックに対応する。符号化行列ma1の各列は、送信する符号化ブロックの順序に対応する。列ベクトルは、どのブロックについてXOR演算を行うかを表す。具体的に、RPS符号化処理では、まず各ブロックをそのまま出力するため、符号化行列ma1のうち0〜15列目までは、各行の値が順に1になる。これにより、0番目から15番目までには、16[KB]のデータが分割されたブロック[0]〜ブロック[15]が順に送信される。

つぎに、符号化行列ma1のうち16列目以降については、冗長データを作成可能な情報が設定されてある。例えば、図12に示す16列目については、各成分がすべて1になっているため、16番目に送信されるブロックは、BRAM0からBRAM15までのデータについてワードごとにXOR演算が行われたデータとなる。17番目に送信されるブロックは、例えば、BRAM0,2,4,6,8,10,12,14のデータについてワードごとにXOR演算が行われたデータとなる。図12の例では、説明の簡単化のために、符号化行列ma1のサイズを16行30列としているが、特に限定しない。

図13は、前倒し数が0の場合におけるアクセスタイミング例を示す説明図(その1)である。以降のアクセスタイミング図は、複数のXOR回路によって参照されるブロックと、入力されるブロックを格納するBRAM0〜15と、の対応関係を「#」によって示す。前倒し数が0の場合には、上述した符号化回路101がそのまま利用されることになる。

図14は、前倒し数が0の場合におけるアクセスタイミング例を示す説明図(その2)である。ブロック29が出力された後、新しい16[KB]のデータがBRAM0〜15に書き込まれる。符号化回路101が冗長データについてのブロックを計算中に、BRAM0〜15への入力ブロックの供給ができない。そのため、前倒し数が0であるとスループットが低下するが、前倒し数を多くすることによって、スループットが向上する。

図15は、入力ブロック供給を前倒しした場合にデータが上書きされてしまうBRAMの分布例を示す説明図である。図15の例では、1サイクル〜16サイクル早くする場合も同様に、各ブロックの作成に「#」が設けられているBRAMのデータを利用するため、各ブロックの作成についての符号化処理が正常に行われない場合がある。

そこで、制御部1101は、前倒しを行っても符号化処理が正常に行われるように、上述した部分回路801や部分回路802のようにBRAMを設けた符号化回路101を示す回路情報を生成する。

具体的に、制御部1101は、前倒し数に基づいて、前倒しによって消されるデータと、消されるタイミングと、の組み合わせを特定する。この組み合わせは、第i行j列によって表すことができる。例えば、制御部1101は、前倒し数に基づいて、アクセスタイミング図の各データの位置のうち前倒しによって消されるデータの位置に対して色づけを行うことによって、組み合わせを特定してもよい。そして、制御部1101は、特定した組み合わせの各々について、符号化行列ma1のうち、特定した組み合わせに対応する成分が1であるか否かを判断する。

制御部1101は、特定した組み合わせのうち、組み合わせに対応する成分が1である組み合わせがない場合、符号化回路101−1によって符号化処理を行うことができると判断する。一方、制御部1101は、特定した組み合わせのうち、組み合わせに対応する成分が1である組み合わせがない場合、符号化回路101−1によって符号化処理を行うことができないと判断する。

図16は、前倒し数が1の場合におけるアクセスタイミング例を示す説明図である。前倒し数が1である場合、BRAM0〜15への入力ブロックの供給を1サイクル早くさせる。この場合、列ベクトル29に対応するタイミングにおいて、BRAM0のデータが上書きによって消される。図16の例では、符号化ブロック29の作成においてBRAM0のデータに対してXOR演算を行っていないため、符号化回路101−1によって符号化処理が正常に行われる。制御部1101は、前倒し数が1の場合、符号化回路101−1を変更せずに前倒しできると判定する。

図17は、前倒し数が2の場合におけるアクセスタイミング例を示す説明図である。前倒し数が2の場合、BRAM0〜15への入力ブロックの供給を2サイクル早くさせる。前倒し数が2の場合、列ベクトル28に対応するタイミングにおいて、BRAM0のデータが上書きによって消され、BRAM0のデータが利用されているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が2の場合、列ベクトル29に対応するタイミングにおいて、BRAM0およびBRAM1の各データが上書きによって消されるが、BRAM0およびBRAM1の各データが利用されていないため、符号化回路101−1によって符号化処理が正常に行われる。そのため、制御部1101は、前倒し数が2の場合、符号化回路101−1を変更せずに前倒しできないと判定する。

ただし、図17の例では、符号化ブロック28の作成時と同様に符号化ブロック0の作成時にBRAM0のデータを利用したXOR演算を行っている。そのため、BRAM0のデータを利用したXOR演算の演算結果が格納されることによって、符号化ブロック28の作成時に該演算結果が流用可能である。

図18は、前倒し数が3の場合におけるアクセスタイミング例を示す説明図である。前倒し数が3の場合、BRAM0〜15への入力ブロックの供給を3サイクル早くさせる。前倒し数が3の場合、列ベクトル27に対応するタイミングにおいて、BRAM0のデータが上書きによって消されるが、BRAM0のデータを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。また、前倒し数が3の場合、列ベクトル28に対応するタイミングにおいて、BRAM0およびBRAM1の各データが上書きによって消され、BRAM0のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が3の場合、列ベクトル29に対応するタイミングにおいて、BRAM0からBRAM2の各データが上書きによって消される。BRAM0からBRAM2の各データを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。そのため、制御部1101は、前倒し数が2の場合、符号化回路101−1を変更せずに前倒しできないと判定する。

ただし、図18の例では列ベクトル28に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。そのため、列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算の演算結果が格納されることにより、列ベクトル28に対応するタイミングにおいて該演算結果が流用可能である。

図19は、前倒し数が4の場合におけるアクセスタイミング例を示す説明図である。前倒し数が4の場合、BRAM0〜15への入力ブロックの供給を4サイクル早くさせる。前倒し数が4の場合、列ベクトル26に対応するタイミングにおいて、BRAM0のデータが上書きによって消され、BRAM0のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が4の場合、列ベクトル27に対応するタイミングにおいて、BRAM0およびBRAM1の各データが上書きによって消されるが、BRAM0のデータを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。また、前倒し数が4の場合、列ベクトル28に対応するタイミングにおいて、BRAM0からBRAM2の各データが上書きによって消され、BRAM1のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が4の場合、列ベクトル29に対応するタイミングにおいて、BRAM0からBRAM3の各データが上書きによって消され、BRAM3のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。そのため、制御部1101は、前倒し数が4の場合、符号化回路101−1を変更せずに前倒しできないと判定する。

ただし、図19の例では列ベクトル26に対応するタイミングと同様に列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算が行われる。列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算の演算結果が格納されることによって、列ベクトル26に対応するタイミングにおいて該演算結果が流用可能である。また、図19の例では列ベクトル28に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。そのため、BRAM0のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル28に対応するタイミングにおいて該演算結果が流用可能である。また、図19の例では列ベクトル29に対応するタイミングと同様に列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算が行われる。列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル29に対応するタイミングにおいて該演算結果が流用可能である。

図20は、前倒し数が5の場合におけるアクセスタイミング例を示す説明図である。前倒し数が5の場合、BRAM0〜15への入力ブロックの供給を5サイクル早くさせる。前倒し数が5の場合、列ベクトル25に対応するタイミングにおいて、BRAM0のデータが上書きによって消されるが、BRAM0のデータを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。また、前倒し数が5の場合、列ベクトル26に対応するタイミングにおいて、BRAM0のデータおよびBRAM1の各データが上書きによって消され、BRAM0およびBRAM1のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。

また、前倒し数が5の場合、列ベクトル27に対応するタイミングにおいて、BRAM0からBRAM2の各データが上書きによって消されるが、BRAM0からBRAM2のデータを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。また、前倒し数が5の場合、列ベクトル28に対応するタイミングにおいて、BRAM0からBRAM3の各データが上書きによって消され、BRAM0のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。

また、前倒し数が5の場合、列ベクトル29に対応するタイミングにおいて、BRAM0からBRAM4の各データが上書きによって消される。そして、BRAM3およびBRAM4のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。そのため、制御部1101は、前倒し数が5の場合、符号化回路101−1を変更せずに前倒しできないと判定する。

ただし、図20の例では列ベクトル26に対応するタイミングと同様に列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算が行われる。列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算の演算結果が格納されることによって、列ベクトル26に対応するタイミングにおいて該演算結果が流用可能である。

また、図20の例では列ベクトル28に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。そのため、BRAM0のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル28に対応するタイミングにおいて該演算結果が流用可能である。また、図20の例では列ベクトル29に対応するタイミングと同様に列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算が行われる。また、列ベクトル29に対応するタイミングと同様に列ベクトル4に対応するタイミングにおいてBRAM4のデータを利用したXOR演算が行われる。

そこで、列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算の演算結果が格納される。また、列ベクトル4に対応するタイミングにおいてBRAM4のデータを利用したXOR演算の演算結果が格納される。これにより、列ベクトル29に対応するタイミングにおいて各演算結果が流用可能である。

図21は、前倒し数が6の場合におけるアクセスタイミング例を示す説明図である。前倒し数が6の場合、BRAM0〜15への入力ブロックの供給を6サイクル早くさせる。前倒し数が6の場合、列ベクトル24に対応するタイミングにおいて、BRAM0のデータが上書きによって消され、BRAM0のデータを参照しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が6の場合、列ベクトル25に対応するタイミングにおいて、BRAM0およびBRAM1の各データが上書きによって消される。しかし、BRAM0およびBRAM1の各データを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。また、前倒し数が6の場合、列ベクトル26に対応するタイミングにおいて、BRAM0からBRAM2の各データが上書きによって消され、BRAM0からBRAM2の各データを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。

また、前倒し数が6の場合、列ベクトル27に対応するタイミングにおいて、BRAM0からBRAM3の各データが上書きによって消され、BRAM3のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が6の場合、列ベクトル28に対応するタイミングにおいて、BRAM0からBRAM4の各データが上書きによって消され、BRAM0のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が6の場合、列ベクトル29に対応するタイミングにおいて、BRAM0からBRAM5の各データが上書きによって消される。そして、BRAM3およびBRAM4の各データを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。そのため、制御部1101は、前倒し数が6の場合、符号化回路101−1を変更せずに前倒しできないと判定する。

ただし、図21の例では列ベクトル24に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル24に対応するタイミングにおいて該演算結果が流用可能である。

また、図21の例では、列ベクトル26に対応するタイミングと同様に列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算が行われる。列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算の演算結果が格納されることによって、列ベクトル26に対応するタイミングにおいて該演算結果が流用可能である。

また、図21の例では、列ベクトル28に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。そのため、BRAM0のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル28に対応するタイミングにおいて該演算結果が流用可能である。また、図21の例では、列ベクトル29に対応するタイミングと同様に列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算が行われる。また、列ベクトル29に対応するタイミングと同様に列ベクトル4に対応するタイミングにおいてBRAM4のデータを利用したXOR演算が行われる。

そこで、列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算の演算結果を格納しておく。そして、列ベクトル4に対応するタイミングにおいてBRAM4のデータを利用したXOR演算の演算結果を格納しておく。これにより、列ベクトル29に対応するタイミングにおいて各演算結果が流用可能である。

図22は、前倒し数が7の場合におけるアクセスタイミング例を示す説明図である。前倒し数が7の場合、BRAM0〜15への入力ブロックの供給を7サイクル早くさせる。前倒し数が7の場合、列ベクトル23に対応するタイミングにおいて、BRAM0のデータが上書きによって消されるが、BRAM0のデータを利用していないため、符号化回路101−1によって符号化処理が正常に行われる。また、前倒し数が7の場合、列ベクトル24に対応するタイミングにおいて、BRAM0およびBRAM1の各データが上書きによって消され、BRAM0のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が7の場合、列ベクトル25に対応するタイミングにおいて、BRAM0からBRAM2の各データが上書きによって消される。そして、BRAM2およびBRAM3の各データを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が7の場合、列ベクトル26に対応するタイミングにおいて、BRAM0からBRAM3の各データが上書きによって消され、BRAM0からBRAM3の各データを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。

また、前倒し数が7の場合、列ベクトル27に対応するタイミングにおいて、BRAM0からBRAM4の各データが上書きによって消され、BRAM3のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が7の場合、列ベクトル28に対応するタイミングにおいて、BRAM0からBRAM5の各データが上書きによって消され、BRAM0のデータを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。また、前倒し数が7の場合、列ベクトル29に対応するタイミングにおいて、BRAM0からBRAM6の各データが上書きによって消される。そして、BRAM3、BRAM4およびBRAM6の各データを利用しているため、符号化回路101−1によって符号化処理が正常に行われない。そのため、制御部1101は、前倒し数が7の場合、符号化回路101−1を変更せずに前倒しできないと判定する。

ただし、図22の例では、列ベクトル24に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。列ベクトル0に対応するタイミングにおいて、BRAM0のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル24に対応するタイミングにおいて、該演算結果が流用可能である。

また、図22の例では、列ベクトル25に対応するタイミングと同様に列ベクトル16に対応するタイミングにおいてBRAM2およびBRAM3の各データを利用したXOR演算が行われる。列ベクトル16に対応するタイミングにおいて、BRAM2およびBRAM3の各データを利用したXOR演算の演算結果が格納される。これにより、列ベクトル25に対応するタイミングにおいて該演算結果が流用可能である。しかしながら、理由は後述するが、図9の回路中に配置されるBRAMから決まる性質上、必ずしも流用可能とはならない。

また、図22の例では、列ベクトル26に対応するタイミングと同様に列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算が行われる。列ベクトル16に対応するタイミングにおいてBRAM0からBRAM3までの各データを利用したXOR演算の演算結果が格納されることによって、列ベクトル26に対応するタイミングにおいて該演算結果が流用可能である。

また、図22の例では、列ベクトル27に対応するタイミングと同様に列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算が行われる。列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル27に対応するタイミングにおいて該演算結果が流用可能である。

また、図22の例では、列ベクトル28に対応するタイミングと同様に列ベクトル0に対応するタイミングにおいてBRAM0のデータを利用したXOR演算が行われる。そのため、BRAM0のデータを利用したXOR演算の演算結果が格納されることによって、列ベクトル28に対応するタイミングにおいて該演算結果が流用可能である。

また、図22の例では、列ベクトル29に対応するタイミングと同様に列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算が行われる。さらに、列ベクトル29に対応するタイミングと同様に列ベクトル4に対応するタイミングにおいてBRAM4のデータを利用したXOR演算が行われる。また、列ベクトル29に対応するタイミングと同様に列ベクトル6に対応するタイミングにおいてBRAM6のデータのみのXOR演算が行われる。列ベクトル3に対応するタイミングにおいてBRAM3のデータを利用したXOR演算の演算結果と、列ベクトル4に対応するタイミングにおいてBRAM4のデータを利用したXOR演算の演算結果と、が格納される。これにより、列ベクトル29に対応するタイミングにおいて該演算結果が流用可能である。

ただし、列ベクトル3に対応するタイミングにおいて「(BRAM2のデータ&列ベクトル[2])XOR(BRAM3のデータ&列ベクトル[3])」の演算結果をBRAMに格納させる。その後に、列ベクトル16に対応するタイミングにおいて該演算結果を格納させると、列ベクトル3に対応するタイミングにおける演算結果が上書きされてしまう。そのため、制御部1101は、図22の前倒し数が7の場合、前倒し実行ができないと判定する。

図16〜図22を用いて説明したように、符号化回路101−1をそのまま流用できない場合であっても、いずれかのXOR演算の演算結果をBRAMに格納しておくことによって、前倒し実行が可能な場合がある。例えば、前倒し数が2または3の場合における符号化回路101例を図23に示し、前倒し数が4の場合における符号化回路101例を図24に示す。

図23は、前倒し数が2または3の場合における符号化回路101例を示す説明図である。符号化回路101−3は、符号化回路101−1のうち部分回路601−1が部分回路801−1に置き換えられた回路である。前倒し数が2または3の場合に、符号化回路101−3では、列ベクトル0に対応するタイミングにおいて、「(BRAM0のデータ&列ベクトル0)XOR(BRAM1のデータ&列ベクトル1)」の演算結果がBRAMに格納される。また、符号化回路101−3では、列ベクトル28に対応するタイミングにおいて、BRAMに格納された演算結果が選択回路によって選択されて後段に出力される。

図24は、前倒し数が4の場合における符号化回路101例を示す説明図である。符号化回路101−4は、符号化回路101−1のうち、部分回路601−1が部分回路801−1に置き換えられ、部分回路601−2が部分回路801−2に置き換えられ、部分回路602−1が部分回路802−1に置き換えられた回路である。

前倒し数が4の場合に、符号化回路101−4では、列ベクトル0に対応するタイミングにおいて、「(BRAM0のデータ&列ベクトル[0])XOR(BRAM1のデータ&列ベクトル[1])」の演算結果がBRAMに格納される。また、符号化回路101−4では、列ベクトル3に対応するタイミングにおいて、「(BRAM2のデータ&列ベクトル[2])XOR(BRAM3のデータ&列ベクトル[3])」の演算結果がBRAMに格納される。また、符号化回路101−4では、列ベクトル16に対応するタイミングにおいて、「{(BRAM0のデータ&列ベクトル[0])XOR(BRAM1のデータ&列ベクトル[1])}XOR{(BRAM2のデータ&列ベクトル[2])XOR(BRAM3のデータ&列ベクトル[3])}の演算結果がBRAMに格納される。

つぎに、追加するBRAMの位置の決定方法について詳細に説明する。具体的には、制御部1101は、符号化回路101−1に含まれる部分回路601と部分回路602のうち、いずれを部分回路801または部分回路802に置き換えるかを決定する。

図25は、BRAMの位置例を示す説明図である。符号化回路101−2によれば、XOR演算の演算結果をBRAMによって保持するため、図25に示すような位置の演算結果をBRAMに保存可能である。

図25の<保存可能/不可能の例>に示すように、(BRAM0のデータ)XOR(BRAM1のデータ)の出力位置に設けられるBRAMを例に挙げる。例えば、このBRAMには(BRAM0のデータ)XOR(BRAM1のデータ)の演算結果を格納させると決定された場合、BRAM0のデータまたはBRAM1の各データについては格納させることができない。ただし、{(BRAM0のデータ)XOR(BRAM1のデータ)}XOR{(BRAM2のデータ)XOR(BRAM3のデータ)}の出力位置に設けられるBRAMを利用すれば、BRAM0のデータを格納可能である。また、格納されたデータを使ってXOR演算が可能であるため、実際に保存できるデータの組み合わせは複数ある。

図26は、テンプレート論理式例を示す説明図である。まず、制御部1101は、テンプレート論理式2600を取得する。図26に示すテンプレート論理式2600では、入力ブロックが16ブロックである場合を例に挙げる。換言すれば、符号化行列ma1が16行の場合を例に挙げる。

図27は、変数とBRAMの位置との対応関係を示す説明図である。例えば、テンプレート論理式2600に含まれる変数a0〜a7は、それぞれ入力ブロックを格納するBRAMから最前段のXOR回路の出力結果を格納可能なBRAMがいずれのデータを格納するかを示す。例えば、変数a0は、BRAM0のデータとBRAM1のデータとのXOR演算の演算結果を保持するBRAMがいずれのデータを格納するかを示す。例えば、テンプレート論理式2600に含まれる変数b0〜b3は、それぞれ入力ブロックを格納するBRAMから2段目のXOR回路の出力結果を格納可能なBRAMがいずれのデータを格納するかを示す。例えば、変数b0は、BRAM0のデータとBRAM1のデータとのXOR演算の演算結果と、BRAM2のデータとBRAM3のデータとのXOR演算の演算結果と、のXOR演算の演算結果を保持するBRAMがいずれのデータを格納するかを示す。例えば、テンプレート論理式2600に含まれる変数c0〜c1は、それぞれ入力ブロックを格納するBRAMから3段目のXOR回路の出力結果を格納可能なBRAMがいずれのデータを格納するかを示す。例えば、変数c0は、BRAM0のデータからBRAM3のデータまでのXOR演算の演算結果と、BRAM4のデータからBRAM7のデータまでのXOR演算の演算結果と、のXOR演算の演算結果を保持するBRAMがいずれのデータを格納するかを示す。変数aと、変数bと、変数cと、がとりうる値の範囲を以下に示す。

0≦an(n=0〜7)≦(2^2)−1=3 0≦bm(m=0〜3)≦(2^4)−1=15 0≦cl(l=0〜1)≦(2^8)−1=255

^はべき乗演算子を示す。ただし、b0を例に挙げると、b0=7やb0=9などの値については、実際に符号化回路101−1では計算していないため、とることができない。また、例えば、a0=3は、(BRAM0のデータ)XOR(BRAM1のデータ)の演算結果がBRAMに格納されることを示す。例えば、a0=2は、(BRAM0のデータ&0)XOR(BRAM1のデータ&1)の演算結果がBRAMに格納されることを示す。例えば、a0=1は、(BRAM0のデータ&1)XOR(BRAM1のデータ&0)の演算結果がBRAMに格納されることを示す。

制御部1101は、取得したテンプレート論理式2600に基づいて、符号化行列ma1のうち入力されるブロック数以降の列の各々について、論理式を求める。ここでは、制御部1101は、列16〜列29の各々について論理式を求める。具体的に、制御部1101は、変数が対応する行、BRAMx〜BRAMyについて、上述した各アクセスタイミング図において、「#」が付いている箇所を1として、バイナリ符号化する。バイナリ符号化した数値が、その変数がとりうる値の集合の要素である。変数b0を例に挙げると、制御部1101は、変数b0が対応する行、BRAM0〜BRAM3について、「#」が付されている位置を1としてバイナリ符号化する。BRAM0が最下位ビットであり、BRAM3が最上位ビットに対応する。例えば、0列目が0001であり、1列目が0010であり、2列目が0100であり、3列目が1000であり、4列目から15列目が0000であり、16,19,20,26列目が1111であり、17列目が0101であり、18列目が0011である。変数b0がとりうる値は{0001,0010,0100,1000,0000,1111,0101,0011,…}である。10進数で表記すると、{1,2,4,8,0,15,5,3,…}が、変数b0がとりうる値の集合である。

ここでは、例えば、制御部1101は、第29列について、論理式を求める。 ・c0については、01011000(2進数)=88(10進数)である。 ・b0については、1000(2進数)=8(10進数)である。 ・b1については、0101(2進数)=5(10進数)である。 ・a0については、00(2進数)=0(10進数)である。 ・a1については、10(2進数)=2(10進数)である。 ・a2については、01(2進数)=1(10進数)である。 ・a3〜a7については、0である。

制御部1101は、上記をテンプレート論理式2600に代入させると以下のようになる。

((c0=88)|(((b0=8)|(a0=0)&(a1=2))&((b1=5)|(a2=1)&(a3=0))))&((c1=0)|(((b2=0)|(a4=0)&(a5=0))&((b3=0)|(a6=0)&(a7=0))))

変数=0という書式の項を常に“TRUE”であるとして、論理式を簡単化させることができる。論理式を簡単化させると以下のようになる。 ((c0=88)|(((b0=8)|TRUE&(a1=2))&((b1=5)|(a2=1)&TRUE)))&(TRUE|((TRUE|TRUE&TRUE)&(TRUE|TRUE&TRUE)))

さらに式を簡単化させると以下のようになる。 ((c0=88)|(((b0=8)|(a1=2))&((b1=5)|(a2=1)&TRUE)))&(TRUE|((TRUE|TRUE&TRUE)))

さらに式を簡単化させると以下のようになる。

(c0=88)|(((b0=8)|(a1=2))&((b1=5)|(a2=1)))・・・論理式29

このようにして、制御部1101は、列29について、論理式29を求める。

この論理式29は、符号化ブロック29を生成するときに、上書きによって入力ブロックが消去されてしまうBRAM3とBRAM4のデータを補うために、いずれのBRAMが利用可能かを示している。

論理式29がTRUEになるのは、例えばc0=88のときであり、88を2進法で表記すると01011000となり、c0を2進法で表記したときに1となる位置によって、(BRAM6のデータ)XOR(BRAM4のデータ)XOR(BRAM3のデータ)の値を保存すればよいことを意味する。

例えば、制御部1101は、第28列について、以下のように論理式28を得る。

(c0=129)|(((b0=1)|(a0=1)&(a1=0))&((b1=8)|(a2=0)&(a3=0))) 簡単化によって、以下となる。 (c0=129)|(((b0=1)|(a0=1)&(a1=0))&((b1=8)|TRUE)) さらに簡単化によって以下論理式28が得られる。 (c0=129)|(b0=1)|(a0=1)・・・論理式28

例えば、制御部1101は、第27列について、以下のように論理式27を得る。

(c0=232)|(((b0=8)|(a0=0)&(a1=2))&((b1=0)|(a2=0)&(a3=0))) 簡単化によって、以下となる。 (c0=232)|(((b0=8)|TRUE&(a1=2))&(TRUE|TRUE)) さらに簡単化によって以下論理式27が得られる。 (c0=232)|(b0=8)|(a1=2)・・・論理式27

例えば、制御部1101は、第26列について、以下のように論理式26を得る。

(c0=223)|(((b0=15)|(a0=3)&(a1=3))&((b1=0)|(a2=0)&(a3=0))) さらに簡単化によって以下論理式26が得られる。 (c0=223)|(b0=15)|(a0=3)&(a1=3)・・・論理式26

例えば、制御部1101は、第25列について、以下のように論理式25を得る。

((c0=0)|(((b0=12)|(a0=0)&(a1=0))&((b1=0)|(a2=0)&(a3=0))))・・・論理式25

例えば、制御部1101は、第24列について、以下のように論理式24を得る。

((c0=181)|(((b0=5)|(a0=1)&(a1=0))&((b1=0)|(a2=0)&(a3=0)))) さらに簡単化によって以下論理式24が得られる。 (c0=181)|(b0=5)|(a0=1)・・・論理式24

例えば、第23列については以下のようになる。 TRUE・・・論理式23

つぎに、制御部1101は、各列についての論理式のすべてのANDを取った論理式Xを作成する。

X=(論理式29)AND(論理式28)AND(論理式27)AND… X=((c0=88)|(((b0=8)|(a1=2))&((b1=5)|(a2=1))))& ((c0=129)|(b0=1)|(a0=1))& ((c0=232)|(b0=8)|(a1=2))& ((c0=223)|(b0=15)|(a0=3)&(a1=3))& ((c0=181)|(b0=5)|(a0=1))

制御部1101は、作成した論理式XをTRUEにするように、a0,…,a7,b0,…b4,c0,c1への整数値の割り当てを求める。求められた解がBRAMの割り当て問題の解となる。値がゼロとなる割り当てが多くなるようにしたほうが、追加されるBRAMの数を低減させることができる。BRAMの割り当て問題は、例えば、SATソルバと呼ばれるソフトウェアを用いても効率的に解くことができる(例えば、「The MiniSat Page,[online]、[平成25年12月6日検索]、インターネット

」)。また、例えば、以下図28に示すように、制御部1101は、総当たりで計算してもよい。

図28は、BRAMの割り当て問題を解くプログラム例を示す説明図である。例えば、CPU1001が、図28に示すプログラム2800を実行すると、以下のような結果が得られる。プログラム2800は、設計支援プログラムの一部である。

n=4 a0=1 a1=0 a2=0 b0=8 b1=5…c0=223 n=4 a0=1 a1=0 a2=1 b0=8 b1=0…c0=223 n=4 a0=1 a1=2 a2=0 b0=0 b1=5 c0=223 n=4 a0=1 a1=2 a2=0 b0=15 b1=0 c0=88 n=4 a0=1 a1=2 a2=0 b0=15 b1=5 c0=0 n=4 a0=1 a1=2 a2=0 b0=15 b1=5 c0=0 n=4 a0=1 a1=2 a2=1 b0=0 b1=0 c0=223 n=4 a0=1 a1=2 a2=1 b0=15 b1=0 c0=0

例えば、制御部1101は、「a0=1 a1=2 a2=1 b0=15」という解を利用すれば、以下の動作をする符号化回路101を示す回路情報を生成する。 ・符号化回路101では、変数a0が示す位置のBRAMに、BRAM0のデータ(=(BRAM0のデータ&1)XOR(BRAM1のデータ&0))を格納する。 ・符号化回路101では、変数a1が示す位置のBRAMに、BRAM3のデータを格納する。 ・符号化回路101では、変数a2が示す位置のBRAMに、BRAM4のデータを格納する。 ・符号化回路101では、変数b0が示す位置のBRAMに、(BRAM0のデータ)XOR(BRAM1のデータ)XOR(BRAM2のデータ)XOR(BRAM3のデータ)を格納する。

つぎに、制御部1101は、得られた解について、それぞれ変数が示す位置のBRAMがデータを格納するタイミングを特定する。制御部1101は、前倒し実行によりブロックが上書きされる以前の列ベクトル0〜23に対応するタイミングのうち、データを保存するタイミングを決定する。

例えば、前倒し数4の場合に、a0=1となるのは、列ベクトル0と列ベクトル17との各々に対応するタイミングである。換言すると、列ベクトル0と列ベクトル17との各々に対応するタイミングにおいて、(BRAM0のデータ)XOR(BRAM1のデータ)の演算結果を格納することを示す。タイミングが複数ある場合、制御部1101は、いずれを選択してもよい。

また、各変数が示す位置のBRAMのデータを読み出すタイミングは、入力ブロックが上書きされる期間内である。例えば、a0=1を読み出すタイミングは、列ベクトル24に対応するタイミングと、列ベクトル28に対応するタイミングと、において読み出すことを示す。また、例えば、a1=2を読み出すタイミングは、列ベクトル27に対応するタイミングと、列ベクトル29に対応するタイミングと、において読み出すことを示す。

また、例えば、a2=1を読み出すタイミングは、列ベクトル29に対応するタイミングにおいて読み出すことを示す。また、例えば、b0=15を読み出すタイミングは、列ベクトル26に対応するタイミングにおいて読み出すことを示す。

ここで、前倒し数が4の場合について、変数と、格納タイミングと、読み出しタイミングと、のタイミング決定結果を以下に示す。 ・変数 格納タイミング 読み出しタイミング ・a0=1 0 24,28 ・a1=2 3 27,29 ・a2=1 4 29 ・b0=15 16 26

制御部1101は、上記で得られた変数が示す位置のBRAMと、BRAMに格納させるデータと、各タイミングと、に基づいて、符号化回路101を示す回路情報を生成する。具体的に、制御部1101は、変数に値が設定されている場合、部分回路801または部分回路802を設け、変数に値が設定されていない場合、変数が示す位置に部分回路601または部分回路602を設けた符号化回路101を示す回路情報を生成する。

つぎに、制御部1101は、制御信号を生成する制御回路を示す回路情報を生成する。制御回路は、格納タイミングの際に、書き込みイネーブル信号を有効にして、BRAMへデータを書き込ませる。また、制御回路は、格納タイミング以外のタイミングでは、書き込みイネーブル信号を無効にして、BRAMへの書き込みを行わせない。

また、制御回路は、読み出しタイミングの際に、読み出し選択信号を有効にして、BRAMからデータを読み出させる。また、制御回路は、読み出しタイミング以外のタイミングでは、読み出し選択信号を無効にして、XOR回路からの値を出力する。

制御部1101は、上述したタイミング決定結果により、Verilog−HDLなどのハードウェア記述言語によって記述された回路記述を自動生成することが可能である。また、制御部1101は、得られた回路記述を、論理合成ツールに与えることにより、制御回路を示す回路情報が得られる。

図29は、生成される回路記述例を示す説明図である。回路記述2900には、制御回路から出力される書き込みイネーブル信号と読み出し選択信号との値の決定方法と、ブロック番号カウンタの動作と、について詳細に記述されてある。

図30は、符号化回路101と符号化回路101を制御する制御回路とを示す説明図である。ここで、制御回路3000から符号化回路101−4へ入力される各信号と制御回路3000に含まれるブロックとについて簡単に説明する。アドレス1は、入力されるブロックを格納するBRAMに新しいブロックを書き込む、または、当該BRAMからデータを読み出すときのアドレス値を供給する。ブロック番号カウンタは、1ブロック分の符号化処理が終了すると、ブロック番号をインクリメントするカウンタであり、列ベクトルの番号に対応する。

アドレス2は、XOR演算の演算結果を格納するBRAMに、データを書き込むとき、または読み出すときのアドレス値を供給する。アドレス2は、アドレス1のカウンタに同期して値が変化する。符号化回路101−4内のレジスタの段数分だけ、値が遅れて変化していく。

書き込みイネーブル2は、ブロック番号カウンタに同期して値が変化し、XOR演算の演算結果を格納するBRAMにブロックを格納するときだけ有効になる制御信号である。読み出し選択は、選択回路の制御信号であり、XOR演算の演算結果を格納するBRAMにブロックを格納する格納タイミングのときだけ、有効になる制御信号である。読み出し選択は、ブロック番号カウンタに同期して値が変化する。

また、読み出し選択は、AND回路の一入力端に入力される制御信号であって、強制的に出力を0にするための信号である。また、読み出し選択は、BRAM0のデータとBRAM1のデータの、どちらかもしくは両方の値が上書きによって失われているときに、BRAM0のデータとBRAM1のデータを0としてXOR演算したいときに利用され、上述例では使用していない。

図31は、図30に示す回路の動作例を示す説明図である。図31に示すように、ブロック番号カウンタの値が0の場合に、書き込みイネーブル2_a0が1となる。また、ブロック番号カウンタの値が3の場合に、書き込みイネーブル2_a1が1となる。また、ブロック番号カウンタの値が24の場合に、読み出し選択_a0は、1となる。

図32は、前倒し実行処理例を示す説明図である。前倒し実行処理の実行期間中には、出力される符号化データが2倍になる。タイミングT1については、1回目の処理では、列ベクトル24に対応するタイミングにおけるXOR演算の演算結果が出力され、2回目の処理では、列ベクトル0に対応するタイミングにおけるXOR演算の演算結果が出力される。また、タイミングT2については、1回目の処理では、列ベクトル29に対応するタイミングにおけるXOR演算の演算結果が出力され、2回目の処理では、列ベクトル5に対応するタイミングにおけるXOR演算の演算結果が出力される。

図33は、前倒し実行処理を行うための回路構成例を示す説明図である。図33では、前倒し数が4の場合を例に挙げる。RPSハードウェア部422は、回路3201と符号化回路101−4と、回路3202と、を有する。回路3201は、前倒し実行期間中には、先頭からNブロック分の入力ブロックをそのまま出力データとして流す。回路3202は2系統の符号化ブロックを受け取り、次の段の処理に順に流す。

制御部1101は、符号化行列ma1を取得した後に、列ベクトルを入れ替えることによって、BRAMの数を低減させることができる。なお、符号化行列ma1の列ベクトルを入れ替えたとしても、RPS符号化処理の訂正能力は同じである。列ベクトルを交換することは、パケットの送信順序を交換することと等しい。パケットを受信する受診側では、最終的に受け取るパケットが同じになるため、訂正能力も同じである。ただし、訂正できるまでの時間は異なる場合がある。例えば、元の符号化行列において第17番目の符号化データを受信したときに訂正できる場合、列ベクトル17が列ベクトル29へ移動した後の符号化行列では、第29番目の符号化データを受信したときに訂正することとなる。

図34は、符号化行列の列ベクトル入替例を示す説明図である。例えば、制御部1101は、符号化行列ma1のうち(入力ブロック数)列目以降の列ベクトルの各々について、先頭行から順に0が連続して並ぶ数を計数する。そして、制御部1101は、符号化行列ma1に基づいて、計数結果の昇順にソートした符号化行列ma2を生成する。図34の例では、列ベクトル21以降について順番が変更される。

図35は、列ベクトル入替によるBRAMの使用数の変化例を示す説明図である。例えば、入替前の符号化行列ma1では、前倒し数が3の場合、追加されるBRAMが1個であり、前倒し数が5の場合、追加されるBRAMが4個である。これに対して、入替後の符号化行列ma2では、前倒し数が3の場合、追加されるBRAMがなく、前倒し数が5の場合、追加されるBRAMが3個である。このように、列ベクトルを入れ替えることによって、追加されるBRAMの数の低減を図ることができる。

(設計支援装置100による設計支援処理手順例) 図36および図37は、設計支援装置による設計支援処理手順例を示すフローチャートである。まず、設計支援装置100は、符号化行列と、前倒し数と、を取得する(ステップS3601)。設計支援装置100は、符号化行列のうち(入力ブロック数)列目以降の列ベクトルごとに先頭成分から順に0が連続して並ぶ数を計数する(ステップS3602)。設計支援装置100は、符号化行列のうち(入力ブロック数)列目以降の列ベクトルを計数結果の昇順にソートする(ステップS3603)。

つぎに、設計支援装置100は、前倒し数に基づいて消去が行われるタイミングの各々について、消されるブロックを特定する(ステップS3604)。そして、設計支援装置100は、消去が行われるタイミングについて特定した消去されるブロックのうち、消去が行われるタイミングと消去されるブロックに対応する列ベクトルの成分が1であるブロックがあるか否かを判断する(ステップS3605)。成分が1であるブロックがないと判断された場合(ステップS3605:No)、設計支援装置100は、符号化回路を変更せずに利用可能な旨を出力し(ステップS3606)、一連の処理を終了する。

一方、成分が1であるブロックがあると判断された場合(ステップS3605:Yes)、設計支援装置100は、テンプレート論理式を取得する(ステップS3701)。設計支援装置100は、列ベクトルごとに論理式を生成する(ステップS3702)。設計支援装置100は、生成した各論理式の論理積演算を行う論理式Xを生成する(ステップS3703)。そして、設計支援装置100は、論理式Xの各変数の値を求める(ステップS3704)。つぎに、設計支援装置100は、論理式XをTRUEにする変数の値の組み合わせを特定する(ステップS3705)。

設計支援装置100は、特定した組み合わせに基づく列ベクトルに対応するタイミングを特定する(ステップS3706)。設計支援装置100は、特定した組み合わせと特定したタイミングとに基づいて符号化回路と制御回路とを示す回路情報を生成し(ステップS3707)、一連の処理を終了する。

また、FPGAの特徴を利用することにより、ハードウェアリソースの追加なしで符号化処理の処理速度を向上可能である。FPGA内に埋め込まれているBRAMはコンフィギュレーション可能なパターンが限定されている。例えば、XILINX社の7シリーズFPGAの場合、36[KBit]BRAMが最小構成単位である。72Bit幅*512WORDでコンフィギュレーションすると、符号化ハードウェアでは、64Bit*512WORDで利用するとして、1[KB]のブロックを4個保存可能になる。8Byte*128=1024Byteであり、4[KB]=4096Byte=32768Bitである。符号化ハードウェアの入力部にこのBRAMを利用することによって、BRAMを追加することなく、4セット分のデータ(=16KB*4回)を連続して入力可能になり、スループットを向上させることができる。

以上説明したように、設計支援装置100は、前倒し実行中の各タイミングについて、前倒し実行で上書きされるデータに基づく演算と、該演算の結果が該タイミングと同一の他のタイミングとを符号化行列により特定する。これにより、省メモリ量で前倒し実行可能な符号化回路を設計可能とする。これにより、省メモリで前倒し実行可能な符号化回路を設計可能とする。したがって、省メモリであっても、符号化処理のスループットを向上させることができる。

また、設計支援装置100は、特定した論理演算と、特定したタイミングと、に基づいて、符号化回路と、制御回路と、を示す回路情報を生成する。これにより、自動で符号化回路を設計可能となり、設計者の手間を省くことができる。

また、設計支援装置100は、符号化行列の列ベクトルのうち、冗長ブロックを生成する列ベクトルを、先頭成分から順に連続する0の数が少ない順に並び替える。これにより、より少ないメモリで、より多くの前倒し実行が可能となる。

なお、本実施の形態で説明した設計支援方法は、予め用意された設計支援プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本設計支援プログラムは、磁気ディスク、光ディスク、USB(Universal Serial Bus)フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、設計支援プログラムは、インターネット等のネットワークを介して配布してもよい。

100 設計支援装置 101 符号化回路 601,602,801,802 部分回路 ma1,ma2 符号化行列 d1 第1対象データ d2 第2対象データ

QQ群二维码
意见反馈