(57)【要約】【課題】変更量が少なく、且つ精度が高い見積もり結果を得られる、レジスタ転送レベル構造の変更量見積もり装置及び方法を提供する。【解決手段】レジスタ転送レベル構造の変更量見積もり装置は、動作記述、並びに動作記述を高位合成して得られるコントロールデータフローグラフ及びバインディング情報に基づいて、動作記述と、コントロールデータフローグラフと、レジスタ転送レベル構造との対応関係を作成する、対応関係作成部と、対応関係と、動作記述の変更情報または変更後の動作記述と、に基づいて、レジスタ転送レベル記述を変更後の動作記述と等価に変更するために必要なレジスタ転送レベル構造の変更量を見積もり、出力する、レジスタ転送レベル変更量見積もり部と、を備える。【選択図】図１
2010033540.tif 000002
【特許請求の範囲】
【請求項１】
動作記述を高位合成したレジスタ転送レベル記述に対して、前記動作記述の変更と等価な変更を行う際における、レジスタ転送レベル構造の変更量見積もり装置であって、
前記動作記述、並びに前記動作記述を高位合成して得られるコントロールデータフローグラフ及びバインディング情報に基づいて、前記動作記述と、前記コントロールデータフローグラフと、レジスタ転送レベル構造との対応関係を作成する、対応関係作成部と、
前記対応関係と、前記動作記述の変更情報または変更後の動作記述と、に基づいて、前記レジスタ転送レベル記述を前記変更後の動作記述と等価に変更するために必要な前記レジスタ転送レベル構造の変更量を見積もり、出力する、レジスタ転送レベル変更量見積もり部と、
を備えることを特徴とするレジスタ転送レベル構造の変更量見積もり装置。
【請求項２】
前記レジスタ転送レベル変更量見積もり部は、
前記動作記述の変更により追加される演算、又は前記動作記述の変更によりオペランドが変更される演算の、前記オペランドを探索し、探索結果に基づいて前記レジスタ転送レベル構造の変更量の見積もりとして第１情報を出力する、オペランド探索部と、
前記動作記述の変更による、コンポーネントのビット幅の変更量を見積もる、ビット幅変更量見積もり部と、
前記追加される演算、又は前記ビット幅が変更される前記コンポーネントが既存コンポーネントを共有できるか否かを確認し、確認結果に基づいて前記レジスタ転送レベル構造の変更量の見積もりとして第２情報を出力する、演算器共有可能性確認部と、
前記動作記述の変更により出力先が変更される演算結果が共有されているか否かを確認し、確認結果に基づいて前記レジスタ転送レベル構造の変更量の見積もりとして第３情報を出力する、演算結果被共有確認部と、
前記動作記述の変更により削除される演算が他の演算と前記コンポーネントを共有しているか否かを確認し、確認結果に基づいて前記レジスタ転送レベル構造の変更量の見積もりとして第４情報を出力する、演算被共有確認部と、
を備えることを特徴とする請求項１に記載のレジスタ転送レベル構造の変更量見積もり装置。
【請求項３】
前記レジスタ転送レベル変更量見積もり部は、
前記動作記述の変更により追加される演算、又は前記動作記述の変更によりオペランドが変更される演算を配置可能な、前記コントロールデータフローグラフにおけるサイクルの範囲を探索する可動範囲探索部を備え、
前記サイクルの範囲内の各サイクルに、前記追加される演算、又は前記オペランドが変更される演算を配置した場合毎に、前記レジスタ転送レベル構造の変更量の見積もりを出力する
ことを特徴とする請求項１又は請求項２に記載のレジスタ転送レベル構造の変更量見積もり装置。
【請求項４】
前記レジスタ転送レベル変更量見積もり部は、
前記動作記述の変更箇所が、前記動作記述と前記レジスタ転送レベル記述とで演算順序の入れ替わった部分に該当している時に、前記演算順序の入れ替わりを解消するためのスケジューリング変更情報を出力する、スケジューリング変更部を備え、
前記スケジューリング変更情報に基づいて、前記レジスタ転送レベル構造の変更量を見積もり、出力する、
ことを特徴とする請求項１から請求項３の何れかに記載のレジスタ転送レベル構造の変更量見積もり装置。
【請求項５】
動作記述を高位合成したレジスタ転送レベル記述に対して、前記動作記述の変更と等価な変更を行う際における、レジスタ転送レベル構造の変更量見積もり方法であって、
前記動作記述、並びに前記動作記述を高位合成して得られるコントロールデータフローグラフ及びバインディング情報に基づいて、対応関係作成部が、前記動作記述と、前記コントロールデータフローグラフと、レジスタ転送レベル構造との対応関係を作成し、
前記対応関係と、前記動作記述の変更情報または変更後の動作記述と、に基づいて、レジスタ転送レベル変更量見積もり部が、前記レジスタ転送レベル記述を前記変更後の動作記述と等価に変更するために必要な前記レジスタ転送レベル構造の変更量を見積もり、出力する、
ことを特徴とするレジスタ転送レベル構造の変更量見積もり方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタ転送レベル構造の変更量見積もり装置及び方法に関する。
【背景技術】
【０００２】
高位合成を用いた設計フローでは、従来人手で作成していたレジスタ転送レベル（以下、RTLと称す）記述に替わり、C言語やSystemC言語を用いて作成した動作記述から高位合成されたRTL記述を用いる。本来、動作記述の検証を十分に行ってから設計フローにおける次の工程へ進むべきだが、不十分な検証で下流工程に進んでしまった後に動作記述でのバグが発見される場合がある。この場合、動作記述でのバグを修正した後で再び高位合成を行うと、わずかな動作記述の変更であっても出力されたRTL記述は変更箇所以外にも大きく変わってしまう可能性がある。そのため、下流工程において大きな後戻りが生じてしまう。
【０００３】
従来のRTL設計では、下流工程まで進んだ段階でRTL記述の修正が必要になると、RTL記述の修正と等価な修正をゲートネットリストに施すECO（Engineering Change Order）によって、変更箇所のみを修正することで後戻りを小さくしていた。そのため、これと同様に、高位合成を用いた設計フローでもRTL記述におけるECOを行うこと、つまり動作記述の修正と等価な修正をRTL記述に施すことで後戻り時間を短縮する方法が考えられる。
【０００４】
しかし、高位合成されたRTL記述は演算器の共有やビット幅の最適化が行われているため、動作記述とRTL記述の対応が取りづらく、人による解析が困難である。ここで、動作記述とRTL記述の対応を容易に取る手法が知られている（特許文献１参照）。しかし、この手法を用いて対応が分かっても、ビット幅の最適化などの影響のため、RTL記述変更の規模は実際に修正を行ってみないと分からない。そのため、下流工程においてECOができる規模の変更ではないことが判明するのもRTL記述を修正したあとになってしまう。
【０００５】
また、動作記述の変更箇所のみを高位合成しなおしたRTL記述を、変更前のRTL記述とマージすることで、RTL記述の修正を自動で行う手法が知られている（特許文献２参照）。しかし、この手法では修正の方法として演算器の追加以外には考えられておらず、ビット幅の変更なども考慮されていないため、修正されるRTL記述の変更量の多さや不正確さなどが問題となる。そのため、修正したRTL記述の変更量が冗長に増えた結果、ECOができない規模の変更となる可能性がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２８５８６５号公報
【特許文献２】特開２００７−３４５８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、変更量が少なく、且つ精度が高い見積もり結果を得られる、レジスタ転送レベル構造の変更量見積もり装置及び方法を提供することにある。
【課題を解決するための手段】
【０００８】
本願発明の一態様によれば、動作記述を高位合成したレジスタ転送レベル記述に対して、前記動作記述の変更と等価な変更を行う際における、レジスタ転送レベル構造の変更量見積もり装置であって、前記動作記述、並びに前記動作記述を高位合成して得られるコントロールデータフローグラフ及びバインディング情報に基づいて、前記動作記述と、前記コントロールデータフローグラフと、レジスタ転送レベル構造との対応関係を作成する、対応関係作成部と、前記対応関係と、前記動作記述の変更情報または変更後の動作記述と、に基づいて、前記レジスタ転送レベル記述を前記変更後の動作記述と等価に変更するために必要な前記レジスタ転送レベル構造の変更量を見積もり、出力する、レジスタ転送レベル変更量見積もり部と、を備えることを特徴とするレジスタ転送レベル構造の変更量見積もり装置が提供される。
【０００９】
また、本願発明の他の一態様によれば、動作記述を高位合成したレジスタ転送レベル記述に対して、前記動作記述の変更と等価な変更を行う際における、レジスタ転送レベル構造の変更量見積もり方法であって、前記動作記述、並びに前記動作記述を高位合成して得られるコントロールデータフローグラフ及びバインディング情報に基づいて、対応関係作成部が、前記動作記述と、前記コントロールデータフローグラフと、レジスタ転送レベル構造との対応関係を作成し、前記対応関係と、前記動作記述の変更情報または変更後の動作記述と、に基づいて、レジスタ転送レベル変更量見積もり部が、前記レジスタ転送レベル記述を前記変更後の動作記述と等価に変更するために必要な前記レジスタ転送レベル構造の変更量を見積もり、出力する、ことを特徴とするレジスタ転送レベル構造の変更量見積もり方法が提供される。
【発明の効果】
【００１０】
本発明によれば、変更量が少なく、且つ精度が高い見積もり結果を得られる、レジスタ転送レベル構造の変更量見積もり装置及び方法を提供できる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施形態に係るRTL構造の変更量見積もり装置のブロック図である。
【図２】本発明の第１の実施形態に係るRTL構造の変更量見積もり装置のハードウェア構成図である。
【図３】本発明の第１の実施形態に係る動作記述及びその変更の例である。
【図４】図３の例に対応するCDFGである。
【図５】図３の例における動作記述・CDFG・RTL構造の対応関係である。
【図６】図３の例における演算器・レジスタ共有情報である。
【図７】図３の例における演算結果共有情報である。
【図８】図３の例における変更後のCDFGである。
【図９】図３の例におけるRTL構造の変更量見積もり結果である。
【図１０】本発明の第２の実施形態に係る動作記述及びその変更の例である。
【図１１】図１０の例に対応するCDFGである。
【図１２】図１０の例における動作記述・CDFG・RTL構造の対応関係である。
【図１３】図１０の例における演算器・レジスタ共有情報である。
【図１４】図１０の例における変更後のCDFGである。
【図１５】図１０の例におけるRTL構造の変更量見積もり結果である。
【図１６】本発明の第３の実施形態に係る動作記述及びその変更の例である。
【図１７】図１６の例に対応するCDFGである。
【図１８】図１６の例における動作記述・CDFG・RTL構造の対応関係である。
【図１９】図１６の例における演算器・レジスタ共有情報である。
【図２０】図１６の例におけるコンポーネントのビット幅情報である。
【図２１】図１６の例におけるビット幅を変更する必要のあるコンポーネント情報である。
【図２２】図１６の例における変更後のCDFGである。
【図２３】図１６の例におけるRTL構造の変更量見積もり結果である。
【図２４】本発明の第４の実施形態に係るRTL変更量見積もり装置のブロック図である。
【図２５】本発明の第４の実施形態に係る動作記述およびその変更の例である。
【図２６】図２５の動作記述を高位合成したスケジューリング結果である。
【図２７】本発明の第４の実施形態に係るスケジューリング変更部のフローチャートである。
【図２８】本発明の第４の実施形態に係る演算を前のサイクルにつめられる場合のCDFGの例である。
【図２９】本発明の第４の実施形態に係る演算を前のサイクルにつめられない場合のCDFGの例である。
【発明を実施するための形態】
【００１２】
以下に、図面を参照して本発明の実施形態について説明する。これらの実施形態は、本発明を限定するものではない。
【００１３】
（第１の実施形態）
図1〜図9を参照して本発明の第１の実施形態について説明する。
図1は、本発明の第１の実施形態に係るRTL構造の変更量見積もり装置の全体構成を示すブロック図である。RTL構造の変更量見積もり装置1は、対応関係作成部2と、RTL変更量見積もり部3とを備える。RTL変更量見積もり部3は、サブブロックとして可動範囲探索部31、オペランド探索部32、ビット幅変更量見積もり部33、演算器共有可能性確認部34、演算結果被共有確認部35及び演算被共有確認部36を備える。
【００１４】
対応関係作成部2は、入力された動作記述40、コントロールデータフローグラフ41（以下、CDFGと称す）及び演算器のバインディング情報42から、既存の技術を用いて動作記述40の行番号と表現、CDFG41の表現及びRTL構造の割り当てのそれぞれの対応関係を作成する。CDFG41と演算器のバインディング情報42は、動作記述40を高位合成して得られる。また、RTL構造とは、RTL記述に記述された論理回路を表す。また、演算器のバインディング情報42とは、CDFG41における各演算、レジスタ、又はオペランドが、RTL構造においてどの演算器、又はレジスタに割り当てられているかを表す。
【００１５】
RTL変更量見積もり部3は、上述した対応関係と、動作記述40の高位合成時の情報である、レジスタライフタイム43、ビット幅情報44、演算器・レジスタ共有情報45及び演算結果共有情報46と、動作記述変更内容47と、ビット幅変更情報48と、ライブラリ49とをもとに、動作記述40の変更内容と等価な変更に必要なRTL構造の変更量50を見積もり、出力する。これら各情報の詳細は後述する。RTL構造の変更量50とは、演算器・レジスタ・マルチプレクサ（MUX）の、追加個数・面積・遅延・ビット幅・インスタンス名などを表すコンポーネント変更情報51-1〜51-n、追加または変更するマルチプレクサの選択条件を表すMUX条件変更情報52-1〜52-n、並びに演算器やレジスタといったコンポーネント間の配線の接続・切断本数を表すwire変更情報53-1〜53-nである。
【００１６】
なお、上記ライブラリ49は、ビット幅の違いを含む各種演算器やレジスタの面積及びそれらの遅延の情報が格納されており、高位合成時に高位合成ツールが用いるものである。本実施形態では、これらの面積及び遅延の情報も上記コンポーネント変更情報51-1〜51-nに出力される。
【００１７】
図2は、本実施形態に係るRTL構造の変更量見積もり装置のハードウェア構成図である。上述した対応関係作成部2及びRTL変更量見積もり部3は中央演算処理装置（CPU）11に含まれる。入力装置12はキーボードやマウスなどであり、設計者は入力装置12を用いて、入力する動作記述40の指定や、その変更点の指定などを行う。記憶装置13はハードディスクやメモリなどであり、動作記述40、CDFG41、演算器のバインディング情報42、レジスタライフタイム43、ビット幅情報44、演算器・レジスタ共有情報45、演算結果共有情報46、動作記述変更内容47、ビット幅変更情報48及びライブラリ49など、対応関係作成部2及びRTL変更量見積もり部3で参照される上述した各種情報が格納されている。出力装置14は、ディスプレイやプリンタなどである。RTL変更量見積もり部3から出力されたRTL構造の変更量見積もり結果50は、ディスプレイに表示されたり、プリンタからプリントアウトされたりという形で設計者に提示される。
【００１８】
以下、図1に示すRTL変更量見積もり部3の各サブブロックの処理フローを、図3に示すSystemC言語で記述された動作記述と、その変更内容とが入力された一例を用いて説明する。この例では、図3に示す様に、動作記述の20行目においてOR演算を追加する変更を行っている。また、図4は変更前の動作記述に対応するCDFGである。
【００１９】
RTL変更量見積もり部3は、対応関係作成部1から図5に示す様な動作記述の行番号と表現、CDFGの表現及びRTL構造の割り当ての対応関係を入力として受け取り、以下に説明する様に各サブブロックにおいてRTL構造の変更量を見積もっていく。
【００２０】
まず、可動範囲探索部31は、図5に示す対応関係と、図3に示す動作記述の変更内容から、変更する演算がCDFG上でどの演算に対応するのかを特定する。この例では、動作記述の変更は演算の追加でありCDFG上には変更前の演算は存在しない。そこで、可動範囲探索部31は、追加された演算の直前の演算である、図3に示す動作記述の20行目のAND演算が対応する演算をCDFG上で特定する。この例では、図5に示す対応関係から、そのAND演算は図4のCycle5にあるAND演算2に対応することが特定される。なお、動作記述の変更内容の代わりに変更後の動作記述を用いて、変更する演算を特定してもよい。
【００２１】
その後、可動範囲探索部31は、高位合成結果の１つであるレジスタライフタイム（図示なし）をもとに、変更後の演算（OR演算；追加される演算）がCDFGのサイクル（クロックサイクル）上で動き得る範囲を求める。レジスタライフタイムとは、各レジスタに格納されている変数をサイクル毎に示した情報である。変更後の演算の可動範囲は、「変更後の演算のオペランドが決まる最速のサイクル」から「変更後の演算の結果がオペランドになる演算の実行サイクル」までとなる。そこで、可動範囲探索部31はレジスタライフタイムを参照してオペランドである変数がどのサイクルに存在するかを探索する。この例では、追加されるOR演算のオペランドがAND演算2の結果なので、OR演算が置ける最速のサイクルはAND演算2が実行されるCycle5となる。また、OR演算の結果をオペランドとしている演算の実行サイクルがOR演算を置ける最も遅いサイクルとなるが、理解を容易にするため説明を省略する。次に、可動範囲探索部31は求めた可動範囲を出力し、以降のサブブロックでは、この可動範囲内の各サイクルに変更後の演算を置いた場合のRTL構造の変更量を見積もる。ここでは、Cycle5にOR演算を追加した場合の処理を以下に説明していく。
【００２２】
次に、オペランド探索部32は、変更後の演算（追加される演算）を実行するサイクルに、その演算のオペランドがあるか否かを調べる。この例では、追加されるOR演算のオペランドのうち、AND演算2の結果はCycle5に存在するが、変数cは存在しない。そのため、オペランド探索部32はレジスタライフタイムを参照し、Cycle5よりも前のサイクルから変数cを格納しているレジスタを探す。この例では、Cycle2でAND演算1（図3に示す動作記述の10行目に対応する演算）のオペランドに変数cが使われているため、これをレジスタにコピーしてCycle5まで保持しておく。このとき、オペランド探索部32は、図6に示す様な、演算器・レジスタ名と、その演算器・レジスタが各サイクルで使用されているか否かを示した演算器・レジスタ共有情報をもとに、変数cを保持するためのレジスタが他のレジスタと共有できるか否かを調べる。図6において、「×」が記入されているサイクルでは該当するレジスタが既に使用されているため共有できない。この例では、Cycle2で空いているレジスタがないため、新たにレジスタを追加することになる。また、変数cのコピー元であるレジスタと追加するレジスタとの配線を新たに接続する必要がある。従って、オペランド探索部32からは、RTL構造の変更量見積もりとして、「追加コンポーネント：レジスタ1個(1bit)」と「wire変更：接続1本」という情報（第１情報）が出力される。
【００２３】
次に、ビット幅変更量見積もり部33は、演算を変更したことでビット幅の変更が生じるコンポーネントがあるか否か及びその変更量を見積もる。その際には、レジスタ・演算器・マルチプレクサ名とそれらのビット幅を示したビット幅情報（図示なし）を参照する。この例では、OR演算を追加してもビット幅の変更は生じないため、次のブロックへ進む。
【００２４】
次に、演算器共有可能性確認部34は、変更後の演算（追加される演算）が他の演算とRTL構造において同じ演算器（既存コンポーネント）を共有できるか否かを、図6に示す演算器・レジスタ共有情報をもとに確認する。この例では、図6を参照すると、OR演算が実行されるCycle5でRTL構造における演算器Or_1が空いているため、演算器Or_1は共有可能であり、追加の演算器は必要ない。ただし、共有する代わりに演算器Or_1の各入力にマルチプレクサが必要となる。また、Cycle4とCycle5で各マルチプレクサの出力を選択する条件を、選択信号として各マルチプレクサに入力する必要がある。また、配線の変更として、演算器Or_1の出力を、AND演算2が割り当てられている演算器And_1の出力先であったレジスタReg_2に接続する必要がある。また、追加したマルチプレクサと、オペランド（変数c）が格納されている追加したレジスタとの間も接続する必要がある。従って、演算器共有可能性確認部34からは、RTL構造の変更量見積もりとして、「追加コンポーネント：1bit MUX 2個」と「MUX条件変更：追加MUX（選択条件：Cycle4、Cycle5）」と「wire変更：接続3本」という情報（第２情報）が出力される。
【００２５】
次に、演算結果被共有確認部35は、出力先が変更される演算結果（AND演算2の演算結果）が他の演算で共有されているか否かを確認する。動作記述上で、オペランドも同じ同一演算が複数回行われていると、RTL記述では演算を複数回行わず、１つの演算結果を共有する様に高位合成されることがある。動作記述上で１箇所の演算のみを変更する場合、変更した演算の結果の出力先全てに変更の影響があってはならない。この例は演算を追加する変更であるため、追加する直前の演算であるAND演算2の結果が共有されているか否かを調べる。その際には、図7に示す様な演算結果共有情報を参照する。演算結果共有情報とは、出力が共有されている全ての演算の動作記述の行番号と、CDFG上での演算ノード（出力被共有ノード）名と、演算の出力先ノード名との対応情報である。図7に示される演算結果共有情報から、AND演算2は動作記述の20行目と25行目の演算で結果を共有していることが分かる。動作記述を変更するのは20行目のみなので、20行目の演算結果の出力先（レジスタREG2への出力）にOR演算を追加する。また、AND演算2からレジスタREG2への接続は切断される。すなわち、RTL構造においてはAND演算2が割り当てられた演算器And_1からレジスタREG2が割り当てられたレジスタReg_2への接続は切断される。従って、演算結果被共有確認部35からは、RTL構造の変更量見積もりとして、「wire変更：切断1本」という情報（第３情報）が出力される。
【００２６】
次に、演算被共有確認部36は、削除される演算が他の演算と演算器を共有しているか否かを確認する。この例は演算を追加する変更であるため、この点を考慮する必要はない。
【００２７】
以上から、変更後のCDFGは図8に示す様になる。特に、同図に破線で表された部分は変更後の演算に対応し、追加されたコンポーネント及び配線を表す。また、同図に「×」が付された部分は、削除された配線を表す。
【００２８】
また、RTL変更量見積もり部3は、各サブブロックからのRTL構造の変更量見積もりをまとめたもの、すなわち「追加コンポーネント：1bit MUX 2個、レジスタ1個(1bit)」、「MUX条件変更：追加MUX（選択条件：Cycle4、Cycle5）」及び「wire変更：接続4本、切断1本」という情報を出力する。さらに、RTL変更量見積もり部3は、上述した方法と同じ様にして、可動範囲探索部31で求めた各サイクルにOR演算を置いた場合毎にRTL構造の変更量見積もりを求め、出力する。すなわち、RTL変更量見積もり部3からは、図9に示す様に、コンポーネント変更情報、MUX条件変更情報及びwire変更情報を1セットにしたRTL構造の変更量見積もり結果が、可動範囲内のサイクル数分出力される。
なお、RTL構造の変更量見積もり結果には、インスタンス名や配線名も出力される。これにより、設計者はRTL構造及びRTL記述の変更すべき箇所が分かる。
【００２９】
上述した様に、本実施形態によれば、動作記述の変更に対するRTL構造の変更量を、実際にRTL記述を変更する前に見積もることができる。そのため、設計者はその情報によりECOを実際に行うか否かを事前に検討できる。それにより、RTL記述の変更を手作業で終えた後でECOができる様な規模の変更ではないと判明したために結局高位合成からやり直すという様な、無駄な後戻りの工数を削減することができる。また、演算器の共有を考慮することで、できる限りRTL構造の変更量を少なくし、ECOができる可能性が高いと判断され得る見積もり結果を出力できる。それにより、設計期間を短縮できる。さらに、変更する演算を置くサイクルを変えるごとに見積もり結果を出力することで、設計者の状況に適した解を出力できる可能性が高くなる。
【００３０】
（第２の実施形態）
次に、図10〜図15を参照して、本発明の第２の実施形態について説明する。この実施形態では、第１の実施形態とは異なる動作記述の変更を行う例について説明する。この例では、図10に示す様に、動作記述の10行目において加算を削除する変更を行っている。図11は、この例の変更前の動作記述に対応するCDFGである。以下、特に第１の実施形態とは異なる処理を行う部分を中心に説明し、同様の処理については詳細な説明を省略する。
【００３１】
対応関係作成部2は、第１の実施形態と同様の処理をして、図12に示す様な対応関係を出力する。
【００３２】
次に、RTL変更量見積もり部3は動作記述の変更に伴うRTL構造の変更量を見積もる。しかし、この例は演算を削除する変更であるため、演算の可動範囲を探索する必要はなく、可動範囲探索部31は何もしない。
また、オペランド探索部32及びビット幅変更量見積もり部33は、第１の実施形態と同様の処理をする。
また、演算を削除する変更であるため、演算器共有可能性見積もり部34は何もしない。
【００３３】
次に、演算結果被共有確認部35は、削除される演算（図11に示す加算2）の結果（出力先が変更される演算結果）が複数個所に共有されているか否かを、演算結果共有情報（図示なし）を参照して確認する。演算結果共有情報には、結果を共有している演算の情報のみが示される。この例では演算結果は共有されていないため、加算2と次の演算（図11に示す加算3）との間の配線は切断してよいことになる。また、加算3のオペランドの1つが、加算2の結果から変数cに変更されるため、変数cと加算3との間の配線を接続する。従って、演算結果被共有確認部35からは、RTL構造の変更量見積もりとして、「wire変更：接続1本、切断1本」という情報（第３情報）が出力される。
【００３４】
演算被共有確認部36では、削除される演算（加算2）が他の演算とRTL構造における演算器を共有しているか否かを、図13に示す演算器・レジスタ共有情報を参照して確認する。図12と図13から、加算2が割り当てられている加算器Add_2はCycle2でも共有されていることが分かる。従って、加算2は削除しても、加算器Add_2は削除できないため、RTL構造の変更量見積もりとして何も出力しない。
【００３５】
以上から、変更後のCDFGは図14に示す様になり、RTL変更量見積もり部3からは図15に示す様に各サブブロックからのRTL構造の変更量見積もりをまとめた情報が出力される。
【００３６】
上述した様に、本実施形態によれば、演算の追加だけではなく削除という変更内容にも対応できる。従って、演算の削除と追加とを組み合わせることで、ある演算を別の演算に変更することにも対応できる。それにより、本実施形態に係るRTL構造の変更量見積もり装置を適用できる設計事例の範囲を広げることができる。すなわち、様々な設計事例で後戻り工数を削減できる可能性が高くなる。
【００３７】
（第３の実施形態）
次に、図16〜図23を参照して、本発明の第３の実施形態について説明する。この実施形態では、第１及び第２の実施形態とは異なる動作記述の変更を行う例について説明する。この例では、図16に示す様に、動作記述の10行目において加算のオペランドを変更する修正を行っている。図17は、この例の変更前の動作記述に対応するCDFGである。以下、特に第１及び第２の実施形態とは異なる処理を行う部分を中心に説明し、同様の処理については詳細な説明を省略する。
【００３８】
まず、対応関係作成部2は、第１及び第２の実施形態と同様に処理をして、図18に示す様な対応関係を出力する。
【００３９】
続いて、RTL変更量見積もり部3での処理を説明していく。まず、可動範囲探索部31は変更する演算のCDFG上の可動範囲を探索する。この例はオペランドの変更であるため、可動範囲探索部31は変更するオペランドを使用する演算（図17に示す加算1；オペランドが変更される演算）の可動範囲を探索する。探索方法は第１の実施形態と同様である。以降では、図17に示すCycle4に加算1を置いた場合について説明する。
【００４０】
次に、オペランド探索部32は、変更するオペランドを使用する演算である加算1が実行されるCycle4に、変更後のオペランドがあるか否かを探索する。つまり、変更されないオペランドaと、オペランドbから変更するオペランドcとを探索する。この例では加算1を置くサイクルは変更前と同じなので、当然オペランドaはCycle4に存在するが、変更するオペランドcは存在しない。そのため、オペランド探索部32はレジスタライフタイム（図示なし）を参照して、サイクルをさかのぼってオペランドcを探索する。この例では、図17に示すCDFG及び図18に示す対応関係から分かる様に、Cycle2に変数cが格納されているレジスタが存在するので、その変数cをCycle4までコピーする。その際、図19に示す演算器・レジスタ共有情報を参照して既存のレジスタが共有できるか否かを確認する。図19から分かる様に、8ビットレジスタReg8_1はCycle2以降で使用されており共有できないため、共有できる既存のレジスタは存在しない。そこで、8ビットの変数cをコピーするための8ビットレジスタを1個追加することになる。また、変数cが格納されているレジスタとコピー先の8ビットレジスタとの配線を接続する必要がある。従って、オペランド探索部32からは、RTL構造の変更量見積もりとして、「追加コンポーネント：レジスタ1個(8bit)」と「wire変更：接続1本」という情報（第１情報）が出力される。
【００４１】
次に、ビット幅変更量見積もり部33は、オペランドの変更によってコンポーネントのビット幅が変更されるか否か及びその変更量を見積もる。その際、図20に示す様な、各コンポーネントがRTL記述上で割り当てられたビット幅と動作記述で宣言されたビット幅とを示したビット幅情報を参照する。この例では、加算1のオペランドの1つが、4ビットの変数bから8ビットの変数cに変更されている。また、加算1の結果を代入する変数xは、図16に示す動作記述での宣言は8ビットだが、図18に示す対応関係を参照すると5ビットのレジスタ（Reg5_1）に割り当てられている。この理由は、4ビットのオペランド同士の加算なので、桁上がりを含めても5ビットで十分であると高位合成の際に判断されたためである。つまり、3ビット分は削減されている。しかし、オペランドが8ビットに変更された加算1の結果を格納するために、変数xも8ビットに拡張する必要がある（3ビット分拡張）。また、加算1が割り当てられている加算器も5ビット加算器から8ビット加算器に変更しなければならない。なお、動作記述の宣言は8ビットなので、桁上がりの9ビット目は考慮しなくて良い。この様に、高位合成で冗長と判断されたビット幅は、動作記述の宣言よりも削減されることがある。そのため、動作記述の変更によってビット幅の変更が生じるときには、高位合成によって削減されたビット幅を拡張しなおす必要がある。この例では、図20に示すビット幅情報から、変数xがオペランドになる加算2（図16に示す動作記述の20行目）が8ビットで割り当てられていることが分かる。また、その加算2の結果を代入する変数yも動作記述の宣言と同じ8ビットレジスタが割り当てられているため、ビット幅変更の影響はここで止まる。しかし、そうでない場合はビット幅情報を参照しながら、ビット幅変更の影響を吸収する十分なビット幅を持つところまでたどってビット幅を変更していく必要がある。以上より、ビット幅変更量見積もり部33からは、図21に示す様なビット幅を変更する必要のあるコンポーネントの情報が出力される。
【００４２】
次に、演算器共有可能性確認部34は、ビット幅変更量見積もり部33から出力された、図21に示すビット幅を変更する必要のあるコンポーネントの情報及び図19に示す演算器・レジスタ共有情報を参照し、ビット幅を変更するコンポーネントが既存コンポーネントと共有できるか否かを確認する。図19から分かる様に、8ビット加算器Add8_1はCycle4では使用されているため共有できない。よって、新しく8ビット加算器を1個追加する必要があり、その8ビット加算器とそのオペランド及びその8ビット加算器とその出力先の配線を接続する必要がある。また、変数xが格納されたレジスタReg5_1については、5ビットレジスタを8ビットに拡張することでRTL構造の変更量を少なく抑える。従って、演算器共有可能性確認部34からは、RTL構造の変更量見積もりとして、「追加コンポーネント：8bit加算器1個、レジスタ1個(3bit)」と「wire変更：接続3本」という情報（第２情報）が出力される。
【００４３】
次に、演算結果被共有確認部35は、変更するオペランドを使用する演算である加算1の結果（出力先が変更される演算結果）が共有されているか否かを確認する。この例では結果が共有されていないため、加算1の出力配線は切断して良いことになる。従って、演算結果被共有確認部35からは、RTL構造の変更量見積もりとして、「wire変更：切断1本」という情報（第３情報）が出力される。
【００４４】
次に、演算被共有確認部36は、動作記述の変更前に加算1（削除される演算）が割り当てられていた加算器Add5_1が他の演算と共有されているか否かを調べる。この例では、図19に示す演算器・レジスタ共有情報から、加算器Add5_1は共有されていないため、削除しても良いことが分かる。従って、演算被共有確認部36からは、RTL構造の変更量見積もりとして、「5bit加算器Add5_1は削除可能」という情報（第４情報）が出力される。
【００４５】
以上から、変更後のCDFGは図22に示す様になる。また、RTL変更量見積もり部3からは、図23に示す様に各サブブロックからのRTL構造の変更量見積もりをまとめた情報が出力される。
【００４６】
上述した様に、本実施形態によれば、動作記述の変更によるRTL記述におけるビット幅の変更の影響も見積もることができるので、より精度が高い見積もり結果を出力できる。それにより、ビット幅の見積もり誤差を原因とする判断ミスで生じる様な後戻りの工数を削減できる。
【００４７】
（第４の実施形態）
次に、図24〜図29を参照して、本発明の第４の実施形態について説明する。この実施形態は、変更後のオペランドを求める演算が実行されるサイクルをCDFG上で動かすことで、RTLにおけるスケジューリング結果を変更するようにした点が、第１〜第３の実施形態と異なる。
【００４８】
高位合成を用いると、高位合成ツールの自動スケジューリングや演算器共有などのために、動作記述とRTL記述で演算順序が入れ替わることがある。動作記述の変更箇所が演算順序の入れ替わった部分に該当していると、第１から第３の実施形態では変更量を見積もれない場合がある。この場合、RTLにおけるスケジューリング結果を変更しなければ正しい変更量を見積もることが出来ない。
以下、特に第１〜第３の実施形態とは異なる構成と処理を中心に説明し、同様の構成と処理については詳細な説明を省略する。
【００４９】
図24は、本発明の第４の実施形態に係るRTL構造の変更量見積もり装置の全体構成を示すブロック図である。RTL構造の変更量見積もり装置10は、対応関係作成部2と、RTL変更量見積もり部30とを備える。RTL変更量見積もり部30は、図１のRTL変更量見積もり部3の構成に加え、可動範囲探索部31とオペランド探索部32との間にスケジューリング変更部4を備える。
【００５０】
対応関係作成部2は、第１から第３の実施形態と同様に、入力された動作記述40、CDFG41及び高位合成時の演算器のバインディング情報42から、既存の技術を用いて動作記述40の行番号と表現、CDFG41の表現及びRTL構造の割り当てのそれぞれの対応関係を作成する。
【００５１】
RTL変更量見積もり部30は、第１から第３の実施形態と同様に、可動範囲探索部31と、オペランド探索部32と、ビット幅変更量見積もり部33と、演算器共有可能性確認部34と、演算結果被共有確認部35と、演算被共有確認部36とにより、次の処理を行う。つまり、上述した対応関係と、動作記述40の高位合成時の情報である、レジスタライフタイム43、ビット幅情報44、演算器・レジスタ共有情報45及び演算結果共有情報46と、動作記述変更内容47と、ビット幅変更情報48と、ライブラリ49とをもとに、動作記述40の変更内容と等価な変更に必要なRTL構造の変更量50を見積もり、出力する。RTL構造の変更量50とは、演算器・レジスタ・マルチプレクサ（MUX）の、追加個数・面積・遅延・ビット幅・インスタンス名などを表すコンポーネント変更情報51-1〜51-n、追加または変更するマルチプレクサの選択条件を表すMUX条件変更情報52-1〜52-n、並びに演算器やレジスタといったコンポーネント間の配線の接続・切断本数を表すwire変更情報53-1〜53-nである。
【００５２】
スケジューリング変更部4は、RTL変更量見積もり部30の可動範囲探索部31から演算被共有確認部36までで対応できない動作記述（SystemC記述）とRTL記述での演算順序の入れ替わりが動作記述の変更箇所で起きたときに、可動範囲探索部31によって呼び出され、RTLにおける演算スケジューリングを変更することを試みる。演算順序の入れ替わりが問題となる可能性があるのは、オペランド自体を変更する場合と、演算の追加によりオペランドを追加する場合とである。演算の追加によりオペランドを追加する場合とは、例えば第１の実施形態で説明した様に、OR演算（追加される演算）の追加によりオペランドc（追加するオペランド）を追加する場合を表す。
【００５３】
オペランド自体を変更する場合における、第１から第３の実施形態で対応できない演算順序の入れ替わりの例を図25、26に示す。図26は、図25の動作記述（SystemC記述）を高位合成して得られた、RTLにおけるスケジューリング結果（CDFG）である。動作記述（SystemC記述）では、変数x2を求める演算A1は、変数y1、y2を求める演算A2、A3よりも先に記述してある。しかし、変数x2の値を初めて参照するのは、演算A2、A3よりも後に記述してある、変数zを求める演算A4である。そのため、高位合成時に、早い段階で演算A1を実行する必要は無いと判断され、図26に示す様に、RTLでは演算A1は演算A2、A3よりも後に実行されるようにスケジューリングされる可能性がある。このとき、図25に示す様に、演算A3のオペランドを変数x1から変数x2に変更する例を考えると、RTLにおいて演算A3を実行するタイミング（Cycle3）では変数x2を生成する演算A1はまだ実行されていないため、演算のスケジューリングを変更する必要がある。
【００５４】
また、図26の例では、変数y2をオペランドとする演算XがCycle４で実行される。そのため、可動範囲探索部31は演算A3を後のサイクル（Cycle4以降）に動かせない。従って、第１から第３の実施形態の方法では、演算順序の入れ替わりを解消できないため、RTL構造の変更量を見積もることができない。
【００５５】
次に、上述の様な演算順序の入れ替わりがある場合における、RTL構造の変更量見積もり装置10の動作を説明する。
まず、第１及び第３の実施形態と同様に、可動範囲探索部31は、レジスタライフタイムを参照して、「オペランドが変更される演算（図26の例では演算A3）の変更後のオペランド（図26の例では変数ｘ2，ｅ）が決まる最速のサイクル」と、「オペランドが変更される演算の結果（図26の例では変数y2）がオペランドになる演算（図26の例では演算X）の実行サイクル」とを求める。図26の例の様に、前者のサイクル（Cycle5）が後者のサイクル（Cycle4）よりも遅くなっている場合、第１及び第３の実施形態で対応できない演算順序の入れ替わりが動作記述の変更箇所で起こっていると判定される。この場合、可動範囲探索部31はスケジューリング変更部４を呼び出す。
【００５６】
なお、後者のサイクルが前者のサイクルよりも遅い場合には、可動範囲探索部31はスケジューリング変更部４を呼び出さず、第１及び第３の実施形態と同様の処理が行われる。
【００５７】
スケジューリング変更部4は図27のフローチャートに従ってスケジューリングの変更を行う。
ステップS1では、変更後のオペランド（図26の例では変数x2）を求める演算（図26の例では演算A1）を、必要サイクル数分、前のサイクルに動かせるか否かを調べる。必要サイクル数とは、図26の例では変数x2に置き換えたい変数x1をオペランドとする演算A3の実行に、変数x2の生成を間に合わせるのに必要なサイクル数であり、この場合は2サイクルである。
【００５８】
ここで、ある演算を前のサイクルに動かすためには、その演算より前のサイクルに演算を詰め込むための隙間を探さなければならない。簡単な方法として考えられるのは、動かしたい演算より前のサイクルに、演算を実行せずレジスタ間のデータ転送または保持のみを行うサイクルを探すことである。例えば、図28（a）のCDFGについて考える。演算B1を1サイクル前に動かしたいときには、演算B1の全ての入力をそれぞれたどり、データ転送または保持のみを行うサイクル（隙間）を1サイクル分探す。変数a2の経路では隙間を見つける前に演算B2があり、その入力をたどる経路が分岐している。必要サイクル数に足る隙間を見つける前に分岐に遭遇した場合は、それまでに見つけた隙間の数を引き継ぎ、足りない分の隙間を各々分岐先で再帰的に探していく。この例では、変数a4の経路でも、変数a5の経路でもデータ転送または保持のみを行うサイクルが1つずつあり、どちらも必要サイクル数に足りるため探索は終了する。一方の変数a3をたどった経路では分岐に遭遇する前に隙間があり、こちらも必要サイクル数に足りるため探索が終了する。これで演算B1からの全ての分岐先で必要サイクル数分の隙間を見つけたことになる。従って、図28（b）のように、演算B2を1サイクル前につめた上で、演算B1を1サイクル前につめることが出来る。つまり、演算順序の入れ替わりを解消できる。このように必要サイクル数分、演算を動かせる場合はステップS2へ進む。しかし、図29の変数a1〜入力i1と変数a1〜入力i2の経路のように、探索の際に何れか一つの経路でも外部からの入力までたどる間に必要サイクル数分の隙間が見つからなかった場合は、全ての経路の中で最少の隙間の数を、演算を動かせる最大サイクル数として探索を終了し、後述する様にステップS4へ進む。
【００５９】
ステップS2では、変更後のオペランドを求める演算を前のサイクルに動かした結果、それに伴ってスケジューリングを変更する必要がある演算と変数のスケジューリング変更情報をリストアップする。スケジューリング変更情報には、「動作記述（SystemC記述）の演算・変数」、「RTL構造の演算器・レジスタ」、「スケジューリング変更前の実行サイクル」及び「スケジューリング変更後の実行サイクル」が対応して記述されている。図28の例では、演算B1、B2と変数a1、a2のスケジューリングが1サイクル前に変更されるため、これらのスケジューリング変更情報をリストアップする。
【００６０】
ステップS3では、ステップS2でリストアップされた演算と変数のスケジューリング変更情報をオペランド探索部32へ渡す。
【００６１】
このスケジューリング変更情報に基づいて、オペランド探索部32と、ビット幅変更量見積もり部33と、演算器共有可能性確認部34と、演算結果被共有確認部35と、演算被共有確認部36とは、第１〜第３の実施形態と同様にRTL構造の変更量を見積もり、出力する。つまり、これらのサブブロックでは、リストアップされた演算と変数がスケジューリング変更後のサイクルで既存の演算器とレジスタを共有できるか否かを、CDFGの表現とRTL構造の割り当てとの対応関係、および演算器・レジスタ共有情報を参照して確認する。既存の演算器とレジスタを共有できる場合、RTL構造の変更はMUXの制御信号のみとなる。共有できない場合、新しく演算器とレジスタを追加する必要がある。
【００６２】
具体的には、オペランド探索部32と、ビット幅変更量見積もり部33と、演算器共有可能性確認部34と、演算結果被共有確認部35と、演算被共有確認部36とが、スケジューリング変更情報における各演算に対して、早いサイクルの演算から順番に処理を行う。図28の例では、まず、早いサイクルの演算B2についてRTL構造の変更量の見積もりが行われる。続いて、演算B1についてRTL構造の変更量の見積もりが行われる。
【００６３】
最終的に演算順序の入れ替わりが解消され、オペランドが変更される演算に関して、第３の実施形態と同様にRTL構造の変更量の見積もりが行われる。これにより、RTL変更量見積もり部30は、第１から第３の実施形態と同様に、RTL構造の変更量見積もり結果を出力する。
【００６４】
一方、ステップS1で必要サイクル数分、前のサイクルに動かせない場合はステップS4へ進む。ステップS4では、ステップS1で求めた前のサイクルに動かせる最大サイクル数を必要サイクル数から引き、ステップS5へ進む。図26の例では、もし演算A1が1サイクル前に動かせれば、必要サイクル数は2から1引かれ1となる。
【００６５】
ステップS5では、変更前の変数（図26の例では変数x1）を使用する演算（図26の例では演算A3）（つまり、オペランドが変更される演算）を、ステップS4で更新された必要サイクル数分、後ろに動かせるか否かを調べる。探索の方法はステップS1の演算を前のサイクルに動かす場合と同様であり、動かしたい演算の出力をたどって必要サイクル数分の隙間を探していく。外部への出力に到達するまでに、全ての経路で必要サイクル数分の隙間がある場合はステップS2へ進み、その後ステップS3へ進む。これにより、前のサイクルに演算を動かす場合と同様に、スケジューリングを変更した結果必要なRTL構造の変更量をオペランド探索部32等で見積もり、出力する。
【００６６】
ステップS5において、経路の何れか一つでも必要サイクル数分の隙間が見つからなかった場合は、ステップS1と同様に動かせる最大サイクル数を求め、ステップS6へ進む。後ろのサイクルに動かす場合は、前のサイクルに動かす場合と異なり、レイテンシを延ばせば何サイクルでも動かすことが可能である。しかし、レイテンシを延ばすとRTL構造の変更量が多くなり過ぎる可能性が有り、仕様にも影響すると考えられる。そのため、その場合はRTL構造の変更量見積もりではなく、レイテンシを何サイクル延ばす必要があるかというレイテンシ増加量を出力する。レイテンシ増加量は必要サイクル数からステップS5で求めた最大サイクル数を引いた値になる。
【００６７】
つまり、演算順序の入れ替わりを解消できない場合に、スケジューリング変更部4はレイテンシ増加量を出力し、RTL変更量見積もり部30は、RTL構造の変更量の代わりに、レイテンシ増加量を出力する。
【００６８】
以上のように、本実施形態によれば、高位合成されたRTL記述のECO時に、変更後のオペランドを求める演算が実行されるサイクルをCDFG上で動かす様にしたので、第１から第３の実施形態では解消できない動作レベルとRTLでの演算順序の入れ替わりを解消して、RTL構造の変更量を見積もることが出来る。そのため、対応できるケースがより多くなる。その結果、設計者がRTL記述をECOするのか、高位合成を再度行うのかという判断を多くのケースで迅速に下せるようになり、ECO可能な修正規模であるにも拘らず高位合成から下流工程までをやり直すというような後戻り工数を削減することが出来る。
【００６９】
なお、演算の追加によりオペランドも追加する場合には、上述してきた処理において、「オペランドが変更される演算」の代わりに「追加される演算」を使用し、「変更後のオペランド」の代わりに「追加するオペランド」を使用すれば良い。
【００７０】
なお、上述してきたRTL構造の変更量を見積もる方法は、プログラムにより、図2に示すRTL構造の変更量見積もり装置を制御して実行できる。このプログラムは、図2に示すRTL構造の変更量見積もり装置を構成する記憶装置13に記憶させればよい。また、このプログラムをコンピュータ読み取り可能な記録媒体に保存し、この記録媒体を用いて図2に示す記憶装置13にプログラムを読み込ませることにより、一連のRTL構造の変更量を見積もる方法を実行することができる。
【００７１】
以上、本発明の実施形態を詳述してきたが、具体的な構成は上記実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲で種々に変形して実施することができる。
【符号の説明】
【００７２】
１，１０  RTL構造の変更量見積もり装置
２  対応関係作成部
３，３０  RTL変更量見積もり部
４  スケジューリング変更部
３１  可動範囲探索部
３２  オペランド探索部
３３  ビット幅変更量見積もり部
３４  演算器共有可能性確認部
３５  演算結果被共有確認部
３６  演算被共有確認部
【図１】
2010033540.tif 000003
【図２】
2010033540.tif 000004
【図３】
2010033540.tif 000005
【図４】
2010033540.tif 000006
【図５】
2010033540.tif 000007
【図６】
2010033540.tif 000008
【図７】
2010033540.tif 000009
【図８】
2010033540.tif 000010
【図９】
2010033540.tif 000011
【図１０】
2010033540.tif 000012
【図１１】
2010033540.tif 000013
【図１２】
2010033540.tif 000014
【図１３】
2010033540.tif 000015
【図１４】
2010033540.tif 000016
【図１５】
2010033540.tif 000017
【図１６】
2010033540.tif 000018
【図１７】
2010033540.tif 000019
【図１８】
2010033540.tif 000020
【図１９】
2010033540.tif 000021
【図２０】
2010033540.tif 000022
【図２１】
2010033540.tif 000023
【図２２】
2010033540.tif 000024
【図２３】
2010033540.tif 000025
【図２４】
2010033540.tif 000026
【図２５】
2010033540.tif 000027
【図２６】
2010033540.tif 000028
【図２７】
2010033540.tif 000029
【図２８】
2010033540.tif 000030
【図２９】
2010033540.tif 000031