(57)【要約】  設計支援装置（１００）は、符号化行列（ｍａ１）と、開始タイミングを示す情報と、を取得する。設計支援装置（１００）は、符号化行列の列ベクトルに対応する各タイミングのうち取得した情報が示す開始タイミング以降のタイミングの各々について、ＢＲＡＭに記憶された第１部分データのうち、タイミングにおいて第２部分データによって上書きされる第１部分データを特定する。設計支援装置（１００）は、開始タイミング以降のタイミングの各々について、複数のＸＯＲ演算のうち、特定した第１部分データに基づくＸＯＲ演算を特定する。設計支援装置（１００）は、開始タイミング以降のタイミングの各々について、各タイミングの中の開始タイミングより前の各タイミングのうち、特定したＸＯＲ演算の演算結果がタイミングに対応するベクトルに基づく特定したＸＯＲ演算の演算結果と同一となるタイミングを特定する。
2015136611.tif 000002
【特許請求の範囲】
【請求項１】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、
コンピュータが、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理を実行することを特徴とする設計支援方法。
【請求項２】
前記コンピュータが、
前記開始タイミング以降のタイミングのうちの異なる２つのタイミング同士で、特定した前記論理演算が同一であり、かつ特定した前記論理演算の演算結果が異なる場合には、前記異なる２つのタイミング同士で、特定する前記論理演算が重ならないように、前記論理演算を特定する処理と前記タイミングを特定する処理とを行う、
処理を実行することを特徴とする請求項１に記載の設計支援方法。
【請求項３】
前記コンピュータが、
前記開始タイミング以降のタイミングの各々について特定した前記論理演算の演算結果を格納する記憶領域を前記符号化回路に設けた第２符号化回路と、前記開始タイミング以降のタイミングの各々について特定した前記タイミングにおいて特定した前記論理演算の演算結果を前記記憶領域に格納させる制御回路と、を示す回路情報を生成する、
処理を実行することを特徴とする請求項１または２に記載の設計支援方法。
【請求項４】
前記コンピュータが、
取得した前記符号化行列のベクトルのうち、前記第１数より後のベクトルの各々について、先頭の成分から順に連続する前記所定値と異なる値の数を計数し、
前記符号化行列に基づいて、前記第１数より後のベクトルを計数した前記所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する、
処理を実行し、
前記論理演算を特定する処理では、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する生成した前記符号化行列の前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が前記所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定することを特徴とする請求項１〜３のいずれか一つに記載の設計支援方法。
【請求項５】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援プログラムであって、
コンピュータに、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理を実行させることを特徴とする設計支援プログラム。
【請求項６】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援装置であって、
前記符号化行列を取得し、符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する制御部を有することを特徴とする設計支援装置。
【請求項７】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援プログラムを記録した記録媒体であって、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理をコンピュータに実行させる設計支援プログラムを記録したことを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計支援方法、設計支援プログラム、設計支援装置、および記録媒体に関する。
【背景技術】
【０００２】
従来、インターネットにおいては、通信途中に存在するルータのバッファメモリあふれなどによってパケットが欠落する場合がある。例えば、一般的な通信プロトコルであるＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）では、パケットの欠落が発生することにより、通信速度を一気に落としてしまう場合がある。このため、パケットの欠落が発生する通信環境では、通信速度が著しく遅くなってしまう場合がある。【０００３】
ＴＣＰ／ＩＰの欠点を克服する手法として、ＲＰＳ（Ｒａｎｄｏｍ  Ｐａｒｉｔｙ  Ｓｔｒｅａｍ）符号化処理が公知である（例えば、下記非特許文献１、特許文献１などを参照。）。ＲＰＳ符号化処理において、データ送信側では冗長データを送付し、受信側では、欠落したパケットがある場合に冗長データを用いて欠落したパケットを再現する。また、従来、ＲＰＳ符号化処理については、たとえばソフトウェアによって行われている。【０００４】
また、パケットの送信において、パリティ計算によってパケットのエラーを検出する技術が公知である（例えば、下記特許文献２，３参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２５８７９６号公報
【特許文献２】特開平１０−１９０４８１号公報
【特許文献３】特開２００５−１０２０３７号公報
【非特許文献】
【０００６】
【非特許文献１】亀山裕亮、佐藤裕一、“大規模データを扱うエンジニアリングアプリケーション向けの高速なＡＳＰシステムの構築”、［ｏｎｌｉｎｅ］、マルチメディア，分散，協調とモバイル（ＤＩＣＯＭＯ２００８）シンポジウム、［平成２５年１２月６日検索］、インターネット＜ｈｔｔｐ：／／ｗｗｗ．ｄｉｃｏｍｏ．ｏｒｇ／２００８／ｐｒｏｇｒａｍ／３Ｈ＿ａｂｓｔ．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来、ソフトウェアによって符号化処理を実現すると、符号化処理に時間がかかるという場合がある。また、符号化処理をハードウェア化すると、符号化処理は高速化できても、メモリが少ないと符号化処理のためのデータ転送に待ち時間がかかるという場合がある。そのため、符号化処理を効率よく行うことができないという問題点がある。【０００８】
１つの側面では、本発明は、符号化処理の効率化を図ることができる設計支援方法、設計支援プログラム、設計支援装置、および記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一側面によれば、所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、前記符号化行列を取得し、符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する設計支援方法、設計支援プログラム、設計支援装置、および記録媒体が提案される。
【発明の効果】
【００１０】
本発明の一態様によれば、符号化処理の効率化を図ることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明にかかる設計支援装置による一動作例を示す説明図である。
【図２】図２は、データ送信時のＲＰＳ符号化処理例を示す説明図である。
【図３】図３は、データ受信時のＲＰＳ復号処理例を示す説明図である。
【図４】図４は、データを送信するためのシステム構成例を示す説明図である。
【図５】図５は、ＦＰＧＡ内のブロック例を示す説明図である。
【図６】図６は、符号化回路例を示す説明図である。
【図７】図７は、符号化回路の部分例を示す説明図である。
【図８】図８は、各部分回路の変更例を示す説明図である。
【図９】図９は、符号化回路例２を示す説明図である。
【図１０】図１０は、実施の形態にかかる設計支援装置のハードウェア構成例を示すブロック図である。
【図１１】図１１は、設計支援装置の機能的構成例を示すブロック図である。
【図１２】図１２は、符号化行列例を示す説明図である。
【図１３】図１３は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その１）である。
【図１４】図１４は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その２）である。
【図１５】図１５は、入力ブロック供給を前倒しした場合にデータが上書きされてしまうＢＲＡＭの分布例を示す説明図である。
【図１６】図１６は、前倒し数が１の場合におけるアクセスタイミング例を示す説明図である。
【図１７】図１７は、前倒し数が２の場合におけるアクセスタイミング例を示す説明図である。
【図１８】図１８は、前倒し数が３の場合におけるアクセスタイミング例を示す説明図である。
【図１９】図１９は、前倒し数が４の場合におけるアクセスタイミング例を示す説明図である。
【図２０】図２０は、前倒し数が５の場合におけるアクセスタイミング例を示す説明図である。
【図２１】図２１は、前倒し数が６の場合におけるアクセスタイミング例を示す説明図である。
【図２２】図２２は、前倒し数が７の場合におけるアクセスタイミング例を示す説明図である。
【図２３】図２３は、前倒し数が２または３の場合における符号化回路１０１例を示す説明図である。
【図２４】図２４は、前倒し数が４の場合における符号化回路１０１例を示す説明図である。
【図２５】図２５は、ＢＲＡＭの位置例を示す説明図である。
【図２６】図２６は、テンプレート論理式例を示す説明図である。
【図２７】図２７は、変数とＢＲＡＭの位置との対応関係を示す説明図である。
【図２８】図２８は、ＢＲＡＭの割り当て問題を解くプログラム例を示す説明図である。
【図２９】図２９は、生成される回路記述例を示す説明図である。
【図３０】図３０は、符号化回路１０１と符号化回路１０１を制御する制御回路とを示す説明図である。
【図３１】図３１は、図３０に示す回路の動作例を示す説明図である。
【図３２】図３２は、前倒し実行処理例を示す説明図である。
【図３３】図３３は、前倒し実行処理を行うための回路構成例を示す説明図である。
【図３４】図３４は、符号化行列の列ベクトル入替例を示す説明図である。
【図３５】図３５は、列ベクトル入替によるＢＲＡＭの使用数の変化例を示す説明図である。
【図３６】図３６は、設計支援装置による設計支援処理手順例を示すフローチャート（その１）である。
【図３７】図３７は、設計支援装置による設計支援処理手順例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかる設計支援方法、設計支援プログラム、設計支援装置、および記録媒体の実施の形態を詳細に説明する。
【００１３】
図１は、本発明にかかる設計支援装置による一動作例を示す説明図である。設計支援装置１００は、符号化回路１０１の設計を支援するコンピュータである。符号化回路１０１は、符号化行列ｍａ１と、複数の部分データと、によって符号化処理を行うことによって符号化データを得る。ここで、符号化データは、符号化ブロックと称する。符号化行列ｍａ１は、符号化の対象データを分割した複数の部分データの所定数（以下「第１数」と称する。）の値を有するベクトルを第１数よりも多い第２数有する。ここでの符号化処理は、例えば、ＲＰＳの符号化処理である。また、ここでは、部分データをブロックと称する。図１の例では、対象データは１６のブロックに分割される。図１の符号化行列ｍａ１は、第１数である１６個の値を有する列ベクトルを３０個有する。列ベクトルの各成分は列ベクトルによって異なる。本実施の形態では、また、複数の記憶領域に、符号化回路１０１による符号化処理の対象となる複数のブロックを各々格納しておく。ここでの記憶領域は、ＢＲＡＭ（Ｂｌｏｃｋ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と称する。ＢＲＡＭは、例えば、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）内で利用可能なＲＡＭの一種である。
【００１４】
従来、例えば、ＲＰＳの符号化処理を行うソフトウェアが、０．５［Ｇｂｐｓ］で符号化データを出力すると、１［Ｇｂｐｓ］の通信帯域であっても、０．５［Ｇｂｐｓ］で符号化データが送信されることになる。また、近年の国際通信回線の通信帯域は１００［Ｍｂｐｓ］程度が主流であるが、将来的に１０［Ｇｂｐｓ］となった場合に、ソフトウェアによる処理では、通信帯域が効率よく利用できない。ＲＰＳの符号化処理および復号処理が利用される状況については、国と国を跨ぐ程度のネットワーク規模を想定する。そこで、本実施の形態では、ＲＰＳの符号化処理をハードウェア化することによって、符号化処理の高速化を図る。しかしながら、ＦＰＧＡなどを利用してＲＰＳの符号化処理をハードウェア化した場合、ＢＲＡＭなどに符号化の対象データを格納しなければならないが、ＢＲＡＭの容量が少ないと、ＢＲＡＭなどに対象データを格納するためのデータ転送待ち時間が長くなる。そのため、通信帯域を効率よく利用できない。
【００１５】
そこで、本実施の形態では、設計支援装置１００は、前倒し実行中の各タイミングについて、前倒し実行で上書きされるデータに基づく演算と、該演算の結果が該タイミングと同一の他のタイミングとを符号化行列ｍａ１により特定する。これにより、省メモリ量で前倒し実行可能な符号化回路１０１を設計可能とする。したがって、符号化処理を効率よく行うことができる。符号化処理を効率よく行うとは、省メモリであっても高スループットで行えることである。
【００１６】
ここで、符号化回路１０１には、１つの符号化ブロックを生成する際に、１つの列ベクトルが符号化回路１０１に含まれるＡＮＤ回路の一方に入力される。これにより、いずれのブロックがＸＯＲ回路によるＸＯＲ演算に入力されるか否かが定まる。また、本実施の形態では、冗長データの分だけ出力データ量が増加するため、前提条件として、「（データ入力レート）＜（データ出力レート）」である。
【００１７】
まず、設計支援装置１００は、符号化行列ｍａ１を取得する。つぎに、設計支援装置１００は、符号化処理における符号化行列ｍａ１が有する列ベクトルに対応する複数のタイミングのうち、符号化の第２対象データｄ２を分割した複数の第２部分データへの複数のＢＲＡＭの格納を開始するタイミングを示す情報を取得する。ここでの符号化処理は、符号化の第１対象データｄ１を分割した複数の第１部分データであって、ＢＲＡＭに格納された複数の第１部分データと取得した符号化行列ｍａ１のベクトルの各成分とに基づく符号化処理である。タイミングを示す情報としては、タイミングに対応する列ベクトルの番号であってもよいし、後述する前倒し数であってもよい。例えば、図１の例では、開始タイミングは、列ベクトル０から列ベクトル２９のうちの列ベクトル２７に対応するタイミングである。
【００１８】
つぎに、設計支援装置１００は、各タイミングのうち取得した情報が示す開始タイミング以降のタイミングの各々について、ＢＲＡＭに記憶された複数の第１ブロックのうち、タイミングにおいて第２ブロックによって上書きされる第１部分データを特定する。図１の例では、列ベクトル２７については、ＢＲＡＭ０に格納されていた第１ブロックが上書きされる。列ベクトル２８については、ＢＲＡＭ０およびＢＲＡＭ１に格納されていた第１ブロックが上書きされる。列ベクトル２９については、ＢＲＡＭ０からＢＲＡＭ２に格納されていた第１ブロックが上書きされる。
【００１９】
つぎに、設計支援装置１００は、開始タイミング以降のタイミングの各々について、タイミングに対応する列ベクトルの各成分のうち、特定した第１ブロックに対応する成分が所定値である場合に、特定した第１ブロックに基づく論理演算を特定する。ここで、図１の例では、所定値は１である。ここでの論理演算とは、ＸＯＲ演算である。図１の例では、列ベクトル２８の各成分のうち、ＢＲＡＭ０に格納された第１ブロックに対応する成分が１である。また、列ベクトル２７および列ベクトル２９の各成分のうち、特定した第１ブロックに対応する成分は０である。ここでは、設計支援装置１００は、例えば、符号化回路１０１のＸＯＲ回路のうち、ＢＲＡＭ０のデータが通過するＸＯＲ回路によるＸＯＲ演算を特定する。
【００２０】
そして、設計支援装置１００は、開始タイミング以降のタイミングの各々について、各タイミングの中の開始タイミングより前の各タイミングのうち、特定したＸＯＲ演算の演算結果と同一となるタイミングを特定する。特定したＸＯＲ演算の演算結果は、特定したＸＯＲ演算の演算結果がタイミングに対応するベクトルに基づく演算結果である。例えば、設計支援装置１００は、列ベクトル０に基づく特定した論理演算の演算結果と、列ベクトル２８に基づく特定した論理演算の演算結果とは同一となるため（言い換えれば、列ベクトル０と列ベクトル２８は、第０〜１因子からなる部分列ベクトルがともに［１  ０］で等しいので、ＸＯＲ演算結果も同一になる）、列ベクトル０に対応するタイミングを特定する。
【００２１】
また、図１に示していないが、設計支援装置１００は、開始タイミング以降のタイミングのうちの異なる２つのタイミング同士で、特定した論理演算が同一であり、かつ特定した論理演算の演算結果が異なるか否かを判断する。設計支援装置１００は、論理演算が同一であり、かつ特定した論理演算の演算結果が異なる場合には、異なる２つのタイミング同士で、特定する論理演算が重ならないように、論理演算を特定する処理とタイミングを特定する処理とを行う。
【００２２】
これにより、省メモリ量で前倒し実行可能な符号化回路１０１を設計可能とする。したがって、符号化処理を効率よく行うことができる。
【００２３】
また、図１に示していないが、設計支援装置１００は、特定した論理演算と、特定したタイミングと、に基づいて、符号化回路１０１と、制御回路と、を示す回路情報を生成する。ここで、生成される符号化回路１０１は、開始タイミング以降のタイミングの各々について特定した論理演算の演算結果を格納するＢＲＡＭを符号化回路１０１に設けた回路である。また、制御回路は、開始タイミング以降のタイミングの各々について特定したタイミングにおいて特定した論理演算の演算結果をＢＲＡＭに格納させる制御を行う回路である。これにより、自動で符号化回路１０１を示す回路情報が得られるため、設計者の手間を省くことができる。
【００２４】
また、図１に示していないが、設計支援装置１００は、取得した符号化行列ｍａ１の列ベクトルのうち、第１数より後のベクトルの各々について、先頭行から順に連続する所定値と異なる値の数を計数する。上述したように所定値は１であり、所定値と異なる値は０である。そして、設計支援装置１００は、符号化行列ｍａ１に基づいて、第１数より後のベクトルを計数した所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する。並び替えた符号化行列の例は、後述する図３４に示す。そして、設計支援装置１００は、生成した符号化行列ｍａ１を用いて、上述した論理演算を特定する処理と、タイミングを特定する処理と、を行う。これにより、少ないメモリ容量で、より多くの前倒し実行が可能となる。
【００２５】
（ＲＰＳ符号化／復号）
図２は、データ送信時のＲＰＳ符号化処理例を示す説明図である。ここでは、本実施の形態で利用するＲＰＳ符号化について簡単に説明する。インターネットにおいては、通信途中に存在するルータのバッファメモリあふれなどによってパケットが欠落する場合がある。例えば、一般的な通信プロトコルであるＴＣＰ／ＩＰでは、パケットの欠落が発生することにより、通信速度を一気に落としてしまう場合がある。このため、パケット欠落がしばしば発生する通信環境では、通信速度が著しく遅くなってしまう場合がある。
【００２６】
ＴＣＰ／ＩＰの欠点を克服する手法として、ＲＰＳ符号化処理が公知である。ＲＰＳ符号化処理におけるデータ送信側では冗長データを送付し、ＲＰＳ符号化処理における受信側では、欠落したパケットがある場合に冗長データを用いて欠落したパケットを再現する。これにより、パケット欠落時のデータの再送回数の低減を図る。
【００２７】
図２に示すように、ＲＰＳ符号化処理では、例えば、１６［ＫＢ］のデータを１［ＫＢ］ごとにブロックとして切り出す。ここでは、１６［ＫＢ］のデータがブロック［０］〜ブロック［１５］として切り出される。つぎに、ＲＰＳ符号化処理では、ブロック［０］〜ブロック［１５］をそのまま送信する。そして、ＲＰＳ符号化処理では、ブロック［０］〜ブロック［１５］のうちの取りうる組合せごとにＸＯＲ演算を行うことによって生成した複数の冗長ブロックを送信する。
【００２８】
図３は、データ受信時のＲＰＳ復号処理例を示す説明図である。ＲＰＳ復号処理では、インターネットを介して受信されたデータについて、データが正常かチェックする処理、欠落したパケットがあるかチェックする処理、パケットヘッダを除去してＲＰＳのブロックを取り出す処理などがある。図３の例では、ブロック［２］がパケット欠落して受信できないとする。そこで、ＲＰＳ復号処理では、ブロック［０］［１］［３］〜［１５］と冗長ブロック［０］を利用してブロック［２］を再現する。このようにして、ＲＰＳ復号処理では、受信した１６個以上のブロック（冗長ブロック含む）を利用して元の１６［ＫＢ］のデータにする。
【００２９】
また、図２および図３の例では、１６［ＫＢ］のデータが１［ＫＢ］ずつに分割される例を示したが、元データのサイズやデータの分割方法、冗長ブロックの算出方法については特に限定しない。
【００３０】
図４は、データを送信するためのシステム構成例を示す説明図である。システム４００は、ＣＰＵ４０１と、主記憶装置４０２と、拡張ボード４０４と、を有する。ＣＰＵ４０１と拡張ボード４０４とはＰＣＩ  ＥＸＰＲＥＳＳバス４０３を介して接続される。具体的に、例えば、拡張ボード４０４は、設計支援装置１００であるサーバに設けられた拡張スロットに接続される。
【００３１】
拡張ボード４０４は、ＲＡＭ４１１と、ＦＰＧＡ４１２と、ＬＡＮコネクタ４１３と、を有する。また、ＦＰＧＡ４１２は、スイッチ、ルータを経由してＬＡＮコネクトがＬＡＮやＷＡＮなどのネットワークＮＥＴを介しデータ受信ホスト４３０などの他のサーバなどに接続される。
【００３２】
図５は、ＦＰＧＡ内のブロック例を示す説明図である。図５に示すＦＰＧＡ４１２内のブロックは、符号化回路１０１がプログラムされた後の内部構成を示すブロック例である。ＦＰＧＡ４１２は、ＰＣＩ  ＥＸＰＲＥＳＳエンドポイント５０１と、メモリコントローラ５０２と、複数のＢＲＡＭと、符号化回路１０１と、データ送信バッファ５０３と、パケットヘッダ追加部５０４と、ＭＡＣレイヤー部５０５と、物理層部５０６と、を有する。また、ＦＰＧＡ４１２は、その他、各部を制御する回路を有する。
【００３３】
メモリコントローラ５０２と、複数のＢＲＡＭとは、バスを介して接続される。メモリコントローラ５０２は、図４に示したＲＡＭ４１１と、複数のＢＲＡＭを制御する機能を有し、ＰＣＩ  ＥＸＰＲＥＳＳエンドポイント５０１を介して図４に示したＣＰＵ４０１からの指示を受け付ける。例えば、メモリコントローラ５０２は、ＲＡＭ４１１からのデータをＢＲＡＭに格納する。ＰＣＩ  ＥＸＰＲＥＳＳエンドポイント５０１は、図４に示したＰＣＩ  ＥＸＰＲＥＳＳバス４０３と、メモリコントローラ５０２と、に接続される。
【００３４】
符号化回路１０１は、ＢＲＡＭからのデータをＲＰＳ符号化する。また、データ送信バッファ５０３は、符号化回路１０１による符号化データを一時的に格納する。パケットヘッダ追加部５０４は、例えば、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）／ＩＰプロトコルに基づくパケットのヘッダを符号化データに追加する。ＭＡＣレイヤー部５０５は、例えば、ＵＤＰ／ＩＰプロトコルの後の処理、ＭＡＣレイヤーのプロトコルに応じた処理を行う。物理層部５０６は、例えば、ＭＡＣレイヤー部５０５からのデジタルデータに対して、電気や光などを用いたアナログ信号媒体へ信号を送出するための処理を行う。物理層部５０６は、ＬＡＮコネクタ４１３に接続される。
【００３５】
図６は、符号化回路例を示す説明図である。図７は、符号化回路の部分例を示す説明図である。図６の例では、符号化回路１０１−１への入力となるデータを記憶するＢＲＡＭが１６の場合を例に挙げる。図６に示す符号化回路１０１−１は、符号化処理に対応する回路である。符号化回路１０１−１は、部分回路６０１−１〜６０１−８と、部分回路６０２−１〜６０２−７と、を有する。
【００３６】
図７に示すように、部分回路６０１は、レジスタ７０１，７０２と、ＡＮＤ回路７０３，７０４と、ＸＯＲ回路７０５と、レジスタ７０６と、を有する。レジスタ７０１，７０２は、ＢＲＡＭからのデータを一時的に格納する。図７に示すように、ＢＲＡＭはある１構成例によれば、３６［ＫＢｉｔ］のＲＡＭであり、１ワードが７２ビット、ワード数が５１２として利用され、１［ＫＢ（Ｂｙｔｅ）］の入力ブロックを４個保持可能である。また、ＡＮＤ回路７０３，７０４は、レジスタからの信号と、０または１の信号と、を入力として、論理積演算結果をＸＯＲ回路へ出力する。０または１の信号としては、例えば、符号化行列内の対応する値が入力される。ＸＯＲ回路７０５は、２つのＡＮＤ回路７０３，７０４からの出力信号を入力として、演算結果をレジスタ７０６へ出力する。
【００３７】
また、図７に示すように、部分回路６０２は、ＸＯＲ回路７１０と、レジスタ７１１と、を有する。ＸＯＲ回路７１０は、各レジスタ７０６からの出力信号を入力として、ＸＯＲ演算の演算結果をレジスタ７１１へ出力する。レジスタ７１１は、ＸＯＲ回路の出力信号を一時的に格納する。図６に示すように、符号化回路１０１には、部分回路６０１は（ＢＲＡＭの数／２）個設けられ、部分回路６０２は出力信号が１つになるまでの数だけ設けられる。
【００３８】
ここで、図４に示したＲＰＳソフトウェア部４２１と、図４に示したＲＰＳハードウェア部４２２と、の各々の処理について簡単に説明する。例えば、ＣＰＵ４０１が実行するＲＰＳソフトウェア部４２１は、送信したい対象データを主記憶装置４０２の転送バッファ領域に格納する。そして、ＲＰＳソフトウェア部４２１は、ＲＰＳハードウェア部４２２に実行を指示する。ＲＰＳハードウェア部４２２は、符号化回路１０１と、符号化回路１０１を制御する制御回路と、を含む。
【００３９】
（１）ＲＰＳハードウェア部４２２は、ＦＰＧＡ４１２内のＤＭＡ回路が転送バッファのデータをＲＡＭ４１１へ転送する。（２）ＲＰＳハードウェア部４２２は、ＲＡＭ４１１から合計１６［ＫＢ］のデータを１［ＫＢ］ずつ順にＢＲＡＭ０〜ＢＲＡＭ１５へ書き込む。（３）ＲＰＳハードウェア部４２２は、ｊ＝０とする。そして、（４）ＲＰＳハードウェア部４２２は、後述する符号化行列の第ｊ列の値を符号化回路１０１のＡＮＤ回路に入力する。つぎに、（５）ＲＰＳハードウェア部４２２は、ＢＲＡＭ０〜１５のアドレス０〜１０２３を読み出しつつ、出力されるＸＯＲ演算後の１［ＫＢ］の符号化データをデータ送信バッファ５０３やパケットヘッダ追加部５０４などの後続の処理に渡す。そして、（６）ＲＰＳハードウェア部４２２は、ｊ＝ｊ＋１とし、ｊが符号化行列の列数より多くなるまで（４）〜（６）を繰り返し、ｊが符号化行列の列数より多くなったら（２）に戻る。なお、ｊが符号化行列の列数に達する以前に、データ受信ホスト４３０からデータ受信完了通知が届いた場合は、これ以上の冗長ブロックを送出する必要がないため、（２）に戻る。図４では省略しているが、データ受信完了通知を受け取るための回路が、ＲＰＳハードウェア部４２２に含まれる。このようにして、ハードウェアとソフトウェアとが協調して対象データを符号化して送信することができる。
【００４０】
図８は、各部分回路の変更例を示す説明図である。部分回路８０１は、部分回路６０１に含まれるＸＯＲ回路によるＸＯＲ演算の演算結果を格納するＢＲＡＭを設けた例である。部分回路８０１には、部分回路６０１に対して、ＸＯＲ回路からの出力信号を格納するＢＲＡＭが設けられ、レジスタからの出力信号と、ＢＲＡＭからの出力信号と、を選択して出力する選択回路８１１と、が設けられる。また、部分回路８０１には、選択回路８１１からの信号を出力するか否かを制御するＡＮＤ回路８１２と、が設けられる。
【００４１】
部分回路８０２は、部分回路６０２に含まれるＸＯＲ回路によるＸＯＲ演算の演算結果を格納するＢＲＡＭを設けた例である。部分回路８０２には、部分回路６０２に対して、ＸＯＲ回路からの出力信号を格納するＢＲＡＭが設けられ、レジスタからの出力信号とＢＲＡＭからの出力信号とを選択して出力する選択回路８２１が設けられる。
【００４２】
図９は、符号化回路例２を示す説明図である。符号化回路１０１−２は、符号化回路１０１−１に含まれる各部分回路６０１が部分回路８０１に置き換えられた回路である。また、符号化回路１０１−２は、符号化回路１０１−１に含まれる部分回路６０２−１〜６０２−６がそれぞれ部分回路８０２−１〜８０２−６に置き換えられた回路である。このようにＸＯＲ回路によるＸＯＲ演算の中間結果をＢＲＡＭに格納することによって、スループットの向上を図る。
【００４３】
また、ここでは、復号処理について簡単に説明する。復号処理のうち、欠落したブロックを、受信した符号化ブロックから再構成する処理は、符号化回路と同じ回路を利用可能である。ただし、復号回路の入力部に配置するＢＲＡＭの数は最大で、符号化行列の列ベクトル数になる。また、復号回路のうちのＡＮＤ回路に入力するデータは、符号化行列の列ベクトルでなく、復号のためのベクトルである。復号回路は、復号ベクトルを、欠落したブロック数が１〜２程度などの少ないときは予め計算して記憶部に格納しておく。これにより、復号回路は、記憶部からテーブル引きのように復号ベクトルを取得できるため、高速になる。復号回路は、欠落したブロック数が多いときはガウス消去などのアルゴリズムに従って動的に計算して求める。動的に計算するため、時間がかかる。
【００４４】
以上を踏まえて設計支援装置１００による符号化回路１０１を示す回路情報の生成処理について詳細に説明する。ここで、設計支援装置１００は、例えば、利用者端末装置とするが、上述したシステム４００であってもよい。
【００４５】
（設計支援装置１００のハードウェア構成例）
図１０は、実施の形態にかかる設計支援装置のハードウェア構成例を示すブロック図である。図１０において、設計支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１００２と、ＲＡＭ１００３と、ディスクドライブ１００４と、ディスク１００５と、を有する。設計支援装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１００６と、入力装置１００７と、出力装置１００８と、を有している。また、各部はバス１０００によってそれぞれ接続されている。
【００４６】
ここで、ＣＰＵ１００１は、設計支援装置１００の全体の制御を司る。ＲＯＭ１００２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１００３は、ＣＰＵ１００１のワークエリアとして使用される。ディスクドライブ１００４は、ＣＰＵ１００１の制御にしたがってディスク１００５に対するデータのリード／ライトを制御する。ディスク１００５は、ディスクドライブ１００４の制御で書き込まれたデータを記憶する。ディスク１００５としては、磁気ディスク、光ディスクなどが挙げられる。
【００４７】
Ｉ／Ｆ１００６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続され、このネットワークＮＥＴを介して他の装置に接続される。そして、Ｉ／Ｆ１００６は、ネットワークＮＥＴと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１００６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００４８】
入力装置１００７は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置１００７は、カメラから画像や動画を取り込むこともできる。また、入力装置１００７は、マイクから音声を取り込むこともできる。出力装置１００８は、ＣＰＵ１００１の指示により、データを出力するインターフェースである。出力装置１００８には、ディスプレイやプリンタが挙げられる。
【００４９】
（設計支援装置１００の機能的構成例）
図１１は、設計支援装置の機能的構成例を示すブロック図である。設計支援装置１００は、制御部１１０１と、記憶部１１０２と、を有する。記憶部１１０２は、例えば、ＲＡＭ１００３やディスク１００５などによって実現される。制御部１１０１の処理は、例えば、ＣＰＵ１００１がアクセス可能な記憶装置に記憶された設計支援プログラムにコーディングされる。そして、ＣＰＵ１００１が記憶装置から設計支援プログラムを読み出して、設計支援プログラムにコーディングされている処理を実行することにより、制御部１１０１の処理が実現される。また、制御部１１０１の処理結果は、例えば、記憶部１１０２に記憶される。
【００５０】
記憶部１１０２には、例えば、上述した部分回路６０１−１〜６０１−８の各々を示す回路情報がテンプレート回路情報として格納されてある。また、記憶部１１０２には、後述するテンプレート式が格納されてある。
【００５１】
まず、制御部１１０１は、符号化行列と、前倒し数と、を取得する。取得形式としては、例えば、ＲＡＭ１００３やディスク１００５などの記憶装置に記憶された符号化行列と前倒し数とを読み出すことにより取得してもよいし、入力装置１００７などを介して利用者から取得してもよい。前倒し実行とは、１回目の処理に２回目の処理を重ね合わせることである。重ね合わせる量を増やすことは、実行開始間隔を短縮することに相当する。前倒し数とは、重ね合わせる量を示す。
【００５２】
図１２は、符号化行列例を示す説明図である。符号化行列ｍａ１の各行は、分割された各ブロックに対応する。符号化行列ｍａ１の各列は、送信する符号化ブロックの順序に対応する。列ベクトルは、どのブロックについてＸＯＲ演算を行うかを表す。具体的に、ＲＰＳ符号化処理では、まず各ブロックをそのまま出力するため、符号化行列ｍａ１のうち０〜１５列目までは、各行の値が順に１になる。これにより、０番目から１５番目までには、１６［ＫＢ］のデータが分割されたブロック［０］〜ブロック［１５］が順に送信される。
【００５３】
つぎに、符号化行列ｍａ１のうち１６列目以降については、冗長データを作成可能な情報が設定されてある。例えば、図１２に示す１６列目については、各成分がすべて１になっているため、１６番目に送信されるブロックは、ＢＲＡＭ０からＢＲＡＭ１５までのデータについてワードごとにＸＯＲ演算が行われたデータとなる。１７番目に送信されるブロックは、例えば、ＢＲＡＭ０，２，４，６，８，１０，１２，１４のデータについてワードごとにＸＯＲ演算が行われたデータとなる。図１２の例では、説明の簡単化のために、符号化行列ｍａ１のサイズを１６行３０列としているが、特に限定しない。
【００５４】
図１３は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その１）である。以降のアクセスタイミング図は、複数のＸＯＲ回路によって参照されるブロックと、入力されるブロックを格納するＢＲＡＭ０〜１５と、の対応関係を「＃」によって示す。前倒し数が０の場合には、上述した符号化回路１０１がそのまま利用されることになる。
【００５５】
図１４は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その２）である。ブロック２９が出力された後、新しい１６［ＫＢ］のデータがＢＲＡＭ０〜１５に書き込まれる。符号化回路１０１が冗長データについてのブロックを計算中に、ＢＲＡＭ０〜１５への入力ブロックの供給ができない。そのため、前倒し数が０であるとスループットが低下するが、前倒し数を多くすることによって、スループットが向上する。
【００５６】
図１５は、入力ブロック供給を前倒しした場合にデータが上書きされてしまうＢＲＡＭの分布例を示す説明図である。図１５の例では、１サイクル〜１６サイクル早くする場合も同様に、各ブロックの作成に「＃」が設けられているＢＲＡＭのデータを利用するため、各ブロックの作成についての符号化処理が正常に行われない場合がある。
【００５７】
そこで、制御部１１０１は、前倒しを行っても符号化処理が正常に行われるように、上述した部分回路８０１や部分回路８０２のようにＢＲＡＭを設けた符号化回路１０１を示す回路情報を生成する。
【００５８】
具体的に、制御部１１０１は、前倒し数に基づいて、前倒しによって消されるデータと、消されるタイミングと、の組み合わせを特定する。この組み合わせは、第ｉ行ｊ列によって表すことができる。例えば、制御部１１０１は、前倒し数に基づいて、アクセスタイミング図の各データの位置のうち前倒しによって消されるデータの位置に対して色づけを行うことによって、組み合わせを特定してもよい。そして、制御部１１０１は、特定した組み合わせの各々について、符号化行列ｍａ１のうち、特定した組み合わせに対応する成分が１であるか否かを判断する。
【００５９】
制御部１１０１は、特定した組み合わせのうち、組み合わせに対応する成分が１である組み合わせがない場合、符号化回路１０１−１によって符号化処理を行うことができると判断する。一方、制御部１１０１は、特定した組み合わせのうち、組み合わせに対応する成分が１である組み合わせがない場合、符号化回路１０１−１によって符号化処理を行うことができないと判断する。
【００６０】
図１６は、前倒し数が１の場合におけるアクセスタイミング例を示す説明図である。前倒し数が１である場合、ＢＲＡＭ０〜１５への入力ブロックの供給を１サイクル早くさせる。この場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消される。図１６の例では、符号化ブロック２９の作成においてＢＲＡＭ０のデータに対してＸＯＲ演算を行っていないため、符号化回路１０１−１によって符号化処理が正常に行われる。制御部１１０１は、前倒し数が１の場合、符号化回路１０１−１を変更せずに前倒しできると判定する。
【００６１】
図１７は、前倒し数が２の場合におけるアクセスタイミング例を示す説明図である。前倒し数が２の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を２サイクル早くさせる。前倒し数が２の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消され、ＢＲＡＭ０のデータが利用されているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が２の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消されるが、ＢＲＡＭ０およびＢＲＡＭ１の各データが利用されていないため、符号化回路１０１−１によって符号化処理が正常に行われる。そのため、制御部１１０１は、前倒し数が２の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００６２】
ただし、図１７の例では、符号化ブロック２８の作成時と同様に符号化ブロック０の作成時にＢＲＡＭ０のデータを利用したＸＯＲ演算を行っている。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、符号化ブロック２８の作成時に該演算結果が流用可能である。
【００６３】
図１８は、前倒し数が３の場合におけるアクセスタイミング例を示す説明図である。前倒し数が３の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を３サイクル早くさせる。前倒し数が３の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が３の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が３の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消される。ＢＲＡＭ０からＢＲＡＭ２の各データを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。そのため、制御部１１０１は、前倒し数が２の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００６４】
ただし、図１８の例では列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることにより、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。
【００６５】
図１９は、前倒し数が４の場合におけるアクセスタイミング例を示す説明図である。前倒し数が４の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を４サイクル早くさせる。前倒し数が４の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が４の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が４の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消され、ＢＲＡＭ１のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が４の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ３のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が４の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００６６】
ただし、図１９の例では列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。また、図１９の例では列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。また、図１９の例では列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２９に対応するタイミングにおいて該演算結果が流用可能である。
【００６７】
図２０は、前倒し数が５の場合におけるアクセスタイミング例を示す説明図である。前倒し数が５の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を５サイクル早くさせる。前倒し数が５の場合、列ベクトル２５に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が５の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０のデータおよびＢＲＡＭ１の各データが上書きによって消され、ＢＲＡＭ０およびＢＲＡＭ１のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００６８】
また、前倒し数が５の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消されるが、ＢＲＡＭ０からＢＲＡＭ２のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が５の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００６９】
また、前倒し数が５の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ４の各データが上書きによって消される。そして、ＢＲＡＭ３およびＢＲＡＭ４のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が５の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００７０】
ただし、図２０の例では列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。
【００７１】
また、図２０の例では列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。また、図２０の例では列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。また、列ベクトル２９に対応するタイミングと同様に列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算が行われる。
【００７２】
そこで、列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果が格納される。また、列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算の演算結果が格納される。これにより、列ベクトル２９に対応するタイミングにおいて各演算結果が流用可能である。
【００７３】
図２１は、前倒し数が６の場合におけるアクセスタイミング例を示す説明図である。前倒し数が６の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を６サイクル早くさせる。前倒し数が６の場合、列ベクトル２４に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消され、ＢＲＡＭ０のデータを参照しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が６の場合、列ベクトル２５に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消される。しかし、ＢＲＡＭ０およびＢＲＡＭ１の各データを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が６の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消され、ＢＲＡＭ０からＢＲＡＭ２の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００７４】
また、前倒し数が６の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ３のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が６の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ４の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が６の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ５の各データが上書きによって消される。そして、ＢＲＡＭ３およびＢＲＡＭ４の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が６の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００７５】
ただし、図２１の例では列ベクトル２４に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２４に対応するタイミングにおいて該演算結果が流用可能である。
【００７６】
また、図２１の例では、列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。
【００７７】
また、図２１の例では、列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。また、図２１の例では、列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。また、列ベクトル２９に対応するタイミングと同様に列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算が行われる。
【００７８】
そこで、列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果を格納しておく。そして、列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算の演算結果を格納しておく。これにより、列ベクトル２９に対応するタイミングにおいて各演算結果が流用可能である。
【００７９】
図２２は、前倒し数が７の場合におけるアクセスタイミング例を示す説明図である。前倒し数が７の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を７サイクル早くさせる。前倒し数が７の場合、列ベクトル２３に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が７の場合、列ベクトル２４に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２５に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消される。そして、ＢＲＡＭ２およびＢＲＡＭ３の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ０からＢＲＡＭ３の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００８０】
また、前倒し数が７の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ４の各データが上書きによって消され、ＢＲＡＭ３のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ５の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ６の各データが上書きによって消される。そして、ＢＲＡＭ３、ＢＲＡＭ４およびＢＲＡＭ６の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が７の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００８１】
ただし、図２２の例では、列ベクトル２４に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。列ベクトル０に対応するタイミングにおいて、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２４に対応するタイミングにおいて、該演算結果が流用可能である。
【００８２】
また、図２２の例では、列ベクトル２５に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ２およびＢＲＡＭ３の各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいて、ＢＲＡＭ２およびＢＲＡＭ３の各データを利用したＸＯＲ演算の演算結果が格納される。これにより、列ベクトル２５に対応するタイミングにおいて該演算結果が流用可能である。しかしながら、理由は後述するが、図９の回路中に配置されるＢＲＡＭから決まる性質上、必ずしも流用可能とはならない。
【００８３】
また、図２２の例では、列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。
【００８４】
また、図２２の例では、列ベクトル２７に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２７に対応するタイミングにおいて該演算結果が流用可能である。
【００８５】
また、図２２の例では、列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。
【００８６】
また、図２２の例では、列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。さらに、列ベクトル２９に対応するタイミングと同様に列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算が行われる。また、列ベクトル２９に対応するタイミングと同様に列ベクトル６に対応するタイミングにおいてＢＲＡＭ６のデータのみのＸＯＲ演算が行われる。列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果と、列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算の演算結果と、が格納される。これにより、列ベクトル２９に対応するタイミングにおいて該演算結果が流用可能である。
【００８７】
ただし、列ベクトル３に対応するタイミングにおいて「（ＢＲＡＭ２のデータ＆列ベクトル［２］）ＸＯＲ（ＢＲＡＭ３のデータ＆列ベクトル［３］）」の演算結果をＢＲＡＭに格納させる。その後に、列ベクトル１６に対応するタイミングにおいて該演算結果を格納させると、列ベクトル３に対応するタイミングにおける演算結果が上書きされてしまう。そのため、制御部１１０１は、図２２の前倒し数が７の場合、前倒し実行ができないと判定する。
【００８８】
図１６〜図２２を用いて説明したように、符号化回路１０１−１をそのまま流用できない場合であっても、いずれかのＸＯＲ演算の演算結果をＢＲＡＭに格納しておくことによって、前倒し実行が可能な場合がある。例えば、前倒し数が２または３の場合における符号化回路１０１例を図２３に示し、前倒し数が４の場合における符号化回路１０１例を図２４に示す。
【００８９】
図２３は、前倒し数が２または３の場合における符号化回路１０１例を示す説明図である。符号化回路１０１−３は、符号化回路１０１−１のうち部分回路６０１−１が部分回路８０１−１に置き換えられた回路である。前倒し数が２または３の場合に、符号化回路１０１−３では、列ベクトル０に対応するタイミングにおいて、「（ＢＲＡＭ０のデータ＆列ベクトル０）ＸＯＲ（ＢＲＡＭ１のデータ＆列ベクトル１）」の演算結果がＢＲＡＭに格納される。また、符号化回路１０１−３では、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭに格納された演算結果が選択回路によって選択されて後段に出力される。
【００９０】
図２４は、前倒し数が４の場合における符号化回路１０１例を示す説明図である。符号化回路１０１−４は、符号化回路１０１−１のうち、部分回路６０１−１が部分回路８０１−１に置き換えられ、部分回路６０１−２が部分回路８０１−２に置き換えられ、部分回路６０２−１が部分回路８０２−１に置き換えられた回路である。
【００９１】
前倒し数が４の場合に、符号化回路１０１−４では、列ベクトル０に対応するタイミングにおいて、「（ＢＲＡＭ０のデータ＆列ベクトル［０］）ＸＯＲ（ＢＲＡＭ１のデータ＆列ベクトル［１］）」の演算結果がＢＲＡＭに格納される。また、符号化回路１０１−４では、列ベクトル３に対応するタイミングにおいて、「（ＢＲＡＭ２のデータ＆列ベクトル［２］）ＸＯＲ（ＢＲＡＭ３のデータ＆列ベクトル［３］）」の演算結果がＢＲＡＭに格納される。また、符号化回路１０１−４では、列ベクトル１６に対応するタイミングにおいて、「｛（ＢＲＡＭ０のデータ＆列ベクトル［０］）ＸＯＲ（ＢＲＡＭ１のデータ＆列ベクトル［１］）｝ＸＯＲ｛（ＢＲＡＭ２のデータ＆列ベクトル［２］）ＸＯＲ（ＢＲＡＭ３のデータ＆列ベクトル［３］）｝の演算結果がＢＲＡＭに格納される。
【００９２】
つぎに、追加するＢＲＡＭの位置の決定方法について詳細に説明する。具体的には、制御部１１０１は、符号化回路１０１−１に含まれる部分回路６０１と部分回路６０２のうち、いずれを部分回路８０１または部分回路８０２に置き換えるかを決定する。
【００９３】
図２５は、ＢＲＡＭの位置例を示す説明図である。符号化回路１０１−２によれば、ＸＯＲ演算の演算結果をＢＲＡＭによって保持するため、図２５に示すような位置の演算結果をＢＲＡＭに保存可能である。
【００９４】
図２５の＜保存可能／不可能の例＞に示すように、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の出力位置に設けられるＢＲＡＭを例に挙げる。例えば、このＢＲＡＭには（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の演算結果を格納させると決定された場合、ＢＲＡＭ０のデータまたはＢＲＡＭ１の各データについては格納させることができない。ただし、｛（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）｝ＸＯＲ｛（ＢＲＡＭ２のデータ）ＸＯＲ（ＢＲＡＭ３のデータ）｝の出力位置に設けられるＢＲＡＭを利用すれば、ＢＲＡＭ０のデータを格納可能である。また、格納されたデータを使ってＸＯＲ演算が可能であるため、実際に保存できるデータの組み合わせは複数ある。
【００９５】
図２６は、テンプレート論理式例を示す説明図である。まず、制御部１１０１は、テンプレート論理式２６００を取得する。図２６に示すテンプレート論理式２６００では、入力ブロックが１６ブロックである場合を例に挙げる。換言すれば、符号化行列ｍａ１が１６行の場合を例に挙げる。
【００９６】
図２７は、変数とＢＲＡＭの位置との対応関係を示す説明図である。例えば、テンプレート論理式２６００に含まれる変数ａ０〜ａ７は、それぞれ入力ブロックを格納するＢＲＡＭから最前段のＸＯＲ回路の出力結果を格納可能なＢＲＡＭがいずれのデータを格納するかを示す。例えば、変数ａ０は、ＢＲＡＭ０のデータとＢＲＡＭ１のデータとのＸＯＲ演算の演算結果を保持するＢＲＡＭがいずれのデータを格納するかを示す。例えば、テンプレート論理式２６００に含まれる変数ｂ０〜ｂ３は、それぞれ入力ブロックを格納するＢＲＡＭから２段目のＸＯＲ回路の出力結果を格納可能なＢＲＡＭがいずれのデータを格納するかを示す。例えば、変数ｂ０は、ＢＲＡＭ０のデータとＢＲＡＭ１のデータとのＸＯＲ演算の演算結果と、ＢＲＡＭ２のデータとＢＲＡＭ３のデータとのＸＯＲ演算の演算結果と、のＸＯＲ演算の演算結果を保持するＢＲＡＭがいずれのデータを格納するかを示す。例えば、テンプレート論理式２６００に含まれる変数ｃ０〜ｃ１は、それぞれ入力ブロックを格納するＢＲＡＭから３段目のＸＯＲ回路の出力結果を格納可能なＢＲＡＭがいずれのデータを格納するかを示す。例えば、変数ｃ０は、ＢＲＡＭ０のデータからＢＲＡＭ３のデータまでのＸＯＲ演算の演算結果と、ＢＲＡＭ４のデータからＢＲＡＭ７のデータまでのＸＯＲ演算の演算結果と、のＸＯＲ演算の演算結果を保持するＢＲＡＭがいずれのデータを格納するかを示す。変数ａと、変数ｂと、変数ｃと、がとりうる値の範囲を以下に示す。
【００９７】
０≦ａｎ（ｎ＝０〜７）≦（２＾２）−１＝３
０≦ｂｍ（ｍ＝０〜３）≦（２＾４）−１＝１５
０≦ｃｌ（ｌ＝０〜１）≦（２＾８）−１＝２５５
【００９８】
＾はべき乗演算子を示す。ただし、ｂ０を例に挙げると、ｂ０＝７やｂ０＝９などの値については、実際に符号化回路１０１−１では計算していないため、とることができない。また、例えば、ａ０＝３は、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の演算結果がＢＲＡＭに格納されることを示す。例えば、ａ０＝２は、（ＢＲＡＭ０のデータ＆０）ＸＯＲ（ＢＲＡＭ１のデータ＆１）の演算結果がＢＲＡＭに格納されることを示す。例えば、ａ０＝１は、（ＢＲＡＭ０のデータ＆１）ＸＯＲ（ＢＲＡＭ１のデータ＆０）の演算結果がＢＲＡＭに格納されることを示す。
【００９９】
制御部１１０１は、取得したテンプレート論理式２６００に基づいて、符号化行列ｍａ１のうち入力されるブロック数以降の列の各々について、論理式を求める。ここでは、制御部１１０１は、列１６〜列２９の各々について論理式を求める。具体的に、制御部１１０１は、変数が対応する行、ＢＲＡＭｘ〜ＢＲＡＭｙについて、上述した各アクセスタイミング図において、「＃」が付いている箇所を１として、バイナリ符号化する。バイナリ符号化した数値が、その変数がとりうる値の集合の要素である。変数ｂ０を例に挙げると、制御部１１０１は、変数ｂ０が対応する行、ＢＲＡＭ０〜ＢＲＡＭ３について、「＃」が付されている位置を１としてバイナリ符号化する。ＢＲＡＭ０が最下位ビットであり、ＢＲＡＭ３が最上位ビットに対応する。例えば、０列目が０００１であり、１列目が００１０であり、２列目が０１００であり、３列目が１０００であり、４列目から１５列目が００００であり、１６，１９，２０，２６列目が１１１１であり、１７列目が０１０１であり、１８列目が００１１である。変数ｂ０がとりうる値は｛０００１，００１０，０１００，１０００，００００，１１１１，０１０１，００１１，…｝である。１０進数で表記すると、｛１，２，４，８，０，１５，５，３，…｝が、変数ｂ０がとりうる値の集合である。
【０１００】
ここでは、例えば、制御部１１０１は、第２９列について、論理式を求める。
・ｃ０については、０１０１１０００（２進数）＝８８（１０進数）である。
・ｂ０については、１０００（２進数）＝８（１０進数）である。
・ｂ１については、０１０１（２進数）＝５（１０進数）である。
・ａ０については、００（２進数）＝０（１０進数）である。
・ａ１については、１０（２進数）＝２（１０進数）である。
・ａ２については、０１（２進数）＝１（１０進数）である。
・ａ３〜ａ７については、０である。
【０１０１】
制御部１１０１は、上記をテンプレート論理式２６００に代入させると以下のようになる。
【０１０２】
（（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ０＝０）＆（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）＆（ａ３＝０））））＆（（ｃ１＝０）｜（（（ｂ２＝０）｜（ａ４＝０）＆（ａ５＝０））＆（（ｂ３＝０）｜（ａ６＝０）＆（ａ７＝０））））
【０１０３】
変数＝０という書式の項を常に“ＴＲＵＥ”であるとして、論理式を簡単化させることができる。論理式を簡単化させると以下のようになる。
（（ｃ０＝８８）｜（（（ｂ０＝８）｜ＴＲＵＥ＆（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）＆ＴＲＵＥ）））＆（ＴＲＵＥ｜（（ＴＲＵＥ｜ＴＲＵＥ＆ＴＲＵＥ）＆（ＴＲＵＥ｜ＴＲＵＥ＆ＴＲＵＥ）））
【０１０４】
さらに式を簡単化させると以下のようになる。
（（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）＆ＴＲＵＥ）））＆（ＴＲＵＥ｜（（ＴＲＵＥ｜ＴＲＵＥ＆ＴＲＵＥ）））
【０１０５】
さらに式を簡単化させると以下のようになる。
【０１０６】
（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）））・・・論理式２９
【０１０７】
このようにして、制御部１１０１は、列２９について、論理式２９を求める。
【０１０８】
この論理式２９は、符号化ブロック２９を生成するときに、上書きによって入力ブロックが消去されてしまうＢＲＡＭ３とＢＲＡＭ４のデータを補うために、いずれのＢＲＡＭが利用可能かを示している。
【０１０９】
論理式２９がＴＲＵＥになるのは、例えばｃ０＝８８のときであり、８８を２進法で表記すると０１０１１０００となり、ｃ０を２進法で表記したときに１となる位置によって、（ＢＲＡＭ６のデータ）ＸＯＲ（ＢＲＡＭ４のデータ）ＸＯＲ（ＢＲＡＭ３のデータ）の値を保存すればよいことを意味する。
【０１１０】
例えば、制御部１１０１は、第２８列について、以下のように論理式２８を得る。
【０１１１】
（ｃ０＝１２９）｜（（（ｂ０＝１）｜（ａ０＝１）＆（ａ１＝０））＆（（ｂ１＝８）｜（ａ２＝０）＆（ａ３＝０）））
簡単化によって、以下となる。
（ｃ０＝１２９）｜（（（ｂ０＝１）｜（ａ０＝１）＆（ａ１＝０））＆（（ｂ１＝８）｜ＴＲＵＥ））
さらに簡単化によって以下論理式２８が得られる。
（ｃ０＝１２９）｜（ｂ０＝１）｜（ａ０＝１）・・・論理式２８
【０１１２】
例えば、制御部１１０１は、第２７列について、以下のように論理式２７を得る。
【０１１３】
（ｃ０＝２３２）｜（（（ｂ０＝８）｜（ａ０＝０）＆（ａ１＝２））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０）））
簡単化によって、以下となる。
（ｃ０＝２３２）｜（（（ｂ０＝８）｜ＴＲＵＥ＆（ａ１＝２））＆（ＴＲＵＥ｜ＴＲＵＥ））
さらに簡単化によって以下論理式２７が得られる。
（ｃ０＝２３２）｜（ｂ０＝８）｜（ａ１＝２）・・・論理式２７
【０１１４】
例えば、制御部１１０１は、第２６列について、以下のように論理式２６を得る。
【０１１５】
（ｃ０＝２２３）｜（（（ｂ０＝１５）｜（ａ０＝３）＆（ａ１＝３））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０）））
さらに簡単化によって以下論理式２６が得られる。
（ｃ０＝２２３）｜（ｂ０＝１５）｜（ａ０＝３）＆（ａ１＝３）・・・論理式２６
【０１１６】
例えば、制御部１１０１は、第２５列について、以下のように論理式２５を得る。
【０１１７】
（（ｃ０＝０）｜（（（ｂ０＝１２）｜（ａ０＝０）＆（ａ１＝０））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０））））・・・論理式２５
【０１１８】
例えば、制御部１１０１は、第２４列について、以下のように論理式２４を得る。
【０１１９】
（（ｃ０＝１８１）｜（（（ｂ０＝５）｜（ａ０＝１）＆（ａ１＝０））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０））））
さらに簡単化によって以下論理式２４が得られる。
（ｃ０＝１８１）｜（ｂ０＝５）｜（ａ０＝１）・・・論理式２４
【０１２０】
例えば、第２３列については以下のようになる。
ＴＲＵＥ・・・論理式２３
【０１２１】
つぎに、制御部１１０１は、各列についての論理式のすべてのＡＮＤを取った論理式Ｘを作成する。
【０１２２】
Ｘ＝（論理式２９）ＡＮＤ（論理式２８）ＡＮＤ（論理式２７）ＡＮＤ…
Ｘ＝（（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１））））＆
（（ｃ０＝１２９）｜（ｂ０＝１）｜（ａ０＝１））＆
（（ｃ０＝２３２）｜（ｂ０＝８）｜（ａ１＝２））＆
（（ｃ０＝２２３）｜（ｂ０＝１５）｜（ａ０＝３）＆（ａ１＝３））＆
（（ｃ０＝１８１）｜（ｂ０＝５）｜（ａ０＝１））
【０１２３】
制御部１１０１は、作成した論理式ＸをＴＲＵＥにするように、ａ０，…，ａ７，ｂ０，…ｂ４，ｃ０，ｃ１への整数値の割り当てを求める。求められた解がＢＲＡＭの割り当て問題の解となる。値がゼロとなる割り当てが多くなるようにしたほうが、追加されるＢＲＡＭの数を低減させることができる。ＢＲＡＭの割り当て問題は、例えば、ＳＡＴソルバと呼ばれるソフトウェアを用いても効率的に解くことができる（例えば、「Ｔｈｅ  ＭｉｎｉＳａｔ  Ｐａｇｅ，［ｏｎｌｉｎｅ］、［平成２５年１２月６日検索］、インターネット＜ｈｔｔｐ：／／ｍｉｎｉｓａｔ．ｓｅ／＞」）。また、例えば、以下図２８に示すように、制御部１１０１は、総当たりで計算してもよい。
【０１２４】
図２８は、ＢＲＡＭの割り当て問題を解くプログラム例を示す説明図である。例えば、ＣＰＵ１００１が、図２８に示すプログラム２８００を実行すると、以下のような結果が得られる。プログラム２８００は、設計支援プログラムの一部である。
【０１２５】
ｎ＝４  ａ０＝１  ａ１＝０  ａ２＝０  ｂ０＝８  ｂ１＝５…ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝０  ａ２＝１  ｂ０＝８  ｂ１＝０…ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝０  ｂ１＝５  ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝１５  ｂ１＝０  ｃ０＝８８
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝１５  ｂ１＝５  ｃ０＝０
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝１５  ｂ１＝５  ｃ０＝０
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝１  ｂ０＝０  ｂ１＝０  ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝１  ｂ０＝１５  ｂ１＝０  ｃ０＝０
【０１２６】
例えば、制御部１１０１は、「ａ０＝１  ａ１＝２  ａ２＝１  ｂ０＝１５」という解を利用すれば、以下の動作をする符号化回路１０１を示す回路情報を生成する。
・符号化回路１０１では、変数ａ０が示す位置のＢＲＡＭに、ＢＲＡＭ０のデータ（＝（ＢＲＡＭ０のデータ＆１）ＸＯＲ（ＢＲＡＭ１のデータ＆０））を格納する。
・符号化回路１０１では、変数ａ１が示す位置のＢＲＡＭに、ＢＲＡＭ３のデータを格納する。
・符号化回路１０１では、変数ａ２が示す位置のＢＲＡＭに、ＢＲＡＭ４のデータを格納する。
・符号化回路１０１では、変数ｂ０が示す位置のＢＲＡＭに、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）ＸＯＲ（ＢＲＡＭ２のデータ）ＸＯＲ（ＢＲＡＭ３のデータ）を格納する。
【０１２７】
つぎに、制御部１１０１は、得られた解について、それぞれ変数が示す位置のＢＲＡＭがデータを格納するタイミングを特定する。制御部１１０１は、前倒し実行によりブロックが上書きされる以前の列ベクトル０〜２３に対応するタイミングのうち、データを保存するタイミングを決定する。
【０１２８】
例えば、前倒し数４の場合に、ａ０＝１となるのは、列ベクトル０と列ベクトル１７との各々に対応するタイミングである。換言すると、列ベクトル０と列ベクトル１７との各々に対応するタイミングにおいて、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の演算結果を格納することを示す。タイミングが複数ある場合、制御部１１０１は、いずれを選択してもよい。
【０１２９】
また、各変数が示す位置のＢＲＡＭのデータを読み出すタイミングは、入力ブロックが上書きされる期間内である。例えば、ａ０＝１を読み出すタイミングは、列ベクトル２４に対応するタイミングと、列ベクトル２８に対応するタイミングと、において読み出すことを示す。また、例えば、ａ１＝２を読み出すタイミングは、列ベクトル２７に対応するタイミングと、列ベクトル２９に対応するタイミングと、において読み出すことを示す。
【０１３０】
また、例えば、ａ２＝１を読み出すタイミングは、列ベクトル２９に対応するタイミングにおいて読み出すことを示す。また、例えば、ｂ０＝１５を読み出すタイミングは、列ベクトル２６に対応するタイミングにおいて読み出すことを示す。
【０１３１】
ここで、前倒し数が４の場合について、変数と、格納タイミングと、読み出しタイミングと、のタイミング決定結果を以下に示す。
・変数          格納タイミング    読み出しタイミング
・ａ０＝１      ０                ２４，２８
・ａ１＝２      ３                ２７，２９
・ａ２＝１      ４                ２９
・ｂ０＝１５    １６              ２６
【０１３２】
制御部１１０１は、上記で得られた変数が示す位置のＢＲＡＭと、ＢＲＡＭに格納させるデータと、各タイミングと、に基づいて、符号化回路１０１を示す回路情報を生成する。具体的に、制御部１１０１は、変数に値が設定されている場合、部分回路８０１または部分回路８０２を設け、変数に値が設定されていない場合、変数が示す位置に部分回路６０１または部分回路６０２を設けた符号化回路１０１を示す回路情報を生成する。
【０１３３】
つぎに、制御部１１０１は、制御信号を生成する制御回路を示す回路情報を生成する。制御回路は、格納タイミングの際に、書き込みイネーブル信号を有効にして、ＢＲＡＭへデータを書き込ませる。また、制御回路は、格納タイミング以外のタイミングでは、書き込みイネーブル信号を無効にして、ＢＲＡＭへの書き込みを行わせない。
【０１３４】
また、制御回路は、読み出しタイミングの際に、読み出し選択信号を有効にして、ＢＲＡＭからデータを読み出させる。また、制御回路は、読み出しタイミング以外のタイミングでは、読み出し選択信号を無効にして、ＸＯＲ回路からの値を出力する。
【０１３５】
制御部１１０１は、上述したタイミング決定結果により、Ｖｅｒｉｌｏｇ−ＨＤＬなどのハードウェア記述言語によって記述された回路記述を自動生成することが可能である。また、制御部１１０１は、得られた回路記述を、論理合成ツールに与えることにより、制御回路を示す回路情報が得られる。
【０１３６】
図２９は、生成される回路記述例を示す説明図である。回路記述２９００には、制御回路から出力される書き込みイネーブル信号と読み出し選択信号との値の決定方法と、ブロック番号カウンタの動作と、について詳細に記述されてある。
【０１３７】
図３０は、符号化回路１０１と符号化回路１０１を制御する制御回路とを示す説明図である。ここで、制御回路３０００から符号化回路１０１−４へ入力される各信号と制御回路３０００に含まれるブロックとについて簡単に説明する。アドレス１は、入力されるブロックを格納するＢＲＡＭに新しいブロックを書き込む、または、当該ＢＲＡＭからデータを読み出すときのアドレス値を供給する。ブロック番号カウンタは、１ブロック分の符号化処理が終了すると、ブロック番号をインクリメントするカウンタであり、列ベクトルの番号に対応する。
【０１３８】
アドレス２は、ＸＯＲ演算の演算結果を格納するＢＲＡＭに、データを書き込むとき、または読み出すときのアドレス値を供給する。アドレス２は、アドレス１のカウンタに同期して値が変化する。符号化回路１０１−４内のレジスタの段数分だけ、値が遅れて変化していく。
【０１３９】
書き込みイネーブル２は、ブロック番号カウンタに同期して値が変化し、ＸＯＲ演算の演算結果を格納するＢＲＡＭにブロックを格納するときだけ有効になる制御信号である。読み出し選択は、選択回路の制御信号であり、ＸＯＲ演算の演算結果を格納するＢＲＡＭにブロックを格納する格納タイミングのときだけ、有効になる制御信号である。読み出し選択は、ブロック番号カウンタに同期して値が変化する。
【０１４０】
また、読み出し選択は、ＡＮＤ回路の一入力端に入力される制御信号であって、強制的に出力を０にするための信号である。また、読み出し選択は、ＢＲＡＭ０のデータとＢＲＡＭ１のデータの、どちらかもしくは両方の値が上書きによって失われているときに、ＢＲＡＭ０のデータとＢＲＡＭ１のデータを０としてＸＯＲ演算したいときに利用され、上述例では使用していない。
【０１４１】
図３１は、図３０に示す回路の動作例を示す説明図である。図３１に示すように、ブロック番号カウンタの値が０の場合に、書き込みイネーブル２＿ａ０が１となる。また、ブロック番号カウンタの値が３の場合に、書き込みイネーブル２＿ａ１が１となる。また、ブロック番号カウンタの値が２４の場合に、読み出し選択＿ａ０は、１となる。
【０１４２】
図３２は、前倒し実行処理例を示す説明図である。前倒し実行処理の実行期間中には、出力される符号化データが２倍になる。タイミングＴ１については、１回目の処理では、列ベクトル２４に対応するタイミングにおけるＸＯＲ演算の演算結果が出力され、２回目の処理では、列ベクトル０に対応するタイミングにおけるＸＯＲ演算の演算結果が出力される。また、タイミングＴ２については、１回目の処理では、列ベクトル２９に対応するタイミングにおけるＸＯＲ演算の演算結果が出力され、２回目の処理では、列ベクトル５に対応するタイミングにおけるＸＯＲ演算の演算結果が出力される。
【０１４３】
図３３は、前倒し実行処理を行うための回路構成例を示す説明図である。図３３では、前倒し数が４の場合を例に挙げる。ＲＰＳハードウェア部４２２は、回路３２０１と符号化回路１０１−４と、回路３２０２と、を有する。回路３２０１は、前倒し実行期間中には、先頭からＮブロック分の入力ブロックをそのまま出力データとして流す。回路３２０２は２系統の符号化ブロックを受け取り、次の段の処理に順に流す。
【０１４４】
制御部１１０１は、符号化行列ｍａ１を取得した後に、列ベクトルを入れ替えることによって、ＢＲＡＭの数を低減させることができる。なお、符号化行列ｍａ１の列ベクトルを入れ替えたとしても、ＲＰＳ符号化処理の訂正能力は同じである。列ベクトルを交換することは、パケットの送信順序を交換することと等しい。パケットを受信する受診側では、最終的に受け取るパケットが同じになるため、訂正能力も同じである。ただし、訂正できるまでの時間は異なる場合がある。例えば、元の符号化行列において第１７番目の符号化データを受信したときに訂正できる場合、列ベクトル１７が列ベクトル２９へ移動した後の符号化行列では、第２９番目の符号化データを受信したときに訂正することとなる。
【０１４５】
図３４は、符号化行列の列ベクトル入替例を示す説明図である。例えば、制御部１１０１は、符号化行列ｍａ１のうち（入力ブロック数）列目以降の列ベクトルの各々について、先頭行から順に０が連続して並ぶ数を計数する。そして、制御部１１０１は、符号化行列ｍａ１に基づいて、計数結果の昇順にソートした符号化行列ｍａ２を生成する。図３４の例では、列ベクトル２１以降について順番が変更される。
【０１４６】
図３５は、列ベクトル入替によるＢＲＡＭの使用数の変化例を示す説明図である。例えば、入替前の符号化行列ｍａ１では、前倒し数が３の場合、追加されるＢＲＡＭが１個であり、前倒し数が５の場合、追加されるＢＲＡＭが４個である。これに対して、入替後の符号化行列ｍａ２では、前倒し数が３の場合、追加されるＢＲＡＭがなく、前倒し数が５の場合、追加されるＢＲＡＭが３個である。このように、列ベクトルを入れ替えることによって、追加されるＢＲＡＭの数の低減を図ることができる。
【０１４７】
（設計支援装置１００による設計支援処理手順例）
図３６および図３７は、設計支援装置による設計支援処理手順例を示すフローチャートである。まず、設計支援装置１００は、符号化行列と、前倒し数と、を取得する（ステップＳ３６０１）。設計支援装置１００は、符号化行列のうち（入力ブロック数）列目以降の列ベクトルごとに先頭成分から順に０が連続して並ぶ数を計数する（ステップＳ３６０２）。設計支援装置１００は、符号化行列のうち（入力ブロック数）列目以降の列ベクトルを計数結果の昇順にソートする（ステップＳ３６０３）。
【０１４８】
つぎに、設計支援装置１００は、前倒し数に基づいて消去が行われるタイミングの各々について、消されるブロックを特定する（ステップＳ３６０４）。そして、設計支援装置１００は、消去が行われるタイミングについて特定した消去されるブロックのうち、消去が行われるタイミングと消去されるブロックに対応する列ベクトルの成分が１であるブロックがあるか否かを判断する（ステップＳ３６０５）。成分が１であるブロックがないと判断された場合（ステップＳ３６０５：Ｎｏ）、設計支援装置１００は、符号化回路を変更せずに利用可能な旨を出力し（ステップＳ３６０６）、一連の処理を終了する。
【０１４９】
一方、成分が１であるブロックがあると判断された場合（ステップＳ３６０５：Ｙｅｓ）、設計支援装置１００は、テンプレート論理式を取得する（ステップＳ３７０１）。設計支援装置１００は、列ベクトルごとに論理式を生成する（ステップＳ３７０２）。設計支援装置１００は、生成した各論理式の論理積演算を行う論理式Ｘを生成する（ステップＳ３７０３）。そして、設計支援装置１００は、論理式Ｘの各変数の値を求める（ステップＳ３７０４）。つぎに、設計支援装置１００は、論理式ＸをＴＲＵＥにする変数の値の組み合わせを特定する（ステップＳ３７０５）。
【０１５０】
設計支援装置１００は、特定した組み合わせに基づく列ベクトルに対応するタイミングを特定する（ステップＳ３７０６）。設計支援装置１００は、特定した組み合わせと特定したタイミングとに基づいて符号化回路と制御回路とを示す回路情報を生成し（ステップＳ３７０７）、一連の処理を終了する。
【０１５１】
また、ＦＰＧＡの特徴を利用することにより、ハードウェアリソースの追加なしで符号化処理の処理速度を向上可能である。ＦＰＧＡ内に埋め込まれているＢＲＡＭはコンフィギュレーション可能なパターンが限定されている。例えば、ＸＩＬＩＮＸ社の７シリーズＦＰＧＡの場合、３６［ＫＢｉｔ］ＢＲＡＭが最小構成単位である。７２Ｂｉｔ幅＊５１２ＷＯＲＤでコンフィギュレーションすると、符号化ハードウェアでは、６４Ｂｉｔ＊５１２ＷＯＲＤで利用するとして、１［ＫＢ］のブロックを４個保存可能になる。８Ｂｙｔｅ＊１２８＝１０２４Ｂｙｔｅであり、４［ＫＢ］＝４０９６Ｂｙｔｅ＝３２７６８Ｂｉｔである。符号化ハードウェアの入力部にこのＢＲＡＭを利用することによって、ＢＲＡＭを追加することなく、４セット分のデータ（＝１６ＫＢ＊４回）を連続して入力可能になり、スループットを向上させることができる。
【０１５２】
以上説明したように、設計支援装置１００は、前倒し実行中の各タイミングについて、前倒し実行で上書きされるデータに基づく演算と、該演算の結果が該タイミングと同一の他のタイミングとを符号化行列により特定する。これにより、省メモリ量で前倒し実行可能な符号化回路を設計可能とする。これにより、省メモリで前倒し実行可能な符号化回路を設計可能とする。したがって、省メモリであっても、符号化処理のスループットを向上させることができる。
【０１５３】
また、設計支援装置１００は、特定した論理演算と、特定したタイミングと、に基づいて、符号化回路と、制御回路と、を示す回路情報を生成する。これにより、自動で符号化回路を設計可能となり、設計者の手間を省くことができる。
【０１５４】
また、設計支援装置１００は、符号化行列の列ベクトルのうち、冗長ブロックを生成する列ベクトルを、先頭成分から順に連続する０の数が少ない順に並び替える。これにより、より少ないメモリで、より多くの前倒し実行が可能となる。
【０１５５】
なお、本実施の形態で説明した設計支援方法は、予め用意された設計支援プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本設計支援プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、設計支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１５６】
１００  設計支援装置
１０１  符号化回路
６０１，６０２，８０１，８０２  部分回路
ｍａ１，ｍａ２  符号化行列
ｄ１  第１対象データ
ｄ２  第２対象データ
【図１】
2015136611.tif 000003
【図２】
2015136611.tif 000004
【図３】
2015136611.tif 000005
【図４】
2015136611.tif 000006
【図５】
2015136611.tif 000007
【図６】
2015136611.tif 000008
【図７】
2015136611.tif 000009
【図８】
2015136611.tif 000010
【図９】
2015136611.tif 000011
【図１０】
2015136611.tif 000012
【図１１】
2015136611.tif 000013
【図１２】
2015136611.tif 000014
【図１３】
2015136611.tif 000015
【図１４】
2015136611.tif 000016
【図１５】
2015136611.tif 000017
【図１６】
2015136611.tif 000018
【図１７】
2015136611.tif 000019
【図１８】
2015136611.tif 000020
【図１９】
2015136611.tif 000021
【図２０】
2015136611.tif 000022
【図２１】
2015136611.tif 000023
【図２２】
2015136611.tif 000024
【図２３】
2015136611.tif 000025
【図２４】
2015136611.tif 000026
【図２５】
2015136611.tif 000027
【図２６】
2015136611.tif 000028
【図２７】
2015136611.tif 000029
【図２８】
2015136611.tif 000030
【図２９】
2015136611.tif 000031
【図３０】
2015136611.tif 000032
【図３１】
2015136611.tif 000033
【図３２】
2015136611.tif 000034
【図３３】
2015136611.tif 000035
【図３４】
2015136611.tif 000036
【図３５】
2015136611.tif 000037
【図３６】
2015136611.tif 000038
【図３７】
2015136611.tif 000039
【手続補正書】
【提出日】平成28年8月25日(2016.8.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、
コンピュータが、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理を実行することを特徴とする設計支援方法。
【請求項２】
前記コンピュータが、
前記開始タイミング以降のタイミングのうちの異なる２つのタイミング同士で、特定した前記論理演算が同一であり、かつ特定した前記論理演算の演算結果が異なる場合には、前記異なる２つのタイミング同士で、特定する前記論理演算が重ならないように、前記論理演算を特定する処理と前記タイミングを特定する処理とを行う、
処理を実行することを特徴とする請求項１に記載の設計支援方法。
【請求項３】
前記コンピュータが、
前記開始タイミング以降のタイミングの各々について特定した前記論理演算の演算結果を格納する記憶領域を前記符号化回路に設けた第２符号化回路と、前記開始タイミング以降のタイミングの各々について特定した前記タイミングにおいて特定した前記論理演算の演算結果を前記記憶領域に格納させる制御回路と、を示す回路情報を生成する、
処理を実行することを特徴とする請求項１または２に記載の設計支援方法。
【請求項４】
前記コンピュータが、
取得した前記符号化行列のベクトルのうち、前記第１数より後のベクトルの各々について、先頭の成分から順に連続する前記所定値と異なる値の数を計数し、
前記符号化行列に基づいて、前記第１数より後のベクトルを計数した前記所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する、
処理を実行し、
前記論理演算を特定する処理では、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する生成した前記符号化行列の前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が前記所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定することを特徴とする請求項１〜３のいずれか一つに記載の設計支援方法。
【請求項５】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援プログラムであって、
コンピュータに、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理を実行させることを特徴とする設計支援プログラム。
【請求項６】
所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援装置であって、
前記符号化行列を取得し、符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する制御部を有することを特徴とする設計支援装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計支援方法、設計支援プログラム、および設計支援装置に関する。
【背景技術】
【０００２】
従来、インターネットにおいては、通信途中に存在するルータのバッファメモリあふれなどによってパケットが欠落する場合がある。例えば、一般的な通信プロトコルであるＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）では、パケットの欠落が発生することにより、通信速度を一気に落としてしまう場合がある。このため、パケットの欠落が発生する通信環境では、通信速度が著しく遅くなってしまう場合がある。
【０００３】
ＴＣＰ／ＩＰの欠点を克服する手法として、ＲＰＳ（Ｒａｎｄｏｍ  Ｐａｒｉｔｙ  Ｓｔｒｅａｍ）符号化処理が公知である（例えば、下記非特許文献１、特許文献１などを参照。）。ＲＰＳ符号化処理において、データ送信側では冗長データを送付し、受信側では、欠落したパケットがある場合に冗長データを用いて欠落したパケットを再現する。また、従来、ＲＰＳ符号化処理については、たとえばソフトウェアによって行われている。
【０００４】
また、パケットの送信において、パリティ計算によってパケットのエラーを検出する技術が公知である（例えば、下記特許文献２，３参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２５８７９６号公報
【特許文献２】特開平１０−１９０４８１号公報
【特許文献３】特開２００５−１０２０３７号公報
【非特許文献】
【０００６】
【非特許文献１】亀山裕亮、佐藤裕一、"大規模データを扱うエンジニアリングアプリケーション向けの高速なＡＳＰシステムの構築"、［ｏｎｌｉｎｅ］、マルチメディア，分散，協調とモバイル（ＤＩＣＯＭＯ２００８）シンポジウム、［平成２５年１２月６日検索］、インターネット＜ｈｔｔｐ：／／ｗｗｗ．ｄｉｃｏｍｏ．ｏｒｇ／２００８／ｐｒｏｇｒａｍ／３Ｈ＿ａｂｓｔ．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来、ソフトウェアによって符号化処理を実現すると、符号化処理に時間がかかるという場合がある。また、符号化処理をハードウェア化すると、符号化処理は高速化できても、メモリが少ないと符号化処理のためのデータ転送に待ち時間がかかるという場合がある。そのため、符号化処理を効率よく行うことができないという問題点がある。
【０００８】
１つの側面では、本発明は、符号化処理の効率化を図ることができる設計支援方法、設計支援プログラム、および設計支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一側面によれば、所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、前記符号化行列を取得し、符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する設計支援方法、設計支援プログラム、および設計支援装置が提案される。
【発明の効果】
【００１０】
本発明の一態様によれば、符号化処理の効率化を図ることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明にかかる設計支援装置による一動作例を示す説明図である。
【図２】図２は、データ送信時のＲＰＳ符号化処理例を示す説明図である。
【図３】図３は、データ受信時のＲＰＳ復号処理例を示す説明図である。
【図４】図４は、データを送信するためのシステム構成例を示す説明図である。
【図５】図５は、ＦＰＧＡ内のブロック例を示す説明図である。
【図６】図６は、符号化回路例を示す説明図である。
【図７】図７は、符号化回路の部分例を示す説明図である。
【図８】図８は、各部分回路の変更例を示す説明図である。
【図９】図９は、符号化回路例２を示す説明図である。
【図１０】図１０は、実施の形態にかかる設計支援装置のハードウェア構成例を示すブロック図である。
【図１１】図１１は、設計支援装置の機能的構成例を示すブロック図である。
【図１２】図１２は、符号化行列例を示す説明図である。
【図１３】図１３は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その１）である。
【図１４】図１４は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その２）である。
【図１５】図１５は、入力ブロック供給を前倒しした場合にデータが上書きされてしまうＢＲＡＭの分布例を示す説明図である。
【図１６】図１６は、前倒し数が１の場合におけるアクセスタイミング例を示す説明図である。
【図１７】図１７は、前倒し数が２の場合におけるアクセスタイミング例を示す説明図である。
【図１８】図１８は、前倒し数が３の場合におけるアクセスタイミング例を示す説明図である。
【図１９】図１９は、前倒し数が４の場合におけるアクセスタイミング例を示す説明図である。
【図２０】図２０は、前倒し数が５の場合におけるアクセスタイミング例を示す説明図である。
【図２１】図２１は、前倒し数が６の場合におけるアクセスタイミング例を示す説明図である。
【図２２】図２２は、前倒し数が７の場合におけるアクセスタイミング例を示す説明図である。
【図２３】図２３は、前倒し数が２または３の場合における符号化回路１０１例を示す説明図である。
【図２４】図２４は、前倒し数が４の場合における符号化回路１０１例を示す説明図である。
【図２５】図２５は、ＢＲＡＭの位置例を示す説明図である。
【図２６】図２６は、テンプレート論理式例を示す説明図である。
【図２７】図２７は、変数とＢＲＡＭの位置との対応関係を示す説明図である。
【図２８】図２８は、ＢＲＡＭの割り当て問題を解くプログラム例を示す説明図である。
【図２９】図２９は、生成される回路記述例を示す説明図である。
【図３０】図３０は、符号化回路１０１と符号化回路１０１を制御する制御回路とを示す説明図である。
【図３１】図３１は、図３０に示す回路の動作例を示す説明図である。
【図３２】図３２は、前倒し実行処理例を示す説明図である。
【図３３】図３３は、前倒し実行処理を行うための回路構成例を示す説明図である。
【図３４】図３４は、符号化行列の列ベクトル入替例を示す説明図である。
【図３５】図３５は、列ベクトル入替によるＢＲＡＭの使用数の変化例を示す説明図である。
【図３６】図３６は、設計支援装置による設計支援処理手順例を示すフローチャート（その１）である。
【図３７】図３７は、設計支援装置による設計支援処理手順例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかる設計支援方法、設計支援プログラム、および設計支援装置の実施の形態を詳細に説明する。
【００１３】
図１は、本発明にかかる設計支援装置による一動作例を示す説明図である。設計支援装置１００は、符号化回路１０１の設計を支援するコンピュータである。符号化回路１０１は、符号化行列ｍａ１と、複数の部分データと、によって符号化処理を行うことによって符号化データを得る。ここで、符号化データは、符号化ブロックと称する。符号化行列ｍａ１は、符号化の対象データを分割した複数の部分データの所定数（以下「第１数」と称する。）の値を有するベクトルを第１数よりも多い第２数有する。ここでの符号化処理は、例えば、ＲＰＳの符号化処理である。また、ここでは、部分データをブロックと称する。図１の例では、対象データは１６のブロックに分割される。図１の符号化行列ｍａ１は、第１数である１６個の値を有する列ベクトルを３０個有する。列ベクトルの各成分は列ベクトルによって異なる。本実施の形態では、また、複数の記憶領域に、符号化回路１０１による符号化処理の対象となる複数のブロックを各々格納しておく。ここでの記憶領域は、ＢＲＡＭ（Ｂｌｏｃｋ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と称する。ＢＲＡＭは、例えば、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）内で利用可能なＲＡＭの一種である。
【００１４】
従来、例えば、ＲＰＳの符号化処理を行うソフトウェアが、０．５［Ｇｂｐｓ］で符号化データを出力すると、１［Ｇｂｐｓ］の通信帯域であっても、０．５［Ｇｂｐｓ］で符号化データが送信されることになる。また、近年の国際通信回線の通信帯域は１００［Ｍｂｐｓ］程度が主流であるが、将来的に１０［Ｇｂｐｓ］となった場合に、ソフトウェアによる処理では、通信帯域が効率よく利用できない。ＲＰＳの符号化処理および復号処理が利用される状況については、国と国を跨ぐ程度のネットワーク規模を想定する。そこで、本実施の形態では、ＲＰＳの符号化処理をハードウェア化することによって、符号化処理の高速化を図る。しかしながら、ＦＰＧＡなどを利用してＲＰＳの符号化処理をハードウェア化した場合、ＢＲＡＭなどに符号化の対象データを格納しなければならないが、ＢＲＡＭの容量が少ないと、ＢＲＡＭなどに対象データを格納するためのデータ転送待ち時間が長くなる。そのため、通信帯域を効率よく利用できない。
【００１５】
そこで、本実施の形態では、設計支援装置１００は、前倒し実行中の各タイミングについて、前倒し実行で上書きされるデータに基づく演算と、該演算の結果が該タイミングと同一の他のタイミングとを符号化行列ｍａ１により特定する。これにより、省メモリ量で前倒し実行可能な符号化回路１０１を設計可能とする。したがって、符号化処理を効率よく行うことができる。符号化処理を効率よく行うとは、省メモリであっても高スループットで行えることである。
【００１６】
ここで、符号化回路１０１には、１つの符号化ブロックを生成する際に、１つの列ベクトルが符号化回路１０１に含まれるＡＮＤ回路の一方に入力される。これにより、いずれのブロックがＸＯＲ回路によるＸＯＲ演算に入力されるか否かが定まる。また、本実施の形態では、冗長データの分だけ出力データ量が増加するため、前提条件として、「（データ入力レート）＜（データ出力レート）」である。
【００１７】
まず、設計支援装置１００は、符号化行列ｍａ１を取得する。つぎに、設計支援装置１００は、符号化処理における符号化行列ｍａ１が有する列ベクトルに対応する複数のタイミングのうち、符号化の第２対象データｄ２を分割した複数の第２部分データの複数のＢＲＡＭへの格納を開始するタイミングを示す情報を取得する。ここでの符号化処理は、符号化の第１対象データｄ１を分割した複数の第１部分データであって、ＢＲＡＭに格納された複数の第１部分データと取得した符号化行列ｍａ１のベクトルの各成分とに基づく符号化処理である。タイミングを示す情報としては、タイミングに対応する列ベクトルの番号であってもよいし、後述する前倒し数であってもよい。例えば、図１の例では、開始タイミングは、列ベクトル０から列ベクトル２９のうちの列ベクトル２７に対応するタイミングである。
【００１８】
つぎに、設計支援装置１００は、各タイミングのうち取得した情報が示す開始タイミング以降のタイミングの各々について、ＢＲＡＭに記憶された複数の第１ブロックのうち、タイミングにおいて第２ブロックによって上書きされる第１部分データを特定する。図１の例では、列ベクトル２７については、ＢＲＡＭ０に格納されていた第１ブロックが上書きされる。列ベクトル２８については、ＢＲＡＭ０およびＢＲＡＭ１に格納されていた第１ブロックが上書きされる。列ベクトル２９については、ＢＲＡＭ０からＢＲＡＭ２に格納されていた第１ブロックが上書きされる。
【００１９】
つぎに、設計支援装置１００は、開始タイミング以降のタイミングの各々について、タイミングに対応する列ベクトルの各成分のうち、特定した第１ブロックに対応する成分が所定値である場合に、特定した第１ブロックに基づく論理演算を特定する。ここで、図１の例では、所定値は１である。ここでの論理演算とは、ＸＯＲ演算である。図１の例では、列ベクトル２８の各成分のうち、ＢＲＡＭ０に格納された第１ブロックに対応する成分が１である。また、列ベクトル２７および列ベクトル２９の各成分のうち、特定した第１ブロックに対応する成分は０である。ここでは、設計支援装置１００は、例えば、符号化回路１０１のＸＯＲ回路のうち、ＢＲＡＭ０のデータが通過するＸＯＲ回路によるＸＯＲ演算を特定する。
【００２０】
そして、設計支援装置１００は、開始タイミング以降のタイミングの各々について、各タイミングの中の開始タイミングより前の各タイミングのうち、特定したＸＯＲ演算の演算結果と同一となるタイミングを特定する。特定したＸＯＲ演算の演算結果は、特定したＸＯＲ演算のタイミングに対応するベクトルに基づく演算結果である。例えば、設計支援装置１００は、列ベクトル０に基づく特定した論理演算の演算結果と、列ベクトル２８に基づく特定した論理演算の演算結果とは同一となるため（言い換えれば、列ベクトル０と列ベクトル２８は、第０〜１因子からなる部分列ベクトルがともに［１  ０］で等しいので、ＸＯＲ演算結果も同一になる）、列ベクトル０に対応するタイミングを特定する。
【００２１】
また、図１に示していないが、設計支援装置１００は、開始タイミング以降のタイミングのうちの異なる２つのタイミング同士で、特定した論理演算が同一であり、かつ特定した論理演算の演算結果が異なるか否かを判断する。設計支援装置１００は、論理演算が同一であり、かつ特定した論理演算の演算結果が異なる場合には、異なる２つのタイミング同士で、特定する論理演算が重ならないように、論理演算を特定する処理とタイミングを特定する処理とを行う。
【００２２】
これにより、省メモリ量で前倒し実行可能な符号化回路１０１を設計可能とする。したがって、符号化処理を効率よく行うことができる。
【００２３】
また、図１に示していないが、設計支援装置１００は、特定した論理演算と、特定したタイミングと、に基づいて、符号化回路１０１と、制御回路と、を示す回路情報を生成する。ここで、生成される符号化回路１０１は、開始タイミング以降のタイミングの各々について特定した論理演算の演算結果を格納するＢＲＡＭを符号化回路１０１に設けた回路である。また、制御回路は、開始タイミング以降のタイミングの各々について特定したタイミングにおいて特定した論理演算の演算結果をＢＲＡＭに格納させる制御を行う回路である。これにより、自動で符号化回路１０１を示す回路情報が得られるため、設計者の手間を省くことができる。
【００２４】
また、図１に示していないが、設計支援装置１００は、取得した符号化行列ｍａ１の列ベクトルのうち、第１数より後のベクトルの各々について、先頭行から順に連続する所定値と異なる値の数を計数する。上述したように所定値は１であり、所定値と異なる値は０である。そして、設計支援装置１００は、符号化行列ｍａ１に基づいて、第１数より後のベクトルを計数した所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する。並び替えた符号化行列の例は、後述する図３４に示す。そして、設計支援装置１００は、生成した符号化行列ｍａ１を用いて、上述した論理演算を特定する処理と、タイミングを特定する処理と、を行う。これにより、少ないメモリ容量で、より多くの前倒し実行が可能となる。
【００２５】
（ＲＰＳ符号化／復号）
図２は、データ送信時のＲＰＳ符号化処理例を示す説明図である。ここでは、本実施の形態で利用するＲＰＳ符号化について簡単に説明する。インターネットにおいては、通信途中に存在するルータのバッファメモリあふれなどによってパケットが欠落する場合がある。例えば、一般的な通信プロトコルであるＴＣＰ／ＩＰでは、パケットの欠落が発生することにより、通信速度を一気に落としてしまう場合がある。このため、パケット欠落がしばしば発生する通信環境では、通信速度が著しく遅くなってしまう場合がある。
【００２６】
ＴＣＰ／ＩＰの欠点を克服する手法として、ＲＰＳ符号化処理が公知である。ＲＰＳ符号化処理におけるデータ送信側では冗長データを送付し、ＲＰＳ符号化処理における受信側では、欠落したパケットがある場合に冗長データを用いて欠落したパケットを再現する。これにより、パケット欠落時のデータの再送回数の低減を図る。
【００２７】
図２に示すように、ＲＰＳ符号化処理では、例えば、１６［ＫＢ］のデータを１［ＫＢ］ごとにブロックとして切り出す。ここでは、１６［ＫＢ］のデータがブロック［０］〜ブロック［１５］として切り出される。つぎに、ＲＰＳ符号化処理では、ブロック［０］〜ブロック［１５］をそのまま送信する。そして、ＲＰＳ符号化処理では、ブロック［０］〜ブロック［１５］のうちの取りうる組合せごとにＸＯＲ演算を行うことによって生成した複数の冗長ブロックを送信する。
【００２８】
図３は、データ受信時のＲＰＳ復号処理例を示す説明図である。ＲＰＳ復号処理では、インターネットを介して受信されたデータについて、データが正常かチェックする処理、欠落したパケットがあるかチェックする処理、パケットヘッダを除去してＲＰＳのブロックを取り出す処理などがある。図３の例では、ブロック［２］がパケット欠落して受信できないとする。そこで、ＲＰＳ復号処理では、ブロック［０］［１］［３］〜［１５］と冗長ブロック［０］を利用してブロック［２］を再現する。このようにして、ＲＰＳ復号処理では、受信した１６個以上のブロック（冗長ブロック含む）を利用して元の１６［ＫＢ］のデータにする。
【００２９】
また、図２および図３の例では、１６［ＫＢ］のデータが１［ＫＢ］ずつに分割される例を示したが、元データのサイズやデータの分割方法、冗長ブロックの算出方法については特に限定しない。
【００３０】
図４は、データを送信するためのシステム構成例を示す説明図である。システム４００は、ＣＰＵ４０１と、主記憶装置４０２と、拡張ボード４０４と、を有する。ＣＰＵ４０１と拡張ボード４０４とはＰＣＩ  Ｅｘｐｒｅｓｓバス４０３を介して接続される。具体的に、例えば、拡張ボード４０４は、設計支援装置１００であるサーバに設けられた拡張スロットに接続される。
【００３１】
拡張ボード４０４は、ＲＡＭ４１１と、ＦＰＧＡ４１２と、ＬＡＮコネクタ４１３と、を有する。また、ＦＰＧＡ４１２は、スイッチ、ルータを経由してＬＡＮコネクタ４１３でＬＡＮやＷＡＮなどのネットワークＮＥＴを介しデータ受信ホスト４３０などの他のサーバなどに接続される。
【００３２】
図５は、ＦＰＧＡ内のブロック例を示す説明図である。図５に示すＦＰＧＡ４１２内のブロックは、符号化回路１０１がプログラムされた後の内部構成を示すブロック例である。ＦＰＧＡ４１２は、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント５０１と、メモリコントローラ５０２と、複数のＢＲＡＭと、符号化回路１０１と、データ送信バッファ５０３と、パケットヘッダ追加部５０４と、ＭＡＣレイヤー部５０５と、物理層部５０６と、を有する。また、ＦＰＧＡ４１２は、その他、各部を制御する回路を有する。
【００３３】
メモリコントローラ５０２と、複数のＢＲＡＭとは、バスを介して接続される。メモリコントローラ５０２は、図４に示したＲＡＭ４１１と、複数のＢＲＡＭを制御する機能を有し、ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント５０１を介して図４に示したＣＰＵ４０１からの指示を受け付ける。例えば、メモリコントローラ５０２は、ＲＡＭ４１１からのデータをＢＲＡＭに格納する。ＰＣＩ  Ｅｘｐｒｅｓｓエンドポイント５０１は、図４に示したＰＣＩ  Ｅｘｐｒｅｓｓバス４０３と、メモリコントローラ５０２と、に接続される。
【００３４】
符号化回路１０１は、ＢＲＡＭからのデータをＲＰＳ符号化する。また、データ送信バッファ５０３は、符号化回路１０１による符号化データを一時的に格納する。パケットヘッダ追加部５０４は、例えば、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）／ＩＰプロトコルに基づくパケットのヘッダを符号化データに追加する。ＭＡＣレイヤー部５０５は、例えば、ＵＤＰ／ＩＰプロトコルの後の処理、ＭＡＣレイヤーのプロトコルに応じた処理を行う。物理層部５０６は、例えば、ＭＡＣレイヤー部５０５からのデジタルデータに対して、電気や光などを用いたアナログ信号媒体へ信号を送出するための処理を行う。物理層部５０６は、ＬＡＮコネクタ４１３に接続される。
【００３５】
図６は、符号化回路例を示す説明図である。図７は、符号化回路の部分例を示す説明図である。図６の例では、符号化回路１０１−１への入力となるデータを記憶するＢＲＡＭが１６の場合を例に挙げる。図６に示す符号化回路１０１−１は、符号化処理に対応する回路である。符号化回路１０１−１は、部分回路６０１−１〜６０１−８と、部分回路６０２−１〜６０２−７と、を有する。
【００３６】
図７に示すように、部分回路６０１は、レジスタ７０１，７０２と、ＡＮＤ回路７０３，７０４と、ＸＯＲ回路７０５と、レジスタ７０６と、を有する。レジスタ７０１，７０２は、ＢＲＡＭからのデータを一時的に格納する。図７に示すように、ＢＲＡＭはある１構成例によれば、３６［ＫＢｉｔ］のＲＡＭであり、１ワードが７２ビット、ワード数が５１２として利用され、１［ＫＢ（Ｂｙｔｅ）］の入力ブロックを４個保持可能である。また、ＡＮＤ回路７０３，７０４は、レジスタからの信号と、０または１の信号と、を入力として、論理積演算結果をＸＯＲ回路へ出力する。０または１の信号としては、例えば、符号化行列内の対応する値が入力される。ＸＯＲ回路７０５は、２つのＡＮＤ回路７０３，７０４からの出力信号を入力として、演算結果をレジスタ７０６へ出力する。
【００３７】
また、図７に示すように、部分回路６０２は、ＸＯＲ回路７１０と、レジスタ７１１と、を有する。ＸＯＲ回路７１０は、各レジスタ７０６からの出力信号を入力として、ＸＯＲ演算の演算結果をレジスタ７１１へ出力する。レジスタ７１１は、ＸＯＲ回路の出力信号を一時的に格納する。図６に示すように、符号化回路１０１には、部分回路６０１は（ＢＲＡＭの数／２）個設けられ、部分回路６０２は出力信号が１つになるまでの数だけ設けられる。
【００３８】
ここで、図４に示したＲＰＳソフトウェア部４２１と、図４に示したＲＰＳハードウェア部４２２と、の各々の処理について簡単に説明する。例えば、ＣＰＵ４０１が実行するＲＰＳソフトウェア部４２１は、送信したい対象データを主記憶装置４０２の転送バッファ領域に格納する。そして、ＲＰＳソフトウェア部４２１は、ＲＰＳハードウェア部４２２に実行を指示する。ＲＰＳハードウェア部４２２は、符号化回路１０１と、符号化回路１０１を制御する制御回路と、を含む。
【００３９】
（１）ＲＰＳハードウェア部４２２は、ＦＰＧＡ４１２内のＤＭＡ回路が転送バッファのデータをＲＡＭ４１１へ転送する。（２）ＲＰＳハードウェア部４２２は、ＲＡＭ４１１から合計１６［ＫＢ］のデータを１［ＫＢ］ずつ順にＢＲＡＭ０〜ＢＲＡＭ１５へ書き込む。（３）ＲＰＳハードウェア部４２２は、ｊ＝０とする。そして、（４）ＲＰＳハードウェア部４２２は、後述する符号化行列の第ｊ列の値を符号化回路１０１のＡＮＤ回路に入力する。つぎに、（５）ＲＰＳハードウェア部４２２は、ＢＲＡＭ０〜１５のアドレス０〜１０２３を読み出しつつ、出力されるＸＯＲ演算後の１［ＫＢ］の符号化データをデータ送信バッファ５０３やパケットヘッダ追加部５０４などの後続の処理に渡す。そして、（６）ＲＰＳハードウェア部４２２は、ｊ＝ｊ＋１とし、ｊが符号化行列の列数より多くなるまで（４）〜（６）を繰り返し、ｊが符号化行列の列数より多くなったら（２）に戻る。なお、ｊが符号化行列の列数に達する以前に、データ受信ホスト４３０からデータ受信完了通知が届いた場合は、これ以上の冗長ブロックを送出する必要がないため、（２）に戻る。図４では省略しているが、データ受信完了通知を受け取るための回路が、ＲＰＳハードウェア部４２２に含まれる。このようにして、ハードウェアとソフトウェアとが協調して対象データを符号化して送信することができる。
【００４０】
図８は、各部分回路の変更例を示す説明図である。部分回路８０１は、部分回路６０１に含まれるＸＯＲ回路によるＸＯＲ演算の演算結果を格納するＢＲＡＭを設けた例である。部分回路８０１には、部分回路６０１に対して、ＸＯＲ回路からの出力信号を格納するＢＲＡＭが設けられ、レジスタからの出力信号と、ＢＲＡＭからの出力信号と、を選択して出力する選択回路８１１と、が設けられる。また、部分回路８０１には、選択回路８１１からの信号を出力するか否かを制御するＡＮＤ回路８１２と、が設けられる。
【００４１】
部分回路８０２は、部分回路６０２に含まれるＸＯＲ回路によるＸＯＲ演算の演算結果を格納するＢＲＡＭを設けた例である。部分回路８０２には、部分回路６０２に対して、ＸＯＲ回路からの出力信号を格納するＢＲＡＭが設けられ、レジスタからの出力信号とＢＲＡＭからの出力信号とを選択して出力する選択回路８２１が設けられる。
【００４２】
図９は、符号化回路例２を示す説明図である。符号化回路１０１−２は、符号化回路１０１−１に含まれる各部分回路６０１が部分回路８０１に置き換えられた回路である。また、符号化回路１０１−２は、符号化回路１０１−１に含まれる部分回路６０２−１〜６０２−６がそれぞれ部分回路８０２−１〜８０２−６に置き換えられた回路である。このようにＸＯＲ回路によるＸＯＲ演算の中間結果をＢＲＡＭに格納することによって、スループットの向上を図る。
【００４３】
また、ここでは、復号処理について簡単に説明する。復号処理のうち、欠落したブロックを、受信した符号化ブロックから再構成する処理は、符号化回路と同じ回路を利用可能である。ただし、復号回路の入力部に配置するＢＲＡＭの数は最大で、符号化行列の列ベクトル数になる。また、復号回路のうちのＡＮＤ回路に入力するデータは、符号化行列の列ベクトルでなく、復号のためのベクトルである。復号回路は、復号ベクトルを、欠落したブロック数が１〜２程度などの少ないときは予め計算して記憶部に格納しておく。これにより、復号回路は、記憶部からテーブル引きのように復号ベクトルを取得できるため、高速になる。復号回路は、欠落したブロック数が多いときはガウス消去などのアルゴリズムに従って動的に計算して求める。動的に計算するため、時間がかかる。
【００４４】
以上を踏まえて設計支援装置１００による符号化回路１０１を示す回路情報の生成処理について詳細に説明する。ここで、設計支援装置１００は、例えば、利用者端末装置とするが、上述したシステム４００であってもよい。
【００４５】
（設計支援装置１００のハードウェア構成例）
図１０は、実施の形態にかかる設計支援装置のハードウェア構成例を示すブロック図である。図１０において、設計支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１００２と、ＲＡＭ１００３と、ディスクドライブ１００４と、ディスク１００５と、を有する。設計支援装置１００は、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１００６と、入力装置１００７と、出力装置１００８と、を有している。また、各部はバス１０００によってそれぞれ接続されている。
【００４６】
ここで、ＣＰＵ１００１は、設計支援装置１００の全体の制御を司る。ＲＯＭ１００２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１００３は、ＣＰＵ１００１のワークエリアとして使用される。ディスクドライブ１００４は、ＣＰＵ１００１の制御にしたがってディスク１００５に対するデータのリード／ライトを制御する。ディスク１００５は、ディスクドライブ１００４の制御で書き込まれたデータを記憶する。ディスク１００５としては、磁気ディスク、光ディスクなどが挙げられる。
【００４７】
Ｉ／Ｆ１００６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続され、このネットワークＮＥＴを介して他の装置に接続される。そして、Ｉ／Ｆ１００６は、ネットワークＮＥＴと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１００６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００４８】
入力装置１００７は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置１００７は、カメラから画像や動画を取り込むこともできる。また、入力装置１００７は、マイクから音声を取り込むこともできる。出力装置１００８は、ＣＰＵ１００１の指示により、データを出力するインターフェースである。出力装置１００８には、ディスプレイやプリンタが挙げられる。
【００４９】
（設計支援装置１００の機能的構成例）
図１１は、設計支援装置の機能的構成例を示すブロック図である。設計支援装置１００は、制御部１１０１と、記憶部１１０２と、を有する。記憶部１１０２は、例えば、ＲＡＭ１００３やディスク１００５などによって実現される。制御部１１０１の処理は、例えば、ＣＰＵ１００１がアクセス可能な記憶装置に記憶された設計支援プログラムにコーディングされる。そして、ＣＰＵ１００１が記憶装置から設計支援プログラムを読み出して、設計支援プログラムにコーディングされている処理を実行することにより、制御部１１０１の処理が実現される。また、制御部１１０１の処理結果は、例えば、記憶部１１０２に記憶される。
【００５０】
記憶部１１０２には、例えば、上述した部分回路６０１−１〜６０１−８の各々を示す回路情報がテンプレート回路情報として格納されてある。また、記憶部１１０２には、後述するテンプレート式が格納されてある。
【００５１】
まず、制御部１１０１は、符号化行列と、前倒し数と、を取得する。取得形式としては、例えば、ＲＡＭ１００３やディスク１００５などの記憶装置に記憶された符号化行列と前倒し数とを読み出すことにより取得してもよいし、入力装置１００７などを介して利用者から取得してもよい。前倒し実行とは、１回目の処理に２回目の処理を重ね合わせることである。重ね合わせる量を増やすことは、実行開始間隔を短縮することに相当する。前倒し数とは、重ね合わせる量を示す。
【００５２】
図１２は、符号化行列例を示す説明図である。符号化行列ｍａ１の各行は、分割された各ブロックに対応する。符号化行列ｍａ１の各列は、送信する符号化ブロックの順序に対応する。列ベクトルは、どのブロックについてＸＯＲ演算を行うかを表す。具体的に、ＲＰＳ符号化処理では、まず各ブロックをそのまま出力するため、符号化行列ｍａ１のうち０〜１５列目までは、各行の値が順に１になる。これにより、０番目から１５番目までには、１６［ＫＢ］のデータが分割されたブロック［０］〜ブロック［１５］が順に送信される。
【００５３】
つぎに、符号化行列ｍａ１のうち１６列目以降については、冗長データを作成可能な情報が設定されてある。例えば、図１２に示す１６列目については、各成分がすべて１になっているため、１６番目に送信されるブロックは、ＢＲＡＭ０からＢＲＡＭ１５までのデータについてワードごとにＸＯＲ演算が行われたデータとなる。１７番目に送信されるブロックは、例えば、ＢＲＡＭ０，２，４，６，８，１０，１２，１４のデータについてワードごとにＸＯＲ演算が行われたデータとなる。図１２の例では、説明の簡単化のために、符号化行列ｍａ１のサイズを１６行３０列としているが、特に限定しない。
【００５４】
図１３は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その１）である。以降のアクセスタイミング図は、複数のＸＯＲ回路によって参照されるブロックと、入力されるブロックを格納するＢＲＡＭ０〜１５と、の対応関係を「＃」によって示す。前倒し数が０の場合には、上述した符号化回路１０１がそのまま利用されることになる。
【００５５】
図１４は、前倒し数が０の場合におけるアクセスタイミング例を示す説明図（その２）である。ブロック２９が出力された後、新しい１６［ＫＢ］のデータがＢＲＡＭ０〜１５に書き込まれる。符号化回路１０１が冗長データについてのブロックを計算中に、ＢＲＡＭ０〜１５への入力ブロックの供給ができない。そのため、前倒し数が０であるとスループットが低下するが、前倒し数を多くすることによって、スループットが向上する。
【００５６】
図１５は、入力ブロック供給を前倒しした場合にデータが上書きされてしまうＢＲＡＭの分布例を示す説明図である。図１５の例では、１サイクル〜１６サイクル早くする場合も同様に、各ブロックの作成に「＃」が設けられているＢＲＡＭのデータを利用するため、各ブロックの作成についての符号化処理が正常に行われない場合がある。
【００５７】
そこで、制御部１１０１は、前倒しを行っても符号化処理が正常に行われるように、上述した部分回路８０１や部分回路８０２のようにＢＲＡＭを設けた符号化回路１０１を示す回路情報を生成する。
【００５８】
具体的に、制御部１１０１は、前倒し数に基づいて、前倒しによって消されるデータと、消されるタイミングと、の組み合わせを特定する。この組み合わせは、第ｉ行ｊ列によって表すことができる。例えば、制御部１１０１は、前倒し数に基づいて、アクセスタイミング図の各データの位置のうち前倒しによって消されるデータの位置に対して色づけを行うことによって、組み合わせを特定してもよい。そして、制御部１１０１は、特定した組み合わせの各々について、符号化行列ｍａ１のうち、特定した組み合わせに対応する成分が１であるか否かを判断する。
【００５９】
制御部１１０１は、特定した組み合わせのうち、組み合わせに対応する成分が１である組み合わせがない場合、符号化回路１０１−１によって符号化処理を行うことができると判断する。一方、制御部１１０１は、特定した組み合わせのうち、組み合わせに対応する成分が１である組み合わせがある場合、符号化回路１０１−１によって符号化処理を行うことができないと判断する。
【００６０】
図１６は、前倒し数が１の場合におけるアクセスタイミング例を示す説明図である。前倒し数が１である場合、ＢＲＡＭ０〜１５への入力ブロックの供給を１サイクル早くさせる。この場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消される。図１６の例では、符号化ブロック２９の作成においてＢＲＡＭ０のデータに対してＸＯＲ演算を行っていないため、符号化回路１０１−１によって符号化処理が正常に行われる。制御部１１０１は、前倒し数が１の場合、符号化回路１０１−１を変更せずに前倒しできると判定する。
【００６１】
図１７は、前倒し数が２の場合におけるアクセスタイミング例を示す説明図である。前倒し数が２の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を２サイクル早くさせる。前倒し数が２の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消され、ＢＲＡＭ０のデータが利用されているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が２の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消されるが、ＢＲＡＭ０およびＢＲＡＭ１の各データが利用されていないため、符号化回路１０１−１によって符号化処理が正常に行われる。そのため、制御部１１０１は、前倒し数が２の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００６２】
ただし、図１７の例では、符号化ブロック２８の作成時と同様に符号化ブロック０の作成時にＢＲＡＭ０のデータを利用したＸＯＲ演算を行っている。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、符号化ブロック２８の作成時に該演算結果が流用可能である。
【００６３】
図１８は、前倒し数が３の場合におけるアクセスタイミング例を示す説明図である。前倒し数が３の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を３サイクル早くさせる。前倒し数が３の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が３の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が３の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消される。ＢＲＡＭ０からＢＲＡＭ２の各データを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。そのため、制御部１１０１は、前倒し数が３の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００６４】
ただし、図１８の例では列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることにより、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。
【００６５】
図１９は、前倒し数が４の場合におけるアクセスタイミング例を示す説明図である。前倒し数が４の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を４サイクル早くさせる。前倒し数が４の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が４の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消されるが、ＢＲＡＭ０およびＢＲＡＭ１のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が４の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が４の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ３のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が４の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００６６】
ただし、図１９の例では列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。また、図１９の例では列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。また、図１９の例では列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２９に対応するタイミングにおいて該演算結果が流用可能である。
【００６７】
図２０は、前倒し数が５の場合におけるアクセスタイミング例を示す説明図である。前倒し数が５の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を５サイクル早くさせる。前倒し数が５の場合、列ベクトル２５に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が５の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０のデータおよびＢＲＡＭ１の各データが上書きによって消され、ＢＲＡＭ０およびＢＲＡＭ１のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００６８】
また、前倒し数が５の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消されるが、ＢＲＡＭ０からＢＲＡＭ２のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が５の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００６９】
また、前倒し数が５の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ４の各データが上書きによって消される。そして、ＢＲＡＭ３およびＢＲＡＭ４のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が５の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００７０】
ただし、図２０の例では列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。
【００７１】
また、図２０の例では列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。また、図２０の例では列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。また、列ベクトル２９に対応するタイミングと同様に列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算が行われる。
【００７２】
そこで、列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果が格納される。また、列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算の演算結果が格納される。これにより、列ベクトル２９に対応するタイミングにおいて各演算結果が流用可能である。
【００７３】
図２１は、前倒し数が６の場合におけるアクセスタイミング例を示す説明図である。前倒し数が６の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を６サイクル早くさせる。前倒し数が６の場合、列ベクトル２４に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消され、ＢＲＡＭ０のデータを参照しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が６の場合、列ベクトル２５に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消される。しかし、ＢＲＡＭ０およびＢＲＡＭ１の各データを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が６の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消され、ＢＲＡＭ０からＢＲＡＭ２の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００７４】
また、前倒し数が６の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ３のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が６の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ４の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が６の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ５の各データが上書きによって消される。そして、ＢＲＡＭ３およびＢＲＡＭ４の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が６の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００７５】
ただし、図２１の例では列ベクトル２４に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２４に対応するタイミングにおいて該演算結果が流用可能である。
【００７６】
また、図２１の例では、列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。
【００７７】
また、図２１の例では、列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。また、図２１の例では、列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。また、列ベクトル２９に対応するタイミングと同様に列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算が行われる。
【００７８】
そこで、列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果を格納しておく。そして、列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算の演算結果を格納しておく。これにより、列ベクトル２９に対応するタイミングにおいて各演算結果が流用可能である。
【００７９】
図２２は、前倒し数が７の場合におけるアクセスタイミング例を示す説明図である。前倒し数が７の場合、ＢＲＡＭ０〜１５への入力ブロックの供給を７サイクル早くさせる。前倒し数が７の場合、列ベクトル２３に対応するタイミングにおいて、ＢＲＡＭ０のデータが上書きによって消されるが、ＢＲＡＭ０のデータを利用していないため、符号化回路１０１−１によって符号化処理が正常に行われる。また、前倒し数が７の場合、列ベクトル２４に対応するタイミングにおいて、ＢＲＡＭ０およびＢＲＡＭ１の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２５に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ２の各データが上書きによって消される。そして、ＢＲＡＭ２およびＢＲＡＭ３の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２６に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ３の各データが上書きによって消され、ＢＲＡＭ０からＢＲＡＭ３の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。
【００８０】
また、前倒し数が７の場合、列ベクトル２７に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ４の各データが上書きによって消され、ＢＲＡＭ３のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ５の各データが上書きによって消され、ＢＲＡＭ０のデータを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。また、前倒し数が７の場合、列ベクトル２９に対応するタイミングにおいて、ＢＲＡＭ０からＢＲＡＭ６の各データが上書きによって消される。そして、ＢＲＡＭ３、ＢＲＡＭ４およびＢＲＡＭ６の各データを利用しているため、符号化回路１０１−１によって符号化処理が正常に行われない。そのため、制御部１１０１は、前倒し数が７の場合、符号化回路１０１−１を変更せずに前倒しできないと判定する。
【００８１】
ただし、図２２の例では、列ベクトル２４に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。列ベクトル０に対応するタイミングにおいて、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２４に対応するタイミングにおいて、該演算結果が流用可能である。
【００８２】
また、図２２の例では、列ベクトル２５に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ２およびＢＲＡＭ３の各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいて、ＢＲＡＭ２およびＢＲＡＭ３の各データを利用したＸＯＲ演算の演算結果が格納される。これにより、列ベクトル２５に対応するタイミングにおいて該演算結果が流用可能である。しかしながら、理由は後述するが、図９の回路中に配置されるＢＲＡＭから決まる性質上、必ずしも流用可能とはならない。
【００８３】
また、図２２の例では、列ベクトル２６に対応するタイミングと同様に列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算が行われる。列ベクトル１６に対応するタイミングにおいてＢＲＡＭ０からＢＲＡＭ３までの各データを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２６に対応するタイミングにおいて該演算結果が流用可能である。
【００８４】
また、図２２の例では、列ベクトル２７に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２７に対応するタイミングにおいて該演算結果が流用可能である。
【００８５】
また、図２２の例では、列ベクトル２８に対応するタイミングと同様に列ベクトル０に対応するタイミングにおいてＢＲＡＭ０のデータを利用したＸＯＲ演算が行われる。そのため、ＢＲＡＭ０のデータを利用したＸＯＲ演算の演算結果が格納されることによって、列ベクトル２８に対応するタイミングにおいて該演算結果が流用可能である。
【００８６】
また、図２２の例では、列ベクトル２９に対応するタイミングと同様に列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算が行われる。さらに、列ベクトル２９に対応するタイミングと同様に列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算が行われる。また、列ベクトル２９に対応するタイミングと同様に列ベクトル６に対応するタイミングにおいてＢＲＡＭ６のデータのみのＸＯＲ演算が行われる。列ベクトル３に対応するタイミングにおいてＢＲＡＭ３のデータを利用したＸＯＲ演算の演算結果と、列ベクトル４に対応するタイミングにおいてＢＲＡＭ４のデータを利用したＸＯＲ演算の演算結果と、が格納される。これにより、列ベクトル２９に対応するタイミングにおいて該演算結果が流用可能である。
【００８７】
ただし、列ベクトル３に対応するタイミングにおいて「（ＢＲＡＭ２のデータ＆列ベクトル［２］）ＸＯＲ（ＢＲＡＭ３のデータ＆列ベクトル［３］）」の演算結果をＢＲＡＭに格納させる。その後に、列ベクトル１６に対応するタイミングにおいて該演算結果を格納させると、列ベクトル３に対応するタイミングにおける演算結果が上書きされてしまう。そのため、制御部１１０１は、図２２の前倒し数が７の場合、前倒し実行ができないと判定する。
【００８８】
図１６〜図２２を用いて説明したように、符号化回路１０１−１をそのまま流用できない場合であっても、いずれかのＸＯＲ演算の演算結果をＢＲＡＭに格納しておくことによって、前倒し実行が可能な場合がある。例えば、前倒し数が２または３の場合における符号化回路１０１例を図２３に示し、前倒し数が４の場合における符号化回路１０１例を図２４に示す。
【００８９】
図２３は、前倒し数が２または３の場合における符号化回路１０１例を示す説明図である。符号化回路１０１−３は、符号化回路１０１−１のうち部分回路６０１−１が部分回路８０１−１に置き換えられた回路である。前倒し数が２または３の場合に、符号化回路１０１−３では、列ベクトル０に対応するタイミングにおいて、「（ＢＲＡＭ０のデータ＆列ベクトル［０］）ＸＯＲ（ＢＲＡＭ１のデータ＆列ベクトル［１］）」の演算結果がＢＲＡＭに格納される。また、符号化回路１０１−３では、列ベクトル２８に対応するタイミングにおいて、ＢＲＡＭに格納された演算結果が選択回路によって選択されて後段に出力される。
【００９０】
図２４は、前倒し数が４の場合における符号化回路１０１例を示す説明図である。符号化回路１０１−４は、符号化回路１０１−１のうち、部分回路６０１−１が部分回路８０１−１に置き換えられ、部分回路６０１−２が部分回路８０１−２に置き換えられ、部分回路６０２−１が部分回路８０２−１に置き換えられた回路である。
【００９１】
前倒し数が４の場合に、符号化回路１０１−４では、列ベクトル０に対応するタイミングにおいて、「（ＢＲＡＭ０のデータ＆列ベクトル［０］）ＸＯＲ（ＢＲＡＭ１のデータ＆列ベクトル［１］）」の演算結果がＢＲＡＭに格納される。また、符号化回路１０１−４では、列ベクトル３に対応するタイミングにおいて、「（ＢＲＡＭ２のデータ＆列ベクトル［２］）ＸＯＲ（ＢＲＡＭ３のデータ＆列ベクトル［３］）」の演算結果がＢＲＡＭに格納される。また、符号化回路１０１−４では、列ベクトル１６に対応するタイミングにおいて、「｛（ＢＲＡＭ０のデータ＆列ベクトル［０］）ＸＯＲ（ＢＲＡＭ１のデータ＆列ベクトル［１］）｝ＸＯＲ｛（ＢＲＡＭ２のデータ＆列ベクトル［２］）ＸＯＲ（ＢＲＡＭ３のデータ＆列ベクトル［３］）｝の演算結果がＢＲＡＭに格納される。
【００９２】
つぎに、追加するＢＲＡＭの位置の決定方法について詳細に説明する。具体的には、制御部１１０１は、符号化回路１０１−１に含まれる部分回路６０１と部分回路６０２のうち、いずれを部分回路８０１または部分回路８０２に置き換えるかを決定する。
【００９３】
図２５は、ＢＲＡＭの位置例を示す説明図である。符号化回路１０１−２によれば、ＸＯＲ演算の演算結果をＢＲＡＭによって保持するため、図２５に示すような位置の演算結果をＢＲＡＭに保存可能である。
【００９４】
図２５の＜保存可能／不可能の例＞に示すように、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の出力位置に設けられるＢＲＡＭを例に挙げる。例えば、このＢＲＡＭには（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の演算結果を格納させると決定された場合、ＢＲＡＭ０のデータまたはＢＲＡＭ１の各データについては格納させることができない。ただし、｛（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）｝ＸＯＲ｛（ＢＲＡＭ２のデータ）ＸＯＲ（ＢＲＡＭ３のデータ）｝の出力位置に設けられるＢＲＡＭを利用すれば、ＢＲＡＭ０のデータを格納可能である。また、格納されたデータを使ってＸＯＲ演算が可能であるため、実際に保存できるデータの組み合わせは複数ある。
【００９５】
図２６は、テンプレート論理式例を示す説明図である。まず、制御部１１０１は、テンプレート論理式２６００を取得する。図２６に示すテンプレート論理式２６００では、入力ブロックが１６ブロックである場合を例に挙げる。換言すれば、符号化行列ｍａ１が１６行の場合を例に挙げる。
【００９６】
図２７は、変数とＢＲＡＭの位置との対応関係を示す説明図である。例えば、テンプレート論理式２６００に含まれる変数ａ０〜ａ７は、それぞれ入力ブロックを格納するＢＲＡＭから最前段のＸＯＲ回路の出力結果を格納可能なＢＲＡＭがいずれのデータを格納するかを示す。例えば、変数ａ０は、ＢＲＡＭ０のデータとＢＲＡＭ１のデータとのＸＯＲ演算の演算結果を保持するＢＲＡＭがいずれのデータを格納するかを示す。例えば、テンプレート論理式２６００に含まれる変数ｂ０〜ｂ３は、それぞれ入力ブロックを格納するＢＲＡＭから２段目のＸＯＲ回路の出力結果を格納可能なＢＲＡＭがいずれのデータを格納するかを示す。例えば、変数ｂ０は、ＢＲＡＭ０のデータとＢＲＡＭ１のデータとのＸＯＲ演算の演算結果と、ＢＲＡＭ２のデータとＢＲＡＭ３のデータとのＸＯＲ演算の演算結果と、のＸＯＲ演算の演算結果を保持するＢＲＡＭがいずれのデータを格納するかを示す。例えば、テンプレート論理式２６００に含まれる変数ｃ０〜ｃ１は、それぞれ入力ブロックを格納するＢＲＡＭから３段目のＸＯＲ回路の出力結果を格納可能なＢＲＡＭがいずれのデータを格納するかを示す。例えば、変数ｃ０は、ＢＲＡＭ０のデータからＢＲＡＭ３のデータまでのＸＯＲ演算の演算結果と、ＢＲＡＭ４のデータからＢＲＡＭ７のデータまでのＸＯＲ演算の演算結果と、のＸＯＲ演算の演算結果を保持するＢＲＡＭがいずれのデータを格納するかを示す。変数ａと、変数ｂと、変数ｃと、がとりうる値の範囲を以下に示す。
【００９７】
０≦ａｎ（ｎ＝０〜７）≦（２＾２）−１＝３
０≦ｂｍ（ｍ＝０〜３）≦（２＾４）−１＝１５
０≦ｃｌ（ｌ＝０〜１）≦（２＾８）−１＝２５５
【００９８】
＾はべき乗演算子を示す。ただし、ｂ０を例に挙げると、ｂ０＝７やｂ０＝９などの値については、実際に符号化回路１０１−１では計算していないため、とることができない。また、例えば、ａ０＝３は、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の演算結果がＢＲＡＭに格納されることを示す。例えば、ａ０＝２は、（ＢＲＡＭ０のデータ＆０）ＸＯＲ（ＢＲＡＭ１のデータ＆１）の演算結果がＢＲＡＭに格納されることを示す。例えば、ａ０＝１は、（ＢＲＡＭ０のデータ＆１）ＸＯＲ（ＢＲＡＭ１のデータ＆０）の演算結果がＢＲＡＭに格納されることを示す。
【００９９】
制御部１１０１は、取得したテンプレート論理式２６００に基づいて、符号化行列ｍａ１のうち入力されるブロック数以降の列の各々について、論理式を求める。ここでは、制御部１１０１は、列１６〜列２９の各々について論理式を求める。具体的に、制御部１１０１は、変数が対応する行、ＢＲＡＭｘ〜ＢＲＡＭｙについて、上述した各アクセスタイミング図において、「＃」が付いている箇所を１として、バイナリ符号化する。バイナリ符号化した数値が、その変数がとりうる値の集合の要素である。変数ｂ０を例に挙げると、制御部１１０１は、変数ｂ０が対応する行、ＢＲＡＭ０〜ＢＲＡＭ３について、「＃」が付されている位置を１としてバイナリ符号化する。ＢＲＡＭ０が最下位ビットであり、ＢＲＡＭ３が最上位ビットに対応する。例えば、０列目が０００１であり、１列目が００１０であり、２列目が０１００であり、３列目が１０００であり、４列目から１５列目が００００であり、１６，１９，２０，２６列目が１１１１であり、１７列目が０１０１であり、１８列目が００１１である。変数ｂ０がとりうる値は｛０００１，００１０，０１００，１０００，００００，１１１１，０１０１，００１１，…｝である。１０進数で表記すると、｛１，２，４，８，０，１５，５，３，…｝が、変数ｂ０がとりうる値の集合である。
【０１００】
ここでは、例えば、制御部１１０１は、第２９列について、論理式を求める。
・ｃ０については、０１０１１０００（２進数）＝８８（１０進数）である。
・ｂ０については、１０００（２進数）＝８（１０進数）である。
・ｂ１については、０１０１（２進数）＝５（１０進数）である。
・ａ０については、００（２進数）＝０（１０進数）である。
・ａ１については、１０（２進数）＝２（１０進数）である。
・ａ２については、０１（２進数）＝１（１０進数）である。
・ａ３〜ａ７については、０である。
【０１０１】
制御部１１０１は、上記をテンプレート論理式２６００に代入させると以下のようになる。
【０１０２】
（（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ０＝０）＆（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）＆（ａ３＝０））））＆（（ｃ１＝０）｜（（（ｂ２＝０）｜（ａ４＝０）＆（ａ５＝０））＆（（ｂ３＝０）｜（ａ６＝０）＆（ａ７＝０））））
【０１０３】
変数＝０という書式の項を常に"ＴＲＵＥ"であるとして、論理式を簡単化させることができる。論理式を簡単化させると以下のようになる。
（（ｃ０＝８８）｜（（（ｂ０＝８）｜ＴＲＵＥ＆（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）＆ＴＲＵＥ）））＆（ＴＲＵＥ｜（（ＴＲＵＥ｜ＴＲＵＥ＆ＴＲＵＥ）＆（ＴＲＵＥ｜ＴＲＵＥ＆ＴＲＵＥ）））
【０１０４】
さらに式を簡単化させると以下のようになる。
（（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）＆ＴＲＵＥ）））＆（ＴＲＵＥ｜（（ＴＲＵＥ｜ＴＲＵＥ＆ＴＲＵＥ）））
【０１０５】
さらに式を簡単化させると以下のようになる。
【０１０６】
（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１）））・・・論理式２９
【０１０７】
このようにして、制御部１１０１は、列２９について、論理式２９を求める。
【０１０８】
この論理式２９は、符号化ブロック２９を生成するときに、上書きによって入力ブロックが消去されてしまうＢＲＡＭ３とＢＲＡＭ４のデータを補うために、いずれのＢＲＡＭが利用可能かを示している。
【０１０９】
論理式２９がＴＲＵＥになるのは、例えばｃ０＝８８のときであり、８８を２進法で表記すると０１０１１０００となり、ｃ０を２進法で表記したときに１となる位置によって、（ＢＲＡＭ６のデータ）ＸＯＲ（ＢＲＡＭ４のデータ）ＸＯＲ（ＢＲＡＭ３のデータ）の値を保存すればよいことを意味する。
【０１１０】
例えば、制御部１１０１は、第２８列について、以下のように論理式２８を得る。
【０１１１】
（ｃ０＝１２９）｜（（（ｂ０＝１）｜（ａ０＝１）＆（ａ１＝０））＆（（ｂ１＝８）｜（ａ２＝０）＆（ａ３＝０）））
簡単化によって、以下となる。
（ｃ０＝１２９）｜（（（ｂ０＝１）｜（ａ０＝１）＆（ａ１＝０））＆（（ｂ１＝８）｜ＴＲＵＥ））
さらに簡単化によって以下論理式２８が得られる。
（ｃ０＝１２９）｜（ｂ０＝１）｜（ａ０＝１）・・・論理式２８
【０１１２】
例えば、制御部１１０１は、第２７列について、以下のように論理式２７を得る。
【０１１３】
（ｃ０＝２３２）｜（（（ｂ０＝８）｜（ａ０＝０）＆（ａ１＝２））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０）））
簡単化によって、以下となる。
（ｃ０＝２３２）｜（（（ｂ０＝８）｜ＴＲＵＥ＆（ａ１＝２））＆（ＴＲＵＥ｜ＴＲＵＥ））
さらに簡単化によって以下論理式２７が得られる。
（ｃ０＝２３２）｜（ｂ０＝８）｜（ａ１＝２）・・・論理式２７
【０１１４】
例えば、制御部１１０１は、第２６列について、以下のように論理式２６を得る。
【０１１５】
（ｃ０＝２２３）｜（（（ｂ０＝１５）｜（ａ０＝３）＆（ａ１＝３））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０）））
さらに簡単化によって以下論理式２６が得られる。
（ｃ０＝２２３）｜（ｂ０＝１５）｜（ａ０＝３）＆（ａ１＝３）・・・論理式２６
【０１１６】
例えば、制御部１１０１は、第２５列について、以下のように論理式２５を得る。
【０１１７】
（（ｃ０＝０）｜（（（ｂ０＝１２）｜（ａ０＝０）＆（ａ１＝０））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０））））・・・論理式２５
【０１１８】
例えば、制御部１１０１は、第２４列について、以下のように論理式２４を得る。
【０１１９】
（（ｃ０＝１８１）｜（（（ｂ０＝５）｜（ａ０＝１）＆（ａ１＝０））＆（（ｂ１＝０）｜（ａ２＝０）＆（ａ３＝０））））
さらに簡単化によって以下論理式２４が得られる。
（ｃ０＝１８１）｜（ｂ０＝５）｜（ａ０＝１）・・・論理式２４
【０１２０】
例えば、第２３列については以下のようになる。
ＴＲＵＥ・・・論理式２３
【０１２１】
つぎに、制御部１１０１は、各列についての論理式のすべてのＡＮＤを取った論理式Ｘを作成する。
【０１２２】
Ｘ＝（論理式２９）ＡＮＤ（論理式２８）ＡＮＤ（論理式２７）ＡＮＤ…
Ｘ＝（（ｃ０＝８８）｜（（（ｂ０＝８）｜（ａ１＝２））＆（（ｂ１＝５）｜（ａ２＝１））））＆
（（ｃ０＝１２９）｜（ｂ０＝１）｜（ａ０＝１））＆
（（ｃ０＝２３２）｜（ｂ０＝８）｜（ａ１＝２））＆
（（ｃ０＝２２３）｜（ｂ０＝１５）｜（ａ０＝３）＆（ａ１＝３））＆
（（ｃ０＝１８１）｜（ｂ０＝５）｜（ａ０＝１））
【０１２３】
制御部１１０１は、作成した論理式ＸをＴＲＵＥにするように、ａ０，…，ａ７，ｂ０，…ｂ４，ｃ０，ｃ１への整数値の割り当てを求める。求められた解がＢＲＡＭの割り当て問題の解となる。値がゼロとなる割り当てが多くなるようにしたほうが、追加されるＢＲＡＭの数を低減させることができる。ＢＲＡＭの割り当て問題は、例えば、ＳＡＴソルバと呼ばれるソフトウェアを用いても効率的に解くことができる（例えば、「Ｔｈｅ  ＭｉｎｉＳａｔ  Ｐａｇｅ，［ｏｎｌｉｎｅ］、［平成２５年１２月６日検索］、インターネット＜ｈｔｔｐ：／／ｍｉｎｉｓａｔ．ｓｅ／＞」）。また、例えば、以下図２８に示すように、制御部１１０１は、総当たりで計算してもよい。
【０１２４】
図２８は、ＢＲＡＭの割り当て問題を解くプログラム例を示す説明図である。例えば、ＣＰＵ１００１が、図２８に示すプログラム２８００を実行すると、以下のような結果が得られる。プログラム２８００は、設計支援プログラムの一部である。
【０１２５】
ｎ＝４  ａ０＝１  ａ１＝０  ａ２＝０  ｂ０＝８  ｂ１＝５…ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝０  ａ２＝１  ｂ０＝８  ｂ１＝０…ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝０  ｂ１＝５  ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝１５  ｂ１＝０  ｃ０＝８８
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝１５  ｂ１＝５  ｃ０＝０
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝０  ｂ０＝１５  ｂ１＝５  ｃ０＝０
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝１  ｂ０＝０  ｂ１＝０  ｃ０＝２２３
ｎ＝４  ａ０＝１  ａ１＝２  ａ２＝１  ｂ０＝１５  ｂ１＝０  ｃ０＝０
【０１２６】
例えば、制御部１１０１は、「ａ０＝１  ａ１＝２  ａ２＝１  ｂ０＝１５」という解を利用すれば、以下の動作をする符号化回路１０１を示す回路情報を生成する。
・符号化回路１０１では、変数ａ０が示す位置のＢＲＡＭに、ＢＲＡＭ０のデータ（＝（ＢＲＡＭ０のデータ＆１）ＸＯＲ（ＢＲＡＭ１のデータ＆０））を格納する。
・符号化回路１０１では、変数ａ１が示す位置のＢＲＡＭに、ＢＲＡＭ３のデータを格納する。
・符号化回路１０１では、変数ａ２が示す位置のＢＲＡＭに、ＢＲＡＭ４のデータを格納する。
・符号化回路１０１では、変数ｂ０が示す位置のＢＲＡＭに、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）ＸＯＲ（ＢＲＡＭ２のデータ）ＸＯＲ（ＢＲＡＭ３のデータ）を格納する。
【０１２７】
つぎに、制御部１１０１は、得られた解について、それぞれ変数が示す位置のＢＲＡＭがデータを格納するタイミングを特定する。制御部１１０１は、前倒し実行によりブロックが上書きされる以前の列ベクトル０〜２３に対応するタイミングのうち、データを保存するタイミングを決定する。
【０１２８】
例えば、前倒し数４の場合に、ａ０＝１となるのは、列ベクトル０と列ベクトル１７との各々に対応するタイミングである。換言すると、列ベクトル０と列ベクトル１７との各々に対応するタイミングにおいて、（ＢＲＡＭ０のデータ）ＸＯＲ（ＢＲＡＭ１のデータ）の演算結果を格納することを示す。タイミングが複数ある場合、制御部１１０１は、いずれを選択してもよい。
【０１２９】
また、各変数が示す位置のＢＲＡＭのデータを読み出すタイミングは、入力ブロックが上書きされる期間内である。例えば、ａ０＝１を読み出すタイミングは、列ベクトル２４に対応するタイミングと、列ベクトル２８に対応するタイミングと、において読み出すことを示す。また、例えば、ａ１＝２を読み出すタイミングは、列ベクトル２７に対応するタイミングと、列ベクトル２９に対応するタイミングと、において読み出すことを示す。
【０１３０】
また、例えば、ａ２＝１を読み出すタイミングは、列ベクトル２９に対応するタイミングにおいて読み出すことを示す。また、例えば、ｂ０＝１５を読み出すタイミングは、列ベクトル２６に対応するタイミングにおいて読み出すことを示す。
【０１３１】
ここで、前倒し数が４の場合について、変数と、格納タイミングと、読み出しタイミングと、のタイミング決定結果を以下に示す。
・変数          格納タイミング    読み出しタイミング
・ａ０＝１      ０                ２４，２８
・ａ１＝２      ３                ２７，２９
・ａ２＝１      ４                ２９
・ｂ０＝１５    １６              ２６
【０１３２】
制御部１１０１は、上記で得られた変数が示す位置のＢＲＡＭと、ＢＲＡＭに格納させるデータと、各タイミングと、に基づいて、符号化回路１０１を示す回路情報を生成する。具体的に、制御部１１０１は、変数に値が設定されている場合、部分回路８０１または部分回路８０２を設け、変数に値が設定されていない場合、変数が示す位置に部分回路６０１または部分回路６０２を設けた符号化回路１０１を示す回路情報を生成する。
【０１３３】
つぎに、制御部１１０１は、制御信号を生成する制御回路を示す回路情報を生成する。制御回路は、格納タイミングの際に、書き込みイネーブル信号を有効にして、ＢＲＡＭへデータを書き込ませる。また、制御回路は、格納タイミング以外のタイミングでは、書き込みイネーブル信号を無効にして、ＢＲＡＭへの書き込みを行わせない。
【０１３４】
また、制御回路は、読み出しタイミングの際に、読み出し選択信号を有効にして、ＢＲＡＭからデータを読み出させる。また、制御回路は、読み出しタイミング以外のタイミングでは、読み出し選択信号を無効にして、ＸＯＲ回路からの値を出力する。
【０１３５】
制御部１１０１は、上述したタイミング決定結果により、Ｖｅｒｉｌｏｇ−ＨＤＬなどのハードウェア記述言語によって記述された回路記述を自動生成することが可能である。また、制御部１１０１は、得られた回路記述を、論理合成ツールに与えることにより、制御回路を示す回路情報が得られる。
【０１３６】
図２９は、生成される回路記述例を示す説明図である。回路記述２９００には、制御回路から出力される書き込みイネーブル信号と読み出し選択信号との値の決定方法と、ブロック番号カウンタの動作と、について詳細に記述されてある。
【０１３７】
図３０は、符号化回路１０１と符号化回路１０１を制御する制御回路とを示す説明図である。ここで、制御回路３０００から符号化回路１０１−４へ入力される各信号と制御回路３０００に含まれるブロックとについて簡単に説明する。アドレス１は、入力されるブロックを格納するＢＲＡＭに新しいブロックを書き込む、または、当該ＢＲＡＭからデータを読み出すときのアドレス値を供給する。ブロック番号カウンタは、１ブロック分の符号化処理が終了すると、ブロック番号をインクリメントするカウンタであり、列ベクトルの番号に対応する。
【０１３８】
アドレス２は、ＸＯＲ演算の演算結果を格納するＢＲＡＭに、データを書き込むとき、または読み出すときのアドレス値を供給する。アドレス２は、アドレス１のカウンタに同期して値が変化する。符号化回路１０１−４内のレジスタの段数分だけ、値が遅れて変化していく。
【０１３９】
書き込みイネーブル２は、ブロック番号カウンタに同期して値が変化し、ＸＯＲ演算の演算結果を格納するＢＲＡＭにブロックを格納するときだけ有効になる制御信号である。読み出し選択は、選択回路の制御信号であり、ＸＯＲ演算の演算結果を格納するＢＲＡＭにブロックを格納する格納タイミングのときだけ、有効になる制御信号である。読み出し選択は、ブロック番号カウンタに同期して値が変化する。
【０１４０】
また、読み出し選択は、ＡＮＤ回路の一入力端に入力される制御信号であって、強制的に出力を０にするための信号である。また、読み出し選択は、ＢＲＡＭ０のデータとＢＲＡＭ１のデータの、どちらかもしくは両方の値が上書きによって失われているときに、ＢＲＡＭ０のデータとＢＲＡＭ１のデータを０としてＸＯＲ演算したいときに利用され、上述例では使用していない。
【０１４１】
図３１は、図３０に示す回路の動作例を示す説明図である。図３１に示すように、ブロック番号カウンタの値が０の場合に、書き込みイネーブル２＿ａ０が１となる。また、ブロック番号カウンタの値が３の場合に、書き込みイネーブル２＿ａ１が１となる。また、ブロック番号カウンタの値が２４の場合に、読み出し選択＿ａ０は、１となる。
【０１４２】
図３２は、前倒し実行処理例を示す説明図である。前倒し実行処理の実行期間中には、出力される符号化データが２倍になる。タイミングＴ１については、１回目の処理では、列ベクトル２４に対応するタイミングにおけるＸＯＲ演算の演算結果が出力され、２回目の処理では、列ベクトル０に対応するタイミングにおけるＸＯＲ演算の演算結果が出力される。また、タイミングＴ２については、１回目の処理では、列ベクトル２９に対応するタイミングにおけるＸＯＲ演算の演算結果が出力され、２回目の処理では、列ベクトル５に対応するタイミングにおけるＸＯＲ演算の演算結果が出力される。
【０１４３】
図３３は、前倒し実行処理を行うための回路構成例を示す説明図である。図３３では、前倒し数が４の場合を例に挙げる。ＲＰＳハードウェア部４２２は、回路３２０１と符号化回路１０１−４と、回路３２０２と、を有する。回路３２０１は、前倒し実行期間中には、先頭からＮブロック分の入力ブロックをそのまま出力データとして流す。回路３２０２は２系統の符号化ブロックを受け取り、次の段の処理に順に流す。
【０１４４】
制御部１１０１は、符号化行列ｍａ１を取得した後に、列ベクトルを入れ替えることによって、ＢＲＡＭの数を低減させることができる。なお、符号化行列ｍａ１の列ベクトルを入れ替えたとしても、ＲＰＳ符号化処理の訂正能力は同じである。列ベクトルを交換することは、パケットの送信順序を交換することと等しい。パケットを受信する受信側では、最終的に受け取るパケットが同じになるため、訂正能力も同じである。ただし、訂正できるまでの時間は異なる場合がある。例えば、元の符号化行列において第１７番目の符号化データを受信したときに訂正できる場合、列ベクトル１７が列ベクトル２９へ移動した後の符号化行列では、第２９番目の符号化データを受信したときに訂正することとなる。
【０１４５】
図３４は、符号化行列の列ベクトル入替例を示す説明図である。例えば、制御部１１０１は、符号化行列ｍａ１のうち（入力ブロック数）列目以降の列ベクトルの各々について、先頭行から順に０が連続して並ぶ数を計数する。そして、制御部１１０１は、符号化行列ｍａ１に基づいて、計数結果の昇順にソートした符号化行列ｍａ２を生成する。図３４の例では、列ベクトル２１以降について順番が変更される。
【０１４６】
図３５は、列ベクトル入替によるＢＲＡＭの使用数の変化例を示す説明図である。例えば、入替前の符号化行列ｍａ１では、前倒し数が３の場合、追加されるＢＲＡＭが１個であり、前倒し数が５の場合、追加されるＢＲＡＭが４個である。これに対して、入替後の符号化行列ｍａ２では、前倒し数が３の場合、追加されるＢＲＡＭがなく、前倒し数が５の場合、追加されるＢＲＡＭが３個である。このように、列ベクトルを入れ替えることによって、追加されるＢＲＡＭの数の低減を図ることができる。
【０１４７】
（設計支援装置１００による設計支援処理手順例）
図３６および図３７は、設計支援装置による設計支援処理手順例を示すフローチャートである。まず、設計支援装置１００は、符号化行列と、前倒し数と、を取得する（ステップＳ３６０１）。設計支援装置１００は、符号化行列のうち（入力ブロック数）列目以降の列ベクトルごとに先頭成分から順に０が連続して並ぶ数を計数する（ステップＳ３６０２）。設計支援装置１００は、符号化行列のうち（入力ブロック数）列目以降の列ベクトルを計数結果の昇順にソートする（ステップＳ３６０３）。
【０１４８】
つぎに、設計支援装置１００は、前倒し数に基づいて消去が行われるタイミングの各々について、消されるブロックを特定する（ステップＳ３６０４）。そして、設計支援装置１００は、消去が行われるタイミングについて特定した消去されるブロックのうち、消去が行われるタイミングと消去されるブロックに対応する列ベクトルの成分が１であるブロックがあるか否かを判断する（ステップＳ３６０５）。成分が１であるブロックがないと判断された場合（ステップＳ３６０５：Ｎｏ）、設計支援装置１００は、符号化回路を変更せずに利用可能な旨を出力し（ステップＳ３６０６）、一連の処理を終了する。
【０１４９】
一方、成分が１であるブロックがあると判断された場合（ステップＳ３６０５：Ｙｅｓ）、設計支援装置１００は、テンプレート論理式を取得する（ステップＳ３７０１）。設計支援装置１００は、列ベクトルごとに論理式を生成する（ステップＳ３７０２）。設計支援装置１００は、生成した各論理式の論理積演算を行う論理式Ｘを生成する（ステップＳ３７０３）。そして、設計支援装置１００は、論理式Ｘの各変数の値を求める（ステップＳ３７０４）。つぎに、設計支援装置１００は、論理式ＸをＴＲＵＥにする変数の値の組み合わせを特定する（ステップＳ３７０５）。
【０１５０】
設計支援装置１００は、特定した組み合わせに基づく列ベクトルに対応するタイミングを特定する（ステップＳ３７０６）。設計支援装置１００は、特定した組み合わせと特定したタイミングとに基づいて符号化回路と制御回路とを示す回路情報を生成し（ステップＳ３７０７）、一連の処理を終了する。
【０１５１】
また、ＦＰＧＡの特徴を利用することにより、ハードウェアリソースの追加なしで符号化処理の処理速度を向上可能である。ＦＰＧＡ内に埋め込まれているＢＲＡＭはコンフィギュレーション可能なパターンが限定されている。例えば、ＸＩＬＩＮＸ社の７シリーズＦＰＧＡの場合、３６［ＫＢｉｔ］ＢＲＡＭが最小構成単位である。７２Ｂｉｔ幅＊５１２ＷＯＲＤでコンフィギュレーションすると、符号化ハードウェアでは、６４Ｂｉｔ＊５１２ＷＯＲＤで利用するとして、１［ＫＢ］のブロックを４個保存可能になる。８Ｂｙｔｅ＊１２８＝１０２４Ｂｙｔｅであり、４［ＫＢ］＝４０９６Ｂｙｔｅ＝３２７６８Ｂｉｔである。符号化ハードウェアの入力部にこのＢＲＡＭを利用することによって、ＢＲＡＭを追加することなく、４セット分のデータ（＝１６ＫＢ＊４回）を連続して入力可能になり、スループットを向上させることができる。
【０１５２】
以上説明したように、設計支援装置１００は、前倒し実行中の各タイミングについて、前倒し実行で上書きされるデータに基づく演算と、該演算の結果が該タイミングと同一の他のタイミングとを符号化行列により特定する。これにより、省メモリ量で前倒し実行可能な符号化回路を設計可能とする。これにより、省メモリで前倒し実行可能な符号化回路を設計可能とする。したがって、省メモリであっても、符号化処理のスループットを向上させることができる。
【０１５３】
また、設計支援装置１００は、特定した論理演算と、特定したタイミングと、に基づいて、符号化回路と、制御回路と、を示す回路情報を生成する。これにより、自動で符号化回路を設計可能となり、設計者の手間を省くことができる。
【０１５４】
また、設計支援装置１００は、符号化行列の列ベクトルのうち、冗長ブロックを生成する列ベクトルを、先頭成分から順に連続する０の数が少ない順に並び替える。これにより、より少ないメモリで、より多くの前倒し実行が可能となる。
【０１５５】
なお、本実施の形態で説明した設計支援方法は、予め用意された設計支援プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本設計支援プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、設計支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１５６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５７】
（付記１）所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援方法であって、
コンピュータが、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理を実行することを特徴とする設計支援方法。
【０１５８】
（付記２）前記コンピュータが、
前記開始タイミング以降のタイミングのうちの異なる２つのタイミング同士で、特定した前記論理演算が同一であり、かつ特定した前記論理演算の演算結果が異なる場合には、前記異なる２つのタイミング同士で、特定する前記論理演算が重ならないように、前記論理演算を特定する処理と前記タイミングを特定する処理とを行う、
処理を実行することを特徴とする付記１に記載の設計支援方法。
【０１５９】
（付記３）
前記コンピュータが、
前記開始タイミング以降のタイミングの各々について特定した前記論理演算の演算結果を格納する記憶領域を前記符号化回路に設けた第２符号化回路と、前記開始タイミング以降のタイミングの各々について特定した前記タイミングにおいて特定した前記論理演算の演算結果を前記記憶領域に格納させる制御回路と、を示す回路情報を生成する、
処理を実行することを特徴とする付記１または２に記載の設計支援方法。
【０１６０】
（付記４）前記コンピュータが、
取得した前記符号化行列のベクトルのうち、前記第１数より後のベクトルの各々について、先頭の成分から順に連続する前記所定値と異なる値の数を計数し、
前記符号化行列に基づいて、前記第１数より後のベクトルを計数した前記所定値と異なる値の数が少ない順に並び替えた符号化行列を生成する、
処理を実行し、
前記論理演算を特定する処理では、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する生成した前記符号化行列の前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が前記所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定することを特徴とする付記１〜３のいずれか一つに記載の設計支援方法。
【０１６１】
（付記５）所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援プログラムであって、
コンピュータに、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理を実行させることを特徴とする設計支援プログラム。
【０１６２】
（付記６）所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援装置であって、
前記符号化行列を取得し、符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する制御部を有することを特徴とする設計支援装置。
【０１６３】
（付記７）所定数（以下「第１数」と称する。）の成分を有するベクトルを前記第１数よりも多い第２数有する符号化行列の前記ベクトルの各々について、符号化の対象データを前記第１数に分割した複数の部分データであって、前記第１数の記憶領域に格納された複数の部分データと前記ベクトルの各成分とに基づく複数の論理演算を含む符号化処理を行うことによって前記第２数の符号化データを得る符号化回路の設計を支援する設計支援プログラムを記録した記録媒体であって、
前記符号化行列を取得し、
符号化の第１対象データを分割した複数の第１部分データであって、前記記憶領域に格納された複数の第１部分データと取得した前記符号化行列の前記ベクトルの各成分とに基づく前記符号化処理における前記ベクトルに対応する各タイミングのうち、符号化の第２対象データを分割した複数の第２部分データの前記記憶領域への格納を開始する開始タイミングを示す情報を取得し、
前記各タイミングのうち取得した前記情報が示す前記開始タイミング以降のタイミングの各々について、前記記憶領域に記憶された前記複数の第１部分データのうち、前記タイミングにおいて前記第２部分データによって上書きされる第１部分データを特定し、
前記開始タイミング以降のタイミングの各々について、前記タイミングに対応する前記ベクトルの各成分のうち、特定した前記第１部分データに対応する成分が所定値である場合に、前記複数の論理演算のうち、特定した前記第１部分データに基づく論理演算を特定し、
前記開始タイミング以降のタイミングの各々について、前記各タイミングの中の前記開始タイミングより前の各タイミングのうち、特定した前記論理演算の演算結果が前記タイミングに対応する前記ベクトルに基づく特定した前記論理演算の演算結果と同一となるタイミングを特定する、
処理をコンピュータに実行させる設計支援プログラムを記録したことを特徴とする記録媒体。
【符号の説明】
【０１６４】
１００  設計支援装置
１０１  符号化回路
６０１，６０２，８０１，８０２  部分回路
ｍａ１，ｍａ２  符号化行列
ｄ１  第１対象データ
ｄ２  第２対象データ
【国際調査報告】
2015136611.tif 000040
2015136611.tif 000041
2015136611.tif 000042
2015136611.tif 000043