(57)【要約】【課題】高位合成ツールを利用した半導体設計にあたり、当該高位合成ツールが市販ツールか内製ツールかにかかわらず、高位合成によって所望の回路サイズや性能を有する半導体集積回路を設計することができる半導体設計支援装置、この装置を用いた高位合成方法及びこの装置としてコンピュータを機能させるための半導体設計支援プログラムを提供する。【解決手段】高位合成の対象となる設計回路の動作を記述した動作記述を入力し、入力した動作記述の中から、配列変数としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列変数を削減対象として検出し、当該削減対象の配列変数に対応する配列を使用しない動作記述に変換する。【選択図】図４
2010238054.tif 000002
【特許請求の範囲】
【請求項１】
高位合成の対象となる設計回路の動作を記述した動作記述を入力し、入力した動作記述の中から、配列変数としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列変数を削減対象として検出し、当該削減対象の配列変数に対応する配列を使用しない動作記述に変換する処理部を備えた半導体設計支援装置。
【請求項２】
処理部は、配列変数への書き込み箇所が動作記述上の１箇所でなされること、別の配列変数から読み出したデータから書き込み用のデータ演算をしていること、及び、書き込みデータの演算式に出現する変数が配列参照用の添え字変数のみであることのいずれの条件も成立する配列変数を、削減対象として検出することを特徴とする請求項１記載の半導体設計支援装置。
【請求項３】
処理部は、動作記述上の削減対象の配列変数の記述において、配列参照用の添え字変数のみを変数とする書き込みデータの演算式を、当該添え字変数を引数に置き換えた関数定義へ変換することを特徴とする請求項２記載の半導体設計支援装置。
【請求項４】
処理部は、動作記述上の削減対象の配列変数の記述において、当該削減対象の配列変数の読み出しデータの演算式を、配列参照用の添え字変数を引数に置き換えた関数の関数呼び出しへ変換することを特徴とする請求項３記載の半導体設計支援装置。
【請求項５】
処理部は、動作記述に含まれる配列変数及び当該配列変数の前記動作記述上での記述内容を一覧とした配列変数テーブルを生成し、当該配列変数テーブルを参照して削減対象の配列変数を検出することを特徴とする請求項１から請求項４のうちのいずれか１項記載の半導体設計支援装置。
【請求項６】
請求項１から請求項５のうちのいずれか１項記載の半導体設計支援装置を用いた高位合成方法において、
処理部が、高位合成の対象となる設計回路の動作を記述した動作記述を入力し、入力した動作記述の中から、配列変数としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列変数を削減対象として検出し、当該削減対象の配列変数に対応する配列を使用しない動作記述に変換するステップと、
高位合成装置が、前記ステップで変換された動作記述を入力して高位合成を実行するステップとを備えたことを特徴とする高位合成方法。
【請求項７】
請求項１から請求項５のうちのいずれか１項記載の半導体設計支援装置としてコンピュータを機能させるための半導体設計支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、動作記述からレジスタ転送レベルを自動生成する高位合成を利用した半導体設計を支援する半導体設計支援装置、この装置を用いた高位合成方法及びこの装置としてコンピュータを機能させるための半導体設計支援プログラムに関するものである。
【背景技術】
【０００２】
従来の半導体集積回路設計では、Ｖｅｒｉｌｏｇ−ＨＤＬやＶＨＤＬ等のハードウェア記述言語で回路に含まれる全てのレジスタを記述し、レジスタとレジスタとの間における組み合わせ回路の動作を記述したレジスタ転送レベル（ＲＴＬ）を作成する。このＲＴＬを論理合成ツールに入力することにより、レジスタ間の機能を全てのゲートに割り当てたゲートレベルを出力させ、これを配置配線する、という工程で半導体集積回路を設計していた。
【０００３】
しかしながら、近年の半導体集積回路の集積度の向上によって半導体チップに集積される回路規模が増大しており、ＲＴＬを手書き設計するには、非常に多くの設計期間が必要となる。これに対して、近年では、ＲＴＬよりも抽象度の高い動作記述からＲＴＬを自動的に生成する高位合成（あるいは、動作合成とも呼ばれる）技術が提唱されており、これを実現する高位合成ツールも市販されている。
【０００４】
上述の動作記述用の言語には、コンピュータプログラム用の言語として一般的に普及しているＣやＣ＋＋等の言語が用いられることが多い。動作記述では、ハードウェアで実現すべき動作のみを記述することは可能であるが、クロックやリセット、レジスタ等の半導体集積回路のハードウェアの概念は記述できない。このため、同じ機能を持つ半導体集積回路用の動作記述とＲＴＬ記述とを比較した場合、動作記述は、ＲＴＬ記述よりも記述量が少なく、この結果として手書き設計に要する設計期間が短くて済む。
【０００５】
動作記述は、動作のみの仕様を記述するもので、実装についての仕様は記述しないが、高位合成における一般的な制約から、動作記述の記述方法によっては結果として得られる実装が影響を受ける場合がある。また、動作記述の中で配列の構文は、まとまった記憶領域をプログラムから効率的に使用するために用いられる。動作記述の中で使用された配列は、記述したアルゴリズムにおいて必要な記憶素子を表すことになる。高位合成においても、配列は、一般的にメモリやレジスタ等の記憶素子へ割り当てられる。さらに、配列は大きなサイズで記述されることが多く、この場合、高位合成においても、そのまま大きなサイズの記憶素子へ割り当てられる。
【０００６】
半導体集積回路で割り当てられる記憶素子としては、先ず、レジスタが挙げられるが、レジスタは、大きな記憶領域を確保するには回路面積が効率的でない。また、ＳＲＡＭ等のメモリ素子は、面積効率が高い反面、記憶領域の個々の要素の読み出しや書き込みを行うアドレスデコーダの並列化数が制限されるため、処理の並列化を抑制する要因となり、性能の高い半導体集積回路が得られない。
【０００７】
一方、コンピュータに搭載された豊富なメモリ資源を前提に記述されたコンピュータプログラムでは、上述したような配列の制約を考慮する必要はない。しかしながら、このようなコンピュータプログラムを基に高位合成用の動作記述をした場合、高位合成における配列のハードウェアへの割り当てが面積あるいは性能の制約となり、所望の回路サイズや性能が得られない可能性がある。
【０００８】
上記不具合を解決する従来の技術として、高位合成段階で動作記述から得られるコントロールデータフローフラグを解析し、複数の配列変数を統合して面積を小さく、かつ高速動作が可能な回路を生成する方法が提案されている（例えば、特許文献１参照）。
【０００９】
また、動作記述では、必ずしも実装について考慮して記述する必要がないため、動作記述に不可欠ではない配列変数を記述することも可能である。例えば、デバッグ時の観測性等を向上させるため、上述のような配列変数が記述される場合がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００５−３４６２９０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１に開示される従来の方法では、動作記述中に含まれる複数の配列変数の処理依存性が、高位合成処理に用いるコントロールデータフローグラフから解析される。この場合、動作記述に不可欠でない配列変数についても他の動作記述に不可欠な配列変数と統合され、ある程度面積効率が上がり、かつ処理性能の低下も防ぐことができる可能性がある。
【００１２】
しかしながら、入力記述の中に配列を記述すると必ず記憶素子への割り当てが発生するため、動作記述に不可欠でない配列が記憶素子として実装される。このような不要な配列変数に起因する記憶素子の生成を防ぐには、動作記述で一般的に数多く使用される配列変数の中から、不要な配列変数に該当するものを見つけ出し、さらに、当該配列変数を使用せず、かつ動作仕様が維持されるように、人手で動作記述を修正する必要があった。
【００１３】
人手による動作記述の修正は非常に困難で時間のかかる作業であり、特に大規模な半導体集積回路では事実上不可能である。このため、大規模な半導体集積回路において、不要な配列変数に起因する記憶素子の生成を妨げることができず、回路面積の増大や処理性能の低下を招いていた。
【００１４】
また、特許文献１に開示される方法は、高位合成処理中の解析結果に対して実施されるものであるため、市販の高位合成ツールを使用する場合に、当該高位合成ツールの１つの機能として実施したい手法が内蔵されていなければ容易に実施することができないという課題があった。
【００１５】
この発明は、上記のような課題を解決するためになされたもので、高位合成ツールを利用した半導体設計にあたり、当該高位合成ツールが市販ツールか内製ツールかにかかわらず、高位合成によって所望の回路サイズや性能を有する半導体集積回路を設計することができる半導体設計支援装置、この装置を用いた高位合成方法及びこの装置としてコンピュータを機能させるための半導体設計支援プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１６】
この発明に係る半導体設計支援装置は、高位合成の対象となる設計回路の動作を記述した動作記述を入力し、入力した動作記述の中から、配列変数としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列変数を削減対象として検出し、当該削減対象の配列変数に対応する配列を使用しない動作記述に変換する処理部を備えるものである。
【発明の効果】
【００１７】
この発明によれば、高位合成の対象となる設計回路の動作を記述した動作記述を入力し、入力した動作記述の中から、配列変数としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列変数を削減対象として検出し、当該削減対象の配列変数に対応する配列を使用しない動作記述に変換する。このように構成することにより、削減可能な配列のない動作記述が得られるため、当該動作記述で高位合成を実施することにより、変換前の動作記述による高位合成結果に比べ、不要な配列変数に起因した面積やタイミング上の制約が緩和され、結果として面積の小さい回路あるいは処理性能の高い回路が得られるという効果がある。また、高位合成の前処理として上述の動作記述の変換を実行するため、市販されている高位合成ツールを含む、あらゆる高位合成ツールとともに使用して容易に上記効果が得られる。
【図面の簡単な説明】
【００１８】
【図１】この発明の実施の形態１による半導体設計支援装置を用いた高位合成システムの構成を示すブロック図である。
【図２】図１中の記憶部に格納される配列変数テーブルの一例を示す図である。
【図３】図１中のファイル記録部に保持される動作記述の一例を示す図である。
【図４】図１中の高位合成システムの動作の流れを示すフローチャートである。
【図５】配列のリスト化処理を施した配列変数テーブルを示す図である。
【図６】動作記述に配列アクセスのリスト化処理を施した際の配列変数テーブルを示す図である。
【図７】記述変換後の動作記述を示す図である。
【発明を実施するための形態】
【００１９】
実施の形態１．
図１は、この発明の実施の形態１による半導体設計支援装置を用いた高位合成システムの構成を示すブロック図であり、この発明による半導体設計支援装置を用いた高位合成システムを示している。図１において、高位合成システム１は、半導体設計支援装置２及び高位合成装置３を備え、高位合成装置３が、半導体設計支援装置２で処理された動作記述を用いて高位合成処理を実行する。高位合成装置３は、例えば、市販もしくは内製の高位合成ツールをコンピュータに実行させることで、当該コンピュータで実現することができる。
【００２０】
半導体設計支援装置２は、処理部４、記憶部５及びファイル記録部６を備える。処理部４は、高位合成の対象となる動作記述の中から配列変数としてデータ保持しなくても、当該動作記述で示される動作に変化がない配列変数を検出し、当該配列変数を使用しない動作記述に変換する手段である。記憶部５は、動作記述に含まれる配列変数に関するデータが登録された配列変数テーブルを、その汎用記憶領域内に格納する記憶部である。ファイル記録部６は、高位合成の対象となる動作記述をファイルとして保持する記憶部であり、高位合成装置３によって動作記述が読み出されて高位合成が実行される。
【００２１】
なお、処理部４は、この発明の趣旨に従う処理内容を記述したプログラムをコンピュータに読み込ませ、そのＣＰＵ（中央演算装置）に実行させることにより、ハードウェアとソフトウェアが協働した具体的な手段として当該コンピュータで実現することができる。また、記憶部５及びファイル記録部６は、上記コンピュータが備える記憶装置（例えば、ハードディスク装置や外部記憶メディア等）の記憶領域上に構築することができる。
【００２２】
図２は、図１中の記憶部に格納される配列変数テーブルの一例を示す図である。配列変数テーブルは、記憶部５の一定の記憶領域に保持され、図４を用いて後述する処理部４による処理で使用される。図２に示すように、配列変数テーブルには、動作記述に含まれる各配列に対して１行毎のエントリが割り当てられる。当該配列変数テーブルの１行には、例えば、配列変数名、該当する配列へ書き込み処理が記述されるプログラム位置（行数）の全て、別の配列から書き込みが行われる場合の配列変数名、書き込み処理における演算式、該当する配列の読み出し箇所を示すデータが格納される。
【００２３】
図３は、図１中のファイル記録部に保持される動作記述の一例を示す図であり、Ｃ言語の配列変数構文に該当するＡ，Ｂ，Ｃという３つの配列変数名が含まれた動作記述を示している。すなわち、当該動作記述には、配列変数名Ａ，Ｂ，Ｃに対応する配列が記述されており、これら配列に記憶素子が割り当てられる。なお、図３に示す動作記述は、Ｃ言語で記述されたプログラムを説明するために必要な一部の記述のみを抜き出したもので、動作記述としては不完全なプログラムである。
【００２４】
次に動作について説明する。
図４は、図１中の高位合成システムの動作の流れを示すフローチャートであり、この図に沿って説明する。
先ず、半導体設計支援装置２で処理を開始すると、処理部４が、ファイル記録部６から高位合成の対象となる動作記述のファイルを読み出して、動作記述に含まれる全ての配列変数名を記憶部５の配列変数テーブルに書き込む（ステップＳＴ１；配列のリスト化）。図３に示す動作記述では配列変数名Ａ，Ｂ，Ｃが抽出され、図５に示すように、配列変数テーブルの各行毎に書き込まれる。
【００２５】
処理部４は、配列のリスト化が完了すると、配列変数テーブルの各行の配列に対して、動作記述の中から、該当する配列へ書き込み処理が記述されるプログラム位置（行数）の全て、別の配列から書き込みされる場合の当該配列の配列変数名、書き込み処理における演算式、該当する配列の読み出し箇所をそれぞれ検索して抽出し、当該配列変数テーブルに書き込む（ステップＳＴ２；配列アクセスのリスト化）。
【００２６】
図３に示す動作記述のうち、配列変数名Ｂの配列へ書き込みが行われる箇所は、代入演算子（＝）の左辺に配列変数名Ｂの配列が現れる５行目の記述である。そこで、図５に示す配列変数テーブルの２行目に対応する配列変数名Ｂの「書き込み箇所」に上述の５行目を示す「５」が書き込まれる。図３において、配列変数名Ｂの配列の書き込み演算式には配列変数名Ａの別の配列が含まれるので、図５に示す配列変数テーブルの配列変数名Ｂの「書き込み配列変数名」には、「Ａ」が書き込まれる。
【００２７】
また、図３に示すように、配列変数名Ｂの配列の書き込み演算式はＢ［ｊ］＝ｆｕｎｃｂ（Ａ［ｊ］）であることから、図５に示す配列変数テーブルの配列変数名Ｂの「書き込み演算式」には、当該演算式が書き込まれる。さらに、図３に示す動作記述のうち、配列変数名Ｂの配列が読み出しされる箇所は、演算式Ｃ［ｋ］＝ｆｕｎｃｃ（Ｂ［ｋ］）が記述された９行目である。このため、図５に示す配列変数テーブルの配列変数名Ｂの「読み出し箇所」には、「８」が書き込まれる。
【００２８】
図５に示す配列変数テーブルにおける他の行に登録された配列変数Ａ，Ｃについても、同じ処理を実施して配列アクセスのリスト化処理を完了することにより、図６に示す状態の配列変数テーブルが得られる。ここまでの処理は、処理部４によって自動的に実施される。
【００２９】
処理部４は、配列アクセスのリスト化処理を施した配列変数テーブルの各行に対して、所定の判定条件に基づく評価を行うことにより、配列変数としてデータ保持しなくても、当該動作記述で示される動作に変化がない配列変数を検出し、配列削減可能と判定する（ステップＳＴ３；配列削減判定）。判定条件としては、書き込み箇所が１箇所であること、書き込み配列変数名が存在すること、及び、書き込み演算式に出現する変数が配列の添え字変数のみであること、の３つの条件があり、これらの全てが成立する配列変数を配列削減可能とする。
【００３０】
図６に示す配列変数テーブルにおいて、配列変数名Ａは「書き込み配列変数名」が「該当無し」であるため、上記判定条件に当てはまらず、配列削減対象とはならない。また、配列変数名Ｃについては「読み出し箇所」が「該当無し」であるため、配列削減対象とはならない。一方、配列変数名Ｂは、「書き込み箇所」が「５」の１箇所であり、「書き込み配列変数名」が存在（Ａ）し、かつ、「書き込み演算式」に出現する変数が、配列の添え字変数であるｊのみであり、全ての判定条件に一致することから、配列削減可能と判定される。
【００３１】
配列削減判定が完了すると、処理部４は、動作記述について、その演算内容を維持しながら配列削減可能と判定された配列変数を使用しないように、所定の変換規則に従い記述を変換する（ステップＳＴ４；記述変換）。変換規則としては、先ず配列変換テーブルにおける配列削減可能とされた配列変数名に対応する「書き込み箇所」の記述を削除する。「書き込み演算式」に記述された配列における配列参照用の添え字が唯一の変数である演算式については、配列の添え字をそのまま引数に置き換えた関数の定義に変換して動作記述に挿入する。さらに、「読み出し箇所」では、動作記述で該当する配列の読み出しを、上述した新たに挿入した関数（配列の添え字をそのまま引数に置き換えた関数）の関数呼び出しに記述を変換する。
【００３２】
図３に示す動作記述から配列削減可能と判定された配列変数名Ｂの「書き込み箇所」には、図６に示すように「５」と記録されているため、処理部４は、図３に示す動作記述の５行目の式を削除する。この動作記述では、５行目の式を削除すると、４行目から始まるｆｏｒループの実行文がなくなり、ループの記述を残す必要がないため、４行目から６行目までのｆｏｒループごと削除される。なお、ループ中に「書き込み箇所」以外の実行文を含む場合は、ループごと削除することはできない。
【００３３】
次に、処理部４は、配列の添え字変数ｊのみが変数である書き込み演算式（代入文）を実行した結果を返す、ｊを引数にとる新しい関数を定義する。ここでは、新しい関数名はｆｕｎｃＢと名付けることにする。さらに、「読み出し箇所」に該当する９行目に存在する配列変数名Ｂの配列の読み出し記述を、新たに定義した関数ｆｕｎｃＢの関数呼び出しへ変換する。このようにして、図３に示す動作記述を変換した結果が図７に示す動作記述である。図７において、文の削除は行わず、コメントアウトによる無効化をしている。
【００３４】
高位合成装置３は、ステップＳＴ１からステップＳＴ４までの処理が施された動作記述をファイル記録部６から読み出して高位合成処理を実行する（ステップＳＴ５；高位合成）。なお、高位合成の対象となる動作記述において配列削減可能と判定された配列が存在する場合であっても、上記ステップＳＴ４による記述変換後の動作記述は、元の動作記述と同一の演算内容を維持しつつ、配列数が削減されている。
【００３５】
高位合成では、動作記述に含まれる配列が記憶素子へ割り当てられるため、記憶素子の面積、あるいはメモリやレジスタファイル等の記憶素子へのアクセスサイクル数が高位合成の結果として実現される回路の大きな制約となる。これに対し、この実施の形態１では、上述のように配列数を減少させることにより、高位合成における面積あるいはサイクル数の制約を減少することが可能となる。このため、面積のより小さい回路、あるいは実行サイクル数のより小さい半導体集積回路を生成することが可能となる。
【００３６】
以上のように、この実施の形態１によれば、動作記述に記述された配列変数の中から動作的に削減可能な配列変数を抽出し、動作記述の演算内容が変化しないように当該配列変数を削減する記述変換を施すことにより、削減可能な配列のない動作記述を得ることができる。また、この変換後の動作記述を高位合成の入力として高位合成を実施することにより、変換前の動作記述を入力とした高位合成結果に比べて、不要な配列変数に起因した面積やタイミング上の制約が緩和され、結果として面積の小さい回路、あるいは処理性能の高い回路を得ることが可能となる。
【００３７】
また、上述した配列変数の削減の高位合成（動作合成）への効果は、一般的な高位合成技術に対して適用可能である。さらに、処理部４が実施する動作記述の変換にかかる処理（ステップＳＴ１〜４）は、高位合成装置３による高位合成処理（ステップＳＴ５）より前に実行されるため、市販されている高位合成ツールを含む、あらゆる高位合成ツールとともに使用して容易に上記効果が得られる。
【００３８】
なお、上記実施の形態１では、便宜的に動作記述をＣ言語で記述した場合を示したが、この発明の要旨は、特定のプログラム言語に限定されない。従って、Ｃ＋＋、ＳｙｓｔｅｍＣ、ＳｙｓｔｅｍＶｅｒｉｌｏｇ等の高位合成に入力する動作記述として用いられる言語に対し同じように適用することができる。
【００３９】
また、上記実施の形態１では、図２に示すような配列変数テーブルを記憶部５の汎用記憶領域内に格納する場合を示したが、より高速に処理を実行するため、配列変数テーブルを半導体設計支援装置２内の専用記憶領域となるＳＲＡＭ等に格納してもよい。
【００４０】
さらに、上記実施の形態１では、図２に示す配列変数テーブルを作成するにあたり、図４に示すように、ステップＳＴ１の配列のリスト化と、ステップＳＴ２の配列アクセスのリスト化との２つの処理に分けているが、必ずしも２処理に分割する必要はなく、処理の実装の都合等に合わせてステップのマージあるいは分割を行って構わない。
【００４１】
さらに、上記実施の形態１では、図４に示す動作を記述したプログラムをコンピュータに実行させることにより、半導体設計支援装置２を実現する場合を示したが、これらの記載は、本発明の実装方法を限定するものではなく、本発明の内容及びその特徴はプログラムが実行されるコンピュータアーキテクチャ等に依存するものではない。
【符号の説明】
【００４２】
１  高位合成システム、２  半導体設計支援装置、３  高位合成装置、４  処理部、５  記憶部、６  ファイル記録部。
【図１】
2010238054.tif 000003
【図２】
2010238054.tif 000004
【図３】
2010238054.tif 000005
【図４】
2010238054.tif 000006
【図５】
2010238054.tif 000007
【図６】
2010238054.tif 000008
【図７】
2010238054.tif 000009