(57)【要約】【課題】  動作合成の振る舞いに影響を与えることなく、人が容易に信号波形を理解することを可能にする動作合成検証装置及び方法を提供することを課題とする。【解決手段】  変数を含む入力データ（１０１）を基に、サイクル情報及び内部信号を有する第１の回路データを生成する動作合成部（６００）と、前記変数、前記サイクル情報及び前記内部信号の対応関係（６０１）を記憶する記憶手段とを有する動作合成検証装置が提供される。【選択図】        図７
2006309667.tif 000002
【特許請求の範囲】
【請求項１】
変数を含む入力データを基に、サイクル情報及び内部信号を有する第１の回路データを生成する動作合成部と、
前記変数、前記サイクル情報及び前記内部信号の対応関係を記憶する記憶手段と
を有する動作合成検証装置。
【請求項２】
さらに、前記第１の回路データのシミュレーションを行うことにより前記内部信号の波形データを生成する第１の波形データ生成部と、
前記内部信号の波形データ及び前記記憶した対応関係を基に、前記変数の波形データを生成する第２の波形データ生成部と
を有する請求項１記載の動作合成検証装置。
【請求項３】
さらに、前記第１の回路データ及び前記記憶した対応関係を基に、前記変数を有する第２の回路データを生成する回路データ加工部と、
前記第２の回路データのシミュレーションを行うことにより前記変数の波形データを生成する波形データ生成部と
を有する請求項１記載の動作合成検証装置。
【請求項４】
前記動作合成部は、前記入力データを基に資源共有化を行って第１の回路データを生成する請求項１〜３のいずれか１項に記載の動作合成検証装置。
【請求項５】
変数を含む入力データを基に、サイクル情報及び内部信号を有する第１の回路データを生成する動作合成ステップと、
前記変数、前記サイクル情報及び前記内部信号の対応関係を記憶する記憶ステップと
を有する動作合成検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作合成検証装置及び方法に関する。
【背景技術】
【０００２】
動作合成技術は、クロックサイクルが明確ではない記述から、テクノロジデータの情報を利用して、クロックサイクルが明確なＲＴＬ（レジスタトランスファレベル）の回路データを生成する技術である。この技術では、通例、クロックサイクルを明確にする処理に加えて、レジスタや演算器の共有化処理が行われる。複数の変数が１つの内部信号にマッピングされることがある。動作合成は内部信号を自動生成し、変数名データが残っておらず、内部信号は自動生成された機械的な信号名になっている。このため、動作合成結果の回路の内部信号の動作を波形ビューワで検証することができない。このため、動作合成された回路は入出力信号だけで内部動作を推定しなければならないという問題があった。
【０００３】
これを解決する１方法として、下記の特許文献１がある。これは、入出力ポートの名前が残る性質を利用している。観測したい内部信号を外部の出力ポートにつなげる。ポートは名前が残るので、内部の信号を観測する代わりに、ポートの出力を観測することで内部信号の様子を観測する技術である。しかし、この方法では出力ポートに出力する書き直し工数がかかる。また、この変更により動作合成の振る舞いが変わる。このため、動作合成ツールのバグによる不具合は再発しなくなり、デバッグできない状況になる危険性がある。すなわち、ポートに出力する機能部分も動作合成対象になるので生成される回路が所望のものと異なる回路になる可能性があり、検証すべき対象の回路を検証したことにならないという問題点があった。
【０００４】
下記の特許文献２は、動作レベルの回路記述とレジスタトランスファレベルの回路記述との等価性をそれぞれのシミュレーション結果から求める等価性検証方法を開示している。下記の特許文献３は、動作合成装置及びクロックベースシミュレーション装置を有する消費電力見積り装置を開示している。下記の特許文献４は、全体検証における、シミュレーション結果をもとに、検証対象の一部分だけを任意の検証レベルに詳細化する高速シミュレーション方法を開示している。下記の特許文献５は、論理シミュレーション実行結果から任意の観測値を選択したとき、選択した観測値を出力している回路と信号名を自動的に特定できる手段と特定された回路と信号名を表示できる手段と特定された信号名と波形表示情報から波形が表示できる手段を具備する波形表示方式を開示している。下記の特許文献６は、シミュレーション結果データと接続情報とにより作成された波形群データについて、波形グループ化処理部により自動的に波形グループデータ群を作成し一覧表示し、さらに、階層化処理部により階層的波形グループデータを作成し一括してグラフ表示し解析を行う電子回路波形解析装置を開示している。下記の特許文献７は、あるノードにおける時間と出力状態との関係を示すシミュレーション結果と、あるノードの時間における出力状態の条件を指定する条件情報とを比較して判定するシミュレーション結果検証方法を開示している。
【０００５】
【特許文献１】特開２００４−１３９３０９号公報
【特許文献２】特開２００４−１４５７１２号公報
【特許文献３】特開２００４−５４７５６号公報
【特許文献４】特開２０００−３４８０７６号公報
【特許文献５】特開平１１−１７５５８２号公報
【特許文献６】特開平５−１５１３０４号公報
【特許文献７】特開２００４−１３５９５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
動作合成の振る舞いに影響を与えることなく、内部の信号を人が理解できる形態で観測できるようにしなければならない。前述のとおり、そのまま信号をダンプすると、内部の信号は機械的な名前になるため、人が直観的に理解することができない。人が理解できる形態で表示できるようにしなければならない。
【０００７】
内部の信号が観測できず、内部の信号を観測して障害原因を特定することができない問題が存在する。回避策として内部の信号を出力ポートに出す方法があるが、これは回路そのものに変更を加えるため、動作合成で得られる回路が本来検証したい回路と別物であり、障害が再現しない可能性があった。
【０００８】
本発明の目的は、動作合成の振る舞いに影響を与えることなく、人が容易に信号波形を理解することを可能にする動作合成検証装置及び方法を提供することである。
【課題を解決するための手段】
【０００９】
本発明の一観点によれば、変数を含む入力データを基に、サイクル情報及び内部信号を有する第１の回路データを生成する動作合成部と、前記変数、前記サイクル情報及び前記内部信号の対応関係を記憶する記憶手段とを有する動作合成検証装置が提供される。
【発明の効果】
【００１０】
入力データの変数と内部信号との対応関係を記憶することにより、入力データの変数の波形データを観測することが可能になる。これにより、人が直感的に入力データの変数の波形データを観測できるようになる。
【発明を実施するための最良の形態】
【００１１】
（第１の実施形態）
図１は、本発明の第１の実施形態による動作合成部６００の構成例を示す図である。動作合成部６００は、手続き的な入力記述データ１０１、テクノロジデータ１０３及び動作周波数情報１０２を入力し、ＲＴＬ（レジスタトランスファレベル）回路記述データ１１１を自動生成する。手続き的な入力記述データ１０１は、Ｃ／Ｃ＋＋コンピュータ言語の記述のように機能を実現する処理を順番に書いたものである。テクノロジデータ１０３は、回路要素（ＡＮＤゲート、加算器等）の遅延情報を集めたデータベースである。動作合成部６００は、動作周波数情報１０２で指定されたクロックで誤動作しない回路記述データ１１１を生成する。
【００１２】
図２は、手続き的な入力記述データ１０１の例を示す図である。この例は、変数a1及びa2を加算して飽和演算し、変数b1及びb2を加算して飽和演算し、これらの結果を平均し、飽和演算する機能を手続き的に書いたものである。入力記述データ１０１は、ハードウエア記述言語ＶｅｒｉｌｏｇやＶＨＤＬで記述され、論理合成の入力となるＲＴＬ記述データ１１１と異なり、レジスタが明示的に示されていない。また、入力記述データ１０１は、演算器やレジスタの共有に関する記述、制御回路（ＦＳＭ（有限ステートマシン）等）も記述されていない。
【００１３】
動作合成部６００は、図１のような変数を含む手続き的な入力記述データ１０１とテクノロジデータ１０３及び動作周波数情報１０２を使って、レジスタを自動挿入し、演算器やレジスタの共有（資源の共有）を計画（スケジューリング）し、資源共有のための回路、全体を制御する回路（通例有限ステートマシン）を自動生成して、これらを結合して、レジスタが明示された論理合成可能なＲＴＬ回路記述データ１１１を出力する。
【００１４】
図２の入力記述データ１０１を例にして、図１の動作フローを詳細に説明する。最初に、ＣＤＦＧ（コントロールデータフローグラフ）生成処理部１０４は、入力記述データ１０１を基にＣＤＦＧ１０５を生成して記憶部に記憶する。
【００１５】
図３は、ＣＤＦＧ４００の例を示す図である。ＣＤＦＧ４００は、図１のＣＤＦＧ１０５に対応する。ＣＤＦＧ４００は、矢印３０１〜３２２とノード２０１〜２１３で構成される。矢印３０１〜３２２はデータの流れと制御を表し、ノード２０１〜２１３は処理を表している。例えば、図２の入力記述データ１０１をグラフにすると図３のＣＤＦＧ４００のようになる。このＣＤＦＧ４００は、データ３０１とデータ３０２がそろったら演算器２０１の計算をして矢印３０５にデータを流す、データ３０５と定数０に対して演算器２０３の計算をして矢印３０７にデータを流す、演算器２０４も同様に計算して計算結果を矢印３０８に流す、データ３０５，３０７，３０８がそろったら演算器２０７の計算をして矢印３２０にデータを流すことを表している。他の部分についても同様に、ノードにむかっての矢印のデータがそろったら処理をしてノードから出て行く矢印にデータを流す、と読む。ＣＤＦＧ生成処理部１０４は、このようなＣＤＦＧ４００を生成する。矢印３０１は図２の変数a1、矢印３０２は図２の変数a2、矢印３２０は図２の変数temp1、矢印３０３は図２の変数b1、矢印３０４は図２の変数b2、矢印３２１は図２の変数temp2に対応する。
【００１６】
ユーザは制約を与える。例えば、ユーザは、テクノロジデータ１０３として回路のテクノロジＡＢＣを使って、５０ＭＨｚの動作周波数情報１０２で動作しなければならないという制約を与える。動作合成部６００は、これを基にテクノロジＡＢＣ、動作周波数５０ＭＨｚで動作するＲＴＬ回路記述データ１１１を生成しなければならない。これを実現するため、スケジューリング部１０６の処理を行う。スケジューリング部１０６は、ＣＤＦＧ４００のノードの遅延時間を算出する。遅延時間は、テクノロジデータ１０３を検索して得る。テクノロジデータ１０３には、ノードになることができる演算器とその遅延値の対応表が書かれている（遅延値の代わりに遅延値計算式を登録してもよい）。この遅延値を基に矢印間の遅延を計算する。動作周波数情報１０２で与えられた周波数が３３ＭＨｚ（クロック周期３０ｎｓ）であったとする。スケジューリング部１０６がテクノロジデータ１０３を検索し、加算器、比較演算器、セレクタ、２の定数除算器の遅延がそれぞれ１４ｎｓ、１４ｎｓ、５ｎｓ、５ｎｓだったとする。スケジューリング部１０６は、これらの遅延値を使って、ＣＤＦＧ４００の入力（の矢印）から３０ｎｓを越えないでもっとも遅延が大きいポイント（矢印）を探す。たとえば、矢印３０７は矢印３０１から加算器２０１と比較演算器２０３を通っているので遅延値が２８ｎｓになる。セレクタ２０７の遅延値は５ｎｓなので、矢印３２０は矢印３０１からみて遅延値が３３ｎｓとなり、制約を満たさない。従って矢印３０７は矢印３０１、３０２からみて３０ｎｓ以下で遅延値が最大になるポイントだとわかる。同様にして、入力３０１，３０２，３０３，３０４からこのようなポイントを探すと矢印３０７，３０８，３０５、３０９、３１０、３０６が見つかる。今度は今見つけたポイントを起点として同様の計算を行う。この計算で矢印３１１が見つかる。更に矢印３１１を起点として同様の計算をすると矢印３１４が見つかる。矢印３１４は出力なので計算を終わりにする。入力ポイント、出力ポイント、スケジューリング部１０６で見つけたポイントを線でつなぐと図４のサイクル線５０１〜５０４になる。
【００１７】
図４は、サイクル情報５０１〜５０４付ＣＤＦＧ４００の例を示す図である。このサイクル情報付ＣＤＦＧは、図１のサイクル情報付ＣＤＦＧ１０７に対応する。スケジューリング部１０６は、ＣＤＦＧ１０５を基にサイクル情報付ＣＤＦＧ１０７を生成して記憶部に記憶する。サイクル線５０１、５０２、５０３、５０４と交わる矢印の上にレジスタを置くと、指定された周期３０ｎｓ以内に計算結果が安定してレジスタに書き込める。ここで、サイクル線５０１及び５０２の間をサイクル番号１、サイクル線５０２及び５０３の間をサイクル番号２、サイクル線５０３及び５０４の間をサイクル番号３と呼ぶことにする。スケジューリング部１０６は、このようなサイクル情報をつけたＣＤＦＧ１０７を生成する。
【００１８】
次に、資源共有化処理部１０８は、サイクル情報付ＣＤＦＧ１０７を基に資源共有化済みＣＤＦＧ１０９を生成して記憶部に記憶する。ここでは３サイクル毎にデータを矢印３０１〜３０４に入力する回路を合成する場合を例に説明する。データを入れた時点を０サイクル目と呼ぶ。１サイクル目にはサイクル番号１に含まれる計算の結果がサイクル線５０２上のレジスタに記憶される。２サイクル目にはサイクル番号２に含まれる計算の結果がサイクル線５０３上に置かれたレジスタに、３サイクル目にはサイクル番号３に含まれる計算の結果がサイクル線５０４の上に置かれたレジスタにそれぞれ記憶される。３サイクル毎に入力することから、サイクル線５０２上におかれたレジスタは１サイクル目のみ利用され、２サイクル目には利用されない。一方、サイクル線５０３上に置かれたレジスタは２サイクル目には利用されるが１サイクル目には利用されない。また、演算器２０１〜２０６は０サイクル目には利用されるが、１，２サイクル目には利用されない。一方、演算器２０７〜２１０は１サイクル目のみ、演算器２１１〜２１３は２サイクル目のみ利用され、他のサイクルでは利用されない。つまり演算器やレジスタ（資源）の利用に無駄があることになる。このような無駄を省くため、動作合成部６００はレジスタや演算器の使いまわす（共有する）回路を生成する。この処理が資源共有化処理部１０８の処理である。
【００１９】
具体的には、加算器２０１と２０９を共有化する場合、０サイクル目には矢印３０１と３０２を加算器につなぎ、この加算器の出力を矢印３０５につなぐ。１サイクル目には、矢印３２０と３２１をこの加算器につなぎ、この加算器の出力を矢印３２２につなぐ。これにより、加算器２０１と２０９の計算は１個の加算器で実行できることになる。レジスタの場合も同様である。矢印３０５の上におかれたレジスタと矢印３１１の上におかれたレジスタを共有化して１個のレジスタでまかなう場合、１サイクル目は矢印３０５を流れるデータをレジスタに入力して記憶、２サイクル目には矢印３１１を流れるデータをレジスタに入力して記憶する。これにより矢印３０５の記憶と矢印３１１の記憶は１個レジスタで実現できる。資源共有化処理部１０８は、このような情報を反映した資源共有化済みＣＤＦＧ１０９を生成する。また、資源共有化処理部１０８は、資源共有化済みＣＤＦＧ１０９として、サイクル情報付ＣＤＦＧ１０７においてどの要素とどの要素を共有化したかを表す表として生成してもよい。
【００２０】
図１５は、資源共有化済みＣＤＦＧ１０９の例を示す図である。加算器１５０３は、図４の加算器２０１及び２０９を共有化した加算器である。信号a1は図４の矢印３０１の信号、信号a2は矢印３０２の信号、内部信号n1は図４の矢印３２０の信号、内部信号n2は図４の矢印３２１の信号に対応する。内部信号名n1及びn2は、機械的に内部で自動的に付与され、図２の変数temp1及びtemp2に対応する。有限ステートマシン１５００は、現在のサイクル番号を示すサイクル番号信号fsm_outを出力する。
【００２１】
サイクル番号１のときには、サイクル番号信号fsm_outが１になり、セレクタ１５０１は、信号a1及びn1のうち信号a1を選択し、内部信号n3として出力する。セレクタ１５０２は、信号a2及びn2のうち信号a2を選択し、内部信号n4として出力する。この時、加算器１５０３は、図４の加算器２０１として動作し、内部信号n3及びn4を加算して出力する。
【００２２】
また、サイクル番号２のときには、サイクル番号信号fsm_outが２になり、セレクタ１５０１は、信号a1及びn1のうち信号n1を選択し、内部信号n3として出力する。セレクタ１５０２は、信号a2及びn2のうち信号n2を選択し、内部信号n4として出力する。この時、加算器１５０３は、図４の加算器２０９として動作し、内部信号n3及びn4を加算して出力する。
【００２３】
図１において、最後に、ＲＴＬ生成部１１０は、サイクル番号を刻む有限ステートマシン１５００を生成し、共有する演算器及びレジスタの入力側及び出力側にセレクタ１５０１，１５０２等をつける。セレクタ１５０１，１５０２等は、有限ステートマシン１５００の出力信号fsm_outに応じて選択するようにする。例えば、加算器２０１と２０９を実現する加算器１５０３の入力にそれぞれに２入力セレクタ１５０１及び１５０２を置く。このうちの１つのセレクタ１５０１には、矢印３０１と３２０のデータが流れる信号線をつなげる。このセレクタ１５０１の選択信号fsm_outは、有限ステートマシン１５００でサイクル番号１（０サイクル目）で真となる信号とサイクル番号２（１サイクル目）で真となる信号を含む。これにより、前記のデータの流れを実現する。ＲＴＬ生成部１１０では、加算器等の演算器、レジスタ、有限ステートマシンを置き、共有化を実現するようにセレクタ１５０１，１５０２等をおき、要素間を結線して、ＲＴＬ回路記述データ１１１を作成して出力する。ＲＴＬ回路記述データ１１１は、サイクル情報及び内部信号を有する。
【００２４】
ここまで動作合成の基本原理を説明した。ここで入力記述データ１０１に記載された変数名が消される課題の原因を説明する。前記の加算器２０１と２０９を共有化して１個の加算器１５０３を共有する例を説明する。図２のローカル変数temp1は図５の信号n1に対応する。信号n3はサイクル番号２（１サイクル目）では信号n1（temp1）になり、サイクル番号１（０サイクル目）では信号a1になる。従って、変数temp1と内部信号n3を一対一に対応させることができない。変数の名前を残そうとしてもa1_0th-cycle__temp1_1st-cycle のように説明的な名前にしなければならなくなる。
【００２５】
レジスタについても同様である。前記の例では動作周波数情報１０２のクロック周期（１／動作周波数）を３０ｎｓとした例だったが、動作周波数情報１０２のクロック周期を３５ｎｓにすると、矢印３２０、３２１、３１２，３１３，３１１の上にレジスタがおかれる。矢印３２０と３１１が共有化されて１個のレジスタを利用する場合、サイクル番号２（１サイクル目）は矢印３２０の値を記憶するが、サイクル番号３（２サイクル目）では矢印３１１の値を記憶する。前記の例と同様、変数とレジスタを一対一に対応させることができない。
【００２６】
本実施形態は、ＲＴＬ回路記述データ１１１の機械的な名前になっている信号を入力記述データ１０１で出現している変数名で参照できるようにするものである。変数名を回路記述データ１１１に残せない原因は共有化を行い、変数と信号が一対一に対応しないことである。さらに、ＲＴＬ生成部１１０がＣＤＦＧ１０９を走査しながら機械的な名前の回路記述データ１１１を生成するために起きている。
【００２７】
前記のとおり、回路記述データ１１１の信号と入力記述データ１０１の変数を一対一に対応させることはできないが、動作合成部６００の基本原理で示したように、入力記述データ１０１の変数と、サイクル番号と、回路記述データ１１１の信号の組みは対応付けることができる。例えば、変数temp1の場合、最初にＣＤＦＧ１０４で変数temp1が矢印３２０に変換されたことを記憶する。前記で動作周波数情報１０２の周波数制約が３０ｎｓの場合、前記のとおり、資源共有化処理部１０８が矢印３２０の出力をセレクタ１５０１につなぎ、さらに加算器１５０３につなぎ、どのサイクル番号で矢印３２０のデータを加算器１５０３に入力するかを決める。資源共有化処理部１０８は、加算器１５０３に矢印３２０のデータが入力されるサイクル番号（又はサイクル番号の集合）を記憶する。ＲＴＬ生成部１１０は、仮想的な回路である資源共有化済みＣＤＦＧ１０９を具体的な記述であるＲＴＬ回路記述データ１１１に変換する。この時に、信号名及びレジスタ名を与える。
【００２８】
図６は、本実施形態による動作合成検証装置の構成例を示す図であり、図１に対して変数回路要素対応表６０１及びＦＳＭ（有限ステートマシン）情報６１０が追加されている。動作合成部６００は、ＲＴＬ回路記述データ１１１の他、変数回路要素対応表６０１及びＦＳＭ情報６１０を生成する。
【００２９】
動作合成部６００は、変数temp1が矢印３２０に対応すること、矢印３２０がサイクル番号２において加算器１５０３に入力されること、ＲＴＬ生成部１１０が加算器１５０３の入力信号に適当な名前n3，n4をつけたこと、を情報としてもっているので、図１６のような対応表６０１を作成することができる。
【００３０】
図１６は、図１５のＣＤＦＧに対応する変数回路要素対応表６０１の例を示す図である。対応表６０１は、変数名と有効サイクル番号と内部信号との対応関係を記憶する。変数temp1（矢印３２０）は、サイクル番号２のときの内部信号n3に対応する。変数temp2（矢印３２１）は、サイクル番号２のときの内部信号n4に対応する。
【００３１】
図５は、他の変数回路要素対応表６０１の例を示す図である。対応表６０１は、変数名とビット幅と有効サイクル番号と内部信号との対応関係を記憶する。この対応表６０１を例に以下の説明を行う。動作合成部６００は、サイクル番号と有限ステートマシン１５００の状態値fsm_outの対応表を示すＦＳＭ情報６１０を生成する。上記では、状態値fsm_outとサイクル番号が同じ場合を例に説明したが、異なっていてもよい。ＲＴＬ生成部１１０は、有限ステートマシン１５００の状態値が流れる信号名fsm_outを生成するので、その信号名を知っている。したがって、動作合成部６００は、サイクル番号と有限ステートマシン１５００の状態値の対応表と、有限ステートマシン１５００の出力信号名fsm_outとのリストを生成することができる。このリストをＦＳＭ情報６１０と呼ぶことにする。ただし、説明を簡単にするため、以下、図１５に示すように、有限ステートマシン１５００の出力値fsm_out＝サイクル番号の場合について説明する。このようにしても一般性は失われない。
【００３２】
また、本実施形態は、変数名だけでなく式や文を表現する文字列まで拡張することができる。ＣＤＦＧ生成処理部１０４は、入力記述データ１０１をパーズする際に式を表現する文字列を抽出する。例えば、式「a1+a2」を抽出し、ＣＤＦＧ１０５を生成する時に、文字列「a1+a2」を矢印３０５の変数名として残す。または、ＣＤＦＧ生成処理部１０４は、一旦ＣＤＦＧ１０５を生成し、矢印３０１，３０２及びノード２０１を基に矢印３０５の名前が「a1+a2」であることを見つけて、これを名前として矢印３０５につける。このようにして式や文を表現する文字列を上記の変数と同じように扱えるようにすることができる。
【００３３】
図７は、本実施形態による波形表示部６０６を有する動作合成検証装置の構成例を示す図である。本実施形態は、変数のデータを波形表示することができる。以下、図７が図６に対して追加された部分を説明する。シミュレーション部６０２は、ＲＴＬ回路記述データ１１１を基に第１の波形データ６０３を生成する。第１の波形データ６０３は、回路の内部信号の波形データを含む。波形データ加工部６０４は、第１の波形データ６０３、変数回路要素対応表６０１及びＦＳＭ情報６１０を基に、第２の波形データ６０５を生成する。第２の波形データ６０５は、変数の波形データを含む。波形表示部６０６は、第２の波形データ６０５を基に変数の波形を表示する。
【００３４】
図９は、波形データの一般的なフォーマットであるＶＣＤフォーマットで記述された第１の波形データ６０３の例を示す図である。「$scope module モジュール名 $end」から始まり、「$upscope $end」までの間にモジュールで宣言されている信号のリストが宣言される。信号の定義は定義７０１のように「$var」という予約語からはじまり、信号の属性値「reg」、信号幅「１ビット」、ＩＤ番号「!」、信号名「clk」、予約語「$end」で定義される。ＩＤ番号は、便宜上、記号で表現される。この定義で、信号名とＩＤ番号の関係が定義される。このような定義が終わると予約語「$enddefinitions $end」が記入され、定義部（ヘッダのようなもの）が終わる。そして、「$dumpvars」から「$end」までの間で初期値が与えられる。初期値設定７０２はＩＤ番号「'」の信号、つまり、信号名fsm_out [3:0]に初期値０がアサインされたことを表している。初期値設定７０３はＩＤ番号「()の信号、つまり、信号名n_1095 [23:0]にも初期値０がアサインされたことを表している。次に、行７１１のように「#」の後に数字を記入した行が表れる。この数字は時刻を表している。行７１１の場合１００ｎｓ時点を表している。次に、行７０４のように数値とＩＤ番号の組が書かれる。これは現在の時刻でＩＤ番号「'」、つまり信号名fsm_out [3:0]の信号が２進数表記（b）で１になったことを表している。
【００３５】
図１１は、ＶＣＤフォーマットで記述された第２の波形データ６０５の例を示す図である。以下、簡単のため、対応表６０１において変数temp1を主に説明する。
【００３６】
波形データ加工部６０４は、対応表６０１のリストにあげられている内部信号名をキーワードにして、第１の波形データ６０１からその内部信号名のＩＤ番号を得る。例えば、内部信号名n_1095の場合、行７２１より、ＩＤ番号「(」を得る。波形データ加工部６０４は、そのＩＤ番号を、図５の対応表６０１に追加し、図１０の対応表を生成する。次に、ＦＳＭ情報６１０を解析する。ここでは、前記の通り、有限ステートマシン１５００の出力値fsm_outとサイクル番号が一致しているものとして説明を進める。次に、波形データ加工部６０４は、ＦＳＭ情報６１０から有限ステートマシン１５００の出力信号名を見つける。ＦＳＭ情報６１０で、有限ステートマシン１５００の出力信号名がfsm_out [3:0]になっていたとする。波形データ加工部６０４は、第１の波形データ６０３の行７２２からfsm_out[3:0]をみつけ、更に対応するＩＤ番号「'」を見つける。波形データ加工部６０４は、第１の波形データ６０３の信号の定義部に、対応表６０１のリストにあげられている変数名を追加する。具体的には、図１１の行８０１及び８０２を追加する。行８０１は、変数である信号名temp1をＩＤ番号「-」の信号として宣言している。行８０２は、変数である信号名temp2をＩＤ番号「.」の信号として宣言している。
【００３７】
波形データ加工部６０４は、対応表６０１の変数を第１の波形データ６０３から抽出し、時刻と有限ステートマシン１５００の出力値fsm_out [3:0]を記憶する。波形データ加工部６０４は、最初に、時刻を０にする。時刻は、第１の波形データ６０３で「#時刻」の記述を見つけるたびに更新される。次に、波形データ加工部６０４は、有限ステートマシン１５００の出力値fsm_out [3:0]を記憶し、ＩＤ番号「'」の行を見つけるたびに有限ステートマシン１５００の出力値fsm_out [3:0]を更新する。
【００３８】
波形データ加工部６０４は、時刻を０にし、最初の「#時刻」の記述まで読み進め、もし、読みすすめる時に、図１０の対応表６０１のリストにあるＩＤ番号を見つけたら、その値を記憶する。例えば、変数temp1の場合、「(」、「)」、「*」、「+」の４個のＩＤ番号が対象なので、波形データ加工部６０４は、それぞれ0x0,0x0,0xF,0xFを見つけ、対象ビットの値を抽出、0x0, 0x0, 0x3, 0xF を記憶する。ここで、0xは、１６進数表記を示す。また、対象ビットの値の抽出とは、例えば、a[10:0]=0xFから２ビット目から１ビット目の値（つまりa[2:1]の値）0x3を得る処理を指す。もしそれらのＩＤ番号がなければ、波形データ加工部６０４はそのＩＤ番号の信号を不定値にする。また、波形データ加工部６０４は、読み進める時に、有限ステートマシン１５００の出力値fsm_out [3:0]に対応するＩＤ番号「'」をみつけたらその値を保存する。例えば、行７０２でＩＤ番号「'」の値０を見つける。もし見つけられなければＩＤ番号「'」の信号を不定値にする。ここで、波形データ加工部６０４は、第２の波形データ６０５に、対応表６０１にリストされている変数temp1及びtemp2の初期値を書き出す。例では、図１１の行８０４の記述を追加する。行８０４では、変数temp1の初期値を例えばハイインピーダンスにする。
【００３９】
波形データ加工部６０４は、対応表６０１において有限ステートマシン１５００の出力値fsm_outに対応する有効サイクル番号を探す。図９の行７１１において、時刻#100にたどり着いた時点では有限ステートマシン１５００の出力値fsm_outは０であり、その０に対応する有効サイクル番号０をもつ変数はないので何もしない。
【００４０】
次に、波形データ加工部６０４は、現在の時刻を更新する。図９の行７１１では時刻#100なので、時刻を100にし、次の「#時刻」記述を読み込むまで同様の処理をする。行７１２の次の時刻の#200までの間に、波形データ加工部６０４は、行７０４により有限ステートマシン１５００の出力値fsm_outが１に変更されたことを知る。有限ステートマシン１５００の出力値fsm_outは１であり、その１に対応する有効サイクル番号１を有する変数はないので何もしない（簡単のため変数temp1のみを説明している）。
【００４１】
次に、波形データ加工部６０４の現在の時刻が３００の時点での処理を説明する。波形データ加工部６０４は、行７１３から処理を再開し、行７０５で有限ステートマシン１５００の出力値fsm_outが２に変わったことを検出し、更に行７０６で内部信号n_1095が0x4になったことを検出し、更に読みすすめて、時刻#400を見つけて読み込みを一旦中断する。ここで、有限ステートマシン１５００の出力値fsm_outに対応する有効サイクル番号２をもつ変数名を探すと、temp1が見つかる。波形データ加工部６０４は、変数temp1 を構成する内部信号値はすべて記憶しているので、対応表６０１に書いてある通りそれらの内部信号値を連接して、変数temp1の値を作る。それらの内部信号をすべて連接すると0x20000になる。この結果を図１１の第２の波形データ６０５に反映させる。具体的には、行８０５を追加する。ここで、「b」は、２進数表記を示す。波形データ加工部６０４は、更に時刻４００についても同様の処理を施し、更に時刻５００についても同様の処理をする。ここで、波形データ加工部６０４は、有限ステートマシン１５００の出力値fsm_outが２から３に変化し、変数temp1の有効サイクル番号ではない状態に変化したことを知り、図１１の第２の波形データ６０５の行８０６の記述を追加し、変数temp1を例えばハイインピーダンスにする。
【００４２】
波形データ加工部６０４は、上記の手続きを繰り返し、時刻と有限ステートマシン１５００の出力値fsm_outを観測しながら、変数の有効サイクル番号の期間にはその変数値を追加していくことにより、図９の第１の波形データ６０３を図１１の第２の波形データ６０５に変換する。この結果、波形表示部（波形ビューワ）６０６は、選択画面に変数temp1を表示することができる。
【００４３】
図１２は、波形表示部６０６が第１の波形データ６０３を読み込んだ場合の選択画面９０１、及び第２の波形データ６０５を読み込んだ場合の選択画面９０２を示す図である。選択画面９０２では選択画面９０１になかった信号選択９１０が追加され、変数信号temp1が選択できるようになっている。選択画面９０２で信号を選択して波形表示を指示すると、波形表示部６０６は図１３の変数及び内部信号の波形データを表示することができる。
【００４４】
図１３は、第２の波形データの表示例を示す図であり、変数temp1の波形データを表示することができる。また、波形データ加工部６０４は、変数temp1のデータが存在しないサイクルはハイインピーダンスを割り当てているので、波形表示部６０６により表示したときにはどのサイクルで変数temp1が動作合成結果の回路中を流れたかを知ることができる。もちろん、ハイインピーダンスにすることはオプションであり、必ずしもこのようにしなくてもよい。第２の波形データ６０５では、図１３のように変数temp1を表示できるようになる。従って、波形ビューワで変数を選択して表示できないという課題を解決できる。この処理は、単独のコンピュータプログラムであってもよいし、シミュレータの一部であってもよいし、波形ビューワの一部であってもよい。また、エミュレーションシステムの制御プログラムの一部にして、エミュレーション結果には信号名が残るような処理を行っても良い。
【００４５】
（第２の実施形態）
図８は、本発明の第２の実施形態による波形表示部を有する動作合成検証装置の構成例を示す図である。以下、図８が図６に対して追加された部分を説明する。回路記述加工部１００１は、第１のＲＴＬ回路記述データ１１１、変数回路要素対応表６０１及びＦＳＭ情報６１０を入力し、それらを基に第１のＲＴＬ回路記述データ１１１を加工し、第２のＲＴＬ回路記述データ１００２を生成する。第２のＲＴＬ回路記述データ１００２は、第１のＲＴＬ回路記述データ１１１に変数を追加したものであり、その詳細は後に図１４を参照しながら説明する。シミュレーション部１００３は、第２のＲＴＬ回路記述データ１００２を基に波形データ１００４を生成する。波形データ１００４は、図７の第２の波形データ６０５と同様に、変数の波形データを含む。波形表示部１００５は、第１の実施形態と同様に、変数及び内部信号の波形データを表示することができる。
【００４６】
図１４は、第２のＲＴＬ回路記述データ１００２が第１のＲＴＬ回路記述データ１１１に対して追加された部分を示す図である。回路記述加工部１００１は、対応表６０１及びＦＳＭ情報６１０を基に有効サイクル番号の期間のみ内部信号値を変数として出力する回路を追加する。すなわち、回路記述加工部１００１は、対応表６０１に宣言されている変数名を第１のＲＴＬ回路記述データ１１１に信号宣言として追加し、第２のＲＴＬ回路記述データ１００２を生成する。例えば、行１１０１の変数temp1及び行１１０２の変数temp2の信号宣言を加える。次に、assign文を使って、対応表６０１で定義された有効サイクル番号を調べて、その有効サイクル番号と対応する有限ステートマシン１５００の出力値fsm_outを調べる。例えば、変数temp1の場合、有効サイクル番号は２であり、サイクル番号２に対応する有限ステートマシン１５００の出力値fsm_outは２なので、出力値fsm_out＝２を得る。変数temp2の場合には、有効サイクル番号は、１，２，３であり、これらに対応する出力値fsm_outは、１，２，３なので、出力値fsm_out＝１，２，３を得る。有限ステートマシン１５００の出力値fsm_outが、それぞれの変数の有効サイクル番号を示している時だけ、変数を出力すればよい。これを式で書くと、変数temp1及びtemp2は、それぞれ、式１１１０及び１１１１になる。このコード追加処理を行って、第１のＲＴＬ回路記述データ１１１から第２のＲＴＬ回路記述データ１００２を生成する。
【００４７】
シミュレーション部１００３は、第２のＲＴＬ回路記述データ１００２をシミュレーションし、波形データ１００４を生成する。波形表示部１００５は、波形データ１００４を波形表示する際、図１２の信号選択画面９０２を表示し、更に信号を選択すると、図１３の波形を表示する。これにより、変数（ローカル変数等）の表示が可能になる。
【００４８】
本実施形態のバリエーションを説明する。図８では、動作合成部６００の外で回路記述加工部１００１が第１のＲＴＬ回路記述データ１１１を修正したが、動作合成部６００がその修正を行ってもよい。この場合、動作合成部６００のＲＴＬ生成部１１０で信号追加を行い、動作合成部６００が第１のＲＴＬ回路記述データ１１１の代わりに第２のＲＴＬ回路記述データ１００２を出力する。このようにしても、図１４のコード追加の場合、信号wire temp1, temp2 はどことも繋がっていない出力信号になっているので、論理合成ツールは、通例、その追加した回路を除去する。従って、ＲＴＬシミュレーション部１００３では変数を観測できる一方、論理合成後の回路には残らないようにすることができる。
【００４９】
上記の論理合成ツールについて説明する。第１及び第２の実施形態では、動作合成部６００がＲＴＬ回路記述データ１１１を生成する。このＲＴＬ回路記述データ１１１は、変数を含まず、変数信号表示のための影響を受けない。論理合成ツールは、このＲＴＬ回路記述データ１１１を基に論理合成を行い、ネットリストを生成する。第１及び第２の実施形態では、ＲＴＬ回路記述データ１１１に悪影響を与えることなく、そのＲＴＬ回路記述データ１１１に基づいて変数の波形データを表示させることができる。
【００５０】
第２の実施形態の拡張として、図１４の追加した回路部が論理合成で削除されない指示を与えて、エミュレーションし、内部信号名で信号値を参照できるようにしてもよい。
【００５１】
また、第２の実施形態において、回路記述加工部１００１は、図１４の追加した変数の信号を出力するポートを追加して、モジュールの外に出力するように第２のＲＴＬ回路記述データ１００２を生成するようにしてもよい。この場合であっても、本実施形態は、動作合成部６００ではポートの追加はせず、本来合成されるべき箇所のみが合成され、その合成で得られた情報を回路記述加工部１００１で修正しているため、動作合成の本質的な処理に影響を与えることがない点で上記の特許文献１と異なっている。このため、変数の波形データを表示させても、動作合成の振る舞いが変わることがない。
【００５２】
従って、出力ポートから出力される内部信号とチェック回路を結線して、内部信号の状態をトリガにしてシミュレーション及びエミュレーションを制御することが容易に実現できる。
【００５３】
また、第２の実施形態において、生成した信号に対してこの値が取るべき値をとっているかをチェックする回路を追加し、追加後の回路をエミュレーション装置やシミュレータでシミュレーションすることにより、変数の値をシミュレーション時にチェックすることができる。
【００５４】
（第３の実施形態）
図１７は、本発明の第３の実施形態によるコンピュータのハードウエア構成例を示す図である。本実施形態は、前記第１及び第２の実施形態をコンピュータで実現する例を示す。
【００５５】
バス１７０１には、中央処理装置（ＣＰＵ）１７０２、ＲＯＭ１７０３、ＲＡＭ１７０４、ネットワークインタフェース１７０５、入力装置１７０６、出力装置１７０７及び外部記憶装置１７０８が接続されている。
【００５６】
ＣＰＵ１７０２は、データの処理又は演算を行うと共に、バス１７０１を介して接続された各種構成要素を制御するものである。ＲＯＭ１７０３には、予めＣＰＵ１７０２の制御手順であるコンピュータプログラムを記憶させておき、このコンピュータプログラムをＣＰＵ１７０２が実行することにより、起動する。外部記憶装置１７０８にコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ１７０４にコピーされて実行される。ＲＡＭ１７０４は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置１７０８は、例えばハードディスク記憶装置やＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えない。ＣＰＵ１７０２は、ＲＡＭ１７０４内のコンピュータプログラムを実行することにより、第１及び第２の実施形態の処理を行う。
【００５７】
ネットワークインタフェース１７０５は、ネットワークに接続するためのインタフェースである。入力装置１７０６は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置１７０７は、ディスプレイ及びプリンタ等であり、波形を表示することができる。
【００５８】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、プログラムをコンピュータに供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びコンピュータプログラムプロダクトは、本発明の範疇に含まれる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００５９】
以上のように、第１〜第３の実施形態は、変数が資源共有化の都合で内部信号と一対一に対応していないことから生じる問題を解決することができる。変数は、クロックサイクルと内部信号の組と一対一に対応している。そこで、動作合成部６００は、動作合成時の情報を基に変数とクロックサイクルと内部信号の対応表６０１を生成する。この対応表６０１を利用することにより、波形ビューワで変数を観測できるにようにすることができる。第１の実施形態では、対応表６０１を引きながら、第１の波形データ６０３に対して変数の信号変化を追加することにより、第２の波形データ６０５を生成し、変数の変化を波形ビューワで見えるようにする。第２の実施形態では、変数と一対一対応する信号線をおき、所定のクロックサイクルに所定の内部信号の値をこの信号線に載せ、それ以外のクロックサイクルでは値をマスクする回路を第１のＲＴＬ回路記述データ１１１に追加し、第２のＲＴＬ回路記述データ１００２を生成し、変数の変化はシミュレーション時の波形ダンプで得ることができ、波形ビューワでみることができる。
【００６０】
これにより、入力記述データ１０１に使用する変数のシミュレーション時の波形を表示させることができる。また、動作合成部６００が生成するＲＴＬ回路記述データ１１１は、変数を含まず、変数信号表示のための影響を受けない。論理合成ツールは、このＲＴＬ回路記述データ１１１を基に論理合成を行い、ネットリストを生成するので、ネットリストへの悪影響もない。上記実施形態では、ＲＴＬ回路記述データ１１１に悪影響を与えることなく、そのＲＴＬ回路記述データ１１１に基づいて変数の波形データを表示させることができるので、実際に生成されるネットリストの回路と同じ振る舞いをする回路のシミュレーションを行うことができ、障害原因を追求することができる。
【００６１】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００６２】
本発明の実施形態は、例えば以下のように種々の適用が可能である。
【００６３】
（付記１）
変数を含む入力データを基に、サイクル情報及び内部信号を有する第１の回路データを生成する動作合成部と、
前記変数、前記サイクル情報及び前記内部信号の対応関係を記憶する記憶手段と
を有する動作合成検証装置。
（付記２）
さらに、前記第１の回路データのシミュレーションを行うことにより前記内部信号の波形データを生成する第１の波形データ生成部と、
前記内部信号の波形データ及び前記記憶した対応関係を基に、前記変数の波形データを生成する第２の波形データ生成部と
を有する付記１記載の動作合成検証装置。
（付記３）
さらに、前記第１の回路データ及び前記記憶した対応関係を基に、前記変数を有する第２の回路データを生成する回路データ加工部と、
前記第２の回路データのシミュレーションを行うことにより前記変数の波形データを生成する波形データ生成部と
を有する付記１記載の動作合成検証装置。
（付記４）
さらに、前記入力データから式を抽出する抽出部を有し、
前記記憶手段は、前記式、前記サイクル情報及び前記内部信号の対応関係を記憶する付記１〜３のいずれか１項に記載の動作合成検証装置。
（付記５）
前記回路データ加工部は、前記変数の信号をポートに出力するように第２の回路データを生成する付記３記載の動作合成検証装置。
（付記６）
前記動作合成部は、前記入力データを基に資源共有化を行って第１の回路データを生成する付記１〜５のいずれか１項に記載の動作合成検証装置。
（付記７）
前記第１の回路データは、前記サイクル情報を出力するステートマシンを有する付記１〜６のいずれか１項に記載の動作合成検証装置。
（付記８）
さらに、前記変数の波形データを表示する表示部を有する付記２又は３記載の動作合成検証装置。
（付記９）
変数を含む入力データを基に、サイクル情報及び内部信号を有する第１の回路データを生成する動作合成ステップと、
前記変数、前記サイクル情報及び前記内部信号の対応関係を記憶する記憶ステップと
を有する動作合成検証方法。
（付記１０）
さらに、前記第１の回路データのシミュレーションを行うことにより前記内部信号の波形データを生成する第１の波形データ生成ステップと、
前記内部信号の波形データ及び前記記憶した対応関係を基に、前記変数の波形データを生成する第２の波形データ生成ステップと
を有する付記９記載の動作合成検証方法。
（付記１１）
さらに、前記第１の回路データ及び前記記憶した対応関係を基に、前記変数を有する第２の回路データを生成する回路データ加工ステップと、
前記第２の回路データのシミュレーションを行うことにより前記変数の波形データを生成する波形データ生成ステップと
を有する付記９記載の動作合成検証方法。
【図面の簡単な説明】
【００６４】
【図１】本発明の第１の実施形態による動作合成部の構成例を示す図である。
【図２】手続き的な入力記述データの例を示す図である。
【図３】ＣＤＦＧの例を示す図である。
【図４】サイクル情報付ＣＤＦＧの例を示す図である。
【図５】変数回路要素対応表の例を示す図である。
【図６】第１の実施形態による動作合成検証装置の構成例を示す図である。
【図７】第１の実施形態による波形表示部を有する動作合成検証装置の構成例を示す図である。
【図８】本発明の第２の実施形態による波形表示部を有する動作合成検証装置の構成例を示す図である。
【図９】波形データの一般的なフォーマットであるＶＣＤフォーマットで記述された第１の波形データの例を示す図である。
【図１０】変数回路要素対応表にＩＤ番号を追加した例を示す図である。
【図１１】ＶＣＤフォーマットで記述された第２の波形データの例を示す図である。
【図１２】波形表示部が第１の波形データを読み込んだ場合の選択画面、及び第２の波形データを読み込んだ場合の選択画面を示す図である。
【図１３】第２の波形データの表示例を示す図である。
【図１４】第２のＲＴＬ回路記述データが第１のＲＴＬ回路記述データに対して追加された部分を示す図である。
【図１５】資源共有化済みＣＤＦＧの例を示す図である。
【図１６】図１５のＣＤＦＧに対応する変数回路要素対応表の例を示す図である。
【図１７】本発明の第３の実施形態によるコンピュータのハードウエア構成例を示す図である。
【符号の説明】
【００６５】
１０１  入力記述データ
１０２  動作周波数情報
１０３  テクノロジデータ
１０４  ＣＤＦＧ生成部
１０５  ＣＤＦＧ
１０６  スケジューリング部
１０７  サイクル情報付ＣＤＦＧ
１０８  資源共有化処理部
１０９  資源共有化済みＣＤＦＧ
１１０  ＲＴＬ生成部
１１１  ＲＴＬ回路記述データ
６００  動作合成部
６０１  変数回路要素対応表
６０２  シミュレーション部
６０３  第１の波形データ
６０４  波形データ加工部
６０５  第２の波形データ
６０６  波形表示部
１７０１  バス
１７０２  ＣＰＵ
１７０３  ＲＯＭ
１７０４  ＲＡＭ
１７０５  ネットワークインタフェース
１７０６  入力装置
１７０７  出力装置
１７０８  外部記憶装置
【図１】
2006309667.tif 000003
【図２】
2006309667.tif 000004
【図３】
2006309667.tif 000005
【図４】
2006309667.tif 000006
【図５】
2006309667.tif 000007
【図６】
2006309667.tif 000008
【図７】
2006309667.tif 000009
【図８】
2006309667.tif 000010
【図９】
2006309667.tif 000011
【図１０】
2006309667.tif 000012
【図１１】
2006309667.tif 000013
【図１２】
2006309667.tif 000014
【図１３】
2006309667.tif 000015
【図１４】
2006309667.tif 000016
【図１５】
2006309667.tif 000017
【図１６】
2006309667.tif 000018
【図１７】
2006309667.tif 000019