JP2010170196A - 演算プログラム変換装置、演算プログラム変換方法およびプログラム - Google Patents

演算プログラム変換装置、演算プログラム変換方法およびプログラム Download PDF

Info

Publication number
JP2010170196A
JP2010170196A JP2009010015A JP2009010015A JP2010170196A JP 2010170196 A JP2010170196 A JP 2010170196A JP 2009010015 A JP2009010015 A JP 2009010015A JP 2009010015 A JP2009010015 A JP 2009010015A JP 2010170196 A JP2010170196 A JP 2010170196A
Authority
JP
Japan
Prior art keywords
variable
expression
bit width
input
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009010015A
Other languages
English (en)
Inventor
Shota Hasegawa
祥太 長谷川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2009010015A priority Critical patent/JP2010170196A/ja
Priority to US12/689,579 priority patent/US8434036B2/en
Priority to CN2010100046859A priority patent/CN101782894B/zh
Publication of JP2010170196A publication Critical patent/JP2010170196A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3323Design verification, e.g. functional simulation or model checking using formal methods, e.g. equivalence checking or property checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

【課題】アルゴリズムモデルプログラムなどの演算プログラムから、ハードウェアモデルプログラムを得ることができる演算プログラム変換装置、演算プログラム変換方法およびプログラムを提供する。
【解決手段】演算プログラム変換装置1は、論理式で記述した演算プログラムを記憶するプログラム記憶部12と、中間変数を生成する中間変数生成部16と、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換する式変換部17,18と、当該複数の二項式により、プログラム記憶部12に記憶されている元の論理式を更新する式更新部19と、プログラム記憶部12に記憶されている論理式の出力変数、入力変数および中間変数のビット幅を決定するビット幅決定部15と、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅を記憶するビット幅記憶部13とを有する。
【選択図】図1

Description

本発明は、アルゴリズムモデルプログラムなどの演算プログラムを変換して、ハードウェアモデルプログラムを得ることができる演算プログラム変換装置、演算プログラム変換方法およびプログラムに関する。
特許文献1は、有効桁数の減少を最小限に抑えながら、浮動小数点形式から固定小数点形式への変換ができる演算装置を開示する。
この演算装置は、記憶部に格納されるkビットのデータを仮数部mビットおよび指数部nビットの浮動小数点形式のデータとして解釈し、ブロック内のデータの指数部の最大値rを検出する指数部最大値検出部を備える。
そして、演算装置は、ブロック内の各データを、指数部の最大値rと仮数部との組で表現される浮動小数点形式となるように変換し、変換後のデータの仮数部について演算処理部により演算処理を行う。
また、演算装置は、ブロック内のデータについての所定の演算処理を終了し外部に出力を行う前に、最大値rに基づいて、各データを固定小数点形式に変換する。
特許文献2は、回路規模を縮小させながらもビット復号率を向上させることができる固定小数点データ生成方法を開示する。
この方法では、浮動小数点データのうち最大となる浮動小数点データを検出し、浮動小数点データの指数部の値と前記最大となる浮動小数点データの指数部の値との差分を求める。
次に、この方法では、浮動小数点データの仮数部を差分だけシフトさせ、シフトさせた仮数部のうち所定のビット数を固定小数点データとして抽出する。
このようにハードウェア化された回路装置では、演算処理する各種の変数は、その変数の型が浮動小数点型であっても、固定小数点型の変数(ビット幅が固定化された変数)として演算処理がなされる。
特開2001−43067号公報 特開2002−149397号公報
ところで、ハードウェア回路の設計では、各種のEDA(Electronic Design Automation)ツールが用いられる。
EDAツールを用いた回路設計では、回路設計者は、設計する回路のハードウェアモデルをEDAツールに入力する。このようなハードウェアモデルとしては、たとえばRTL(Register Transfer Language)モデルがある。
ハードウェアモデルが入力されると、EDAツールは、ハードウェアモデルからネットリストデータなどを生成する。
また、ネットリストデータから、たとえば集積回路内の配線パターンデータを自動生成でき、更には、その配線パターンデータを形成するための露光マスクを形成できる。この露光マスクを用いて製造することで、回路設計者が設計した回路を実現した回路装置が得られる。
しかしながら、RTLモデルなどのハードウェアモデルでは、設計する回路を、レジスタおよびトランジスタで記述する必要がある。または、トランジスタへの変換が容易な、二入力一出力の二項式を用いて記述する必要がある。
なお、二項式は、たとえば、GUI(Graphical User Interface)用の二入力一出力の回路素子モジュールにより記述することができる。
このため、ハードウェアモデルをEDAツールに入力する場合、回路設計者は、レジスタのビット数などを具体的に記述する必要がある。
その結果、回路設計者は、ハードウェアモデルをEDAツールに入力する前に、レジスタに格納される各変数のビット数(ビット幅)を決定する必要がある。
そして、変数のビット幅を決定することは、変数のビット精度を固定化し、変数を固定小数点化することを意味する。
そして、変数のビット精度は、実際の製造現場では、回路設計者が過去の経験などを頼りに人手により決定している。
そのため、変数のビット精度が、設計する回路毎に最適化されているとは言いきれない。経験豊かな回路設計者であれば変数のビット精度を最適化できると考えられるが、たとえば回路設計の経験が無い者が変数のビット精度を最適化することは困難である。
その結果、変数のビット精度が必要な精度より高い場合、その余分なビット精度の変数を扱う二項式を実現する回路の規模が大きくなる。
また、その二項式の後段の二項式を実現する回路も、余分なビット精度を有する入力変数が入力されることになるので、設計する回路の規模は、必要な精度に最適化された場合の回路規模より格段に大きくなってしまう。
また、変数のビット精度が必要な精度より低い場合、その不足するビット精度の変数を扱う二項式において丸め誤差が発生する。
また、その二項式の後段の二項式を実現する回路も、丸め誤差が発生した入力変数が入力されることになるので、後段の回路自体が最適化されていたとしても、その誤差を増大させることになる。その結果、出力変数には許容誤差以上の誤差が発生してしまう。
このように各二項式において変数のビット精度が最適化されていないと、種々の問題が生じる。
この他にも、EDAツールに入力されたハードウェアモデルにおいて、複数の二項式は、回路設計者が決定して入力した順番に並んでいる。
そして、回路設計者が二項式の演算順序を十分に検討しきれなかった場合、各二項式の変数のビット精度が最適化されていたとしても、一部の二項式が必要以上のビット精度で演算していることがある。
このように出力変数の許容誤差に影響が無い場合であっても、必要以上のビット精度で演算する二項式が部分的に存在することにより、設計する回路の規模が、演算順を最適化した場合の回路規模より大きくなってしまう。
このような状況に鑑み、本発明者は独自に鋭意研究を重ねた。
その結果、本発明者は、ハードウェアモデルプログラムを設計する前に、回路設計者がハードウェアモデルプログラムをさらに抽象化した上位の演算プログラムを用いて回路の論理検証していることを突き止めた。
このようにハードウェアモデルプログラムを設計する前に作成される上位の演算プログラムとしては、たとえば設計する回路の入出力関係を記述したアルゴリズムモデルプログラムがある。
また、本発明者は、このアルゴリズムモデルプログラムなどの演算プログラムを変換することで、ハードウェアモデルプログラムとして利用可能な、二入力一出力の二項式からなる演算プログラムを得ることができることを見出した。
また、本発明者は、演算処理により、その二項式からなる演算プログラムに含まれる変数(入力変数および出力変数)のビット精度として、設計する回路に適したビット精度を得ることができることを見出した。
本発明は、アルゴリズムモデルプログラムなどの演算プログラムから、ハードウェアモデルプログラムを得ることができる演算プログラム変換装置、演算プログラム変換方法およびプログラムを提供することを目的とする。
本発明の第一の観点の演算プログラム変換装置は、設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、プログラム記憶部に3以上の入力変数を有する論理式が記憶されている場合、当該論理式を、2個の入力変数および1個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、中間変数生成部により中間変数が生成された場合、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、プログラム記憶部に記憶されている元の論理式を更新する式更新部と、プログラム記憶部に記憶されている論理式の出力変数、入力変数および中間変数のビット幅を決定するビット幅決定部と、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅を記憶するビット幅記憶部とを有する。
本発明の第二の観点の演算プログラム変換方法は、プログラム記憶部に記憶された演算プログラムを構成し、3以上の入力変数、演算子および出力変数からなる論理式を、2個の入力変数および1個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成するステップと、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換するステップと、変換された複数の二項式により、プログラム記憶部に記憶されている元の論理式を更新するステップと、プログラム記憶部に記憶されている論理式に含まれる出力変数、入力変数および中間変数のビット幅を決定するステップと、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅をビット幅記憶部に記憶させるステップとを有する。
本発明の第三の観点のプログラムは、設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、プログラム記憶部に3以上の入力変数を有する論理式が記憶されている場合、当該論理式を、2個の入力変数および1個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、中間変数生成部により中間変数が生成された場合、論理式を、中間変数を得るための二項式および中間変数から出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、プログラム記憶部に記憶されている元の論理式を更新する式更新部と、プログラム記憶部に記憶されている論理式の出力変数、入力変数および中間変数のビット幅を決定するビット幅決定部と、出力変数のビット幅、入力変数のビット幅および中間変数のビット幅を記憶するビット幅記憶部とをコンピュータに実現させる。
第一から第三の観点では、アルゴリズムモデルプログラムなどの演算プログラムの複数の論理式は二項式へ変換され、プログラム記憶部に二項式の演算プログラムとして記憶される。
また、二項式の演算プログラムの出力変数のビット幅、入力変数のビット幅および中間変数のビット幅は、ビット幅決定部により決定され、ビット幅記憶部に記憶される。
したがって、プログラム記憶部に記憶された二項式の演算プログラムは、それに含まれるすべての変数のビット幅が固定化されており、ハードウェアモデルプログラムとして利用できる。
本発明では、アルゴリズムモデルプログラムなどの演算プログラムから、ハードウェアモデルプログラムとして利用可能な二項式の演算プログラムを得ることができる。
本発明の実施形態に係る演算プログラム変換装置を適用したハードウェアモデル生成装置の構成図である。 図1中のビット精度リスト記憶部に記憶されているビット精度リストの一例である。 図1のハードウェアモデル生成装置を実現するために用いるコンピュータ装置の構成例である。 図1のハードウェアモデル生成装置でのハードウェアモデル二項式モデル生成処理の流れを示すフローチャートである。 図1のハードウェアモデル生成装置での変数の固定化処理の流れを示すフローチャートである。 図1のプログラム記憶部に記憶されるアルゴリズムモデルプログラムの一例である。 図1のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である(乗除算の出力変数を固定化した状態)。 図1のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である(乗除算の入力変数を固定化した状態)。 図1のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である(乗除算演算を二項式化した状態)。 図1のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である(乗除算のための中間変数を固定化した状態)。 図1のプログラム記憶部に記憶される変換途中の中間モデルプログラムの一例である(加減算演算を二項式化した状態)。 図1のプログラム記憶部に記憶される二項式モデルプログラム(ハードウェアモデルプログラム)の一例である。
以下、本発明の実施形態を図面に関連付けて説明する。なお、説明は、以下の順番で行う。
1.演算プログラム変換装置を適用したハードウェアモデル生成装置の構成
2.アルゴリズムモデルプログラムから二項式で記述されたハードウェアモデルプログラムを生成する動作
[1.ハードウェアモデル生成装置の構成]
図1は、本発明の実施形態に係る演算プログラム変換装置を適用したハードウェアモデル生成装置を示す装置構成図である。
ハードウェアモデル生成装置1は、設計する回路の入出力関係が入出力記述式で記述されたアルゴリズムモデルプログラムから、複数の二項式で記述されてハードウェアモデルプログラムとして利用可能な二項式モデルプログラムを生成する。
また、ハードウェアモデル生成装置1は、二項式モデルプログラムの二項式に含まれる複数の変数のビット精度の情報を生成する。
このようにハードウェアモデル生成装置1は、回路モデルプログラム中の論理式を二項式化し、且つその二項式の変数を固定変数化する。
そして、この二項式モデルプログラムは、RTLモデルのプログラムと同様に、ネットリストなどを生成するためのハードウェアモデルのプログラムとして利用することが可能になる。
以下、アルゴリズムモデルプログラムを単にアルゴリズムモデルといい、二項式モデルプログラムを単に二項式モデルといい、回路モデルプログラムを回路モデルという。
後に説明する図6に、アルゴリズムモデルの一例を示す。
図6のアルゴリズムモデルは、3個の入出力記述式を有する。
入出力記述式は、設計する回路の出力データまたは出力信号毎に互いに独立した論理式である。
また、入出力記述式には、出力データまたは出力信号を得るために使用する入力データまたは入力信号が変数として記述される。
入出力記述式は、1個の出力変数、複数の入力変数および複数の演算子で構成される。
出力変数は、出力データまたは出力信号に対応する。
入力変数は、出力データまたは出力信号を得るために使用する入力データまたは入力信号に対応する。
演算子は、加減乗除などの演算記号であり、複数の入力データまたは複数の入力信号の演算処理を示す。
そして、出力変数は、入出力記述式の左辺に記述される。入力変数および演算子は、入出力記述式の右辺に記述される。1個の入出力記述式には、3つ以上の入力変数を記述してもよい。
なお、ハードウェアモデル生成装置1において、入出力記述式の変数は、浮動小数点型の変数として扱われる。
後に説明する図12に、二項式モデルの一例を示す。
図12の二項式モデルは、9個の二項式を有する。
二項式は、入力変数、演算子および出力変数で構成される。
二項式を二入力一出力の機能モジュールとして捉えた場合、入力変数は機能モジュールの入力データまたは入力信号に対応し、出力変数は機能モジュールの出力データまたは出力信号に対応し、演算子は機能モジュールでの2個の入力変数同士の演算処理を示す。
そして、出力変数は、二項式の左辺に記述される。入力変数および演算子は、二項式の右辺に記述される。1個の二項式には、2個の入力変数を記述することができる。
なお、ハードウェアモデル生成装置1において、二項式モデルの変数は、最終的には固定小数点型の変数になる。
なお、二項式モデルは、たとえばRTLモデルと同等な記述レベルのモデルであればよい。すなわち、二項式モデルは、複数の二項式で記述されたモデルであって、且つ、二項式の入力変数、演算子および出力変数のビット幅が確定したモデルであればよい。
また、二項式モデルを得るために使用するアルゴリズムモデルは、上述した回路の入出力を出力毎の論理式で記述した入出力モデル以外のモデルであってもよい。
たとえばアルゴリズムモデルの各論理式の出力変数の許容誤差と、入力変数の最大入力値および最小入力値が得られているモデルであれば、アルゴリズムモデルとして使用できる。
図1のハードウェアモデル生成装置1は、入力部11、プログラム記憶部12、ビット(Bit)精度リスト記憶部13、式選択部14、変数固定化部15、中間変数生成部16、演算順序判定部17、二項式生成部18、および式更新部19を有する。
入力部11は、たとえばキーボード、ポインティングデバイスを有する。入力部11は、キーボード、ポインティングデバイスに対する操作に応じた入力データを生成する。ユーザは、入力部11を用いてハードウェアモデル生成装置1にアルゴリズムモデルなどを入力する。
なお、入力部11は、CD−ROM(Compact Disc Read Only Memory)などの着脱可能な記録媒体を読み取るデバイスを有し、記録媒体に予め記録されたアルゴリズムモデルなどを読み取ってもよい。
プログラム記憶部12は、モデル記述式で記述された回路モデルを記憶する。
プログラム記憶部12は、最初には、図6に例示するようなアルゴリズムモデルを記憶する。
そして、二項式モデル生成処理により、プログラム記憶部12は、最後には、図12に例示するような二項式モデルを記憶する。
また、プログラム記憶部12は、アルゴリズムモデルから二項式モデルへ変換される途中の中間モデルも記憶する。中間モデルは、図7〜図11に例示されている。
そして、アルゴリズムモデルを記憶している場合、プログラム記憶部12は、アルゴリズムモデルの複数の入出力記述式(論理式)をモデル記述式として記憶する。
二項式モデルを記憶している場合、プログラム記憶部12は、二項式モデルの複数の二項式をモデル記述式として記憶する。
ビット精度リスト記憶部13は、ビット精度リスト21を記憶する。
図2に、ビット精度リスト21のリスト構造例を示す。
図2のビット精度リスト21は、プログラム記憶部12に記憶されている変数(モデル記述式の入力変数、出力変数および後述する中間変数)毎の複数のレコードで構成される。
そして、ビット精度リスト記憶部13は、たとえば、最初は図6に含まれるすべての変数を記憶し、最後には図12に含まれるすべての変数を記憶する。
ビット精度リスト21の各レコード(図2の各行)には、変数名、変数の値の範囲、変数の許容誤差、変数の整数部のビット数、および変数の少数部のビット数が格納される。
なお、変数の値の範囲および変数の許容誤差は、たとえば入力部11から入力すればよい。
また、整数部のビット数と少数部のビット数との合計ビット数が、変数のビット幅(ビット精度)になる。
なお、ビット精度リスト21に整数部のビット数および少数部のビット数が記憶されている場合、変数は、固定小数点型の変数である。
逆に、ビット精度リスト21に整数部のビット数および少数部のビット数の少なくとも一方が記憶されていない場合、変数は、浮動小数点型の変数である。
また、二項式モデルの生成処理前には、ビット精度リスト21には、図6中のすべての変数が記憶される。二項式モデルの生成処理後には、ビット精度リスト21には、図12中のすべての変数が記憶される。
式選択部14は、モデル記述式の二項式化の順番、および変数の固定小数点化の順番を決定する。式選択部14は、四則演算の種類、および各変数のビット精度(ビット幅)に基づいて、最終的に丸め誤差の影響が小さくなるように決定する。
なお、丸め誤差は、たとえば乗除算の演算をする場合、または入力変数のビット数を減らして演算する場合に生じやすい。
これは、ハードウェア化においては回路の実装面積が有限であるため、常に画質などの信号品質と実装面積とのトレードオフが発生するからである。
また、演算後にビット幅が大きくなる演算処理に対して大幅なビット削減を行うことで、その演算処理およびそれ以降の演算処理に必要となる実装面積を効果的に抑えることができるからである。
そして、このようなビット幅の削減処理により、丸め誤差が発生する。
式選択部14は、この性質を用いて、乗除算に係る変数またはビット幅の大きい変数に着目し、それらの変数から二項式化および固定小数点化を決定する。式選択部14は、具体的には、後述する図4のフローチャートを実行する。
以下、式選択部14が取得しているモデル記述式を、取得モデル記述式(取得論理式)と呼ぶ。
図4のフローチャートにおいて、式選択部14は、プログラム記憶部12に記憶されている回路モデルの先頭から順番に、取得モデル記述式を1行ずつ取得する。
次に、式選択部14は、取得モデル記述式を取得する度に、プログラム記憶部12に記憶された回路モデルおよびビット精度リスト記憶部13に記憶されたビット精度の情報を元に着目する二項演算(二項演算子)および着目する変数を決定する。
次に、式選択部14は、着目する二項演算の二項式化および着目する変数の固定小数点化(ビット幅を決定すること)を実行させ、その結果をプログラム記憶部12およびビット精度リスト記憶部13に記憶させる。
そして、式選択部14は、プログラム記憶部12に記憶されている回路モデルのすべてのモデル記述式が二項式化され、且つすべての変数が固定小数点化されるまで、これらの処理を繰り返す。
これにより、式選択部14は、概略、以下の処理を順番に行うことになる。
1. 乗除算を行っている論理式の出力変数群に着目し、これらを固定化する。
2. 乗除算される入力変数群に着目し、これらを固定化する。
3. 乗除算を行っている論理式の入力変数群に着目し、演算順序を決定する。
4. 乗除算した値を格納するために生成した中間変数群に着目し、これらを固定化する。
5. 加減算を行っている論理式の入力変数群に着目し、演算順序を決定する。
6. 加減算した値を格納するために生成した中間変数群に着目し、これらを固定化する。
変数固定化部15は、取得モデル記述式の着目変数のビット幅を決定する。具体的には、変数固定化部15は、図5の処理を繰り返し実行する。
図5の処理では、変数固定化部15は、まず、許容誤差範囲内で変数群のビット幅を削減し、許容誤差を超えた場合は最終段の出力誤差が一番大きくなる変数を特定し、この変数からビット幅を固定する。許容誤差の指定以外は、すべて自動で処理される。
このように最も出力誤差が大きくなる変数からビット幅を確定することにより、変数固定化部15は、丸め誤差の影響を最小限に抑えながら、変数を必要最小限なビット幅に固定化できる。
また、前段で着目する変数を特定し、この変数のみを固定小数点へ変換することにより、変数固定化部15は、他の演算の影響を受けずに且つ固定小数点への変換を線形的な処理量で決めることができる。
そして、図5の処理を繰り返し実行することで、変数固定化部15は、最終的には、取得モデル記述式の出力変数のビット幅、入力変数のビット幅、さらには後述する中間変数のビット幅を決定する。
以下、変数固定化部15により処理された変数を固定化された変数と呼ぶ。
中間変数生成部16は、取得モデル記述式に含まれる演算のうち、着目する二項演算を二項式へ変換するために使用する中間変数を生成する。
生成する中間変数の個数は、たとえば取得モデル記述式に着目する二項演算(二項演算子)しか含まれていない場合には、着目する二項演算子より1個少ない個数であればよい。
また、たとえば取得モデル記述式に着目する二項演算(二項演算子)以外の演算子が含まれている場合には、着目する二項演算子と同数であればよい。
なお、中間変数生成部16により生成された中間変数は、ビット幅が固定化されていないので、浮動小数点型の変数である。
演算順序判定部17は、取得モデル記述式を二項式などの複数の論理式へ変換する場合の演算順序を判定する。演算順序判定部17は、固定化した変数(変数群)のビット幅および取得モデル記述式を元に、丸め誤差が小さくなる演算順番を判定する。
なお、丸め誤差には、乗除算において有効桁数を削除することにより発生する丸め誤差、加減算において演算するビットを削除することにより発生する丸め誤差などがある。
演算順序判定部17は、たとえば取得モデル記述式に固定化された複数の変数が含まれている場合、ビット幅が少ない変数を演算した後にビット幅が多い変数を演算するように演算順序を判定する。
この他にもたとえば、演算順序判定部17は、取得モデル記述式に既に固定化された固定小数点型の変数が含まれている場合、固定化されていない浮動小数点型の変数を演算した後に固定化された変数を演算するように演算順序を判定する。
これは、この実施形態での後述する処理では、1個の取得モデル記述式に固定小数点型の変数と浮動小数点型の変数とが混在する場合があり、この場合の浮動小数点型の変数は乗除算されない変数であって、丸め誤差の影響が少ないからである。
また、丸め誤差の影響が少ない演算を先に処理することにより、丸め誤差が発生した値の演算回数を減らして、丸め誤差の増大を抑えるためである。
また、演算順序判定部17は、これらの判定結果に基づいて、複数の二項式(取得モデル記述式の出力変数を演算する式、および中間変数を演算する二項式)に対する、取得モデル記述式に含まれる複数の入力変数の割り当てを決定する。
たとえば取得モデル記述式に3個の入力変数がある場合、演算順序判定部17は、演算順序で先に演算する入力変数と判断した2個の入力変数を中間変数の演算に割り当て、後に演算する入力変数と判断した残りの変数および中間変数を出力変数の演算に割り当てる。
二項式生成部18は、演算順序判定部17の複数の変数の割り当てに基づいて、取得モデル記述式から、少なくとも1個の二項式を含む複数の論理式を生成する。
具体的には、二項式生成部18は、着目する二項演算を二項式化し、且つその他の演算から取得モデル記述式の出力変数を得る論理式を得る。
なお、この出力変数を得る論理式が二項式になることもある。
たとえば3個の入力変数を有する取得モデル記述式の場合、取得モデル記述式の2個の入力変数から中間変数を得る第一の二項式と、取得モデル記述式の残りの入力変数および中間変数から出力変数を得る第二の二項式とが生成される。
そして、中間変数は、第一の二項式において出力変数となり、第二の二項式において入力変数となる。
式更新部19は、プログラム記憶部12に記憶されている取得モデル記述式を、二項式生成部18が生成した複数の二項式で更新する。
そして、プログラム記憶部12に記憶されている取得モデル記述式が順番に複数の二項式で更新されることにより、プログラム記憶部12に記憶されていたアルゴリズムモデルは、複数の二項式で記述された二項式モデルへ変換されることになる。
なお、図1のハードウェアモデル生成装置1は、たとえば図3のコンピュータ装置31を用いて実現することができる。コンピュータ装置31は、入力部11、表示部33、記憶部34、CPU(Central Processing Unit)35およびこれらを接続するシステムバス36を有する。
記憶部34には、ハードウェアモデル生成装置1をコンピュータ装置31に実現するためのプログラムが記憶される。
そして、CPU535がプログラム37を実行することで、コンピュータ装置31にハードウェアモデル生成装置1が実現される。また、記憶部34は、プログラム記憶部12およびビット精度リスト記憶部13として機能する。
また、図3中のプログラム37は、コンピュータ読み取り可能なプログラムであればよく、たとえばCD−ROMなどの記録媒体に記録されていたプログラムであっても、インターネット等の伝送媒体を介してサーバからダウンロードしたプログラムであってもよい。
[2.ハードウェアモデル生成装置の動作]
次に、図1のハードウェアモデル生成装置1の動作を説明する。
図4に、アルゴリズムモデルから、ハードウェアモデルとして利用可能な二項式モデルを得るための全体的な処理の流れを示す。図4のフローチャートは、主に式選択部14により実行される。
また、図5に、入力変数の固定化処理の流れを示す。図5のフローチャートは、変数固定化部15により実行される。
また、図6〜図12に、図1のハードウェアモデル生成装置1において変換される回路モデルの一例を示す。
図6はアルゴリズムモデルであり、図12はハードウェアモデルとして利用可能な二項式モデルである。また、図7〜図11は、中間モデルである。
以下の説明では、この図6〜図12の例を参照しながら、図4、図5の処理を説明する。なお、図6〜図12において、固定化された固定小数点型の変数は大文字で記載され、固定化されていない浮動小数点型の変数は小文字で記載されている。
図4に示すように、ユーザは、ハードウェアモデル生成装置1の入力部11を操作して、アルゴリズムモデルの複数の入出力記述式と、入出力記述式に含まれる入力変数および出力変数の入出力条件を入力する(ステップST1)。
これにより、入力部11は、入力データを生成する。
そして、プログラム記憶部12には、たとえば図6のアルゴリズムモデルが記憶される。図6のアルゴリズムモデルは、3個の入出力記述式(モデル記述式)が記憶される。
また、ビット精度リスト記憶部13には、図2のビット精度リスト21が記憶される。ビット精度リスト21には、図6中の15個の変数の入出力条件が登録される。
また、ビット精度リスト記憶部13には、入出力条件として、たとえば入力変数の入力値の範囲、および出力変数の許容誤差が登録される。
プログラム記憶部12にアルゴリズムモデルが記憶され、且つビット精度リスト記憶部13にビット精度リスト21が記憶されると、ハードウェアモデル生成装置1は、アルゴリズムモデルから、変数のビット精度を有する二項式化モデルを生成する処理を開始する。
二項式化モデルの生成処理では、図4に示すように、4回のループ処理が実行される。
そして、1番目のループ処理では、乗除算を含むモデル記述式の出力変数の固定化、乗除算に係る入力変数の固定化、乗除算の二項式化を実行する。
そのため、式選択部14は、まず、プログラム記憶部12に記憶されているモデル記述式を取得する(ステップST11)。式選択部14は、アルゴリズムモデルの先頭に記述されているモデル記述式を取得する。
図6の例では、式選択部14は、「x=a*b*c」を最初に取得する。「*」は乗算子である。
モデル記述式を取得した後、式選択部14は、そのモデル記述式に所定の着目変数、所定の着目演算子の有無を判断する。
1番目のループ処理では、式選択部14は、乗算子(*)および除算子(「÷」または「/」)を着目演算子として、取得モデル記述式に着目演算子の有無を判断する(ステップST12)。「x=a*b*c」には、乗算子が含まれている。
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部14は、後述するステップST16を実行する。
また、取得モデル記述式に着目演算子が含まれている場合、式選択部14は、その取得モデル記述式の左辺の出力変数を着目変数として抽出し、変数固定化部15へ着目変数の固定化処理を指示する(ステップST13)。
「x=a*b*c」の場合、出力変数「x」が着目変数として抽出される。
変数固定化部15は、取得モデル記述式、着目演算子および着目変数から、着目変数(ここでは乗除算を含むモデル記述式の出力変数)のビット幅を決定する。変数固定化部15は、着目変数のビット幅を決定する。
モデル記述式の出力変数を固定化する場合、変数固定化部15は、まず、取得モデル記述式のシミュレーションを実行し、出力変数の最大値(絶対値)を求める。これにより、取得モデル記述式の出力変数の整数部が決定される。
ビット精度リスト記憶部13は、この整数部のビット数を記憶する。
次に、変数固定化部15は、出力変数の許容誤差よりも小さな値で変化するように、出力変数の小数部のビット数を決定する。
ビット精度リスト記憶部13は、この少数部のビット数を記憶する。
以上の処理により、変数固定化部15は、着目変数のビット幅を決定する。
そして、ビット精度リスト記憶部13は、生成された着目変数(出力変数)のビット幅を記憶する。
これにより、取得モデル記述式の出力変数のビット精度が決定する。
図7に示すように、浮動小数点型の出力変数「x」が固定小数点型の出力変数「X」へ変換される。
着目変数(出力変数)の固定化処理を指示した後、図4に示すように、式選択部14は、さらに、乗除算される入力変数を着目変数として抽出し、変数固定化部15へ着目変数の固定化処理を指示する(ステップST14)。
「x=a*b*c」の場合、入力変数「a」、「b」および「c」が着目変数として抽出される。
変数固定化部15は、図5の処理を実行することで、着目変数(入力変数)を固定化する。
具体的には、変数固定化部15は、まず、取得モデル記述式のシミュレーションを実行し(ステップST51)、各入力変数の最大値(絶対値)を求める(ステップST52)。
これにより、取得モデル記述式に含まれるすべての入力変数の整数部が決定される。
ビット精度リスト記憶部13は、この整数部のビット数を記憶する。
なお、この段階では、これらの入力変数は、浮動小数点型の変数として計算される。
次に、変数固定化部15は、着目変数(入力変数)の小数部のビット数を得るために、まず、取得モデル記述式に含まれるすべての着目変数に対して、丸め誤差が発生しない十分なビット数の小数部を付加する(ステップST53)。
その後、変数固定化部15は、着目変数(入力変数)の小数部のビット数を同時に同じビット数(たとえば1ビット)削減し(ステップST54)、シミュレーションを実行する(ステップST55)。このとき、着目変数以外の未固定化変数は、浮動小数点型の変数として計算する。
また、変数固定化部15は、出力変数の誤差が許容誤差以内であるか否かを判断する(ステップST56)。
そして、出力変数の誤差が許容誤差以内である場合には、変数固定化部15は、その誤差が許容誤差を超えるまで、ビット数削減処理(ステップST54)およびシミュレーション(ステップST55)を繰り返す。
また、出力変数の誤差が許容誤差以内でなくなると、変数固定化部15は、1個の着目変数に1ビット付加し(ステップST57)、シミュレーションを実行する(ステップST58)。このとき、着目変数以外の未固定化変数は、浮動小数点型の変数として計算する。
変数固定化部15は、各着目変数について同様のシミュレーションを実行する(ステップST59)。
着目する複数の入力変数のビット数を増やしたこれらのシミュレーション結果から、変数固定化部15は、出力変数の誤差が最大となる入力変数を特定する(ステップST60)。
そして、変数固定化部15は、この誤差が最大となる入力変数の小数部のビット数を、この時点のビット数に固定する(ステップST61)。
また、変数固定化部15は、対象となる着目変数が無くなるまで、ステップST57〜ST61を繰り返す(ステップST62)。
なお、取得モデル記述式に含まれる2つ目以降の入力変数を固定化する場合、先に固定化した入力変数には、固定化したビット幅を使用する。
変数固定化部15は、取得モデル記述式、着目演算子、着目変数、および既に演算した出力変数のビット幅から、着目変数(ここでは乗除算される入力変数)のビット幅を決定する。
また、ビット精度リスト記憶部13は、生成された着目変数のビット幅を記憶する。
これにより、取得モデル記述式において乗除算される入力変数のビット精度が決定する。
図8に示すように、浮動小数点型の入力変数「a」、「b」および「c」が固定小数点型の入力変数「A」、「B」および「C」へ変換される。
出力変数および乗除算される入力変数の固定化処理を指示した後、式選択部14は、中間変数生成部16、演算順序判定部17および二項式生成部18に、着目演算子の演算処理の二項式化処理を指示する(ステップST15)。
「x=a*b*c」の場合、「x=a*b*c」の全体が二項式化処理の対象になる。
なお、式選択部14は、たとえば、着目入力変数が3個以上である場合、または取得モデル記述式が着目入力変数を含み且つ入力変数の総数が3個以上である場合に、二項式化処理を指示すればよい。
中間変数生成部16は、取得モデル記述式中の演算子に応じた数の中間変数を生成する。
図9の「X=A*B*C」を二項式化する場合には、1個の中間変数「tmpx1」が生成されている。
ビット精度リスト記憶部13は、中間変数生成部16が生成した中間変数を記憶する。
演算順序判定部17は、丸め誤差が少なくなる演算順序を判定し、取得モデル記述式に含まれる複数の変数の割り当てを決定する。
たとえば、固定化された入力変数「A」、「B」および「C」のビット幅が「B>A>C」である場合、演算順序判定部17は、中間変数tmpx1の論理式に入力変数AおよびCを割り当て、出力変数Xの論理式に入力変数Bおよび中間変数tmpx1を割り当てる。
二項式生成部18は、演算順序判定部17が決定した複数の変数の割り当てに基づいて、取得モデル記述式から、少なくとも1個の二項式を含む複数の論理式を生成する。
たとえば中間変数tmpx1の論理式として「tmpx1=A*C」を生成し、出力変数Xの論理式として「X=B*tmpx1」を生成する。
そして、式更新部19は、プログラム記憶部12に記憶されている取得モデル記述式を、二項式生成部18が生成した複数の論理式で更新する。
これにより、図9に示すように、「tmpx1=A*C」の二項式と、「X=B*tmpx1」の二項式とが、「x=a*b*c」の換わりにプログラム記憶部12に記憶される。
取得モデル記述式の二項式化処理を指示した後、式選択部14は、現在取得しているモデル記述式がプログラム記憶部12に記憶されている最後の取得モデル記述式であるか否かを判断する(ステップST16)。
「x=a*b*c」は回路モデルの最初のモデル記述式であるので、この場合には、最後の取得モデル記述式ではないと判断する。
そして、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式でない場合、式選択部14は、プログラム記憶部12の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した1番目のループ処理を実行する。
これにより、乗算子「*」を含む図6の1番目のモデル記述式は、図9に示すように、2個の論理式へ変換される。
また、図6の3番目のモデル記述式「z=g*h+i*j+k*l」は、図9に示すように、3個の論理式「tmpz1=G*H」、「tmpz2=I*J」および「Z=tmpz1+tmpz2+k+l」へ変換される。
また、ビット精度リスト21には、3個の中間変数「tmpx1」、「tmpz1」、「tmpz2」が追加される。
また、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式である場合、式選択部14は、1番目のループ処理を終えて、2番目のループ処理を開始する。
2番目のループ処理では、1番目のループ処理で生成した中間変数(乗除算を二項式化するための中間変数)の固定化処理を実行する。
図9では、「tmpx1」、「tmpz1」および「tmpz2」の3個の中間変数が生成されている。
したがって、1番目のループ処理および2番目のループ処理により、乗除算は二項式化され、且つその乗除算の二項式に含まれる入力変数および出力変数(中間変数を含む)は固定化される。
このために式選択部14は、まず、プログラム記憶部12の先頭に記憶されているモデル記述式を取得する(ステップST21)。
モデル記述式を取得した後、式選択部14は、そのモデル記述式に所定の着目演算子の有無を判断する。
2番目のループ処理では、式選択部14は、乗算子および除算子を着目演算子として、取得モデル記述式に着目演算子の有無を判断する(ステップST22)。
図9の場合、式選択部14は、たとえば、着目演算子(固定化されていない中間変数)が入力変数として記述されている論理式である2番目の論理式、6番目の論理式を取得した場合に、取得モデル記述式に着目演算子が有ると判断する。
また、それ以外の論理式については、式選択部14は、着目演算子が無いと判断する。
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部14は、後述するステップST24を実行する。
また、取得モデル記述式に着目演算子が含まれている場合、式選択部14は、その取得モデル記述式の右辺の固定化されていない入力変数を着目変数として抽出し、変数固定化部15へ着目変数の固定化処理を指示する(ステップST23)。
図9の場合、変数固定化部15は、たとえば、取得モデル記述式、着目演算子および着目変数から、着目変数(ここでは入力変数)のビット幅を決定する。
また、ビット精度リスト記憶部13は、生成された着目変数(入力変数)のビット幅を記憶する。
これにより、取得モデル記述式の入力変数のビット精度が決定する。
着目変数(出力変数)の固定化処理を指示した後、式選択部14は、現在取得しているモデル記述式がプログラム記憶部12に記憶されている最後の取得モデル記述式であるか否かを判断する(ステップST24)。
そして、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式でない場合、式選択部14は、プログラム記憶部12の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した2番目のループ処理を実行する。
この2番目のループ処理により、図10に示すように、1番目のループ処理で生成された3個の中間変数「tmpx1」、「tmpz1」および「tmpz2」が固定化されて、「TMPX1」、「TMPZ1」および「TMPZ2」になる。
また、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式である場合、式選択部14は、2番目のループ処理を終えて、3番目のループ処理を開始する。
3番目のループ処理では、加減算の二項式化を実行する。
そのため、式選択部14は、まず、プログラム記憶部12に記憶されているモデル記述式を取得する(ステップST31)。
式選択部14は、アルゴリズムモデルの先頭に記述されているモデル記述式を取得する。
モデル記述式を取得した後、式選択部14は、そのモデル記述式に所定の着目変数、所定の着目演算子の有無を判断する。
3番目のループ処理では、式選択部14は、加算子および減算子を着目演算子として、取得モデル記述式に着目演算子の有無を判断する(ステップST32)。
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部14は、後述するステップST34を実行する。
取得モデル記述式に着目演算子が含まれている場合、式選択部14は、中間変数生成部16、演算順序判定部17および二項式生成部18に、着目演算子の演算処理の二項式化処理を指示する(ステップST33)。
中間変数生成部16は、取得モデル記述式に含まれる着目演算子より1つ少ない数の中間変数を生成する。
ビット精度リスト記憶部13には、中間変数生成部16が生成した中間変数が追加される。
演算順序判定部17は、丸め誤差が少なくなる演算順序を判定し、取得モデル記述式に取得モデル記述式に含まれる複数の変数の割り当てを決定する。
たとえば、固定化された入力変数と固定化されていない入力変数とがあった場合、固定化された入力変数を、固定化されていない入力変数より後に演算するように割り当てる。
この他にもたとえば、固定化された複数の入力変数がある場合、ビット幅が多い入力変数を、ビット幅が少ない入力変数より後に演算するように割り当てる。
これらの処理により、乗除算による丸め誤差が複数の演算で伝播して増大してしまう可能性を減らすことができる。
二項式生成部18は、演算順序判定部17が決定した複数の変数の割り当てに基づいて、取得モデル記述式から、少なくとも1個の二項式を含む複数の論理式を生成する。
そして、式更新部19は、プログラム記憶部12に記憶されている取得モデル記述式を、二項式生成部18が生成した複数の論理式で更新する。
取得モデル記述式の二項式化処理を指示した後、式選択部14は、現在取得しているモデル記述式がプログラム記憶部12に記憶されている最後の取得モデル記述式であるか否かを判断する(ステップST34)。
そして、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式でない場合、式選択部14は、プログラム記憶部12の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した3番目のループ処理を実行する。
これにより、図11に示すように、加減算を含むモデル記述式は、加減算される入力変数および出力変数が固定化されないまま二項式化される。
なお、図11では、「TMPZ2」のビット幅が「TMPZ1」のビット幅より大きい場合の例である。そのため、「TMPZ2」は、「TMPZ1」を入力変数として含む二項式より後の二項式に含まれている。
また、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式である場合、式選択部14は、3番目のループ処理を終えて、4番目のループ処理を開始する。
4番目のループ処理では、式選択部14は、固定化されていないすべての変数の固定化処理を実行する。
この時点で固定化されていない変数には、加減算される入力変数、加減算のみを含むモデル記述式の出力変数、加減算を含むモデル記述式を二項式化する際に生成した中間変数がある。
したがって、3番目のループ処理および4番目のループ処理により、加減算は二項式化され、且つその加減算の二項式に含まれる入力変数および出力変数(中間変数を含む)は固定化される。
このために式選択部14は、まず、プログラム記憶部12の先頭に記憶されているモデル記述式を取得する(ステップST41)。
モデル記述式を取得した後、式選択部14は、そのモデル記述式に所定の着目変数の有無を判断する。
4番目のループ処理では、式選択部14は、固定化されてない入力変数および出力変数の有無を判断する(ステップST42)。
そして、取得モデル記述式に着目演算子が含まれていない場合、式選択部14は、後述するステップST44を実行する。
また、取得モデル記述式に着目変数が含まれている場合、式選択部14は、変数固定化部15へ着目変数の固定化処理を指示する(ステップST43)。
変数固定化部15は、着目変数のビット幅を決定する。たとえば変数固定化部15は、まず出力変数のビット幅を決定する。
なお、二項式の出力変数の整数部は、2個の入力変数の整数部のビット幅のうち、大きい方のビット幅に1ビットを加えたビット幅になる。
その後、変数固定化部15は、出力変数の許容誤差を考慮して、入力変数のビット幅を決定する。
そして、ビット精度リスト記憶部13は、生成された着目変数のビット幅を記憶する。
これにより、取得モデル記述式の出力変数のビット精度が決定する。
着目変数の固定化処理を指示した後、式選択部14は、現在取得しているモデル記述式がプログラム記憶部12に記憶されている最後の取得モデル記述式であるか否かを判断する(ステップST44)。
そして、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式でない場合、式選択部14は、プログラム記憶部12の次のモデル記述式を取得し、新たに取得したモデル記述式について上述した4番目のループ処理を実行する。
また、現在取得しているモデル記述式がプログラム記憶部12の最後の取得モデル記述式である場合、式選択部14は、4番目のループ処理を終えて、二項式化モデルの生成処理を終える。
これにより、図12に示すように、加減算の二項式に含まれるすべての入力変数および出力変数が固定化される。
また、図12の複数の二項式は、各二項式でのビット幅が最適化されている。
そして、プログラム記憶部12は、図12の二項式モデルを記憶する。
また、ビット精度リスト記憶部13は、図12の二項式モデルに含まれるすべての変数のビット幅を記憶する。
以上のように、実施形態に係るハードウェアモデル生成装置1では、アルゴリズムモデルプログラムから二項式モデルプログラムを生成する。しかも、二項式モデルプログラムの二項式に含まれる複数の変数のビット精度の情報を生成する。
このようにアルゴリズムモデルプログラム中の論理式を二項式化し、且つその二項式の変数を固定変数化することで、二項式モデルプログラムは、ネットリストなどを生成するためのハードウェアモデルプログラムとして利用することが可能になる。
また、この実施形態では、図4に示すように、アルゴリズムモデルプログラム中の乗除算演算を先に二項式化し、後から加減算演算を二項式化する。
しかも、この実施形態では、加減算演算を二項式化する場合には、先に固定化された乗除算演算に係る入力変数および出力変数(乗除算演算の二項式化の際に生成された中間変数)が、加減算演算に係る入力変数よりも後に加減算されるように二項式化する。
したがって、この実施形態では、丸め誤差が発生する乗除算演算の演算回数を最小化して、丸め誤差の増大を抑えることができる。
また、この実施形態では、乗除算の丸め誤差が出力変数の許容誤差に収まるように、乗除算演算に係る入力変数のビット幅を決定できる。
また、この実施形態では、ビット幅が小さい入力変数(中間変数)より、ビット幅が大きい入力変数(中間変数)が後に演算されるように二項式化する。
したがって、ビット幅の丸め誤差を最小化できる。
さらに、この実施形態では、図5に示すように、取得論理式の入力変数のビット幅を一律に削減しながらシミュレーションを繰り返して許容誤差が初めて得られなくなる入力変数のビット数(以下、誤差外ビット数という)を得る。
その後、この実施形態では、着目する1個の入力変数の誤差外ビット数に1ビットを付加してシミュレーションを実行することを、各着目変数について繰り返す。
そして、この実施形態では、出力変数の誤差が最大になった着目変数のビット幅を、そのシミュレーションでのビット幅、すなわち誤差外ビット数に1ビットを加えたビット幅に決定する。
したがって、この実施形態では、各二項式において入力変数のビット幅は、許容誤差が得られる最小限のビット幅になる。
これにより、本実施形態の効果として、以下の効果を得ることができる。
第1に、この実施形態では、浮動小数点型の変数で記述されたアルゴリズムモデルプログラムを、固定小数点型の変数で記述されたハードウェアモデルプログラム(二項式モデルプログラム)へ自動変換できる。
しかも、この実施形態では、アルゴリズムモデルプログラムの論理式が、3項以上の入力変数を有する多項論理式であっても、ハードウェアモデルプログラムへ自動変換できる。
第2に、この実施形態では、丸め誤差を考慮した演算順序で演算するように、ハードウェアモデルプログラムでの複数の二項式の順番を自動的に決定できる。
第3に、この実施形態では、多項論理式に含まれる入力変数の中から、出力誤差を増大させる入力変数を自動的に特定し、その入力変数からビット幅を固定化する。
これにより、その入力変数の誤差により出力変数の誤差が許容誤差を超えないようにすることができる。
第4に、この実施形態では、出力誤差が大きくなる乗除算演算に係る入力変数を優先してビット幅を割り当てることにより、不要なビット幅による回路の実装面積の増大を抑制し、かつ、出力変数の誤差が許容誤差に収まるようにできる。
したがって、この実施形態では、たとえば許容誤差を大きく設定することで、回路の実装面積を減らすことができる。
また、逆に、この実施形態では、許容誤差を小さく設定することで、高いビット精度を確保できる。
すなわち、この実施形態では、設計する回路に応じて複数の二項式の順番および変数のビット幅を最適化することができる。
第5に、この実施形態では、図4に示すように一定のループ処理により、これらの自動化された処理を実行できる。
したがって、この実施形態では、変数の数に対して、ビット精度の決定を線形的な処理量で行うことができる。
また、この実施形態では、対象となる変数の総量が増加しても、処理量が指数的に増加してしまうことはなく、線形的な処理量の増加でビット精度を決定できる。
以上の実施形態は、本発明の好適な実施の形態の例であるが、本発明は、これに限定されるものではなく、発明の要旨を逸脱しない範囲において種々の変形または変更が可能である。
<変形例>
たとえば式選択部14は、図4に示すフローチャートの3番目および4番目のループ処理を、1番目および2番目のループ処理と同様にしてもよい。
すなわち、式選択部14は、3番目のループ処理において、加減算を含むモデル記述式の出力変数の固定化、加減算に係る入力変数の固定化、加減算の二項式化を実行してもよい。
また、式選択部14は、4番目のループ処理において、3番目のループ処理で生成した中間変数(加減算を二項式化するための中間変数)の固定化処理を実行してもよい。
このように3番目および4番目のループ処理を変更しても、アルゴリズムモデルプログラムから二項式モデルプログラム(ハードウェアモデルプログラム)を生成し、しかも、二項式の変数を、回路に応じて適したビット精度にできる。
1・・・ハードウェアモデル生成装置(演算プログラム変換装置)、12・・・プログラム記憶部、13・・・ビット精度リスト記憶部(ビット幅記憶部)、14・・・式選択部、15・・・変数固定化部(ビット幅決定部)、16・・・中間変数生成部、17・・・演算順序判定部(式変換部)、18・・・二項式生成部(式変換部)、19・・・式更新部

Claims (12)

  1. 設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、
    前記プログラム記憶部に3以上の入力変数を有する前記論理式が記憶されている場合、当該論理式を、2個の入力変数および1個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、
    前記中間変数生成部により中間変数が生成された場合、前記論理式を、前記中間変数を得るための二項式および前記中間変数から前記出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、
    前記式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、前記プログラム記憶部に記憶されている元の前記論理式を更新する式更新部と、
    前記プログラム記憶部に記憶されている論理式の前記出力変数、前記入力変数および前記中間変数のビット幅を決定するビット幅決定部と、
    前記出力変数のビット幅、前記入力変数のビット幅および前記中間変数のビット幅を記憶するビット幅記憶部と
    を有する演算プログラム変換装置。
  2. 前記中間変数生成部および前記式変換部は、
    中間変数を生成して前記プログラム記憶部に記憶されている前記3以上の入力変数を有する論理式を、当該論理式に含まれる乗除算演算を二項式化するように複数の論理式へ変換し、
    乗除算演算に二項式化のために生成された中間変数が、前記3以上の入力変数を有する論理式に含まれる加減算演算に係る入力変数より後に加減算されるように、前記プログラム記憶部に記憶されている論理式の加減算演算を二項式化して、前記論理式を複数の二項式へ変換する
    請求項1記載の演算プログラム変換装置。
  3. 前記プログラム記憶部から、前記プログラム記憶部に記憶される論理式を順番に取得する処理を、複数回繰り返す取得部を有し、
    前記取得部は、論理式に含まれる乗除算演算を二項式化するために、
    1回目の論理式の順次取得処理では、
    前記ビット幅決定部に、当該取得論理式の出力変数のビット幅と、当該乗除算演算に係る入力変数のビット幅とを決定させ、
    前記中間変数生成部および前記式変換部に、中間変数を生成して当該乗除算演算を二項式化させ、
    前記式更新部に、前記プログラム記憶部に記憶される論理式を更新させ、
    2回目の論理式の順次取得処理では、
    前記ビット幅決定部に、乗除算演算の前記二項式に含まれる中間変数のビット幅を決定させる
    請求項1または2記載の演算プログラム変換装置。
  4. 前記取得部は、論理式に含まれる加減算演算を二項式化するために、
    3回目の論理式の順次取得処理では、
    前記中間変数生成部および前記式変換部に、中間変数を生成して当該加減算演算を二項式化させ、
    前記式更新部に、前記プログラム記憶部に記憶される論理式を更新させ、
    4回目の論理式の順次取得処理では、
    前記ビット幅決定部に、前記ビット幅が決定されていない変数のビット幅を決定させる
    請求項3記載の演算プログラム変換装置。
  5. 前記中間変数生成部は、
    前記取得部が取得した論理式に乗除算の演算子のみが含まれる場合、当該乗除算の演算子より1個少ない数の中間変数を生成し、
    前記取得部が取得した論理式に乗除算の演算子および加減算の演算子が含まれる場合、当該乗除算の演算子と同じ数の中間変数を生成する
    請求項3記載の演算プログラム変換装置。
  6. 前記ビット幅決定部は、前記論理式の出力変数の許容誤差に基づいて、前記出力変数、前記入力変数および前記中間変数のビット幅を決定する
    請求項1記載の演算プログラム変換装置。
  7. 前記ビット幅決定部は、前記プログラム記憶部に記憶される前記論理式が複数の論理式へ更新される前に、前記プログラム記憶部に記憶されている論理式を用いて前記出力変数のビット幅、および乗除算演算に係る前記入力変数のビット幅を決定し、
    前記ビット幅記憶部は、前記ビット幅決定部が決定したビット幅を記憶し、
    前記式変換部は、加減算演算を二項式化する場合、前記ビット幅記憶部にビット幅が記憶されていない出力変数を前記中間変数として特定する
    請求項1記載の演算プログラム変換装置。
  8. 前記式変換部は、
    前記取得論理式に含まれる複数の入力変数について、ビット幅が小さい入力変数よりビット幅が大きい入力変数が後の二項式で演算されるように、前記複数の二項式に対して前記複数の入力変数を割り当てる
    請求項1記載の演算プログラム変換装置。
  9. 前記ビット幅決定部は、
    前記取得論理式の入力変数のビット幅を一律に削減しながらシミュレーションを繰り返して許容誤差が初めて得られなくなる入力変数の誤差外ビット数を得た後、
    1個の入力変数の前記誤差外ビット数に1ビットを付加してシミュレーションを実行することを、各入力変数について繰り返し、出力変数の誤差が最大になった入力変数のビット幅を、当該シミュレーションでのビット幅に決定する
    請求項1記載の演算プログラム変換装置。
  10. 前記ビット幅決定部は、
    既にビット幅を決定した入力変数および着目する入力変数以外の入力変数については、浮動小数点型の変数としてシミュレーションを実行する
    請求項9記載の演算プログラム変換装置。
  11. プログラム記憶部に記憶された演算プログラムを構成し、3以上の入力変数、演算子および出力変数からなる論理式を、2個の入力変数および1個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成するステップと、
    前記論理式を、前記中間変数を得るための二項式および前記中間変数から前記出力変数を得る二項式を含む複数の二項式へ変換するステップと、
    変換された前記複数の二項式により、前記プログラム記憶部に記憶されている元の前記論理式を更新するステップと、
    前記プログラム記憶部に記憶されている論理式に含まれる前記出力変数、前記入力変数および前記中間変数のビット幅を決定するステップと、
    前記出力変数のビット幅、前記入力変数のビット幅および前記中間変数のビット幅をビット幅記憶部に記憶させるステップと
    を有する演算プログラム変換方法。
  12. 設計する回路を、複数の入力変数、演算子および出力変数からなる論理式で記述した演算プログラムを記憶するプログラム記憶部と、
    前記プログラム記憶部に3以上の入力変数を有する前記論理式が記憶されている場合、当該論理式を、2個の入力変数および1個の出力変数からなる複数の二項式へ変換するために使用する中間変数を生成する中間変数生成部と、
    前記中間変数生成部により中間変数が生成された場合、前記論理式を、前記中間変数を得るための二項式および前記中間変数から前記出力変数を得る二項式を含む複数の二項式へ変換する式変換部と、
    前記式変換部の変換処理により複数の二項式が生成された場合、当該複数の二項式により、前記プログラム記憶部に記憶されている元の前記論理式を更新する式更新部と、
    前記プログラム記憶部に記憶されている論理式の前記出力変数、前記入力変数および前記中間変数のビット幅を決定するビット幅決定部と、
    前記出力変数のビット幅、前記入力変数のビット幅および前記中間変数のビット幅を記憶するビット幅記憶部と
    をコンピュータに実現させるプログラム。
JP2009010015A 2009-01-20 2009-01-20 演算プログラム変換装置、演算プログラム変換方法およびプログラム Pending JP2010170196A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009010015A JP2010170196A (ja) 2009-01-20 2009-01-20 演算プログラム変換装置、演算プログラム変換方法およびプログラム
US12/689,579 US8434036B2 (en) 2009-01-20 2010-01-19 Arithmetic program conversion apparatus, arithmetic program conversion method, and program
CN2010100046859A CN101782894B (zh) 2009-01-20 2010-01-20 算术程序转换装置、算术程序转换方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009010015A JP2010170196A (ja) 2009-01-20 2009-01-20 演算プログラム変換装置、演算プログラム変換方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2010170196A true JP2010170196A (ja) 2010-08-05

Family

ID=42337873

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009010015A Pending JP2010170196A (ja) 2009-01-20 2009-01-20 演算プログラム変換装置、演算プログラム変換方法およびプログラム

Country Status (3)

Country Link
US (1) US8434036B2 (ja)
JP (1) JP2010170196A (ja)
CN (1) CN101782894B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102348795B1 (ko) * 2020-11-02 2022-01-07 주식회사 바움 부동 소수점 방식에서 고정 소수점 방식으로의 변환 수행시 비트 폭 최적화 방법

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8418118B2 (en) * 2010-10-18 2013-04-09 Anand Pandurangan Architecture guided optimal system precision definition algorithm for custom integrated circuit
EP2960731A1 (de) * 2014-06-26 2015-12-30 dSPACE digital signal processing and control engineering GmbH Verfahren zur Unterbrechung der Ausführung eines Gesamtprogramms eines elektronischen Steuergeräts
DE102015009454A1 (de) 2014-07-29 2016-02-04 Micronas Gmbh Elektrisches Bauelement
JP6586735B2 (ja) 2015-02-20 2019-10-09 セイコーエプソン株式会社 回路装置、物理量検出装置、電子機器及び移動体
JP6492739B2 (ja) * 2015-02-20 2019-04-03 セイコーエプソン株式会社 回路装置、物理量検出装置、電子機器及び移動体
CN105404497B (zh) * 2015-10-26 2018-05-25 北京锐安科技有限公司 一种逻辑表达式的解析方法及装置
CN106020818A (zh) * 2016-05-16 2016-10-12 珠海格力电器股份有限公司 计算逻辑生成方法和装置
CN107967246A (zh) * 2016-10-19 2018-04-27 航天信息股份有限公司 报表计算方法以及装置
JP7044397B2 (ja) * 2017-07-19 2022-03-30 国立大学法人横浜国立大学 解探索装置およびプログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4389706A (en) * 1972-05-03 1983-06-21 Westinghouse Electric Corp. Digital computer monitored and/or operated system or process which is structured for operation with an improved automatic programming process and system
US4227245A (en) * 1972-06-01 1980-10-07 Westinghouse Electric Corp. Digital computer monitored system or process which is configured with the aid of an improved automatic programming system
US4215406A (en) * 1972-08-22 1980-07-29 Westinghouse Electric Corp. Digital computer monitored and/or operated system or process which is structured for operation with an improved automatic programming process and system
JP2509279B2 (ja) 1988-02-16 1996-06-19 富士通株式会社 浮動小数点数一固定小数点数変換装置
JP2001043067A (ja) 1999-07-30 2001-02-16 Hitachi Ltd 演算装置
US6745160B1 (en) * 1999-10-08 2004-06-01 Nec Corporation Verification of scheduling in the presence of loops using uninterpreted symbolic simulation
JP4086459B2 (ja) 2000-11-13 2008-05-14 Necエレクトロニクス株式会社 固定小数点データ生成方法及び固定小数点データ生成回路
US7457838B2 (en) * 2003-12-03 2008-11-25 Marvell World Trade Ltd. Methods and apparatus for performing calculations using reduced-width data
JP4861087B2 (ja) 2006-07-31 2012-01-25 富士通株式会社 演算プログラム変換装置、演算プログラム変換プログラム、演算プログラム変換方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102348795B1 (ko) * 2020-11-02 2022-01-07 주식회사 바움 부동 소수점 방식에서 고정 소수점 방식으로의 변환 수행시 비트 폭 최적화 방법

Also Published As

Publication number Publication date
US8434036B2 (en) 2013-04-30
CN101782894B (zh) 2012-12-05
CN101782894A (zh) 2010-07-21
US20100185836A1 (en) 2010-07-22

Similar Documents

Publication Publication Date Title
JP2010170196A (ja) 演算プログラム変換装置、演算プログラム変換方法およびプログラム
Rushton VHDL for logic synthesis
JP4988758B2 (ja) マルチサイクル・クロック・ゲーティングのための方法および装置
US8302041B1 (en) Implementation flow for electronic circuit designs using choice networks
JP4492803B2 (ja) 動作合成装置及びプログラム
Vakili et al. Enhanced precision analysis for accuracy-aware bit-width optimization using affine arithmetic
JP2007034887A (ja) ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置
JP5014920B2 (ja) 回路設計方法、ならびにその方法により製造される集積回路
JP5218063B2 (ja) 命令オペコード生成システム
JP2009181446A (ja) プログラム生成装置およびブロック線図生成装置
JP5157534B2 (ja) 動作合成装置、および、プログラム
WO2004036463A9 (ja) コンパイラ及び論理回路の設計方法
JP5228546B2 (ja) 動作合成装置、および、プログラム
TW201218007A (en) Architecture guided optimal system precision definition algorithm for custom integrated circuit
JP2001209670A (ja) 高位合成方法、および、高位合成方法の実施に使用される記録媒体
JP3134132B2 (ja) 論理回路自動生成装置
JP2021114117A (ja) 情報処理プログラム、情報処理方法および情報処理装置
US6877140B1 (en) Method and system for generating a schematic representing bus structures
JP2006190085A (ja) デジタル回路のモデリング方法及び設計方法
JP5267376B2 (ja) 動作合成装置、動作合成方法、ならびに、プログラム
JP5332598B2 (ja) 設計方法及び設計装置
WO2021161427A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JP6398729B2 (ja) 設計支援装置、および設計支援方法
JP3542538B2 (ja) プログラム最適化処理装置及びプログラム最適化方法
JP6257421B2 (ja) 回路設計支援装置および回路設計支援プログラム