JP3765923B2 - ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 - Google Patents
ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 Download PDFInfo
- Publication number
- JP3765923B2 JP3765923B2 JP04588798A JP4588798A JP3765923B2 JP 3765923 B2 JP3765923 B2 JP 3765923B2 JP 04588798 A JP04588798 A JP 04588798A JP 4588798 A JP4588798 A JP 4588798A JP 3765923 B2 JP3765923 B2 JP 3765923B2
- Authority
- JP
- Japan
- Prior art keywords
- statement
- flow graph
- control flow
- cfg
- partial
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
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)
- Semiconductor Integrated Circuits (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、動作記述からハードワイアードロジックのディジタル回路を自動合成する、LSIの高位合成技術に関するものである。
【0002】
【従来の技術】
従来、ASIC(Application Specific Integrated Circuit:特定用途向けIC)の設計等、短期間の設計を要求される場合に特に有効な技術として、高位合成技術が知られている。
【0003】
高位合成とは、ハードウェアの構造に関する情報を含まずに処理のアルゴリズムのみを記述した動作記述から、回路を自動的に合成する技術である。なお、従来の高位合成技術の詳細を記した文献としては、High-Level Synthesis, Kluwer
Academic Publishers等がある。
【0004】
以下、従来の高位合成技術を用いて、動作記述から回路を自動的に合成する過程について簡単に説明する。
〔1.動作記述からCFGへの変換〕
高位合成においては、まず、動作記述の実行の制御の流れ(コントロールフロー)を解析し、動作記述を実行の制御の流れを表現するコントロールフローグラフ(CFG:Control Flow Graph)と呼ばれるモデルに変換する。
【0005】
CFGは、プログラムのフローチャートに類似したグラフである。例えば、図23(a)に示す動作記述は、図23(b)に示すCFGに変換される。
【0006】
CFGは、図23(a)の動作記述において条件分岐を含まない動作のシーケンス(1)・(2)・(3)・(4)を、図23(b)に示すように、部分動作節点(5)・(6)・(7)・(8)で表す。
【0007】
また、CFGは、図23(a)の動作記述の条件文(9)を、図23(b)に示すように、分岐節点(10)およびマージ節点(11)で表し、実行制御の流れをコントロールフロー枝(12)ないし(19)で表す。
【0008】
分岐節点(10)には条件文(9)の条件式が対応し、条件が成立する時は分岐節点(10)の真側の出力(14)に制御が移り、条件が成立しない時は分岐節点(10)の偽側の出力(15)に制御が移る。
【0009】
これを、条件が成立する場合、分岐節点の真側の出力に接続されたコントロールフロー枝がアクティブになると言い、条件が成立しない場合、分岐節点の偽側の出力に接続されたコントロールフロー枝がアクティブになると言う。
【0010】
なお、図23(b)に示すCFGでは、分岐節点(10)の出力(14)・(15)において、黒丸のある方が真側の出力を表している。後述する他のCFGにおいても同様に、各分岐節点において黒丸のある方が真側の出力を表すものとする。
〔2.CFGからCDFGへの変換〕
前述のように動作記述からCFGへの変換が行われると、次に、CFGのデータ依存(データフロー)を解析し、CFGを、演算間の実行順序の依存関係を表現するコントロールデータフローグラフ(CDFG:Control Data Flow Graph )と呼ばれるモデルに変換する。
【0011】
例えば、図23(b)に示すCFGは、図24に示すCDFGに変換される。
【0012】
CDFGは、演算(20)ないし(25)およびセレクタ(26)を節点とし、データ依存関係および制御依存関係を枝で表したグラフである。なお、演算(20)ないし(24)は算術演算、演算(25)は条件演算である。
【0013】
条件演算である演算(25)は、条件判定の真偽を表す制御信号(27)を出力し、セレクタ(26)は、制御信号(27)の値によって2つの入力のうち1つを選択し、出力する。
【0014】
図23(b)のCFGの部分動作節点(5)におけるb=a*dの乗算演算は、a=b*cの演算結果に依存するので、CDFGにおける演算(20)と演算(21)との間には、データ依存関係を表す枝が存在する。
【0015】
演算(21)と演算(22)とは、互いにデータ依存がないので並列に実行できる。一方、演算(20)と演算(21)とは、互いにデータ依存があるので、並列には実行できない。
【0016】
このように、高位合成において動作記述をCDFGに変換する理由は、CDFGは、動作記述に記述された動作を保証した上で、生成されるハードウェアの並列化の余地を残した動作表現であるからである。
〔3.スケジューリング〕
CFGからCDFGへの変換が終了すると、スケジューリングが行われる。スケジューリングとは、CDFGにおける入出力、演算、およびセレクタによる選択動作が回路上で実行される相対的な時間を決定する処理である。
【0017】
図25に、図24に示すCDFGをスケジューリングした結果を示す。このスケジューリング結果では、入力b・c・e・f、出力a、および演算(30)・(31)・(35)がステップs1に実行され、入力d、出力b・d・g、演算(32)・(33)・(36)、およびセレクタによる選択動作(34)がステップs2に実行される。
〔4.アロケーション〕
アロケーションとは、スケジューリング結果を受けて、CDFGの演算節点に演算器を割り当て、データ選択のためのマルチプレクサと、データ記憶のためのレジスタとを生成すると共に、これらの演算器、レジスタ、およびマルチプレクサを制御するためのコントローラを生成し、それぞれを互いに接続することにより回路を合成する処理である。
【0018】
図26に、図25に示すスケジューリング結果からアロケーションを経て合成された回路を示す。
〔5.高位合成の動作記述言語〕
高位合成の動作記述には、通常、多くのプログラミング言語同様、手続き型言語が用いられる。これは、人間の思考が逐次的であり、手続き型の言語によって記述された動作は人間にとって理解し易いためである。代表的な手続き型の動作記述言語として、VHDL言語がある。従来の多くの合成ツールが、動作記述言語としてVHDL言語を採用している。
【0019】
しかし、VHDL言語は、一般のプログラミング言語に比べて普及していないので、VHDL言語を習得していないエンジニアがハードウェアを設計する場合には、他のプログラミング言語を習得しているか否かに関わらず、VHDL言語を新たに習得する必要がある。
【0020】
また、ハードウェアの設計に際しては、まず、ソフトウェアによりアルゴリズムを検証し、その後、動作記述言語によりハードウェアを実現する、という手法が採られており、ソフトウェアのプログラミング言語からVHDL言語への、人手による書き換えが必要である。
【0021】
手続き型プログラミング言語の代表的なものとしてC言語がある。C言語は、ソフトウェアの記述言語として広く用いられており、多くのエンジニアが既に理解しているため、高位合成の動作記述言語としても適していると考えられる。
【0022】
高位合成の動作記述言語にC言語を用いれば、ソフトウェアによるアルゴリズムの検証に用いられたC言語をそのまま高位合成の入力とすることができ、プログラミング言語からVHDL言語への人手による書き換えが不要になる。
【0023】
VHDL言語にはないC言語の特徴として、実行の制御を記述における別の場所に分散させるgoto文およびswitch文をサポートしている点が挙げられる。
【0024】
goto文は、gotoの引数として与えられたジャンプ先ラベルと同じラベルが付けられた記述部分へジャンプする命令である。goto文は、if文の従属文として使用することにより、条件に応じてジャンプする命令として用いることができる。
【0025】
switch文は、条件式の値に応じて各caseから始まる記述部分へ実行の制御を分散させる命令である。switch文の従属副文においてbreak文が実行されれば、switch文は終了する。
【0026】
複数の実行パスに同じ処理を含む場合、goto文やswitch文を用いて実行の制御を分岐させることにより、複数の実行パスで動作記述を共有することができ、動作を簡潔に記述することができる。
【0027】
VHDL言語にも、switch文と類似した機能を持つcase文があるが、VHDL言語のcase文は、条件式の値に従って、指定されている処理文のいずれか1つを実行するものであり、switch文とは本質的に異なる。
【0028】
例えば、図12(a)のように、break文が条件により実行されたり、各caseにbreak文を含まない場合の処理と同等の処理をVHDL言語のcase文で実現することは、従来の技術ではできない。
【0029】
【発明が解決しようとする課題】
高位合成の動作記述言語としてC言語などのプログラミング言語を採用する場合、switch文、if−goto文などの実行制御分岐命令をサポートする必要がある。高位合成システムは、実行制御分岐命令の動作を実行する回路を生成できなければならない。
【0030】
ノイマン型プロセッサにおいては、switch文、if−goto文のような実行制御分岐命令は、プロセッサのジャンプ命令を用いて実行される。ノイマン型プロセッサのように、命令をメモリから順次読み出して、その命令の動作を実行するストアドプログラム方式では、ジャンプ命令は、プログラムカウンタにジャンプ先アドレスを代入することによって簡単に実行できる。
【0031】
しかし、高位合成により生成される回路においては、動作記述は、ストアドプログラム方式の回路上でソフトウェアとして実行されるのではなく、ハードワイアードの回路上で、直接ハードウェアの動作として実現される。ハードワイアード方式の回路においてはプログラムカウンタは存在せず、switch文あるいはif−goto文のような実行制御分岐命令を実行するためには、それらの命令が実行された場合と同じ動作を、ハードワイアードの回路上で実行する必要がある。
【0032】
そのためには、実行制御分岐命令を含む動作記述の動作を、分岐節点、マージ節点を用いてCFGで表現する必要がある。実行制御分岐命令を含む動作記述の動作を、分岐節点、マージ節点を用いてCFGで表現できれば、従来技術であるCFGからのCDFGへの変換方法、スケジューリング方法、アロケーション方法により、実行制御分岐命令がノイマン型プロセッサで実行された場合と同じ動作を実行する、ハードワイアード方式の回路を生成することができる。CFGのCDFGへの変換方法、CDFGのスケジューリング方法、アロケーション方法は、高位合成の分野では周知である(High-Level Synthesis, Kluwer Academic Publishers参照)。
【0033】
一つの動作記述の動作を表現するCFGは、複数存在し得る。例えば、図3(b)に示すCFGと図27に示すCFGは共に、図3(a)に示す動作記述の動作を表現するCFGである。図3(b)に示すCFGと図27に示すCFGとを比較すると、図27に示すCFGでは、b=a*2の動作に対応する部分動作が複製されているので、図3(b)に示すCFGよりも効率が悪い。
【0034】
また、図12(b)のCFGと図28のCFGとは共に、図12(a)の動作記述の動作を表現するCFGである。図12(b)のCFGと図28のCFGとを比較すると、図28のCFGでは、f=(d+e)*6の動作に対応する部分動作が複製されているので、図12(b)に示すCFGよりも効率が悪い。
【0035】
高速な処理を必要とする回路においては、CFGの分岐において、真のパスおよび偽のパスの双方を実行し、分岐条件が決定した後に、必要な値を選択するという方法をとる。
【0036】
例えば、図23(b)のCFGにおいて、部分動作節点(6)・(7)で表される2つの動作は、分岐節点(10)に対応する条件に応じてどちらか一方しか必要ないが、処理を2ステップで終了する図25のスケジューリング結果においては、演算(33)による条件判定が、動作(6)・(7)に対応する演算(30)・(31)よりも後に行われるため、演算(30)・(31)の双方を実行しておく必要がある。
【0037】
処理を2ステップで終わらせるためには、演算(30)・(31)をステップs1で実行する必要があるため、演算(30)・(31)では演算器の共有ができない。このため、図25のスケジューリング結果から生成された図26の回路においては、演算(30)・(31)を同時に実行するための1つの加算器と1つの減算器とが存在することとなる。
【0038】
一方、条件判定が、動作(6)・(7)に対応する演算(30)・(31)よりも前に行われれば、演算(30)・(31)はどちらか一方しか実行しなくても良いため、演算器を共有してハードウェアを削減できるが、処理を2ステップで終わらせることができなくなる。
【0039】
上述のように、真のパスおよび偽のパスの双方を実行し、分岐条件が決定した後に必要な値を選択する方法をとる場合、真のパスと偽のパスとの間で演算器の共有が行えないため、前記のようにCFGにおける部分動作の複製が生じると、複製された部分動作間で演算器の共有が行えずに回路の面積が大きくなるという問題が生じる。よって、できるだけ、このような複製のないCFGを生成する必要がある。
【0040】
なお、本発明に関連する技術として、例えば、特許番号第2500079号の特許公報に開示されたプログラムの最適化方法等がある。ただし、上記公報に開示された方法は、ストアドプログラム方式のノイマン型プロセッサでの命令実行を前提として、switch文等のマルチウェイ分岐命令を含むソフトウェアプログラムの実行パフォーマンスを最適化するコンパイラ技術であり、少なくとも、ハードワイアードの回路上での動作記述の動作の実現を前提とした高位合成技術ではない点において、本発明と相違する。
【0041】
本発明の目的は、if−goto文、switch文の動作を、前記従来技術のようにストアドプログラム方式のノイマン型プロセッサ上で実行するのではなく、if−goto文、switch文の動作を実行するハードワイアードの回路を合成することを目的としている。さらに、前記したように、真のパスおよび偽のパスの双方を実行し、分岐条件が決定した後に必要な値を選択する方法をとる場合においても、効率的な回路が生成されるよう、部分動作の複製のないCFGを生成することを目的とする。
【0042】
【課題を解決するための手段】
上記の課題を解決するために、請求項1記載のハードウェア合成方法は、分割手段、部分CFG生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたCFG生成手段と、CDFG生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、
上記CFG生成手段が、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、上記CDFG生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0043】
上記の方法によれば、ステップ(a)により、if−goto文を含む動作記述を、分岐節点およびマージ節点を用いたコントロールフローグラフで表現できる。このコントロールフローグラフに基づいてステップ(b)ないし(d)を順次実行することにより、上記コントロールフローグラフをコントロールデータフローグラフへ変換し、このコントロールデータフローグラフに基づいたスケジューリングおよびアロケーションを経て、if−goto文の動作を実行するハードワイアード回路を合成することができる。すなわち、高位合成の動作記述言語によって、if−goto文をサポートすることが可能となる。
【0044】
さらに、上記ハードウェア合成方法は、上記ステップ(a)が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0045】
上記の方法によれば、if−goto文を含む動作記述を複製のないコントロールフローグラフに変換することができ、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【0046】
請求項2記載のハードウェア合成方法は、分割手段、部分CFG生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたCFG生成手段と、CDFG生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、上記CFG生成手段が、C言語のswitch文を含むを含む動作記述を、コントロールフローグラフに変換するステップ(a)と、上記CDFG生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)は、上記分割手段が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割するステップと、上記部分CFG生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、上記分岐節点生成手段が、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、上記マージ節点生成手段が、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0047】
上記の方法によれば、switch文を含む動作記述を、分岐節点およびマージ節点を用いたコントロールフローグラフで表現できる。これにより、switch文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でswitch文をサポートすることが可能となる。
【0048】
さらに、上記の方法によれば、switch文を含む動作記述を複製のないコントロールフローグラフに変換することができ、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【0049】
請求項3記載のハードウェア合成装置は、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するCFG生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するCDFG生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記CFG生成手段が、上記動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ジ ャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とする。
【0050】
上記の構成によれば、CDF生成手段により、if−goto文を含む動作記述が、分岐節点およびマージ節点を用いたコントロールフローグラフで表現される。このコントロールフローグラフに基づいて、CDFG生成手段、スケジューリング手段およびアロケーション手段が、上記コントロールフローグラフをコントロールデータフローグラフへ変換し、このコントロールデータフローグラフに基づいたスケジューリングおよびアロケーションを行うことにより、if−goto文の動作を実行するハードワイアード回路を合成することができる。すなわち、高位合成の動作記述言語によって、if−goto文をサポートするハードウェア合成装置が実現される。
【0051】
また、上記ハードウェア合成装置は、CFG生成手段が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とする。
【0052】
上記の構成によれば、if−goto文を含む動作記述を複製のないコントロールフローグラフに変換することができる。これにより、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【0053】
請求項4記載のハードウェア合成装置は、C言語のswitch文を含む動作記述をコントロールフローグラフに変換するCFG生成手段と、コントロールフ ローグラフをコントロールデータフローグラフに変換するCDFG生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記CFG生成手段が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とする。
【0054】
上記の構成によれば、switch文を含む動作記述を、分岐節点およびマージ節点を用いたコントロールフローグラフで表現できる。これにより、switch文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でswitch文をサポートすることが可能となる。
【0055】
さらに、上記の構成によれば、switch文を含む動作記述を複製のないコントロールフローグラフに変換することができる。これにより、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができる。
【0056】
請求項5記載の記録媒体は、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0057】
請求項6記載の記録媒体は、C言語のswitch文を含む動作記述をコントロールフローグラフに変換するステップ(a)と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0058】
【発明の実施の形態】
本発明の実施の一形態について図1ないし図22に基づいて説明すれば、以下のとおりである。
【0059】
最初に、高位合成技術を用いて、実行制御分岐命令を含む動作記述からハードウェア合成を行うためのハードウェア合成装置の概略構成について、図2を参照しながら説明する。
【0060】
ハードウェア合成装置は、図2に示すように、CFG生成部1(CFG生成手段)と、CDFG生成部2(CDFG生成手段)と、スケジューリング部3(スケジューリング手段)と、アロケーション部4(アロケーション手段)とを備えている。
【0061】
上記ハードウェア合成装置において、図1に示すように、CFG生成部1が、実行制御分岐命令を含む動作記述を、コントロールフローグラフ(CFG)へ変換する処理を行う(ステップ100、以下、S100のように略記する)。なお動作記述からCFGへの変換処理の内容については、後に、if−goto文を含む動作記述、およびswitch文を含む動作記述を例に挙げ、具体的に説明する。
【0062】
次に、CDFG生成部2が、CFGからコントロールデータフローグラフ(CDFG)への変換処理を行い(S101)、スケジューリング部3が、CDFGにおける入出力、演算、セレクタによる選択動作が回路上で実行される相対的な時間を決定するスケジューリング処理を行う(S102)。
【0063】
最後に、アロケーション部4が、スケジューリング結果を受けて、演算器割り当て、レジスタ割り当て、およびコントローラの生成等の処理を行うアロケーション処理を実行する(S103)。
【0064】
以下、if−goto文を含む動作記述、およびswitch文を含む動作記述からハードウェアを合成する技術について、より具体的な説明を行う。
〔if−goto文を含む動作記述からのハードウェアの合成〕
ここでは、図3(a)に示すような、if−goto文を含む動作記述に対して、if−goto文を含む動作記述からのハードウェア合成方法のアルゴリズムを適用し、ハードウェアを合成する装置および方法について説明する。なお、図3(a)において、EOFは動作記述の終了点を表す。
【0065】
図4に示すように、if−goto文を含む動作記述からのハードウェア合成は、まず、if−goto文を含む動作記述からCFGへの変換処理を行い(S104)、その後、変換されたCFGに基づいて、S101ないしS103の処理を行う。
【0066】
上記したS104の処理を実行するために、本実施形態に係るハードウェア合成装置は、図2に示すように、CFG生成部1に、動作記述をif−goto文またはジャンプ先ラベルで区切られた部分記述に分割する分割部5と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成部6と、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成部7と、ジャンプ先ラベルに対応するマージ節点を生成すると共にコントロールフロー枝をマージするマージ節点生成部8とを備えている。
【0067】
ここで、上記CFG生成部1にて実行されるS104のif−goto文を含む動作記述からのCFGへの変換処理の内容について、図3(a)に示す動作記述、図5に示すフローチャートおよび図6(a)ないし(g)を参照しながら説明する。
【0068】
まず、前処理を行う(S105)。この前処理において、図6(a)に示すように、CFGの入力節点(200)を生成し、接続ポイントを入力節点(200)とする。接続ポイントとは、次に接続すべきコントロールフロー枝を記憶するための変数である。また、サーチ点を動作記述の先頭とする。すなわち、ここでのサーチ点は、図3(a)に示す動作記述の先頭にあるif−goto文(201)となる。なお、サーチ点とは、動作記述をサーチするポイントを記憶するための変数である。
【0069】
次に、動作記述を部分記述へ分割する処理を行う(S106)。この処理において、if−goto文、ジャンプ先ラベル、または動作記述終了点(EOF)が見つかるまでサーチ点を更新しながら動作記述をサーチし、サーチされた動作記述を部分記述とする。ここでは、既にサーチ点がif−goto文(201)を指しているため、部分記述は空となり、サーチ点はif−goto文(201)のままとなる。
【0070】
続いて、抽出された部分記述から部分CFGを生成する(S107)。ここでは部分記述が空なので、部分CFGは生成されず、接続ポイントは入力節点(200)のままとなる。
【0071】
さらに、サーチ点がif−goto文(201)を指しているので、if−goto文処理を行う(S108)。本処理により、if−goto文に対応する分岐節点が生成され、コントロールフローが分岐されるため、実行制御分岐命令であるif−goto文の動作を、分岐節点を用いてCFGで表現することが可能となる。
【0072】
ここで、図7を参照しながら、S108のif−goto文処理の内容について説明する。
【0073】
まず、if−goto文に対応するコントロールフロー分岐処理を行う(S111)。すなわち、図6(b)に示すように分岐節点(202)を生成し、その入力を接続ポイント(200)に接続する。また、接続ポイントを分岐節点(202)の偽側の出力(203)として、分岐節点(202)にif文の条件式(d=2)を対応させる。
【0074】
次に、図6(b)に示すように、分岐節点(202)の真側の出力(204)を、ジャンプ先ラベル(205)と対応させて記憶する(S112)。記憶された分岐節点(202)の出力は、後に、ジャンプ先ラベル(205)に対応するマージ節点(214)にてマージされる。
【0075】
続いて、サーチ点をif−goto文(201)の次の命令である動作記述(206)へ移動させる(S113)。以上の処理により、S108のif−goto文処理が終了する。
【0076】
次に、図5に示すようにS106へ処理が移行し、再び、動作記述を部分記述へ分割する処理が行われる。この処理において、前述のように、if−goto文、ジャンプ先ラベル、または動作記述終了点が見つかるまで、サーチ点を更新しながら動作記述がサーチされる。
【0077】
今回のサーチでは、サーチされた動作記述(206)は部分記述とされ、サーチ点は、次に見つかったif−goto文(207)を指す。
【0078】
そして、S107の処理において、図6(c)に示すように、抽出された部分記述(206)から部分CFG(208)を生成し、部分CFG(208)の入力を接続ポイント(203)に接続する。また、接続ポイントを、部分CFG(208)の出力(209)とする。
【0079】
次に、サーチ点がif−goto文(207)を指しているので、再び、if−goto文処理(S108)を行う。ここでは、前記したif−goto文処理と同様にして、まず、S111で、図6(d)に示すように、分岐節点(210)を生成し、その入力を接続ポイント(209)に接続する。また、接続ポイントを、分岐節点(210)の偽側の出力(211)とし、分岐節点(210)に、if文の条件式(a=3)を対応させる。
【0080】
次に、S112で、図6(d)に示すように、分岐節点(210)の真側の出力(212)を、ジャンプ先ラベル(213)と対応させて記憶する。さらに、S113で、サーチ点をif−goto文(207)の次の命令であるジャンプ先ラベル(205)とする。
【0081】
上述のS108におけるif−goto文処理が終了すると、再びS106へ戻り、動作記述を部分記述へ分割する処理を行う。ここでは、既にサーチ点がジャンプ先ラベル(205)を指しているため、部分記述は空となり、サーチ点はジャンプ先ラベル(205)のままとなる。
【0082】
次に、S107で、抽出された部分記述から部分CFGを生成する。ここでは部分記述が空なので、部分CFGは生成されず、接続ポイントは分岐節点(210)の偽側の出力(211)のままとなる。
【0083】
ここで、サーチ点がジャンプ先ラベル(205)を指しているので、ジャンプ先ラベル処理(S109)を行う。ジャンプ先ラベル処理において、マージ節点が生成され、そのジャンプ先ラベルへのコントロールフローがマージされるため、実行制御分岐命令であるif−goto文の動作を、マージ節点を用いてCFGで表現することが可能となる。
【0084】
ここで、S109のジャンプ先ラベル処理の内容を、図8のフローチャートを参照しながら説明する。
【0085】
まず、図6(e)に示すように、マージ節点(214)を生成し、マージ節点(214)の入力に接続ポイント(211)、記憶されているそのジャンプ先ラベル(205)に対応する分岐節点(202)の真側の出力(204)を接続する(S114)。また、この時同時に、接続ポイントをマージ節点(214)の出力(215)とする。
【0086】
次に、サーチ点をジャンプ先ラベル(205)の次の命令である動作記述(216)とする(S115)。
【0087】
以下、同様にして、図6(f)に示すように部分CFG(217)を生成し、部分CFG(217)の入力を接続ポイント(215)に接続し、接続ポイントを部分CFG(217)の出力(218)とする。また、マージ節点(219)を生成し、マージ節点(219)の入力に接続ポイント(218)、記憶されているそのジャンプ先ラベル(213)に対応する分岐節点(210)の真側の出力(212)を接続し、接続ポイントを、マージ節点(219)の出力(220)とする。
【0088】
最後に、後処理を行う(S110)。この後処理において、図6(g)に示すように、CFGの出力節点(222)を生成し、出力節点(222)に接続ポイントである出力(220)を接続する。
【0089】
以上のように、動作記述からCFGが生成された後、周知の方法により、CFGからCDFGへの変換(S101)、スケジューリング処理(S102)、アロケーション処理(S103)を行うことにより、ハードウェアの合成が完了する。なお、スケジューリング処理の代表的なものとしては、フォースディレクティッド法、アロケーション処理の代表的なものとしては、クリーク分割を用いた方法等がある(High-Level Synthesis, Kluwer Academic Publishers参照)。
【0090】
図9に、図3(b)に示すCFGから変換されたCDFGを、図10にスケジューリング結果を、図11に、アロケーション処理により生成された最終的なハードウェアを示す。
〔switch文を含む動作記述からのハードウェアの合成〕
次に、図12(a)に示すような、switch文を含む動作記述に対して、switch文を含む動作記述からのハードウェア合成方法のアルゴリズムを適用し、ハードウェアを合成する方法について説明する。
【0091】
図13に示すように、switch文を含む動作記述からのハードウェア合成では、まず、switch文を含む動作記述からCFGへの変換処理を行い(S116)、その後、変換されたCFGに基づいて、S101ないしS103の処理を行う。
【0092】
上記S116の処理を実行するために、本実施形態に係るハードウェア合成装置は、CFG生成部1の分割部6が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割する処理を行い、分岐節点生成部7が、switch文の条件式またはif−break文に対応する分岐節点を生成すると共にコントロールフロー枝を分岐する処理を行い、マージ節点生成部8が、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージする処理を行う。
【0093】
ここで、S116におけるswitch文を含む動作記述からのCFGへの変換処理の詳細な内容について、図14に示すフローチャートおよび図15(a)ないし(i)を参照しながら説明する。
【0094】
まず、前処理を行う(S117)。この前処理において、図15(a)に示すように、CFGの入力節点(300)および出力節点(329)を生成する。
【0095】
次に、S118で、動作記述からswitch構文を抽出する。ここでは、図12(a)に示す動作記述はswitch構文のみからなるため、この動作記述そのもの全体が、switch構文として抽出される。
【0096】
続いて、S119では、switch構文以外の記述部分に対して部分CFGを生成する。ここでは、図12(a)に示す動作記述がswitch構文のみからなるため、switch構文以外の記述部分に対する部分CFGは生成されない。
【0097】
続くS120で、抽出されたswitch構文、すなわち図12(a)に示す動作記述そのものに対し、図15(b)に示すように、部分CFG(332)を生成する。
【0098】
なお、ここで、上記S120における部分CFGの生成処理の内容について、図16を参照しながら説明する。
【0099】
まず、S122において、図15(b)に示すように、分岐節点(303)・(307)を生成し、それらを接続することにより、部分CFG(330)を生成する。これにより、図12(a)に示す動作記述の条件式(301)における変数aが、各case定数(302)・(306)に一致する場合にそれぞれアクティブとなるコントロールフロー枝(305)・(309)と、条件式(301)における変数aがどのcase定数とも一致しない場合にアクティブとなるコントロールフロー枝(308)とを出力とする部分CFG(330)が生成される。
【0100】
また、switch文全体に対応する部分CFG(332)の入力を、ここで生成された部分CFG(330)の入力(331)とする。これにより、switch文の動作を分岐節点を用いて表現したCFGを生成することができる。
【0101】
次に、S123で、サーチ点をswitch文の従属副文の先頭のcase定数(302)とし、接続ポイントをemptyとする。
【0102】
S124で、case定数、if−break文、break文、または従属副文終了点が見つかるまでサーチ点を更新しながら動作記述をサーチし、サーチされた動作記述を部分記述とする。ここでは既にサーチ点がcase定数(302)を指しているため、部分記述は空となり、サーチ点はcase定数(302)のままとなる。
【0103】
S125で、抽出された部分記述から部分CFGを生成する。ここでは、部分記述が空なので、部分CFGは生成されず、接続ポイントはemptyのままとなる。
【0104】
上記のS124およびS125により、分割された部分記述には、ただ一つの部分CFGが生成されるため、各部分記述と部分CFGとが1対1に対応し、複製のないCFGを生成することができる。
【0105】
続いて、サーチ点がcase定数(302)を指すので、S126に移行し、case定数処理を行う。ここで、S126のcase定数処理の内容について、図17を参照しながら説明する。
【0106】
まず、ここでは接続ポイントがemptyなので、図15(b)に示すように、S131により、接続ポイントは、条件式(301)における変数aがcase定数(302)に一致する場合にアクティブとなるコントロールフロー枝(305)となる。
【0107】
S132により、サーチ点はcase定数(302)の次の命令である動作記述(310)となる。S124で、case定数、if−break文、break文、または従属副文終了点が見つかるまでサーチ点を更新しながら動作記述をサーチし、サーチされた動作記述(310)を部分記述とする。この場合、サーチ点は見つかったif−break文(311)を指す。
【0108】
S125で、部分記述として抽出された動作記述(310)から部分CFG(312)を生成する。また、図15(c)に示すように、部分CFG(312)の入力を接続ポイント(305)に接続し、新しい接続ポイントを部分CFG(312)の出力(313)とする。
【0109】
次に、サーチ点がif−break文(311)を指しているので、if−break文処理(S127)を行う。本処理により、構文中にif−break文が含まれるswitch文の動作を、分岐節点を用いて表現するCFGを生成することができる。ここで、S127におけるif−break文処理の内容について、図18を参照しながら説明する。
【0110】
まず、S133で、分岐節点(314)を生成し、分岐節点(314)の入力を接続ポイント(313)に接続する。また、図15(d)に示すように、接続ポイントを分岐節点314の偽側の出力(315)とし、分岐節点(314)にif文の条件式((b+c)=2)を対応させる。
【0111】
次に、S134で、図15(d)に示すように、分岐節点(314)の真側の出力(316)を、breakポイントとして記憶する。breakポイントとは、breakが実行された時にアクティブとなる点を示す。
【0112】
さらに、S135で、サーチ点をif−break文(311)の次の命令(317)に設定する。
【0113】
S124で、case定数、if−break文、break文、あるいは従属副文終了点が見つかるまで、サーチ点を更新しながら動作記述をサーチし、サーチされた動作記述(317)を部分記述とする。この場合、サーチ点は、見つかったcase定数(306)を指すこととなる。
【0114】
S125で、抽出された部分記述(317)から部分CFG(318)を生成する。また、図15(e)に示すように、部分CFG(318)の入力を接続ポイント(315)に接続し、新しい接続ポイントは部分CFG(318)の出力(319)とする。
【0115】
次に、サーチ点がcase定数(306)を指すので、前記したS126のcase定数処理を行う。本処理により、switch文の動作をマージ節点を用いて表現するCFGを生成することができる。
【0116】
ここで、接続ポイントがemptyではないので、S130により、図15(f)に示すように、マージ節点(320)を生成する。マージ節点(320)の入力に、接続ポイント(319)と、条件式(301)の変数aがcase定数(306)に一致する場合にアクティブとなるコントロールフロー枝(309)とを接続する。また、接続ポイントをマージ節点(320)の出力(321)とする。
【0117】
次に、S132により、サーチ点を、case定数(306)の次の命令(322)とする。
【0118】
以下、同様にして、S124で部分記述(322)を抽出し、S125において、図15(g)に示すように、部分CFG(324)を生成し、部分CFG(324)の入力を接続ポイント(321)に接続する。新しい接続ポイントは、部分CFG(324)の出力(325)となり、サーチ点は従属副文終了点(323)となる。
【0119】
ここで、サーチ点が、case定数、if−break文、およびbreak文のいずれでもないため、S129でマージ節点(326)を生成する。図15(h)に示すように、マージ節点(326)の入力に、接続ポイント(325)と、breakポイント(316)と、条件式がどのcase定数とも一致しない場合にアクティブとなるコントロールフロー枝(308)とを接続する。
【0120】
また、switch文全体に対応するCFG(332)の出力を、マージ節点(326)の出力(327)とする。本処理により、switch文の動作を、マージ節点を用いて表現するCFGを生成することができる。
【0121】
S121で、図15(i)に示すように、部分CFG(332)、入力節点(300)、および出力節点(329)を接続し、CFGを完成する。
【0122】
その後、図13に示すように、周知の方法により、CFGからCDFGへの変換処理(S101)、スケジューリング処理(S102)、アロケーション処理(S103)を行う。
【0123】
図20に、CFGから変換されたCDFGを、図21にスケジューリング結果を、図22に、アロケーション処理により生成された最終的なハードウェアを示す。
【0124】
以上のように、本発明によれば、動作記述言語からハードウェア合成を行う際、動作記述言語として特化した専用言語として従来一般的に用いられていたVHDL言語の代わりに、分野を問わず一般に広く流布しているC言語で動作記述を可能とすることにより、VHDL言語では記述不可能であった実行制御分岐命令を含む動作記述が可能となり、ハードウェア合成の効率が向上する。
【0125】
なお、上記では、実行制御分岐命令を含む動作記述からハードウェア合成を行う発明の一形態として、ハードウェア合成装置を例示したが、これに限らず、ハードウェア合成方法に則った処理を行うプログラムとして本発明を実施しても構わない。
【0126】
また、本発明は、上述のif−goto文やswitch文を有するC言語に限らず、実行制御分岐命令を持つ全てのコンピュータ言語からのハードウェア合成に適用することが可能である。
【0127】
【発明の効果】
以上のように、請求項1記載のハードウェア合成方法は、分割手段、部分CFG生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたCFG生成手段と、CDFG生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、上記CFG生成手段が、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、上記CDFG生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、上記ア ロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、上記分割手段が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、上記部分CFG生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、上記分岐節点生成手段が、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、上記マージ節点生成手段が、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含む方法である。
【0128】
これにより、if−goto文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でif−goto文をサポートすることが可能となるという効果を奏する。
【0129】
さらに、上記の方法によれば、if−goto文を含む動作記述を複製のないコントロールフローグラフに変換することができるので、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【0130】
請求項2記載のハードウェア合成方法は、分割手段、部分CFG生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたCFG生成手段と、CDFG生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、上記CFG生成手段が、C言語のswitch文を含む動作記述をコントロールフローグラフに変換するステップ(a)と、上記CDFG生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、上記 分割手段が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割するステップと、上記部分CFG生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、上記分岐節点生成手段が、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、上記マージ節点生成手段が、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含む方法である。
【0131】
これにより、switch文を含む動作記述をコントロールフローグラフで表現できるので、switch文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でswitch文をサポートすることが可能となるという効果を奏する。
【0132】
さらに、switch文を含む動作記述を複製のないコントロールフローグラフに変換することができ、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【0133】
請求項3記載のハードウェア合成装置は、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するCFG生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するCDFG生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記CFG生成手段が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えた構成である。
【0134】
上記の構成によれば、if−goto文を含む動作記述がコントロールフローグラフで表現されるので、if−goto文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語によってif−goto文をサポートするハードウェア合成装置が実現されるという効果を奏する。
【0135】
さらに、if−goto文を含む動作記述を複製のないコントロールフローグラフに変換することができる。この結果、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【0136】
請求項4記載のハードウェア合成装置は、C言語のswitch文を含む動作記述をコントロールフローグラフに変換するCFG生成手段と、コントロールフローグラフをコントロールデータフローグラフに変換するCDFG生成手段と、コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、上記CFG生成手段が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割する分割手段と、分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えた構成である。
【0137】
上記の構成によれば、switch文を含む動作記述をコントロールフローグラフで表現できる。これにより、switch文の動作を実行するハードワイアード回路を合成することができ、高位合成の動作記述言語でswitch文をサポートすることが可能となるという効果を奏する。
【0138】
さらに、上記の構成によれば、switch文を含む動作記述を複製のないコントロールフローグラフに変換することができる。これにより、コントロールフローグラフの分岐において、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を生成する場合に、最終的に合成されるハードワイアード回路の面積を小さくすることができるという効果を奏する。
【0139】
請求項5記載の記録媒体は、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0140】
これにより、if−goto文を含む動作記述を、高位合成の動作記述言語でサポートする手段を提供することができるという効果を奏する。さらに、if−goto文を含む動作記述を複製のないコントロールフローグラフに変換することにより、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を、回路面積を増大させることなく合成する手段を提供することができるという効果を奏する。
【0141】
請求項6記載の記録媒体は、C言語のswitch文を含む動作記述をコントロールフローグラフに変換するステップ(a)と、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、上記ステップ(a)が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割するステップと、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とする。
【0142】
これにより、switch文を含む動作記述を、高位合成の動作記述言語でサポートする手段を提供することができるという効果を奏する。さらに、switch文を含む動作記述を複製のないコントロールフローグラフに変換することにより、真のパスおよび偽のパスの双方を実行する高速なハードワイアード回路を、回路面積を増大させることなく合成する手段を提供することができるという効果を奏する。
【図面の簡単な説明】
【図1】本発明の一実施形態に係る、実行制御分岐命令を含む動作記述からのハードウェア合成方法の基本的な流れを示すフローチャートである。
【図2】本発明の一実施形態に係るハードウェア合成装置の概略構成を示すブロック図である。
【図3】同図(a)は、実行制御分岐命令としてif−goto文を含む動作記述の一例を示す説明図であり、同図(b)は、同図(a)に示す動作記述に基づいて生成されるコントロールフローグラフ(CFG)である。
【図4】if−goto文を含む動作記述からのハードウェア合成方法の基本的な流れを示すフローチャートである。
【図5】if−goto文を含む動作記述からのCFGの生成処理を示すフローチャートである。
【図6】同図(a)ないし(g)は、図5に示すフローチャートに基づいて、図3(a)に示す動作記述から図3(b)に示すCFGが生成される過程を示す説明図である。
【図7】図5に示すフローチャートの一つのステップとしての、if−goto文処理の内容を示すフローチャートである。
【図8】図5に示すフローチャートの一つのステップとしての、ジャンプ先ラベル処理の内容を示すフローチャートである。
【図9】図3(b)に示すCFGから生成されるコントロールデータフローグラフ(CDFG)である。
【図10】図9に示すCDFGに基づくスケジューリング結果を示す説明図である。
【図11】図10に示すスケジューリング結果に基づくアロケーション結果を示す説明図である。
【図12】同図(a)は、実行制御分岐命令としてswitch文を含む動作記述の一例を示す説明図であり、同図(b)は、同図(a)に示す動作記述に基づいて生成されるCFGである。
【図13】switch文を含む動作記述からのハードウェア合成方法の基本的な流れを示すフローチャートである。
【図14】switch文を含む動作記述からのCFGの生成処理を示すフローチャートである。
【図15】同図(a)ないし(i)は、図14に示すフローチャートに基づいて、図12(a)に示す動作記述から図12(b)に示すCFGが生成される過程を示す説明図である。
【図16】図14に示すフローチャートの一つのステップとしての、switch構文からの部分CFG生成処理の内容を示すフローチャートである。
【図17】図16に示すフローチャートの一つのステップとしての、case定数処理の内容を示すフローチャートである。
【図18】図16に示すフローチャートの一つのステップとしての、if−break文処理の内容を示すフローチャートである。
【図19】図16に示すフローチャートの一つのステップとしての、break文処理の内容を示すフローチャートである。
【図20】図12(b)に示すCFGから生成されるCDFGである。
【図21】図20に示すCDFGに基づくスケジューリング結果を示す説明図である。
【図22】図21に示すスケジューリング結果に基づくアロケーション結果を示す説明図である。
【図23】同図(a)は条件分岐を含む動作記述の一例を示す説明図であり、同図(b)は、上記動作記述から生成されるCFGである。
【図24】図23(b)に示すCFGから生成されるCDFGである。
【図25】図24に示すCDFGに基づくスケジューリング結果を示す説明図である。
【図26】図25に示すスケジューリング結果に基づくアロケーション結果を示す説明図である。
【図27】図3(a)に示す動作記述から生成される効率の悪いCFGである。
【図28】図12(a)に示す動作記述から生成される効率の悪いCFGである。
【符号の説明】
1 CFG生成部(CFG生成手段)
2 CDFG生成部(CDFG生成手段)
3 スケジューリング部(スケジューリング手段)
4 アロケーション部(アロケーション手段)
5 分割部(分割手段)
6 部分CFG生成部(部分CFG生成手段)
7 分岐節点生成部(分岐節点生成手段)
8 マージ節点生成部(マージ節点生成手段)
Claims (6)
- 分割手段、部分CFG生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたCFG生成手段と、CDFG生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、
上記CFG生成手段が、条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、
上記CDFG生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、
上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、
上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、
上記ステップ(a)が、
上記分割手段が、上記動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、
上記部分CFG生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
上記分岐節点生成手段が、if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
上記マージ節点生成手段が、ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とするハードウェア合成方法。 - 分割手段、部分CFG生成手段、分岐節点生成手段およびマージ節点生成手段が設けられたCFG生成手段と、CDFG生成手段と、スケジューリング手段と、アロケーション手段とを備えたハードウェア合成装置のハードウェア合成方法であって、
上記CFG生成手段が、C言語のswitch文を含むを含む動作記述を、コントロールフローグラフに変換するステップ(a)と、
上記CDFG生成手段が、コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、
上記スケジューリング手段が、コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、
上記アロケーション手段が、スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、
上記ステップ(a)は、
上記分割手段が、switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割するステップと、
上記部分CFG生成手段が、分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
上記分岐節点生成手段が、switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
上記マージ節点生成手段が、case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むことを特徴とするハードウェア合成方法。 - 条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するCFG生成手段と、
コントロールフローグラフをコントロールデータフローグラフに変換するCDFG生成手段と、
コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、
スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、
上記CFG生成手段が、
上記動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割する分割手段と、
分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、
if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、
ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とするハードウェア合成装置。 - C言語のswitch文を含む動作記述を、コントロールフローグラフに変換するCFG生成手段と、
コントロールフローグラフをコントロールデータフローグラフに変換するCDFG生成手段と、
コントロールデータフローグラフに基づいてスケジューリングを行うスケジューリング手段と、
スケジューリングの結果に基づいてアロケーションを行うアロケーション手段とを備え、
上記CFG生成手段が、
switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割する分割手段と、
分割された部分記述の各々を一つの部分コントロールフローグラフで表す部分CFG生成手段と、
switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐する分岐節点生成手段と、
case定数または従属副文終了点に対応するマージ節点を生成し、コントロ ールフロー枝をマージするマージ節点生成手段とを備えたことを特徴とするハードウェア合成装置。 - 条件に応じて実行されるgoto文としてのif−goto文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、
コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、
コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、
スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、
上記ステップ(a)が、
上記動作記述を、if−goto文またはジャンプ先ラベルで区切られた部分記述に分割するステップと、
分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
if−goto文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
ジャンプ先ラベルに対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むハードウェア合成プログラムを記録した記録媒体。 - C言語のswitch文を含む動作記述を、コントロールフローグラフに変換するステップ(a)と、
コントロールフローグラフをコントロールデータフローグラフに変換するステップ(b)と、
コントロールデータフローグラフに基づいてスケジューリングを行うステップ(c)と、
スケジューリングの結果に基づいてアロケーションを行うステップ(d)とを含み、
上記ステップ(a)が、
switch文の従属副文を、case定数、break文、またはif−break文で区切られた部分記述に分割するステップと、
分割された部分記述の各々を一つの部分コントロールフローグラフで表すステップと、
switch文の条件式またはif−break文に対応する分岐節点を生成し、コントロールフロー枝を分岐するステップと、
case定数または従属副文終了点に対応するマージ節点を生成し、コントロールフロー枝をマージするステップとを含むハードウェア合成プログラムを記録した記録媒体。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP04588798A JP3765923B2 (ja) | 1998-02-26 | 1998-02-26 | ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 |
GB9903953A GB2337615B (en) | 1998-02-26 | 1999-02-23 | A method of manufacturing an LSI circuit, a hardware synthesis device, and a recording medium containing an LSI circuit manufacturing program |
US09/256,518 US6360355B1 (en) | 1998-02-26 | 1999-02-23 | Hardware synthesis method, hardware synthesis device, and recording medium containing a hardware synthesis program recorded thereon |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP04588798A JP3765923B2 (ja) | 1998-02-26 | 1998-02-26 | ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11250112A JPH11250112A (ja) | 1999-09-17 |
JP3765923B2 true JP3765923B2 (ja) | 2006-04-12 |
Family
ID=12731763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP04588798A Expired - Fee Related JP3765923B2 (ja) | 1998-02-26 | 1998-02-26 | ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6360355B1 (ja) |
JP (1) | JP3765923B2 (ja) |
GB (1) | GB2337615B (ja) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3370304B2 (ja) * | 2000-01-28 | 2003-01-27 | シャープ株式会社 | 高位合成システム、高位合成方法、および、高位合成方法の実施に使用される記録媒体 |
JP3722351B2 (ja) * | 2000-02-18 | 2005-11-30 | シャープ株式会社 | 高位合成方法およびその実施に使用される記録媒体 |
US6907599B1 (en) * | 2001-06-15 | 2005-06-14 | Verisity Ltd. | Synthesis of verification languages |
US6983427B2 (en) * | 2001-08-29 | 2006-01-03 | Intel Corporation | Generating a logic design |
JP4029959B2 (ja) * | 2001-08-31 | 2008-01-09 | シャープ株式会社 | 演算器アロケーション設計装置および演算器アロケーション設計方法 |
US6925628B2 (en) * | 2002-10-22 | 2005-08-02 | Matsushita Electric Industrial Co., Ltd. | High-level synthesis method |
JP4352315B2 (ja) * | 2002-10-31 | 2009-10-28 | 日本光電工業株式会社 | 信号処理方法/装置及びそれを用いたパルスフォトメータ |
US6983456B2 (en) * | 2002-10-31 | 2006-01-03 | Src Computers, Inc. | Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms |
JP4104538B2 (ja) * | 2003-12-22 | 2008-06-18 | 三洋電機株式会社 | リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路 |
JP4165712B2 (ja) * | 2004-11-10 | 2008-10-15 | シャープ株式会社 | データフローグラフの同一サブグラフ検出装置、高位合成装置、データフローグラフの同一サブグラフ検出方法、データフローグラフの同一サブグラフ検出制御プログラムおよび可読記録媒体 |
JP2006243839A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | 命令生成装置及び命令生成方法 |
JP4945360B2 (ja) * | 2007-07-27 | 2012-06-06 | 株式会社日立製作所 | 設計装置、設計方法及びプログラム |
JP5109764B2 (ja) * | 2008-03-31 | 2012-12-26 | 日本電気株式会社 | 記述処理装置、記述処理方法およびプログラム |
JP5267434B2 (ja) * | 2009-11-19 | 2013-08-21 | 富士通株式会社 | 検証支援プログラム、検証支援装置および検証支援方法 |
US10203706B2 (en) * | 2013-06-03 | 2019-02-12 | Tescom Corporation | Method and apparatus for conditional control of an electronic pressure regulator |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB8710737D0 (en) | 1987-05-06 | 1987-06-10 | British Telecomm | Video image encoding |
US5530841A (en) * | 1990-12-21 | 1996-06-25 | Synopsys, Inc. | Method for converting a hardware independent user description of a logic circuit into hardware components |
US5666296A (en) * | 1991-12-31 | 1997-09-09 | Texas Instruments Incorporated | Method and means for translating a data-dependent program to a data flow graph with conditional expression |
JPH08101861A (ja) * | 1994-09-30 | 1996-04-16 | Toshiba Corp | 論理回路合成装置 |
US5764951A (en) * | 1995-05-12 | 1998-06-09 | Synopsys, Inc. | Methods for automatically pipelining loops |
GB2317245A (en) | 1996-09-12 | 1998-03-18 | Sharp Kk | Re-timing compiler integrated circuit design |
-
1998
- 1998-02-26 JP JP04588798A patent/JP3765923B2/ja not_active Expired - Fee Related
-
1999
- 1999-02-23 GB GB9903953A patent/GB2337615B/en not_active Expired - Fee Related
- 1999-02-23 US US09/256,518 patent/US6360355B1/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
GB2337615A (en) | 1999-11-24 |
GB9903953D0 (en) | 1999-04-14 |
US6360355B1 (en) | 2002-03-19 |
JPH11250112A (ja) | 1999-09-17 |
GB2337615B (en) | 2003-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3765923B2 (ja) | ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 | |
JP4339907B2 (ja) | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 | |
AU2013290313B2 (en) | Method and system for automated improvement of parallelism in program compilation | |
JP3311462B2 (ja) | コンパイル処理装置 | |
US8904367B1 (en) | Auto pipeline insertion | |
JP3327818B2 (ja) | プログラム変換装置及び記録媒体 | |
JPWO2008120367A1 (ja) | 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム | |
JP2001167060A (ja) | タスク並列化方法 | |
JPH08101861A (ja) | 論理回路合成装置 | |
JPH01121938A (ja) | オブジェクト生成方法 | |
JP2801931B2 (ja) | 論理設計処理装置および回路変換ルール翻訳装置ならびに回路変換ルール翻訳方法 | |
JPH10256383A (ja) | 半導体装置及びその回路構成方法 | |
Baudisch et al. | Translating synchronous systems to data-flow process networks | |
JP3370304B2 (ja) | 高位合成システム、高位合成方法、および、高位合成方法の実施に使用される記録媒体 | |
KR101867866B1 (ko) | 프로그램의 동적 최적화 방법 및 장치 | |
Milik | On PLCs Control Program Hardware Implementation Selected Problems of Mapping and Scheduling | |
JP3386427B2 (ja) | 高位合成方法並びに高位合成方法の実施に使用される記録媒体 | |
JP7407192B2 (ja) | フィールド・プログラマブル・ゲート・アレイのためのコードを最適化する方法および装置 | |
JP5229716B2 (ja) | 動作合成システム、動作合成方法および動作合成用プログラム | |
US20100223596A1 (en) | Data processing device and method | |
JP5315703B2 (ja) | 並列化プログラム生成方法、並列化プログラム生成プログラム、及び並列化プログラム生成装置 | |
JP3542538B2 (ja) | プログラム最適化処理装置及びプログラム最適化方法 | |
JP2004021425A (ja) | コンパイラにおけるメモリ配置方式 | |
JP4470110B2 (ja) | 高位合成方法およびシステム | |
JP3588394B2 (ja) | コンパイル処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060125 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100203 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100203 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110203 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120203 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |