(57)【特許請求の範囲】
【請求項１】
指定された値の時間を消費する時間消費命令を含む複数の命令を有し、前記複数の命令を順次実行することを定めた設計記述と、
前記複数の命令のうちの少なくとも1つである書換起点命令と、経過時間と、前記設計記述に追加すべき追加命令と、を指定した書換指示データと、
前記設計記述において、前記書換指示データに指定された前記書換起点命令を同定する書換起点位置同定部と、
前記書換起点位置同定部により同定された書換起点命令から前記設計記述を実行方向に探索して前記時間消費命令を見つけ、前記書換指示データで指定された前記経過時間が、見つかった時間消費命令により消費される合計消費時間以下になるまで探索を続け、前記経過時間が前記合計消費時間以下となったときの時間消費命令である分割対象命令を検出する、時間消費命令探索部と、
前記経過時間から、前記分割対象命令の直前までに見つけられた時間消費命令により消費される合計時間を減じた第1時間を消費する第1時間消費命令と、前記分割対象命令による消費時間から前記第1時間を減じた第2時間を消費する第2時間消費命令を生成する、時間消費命令分割部と、
前記設計記述において、前記分割対象命令を前記第1時間消費命令および前記第2時間消費命令に置換し、前記書換指示データで指定された前記追加命令を前記第1時間消費命令および前記第2時間消費命令の間に追加する、設計記述追加部と、
前記第1時間消費命令、前記第2時間消費命令および前記追加命令が追加された前記設計記述を出力する出力部と、
を備えた設計記述書換装置。
【請求項２】
前記複数の命令は、分岐命令を含み、
前記時間消費命令探索部は、探索の途中で前記分岐命令を見つけたとき、各分岐先の節の先頭命令からそれぞれ個別に探索を継続する、
ことを特徴とする請求項1に記載の設計記述書換装置。
【請求項３】
前記複数の命令は、ループ命令を含み、
前記時間消費命令探索部は、探索の途中で前記ループ命令を見つけたとき、ループ節内の先頭命令、およびループ節後の最初の命令からそれぞれ別個に探索を行う
ことを特徴とする請求項1に記載の設計記述書換装置。
【請求項４】
前記時間消費命令探索部は、前記ループ節内およびループ節後でそれぞれ分割対象命令を検出し、
前記時間消費命令分割部は、
前記ループ命令の直前にフラグをオンにする命令を追加し、また、前記ループ節内で検出された分割対象命令に対して生成された前記第1および第2時間消費命令の間に、前記フラグがオンならば前記追加命令を実行し前記フラグをオフにすることを指示する第1条件文を、前記追加し、
前記ループ節後で検出された分割対象命令に対して生成された前記第1および第2時間消費命令の間に前記フラグがオンならば前記追加命令を実行することを指示する第2条件文を前記追加する
ことを特徴とする請求項3に記載の設計記述書換装置。
【請求項５】
前記複数の命令は、関数の呼び出しを含み、
前記時間消費命令探索部は、探索の途中で前記関数の呼び出しを見つけたとき、前記関数の節内の先頭命令から探索を継続する
ことを特徴とする請求項1に記載の設計記述書換装置。
【請求項６】
前記複数の命令は、関数リターンを含み、
前記時間消費命令探索部は、前記関数リターンを見つけたときは、呼び出し元の関数の次の命令から探索を継続する
ことを特徴とする請求項5に記載の設計記述書換装置。
【請求項７】
前記時間消費命令に指定された値は変数であり、
前記時間消費命令探索部は、
前記変数の取り得る値の範囲を定めた範囲データを用い、
前記時間消費命令を見つけるごとに、前記経過時間の値から、見つかった時間消費命令の最大値を順次減算して最短時間を計算するとともに、前記経過時間の値から、見つかった時間消費命令の最小値を順次減算して最長時間を計算し、
前記最短時間の値が非正になったときの時間消費命令を、最初の分割対象命令として検出し、
前記最初の分割対象命令が見つかった後、前記最長時間が非正になるまで、見つかったすべての時間消費命令を分割対象命令として検出し、
前記時間消費命令分割部は、前記最初の分割対象命令を含む見つかった分割対象命令のそれぞれに対し、前記経過時間の値から、各前記分割対象命令のそれぞれの直前までに見つけられた時間消費命令の変数の合計を減じた値の時間を消費する第1時間消費命令と、各前記分割対象命令のそれぞれの変数から前記第1時間の値を減じた値の第2時間を消費する第2時間消費命令を生成し、
前記設計記述追加部は、前記最初の分割対象命令を含む見つかった分割対象命令のそれぞれを、
前記第1時間および前記第2時間がいずれもゼロ以上のときには前記第1時間消費命令、前記追加命令および前記第2時間消費命令を実行し、前記第1時間および前記第2時間の少なくとも一方がゼロ未満のときは前記見つかった分割対象命令を実行する、
との条件文に書き換える
ことを特徴とする請求項1に記載の設計記述書換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、デジタル回路を含む電子システムの設計に係わり、より詳細には、デジタル回路の設計記述の書き換えを行う設計記述書換装置およびその方法に関する。
【背景技術】
【０００２】
抽象度の高い記述で書かれたデジタル回路の設計記述の開発や検証において、設計記述に対してプログラム解析またはプログラム変換を行うことで、より抽象度の低い設計記述を生成したり、検証のための機能を盛り込んだ設計記述を生成したりすることは広く行われている。
【０００３】
主に回路検証のための機能を盛り込む場合に、検証対象モジュール内の指定したイベントから指定時間が経過した後に、テスト出力などの動作を追加したい場合がある。この場合、2つの自明な方法が考えられる。
【０００４】
1. 指定されたイベントが発生したと同時に起動し、指定時間経過した後に上記動作を実行するモジュールを、検証対象モジュールに実装する。
【０００５】
2. 指定されたイベントが発生する箇所の先に存在する時間消費命令を手作業で探索し、上記動作を直接追加する。
【０００６】
1つ目の方法は、上記動作が、指定されたイベントと異なるスコープで実行されるため、検証対象モジュール内の状態を参照できない問題がある。また、シミュレーションを行う際にスレッドを起動してしまうため、シミュレーションの効率が大幅に低下してしまうという問題もある。
【０００７】
2つ目の方法は、分岐、ループおよび関数呼び出しをすべてユーザが追跡する必要があるため、自明な場合を除いて時間消費命令を限定できない問題がある。また、設計記述を直接手作業で編集するため、修正漏れ・除去漏れなどのヒューマンエラーを誘発しやすいという問題もある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特許3803561号
【特許文献２】特許4177851号
【特許文献３】特許4147842号
【特許文献４】特許3901530号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、デジタル回路の設計記述の開発および検証を効率化することを可能とした設計記述書換装置およびその方法を提供する。
【課題を解決するための手段】
【００１０】
本発明の一態様としての設計記述書換装置は、設計記述と、書換指示データと、書換起点位置同定部と、時間消費命令探索部と、時間消費命令分割部と、設計記述追加部と、出力部とを備える。
【００１１】
前記設計記述は、指定された値の時間を消費する時間消費命令を含む複数の命令を有し、前記複数の命令を順次実行することを定める。
【００１２】
前記書換指示データは、前記複数の命令のうちの少なくとも1つである書換起点命令と、経過時間と、前記設計記述に追加すべき追加命令と、を指定する。
【００１３】
前記書換起点位置同定部は、前記設計記述において、前記書換指示データに指定された前記書換起点命令を同定する。
【００１４】
前記時間消費命令探索部は、前記書換起点位置同定部により同定された書換起点命令から前記設計記述を実行方向に探索して前記時間消費命令を見つけ、前記書換指示データで指定された前記経過時間が、見つかった時間消費命令により消費される合計消費時間以下になるまで探索を続け、前記経過時間が前記合計消費時間以下となったときの時間消費命令である分割対象命令を検出する。
【００１５】
前記時間消費命令分割部は、前記経過時間から、前記分割対象命令の直前までに見つけられた時間消費命令により消費される合計時間を減じた第1時間を消費する第1時間消費命令と、前記分割対象命令による消費時間から前記第1時間を減じた第2時間を消費する第2時間消費命令を生成する。
【００１６】
前記設計記述追加部は、前記設計記述において、前記分割対象命令を前記第1時間消費命令および前記第2時間消費命令に置換し、前記書換指示データで指定された前記追加命令を前記第1時間消費命令および前記第2時間消費命令の間に追加する。
【００１７】
前記出力部は、前記第1時間消費命令、前記第2時間消費命令および前記追加命令が追加された前記設計記述を出力する。
【図面の簡単な説明】
【００１８】
【図１】第1実施形態に従った設計記述書換装置の構成を示すブロック図である。
【図２】時間消費命令探索部の動作の流れを示すフローチャートである。
【図３】消費時間判定更新部の動作の流れを示すフローチャートである。
【図４】第3実施形態に係る設計記述書換装置のブロック構成を示す図である。
【図５】消費時間範囲判定更新部の動作を説明するフローチャートである。
【図６】設計記述の一例を示す図である。
【図７】設計記述書換指示の一例を示す図である。
【図８】図7の設計記述書換指示から生成された設計記述書換指示内部表現の例を示す図である。
【図９】書換済み設計記述の例を示す図である。
【図１０】第2実施形態に係る設計記述の例を示す図である。
【図１１】第2実施形態に係る書換済み設計記述の例を示す図である。
【図１２】第3実施形態に係る設計記述の例を示す図である。
【図１３】変数範囲情報の例を示す図である。
【図１４】第3実施形態に係る書換済み設計記述の例を示す図である。
【発明を実施するための形態】
【００１９】
（第1実施形態）
図1は、第1実施形態に従った設計記述書換装置の構成を示すブロック図である。
【００２０】
この設計記述書換装置は、設計記述入力部11と、設計記述書換指示入力部12と、書換起点位置同定部13と、時間消費命令探索部14と、消費時間記録部15と、消費時間判定更新部16と、時間消費命令分割部17と、設計記述追加部18と、設計記述出力部19とを備える。時間消費命令探索部14と消費時間判定更新部16とは探索処理部20を形成する。
【００２１】
設計記述入力部11は、書換対象の設計記述を図示しない記憶装置から読み出し、読み出した設計記述を、設計記述内部表現に変換する。
【００２２】
設計記述内部表現は、設計記述の情報を失わない範囲で書換等の処理が行いやすい変形したメモリ表現である。設計記述内部表現は、通常は構文木と呼ばれる木構造により構成される。以下では、簡単のため、特に必要の無い限り、設計記述と設計記述内部表現を区別せずに記述する。すなわち、設計記述内部表現として元の文字列をそのまま扱うものとする。
【００２３】
図6に設計記述の一例を示す。
【００２４】
この設計記述は、回路モジュールFooの記述例である。Fooは、関数event_aを実行し、3クロック待機し、関数event_bを実行し、3クロック待機し、関数event_cを実行し、3クロック待機することを繰り返し続ける。
【００２５】
wait(x)命令は、ｘクロックだけ時間を消費する時間消費命令である。SystemCやSpecCにおいては、待機命令をwait関数の呼び出しとして記述し、ここではその例を用いる。本例では3つの時間消費命令A,B,Cが、それぞれwait(3)として記述されている。
【００２６】
event_a、event_b、event_cは、それぞれ任意のイベントを実行する命令（イベント命令）である。これらのイベント命令ではクロックを消費しないものとする。
【００２７】
このようにFooは,事前に指定された値の時間を消費する時間消費命令A,B,Cを含む複数の命令を有し、複数の命令を順次実行することを定めたものである。
【００２８】
設計記述書換指示入力部12は、設計記述書換指示のデータ（書換指示データ）を図示しない記憶装置から読み出し、当該設計記述書換指示を、設計記述書換指示内部表現に変換する。
【００２９】
設計記述書換指示は、書換起点命令の実行（呼び出し）から経過時間だけ経過したら、追加設計記述断片（追加命令）が実行されるように設計記述を書き換えることを定めている。書換起点命令は、設計記述に含まれる複数の命令のうち、少なくとも1つの命令である。
【００３０】
設計記述書換指示内部表現は、設計記述書換指示から、書換起点命令と、経過時間と、追加設計記述断片とを取り出して1組としたデータである。
【００３１】
図7に設計記述書換指示の一例を示す。
【００３２】
関数event_aが、書換起点命令として指定されている。
【００３３】
5クロックが、経過時間として指定されている。
【００３４】
「puts("foo");」のコード断片が、追加設計記述断片（追加命令）として指定されている。before()は設計記述書換指示であることを表す構文である。
【００３５】
この設計記述書換指示は、event_aの実行から5クロック経過した時点で、「puts("foo");」が実行されるように、設計記述を書き換えることを指示している。puts("foo");は、文字列fooを出力する関数である。
【００３６】
図8に、図7の設計記述書換指示から生成された設計記述書換指示内部表現の例を示す。
【００３７】
この設計記述書換指示内部表現は、書換起点命令を指定した「call(event_a)」と、経過時間としての「5」と、追加設計記述断片としての「puts(“foo”);」の組である。
【００３８】
書換起点位置同定部13は、設計記述内部表現と設計記述書換指示内部表現を受け取り、設計記述書換指示内部表現に含まれる書換起点命令が、設計記述内で存在する場所をすべて同定して出力する。
【００３９】
図8の設計記述書換指示内部表現の例ではevent_a()が書換起点命令として指定されている。図6の設計記述では、関数event_a()の呼び出しは一か所しかないため、この一か所を、書換起点位置として出力する。
【００４０】
書換起点位置の指定は、たとえばテキストコードであれば行と列によって指定でもよいし、木構造であればノードの指定でもよい。
【００４１】
時間消費命令探索部14は、書換起点位置同定部13が出力した書換起点位置をすべて受け取り、各書換起点位置から順方向の位置に存在する時間消費命令を探索して出力する。
【００４２】
SystemCやSpecCなど多くの高位設計向け回路記述言語は、C言語をベースとした手続き型のプログラミング言語となっており、基本的には書換起点位置から実行方向に時間消費命令を探せばよい。ただし、分岐、ループ、関数呼び出しなどがある場合は実行を模倣して追跡する必要がある。これについては後述する他の実施形態で説明する。
【００４３】
本例では、event_a()の呼び出し位置から、順方向の位置に存在する時間消費命令を探索し、消費時間判定更新部16に出力する。本例では、event_a()の呼び出しの直後に時間消費命令Aが存在するため、まずこの時間消費命令Aを出力する。
【００４４】
時間消費命令探索部14は、消費時間判定更新部16からさらなる探索の指示がきたら、さらに先に存在する時間消費命令を探索し、見つけた時間消費命令を、消費時間判定更新部16に出力する。時間消費命令探索部14は、同様にして消費時間判定更新部16から探索指示が来るごとに、さらに次の時間消費命令を探索して、見つけた時間消費命令を返すことを繰り返す。
【００４５】
消費時間記録部15は、書換起点位置から追加記述断片を実行するまでの残り時間を記憶する。書換起点命令が複数存在するときは、書換起点命令毎に当該残り時間を記録する。消費時間記録部15は、消費時間判定更新部16により書き込み（更新）が行われる。
【００４６】
なお、時間消費命令で消費する時間が具体的な値でなく変数などで可変に指定されている場合には、その変数が取り得る範囲を元に、書換起点位置から追加記述断片を実行するまでの残り時間の最長と最短の時間の組である消費時間範囲を記録する必要がある。このように、時間消費命令で消費する時間が変数などで可変に指定される場合については、後述する他の実施形態で述べる。
【００４７】
本実施形態では、時間消費命令が消費する時間が具体的な値の指定により固定されている場合を取り扱う。
【００４８】
消費時間判定更新部16は、設計記述書換指示内部表現と、時間消費命令探索部14が出力した時間消費命令とを入力とする。消費時間判定更新部16は、まず、設計記述書換指示内部表現に基づき、消費時間記録部15に初期状態を記録する。初期状態は、設計記述書換指示における経過時間の値である。
【００４９】
本例では、設計記述書換指示における経過時間である5に対し、「5」という値を記録する。これは、現時点から5クロック後に、設計記述書換指示の持つ追加設計記述断片を実行する必要があることを表す。
【００５０】
消費時間判定更新部16は、時間消費命令探索部14から入力された時間消費命令により消費される時間を計算し、計算した消費時間が、消費時間記録部15に記録された時間（初期状態は経過時間の値）より大きいかを判断する。消費時間記録部15の値から、当該消費時間の値を減算した値が0より大きいときは、経過時間がまだ経過していないと判断し、0以下のときは経過したと判断する。
【００５１】
経過していない場合は、消費時間記録部15を更新する。具体的に、消費時間記録部15の値から当該消費時間の値を減算した値を、消費時間記録部15に書き込む。そして、さらなる探索が必要と判断し、時間消費命令探索部14に探索を指示する。消費時間判定更新部16は、時間消費命令探索部14から返される時間消費命令に基づき、上記と同様にして処理を行う。
【００５２】
消費時間判定更新部16は、経過時間が経過したと判断したときは（すなわち減算値が0以下になったときは）、そのときの時間消費命令（時間消費命令探索部14から最も最近受信した時間消費命令）を、分割対象命令として出力する。
【００５３】
本例では、最初に、時間消費命令A（wait(3)）が入力され、消費時間判定更新部16は、この時間消費命令が実行されても、設計記述書換指示が示す経過時間である5クロックの時点に到達しないことを判断する。すなわち、消費時間記録部15の値5から、wait(3)に示される時間の値3を減算した値は2であり、これはゼロより大きいため、経過時間は経過しないと判断する。消費時間記録部15の値を5から2に更新する。そして、さらに探索を続けることを時間消費命令探索部14に指示する。
【００５４】
時間消費命令探索部14は続けてevent_b()の呼び出しの直後にある時間消費命令B（wait(3)）を出力する。消費時間判定更新部16は、この時間消費命令の実行で、設計記述書換指示が示す経過時間である5クロックの時点に到達すると判断する。
【００５５】
すなわち、消費時間記録部15の値2から、wait(3)に示される時間の値3を減算した値は-1であり、ゼロ以下であるため、この時間消費命令の実行の間に経過時間が経過すると判断する。
【００５６】
したがって、消費時間判定更新部16は、探索の終了を決定し、探索の終了を時間消費命令探索部14に通知する。また、消費時間判定更新部16は、時間消費命令Bを、分割対象命令として、時間消費命令分割部17に出力する。
【００５７】
また、時間消費命令は3クロックを消費し、このうち2クロック目で分割を必要がある（すなわち経過時間が経過した）ことを示す情報として、分割位置情報「2」を出力する。
【００５８】
以下、図2および図3を用いて、時間消費命令探索部14、消費時間判定更新部16および消費時間記録部15の動作をさらに詳細に説明する。
【００５９】
図2は、時間消費命令探索部14の動作の流れを示すフローチャートである。
【００６０】
まず、唯一の書換起点位置であるevent_a()の呼び出し位置をキューに入れる（S11）。なお本実施形態では書換起点位置の命令は、時間消費命令ではないとする。
【００６１】
次にキューが空かどうかを判断し（S12）、空でないため（S12のNO）、キューから、設計記述上の位置（event_a()の位置）を取り出す（S13）。
【００６２】
次の命令に進むと（S14）、その命令の種別を判定し、種別に応じて処理が分岐する。本実施形態では分岐、ループ、関数呼び出し、関数リターンを扱わないためこれらの分岐は無視する。
【００６３】
次の命令はwait(3);であり、この命令は時間消費命令（時間消費命令A）である（S19のYES）。よって、この時間消費命令と書換起点位置を、消費時間判定更新部16に出力する（S24）。ただし、書換起点位置は、書換起点位置毎に、本ステップの1回目のみ出力すればよい。書換起点位置を出力するのは、複数の書換起点位置があったときにそれぞれに対する処理を区別するためである。
【００６４】
さらに探索するかどうかは消費時間判定更新部16によって指示される。ここではさらに探索するよう指示されるため（S25のYES）、当該時間消費命令（時間消費命令A）の位置を、キューに入れる（S26）。
【００６５】
キューが空かどうかの判断（S12）に戻り、空でないため（S12のNO）、キューから設計記述上の位置を取り出す。
【００６６】
次の命令に進むと（S14）、event_b()の呼び出し命令が検出される。この命令は、時間消費命令でないため（S19のNO）、無視して次の命令に進む（S14）。
【００６７】
次の命令はwait(3);であり、この命令は時間消費命令（時間消費命令B）である（S19のYES）。よって、この時間消費命令Bを、消費時間判定更新部16に出力する（S24）。
【００６８】
さらに探索するかどうかは、消費時間判定更新部16によって指示される。ここではさらなる探索を指示されない、すなわち探索の終了が指示される（S25のNO）。したがって、キューの内容を変更されることなしに、キューが空かどうかを判断する（S12）。
【００６９】
この時点ではキューが空であるため、本フローは終了に到達する。
【００７０】
図3は、消費時間判定更新部16の動作の流れを示すフローチャートである。
【００７１】
消費時間判定更新部16は、時間消費命令探索部14から時間消費命令の出力を待つ（S51）。時間消費命令探索部14からの出力が一定時間来なかったら（S52のYES）、本フローを終了する。
【００７２】
時間消費命令探索部14からの出力が来たら（S52のNO）、当該出力を内部に取り込む（S53）。本例では、最初はwait(3);（時間消費命令A）と書換起点位置が入力される。また、消費時間判定更新部16は、設計記述書換指示入力部12から設計記述書換指示内部表現を受け取り、そこに含まれる経過時間の値を、消費時間記録部15に初期状態として記録しておく。
【００７３】
取り込んだ時間消費命令Aが消費する時間は3クロックであるため、消費時間記録部15の値5から3を減算して値2を得る（S54）。
【００７４】
減算値は0以下でない（非正でない）ため、経過時間「5」が達していないと判断する（S55のNO）。したがって、消費時間記録部15を減算値「2」に更新し（S56）、次の探索を行うように時間消費命令探索部14に指示する（S57）。
【００７５】
次にwait(3);（時間消費命令B）が、時間消費命令探索部14から入力される（S51,S52のNO）。
【００７６】
この時間消費命令が消費する時間は3クロックであると判断され、消費時間記録部15の値2から3を減算して値-1を得る（S54）。
【００７７】
-1は0以下である（非正である）ため、経過時間が達したと判断し（S55のYES）、この時間消費命令Bを、分割対象命令として出力する（S58）。この際、2クロック目で分割を必要があることを示す分割位置情報「2」を出力する。時間消費命令探索部14に探索の不要を指示し（S59）、時間消費命令探索部14から一定時間出力が来ないため（S51、S52のYES）、本フローを終了する。
【００７８】
以上のように時間消費命令探索部14と消費時間判定更新部16とを含む探索処理部20は、書換起点命令から設計記述を実行方向に探索して時間消費命令を見つけ、設計記述書換指示に示される経過時間が、見つかった時間消費命令により消費される合計消費時間以下になるまで探索を続ける。そして、経過時間が当該合計消費時間以下となった時間消費命令を、分割対象命令として検出する。
【００７９】
本例では、書換起点命令event_a()から探索して、時間消費命令A,Bを順次見つけ、経過時間である5が、時間消費命令A,Bの合計消費時間である6以下になったときに探索を終了し、最後に見つけた時間消費命令Bを、分割対象命令として検出する。
【００８０】
図1の時間消費命令分割部17は、消費時間判定更新部16が出力した時間消費命令（分割対象命令）を分割する。これは、n単位時間を消費する時間消費命令を、m単位時間消費する時間命令とn-m単位時間を消費する時間命令に分割することを意味する。ただしn、m、n-mはすべて非負数であるとする。
【００８１】
本例では、時間消費命令B(wait(3))を分割する。この時間消費命令Bの2クロック目の経過時点で、追加設計記述断片を実行する必要がある。この命令をwait(2);とwait(1);に分割する。このとき、片方の時間消費命令がwait(0);であった場合は、その呼び出しを省くことができる。
【００８２】
分割対象命令の分割は、換言すれば、分割対象命令から第1時間消費命令と第2時間消費命令とを生成することを意味する。
【００８３】
第1時間消費命令は、経過時間（本例では5）から、分割対象命令の直前までに見つけられた時間消費命令により消費される合計時間（本例では3）を減じた第1時間（本例では2）を消費する時間消費命令（wait(2)）である。
【００８４】
第2時間消費命令は、分割対象命令による消費時間（本例では3）から第1時間（本例では2）を減じた第2時間（本例では1）を消費する時間消費命令（wait(1)）である。
【００８５】
設計記述追加部18は、時間消費命令分割部17により生成された分割時間消費命令の間に、設計記述書換指示に含まれる追加設計記述断片を挿入することにより、書換済み設計記述を生成する。これによって、設計記述書換指示が指示する書換が完了したことになる。
【００８６】
本例では、設計記述書換指示が持つ追加設計記述断片（追加命令）を、各分割時間消費命令の間に挿入する。ここでは、以下のように、「wait(2);」と、「wait(1);」との間に、「puts("foo");」を挿入する。
【００８７】
wait(2);
puts("foo");
wait(1);
【００８８】
設計記述出力部19は、追加設計記述断片が挿入された書換済み設計記述内部表現を、文字列として（すなわち設計記述と同一の形式に変換して）出力する。これによってユーザは書換済みの設計記述を得ることができる。図9に、出力された書換済み設計記述の例を示す。
【００８９】
以上、本実施形態によれば、指定したイベントが発生してから、指定した時間の後に追加動作を行うような設計記述を生成することができる。この変換は自動的に行われるため、各wait命令により指定された値（待機時間）が変更された場合や、設計記述書換指示中の経過時間が変更された場合でも、柔軟に対応することができる。
【００９０】
また、本実施形態に係る、設計記述の自動的な書換を用いることで、デジタル回路の設計記述の開発速度や検証速度の向上を図ることができる。
【００９１】
（第2実施形態）
本実施形態では、設計記述が図10に示すものである場合を説明する。
【００９２】
本実施形態で用いる設計記述書換指示は、第1実施形態と同様に、図7に示されるものであるとする。本実施形態のブロック図は、図1と同じである。
【００９３】
図10の設計記述は、大きく2つのメソッドFoo::Proc()とSubWithWait()からなる。
【００９４】
Foo::Procがメインの処理である。まず関数event_a()を実行する。次にwait(3)（時間消費命令A）の実行により3クロック消費する。
【００９５】
条件condが成立する場合は、関数event_b()を実行し、さらにwait(3)（時間消費命令B）を実行する。wait(3)（時間消費命令B）の実行により3クロック消費する。
【００９６】
条件condが成立しない場合はSubWithWait()（サブルーチン）を呼び出す。SubWithWaitではcond_subが真になるまで、関数event_c()およびwait(3)（時間消費命令C）を実行することを繰り返す。
【００９７】
cond_subが真になったら、関数の呼び出し元に戻り、wait(3)（時間消費命令D）を実行する。
【００９８】
以上を無限に繰り返す。
【００９９】
以下、本実施形態における装置の各要素の動作を説明する。ただし、設計記述入力部11、設計記述書換指示入力部12および書換起点位置同定部13の動作は、第1実施形態と同様であるため、説明を省略する。
【０１００】
まず、図2のフローチャートに基づいて、本実施形態における時間消費命令探索部14の動作を説明する。
【０１０１】
唯一の書換起点位置であるevent_a()の呼び出し位置をキューに入れる（S11）。
【０１０２】
次にキューが空かどうかを判断し（S12）、空でないため（S12のNO）、キューから設計記述上の位置を取り出す（S13）。
【０１０３】
取り出した位置の次の命令に進むと、その命令の種別を判定する。次の命令wait(3);は時間消費命令（時間消費命令A）であるため（S19のYES）、この時間消費命令と書換起点位置とを、消費時間判定更新部16に出力する（S24）。
【０１０４】
さらに探索するかどうかは、消費時間判定更新部16によって指示される。ここではさらに探索するよう指示され、次の命令に進む（S25のYES、S26、S12のNO、S13、S14）。
【０１０５】
次の命令の種別を判定すると、次の命令はif文（すなわち分岐命令）である（S17のYES）。したがって、if文のthen節とelse節のそれぞれの開始位置をキューに入れる（S22）。
【０１０６】
キューが空かどうかの判断に戻り、空でないため（S12のNO）、キューから設計記述上の位置を取り出す。
【０１０７】
取り出した位置の次の命令は、if文のthen節内の最初の命令である。その命令はevent_b()である。event_b()は、ステップS14〜S19で扱われる命令のいずれにも該当しないため、次の命令に進む（S14）。なお、event_bでは時間を消費しないことを仮定している。
【０１０８】
次の命令として、wait(3);を発見する。これは時間消費命令（時間消費命令B）であるため（S19のYES）、この時間消費命令を、消費時間判定更新部16に出力する。
【０１０９】
さらに探索するかどうかは、消費時間判定更新部16によって指示される。ここではさらなる探索を指示されないため（S25のNO）、キューの内容を更新することなく、キューが空かどうかを判断する（S12）。
【０１１０】
この時点ではキューが空ではないため（S12のNO）、else節の開始位置を入力する。その位置の次の命令に進む（S14）。その命令は、SubWithWait()の呼び出しであり（S15のYES）、SubWithWaitの関数定義を追跡する。すなわち、SubWithWait()の先頭位置をキューに入れる（S20）。
【０１１１】
当該先頭位置の次の命令に進み（S12のNO、S13、S14）、次の命令はループ命令であるため（S18のYES）、そのループ命令の位置と、ループ内の最後の命令の位置をキューに入れる(S23)。
【０１１２】
キューが空かどうかを判断し（S12）、空でないため（S12のNO）、キューからループ命令の先頭位置を入力する。
【０１１３】
この位置の次の命令に進み（S14）、その命令はevent_c()である。event_c()は、ステップS14〜S19で扱われる命令のいずれにも該当しないため、次の命令に進む（S14）。
【０１１４】
当該次の命令は、wait(3);（時間消費命令C）であるため（S19のYES）、この時間消費命令を、消費時間判定更新部16に出力する（S24）。
【０１１５】
消費時間判定更新部16によってこれ以上の探索は指示されないため（S25のNO）、キューの内容を更新することなく、キューが空かどうかを判断する（S12）。キューは空でないため（S12のNO）、キューから、ループ内の最後の命令の位置を読み出す（S13）。
【０１１６】
この位置の次の命令に進み（S14）、次の命令はreturn文(関数リターン命令)である（S16のYES）。したがって、関数の呼び出し位置(この場合はSubWithWaitが存在する位置)の位置をキューに入れる（S21）。
【０１１７】
その位置の次の命令に進み（S12のNO、S13,S14）、次の命令はwait(3);（時間消費命令D）である（S19のYES）。よってこの時間消費命令を、消費時間判定更新部16に出力する（S24）。
【０１１８】
ここではさらなる探索を、消費時間判定更新部16から指示されないため（S25のNO）、キューの内容を変更することなく、キューが空かどうかを判断する（S12）。この時点ではキューが空であるため（S12のYES）、本フローは終了に到達する。
【０１１９】
次に、図3のフローチャートに基づいて、本実施形態における消費時間判定更新部16の動作を説明する。
【０１２０】
図7の設計記述書換指示内部表現と、時間消費命令探索部14が出力した時間消費命令A（wait(3);）を受け取り、これらを内部に取り込む（S51、S52、S53）。
【０１２１】
設計記述書換指示内部表現に含まれる経過時間の値を消費時間記録部15に初期状態として記録する。また、時間消費命令Aが消費する時間の長さを計算し、3クロックと判断される。消費時間記録部15の値5から3を減算して値2を得る（S54）。これは追加設計記述断片の実行まであと2クロック要することを表す。
【０１２２】
更新後の値は0以下でない（非正でない）ため、経過時間「5」に達していないと判断する（S55のNO）。消費時間記録部15を「2」に更新し（S56）。時間消費命令探索部14探索に対してさらなる探索を行うように指示する（S57）。
【０１２３】
次にwait(3);（時間消費命令B）が、時間消費命令探索部14から入力される（S51,S52のNO、S53）。
【０１２４】
この時間消費命令が消費する時間は3クロックであると計算される。消費時間記録部15の値2を読み出し、2から3を減算して値-1を得る（S54）。
【０１２５】
-1は0以下である（非正である）ため、経過時間が達したと判断する（S55のYES）。すなわち時間消費命令Bの間で追加設計記述断片を実行する必要がある可能性があると判断する。そして、この時間消費命令Bを、分割位置情報「2」とともに、出力する（S58）。
【０１２６】
時間消費命令Bの後の時間消費命令で追加設計記述断片が実行される可能性はないと判断され、時間消費命令探索部14に探索をこれ以上行わなくていいことを指示する（S59）。
【０１２７】
この指示の後、時間消費命令C（wait(3);）が時間消費命令探索部14から入力される（S51,S52のNO、S53）。
【０１２８】
この時点でも同様に、現在の消費時間記録部15の値2を読み出し、2から3を減算して値-1を得る（S54）。
【０１２９】
-1は0以下である（非正である）ため、経過時間が達したと判断する（S55のYES）。すなわち時間消費命令Cの間で追加設計記述断片を実行する必要がある可能性があると判断する。そして、時間消費命令Cを、分割位置情報「2」とともに、時間消費命令分割部17に出力する（S58）。時間消費命令探索部14に、探索をこれ以上行わなくていいことを指示する（S59）。
【０１３０】
最後に、時間消費命令D（wait(3);）が時間消費命令探索部14から入力される（S51,S52のNO、S53）。
【０１３１】
この時点でも同様に、現在の消費時間記録部15の値2を読み出し、2から3を減算して値-1を得る（S54）。
【０１３２】
-1は0以下である（非正である）ため、経過時間が達したと判断する（S55のYES）、すなわち時間消費命令Dの間で追加設計記述断片を実行する必要がある可能性があると判断する。そして、この時間消費命令Dを、分割位置情報「2」とともに、時間消費命令分割部17に、出力する（S58）。
【０１３３】
時間消費命令探索部14に探索を、これ以上行わなくていいことを指示する（S59）。
【０１３４】
消費時間記録部15からこれ以上、時間消費命令は入力されないため（S52のYES）、本フローを終了する。
【０１３５】
次に、消費時間記録部15の動作について説明する。
【０１３６】
消費時間記録部15は、初期状態では設計記述書換指示内部表現に示される経過時間の値5を保持する。消費時間判定更新部16により、5が読み出した後、2が書き込まれる。消費時間記録部15は2を保持し、消費時間判定更新部16により、この値2が複数回読み出される。
【０１３７】
次に、時間消費命令分割部17の動作について説明する。
【０１３８】
時間消費命令分割部17は、消費時間判定更新部16から3つの時間消費命令B,C,Dと、それぞれの分割位置情報を受け取る。これらの時間消費命令B,C,Dはいずれもwait(3);である。
【０１３９】
時間消費命令分割部17は、時間消費命令B,C,Dのそれぞれを、分割位置情報に従って、wait(2);およびwait(1);の2つの時間消費命令に分割する。
【０１４０】
次に、設計記述追加部18の動作について説明する。
【０１４１】
設計記述追加部18は、時間消費命令B,C,D毎に、時間消費命令分割部17により得られた分割時間消費命令の間に、設計記述書換指示内部表現に含まれる追加設計記述断片を挿入する。
【０１４２】
ここでは、
wait(2);
puts("foo");
wait(1);
となるように挿入する。
【０１４３】
ただし、時間消費命令Cは、ループ内に存在する時間消費命令であり、時間消費命令Dは、ループの後に存在する時間消費命令である。したがって、ループ内で時間消費命令Cが実行されるか否かに応じて、時間消費命令Dが実行される時点のクロック数が、意図されているものとは限らないことに注意する必要がある。
【０１４４】
そこで、trueで初期化されたbooleanの変数flagを宣言する記述を、ループの前に追加する。そして、時間消費命令C,Dの箇所では、以下のように、puts("foo");ではなく、if(flag){puts("foo");flag=false;};を追加する。これは、flagがtrueであるならば、puts("foo")を実行し、さらにflagをfalseに設定することを表す。
【０１４５】
wait(2);
if(flag){puts("foo");flag=false;};
wait(1);
【０１４６】
これにより、puts("foo");の追加動作が、確実に1回のみ実行されるようにする。すなわち、この追加動作は、ループ内で実行されたときは、ループ外では再度は実行されず、ループ内で実行されなかったときは、ループ外で実行される。時間消費命令がループ内もしくはループ外にあることは、時間消費命令探索部14から直接、または消費時間判定更新部16を介して、通知を受けることによって認識すればよい。
【０１４７】
なお本実施形態ではループ内に時間消費命令が存在する場合、当該ループ内の時間消費命令の実行で、経過時間が達することを、暗に前提としている。またifのthen節とelse節ではそれぞれ同じ時間だけ消費することを、暗に前提としている。
【０１４８】
次に、設計記述出力部19の動作について説明する。
【０１４９】
設計記述出力部19は、以上の解析・分割・挿入を経て得られた書換済み設計記述内部表現を、設計記述の形式に変換し、書換済み設計記述出力する。
【０１５０】
図11に、設計記述出力部19により出力される書換済み設計記述の例を示す。
【０１５１】
以上、本実施形態によれば、関数、ループおよび条件分岐が含まれていても、指定したイベントが発生してから、指定した時間の後に追加動作を行うような設計記述を生成することができる。
【０１５２】
（第3実施形態）
本実施形態では、時間消費命令によって消費される時間の値が、変数で指定されている場合を取り扱う。この場合、その変数が取り得る値の範囲を考慮して、経過時間の到達までの残り時間の範囲を算出し、経過時間が到達する可能性がある時間消費命令では分割を行う必要がある。以下、本実施形態の詳細について説明する。
【０１５３】
図4に、本実施形態に係る設計記述書換装置のブロック構成を示す。
【０１５４】
図1の消費時間記録部15が消費時間範囲記録部25に置き換わり、図1の消費時間判定更新部16が消費時間範囲判定更新部26に置き換わっている。また変数範囲情報解析部31が新たに追加されている。図1と同一名称の要素には同一の符号を付して、拡張された処理を除き、重複する説明を省略する。消費時間範囲判定更新部26と時間消費命令探索部14とは、探索処理部40を形成している。
【０１５５】
図12に、本実施形態で取り扱う設計記述の例を示す。図12の設計記述は、第1実施形態で用いた図6の設計記述とほぼ同じであるが、消費するクロック数がそれぞれa,b,cというように変数によって指定されている点が、第1実施形態と異なる。
【０１５６】
本実施形態で取り扱う設計記述書換指示は、第1実施形態と同様に、図7に示すものであるとする。
【０１５７】
変数範囲情報解析部31は、設計記述中の個々の変数がとりうる値の範囲を静的または動的に解析する
今回は、図12に示されていない、設計記述の箇所からa,b,cの変数が取り得る値の範囲を解析する。変数範囲情報解析部31は、解析の結果として、変数の取り得る値の範囲を示した変数範囲情報を得る。
【０１５８】
ここでは図13に示す変数範囲情報が得られたとする。
【０１５９】
このような変数範囲の解析には。abstract interpretationやinvariant detectionなどの公知技術を用いればよい。
【０１６０】
消費時間範囲判定更新部26では、この解析結果を利用することで、時間消費命令が消費しうる時間の最大時間と最小時間を絞り込むことができ、その結果シミュレーションの効率低下を防ぐことができる。
【０１６１】
本実施形態では変数解析により変数の値の範囲を求めているが、変数の値の範囲を定めた定義データを用意し、変数範囲情報の解析に代えて、この定義データを用いてもよい。
【０１６２】
以下、本実施形態における装置内の各要素の動作について詳細に説明する。
【０１６３】
設計記述入力部11、設計記述書換指示入力部12、書換起点位置同定部13の動作は、第1実施形態と同様であるため、説明を省略する。
【０１６４】
図2のフローチャートに基づいて、時間消費命令探索部14の動作を説明する。
【０１６５】
まず、唯一の書換起点位置であるevent_a()の呼び出し位置をキューに入れる（S11）。
【０１６６】
次にキューが空かどうかを判断し（S12）、空でないため（S12のNO）、キューから設計記述上の位置を取り出す（S13）。
【０１６７】
次の命令に進むと、wait(a)が見つかる（S14）。wait(a);は時間消費命令（時間消費命令A）であるため（S19のYES）、この時間消費命令および書換起点位置を、消費時間範囲判定更新部26に出力する（S24）。
【０１６８】
さらに探索するかどうかは、消費時間範囲判定更新部26によって指示される。ここではさらに探索するよう指示されるため（S25のYES）、時間消費命令Aの呼び出し位置をキューに入れる（S26）。
【０１６９】
キューが空かどうかの判断に戻り、空でないため（S12のNO）、キューから設計記述上の位置を取り出す。
【０１７０】
次の命令に進むと（S14）、event_b()が見つかる。このevent_b()は、時間消費命令等でないため（S19のNO）、次の命令に進む（S14）。
【０１７１】
次の命令はwait(b);である。wait(b);は時間消費命令であるため（S19のYES）、この時間消費命令を、消費時間範囲判定更新部26に出力する（S24）。
【０１７２】
さらに探索するかどうかは、消費時間範囲判定更新部26によって指示される。ここではさらに探索するよう指示されるため（S25）、時間消費命令Bの呼び出し位置をキューに入れる（S26）。
【０１７３】
キューが空かどうかの判断に戻り、空でないため（S12のNO）、キューから設計記述上の位置を取り出す（S13）。
【０１７４】
次の命令に進むと（S14）、event_c()が見つかる。このevent_c()は時間消費命令等でないため、次の命令に進む（S14）。
【０１７５】
次の命令はwait(c);である。wait(c);は時間消費命令であるため（S19のYES）、この時間消費命令を、消費時間範囲判定更新部26に出力する（S24）。
【０１７６】
さらに探索するかどうかは、消費時間範囲判定更新部26によって指示される。ここではさらなる探索を指示されないため（S25のNO）、キューの内容を更新することなく、キューが空かどうかを判断する（S12）。この時点で、キューが空であるため（S12のYES）、本フローチャートは終了に到達する。
【０１７７】
図5は、消費時間範囲判定更新部26の動作を説明するフローチャートである。
【０１７８】
消費時間範囲判定更新部26は、変数範囲情報を、変数範囲情報解析部31から受け取る（S101）。
【０１７９】
図7の設計記述書換指示内部表現と、時間消費命令探索部14が出力した時間消費命令A（wait(3);）を受け取る（S102、S103、S104）。消費時間範囲判定更新部26は、消費時間範囲記録部25の初期状態として、設計記述書換指示内部表現における経過時間である5に対し、(5,5)という範囲を記録する。カッコ内の左側は、経過時間が到達するまでの最短時間を示し、右側が、経過時間が到達するまでの最長時間を示す。
【０１８０】
wait(a)の引数を見て、この時間消費命令が消費する時間の長さを判定する（S105）。この場合は、変数範囲情報解析部31が出力した変数範囲情報から、wait(a);は、最短1クロック、最長3クロックの時間を消費することを決定できる。そして、消費時間範囲記録部25から、(5,5)を読み出し、それぞれから3と1を引いた範囲(2,4)を計算によって求める（S105）。この範囲(2,4)は、追加設計記述断片を実行するまでに最短でもあと2クロック、最長でもあと4クロック要することを表す。
【０１８１】
最短時間がゼロより大であり（非正でない）（S106のNO）、最長時間がゼロより大である（非正でない）ため（S107のNO）、この時点で追加設計記述断片を実行することはあり得ないと判断する。
【０１８２】
ステップS105で計算された範囲(2,4)を、消費時間範囲記録部25に記録し（S108）、時間消費命令探索部14に対してさらなる探索を行うように指示する（S109）。
【０１８３】
次に、時間消費命令探索部14が出力した時間消費命令wait(b);を受け取る（S102、S103、S104）。
【０１８４】
wait(b)の引数に基づき、この時間消費命令が消費する時間の長さを判定する（S105）。この場合は、変数範囲情報解析部31が出力した変数範囲情報から、wait(b);は、最短3クロック、最長5クロックの時間を消費することを決定できる。そして、消費時間範囲記録部25から現在の値(2,4)を読み出し、それぞれから5と3を引いた範囲(-3,1)を計算によって求める（S105）。
【０１８５】
最短時間が負であるため（S106のYES）、この時間消費命令の実行間に追加設計記述断片を実行する必要がある可能性があると判断する。つまり、最短時間が非正になった（0以下になった）ときの時間消費命令Bを、最初の分割対象命令として検出する。
【０１８６】
この時間消費命令を、分割位置情報とともに時間消費命令分割部17に出力する（S110）。分割位置情報は、経過時間から、直前までに見つかったすべての時間消費命令の変数を減算した値である。ここでは経過時間が5，直前までに見つかった時間消費命令はAのみである。よって分割位置情報は5-aとなる。
【０１８７】
最長時間はゼロより大であるため（S107のNO）、ステップS105で計算された(-3,1)を、消費時間範囲記録部25に記録し（S108）、時間消費命令探索部14に対してさらなる探索を行うように指示を行う（S109）。
【０１８８】
次に、時間消費命令探索部14が出力した時間消費命令wait(c);を受け取る（S102、S103、S104）。
【０１８９】
wait(c)の引数に基づき、この時間消費命令が消費する時間の長さを判定する（S105）。この場合は、変数範囲情報解析部31が出力した変数範囲情報から、wait(c);は、最短4クロック、最長5クロックの時間を消費することを決定できる。そして、消費時間範囲記録部25から、現在の最短と最長の残り時間を示した(-3,1)を読み出し、それぞれから5と4を引いた範囲(-8,-3)を計算によって求める（S105）。
【０１９０】
最短時間が負であるため(S106のYES)、この時間消費命令の間で追加設計記述断片を実行する必要がある可能性があると判断する。したがって、この時間消費命令を、分割位置情報とともに出力する（S110）。分割位置情報は、上述したように、経過時間から直前までに見つかったすべての時間消費命令の変数を減算した値である。ここでは経過時間が5，直前までに見つかった時間消費命令はA、Bである。よって分割位置情報は5-a-bとなる。
【０１９１】
最長時間も負であるため（S107のYES）、この後の時間消費命令で追加設計記述断片が実行される可能性はないと判断し、時間消費命令探索部14に探索をこれ以上行わなくていいことを指示する（S111）。
【０１９２】
このように、上記フローでは、最初の分割対象命令が見つかった後、最長時間が非正になるまで、見つかったすべての時間消費命令を分割対象命令として検出する。
【０１９３】
時間消費命令探索部14からこれ以上、時間消費命令は入力されないため（S103のYES）、本フローの処理を終了する。
【０１９４】
次に、消費時間範囲記録部25の動作について説明する。
【０１９５】
消費時間範囲記録部25は、初期状態では設計記述書換指示における経過時間である5に対し、(5,5)という範囲を保持している。
【０１９６】
消費時間範囲判定更新部26によって(5,5)が読み出された後、(2,4)を書き込まれる。
【０１９７】
消費時間範囲判定更新部26によって(2,4)が読み出された後、(-3,1)を書き込まれる。
【０１９８】
消費時間範囲判定更新部26によって(-3,1)が読み出された後、これ以上の更新は行われない。
【０１９９】
次に、時間消費命令分割部17の動作について説明する。
【０２００】
時間消費命令分割部17は、時間消費命令BとCの2つの時間消費命令を受け取る。各時間消費命令をそれぞれ2つに分割する。
【０２０１】
具体的に、時間消費命令Bを、wait(5-a);wait(b-(5-a));と分割する。時間消費命令Cを、wait(5-a-b);wait(c-(5-a-b));と分割する。
【０２０２】
次に、設計記述追加部18の動作について説明する。
【０２０３】
設計記述追加部18は、時間消費命令分割部17で生成した分割時間消費命令の間に、設計記述書換指示内部表現に含まれる追加設計記述断片を挿入する。
【０２０４】
ここでは、以下のように、2つの分割時間消費命令（wait(5-a);wait(b-(5-a));）の間に、puts("foo");を追加する。
【０２０５】
wait(5-a);
puts("foo");
wait(b-(5-a));
【０２０６】
また、以下のように、2つの分割時間消費命令（wait(5-a-b);wait(c-(5-a-b));）の間に、puts("foo");を追加する。
【０２０７】
wait(5-a-b);
puts("foo");
wait(c-(5-a-b);
【０２０８】
ただし、このままでは負の数の時間の待機（wait）が行われる可能性がある。
【０２０９】
そのため、wait命令の引数が負にならないかどうかをチェックする設計記述断片も合わせて挿入する。
【０２１０】
具体的には、前者に対して
if(5-a>=0&&b-(5-a)>=0){
wait(5-a);
puts("foo");
wait(b-(5-a));
}
else{
wait(b);
}
とする。
【０２１１】
また後者に対して、
if(5-a-b>=0&&c-(5-a-b)>=0){
wait(5-a-b);
puts("foo");
wait(c-(5-a-b));
}
else{
wait(c);
}
とする。
【０２１２】
次に、設計記述出力部19の動作について説明する。
【０２１３】
設計記述出力部19は、以上の解析・分割・挿入を経て得られた書換済み設計記述内部表現を設計記述の形式に変換し、この結果得られる書換済み設計記述を出力する。
【０２１４】
図14に、設計記述出力部19により出力される書換済み設計記述の例を示す。
【０２１５】
以上、本実施形態によれば、時間命令消費命令の消費値が変数で指定された場合であっても、指定したイベントが発生してから、指定した時間の後に追加動作を行うような設計記述を生成することができる。
【０２１６】
なお、上記の各実施形態に示した設計記述書換装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、当該装置における各要素は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、本装置は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、同装置内の記録部（記憶部）は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体などを適宜利用して実現することができる。
【０２１７】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図１】
0005171914.tif 000002
【図２】
0005171914.tif 000003
【図３】
0005171914.tif 000004
【図４】
0005171914.tif 000005
【図５】
0005171914.tif 000006
【図６】
0005171914.tif 000007
【図７】
0005171914.tif 000008
【図８】
0005171914.tif 000009
【図９】
0005171914.tif 000010
【図１０】
0005171914.tif 000011
【図１１】
0005171914.tif 000012
【図１２】
0005171914.tif 000013
【図１３】
0005171914.tif 000014
【図１４】
0005171914.tif 000015