(57)【要約】      （修正有）【課題】アルゴリズムモデルプログラムなどの演算プログラムから、ハードウェアモデルプログラムを得ることができる演算プログラム変換装置、演算プログラム変換方法およびプログラムを提供する。【解決手段】演算プログラム変換装置１は、論理式で記述した演算プログラムを記憶するプログラム記憶部１２と、中間変数を生成する中間変数生成部１６と、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換する式変換部１７，１８と、当該複数の二項式により、プログラム記憶部１２に記憶されている元の論理式を更新する式更新部１９と、プログラム記憶部１２に記憶されている論理式の出力変数、入力変数および中間変数のビット幅を決定するビット幅決定部１５と、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅を記憶するビット幅記憶部１３とを有する。【選択図】図１
2010170196.tif 000002
【特許請求の範囲】
【請求項１】
設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、
前記プログラム記憶部に３以上の入力変数を有する前記論理式が記憶されている場合、当該論理式を、２個の入力変数および１個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、
前記中間変数生成部により中間変数が生成された場合、前記論理式を、前記中間変数を得るための二項式および前記中間変数から前記出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、
前記式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、前記プログラム記憶部に記憶されている元の前記論理式を更新する式更新部と、
前記プログラム記憶部に記憶されている論理式の前記出力変数、前記入力変数および前記中間変数のビット幅を決定するビット幅決定部と、
前記出力変数のビット幅、前記入力変数のビット幅および前記中間変数のビット幅を記憶するビット幅記憶部と
を有する演算プログラム変換装置。
【請求項２】
前記中間変数生成部および前記式変換部は、
中間変数を生成して前記プログラム記憶部に記憶されている前記３以上の入力変数を有する論理式を、当該論理式に含まれる乗除算演算を二項式化するように複数の論理式へ変換し、
乗除算演算に二項式化のために生成された中間変数が、前記３以上の入力変数を有する論理式に含まれる加減算演算に係る入力変数より後に加減算されるように、前記プログラム記憶部に記憶されている論理式の加減算演算を二項式化して、前記論理式を複数の二項式へ変換する
請求項１記載の演算プログラム変換装置。
【請求項３】
前記プログラム記憶部から、前記プログラム記憶部に記憶される論理式を順番に取得する処理を、複数回繰り返す取得部を有し、
前記取得部は、論理式に含まれる乗除算演算を二項式化するために、
１回目の論理式の順次取得処理では、
前記ビット幅決定部に、当該取得論理式の出力変数のビット幅と、当該乗除算演算に係る入力変数のビット幅とを決定させ、
前記中間変数生成部および前記式変換部に、中間変数を生成して当該乗除算演算を二項式化させ、
前記式更新部に、前記プログラム記憶部に記憶される論理式を更新させ、
２回目の論理式の順次取得処理では、
前記ビット幅決定部に、乗除算演算の前記二項式に含まれる中間変数のビット幅を決定させる
請求項１または２記載の演算プログラム変換装置。
【請求項４】
前記取得部は、論理式に含まれる加減算演算を二項式化するために、
３回目の論理式の順次取得処理では、
前記中間変数生成部および前記式変換部に、中間変数を生成して当該加減算演算を二項式化させ、
前記式更新部に、前記プログラム記憶部に記憶される論理式を更新させ、
４回目の論理式の順次取得処理では、
前記ビット幅決定部に、前記ビット幅が決定されていない変数のビット幅を決定させる
請求項３記載の演算プログラム変換装置。
【請求項５】
前記中間変数生成部は、
前記取得部が取得した論理式に乗除算の演算子のみが含まれる場合、当該乗除算の演算子より１個少ない数の中間変数を生成し、
前記取得部が取得した論理式に乗除算の演算子および加減算の演算子が含まれる場合、当該乗除算の演算子と同じ数の中間変数を生成する
請求項３記載の演算プログラム変換装置。
【請求項６】
前記ビット幅決定部は、前記論理式の出力変数の許容誤差に基づいて、前記出力変数、前記入力変数および前記中間変数のビット幅を決定する
請求項１記載の演算プログラム変換装置。
【請求項７】
前記ビット幅決定部は、前記プログラム記憶部に記憶される前記論理式が複数の論理式へ更新される前に、前記プログラム記憶部に記憶されている論理式を用いて前記出力変数のビット幅、および乗除算演算に係る前記入力変数のビット幅を決定し、
前記ビット幅記憶部は、前記ビット幅決定部が決定したビット幅を記憶し、
前記式変換部は、加減算演算を二項式化する場合、前記ビット幅記憶部にビット幅が記憶されていない出力変数を前記中間変数として特定する
請求項１記載の演算プログラム変換装置。
【請求項８】
前記式変換部は、
前記取得論理式に含まれる複数の入力変数について、ビット幅が小さい入力変数よりビット幅が大きい入力変数が後の二項式で演算されるように、前記複数の二項式に対して前記複数の入力変数を割り当てる
請求項１記載の演算プログラム変換装置。
【請求項９】
前記ビット幅決定部は、
前記取得論理式の入力変数のビット幅を一律に削減しながらシミュレーションを繰り返して許容誤差が初めて得られなくなる入力変数の誤差外ビット数を得た後、
１個の入力変数の前記誤差外ビット数に１ビットを付加してシミュレーションを実行することを、各入力変数について繰り返し、出力変数の誤差が最大になった入力変数のビット幅を、当該シミュレーションでのビット幅に決定する
請求項１記載の演算プログラム変換装置。
【請求項１０】
前記ビット幅決定部は、
既にビット幅を決定した入力変数および着目する入力変数以外の入力変数については、浮動小数点型の変数としてシミュレーションを実行する
請求項９記載の演算プログラム変換装置。
【請求項１１】
プログラム記憶部に記憶された演算プログラムを構成し、３以上の入力変数、演算子および出力変数からなる論理式を、２個の入力変数および１個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成するステップと、
前記論理式を、前記中間変数を得るための二項式および前記中間変数から前記出力変数を得る二項式を含む複数の二項式へ変換するステップと、
変換された前記複数の二項式により、前記プログラム記憶部に記憶されている元の前記論理式を更新するステップと、
前記プログラム記憶部に記憶されている論理式に含まれる前記出力変数、前記入力変数および前記中間変数のビット幅を決定するステップと、
前記出力変数のビット幅、前記入力変数のビット幅および前記中間変数のビット幅をビット幅記憶部に記憶させるステップと
を有する演算プログラム変換方法。
【請求項１２】
設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、
前記プログラム記憶部に３以上の入力変数を有する前記論理式が記憶されている場合、当該論理式を、２個の入力変数および１個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、
前記中間変数生成部により中間変数が生成された場合、前記論理式を、前記中間変数を得るための二項式および前記中間変数から前記出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、
前記式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、前記プログラム記憶部に記憶されている元の前記論理式を更新する式更新部と、
前記プログラム記憶部に記憶されている論理式の前記出力変数、前記入力変数および前記中間変数のビット幅を決定するビット幅決定部と、
前記出力変数のビット幅、前記入力変数のビット幅および前記中間変数のビット幅を記憶するビット幅記憶部と
をコンピュータに実現させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アルゴリズムモデルプログラムなどの演算プログラムを変換して、ハードウェアモデルプログラムを得ることができる演算プログラム変換装置、演算プログラム変換方法およびプログラムに関する。
【背景技術】
【０００２】
特許文献１は、有効桁数の減少を最小限に抑えながら、浮動小数点形式から固定小数点形式への変換ができる演算装置を開示する。
この演算装置は、記憶部に格納されるｋビットのデータを仮数部ｍビットおよび指数部ｎビットの浮動小数点形式のデータとして解釈し、ブロック内のデータの指数部の最大値ｒを検出する指数部最大値検出部を備える。
そして、演算装置は、ブロック内の各データを、指数部の最大値ｒと仮数部との組で表現される浮動小数点形式となるように変換し、変換後のデータの仮数部について演算処理部により演算処理を行う。
また、演算装置は、ブロック内のデータについての所定の演算処理を終了し外部に出力を行う前に、最大値ｒに基づいて、各データを固定小数点形式に変換する。
【０００３】
特許文献２は、回路規模を縮小させながらもビット復号率を向上させることができる固定小数点データ生成方法を開示する。
この方法では、浮動小数点データのうち最大となる浮動小数点データを検出し、浮動小数点データの指数部の値と前記最大となる浮動小数点データの指数部の値との差分を求める。
次に、この方法では、浮動小数点データの仮数部を差分だけシフトさせ、シフトさせた仮数部のうち所定のビット数を固定小数点データとして抽出する。
【０００４】
このようにハードウェア化された回路装置では、演算処理する各種の変数は、その変数の型が浮動小数点型であっても、固定小数点型の変数（ビット幅が固定化された変数）として演算処理がなされる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−４３０６７号公報
【特許文献２】特開２００２−１４９３９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ハードウェア回路の設計では、各種のＥＤＡ（Electronic Design Automation）ツールが用いられる。
ＥＤＡツールを用いた回路設計では、回路設計者は、設計する回路のハードウェアモデルをＥＤＡツールに入力する。このようなハードウェアモデルとしては、たとえばＲＴＬ（Register Transfer Language）モデルがある。
ハードウェアモデルが入力されると、ＥＤＡツールは、ハードウェアモデルからネットリストデータなどを生成する。
また、ネットリストデータから、たとえば集積回路内の配線パターンデータを自動生成でき、更には、その配線パターンデータを形成するための露光マスクを形成できる。この露光マスクを用いて製造することで、回路設計者が設計した回路を実現した回路装置が得られる。
【０００７】
しかしながら、ＲＴＬモデルなどのハードウェアモデルでは、設計する回路を、レジスタおよびトランジスタで記述する必要がある。または、トランジスタへの変換が容易な、二入力一出力の二項式を用いて記述する必要がある。
なお、二項式は、たとえば、ＧＵＩ（Graphical User Interface）用の二入力一出力の回路素子モジュールにより記述することができる。
【０００８】
このため、ハードウェアモデルをＥＤＡツールに入力する場合、回路設計者は、レジスタのビット数などを具体的に記述する必要がある。
その結果、回路設計者は、ハードウェアモデルをＥＤＡツールに入力する前に、レジスタに格納される各変数のビット数（ビット幅）を決定する必要がある。
そして、変数のビット幅を決定することは、変数のビット精度を固定化し、変数を固定小数点化することを意味する。
【０００９】
そして、変数のビット精度は、実際の製造現場では、回路設計者が過去の経験などを頼りに人手により決定している。
そのため、変数のビット精度が、設計する回路毎に最適化されているとは言いきれない。経験豊かな回路設計者であれば変数のビット精度を最適化できると考えられるが、たとえば回路設計の経験が無い者が変数のビット精度を最適化することは困難である。
【００１０】
その結果、変数のビット精度が必要な精度より高い場合、その余分なビット精度の変数を扱う二項式を実現する回路の規模が大きくなる。
また、その二項式の後段の二項式を実現する回路も、余分なビット精度を有する入力変数が入力されることになるので、設計する回路の規模は、必要な精度に最適化された場合の回路規模より格段に大きくなってしまう。
【００１１】
また、変数のビット精度が必要な精度より低い場合、その不足するビット精度の変数を扱う二項式において丸め誤差が発生する。
また、その二項式の後段の二項式を実現する回路も、丸め誤差が発生した入力変数が入力されることになるので、後段の回路自体が最適化されていたとしても、その誤差を増大させることになる。その結果、出力変数には許容誤差以上の誤差が発生してしまう。
【００１２】
このように各二項式において変数のビット精度が最適化されていないと、種々の問題が生じる。
【００１３】
この他にも、ＥＤＡツールに入力されたハードウェアモデルにおいて、複数の二項式は、回路設計者が決定して入力した順番に並んでいる。
そして、回路設計者が二項式の演算順序を十分に検討しきれなかった場合、各二項式の変数のビット精度が最適化されていたとしても、一部の二項式が必要以上のビット精度で演算していることがある。
このように出力変数の許容誤差に影響が無い場合であっても、必要以上のビット精度で演算する二項式が部分的に存在することにより、設計する回路の規模が、演算順を最適化した場合の回路規模より大きくなってしまう。
【００１４】
このような状況に鑑み、本発明者は独自に鋭意研究を重ねた。
【００１５】
その結果、本発明者は、ハードウェアモデルプログラムを設計する前に、回路設計者がハードウェアモデルプログラムをさらに抽象化した上位の演算プログラムを用いて回路の論理検証していることを突き止めた。
このようにハードウェアモデルプログラムを設計する前に作成される上位の演算プログラムとしては、たとえば設計する回路の入出力関係を記述したアルゴリズムモデルプログラムがある。
【００１６】
また、本発明者は、このアルゴリズムモデルプログラムなどの演算プログラムを変換することで、ハードウェアモデルプログラムとして利用可能な、二入力一出力の二項式からなる演算プログラムを得ることができることを見出した。
また、本発明者は、演算処理により、その二項式からなる演算プログラムに含まれる変数（入力変数および出力変数）のビット精度として、設計する回路に適したビット精度を得ることができることを見出した。
【００１７】
本発明は、アルゴリズムモデルプログラムなどの演算プログラムから、ハードウェアモデルプログラムを得ることができる演算プログラム変換装置、演算プログラム変換方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明の第一の観点の演算プログラム変換装置は、設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、プログラム記憶部に３以上の入力変数を有する論理式が記憶されている場合、当該論理式を、２個の入力変数および１個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、中間変数生成部により中間変数が生成された場合、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、プログラム記憶部に記憶されている元の論理式を更新する式更新部と、プログラム記憶部に記憶されている論理式の出力変数、入力変数および中間変数のビット幅を決定するビット幅決定部と、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅を記憶するビット幅記憶部とを有する。
【００１９】
本発明の第二の観点の演算プログラム変換方法は、プログラム記憶部に記憶された演算プログラムを構成し、３以上の入力変数、演算子および出力変数からなる論理式を、２個の入力変数および１個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成するステップと、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換するステップと、変換された複数の二項式により、プログラム記憶部に記憶されている元の論理式を更新するステップと、プログラム記憶部に記憶されている論理式に含まれる出力変数、入力変数および中間変数のビット幅を決定するステップと、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅をビット幅記憶部に記憶させるステップとを有する。
【００２０】
本発明の第三の観点のプログラムは、設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、プログラム記憶部に３以上の入力変数を有する論理式が記憶されている場合、当該論理式を、２個の入力変数および１個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、中間変数生成部により中間変数が生成された場合、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、プログラム記憶部に記憶されている元の論理式を更新する式更新部と、プログラム記憶部に記憶されている論理式の出力変数、入力変数および中間変数のビット幅を決定するビット幅決定部と、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅を記憶するビット幅記憶部とをコンピュータに実現させる。
【００２１】
第一から第三の観点では、アルゴリズムモデルプログラムなどの演算プログラムの複数の論理式は二項式へ変換され、プログラム記憶部に二項式の演算プログラムとして記憶される。
また、二項式の演算プログラムの出力変数のビット幅、入力変数のビット幅および中間変数のビット幅は、ビット幅決定部により決定され、ビット幅記憶部に記憶される。
したがって、プログラム記憶部に記憶された二項式の演算プログラムは、それに含まれるすべての変数のビット幅が固定化されており、ハードウェアモデルプログラムとして利用できる。
【発明の効果】
【００２２】
本発明では、アルゴリズムモデルプログラムなどの演算プログラムから、ハードウェアモデルプログラムとして利用可能な二項式の演算プログラムを得ることができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施形態に係る演算プログラム変換装置を適用したハードウェアモデル生成装置の構成図である。
【図２】図１中のビット精度リスト記憶部に記憶されているビット精度リストの一例である。
【図３】図１のハードウェアモデル生成装置を実現するために用いるコンピュータ装置の構成例である。
【図４】図１のハードウェアモデル生成装置でのハードウェアモデル二項式モデル生成処理の流れを示すフローチャートである。
【図５】図１のハードウェアモデル生成装置での変数の固定化処理の流れを示すフローチャートである。
【図６】図１のプログラム記憶部に記憶されるアルゴリズムモデルプログラムの一例である。
【図７】図１のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である（乗除算の出力変数を固定化した状態）。
【図８】図１のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である（乗除算の入力変数を固定化した状態）。
【図９】図１のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である（乗除算演算を二項式化した状態）。
【図１０】図１のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である（乗除算のための中間変数を固定化した状態）。
【図１１】図１のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である（加減算演算を二項式化した状態）。
【図１２】図１のプログラム記憶部に記憶される二項式モデルプログラム（ハードウェアモデルプログラム）の一例である。
【発明を実施するための形態】
【００２４】
以下、本発明の実施形態を図面に関連付けて説明する。なお、説明は、以下の順番で行う。
１．演算プログラム変換装置を適用したハードウェアモデル生成装置の構成
２．アルゴリズムモデルプログラムから二項式で記述されたハードウェアモデルプログラムを生成する動作
【００２５】
［１．ハードウェアモデル生成装置の構成］
図１は、本発明の実施形態に係る演算プログラム変換装置を適用したハードウェアモデル生成装置を示す装置構成図である。
【００２６】
ハードウェアモデル生成装置１は、設計する回路の入出力関係が入出力記述式で記述されたアルゴリズムモデルプログラムから、複数の二項式で記述されてハードウェアモデルプログラムとして利用可能な二項式モデルプログラムを生成する。
また、ハードウェアモデル生成装置１は、二項式モデルプログラムの二項式に含まれる複数の変数のビット精度の情報を生成する。
このようにハードウェアモデル生成装置１は、回路モデルプログラム中の論理式を二項式化し、且つその二項式の変数を固定変数化する。
そして、この二項式モデルプログラムは、ＲＴＬモデルのプログラムと同様に、ネットリストなどを生成するためのハードウェアモデルのプログラムとして利用することが可能になる。
以下、アルゴリズムモデルプログラムを単にアルゴリズムモデルといい、二項式モデルプログラムを単に二項式モデルといい、回路モデルプログラムを回路モデルという。
【００２７】
後に説明する図６に、アルゴリズムモデルの一例を示す。
図６のアルゴリズムモデルは、３個の入出力記述式を有する。
入出力記述式は、設計する回路の出力データまたは出力信号毎に互いに独立した論理式である。
また、入出力記述式には、出力データまたは出力信号を得るために使用する入力データまたは入力信号が変数として記述される。
【００２８】
入出力記述式は、１個の出力変数、複数の入力変数および複数の演算子で構成される。
出力変数は、出力データまたは出力信号に対応する。
入力変数は、出力データまたは出力信号を得るために使用する入力データまたは入力信号に対応する。
演算子は、加減乗除などの演算記号であり、複数の入力データまたは複数の入力信号の演算処理を示す。
そして、出力変数は、入出力記述式の左辺に記述される。入力変数および演算子は、入出力記述式の右辺に記述される。１個の入出力記述式には、３つ以上の入力変数を記述してもよい。
なお、ハードウェアモデル生成装置１において、入出力記述式の変数は、浮動小数点型の変数として扱われる。
【００２９】
後に説明する図１２に、二項式モデルの一例を示す。
図１２の二項式モデルは、９個の二項式を有する。
二項式は、入力変数、演算子および出力変数で構成される。
二項式を二入力一出力の機能モジュールとして捉えた場合、入力変数は機能モジュールの入力データまたは入力信号に対応し、出力変数は機能モジュールの出力データまたは出力信号に対応し、演算子は機能モジュールでの２個の入力変数同士の演算処理を示す。
そして、出力変数は、二項式の左辺に記述される。入力変数および演算子は、二項式の右辺に記述される。１個の二項式には、２個の入力変数を記述することができる。
なお、ハードウェアモデル生成装置１において、二項式モデルの変数は、最終的には固定小数点型の変数になる。
【００３０】
なお、二項式モデルは、たとえばＲＴＬモデルと同等な記述レベルのモデルであればよい。すなわち、二項式モデルは、複数の二項式で記述されたモデルであって、且つ、二項式の入力変数、演算子および出力変数のビット幅が確定したモデルであればよい。
【００３１】
また、二項式モデルを得るために使用するアルゴリズムモデルは、上述した回路の入出力を出力毎の論理式で記述した入出力モデル以外のモデルであってもよい。
たとえばアルゴリズムモデルの各論理式の出力変数の許容誤差と、入力変数の最大入力値および最小入力値が得られているモデルであれば、アルゴリズムモデルとして使用できる。
【００３２】
図１のハードウェアモデル生成装置１は、入力部１１、プログラム記憶部１２、ビット（Bit）精度リスト記憶部１３、式選択部１４、変数固定化部１５、中間変数生成部１６、演算順序判定部１７、二項式生成部１８、および式更新部１９を有する。
【００３３】
入力部１１は、たとえばキーボード、ポインティングデバイスを有する。入力部１１は、キーボード、ポインティングデバイスに対する操作に応じた入力データを生成する。ユーザは、入力部１１を用いてハードウェアモデル生成装置１にアルゴリズムモデルなどを入力する。
なお、入力部１１は、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの着脱可能な記録媒体を読み取るデバイスを有し、記録媒体に予め記録されたアルゴリズムモデルなどを読み取ってもよい。
【００３４】
プログラム記憶部１２は、モデル記述式で記述された回路モデルを記憶する。
プログラム記憶部１２は、最初には、図６に例示するようなアルゴリズムモデルを記憶する。
そして、二項式モデル生成処理により、プログラム記憶部１２は、最後には、図１２に例示するような二項式モデルを記憶する。
また、プログラム記憶部１２は、アルゴリズムモデルから二項式モデルへ変換される途中の中間モデルも記憶する。中間モデルは、図７〜図１１に例示されている。
【００３５】
そして、アルゴリズムモデルを記憶している場合、プログラム記憶部１２は、アルゴリズムモデルの複数の入出力記述式（論理式）をモデル記述式として記憶する。
二項式モデルを記憶している場合、プログラム記憶部１２は、二項式モデルの複数の二項式をモデル記述式として記憶する。
【００３６】
ビット精度リスト記憶部１３は、ビット精度リスト２１を記憶する。
図２に、ビット精度リスト２１のリスト構造例を示す。
図２のビット精度リスト２１は、プログラム記憶部１２に記憶されている変数（モデル記述式の入力変数、出力変数および後述する中間変数）毎の複数のレコードで構成される。
そして、ビット精度リスト記憶部１３は、たとえば、最初は図６に含まれるすべての変数を記憶し、最後には図１２に含まれるすべての変数を記憶する。
【００３７】
ビット精度リスト２１の各レコード（図２の各行）には、変数名、変数の値の範囲、変数の許容誤差、変数の整数部のビット数、および変数の少数部のビット数が格納される。
なお、変数の値の範囲および変数の許容誤差は、たとえば入力部１１から入力すればよい。
また、整数部のビット数と少数部のビット数との合計ビット数が、変数のビット幅（ビット精度）になる。
【００３８】
なお、ビット精度リスト２１に整数部のビット数および少数部のビット数が記憶されている場合、変数は、固定小数点型の変数である。
逆に、ビット精度リスト２１に整数部のビット数および少数部のビット数の少なくとも一方が記憶されていない場合、変数は、浮動小数点型の変数である。
【００３９】
また、二項式モデルの生成処理前には、ビット精度リスト２１には、図６中のすべての変数が記憶される。二項式モデルの生成処理後には、ビット精度リスト２１には、図１２中のすべての変数が記憶される。
【００４０】
式選択部１４は、モデル記述式の二項式化の順番、および変数の固定小数点化の順番を決定する。式選択部１４は、四則演算の種類、および各変数のビット精度（ビット幅）に基づいて、最終的に丸め誤差の影響が小さくなるように決定する。
【００４１】
なお、丸め誤差は、たとえば乗除算の演算をする場合、または入力変数のビット数を減らして演算する場合に生じやすい。
これは、ハードウェア化においては回路の実装面積が有限であるため、常に画質などの信号品質と実装面積とのトレードオフが発生するからである。
また、演算後にビット幅が大きくなる演算処理に対して大幅なビット削減を行うことで、その演算処理およびそれ以降の演算処理に必要となる実装面積を効果的に抑えることができるからである。
そして、このようなビット幅の削減処理により、丸め誤差が発生する。
【００４２】
式選択部１４は、この性質を用いて、乗除算に係る変数またはビット幅の大きい変数に着目し、それらの変数から二項式化および固定小数点化を決定する。式選択部１４は、具体的には、後述する図４のフローチャートを実行する。
以下、式選択部１４が取得しているモデル記述式を、取得モデル記述式（取得論理式）と呼ぶ。
【００４３】
図４のフローチャートにおいて、式選択部１４は、プログラム記憶部１２に記憶されている回路モデルの先頭から順番に、取得モデル記述式を１行ずつ取得する。
次に、式選択部１４は、取得モデル記述式を取得する度に、プログラム記憶部１２に記憶された回路モデルおよびビット精度リスト記憶部１３に記憶されたビット精度の情報を元に着目する二項演算（二項演算子）および着目する変数を決定する。
次に、式選択部１４は、着目する二項演算の二項式化および着目する変数の固定小数点化（ビット幅を決定すること）を実行させ、その結果をプログラム記憶部１２およびビット精度リスト記憶部１３に記憶させる。
そして、式選択部１４は、プログラム記憶部１２に記憶されている回路モデルのすべてのモデル記述式が二項式化され、且つすべての変数が固定小数点化されるまで、これらの処理を繰り返す。
【００４４】
これにより、式選択部１４は、概略、以下の処理を順番に行うことになる。
１．  乗除算を行っている論理式の出力変数群に着目し、これらを固定化する。
２．  乗除算される入力変数群に着目し、これらを固定化する。
３．  乗除算を行っている論理式の入力変数群に着目し、演算順序を決定する。
４．  乗除算した値を格納するために生成した中間変数群に着目し、これらを固定化する。
５．  加減算を行っている論理式の入力変数群に着目し、演算順序を決定する。
６．  加減算した値を格納するために生成した中間変数群に着目し、これらを固定化する。
【００４５】
変数固定化部１５は、取得モデル記述式の着目変数のビット幅を決定する。具体的には、変数固定化部１５は、図５の処理を繰り返し実行する。
図５の処理では、変数固定化部１５は、まず、許容誤差範囲内で変数群のビット幅を削減し、許容誤差を超えた場合は最終段の出力誤差が一番大きくなる変数を特定し、この変数からビット幅を固定する。許容誤差の指定以外は、すべて自動で処理される。
このように最も出力誤差が大きくなる変数からビット幅を確定することにより、変数固定化部１５は、丸め誤差の影響を最小限に抑えながら、変数を必要最小限なビット幅に固定化できる。
また、前段で着目する変数を特定し、この変数のみを固定小数点へ変換することにより、変数固定化部１５は、他の演算の影響を受けずに且つ固定小数点への変換を線形的な処理量で決めることができる。
そして、図５の処理を繰り返し実行することで、変数固定化部１５は、最終的には、取得モデル記述式の出力変数のビット幅、入力変数のビット幅、さらには後述する中間変数のビット幅を決定する。
以下、変数固定化部１５により処理された変数を固定化された変数と呼ぶ。
【００４６】
中間変数生成部１６は、取得モデル記述式に含まれる演算のうち、着目する二項演算を二項式へ変換するために使用する中間変数を生成する。
生成する中間変数の個数は、たとえば取得モデル記述式に着目する二項演算（二項演算子）しか含まれていない場合には、着目する二項演算子より１個少ない個数であればよい。
また、たとえば取得モデル記述式に着目する二項演算（二項演算子）以外の演算子が含まれている場合には、着目する二項演算子と同数であればよい。
なお、中間変数生成部１６により生成された中間変数は、ビット幅が固定化されていないので、浮動小数点型の変数である。
【００４７】
演算順序判定部１７は、取得モデル記述式を二項式などの複数の論理式へ変換する場合の演算順序を判定する。演算順序判定部１７は、固定化した変数（変数群）のビット幅および取得モデル記述式を元に、丸め誤差が小さくなる演算順番を判定する。
なお、丸め誤差には、乗除算において有効桁数を削除することにより発生する丸め誤差、加減算において演算するビットを削除することにより発生する丸め誤差などがある。
【００４８】
演算順序判定部１７は、たとえば取得モデル記述式に固定化された複数の変数が含まれている場合、ビット幅が少ない変数を演算した後にビット幅が多い変数を演算するように演算順序を判定する。
【００４９】
この他にもたとえば、演算順序判定部１７は、取得モデル記述式に既に固定化された固定小数点型の変数が含まれている場合、固定化されていない浮動小数点型の変数を演算した後に固定化された変数を演算するように演算順序を判定する。
これは、この実施形態での後述する処理では、１個の取得モデル記述式に固定小数点型の変数と浮動小数点型の変数とが混在する場合があり、この場合の浮動小数点型の変数は乗除算されない変数であって、丸め誤差の影響が少ないからである。
また、丸め誤差の影響が少ない演算を先に処理することにより、丸め誤差が発生した値の演算回数を減らして、丸め誤差の増大を抑えるためである。
【００５０】
また、演算順序判定部１７は、これらの判定結果に基づいて、複数の二項式（取得モデル記述式の出力変数を演算する式、および中間変数を演算する二項式）に対する、取得モデル記述式に含まれる複数の入力変数の割り当てを決定する。
たとえば取得モデル記述式に３個の入力変数がある場合、演算順序判定部１７は、演算順序で先に演算する入力変数と判断した２個の入力変数を中間変数の演算に割り当て、後に演算する入力変数と判断した残りの変数および中間変数を出力変数の演算に割り当てる。
【００５１】
二項式生成部１８は、演算順序判定部１７の複数の変数の割り当てに基づいて、取得モデル記述式から、少なくとも１個の二項式を含む複数の論理式を生成する。
具体的には、二項式生成部１８は、着目する二項演算を二項式化し、且つその他の演算から取得モデル記述式の出力変数を得る論理式を得る。
なお、この出力変数を得る論理式が二項式になることもある。
たとえば３個の入力変数を有する取得モデル記述式の場合、取得モデル記述式の２個の入力変数から中間変数を得る第一の二項式と、取得モデル記述式の残りの入力変数および中間変数から出力変数を得る第二の二項式とが生成される。
そして、中間変数は、第一の二項式において出力変数となり、第二の二項式において入力変数となる。
【００５２】
式更新部１９は、プログラム記憶部１２に記憶されている取得モデル記述式を、二項式生成部１８が生成した複数の二項式で更新する。
そして、プログラム記憶部１２に記憶されている取得モデル記述式が順番に複数の二項式で更新されることにより、プログラム記憶部１２に記憶されていたアルゴリズムモデルは、複数の二項式で記述された二項式モデルへ変換されることになる。
【００５３】
なお、図１のハードウェアモデル生成装置１は、たとえば図３のコンピュータ装置３１を用いて実現することができる。コンピュータ装置３１は、入力部１１、表示部３３、記憶部３４、ＣＰＵ（Central Processing Unit）３５およびこれらを接続するシステムバス３６を有する。
【００５４】
記憶部３４には、ハードウェアモデル生成装置１をコンピュータ装置３１に実現するためのプログラムが記憶される。
そして、ＣＰＵ５３５がプログラム３７を実行することで、コンピュータ装置３１にハードウェアモデル生成装置１が実現される。また、記憶部３４は、プログラム記憶部１２およびビット精度リスト記憶部１３として機能する。
【００５５】
また、図３中のプログラム３７は、コンピュータ読み取り可能なプログラムであればよく、たとえばＣＤ−ＲＯＭなどの記録媒体に記録されていたプログラムであっても、インターネット等の伝送媒体を介してサーバからダウンロードしたプログラムであってもよい。
【００５６】
［２．ハードウェアモデル生成装置の動作］
次に、図１のハードウェアモデル生成装置１の動作を説明する。
【００５７】
図４に、アルゴリズムモデルから、ハードウェアモデルとして利用可能な二項式モデルを得るための全体的な処理の流れを示す。図４のフローチャートは、主に式選択部１４により実行される。
また、図５に、入力変数の固定化処理の流れを示す。図５のフローチャートは、変数固定化部１５により実行される。
【００５８】
また、図６〜図１２に、図１のハードウェアモデル生成装置１において変換される回路モデルの一例を示す。
図６はアルゴリズムモデルであり、図１２はハードウェアモデルとして利用可能な二項式モデルである。また、図７〜図１１は、中間モデルである。
以下の説明では、この図６〜図１２の例を参照しながら、図４、図５の処理を説明する。なお、図６〜図１２において、固定化された固定小数点型の変数は大文字で記載され、固定化されていない浮動小数点型の変数は小文字で記載されている。
【００５９】
図４に示すように、ユーザは、ハードウェアモデル生成装置１の入力部１１を操作して、アルゴリズムモデルの複数の入出力記述式と、入出力記述式に含まれる入力変数および出力変数の入出力条件を入力する（ステップＳＴ１）。
これにより、入力部１１は、入力データを生成する。
【００６０】
そして、プログラム記憶部１２には、たとえば図６のアルゴリズムモデルが記憶される。図６のアルゴリズムモデルは、３個の入出力記述式（モデル記述式）が記憶される。
【００６１】
また、ビット精度リスト記憶部１３には、図２のビット精度リスト２１が記憶される。ビット精度リスト２１には、図６中の１５個の変数の入出力条件が登録される。
また、ビット精度リスト記憶部１３には、入出力条件として、たとえば入力変数の入力値の範囲、および出力変数の許容誤差が登録される。
【００６２】
プログラム記憶部１２にアルゴリズムモデルが記憶され、且つビット精度リスト記憶部１３にビット精度リスト２１が記憶されると、ハードウェアモデル生成装置１は、アルゴリズムモデルから、変数のビット精度を有する二項式化モデルを生成する処理を開始する。
【００６３】
二項式化モデルの生成処理では、図４に示すように、４回のループ処理が実行される。
そして、１番目のループ処理では、乗除算を含むモデル記述式の出力変数の固定化、乗除算に係る入力変数の固定化、乗除算の二項式化を実行する。
そのため、式選択部１４は、まず、プログラム記憶部１２に記憶されているモデル記述式を取得する（ステップＳＴ１１）。式選択部１４は、アルゴリズムモデルの先頭に記述されているモデル記述式を取得する。
図６の例では、式選択部１４は、「ｘ＝ａ＊ｂ＊ｃ」を最初に取得する。「＊」は乗算子である。
【００６４】
モデル記述式を取得した後、式選択部１４は、そのモデル記述式に所定の着目変数、所定の着目演算子の有無を判断する。
１番目のループ処理では、式選択部１４は、乗算子（＊）および除算子（「÷」または「／」）を着目演算子として、取得モデル記述式に着目演算子の有無を判断する（ステップＳＴ１２）。「ｘ＝ａ＊ｂ＊ｃ」には、乗算子が含まれている。
【００６５】
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部１４は、後述するステップＳＴ１６を実行する。
【００６６】
また、取得モデル記述式に着目演算子が含まれている場合、式選択部１４は、その取得モデル記述式の左辺の出力変数を着目変数として抽出し、変数固定化部１５へ着目変数の固定化処理を指示する（ステップＳＴ１３）。
「ｘ＝ａ＊ｂ＊ｃ」の場合、出力変数「ｘ」が着目変数として抽出される。
【００６７】
変数固定化部１５は、取得モデル記述式、着目演算子および着目変数から、着目変数（ここでは乗除算を含むモデル記述式の出力変数）のビット幅を決定する。変数固定化部１５は、着目変数のビット幅を決定する。
【００６８】
モデル記述式の出力変数を固定化する場合、変数固定化部１５は、まず、取得モデル記述式のシミュレーションを実行し、出力変数の最大値（絶対値）を求める。これにより、取得モデル記述式の出力変数の整数部が決定される。
ビット精度リスト記憶部１３は、この整数部のビット数を記憶する。
【００６９】
次に、変数固定化部１５は、出力変数の許容誤差よりも小さな値で変化するように、出力変数の小数部のビット数を決定する。
ビット精度リスト記憶部１３は、この少数部のビット数を記憶する。
【００７０】
以上の処理により、変数固定化部１５は、着目変数のビット幅を決定する。
そして、ビット精度リスト記憶部１３は、生成された着目変数（出力変数）のビット幅を記憶する。
これにより、取得モデル記述式の出力変数のビット精度が決定する。
図７に示すように、浮動小数点型の出力変数「ｘ」が固定小数点型の出力変数「Ｘ」へ変換される。
【００７１】
着目変数（出力変数）の固定化処理を指示した後、図４に示すように、式選択部１４は、さらに、乗除算される入力変数を着目変数として抽出し、変数固定化部１５へ着目変数の固定化処理を指示する（ステップＳＴ１４）。
「ｘ＝ａ＊ｂ＊ｃ」の場合、入力変数「ａ」、「ｂ」および「ｃ」が着目変数として抽出される。
【００７２】
変数固定化部１５は、図５の処理を実行することで、着目変数（入力変数）を固定化する。
具体的には、変数固定化部１５は、まず、取得モデル記述式のシミュレーションを実行し（ステップＳＴ５１）、各入力変数の最大値（絶対値）を求める（ステップＳＴ５２）。
これにより、取得モデル記述式に含まれるすべての入力変数の整数部が決定される。
ビット精度リスト記憶部１３は、この整数部のビット数を記憶する。
なお、この段階では、これらの入力変数は、浮動小数点型の変数として計算される。
【００７３】
次に、変数固定化部１５は、着目変数（入力変数）の小数部のビット数を得るために、まず、取得モデル記述式に含まれるすべての着目変数に対して、丸め誤差が発生しない十分なビット数の小数部を付加する（ステップＳＴ５３）。
【００７４】
その後、変数固定化部１５は、着目変数（入力変数）の小数部のビット数を同時に同じビット数（たとえば１ビット）削減し（ステップＳＴ５４）、シミュレーションを実行する（ステップＳＴ５５）。このとき、着目変数以外の未固定化変数は、浮動小数点型の変数として計算する。
また、変数固定化部１５は、出力変数の誤差が許容誤差以内であるか否かを判断する（ステップＳＴ５６）。
【００７５】
そして、出力変数の誤差が許容誤差以内である場合には、変数固定化部１５は、その誤差が許容誤差を超えるまで、ビット数削減処理（ステップＳＴ５４）およびシミュレーション（ステップＳＴ５５）を繰り返す。
【００７６】
また、出力変数の誤差が許容誤差以内でなくなると、変数固定化部１５は、１個の着目変数に１ビット付加し（ステップＳＴ５７）、シミュレーションを実行する（ステップＳＴ５８）。このとき、着目変数以外の未固定化変数は、浮動小数点型の変数として計算する。
変数固定化部１５は、各着目変数について同様のシミュレーションを実行する（ステップＳＴ５９）。
着目する複数の入力変数のビット数を増やしたこれらのシミュレーション結果から、変数固定化部１５は、出力変数の誤差が最大となる入力変数を特定する（ステップＳＴ６０）。
そして、変数固定化部１５は、この誤差が最大となる入力変数の小数部のビット数を、この時点のビット数に固定する（ステップＳＴ６１）。
【００７７】
また、変数固定化部１５は、対象となる着目変数が無くなるまで、ステップＳＴ５７〜ＳＴ６１を繰り返す（ステップＳＴ６２）。
なお、取得モデル記述式に含まれる２つ目以降の入力変数を固定化する場合、先に固定化した入力変数には、固定化したビット幅を使用する。
【００７８】
変数固定化部１５は、取得モデル記述式、着目演算子、着目変数、および既に演算した出力変数のビット幅から、着目変数（ここでは乗除算される入力変数）のビット幅を決定する。
また、ビット精度リスト記憶部１３は、生成された着目変数のビット幅を記憶する。
これにより、取得モデル記述式において乗除算される入力変数のビット精度が決定する。
図８に示すように、浮動小数点型の入力変数「ａ」、「ｂ」および「ｃ」が固定小数点型の入力変数「Ａ」、「Ｂ」および「Ｃ」へ変換される。
【００７９】
出力変数および乗除算される入力変数の固定化処理を指示した後、式選択部１４は、中間変数生成部１６、演算順序判定部１７および二項式生成部１８に、着目演算子の演算処理の二項式化処理を指示する（ステップＳＴ１５）。
「ｘ＝ａ＊ｂ＊ｃ」の場合、「ｘ＝ａ＊ｂ＊ｃ」の全体が二項式化処理の対象になる。
【００８０】
なお、式選択部１４は、たとえば、着目入力変数が３個以上である場合、または取得モデル記述式が着目入力変数を含み且つ入力変数の総数が３個以上である場合に、二項式化処理を指示すればよい。
【００８１】
中間変数生成部１６は、取得モデル記述式中の演算子に応じた数の中間変数を生成する。
図９の「Ｘ＝Ａ＊Ｂ＊Ｃ」を二項式化する場合には、１個の中間変数「ｔｍｐｘ１」が生成されている。
ビット精度リスト記憶部１３は、中間変数生成部１６が生成した中間変数を記憶する。
【００８２】
演算順序判定部１７は、丸め誤差が少なくなる演算順序を判定し、取得モデル記述式に含まれる複数の変数の割り当てを決定する。
たとえば、固定化された入力変数「Ａ」、「Ｂ」および「Ｃ」のビット幅が「Ｂ＞Ａ＞Ｃ」である場合、演算順序判定部１７は、中間変数ｔｍｐｘ１の論理式に入力変数ＡおよびＣを割り当て、出力変数Ｘの論理式に入力変数Ｂおよび中間変数ｔｍｐｘ１を割り当てる。
【００８３】
二項式生成部１８は、演算順序判定部１７が決定した複数の変数の割り当てに基づいて、取得モデル記述式から、少なくとも１個の二項式を含む複数の論理式を生成する。
たとえば中間変数ｔｍｐｘ１の論理式として「ｔｍｐｘ１＝Ａ＊Ｃ」を生成し、出力変数Ｘの論理式として「Ｘ＝Ｂ＊ｔｍｐｘ１」を生成する。
【００８４】
そして、式更新部１９は、プログラム記憶部１２に記憶されている取得モデル記述式を、二項式生成部１８が生成した複数の論理式で更新する。
これにより、図９に示すように、「ｔｍｐｘ１＝Ａ＊Ｃ」の二項式と、「Ｘ＝Ｂ＊ｔｍｐｘ１」の二項式とが、「ｘ＝ａ＊ｂ＊ｃ」の換わりにプログラム記憶部１２に記憶される。
【００８５】
取得モデル記述式の二項式化処理を指示した後、式選択部１４は、現在取得しているモデル記述式がプログラム記憶部１２に記憶されている最後の取得モデル記述式であるか否かを判断する（ステップＳＴ１６）。
「ｘ＝ａ＊ｂ＊ｃ」は回路モデルの最初のモデル記述式であるので、この場合には、最後の取得モデル記述式ではないと判断する。
【００８６】
そして、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式でない場合、式選択部１４は、プログラム記憶部１２の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した１番目のループ処理を実行する。
【００８７】
これにより、乗算子「＊」を含む図６の１番目のモデル記述式は、図９に示すように、２個の論理式へ変換される。
また、図６の３番目のモデル記述式「ｚ＝ｇ＊ｈ＋ｉ＊ｊ＋ｋ＊ｌ」は、図９に示すように、３個の論理式「ｔｍｐｚ１＝Ｇ＊Ｈ」、「ｔｍｐｚ２＝Ｉ＊Ｊ」および「Ｚ＝ｔｍｐｚ１＋ｔｍｐｚ２＋ｋ＋ｌ」へ変換される。
また、ビット精度リスト２１には、３個の中間変数「ｔｍｐｘ１」、「ｔｍｐｚ１」、「ｔｍｐｚ２」が追加される。
【００８８】
また、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式である場合、式選択部１４は、１番目のループ処理を終えて、２番目のループ処理を開始する。
【００８９】
２番目のループ処理では、１番目のループ処理で生成した中間変数（乗除算を二項式化するための中間変数）の固定化処理を実行する。
図９では、「ｔｍｐｘ１」、「ｔｍｐｚ１」および「ｔｍｐｚ２」の３個の中間変数が生成されている。
したがって、１番目のループ処理および２番目のループ処理により、乗除算は二項式化され、且つその乗除算の二項式に含まれる入力変数および出力変数（中間変数を含む）は固定化される。
【００９０】
このために式選択部１４は、まず、プログラム記憶部１２の先頭に記憶されているモデル記述式を取得する（ステップＳＴ２１）。
モデル記述式を取得した後、式選択部１４は、そのモデル記述式に所定の着目演算子の有無を判断する。
２番目のループ処理では、式選択部１４は、乗算子および除算子を着目演算子として、取得モデル記述式に着目演算子の有無を判断する（ステップＳＴ２２）。
【００９１】
図９の場合、式選択部１４は、たとえば、着目演算子（固定化されていない中間変数）が入力変数として記述されている論理式である２番目の論理式、６番目の論理式を取得した場合に、取得モデル記述式に着目演算子が有ると判断する。
また、それ以外の論理式については、式選択部１４は、着目演算子が無いと判断する。
【００９２】
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部１４は、後述するステップＳＴ２４を実行する。
【００９３】
また、取得モデル記述式に着目演算子が含まれている場合、式選択部１４は、その取得モデル記述式の右辺の固定化されていない入力変数を着目変数として抽出し、変数固定化部１５へ着目変数の固定化処理を指示する（ステップＳＴ２３）。
【００９４】
図９の場合、変数固定化部１５は、たとえば、取得モデル記述式、着目演算子および着目変数から、着目変数（ここでは入力変数）のビット幅を決定する。
また、ビット精度リスト記憶部１３は、生成された着目変数（入力変数）のビット幅を記憶する。
これにより、取得モデル記述式の入力変数のビット精度が決定する。
【００９５】
着目変数（出力変数）の固定化処理を指示した後、式選択部１４は、現在取得しているモデル記述式がプログラム記憶部１２に記憶されている最後の取得モデル記述式であるか否かを判断する（ステップＳＴ２４）。
【００９６】
そして、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式でない場合、式選択部１４は、プログラム記憶部１２の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した２番目のループ処理を実行する。
【００９７】
この２番目のループ処理により、図１０に示すように、１番目のループ処理で生成された３個の中間変数「ｔｍｐｘ１」、「ｔｍｐｚ１」および「ｔｍｐｚ２」が固定化されて、「ＴＭＰＸ１」、「ＴＭＰＺ１」および「ＴＭＰＺ２」になる。
【００９８】
また、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式である場合、式選択部１４は、２番目のループ処理を終えて、３番目のループ処理を開始する。
【００９９】
３番目のループ処理では、加減算の二項式化を実行する。
そのため、式選択部１４は、まず、プログラム記憶部１２に記憶されているモデル記述式を取得する（ステップＳＴ３１）。
式選択部１４は、アルゴリズムモデルの先頭に記述されているモデル記述式を取得する。
【０１００】
モデル記述式を取得した後、式選択部１４は、そのモデル記述式に所定の着目変数、所定の着目演算子の有無を判断する。
３番目のループ処理では、式選択部１４は、加算子および減算子を着目演算子として、取得モデル記述式に着目演算子の有無を判断する（ステップＳＴ３２）。
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部１４は、後述するステップＳＴ３４を実行する。
【０１０１】
取得モデル記述式に着目演算子が含まれている場合、式選択部１４は、中間変数生成部１６、演算順序判定部１７および二項式生成部１８に、着目演算子の演算処理の二項式化処理を指示する（ステップＳＴ３３）。
【０１０２】
中間変数生成部１６は、取得モデル記述式に含まれる着目演算子より１つ少ない数の中間変数を生成する。
ビット精度リスト記憶部１３には、中間変数生成部１６が生成した中間変数が追加される。
【０１０３】
演算順序判定部１７は、丸め誤差が少なくなる演算順序を判定し、取得モデル記述式に取得モデル記述式に含まれる複数の変数の割り当てを決定する。
たとえば、固定化された入力変数と固定化されていない入力変数とがあった場合、固定化された入力変数を、固定化されていない入力変数より後に演算するように割り当てる。
この他にもたとえば、固定化された複数の入力変数がある場合、ビット幅が多い入力変数を、ビット幅が少ない入力変数より後に演算するように割り当てる。
これらの処理により、乗除算による丸め誤差が複数の演算で伝播して増大してしまう可能性を減らすことができる。
【０１０４】
二項式生成部１８は、演算順序判定部１７が決定した複数の変数の割り当てに基づいて、取得モデル記述式から、少なくとも１個の二項式を含む複数の論理式を生成する。
そして、式更新部１９は、プログラム記憶部１２に記憶されている取得モデル記述式を、二項式生成部１８が生成した複数の論理式で更新する。
【０１０５】
取得モデル記述式の二項式化処理を指示した後、式選択部１４は、現在取得しているモデル記述式がプログラム記憶部１２に記憶されている最後の取得モデル記述式であるか否かを判断する（ステップＳＴ３４）。
【０１０６】
そして、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式でない場合、式選択部１４は、プログラム記憶部１２の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した３番目のループ処理を実行する。
【０１０７】
これにより、図１１に示すように、加減算を含むモデル記述式は、加減算される入力変数および出力変数が固定化されないまま二項式化される。
なお、図１１では、「ＴＭＰＺ２」のビット幅が「ＴＭＰＺ１」のビット幅より大きい場合の例である。そのため、「ＴＭＰＺ２」は、「ＴＭＰＺ１」を入力変数として含む二項式より後の二項式に含まれている。
【０１０８】
また、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式である場合、式選択部１４は、３番目のループ処理を終えて、４番目のループ処理を開始する。
【０１０９】
４番目のループ処理では、式選択部１４は、固定化されていないすべての変数の固定化処理を実行する。
この時点で固定化されていない変数には、加減算される入力変数、加減算のみを含むモデル記述式の出力変数、加減算を含むモデル記述式を二項式化する際に生成した中間変数がある。
したがって、３番目のループ処理および４番目のループ処理により、加減算は二項式化され、且つその加減算の二項式に含まれる入力変数および出力変数（中間変数を含む）は固定化される。
【０１１０】
このために式選択部１４は、まず、プログラム記憶部１２の先頭に記憶されているモデル記述式を取得する（ステップＳＴ４１）。
モデル記述式を取得した後、式選択部１４は、そのモデル記述式に所定の着目変数の有無を判断する。
４番目のループ処理では、式選択部１４は、固定化されてない入力変数および出力変数の有無を判断する（ステップＳＴ４２）。
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部１４は、後述するステップＳＴ４４を実行する。
【０１１１】
また、取得モデル記述式に着目変数が含まれている場合、式選択部１４は、変数固定化部１５へ着目変数の固定化処理を指示する（ステップＳＴ４３）。
【０１１２】
変数固定化部１５は、着目変数のビット幅を決定する。たとえば変数固定化部１５は、まず出力変数のビット幅を決定する。
なお、二項式の出力変数の整数部は、２個の入力変数の整数部のビット幅のうち、大きい方のビット幅に１ビットを加えたビット幅になる。
その後、変数固定化部１５は、出力変数の許容誤差を考慮して、入力変数のビット幅を決定する。
そして、ビット精度リスト記憶部１３は、生成された着目変数のビット幅を記憶する。
これにより、取得モデル記述式の出力変数のビット精度が決定する。
【０１１３】
着目変数の固定化処理を指示した後、式選択部１４は、現在取得しているモデル記述式がプログラム記憶部１２に記憶されている最後の取得モデル記述式であるか否かを判断する（ステップＳＴ４４）。
【０１１４】
そして、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式でない場合、式選択部１４は、プログラム記憶部１２の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した４番目のループ処理を実行する。
【０１１５】
また、現在取得しているモデル記述式がプログラム記憶部１２の最後の取得モデル記述式である場合、式選択部１４は、４番目のループ処理を終えて、二項式化モデルの生成処理を終える。
【０１１６】
これにより、図１２に示すように、加減算の二項式に含まれるすべての入力変数および出力変数が固定化される。
また、図１２の複数の二項式は、各二項式でのビット幅が最適化されている。
そして、プログラム記憶部１２は、図１２の二項式モデルを記憶する。
また、ビット精度リスト記憶部１３は、図１２の二項式モデルに含まれるすべての変数のビット幅を記憶する。
【０１１７】
以上のように、実施形態に係るハードウェアモデル生成装置１では、アルゴリズムモデルプログラムから二項式モデルプログラムを生成する。しかも、二項式モデルプログラムの二項式に含まれる複数の変数のビット精度の情報を生成する。
【０１１８】
このようにアルゴリズムモデルプログラム中の論理式を二項式化し、且つその二項式の変数を固定変数化することで、二項式モデルプログラムは、ネットリストなどを生成するためのハードウェアモデルプログラムとして利用することが可能になる。
【０１１９】
また、この実施形態では、図４に示すように、アルゴリズムモデルプログラム中の乗除算演算を先に二項式化し、後から加減算演算を二項式化する。
しかも、この実施形態では、加減算演算を二項式化する場合には、先に固定化された乗除算演算に係る入力変数および出力変数（乗除算演算の二項式化の際に生成された中間変数）が、加減算演算に係る入力変数よりも後に加減算されるように二項式化する。
したがって、この実施形態では、丸め誤差が発生する乗除算演算の演算回数を最小化して、丸め誤差の増大を抑えることができる。
また、この実施形態では、乗除算の丸め誤差が出力変数の許容誤差に収まるように、乗除算演算に係る入力変数のビット幅を決定できる。
【０１２０】
また、この実施形態では、ビット幅が小さい入力変数（中間変数）より、ビット幅が大きい入力変数（中間変数）が後に演算されるように二項式化する。
したがって、ビット幅の丸め誤差を最小化できる。
【０１２１】
さらに、この実施形態では、図５に示すように、取得論理式の入力変数のビット幅を一律に削減しながらシミュレーションを繰り返して許容誤差が初めて得られなくなる入力変数のビット数（以下、誤差外ビット数という）を得る。
その後、この実施形態では、着目する１個の入力変数の誤差外ビット数に１ビットを付加してシミュレーションを実行することを、各着目変数について繰り返す。
そして、この実施形態では、出力変数の誤差が最大になった着目変数のビット幅を、そのシミュレーションでのビット幅、すなわち誤差外ビット数に１ビットを加えたビット幅に決定する。
したがって、この実施形態では、各二項式において入力変数のビット幅は、許容誤差が得られる最小限のビット幅になる。
【０１２２】
これにより、本実施形態の効果として、以下の効果を得ることができる。
第１に、この実施形態では、浮動小数点型の変数で記述されたアルゴリズムモデルプログラムを、固定小数点型の変数で記述されたハードウェアモデルプログラム（二項式モデルプログラム）へ自動変換できる。
しかも、この実施形態では、アルゴリズムモデルプログラムの論理式が、３項以上の入力変数を有する多項論理式であっても、ハードウェアモデルプログラムへ自動変換できる。
【０１２３】
第２に、この実施形態では、丸め誤差を考慮した演算順序で演算するように、ハードウェアモデルプログラムでの複数の二項式の順番を自動的に決定できる。
【０１２４】
第３に、この実施形態では、多項論理式に含まれる入力変数の中から、出力誤差を増大させる入力変数を自動的に特定し、その入力変数からビット幅を固定化する。
これにより、その入力変数の誤差により出力変数の誤差が許容誤差を超えないようにすることができる。
【０１２５】
第４に、この実施形態では、出力誤差が大きくなる乗除算演算に係る入力変数を優先してビット幅を割り当てることにより、不要なビット幅による回路の実装面積の増大を抑制し、かつ、出力変数の誤差が許容誤差に収まるようにできる。
したがって、この実施形態では、たとえば許容誤差を大きく設定することで、回路の実装面積を減らすことができる。
また、逆に、この実施形態では、許容誤差を小さく設定することで、高いビット精度を確保できる。
すなわち、この実施形態では、設計する回路に応じて複数の二項式の順番および変数のビット幅を最適化することができる。
【０１２６】
第５に、この実施形態では、図４に示すように一定のループ処理により、これらの自動化された処理を実行できる。
したがって、この実施形態では、変数の数に対して、ビット精度の決定を線形的な処理量で行うことができる。
また、この実施形態では、対象となる変数の総量が増加しても、処理量が指数的に増加してしまうことはなく、線形的な処理量の増加でビット精度を決定できる。
【０１２７】
以上の実施形態は、本発明の好適な実施の形態の例であるが、本発明は、これに限定されるものではなく、発明の要旨を逸脱しない範囲において種々の変形または変更が可能である。
【０１２８】
＜変形例＞
たとえば式選択部１４は、図４に示すフローチャートの３番目および４番目のループ処理を、１番目および２番目のループ処理と同様にしてもよい。
すなわち、式選択部１４は、３番目のループ処理において、加減算を含むモデル記述式の出力変数の固定化、加減算に係る入力変数の固定化、加減算の二項式化を実行してもよい。
また、式選択部１４は、４番目のループ処理において、３番目のループ処理で生成した中間変数（加減算を二項式化するための中間変数）の固定化処理を実行してもよい。
このように３番目および４番目のループ処理を変更しても、アルゴリズムモデルプログラムから二項式モデルプログラム（ハードウェアモデルプログラム）を生成し、しかも、二項式の変数を、回路に応じて適したビット精度にできる。
【符号の説明】
【０１２９】
１・・・ハードウェアモデル生成装置（演算プログラム変換装置）、１２・・・プログラム記憶部、１３・・・ビット精度リスト記憶部（ビット幅記憶部）、１４・・・式選択部、１５・・・変数固定化部（ビット幅決定部）、１６・・・中間変数生成部、１７・・・演算順序判定部（式変換部）、１８・・・二項式生成部（式変換部）、１９・・・式更新部
【図１】
2010170196.tif 000003
【図２】
2010170196.tif 000004
【図３】
2010170196.tif 000005
【図４】
2010170196.tif 000006
【図５】
2010170196.tif 000007
【図６】
2010170196.tif 000008
【図７】
2010170196.tif 000009
【図８】
2010170196.tif 000010
【図９】
2010170196.tif 000011
【図１０】
2010170196.tif 000012
【図１１】
2010170196.tif 000013
【図１２】
2010170196.tif 000014