(57)【要約】【課題】ＣソースコードからSystemCソースコードに書き換える際の作業効率を向上させる半導体設計支援装置等を提供すること。【解決手段】ソースコード記憶手段１３と、入力手段１４、１５と、を有する半導体設計支援装置１００において、ソースコード記憶手段１３から第１のソースコードを読み込んで、第１のソースコードに記述された関数に対応する関数ブロックを有する関数ブロック図を生成する関数ブロック図生成手段３１と、関数ブロック図を表示手段１６に表示し、入力手段から入力された関数ブロック図のハードウェア設計情報を取得し、関数ブロック毎の入力、出力又は動作が規定された回路ブロック図を生成する回路ブロック図生成手段３３と、第１のソースコード及びハードウェア設計情報に基づき、ハードウェア記述言語を用いて記述された第２のソースコードを生成するハードウェアソースコード生成手段３２と、を有することを特徴とする。【選択図】図３
2010027005.tif 000002
【特許請求の範囲】
【請求項１】
プログラミング言語を用いて記述された第１のソースコードが保存されるソースコード記憶手段と、ユーザの操作を入力する入力手段と、を有する半導体設計支援装置において、
前記ソースコード記憶手段から第１のソースコードを読み込んで、第１のソースコードに記述された関数に対応する関数ブロックを備えた関数ブロック図を生成する関数ブロック図生成手段と、
前記関数ブロック図を表示手段に表示し、前記入力手段から入力された前記関数ブロック図のハードウェア設計情報を取得し、前記関数ブロック毎の入力、出力又は動作が規定された回路ブロック図を生成する回路ブロック図生成手段と、
第１のソースコード及び前記ハードウェア設計情報に基づき、ハードウェア記述言語を用いて記述された第２のソースコードを生成するハードウェアソースコード生成手段と、
を有することを特徴とする半導体設計支援装置。
【請求項２】
前記表示手段に表示された回路ブロックのうち、複数の前記回路ブロックが前記入力手段により選択された場合、選択された複数の回路ブロックを統合して１つの回路ブロックに置き換えるマージ手段
を有することを特徴とする請求項１記載の半導体設計支援装置。
【請求項３】
前記関数ブロック図生成手段が前記関数ブロック図を生成する際、第１のソースコードの記述と前記関数ブロックの対応関係を記録した対応情報を生成する対応情報生成手段と、
前記表示手段に表示された前記回路ブロック図において、前記入力手段により前記回路ブロックが指定された場合、前記対応情報を参照して、指定された回路ブロックに対応するプログラミング言語の第１のソースコードを表示するソースコード表示手段と、
を有することを特徴とする請求項１又は２記載の半導体設計支援装置。
【請求項４】
プログラミング言語を用いて記述された第１のソースコードが保存されるソースコード記憶手段と、ユーザの操作を入力する入力手段と、を有する半導体設計支援装置の半導体設計支援方法において、
関数ブロック図生成手段が、前記ソースコード記憶手段から第１のソースコードを読み込んで、第１のソースコードに記述された関数に対応する関数ブロックを備えた関数ブロック図を生成するステップと、
回路ブロック図生成手段が、前記関数ブロック図を表示手段に表示し、前記入力手段から入力された前記関数ブロック図のハードウェア設計情報により、前記関数ブロック毎の入力、出力又は動作が規定された回路ブロック図を生成するステップと、
ハードウェアソースコード生成手段が、第１のソースコード及び前記ハードウェア設計情報に基づき、ハードウェア記述言語を用いて記述された第２のソースコードを生成するステップと、
を有することを特徴とする半導体設計支援方法。
【請求項５】
請求項４に記載された半導体設計支援方法により生成された、ハードウェア記述言語を用いて記述された第２のソースコードからレジスタ転送レベルの記述を生成する動作合成ステップと、
レジスタ転送レベルの記述を検証するシミュレーションステップと、
レジスタ転送レベルの記述からゲート・レベルの論理回路を設計する論理ステップと、
論理回路からLSIの製造に必要なマスクを作成するレイアウトステップと、
マスクを用いて半導体ウェハ上に回路を作成する製造ステップと、
を有する半導体集積回路製造方法。
【請求項６】
プログラミング言語を用いて記述された第１のソースコードが保存されるソースコード記憶手段と、ユーザの操作を入力する入力手段と、を有するコンピュータに、
関数ブロック図生成手段が、前記ソースコード記憶手段から第１のソースコードを読み込んで、第１のソースコードに記述された関数に対応する関数ブロックを備えた関数ブロック図を生成するステップと、
回路ブロック図生成手段が、前記関数ブロック図を表示手段に表示し、前記入力手段から入力された前記関数ブロック図のハードウェア設計情報により、前記関数ブロック毎の入力、出力又は動作が規定された回路ブロック図を生成するステップと、
ハードウェアソースコード生成手段が、第１のソースコード及び前記ハードウェア設計情報に基づき、ハードウェア記述言語を用いて記述された第２のソースコードを生成するステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアプログラミング言語及びハードウエア記述言語を用いた半導体設計支援装置、半導体設計支援方法、半導体集積回路製造方法及びプログラムに関する。
【背景技術】
【０００２】
近年のＬＳＩ設計では、Ｃ言語などのソフトウェアプログラミング言語により記述されたソースコード（以下、Ｃソースコードと呼ぶ）から、ハードウェアを自動生成する設計手法が開発されつつある。この設計手法では、Ｃソースコードで記述されたアルゴリズムをSystemCなどのＨＤＬ（hardware description language：ハードウエア記述言語）に書き換え（アーキテクチャ設計）、その後、回路を自動生成するという方法で取られる場合がある（論理設計）。
【０００３】
ＣソースコードからSystemCソースコードに書き換える工程を、経験のある技術者が行っても工数がかかり、また、この工程を自動化しても、Ｃソースコードの実行結果とSystemCのシミュレーション結果が異なった場合、その原因がどこにあるのかを調べるのに多大な工数がかってしまうことが知られている。
【０００４】
そこで、後者のシミュレーション結果の解析に関して、Ｃソースコードの実行結果とSystemCのシミュレーション結果が異なった場合の解析を支援する技術が提案されている（例えば、特許文献１参照。）。特許文献１には、同じ値を取るべきＣソースコードの第１の変数と、SystemCのソースコードの第２の変数のペアを指定しておき、Ｃソースコードの実行結果により得られる第１の変数の値と、SystemCのシミュレーション結果により得られる第２の変数の値とを比較することで、複数のプログラムの動作比較のための作業を簡易化している。
【特許文献１】特開２００６−３０９６６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１には、ＣソースコードからSystemCソースコードに書き換えるという作業そのものの工数削減や技術者支援については開示されていない。例えば、ＣソースコードをSystemCソースコードに書き換えた場合、Ｃソースコードで引数や戻り値と共に定義された関数（プロセス）の集合がSystemCソースコードでは「モジュール」として定義され、モジュール間の入力や出力に引数が対応する。したがって、モジュール（ＳＣ_MODULE）の数が多くなると、指数関数的に入力と出力の数が増大することになり、テキストエディタ等でSystemCソースコードを記述すると、非常に大きな作業負担となってしまうという問題がある。
【０００６】
このためある程度の記述作業をＧＵＩにより軽減する手法がとられる場合がある。商用ツールではメンターグラフィックス社のSystem Desgin（登録商標）等が存在するが、これらのツールを用いても、ブロック図（モジュールの配置およびモジュール間の入出力）は人手により入力する必要があり、モジュールの数が多い場合は負荷の大きい作業工程として残ってしまっている。
【０００７】
また、ブロック図を入力しても、入力した後になるとSystemCソースコード中の記述箇所に対応するＣソースコードの記述箇所を探すことが困難になるという問題もあった。
【０００８】
本発明は、上記課題に鑑み、ＣソースコードからSystemCソースコードに書き換える際の作業効率を向上させ、また、ブロック図中のブロックに対応するＣソースコードの箇所が容易に把握できる、半導体設計支援装置、半導体設計支援方法、半導体集積回路製造方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題に鑑み、本発明は、プログラミング言語を用いて記述された第１のソースコードが保存されるソースコード記憶手段と、ユーザの操作を入力する入力手段と、を有する半導体設計支援装置において、ソースコード記憶手段から第１のソースコードを読み込んで、第１のソースコードに記述された関数に対応する関数ブロックを有する関数ブロック図を生成する関数ブロック図生成手段と、関数ブロック図を表示手段に表示し、入力手段から入力された関数ブロック図のハードウェア設計情報を取得し、関数ブロック毎の入力、出力又は動作が規定された回路ブロック図を生成する回路ブロック図生成手段と、第１のソースコード及びハードウェア設計情報に基づき、ハードウェア記述言語を用いて記述された第２のソースコードを生成するハードウェアソースコード生成手段と、を有することを特徴とする。
【発明の効果】
【００１０】
ＣソースコードからSystemCソースコードに書き換える際の作業効率を向上させ、また、ブロック図中のブロックに対応するＣソースコードの箇所が容易に把握できる、半導体設計支援装置、半導体設計支援方法、半導体集積回路製造方法及びプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
【００１２】
〔半導体設計支援装置１００の概略〕
始めに半導体設計支援装置１００の概略について説明する。なお、以下では、Ｃ（Ｃ＋＋）言語（プログラミング言語という場合がある）で記述されたＣソースコードと、SystemC言語（ＨＤＬ（hardware description language）と言う場合がある）で記述されたSystemCソースコードとを例に説明するが、Verilog （プログラミング言語）とSystemVerilog（ＨＤＬ）、Ｃ（プログラミング言語）とSpecC（ＨＤＬ）のように他の言語においても好適に適用できる。
【００１３】
１．半導体設計支援装置１００は、予め記憶されているＣソースコードを読み込んで、ソースコードに対応した関数ブロック図を生成する。この関数ブロック図はディスプレイ上に表示され、ユーザが関数ブロック毎にハードウェア設計情報を設定することができる。
【００１４】
Ｃソースコードから関数ブロック図を自動生成して、関数ブロックにポートの種類やデータ型を指定して回路ブロック図を作成できるので、作業がビジュアル化され設計が容易になる。なお、関数ブロック図とは、Ｃソースコードから自動生成された直後のブロック図をいい、回路ブロック図とは例えばSystemCの書式に対応するハードウェア設計情報が設定された（埋め込まれた）ブロック図をいう。
【００１５】
２．回路ブロック図においてユーザが複数の回路ブロックをポインティングデバイス等で指定すると、半導体設計支援装置１００は、指定された複数の回路ブロックをまとめて１つの回路ブロックを形成する（マージする）。
【００１６】
回路設計では複数の回路ブロックを１つの回路ブロックにまとめたい場合があるが、半導体設計支援装置１００ではまとめたい回路ブロックをマウス等で指定するだけ１つの回路ブロックにまとめることができるので、回路ブロック図の生成を適切に支援することができる。
【００１７】
３．半導体設計支援装置１００は、ハードウェア情報を付加した回路ブロック図内において、ユーザがマウスなどのポインティングデバイスで所定の回路ブロックを指定すると、指定した回路ブロックに対応するＣソースコード（プログラミング言語で記述された）を表示する。
【００１８】
ハードウェアの回路ブロック図中の回路ブロックに対応するＣソースコードを容易に表示することができるので、SystemCソースコード中の記述箇所に対応するＣソースコードの記述箇所を容易に探すことができる。
【００１９】
〔半導体設計支援装置１００のハードウェア構成〕
図１は、半導体設計支援装置１００のハードウェア構成図の一例を示す。半導体設計支援装置１００は、公知のコンピュータの構成を利用することができる。図示するように、ＣＰＵ１２には内部バスを介してＲＡＭ１１、ハードディスクドライブ１３、キーボード１４、マウス１５及びディスプレイ１６が接続されている。
【００２０】
ハードディスクドライブ１３には、プログラム１７が記憶されている。このプログラム１７をＣＰＵ１２が実行することで、関数ブロック図、回路ブロック図及びSystemCソースコード等が生成される。また、ハードディスクドライブ１３には、Ｃソースコード、関数ブロック図、回路ブロック図、後述する対応情報１，２、及び、SystemCソースコードが記憶される。
【００２１】
ＲＡＭ１１は、ＣＰＵ１２がプログラム１７を実行する際の作業領域となり、ディスプレイ１６には関数ブロック図、回路ブロック図、SystemCソースコード等が表示される。また、マウス１５はユーザに操作され、ディスプレイ１６に表示されている回路ブロックや操作メニューを選択するポインティングデバイスとなる。また、キーボード１４はユーザに操作され、後述するハードウェア設計情報の入力に用いられる。
【００２２】
〔半導体設計支援装置１００の機能ブロック図〕
図２は、半導体設計支援装置１００の機能ブロック図の一例を示す。図２の機能ブロック図は、半導体設計支援装置１００のＣＰＵ１２がプログラム１７を実行することで実現される。所定のＡＳＩＣ（Application Specific Integrated Circuit）により一部又は全てを実現してもよい。
【００２３】
機能ブロック図は、Ｃソースコードから関数ブロック図を生成する関数ブロック図生成部３１、複数の関数ブロックをマージするマージ部３６と関数ブロックにハードウェア設計情報を設定するＨＷ設計情報設定部３７とを有し、関数ブロック図から回路ブロック図を生成する回路ブロック図生成部３３、関数ブロック図生成部３１が関数ブロック図を生成する際にＣソースコードと関数ブロックの対応情報を生成し、また、回路ブロック図生成部３３が回路ブロック図を生成する際にＣソースコードと回路ブロック図の対応情報を生成する対応情報生成部３４、ユーザが指定した回路ブロックが対応するＣソースコードを表示するソースコード表示部３５、及び、Ｃソースコードと回路ブロック図等からSystemCソースコードを生成するＨＤＬソースコード生成部３２、を有する。
【００２４】
なお、図示する以外にもＮＩＣ（Network  Interface  Card）、光学式記憶媒体やフラッシュメモリの読み取り装置等を備えていてもよい。この場合、ＮＩＣを介してプログラム１７を所定のサーバからダウンロードして半導体設計支援装置１００にインストールしたり、光学式記憶媒体やフラッシュメモリに記憶されたプログラム１７を半導体設計支援装置１００にインストールすることができる。
【００２５】
〔SystemCソースコードの生成手順〕
図に示された各機能の詳細と、SystemCソースコードの生成手順について、図３のフローチャート図に基づき説明する。
【００２６】
＜Ｓ１０  Ｃソースコードの読み込み＞
関数ブロック図生成部３１は、ハードディスクドライブ１３に記憶されたＣソースコードを読み込む。関数ブロック図生成部３１は、所定のフォルダーに格納されたＣソースコードのファイル名（*.c  、＊.cpp）をディスプレイ１６に表示しその中からユーザがマウス１５で選択したＣソースコード、又は、ユーザがキーボード１４で入力したファイル名のＣソースコードを読み込む。
【００２７】
＜関数ブロック図の生成＞
図４は、半導体設計支援装置１００に読み込まれたＣソースコードの一例を示す。関数ブロック図生成部３１は、読み込んだＣソースコードを解析し、関数ブロック図を生成する。図示するようにＣソースコードには、関数func１が、
func１（int ain，int bin，int *cout）
*cout＝  ain  + bin 
の様に定義されている。すなわち、変数ainとbinの和が変数coutに格納され、変数coutのアドレス（＆Ｃ）が取得される。したがって、func１に対しては変数ainとbinが入力であり*coutが出力となる。関数ブロック図生成部３１は、コンパイラと同様にＣソースコードの書式を記憶しており、関数毎に入力と出力を決定することができる。
【００２８】
図示するように、関数func１が取得した変数coutに格納された値ｃはfunc２の引数になるので、func２は変数coutに格納された値を引数ｃを介して受けとることができる。
【００２９】
例えばfunc２、func３が、
func２（int cin，int din，int *eout）
*eout＝  cin  + din 
func３（int ein，int fin，int *gout）
*gout＝  ein  + fin 
と定義されていれば、
同様に、変数eoutに格納された値eはfunc３の引数になるので、func３は変数eoutに格納された値を引数eを介して受けとることができる。以上から、変数coutが格納する値ｃは変数cin に入力され、変数eoutが格納する値eは変数einに入力されることになり、関数func１〜func３の入力と出力の関係が明らかとなる。
【００３０】
関数ブロック図生成部３１は、かかる入力と出力の関係を関数ブロック図に表し、ディスプレイ１６に表示する。
【００３１】
図５（ａ）は、関数ブロック図生成部３１が生成した関数ブロック図の一例を示す。関数ブロック２１はfunc１に対応しており引数ａ、ｂが入力されると引数ｃを出力し、関数ブロック２２はfunc２に対応しており引数ｃ、ｄが入力されると引数eを出力し、関数ブロック２３はfunc３に対応しており引数ｅ、ｆが入力されると引数ｇを出力する。
【００３２】
関数ブロック図生成部３１は、関数ブロック２１〜２３を表記するため、予め大きさ（矩形の各辺の長さ）が定められた四角形に対し、入力側の引数の数、出力側の引数の数に応じてそれぞれ接続線の接続位置を定める。そして各関数ブロック２１〜２３の接続位置間又は引数と各関数ブロック２１〜２３の接続位置、を引数の入力と出力の関係に従い結線する。また、各関数ブロック２１〜２３の接続位置に変数名ain等を、接続線の上側に引数名ｃ等を、それぞれ記載する。このようにして、生成された関数ブロック図は、ハードディスクドライブ１３に記憶される。
【００３３】
対応情報について説明する。対応情報生成部３４は、関数ブロック図生成部３１が関数ブロック図を生成する際に、Ｃソースコードと関数ブロック２１〜２３の対応関係を示す対応情報を生成する。
【００３４】
図６（ａ）は対応情報１の一例を示す。対応情報１は、例えば「オブジェクト名」「Ｃソースコードでのオブジェクト名」「Cソースファイル名」「Cソースファイルでの行番号」「オブジェクト種類」である。「オブジェクト名」は、関数ブロック２１〜２３の識別をするための名称で、例えば関数名func１（）から（）を取ったものである。「Ｃソースコードでのオブジェクト名」は関数名であるので例えばfunc１（）となる。「Ｃソースファイル名」「Ｃソースファイルでの行番号」は既知であるし、「オブジェクト種類」はＣソースコードの書式から判別される。
【００３５】
〔Ｓ３０  回路ブロック図の生成〕
回路ブロック図生成部３３は、ハードウェア設計情報を各回路（関数）ブロック２１〜２３に設定して回路ブロック図を生成する。なお、説明を分かりやすくするため、関数ブロック２１〜２３と回路ブロック２１〜２４の符号を共通に用いる。
【００３６】
・回路ブロックのマージ
まず、回路ブロック２２，２３のマージ（統合）について説明する。ウェハ上に回路形成する上でも過度な微細加工を回避したい場合がある。このような要請に応え、本実施形態の半導体設計支援装置１００は、複数の回路ブロックを容易にマージすることができる。
【００３７】
例えば、図５（ｂ）における関数ブロック２２と関数ブロック２３とではeinとeoutを一体にできるので、回路ブロック２２，２３を一体にマージする。マージする場合、ユーザは例えばマウス１５を利用してマージの対象となる複数の回路ブロック２２，２３を選択する。複数の回路ブロック２２，２３の選択は、例えば、「SHIFT」キーを押しながら複数の回路ブロック２２，２３の上でマウス１５をクリックすればよい。これにより、図５（ｂ）に示すように、選択された関数ブロック２２と２３は反転表示される。
【００３８】
ついで、ユーザがマウス１５を右クリックするとポップアップメニューが表示される。図５（ｂ）では「マージ」「マージ解除」というメニューが選択可能になっている。ユーザが「マージ」を左クリックすると、回路ブロック２２と２３がマージされる。なお、マージして生成された回路ブロック２４では「マージ解除」により、１つの回路ブロック２４を元の複数の回路ブロック２２，２３に分解することができる。
【００３９】
マージ部３６は選択された回路ブロック２２と２３の数に応じて予め定められた大きさの回路ブロック２４を形成し、そこに回路ブロック２２、２３が備えていたポートcin、din、fin及びgoutを転記する。回路ブロック２４の転記先の位置は、入力用のポートは左、出力先のポートは右であって、接続線が交差しないか交差数が最小になるように決定される。また、回路ブロック２２と回路ブロック２３とを接続していたeoutとeinはマージにより必要なくなるので表記されない。
【００４０】
図５（ｃ）はマージされた回路ブロック２４の一例を示す。マージ部３６は、マージにより生成された回路ブロック２４に、マージ前の複数のオブジェクト名から決定したオブジェクト名（図ではFunc2_3）を付与する。なお、例えば、「マージ」を左クリックした後にオブジェクト名を入力するダイアログボックスを表示し、ユーザがオブジェクト名を付与してもよいし、マージ部３６が自動的にオブジェクト名を付与した後もユーザが変更可能である。
【００４１】
・ハードウェア設計情報の設定
次に、ハードウェア設計情報の設定について説明する。ハードウェア設計情報の入力には、いくつか提示される選択肢の中から選択する方法と、ユーザがキーボード１４からSystemCソースコードとして入力する方法とがある。
【００４２】
選択肢から選択して設定する場合を図７の回路ブロック図（図５（ｃ）と同じ）を例にして説明する。SystemCでは、モジュール(SC_MODULE）を基本単位にソースコードを生成する。モジュールは外部との接続を行うポートを持ちポートを介して外部と通信する。また、モジュールは１以上のプロセスを持つことができ、プロセスは、ポートから入力されるクロックや信号の変化(イベント)によって起動される。
【００４３】
したがって、図７（ａ）では回路ブロック２１と回路ブロック２４がモジュールに対応し、ain、bin、cout、cin、din、fin及びgoutがポートとなる。例えば、ポートcinにポート情報を設定する場合、ユーザはマウス１５でポートcinを右クリックする。これにより、図７（ｂ）に示すように、ポート設定において設定可能なメニューが一覧表示される。例えば、「ポート名」、「ポートの種類」、「データの型」などを設定することができる。
【００４４】
図7（ｂ）では「ポート名」として「cin」が入力されている。「ポート名」はキーボード１４からユーザが所望の名称を入力でき、また、Ｃソースコードの変数名から自動的に設定された名称を使用してもよい。「ポートの種類」及び「データの型」は、図７（ｂ）に表示された「ポートの種類」「データの型」を、マウス１５で右クリックすると表示される下位層のメニューの一覧の中からそれぞれ選択することができる。
【００４５】
図７（ｃ）は、一覧表示された「ポートの種類」及び「データの型」の一例を示す図である。例えば「ポートの種類」として、TypeA入力、TypeB入力、FIFO入力…を示したが、SystemCの書式では、基本的なポートとして入力sc_in<>、出力sc_out<>、入出力sc_inout<>が定義されている。ユーザは、これらの書式と「TypeA」の対応を把握しているので、「TypeA入力」等の選択によりSystemCの書式に従ったポートの種類を選択することができる。例えば、FIFO入力をマウス１５で選択した場合、ＨＷ設計情報設定部３７は、ポートcinの「ポートの種類」として「fifo_in<>」を設定する。
【００４６】
また、「データの型」として、符号付き整数、符号なし整数、ユーザ定義型…を示したが、SystemCの書式では、データ型として、sc_int<>、sc_uint<>、又は、int、shortなどのC/C++のデータタイプが指定可能なので、符号付き整数等の選択により、ユーザはSystemCの書式に従ったデータの型を選択することができる。例えば、符号無し整数を選択後、数字の「８」を入力すると、ＨＷ設計情報設定部３７は、ポートcinの「データの型」を「8ビットのデータ幅の符号無し整数」に設定する。
【００４７】
以上の設定を入力すると、例えば、「ポート名」は「cin」、「ポートの種類」は「fifo_in<>」、「データの型」は「sc_uint<８>」となる。これをSystemCソースコードの書式に従って記せば、「fifo_in＜sc_uin<８>  ＞  cin」となる。図８（ａ）はポート設定が終了した回路ブロック図の一例を示す。同様にして、ポートdin、fin、goutについても設定することができる。
【００４８】
ユーザがキーボード１４からSystemCソースコードとして入力する場合、ハードウェア設計情報を設定したい回路ブロック２４をマウス１５で右クリックする。例えば、図8（ａ）の回路ブロック２４で右クリックすると、図８（ｂ）に示すように「テキスト編集メニュー」が選択可能に表示される。ユーザが更に「テキスト編集メニュー」をマウス１５で左クリックすると、図８（ｃ）に示すエディター（ウィンドウ）が表示される。ユーザはエディターから回路動作の記述を入力でき、これにより回路の動作そのものをテキスト入力等により記述することができる。
【００４９】
図８（ｃ）では、ポートcinから入力された値を変数ｘに、ポートｄinから入力された値を変数ｙに、ポートｆinから入力された値を変数ｚに、それぞれ格納して加算した後、ポートgoutから出力する回路動作が記述されている。この回路動作がSystemCの「プロセス」の１つとなる。
【００５０】
なお、プロセスにはクロックやイベントに対するセンシティビティを設定できるので、このような定型的な記述に対しては、選択肢から設定可能としてもよい。
【００５１】
回路ブロック図生成部３３は、ハードウェア設計情報が設定された回路ブロック図をハードディスクドライブ１３に記憶する。すなわち、回路ブロック２１、２４毎にポート設定及び回路動作を記憶する。
また、対応情報生成部３４は、回路ブロック図の回路ブロック２１、２４がＣソースコード内のどのオブジェクトに対応するかといった対応情報２を生成する。図６（ｂ）は、回路ブロック図に対応した対応情報２の一例を示す図である。対応情報２の項目は、図6（ａ）の対応情報1と同じである。すなわち、回路ブロック２２、２３がマージされずにハードウェア設計情報が設定された場合、対応情報に変更はない。
これに対し、マージして生成された回路ブロック２４では、マージ部３６が１つのオブジェクト名を自動的に設定しても、元のＣソースコードではマージされた回路ブロック２４に対応するＣソースコードが分散して記述されていることになる。このため、対応情報生成部３４は、マージされた回路ブロック２４のオブジェクト名に対し、マージ前のオフジェクト名を対応づけて対応情報２に登録する。
図６（ｂ）に示すように、オブジェクト名「func2_3」に対し、「func2」と「func3」が対応づけられている。マージ前の回路ブロック２２、２３の対応情報１がハードディスクドライブ１３に記憶されているので、マージ後の対応情報２も対応情報１を利用すれば容易に生成することができる。なお、この対応情報２により、回路ブロック図における各回路ブロック２１、２４に対応するＣソースコードの表示が可能となる。
〔Ｓ４０  SystemCソースコードの生成〕
各回路ブロック２１、２４等に対しポート設定、動作回路の記述が終了すると、SystemCソースコードの生成が可能となる。まず、マージされなかった回路ブロック２１については、ＣソースコードからSystemCソースコードを生成できる。例えば、回路ブロック２１はマージされていないので、func１の各引数をSystemCソースコードにおける回路ブロック２１のポートに対応づけて定義することができる。
【００５２】
func１-> ain(a);
func１-> bin(b);
func１-> cout(c);
これに対し、マージされた回路ブロック２４に対しては、func２、３の各引数をマージ後の回路ブロック２４のポートに対応づけて定義する。
【００５３】
func2_3-> cin(c);
func2_3-> din(d);
func2_3-> fin(f);
func2_3-> gout(g);
ＨＤＬソースコード生成部３２には予めSystemCソースコードの書式が登録されており、
Ｃソースコードから直接SystemCソースコードを生成する技術は公知である。ＨＤＬソースコード生成部３２は、かかる書式に従い、Ｃソースコード、及び、ハードウェア設計情報からSystemCソースコードを生成する。図８（ａ）の回路ブロック図の場合、SystemCソースコードは図９に示すようになる。
〔Ｓ５０  Ｃソースコードの表示〕
ソースコード表示部３５は、対応情報２を参照して、回路ブロック図において指定された回路ブロック２１、２４に対応するＣソースコード又はその行番号を表示する。図１０は、回路ブロック２４に対応するとして表示されたＣソースコードの一例を示す。例えば、ユーザがマウス１５で回路ブロック２４を右クリックするとポップアップメニューが表示され、そこから「Ｃソースコードの表示」を左クリックすると、ソースコード表示部３５は対応情報２を参照する。
【００５４】
対応情報２によれば回路ブロック２４のオブジェクト名であるfunc2_3には、「Ｃソースでのオブジェクト名」としてfunc2とfunc3が登録されており、また、「Ｃソースファイルでの行番号」として３０行と１２００行が登録されている。ソースコード表示部３５は、Ｃソースファイルから対応情報２に登録された行番号のＣソースコードを読み出しディスプレイ１６に表示する。これにより、図示するようにfunc2及びfunc3のソースコードを表示することができる。なお、マージされた回路ブロック２４の場合、複数のマージ前の回路ブロック２２、２３に対応する複数のソースコードが表示されるが、これらは同時に表示してもよいし、ユーザの操作により片方ずつ表示してもよい。
【００５５】
〔SystemCソースコード生成以降の工程〕
SystemCソースコードが生成されれば、以降は公知のツールを利用して半導体集積回路を製造できる。一般的には、SystemCソースコードを、レジスタ転送レベル(RTL（register transfer level）)の記述（レジスタと組合わせ回路の動作をクロック信号のエッジで同期させ、論理機能を論理ゲートで表現することで、レジスタ間の信号の流れを記述したもの）に変換する。
【００５６】
このＲＴＬ記述に対し、対象回路の設計データと検証用のパターン（シミュレーション・パターン）を加えてその応答を観測するシミュレーションを実行し、回路が正しく動作するか否かを検証する。検証には、入力信号や応答信号をグラフィカルに見るため，波形ビューワ（waveform viewer）が用いられることが多く、設計した論理回路の論理機能やタイミングを検証する。
【００５７】
シミュレーション結果が良好であれば、次に、論理合成ツール（logic synthesizer）等を用いて，ＲＴＬ記述から論理合成（ゲート・レベルの論理設計）を行う。ＲＴＬ記述に加え，真理値表，状態遷移記述，論理式などを入力してもよく，所望の半導体製造技術の下で最適なゲート・レベル論理回路（ネットリスト）が自動生成される。
【００５８】
そして、論理回路からＬＳＩの製造に必要なマスクが作成される（レイアウト工程）。すなわち、ＬＳＩのチップ上で、どの回路ブロックをどこに配置するかの大枠が決定され、それに従い、CPU、メモリ、演算器等の配置が決定され、各ブロックが配線で接続される。
【００５９】
マスクが生成されれば、公知のウェハ製造工程（成膜、フォトレジスト塗布、露光、現像、エッチング、フォトレジスト除去、配線等）を施すことで、半導体装置が製造される。  したがって、本実施形態の半導体設計支援装置１００がSystemCソースコードを生成すると、以降の工程により所望の回路の半導体装置を製造することができる。
【００６０】
以上説明したように、本実施形態の半導体設計支援装置１００は、Ｃソースコードから関数ブロック図を自動生成し、関数ブロック図を編集して回路ブロック図を作成できるので、ＣソースコードからSystemCソースコードに書き換える際の作業効率を向上できる。また、複数の回路ブロックをマウス１５で指定するだけで複数の回路ブロックを１つの回路ブロックにまとめることができる。また、対応情報により、回路ブロック図中の回路ブロックに対応するＣソースコードを表示して、両者の対応を容易に把握させることができる。したがって、本実施形態の半導体設計支援装置１００を用いることで、半導体装置の設計期間を大幅に短縮することができる。
【図面の簡単な説明】
【００６１】
【図１】半導体設計支援装置のハードウェア構成図の一例である。
【図２】半導体設計支援装置の機能ブロック図の一例である。
【図３】SystemCソースコードの生成手順を示すフローチャート図の一例である。
【図４】半導体設計支援装置に読み込まれたＣソースコードの一例を示す図である。
【図５】関数ブロック図の一例を示す図である。
【図６】対応情報の一例を示す図である。
【図７】ハードウェア設計情報の設定を模式的に示す図の一例である。
【図８】ポート設定が終了した回路ブロック図の一例を示す図である。
【図９】生成されたSystemCソースコードの一例を示す図である。
【図１０】回路ブロックに対応するとして表示されるＣソースコードの一例を示す図である。
【符号の説明】
【００６２】
１２      ＣＰＵ
１３      ハードディスクドライブ
１５      マウス
１６      ディスクプレイ
３１      関数ブロック図生成部
３２      ＨＤＬソースコード生成部
３３      回路ブロック図生成部
３４      対応情報生成部
３５      ソースコード表示部
１００    半導体設計支援装置
【図１】
2010027005.tif 000003
【図２】
2010027005.tif 000004
【図３】
2010027005.tif 000005
【図４】
2010027005.tif 000006
【図５】
2010027005.tif 000007
【図６】
2010027005.tif 000008
【図７】
2010027005.tif 000009
【図８】
2010027005.tif 000010
【図９】
2010027005.tif 000011
【図１０】
2010027005.tif 000012