(57)【要約】【課題】ハードウェア記述言語によるハードウェア記述をシミュレーションモデルに用いるプログラミング言語記述に変換してシミュレーションモデルを生成する際に、不要なコードや冗長な機能の生成を回避し、高速なシミュレーションを可能にする。【解決手段】抽象化パラメータを反映させる抽象化実行部１０９として、シミュレーションにおいて不要と判断されたレジスタと入出力ポートの自動削除処理機能を備えることにより、シミュレーションにおいては不要なコードや冗長な機能の生成を回避し、シミュレーションの高速化を実現する。【選択図】  図１
2005122636.tif 000002
【特許請求の範囲】
【請求項１】
所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成装置であって、ユーザが任意に指定した削除するポートにつながるパスを自動削除する手段を有するシミュレーションモデル生成装置。
【請求項２】
所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成装置であって、ユーザが任意に指定した同一モデルにつながる複数ポートを１つのオブジェクトに自動変換する手段を有するシミュレーションモデル生成装置。
【請求項３】
所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成装置であって、ユーザが任意に指定した、シミュレーションにおいてタイミング上は不要なレジスタに変換される変数をロック同期で動作しない変数に変換する手段を有するシミュレーションモデル生成装置。
【請求項４】
所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成方法であって、ユーザが任意に指定した削除するポートにつながるパスを自動削除してシミュレーションモデルを生成するシミュレーションモデル生成方法。
【請求項５】
所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成方法であって、ユーザが任意に指定した同一モデルにつながる複数ポートを１つのオブジェクトに自動変換してシミュレーションモデルを生成するシミュレーションモデル生成方法。
【請求項６】
所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成方法であって、ユーザが任意に指定した、シミュレーションにおいてタイミング上は不要なレジスタに変換される変数をクロック同期で動作しない変数に変換してシミュレーションモデルを生成するシミュレーションモデル生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェア記述言語により記述された論理回路の設計検証を行う論理シミュレーションシステムに係り、ハードウェア記述言語による論理回路記述をＣ言語等のプログラミング言語による記述に変換してシミュレーションを行う際のシミュレーションモデル生成装置および方法に関する。
【背景技術】
【０００２】
近年、ますます複雑化し大規模化する半導体集積回路の設計においては、設計対象の論理回路をハードウェア記述言語で記述し、ＣＡＤシステムを利用したシミュレーションを行うことにより設計検証を実施する設計手法が定着している。
【０００３】
ハードウェア記述言語による論理回路記述は、半導体集積回路の設計を容易化し、ＣＡＤシステムにより設計データに基づく製造データを生成するためのものであり、回路を詳細に記述するため、ハードウェア記述言語による論理回路記述を用いてシミュレーションを行うと、大規模回路においてはシミュレーション時間が多大になる恐れがある。また、シミュレーション速度が使用するマシンの速度に依存するため、高速性を必要とするシミュレーションへの適用は困難になる。
【０００４】
さらに、プログラミング言語で記述されたシミュレータに比較すると、デバッグ機能の面で脆弱であることは否めない。これに対して、プログラミング言語で記述されたソフトウェアシミュレータは高速動作が可能な上にデバッグ性も高いが、ハードウェア記述とは別にシミュレーションプログラムを開発する必要があるため、余計な開発工数を必要とするという問題がある。
【０００５】
従来、半導体集積回路の設計検証を行うための論理シミュレーションにおいては、大規模回路における論理シミュレーション時間の短縮を図るために、あるいは高速性を必要とするシミュレーションに適用するために、論理シミュレーション速度を向上させる各種の工夫がなされている。
【０００６】
シミュレーション速度を向上させる方法として、回路動作に関する情報を考慮してシミュレーションモデルを生成することで、シミュレーション順序を適正化し、機能シミュレーションを高速に実行する方法がある（例えば、特許文献１参照）。
【０００７】
あるいは、ＦＰＧＡや専用のプロセッサを用いたエミュレータによりシミュレーション速度を向上させる方法があり、その際に、論理シミュレーションのデータを基にしてエミュレーション回路の生成を容易化する方法も採用されている（例えば、特許文献２参照）。しかしながら、エミュレータは高価であり、またデバッグ機能は脆弱である。
【０００８】
また、高位合成における動作記述を変換し、集積回路をモデル化したソフトウェアシミュレータを開発し、アーキテクチャやソフトウェア検証を行う方法がある（例えば、特許文献３参照）。これにより高速シミュレーションが可能なことが予測されるが、生成されたモデル以外の周辺部分の環境は別途用意する必要があり、余計な開発工数が必要となる。
【０００９】
これは、実ハードウェア開発においては高位合成適用以前に生成されたＩＰを再利用するケースが多いが、それらの開発のエントリレベルがＲＴＬ記述であるために動作記述が存在せず、そこから高速な動作を実現するシミュレーションモデルを生成できないことから発生する問題である。
【００１０】
上述したように、いずれの方法も長所と弱点を有しているが、これらの方法に対して、ハードウェア記述言語による論理回路記述を直接活用する際の高速化方法として、ハードウェア記述言語による論理回路記述をＣ言語等のプログラミング言語による記述に変換し、このプログラムをコンパイルしてシミュレーションモデル生成する方法がある。これにより、シミュレーション処理速度を向上させることができ、また、ハードウェア記述言語では難しいデバッグ性を拡張することができる。
【００１１】
しかしながら、ハードウェア記述言語による論理回路記述をＣ言語等のプログラミング言語による記述に自動変換すると、ハードウェア記述言語による論理回路記述に特有の詳細な回路記述のために、大規模回路においては生成されるコードが膨大になり、コンパイル時間が増大するという問題が生じることから、これを解決する工夫も提案されている（例えば、特許文献４参照）。
【特許文献１】特開２０００−８２０９１号公報
【特許文献２】特開２００１−２６５８４６号公報
【特許文献３】特開２００３−６２６５号公報
【特許文献４】特開平１０−２６０９９７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上述したように、ハードウェア記述言語による論理回路記述をＣ言語等のプログラミング言語による記述に変換し、シミュレーションモデルを生成することにより、シミュレーション処理速度を向上させることができ、また、ハードウェア記述言語では難しいデバッグ性を拡張することができる。
【００１３】
しかしながら、ハードウェア記述言語による論理回路記述に特有の詳細な回路記述のために、ハードウェア記述言語による論理回路記述をＣ言語等のプログラミング言語による記述に自動変換すると、論理シミュレーションには多くの不要なコードや冗長な機能が生成されるという問題がある。
【００１４】
そのため、生成されるシミュレーションモデルが抽象性の低いモデルとなり、シミュレーションの十分な高速化を図ることができず、はじめからプログラミング言語で記述されたソフトウェアシミュレータと比較した場合に、性能面で対抗するのは困難となる。それどころか、変換前のハードウェア記述言語による論理回路記述でのシミュレーションに比べて、速度の向上がほとんど見込めなくなってしまう。
【００１５】
本発明は上記従来の問題点を解決するためになされたもので、ハードウェア記述言語によるハードウェア記述をシミュレーションモデルに用いるプログラミング言語記述に変換してシミュレーションモデルを生成する際に、不要なコードや冗長な機能の生成を回避でき、ソフトウェアシミュレータに匹敵する高速なシミュレーションを可能にするシミュレーションモデル生成装置および方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記課題を解決するために、本発明では、ハードウェア記述言語によるハードウェア記述をシミュレーションモデルに用いるプログラミング言語記述に変換する際に、ハードウェア記述言語で記述されたハードウェア仕様記述を抽象化してシミュレーションモデルを生成する。特に、抽象化パラメータを設定する手段と、そのパラメータを反映させる抽象化手段を備えることにより、シミュレーションの高速化を実現する。
【００１７】
本発明のシミュレーションモデル生成装置の第１の態様は、所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成装置であって、ユーザが任意に指定した削除するポートにつながるパスを自動削除する手段を有するものである。
【００１８】
上記第１の態様によれば、指定された出力ポートにのみ影響を及ぼすパスが削除されることで、シミュレーションモデルにおいて不要と判断される入力ポートと出力ポート、及びそれに関連する処理記述が自動削除されるため、シミュレーションの高速化を図ることができる。
【００１９】
本発明のシミュレーションモデル生成装置の第２の態様は、所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成装置であって、ユーザが任意に指定した同一モデルにつながる複数ポートを１つのオブジェクトに自動変換する手段を有するものである。
【００２０】
上記第２の態様によれば、指定された複数ポートが例えばＣ＋＋言語のクラスや構造体のようなオブジェクトに自動変換されるため、ある２つのモデル間で接続された入出力ポートでデータを一度に受け渡すことができるようになるため、処理速度が向上する。特に、バスモデルに接続するバススレーブモデルやバスマスタモデルの複数のポートを１つのオブジェクトに自動変換することで、シミュレーション速度を向上させることができる。
【００２１】
本発明のシミュレーションモデル生成装置の第３の態様は、所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成装置であって、ユーザが任意に指定した、シミュレーションにおいてタイミング上は不要なレジスタに変換される変数をクロック同期で動作しない変数に変換する手段を有するものである。
【００２２】
上記第３の態様によれば、タイミング上で不要なレジスタに変換される宣言がされた変数をハードウェア記述言語における回路の配線に相当する記述に変換することができるため、シミュレーションにおける不要なクロック同期処理を消去し、シミュレーション速度を向上させることができる。これは、シミュレーションモデルの動作中で、ある特定の出力信号などの発生するタイミングについて詳細なサイクル精度を求めない場合に有効となる。
【００２３】
本発明のシミュレーションモデル生成方法の第１の態様は、所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成方法であって、ユーザが任意に指定した削除するポートにつながるパスを自動削除してシミュレーションモデルを生成するものである。
【００２４】
上記第１の態様によれば、指定された出力ポートにのみ影響を及ぼすパスが削除されることで、シミュレーションモデルにおいて不要と判断される入力ポートと出力ポートが自動削除されるため、シミュレーションの高速化を図ることができる。
【００２５】
本発明のシミュレーションモデル生成方法の第２の態様は、所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションモデル生成方法であって、ユーザが任意に指定した同一モデルにつながる複数ポートを１つのオブジェクトに自動変換してシミュレーションモデルを生成するものである。
【００２６】
上記第２の態様によれば、指定された複数ポートが例えばＣ＋＋言語のクラスや構造体のようなオブジェクトに自動変換されるため、ある２つのモデル間で接続された入出力ポートでデータを一度に受け渡すことができるようになるため、処理速度が向上する。
【００２７】
本発明のシミュレーションモデル生成方法の第３の態様は、所定のハードウェア記述言語で記述されたハードウェア仕様記述をシミュレーションモデルに用いる所定の記述言語に変換してシミュレーションモデルを生成するシミュレーションシステムにおいて、ユーザが任意に指定した、シミュレーションにおいてタイミング上は不要なレジスタに変換される変数をクロック同期で動作しない変数に変換してシミュレーションモデルを生成するものである。
【００２８】
上記第３の態様によれば、タイミング上で不要なレジスタに変換される宣言がされた変数をハードウェア記述言語における回路の配線に相当する記述に変換することができるため、シミュレーションにおける不要なクロック同期処理を消去し、シミュレーション速度を向上させることができる。
【発明の効果】
【００２９】
本発明によれば、不要と判断されたレジスタと入出力ポートの自動消去、入出力ポートの効率化を図るための自動グループ化処理またはシミュレーションのタイミング精度としては不要なレジスタの自動変換処理の抽象化処理によりシミュレーションモデルを生成することで、シミュレーションにおいては不要なコードや冗長な機能の生成を回避でき、シミュレーションの高速化を実現することができる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明の最良の実施形態について図面を参照しながら説明する。ただし、以下に説明する実施形態は本発明を限定するものではなく、また実施形態の中で説明されている手法の組み合わせがすべて必要であるとは限らない。
【００３１】
図１は本発明の一実施の形態に係るシミュレーションモデル生成方法を示すブロック図であり、ハードウェア記述言語による論理回路記述をシミュレーションモデルに用いる任意のプログラミング言語記述に変換するシステムの全体構成を示している。
【００３２】
図１において、入力されたＨＤＬデータ１０１を、入出力グループ設定部１０２および関数設計部１０３に通すことにより、入力グループ１０４、出力グループ１０５、処理ツリー１０６を生成する。
【００３３】
次に、抽象化実行部１０９において、入力グループ１０４および出力グループ１０５と処理ツリー１０６を用いて、任意に設定される抽象化パラメータ１１０に従い、消去部１０７で記述の削除を行い、変換部１０８で処理記述の変換を行う。このようにして抽象化されたデータを用いて、モデル生成部１１１によりシミュレーションモデル１１２が生成される仕組みになっている。
【００３４】
図２は、本実施形態におけるハードウェア記述言語による記述からシミュレーションモデルに用いるプログラミング言語記述への変換方法を示すフローチャートである。
【００３５】
図２において、ステップ１０１、１０２、１０３、１０４は抽象化パラメータ指定部であり、シミュレーションにおいて不要と判断されるレジスタと入出力ポートの指定、および１つのモデルに接続される複数ポートのグループ化指定を行う。
【００３６】
ステップ１０５は入出力グループ設定部であり、ハードウェア記述言語を用いて記述されたファイルを読み込み、そのデータからレジスタおよび入出力ポートを検出し、シミュレーションモデルに用いられる言語の関数を決定する。
【００３７】
ステップ１０６は関数設計部であり、ハードウェア記述言語を用いて記述されたファイルを読み込み、ステップ１０５で設定された入出力グループ間のつながりを検出し、その関数を設計する。
【００３８】
ステップ１０７、１０８、１０９は抽象化実行部であり、ステップ１０６で変換された関数を用い、ステップ１０１〜１０４で指定された部分を抽象化することにより、レジスタと入出力ポートの消去、入出力ポートのグループ化、レジスタからクロック同期しない変数への変換を行う。これにより、シミュレーションの関数は除去あるいは整形される。
【００３９】
ステップ１１０は、ステップ１０９までで生成された関数を、適用するシミュレータ用に変換する。これにより、抽象化されたシミュレーションモデルが生成される。
【００４０】
以降では、例としてＶｅｒｉｌｏｇ  ＨＤＬで記述されたファイルからＣ＋＋言語への変換方法について説明する。ＶＨＤＬなどの他のハードウェア記述言語やＣ＋＋言語以外のシミュレーションモデル開発に用いられる言語の場合でも、同様な手法を適用することが可能である。
【００４１】
図３は、図２のステップ１０５の入出力グループ設定部における処理の詳細を示すフローチャートである。入出力グループ設定部では、ステップ２０１、２０５、２０９で示すように、ファイルを呼び出し、１行目から順にデータを取り出していく。
【００４２】
ステップ２０６では、ｒｅｇｉｓｔｅｒ宣言された変数を入力グループと出力グループの両方に設定している。ステップ２０７ではｉｎｐｕｔで宣言された変数を入力グループへ、ステップ２０８ではｏｕｔｐｕｔで宣言された変数を出力グループへそれぞれ登録している。
【００４３】
図４は、図２のステップ１０６の関数設計部における処理の詳細を示すフローチャートである。関数設計部では、ステップ３０１、３０４、３０５で示すように、ファイルを順次読み込み、ステップ３０７〜３１５で示すように、ａｌｗａｙｓ、ａｓｓｉｇｎに対しての変換を行う。
【００４４】
ステップ３０６では最終的に関数単位に変換される。この関数出力においては、ステップ３０７〜３１５で変換された処理の中から、単一の出力ポートまたは単一のレジスタへの書き込みにのみ影響する処理と、複数の出力ポートまたは複数のレジスタへの書き込みに対して影響する処理に分割されて関数に変換される。
【００４５】
次に、図２のステップ１０７〜１０９の抽象化実行部について、抽象化処理の具体例を図５以降に示す。まず、図５と図６は、抽象化パラメータ設定により入出力ポートのグループ設定を設定した場合の抽象化処理の具体例を示すプログラムリストである。
【００４６】
図５はＶｅｒｉｌｏｇ  ＨＤＬ記述の一部であるが、このうち、ｉｎ１、ｉｎ２、ｉｎ３、ｉｎ４の入力ポート４種が同一のモデルと接続するものとして、抽象化パラメータ設定によりグループ化指定が設定されたものとする。
【００４７】
このとき、出力結果は図６に示すようになる。ｉｎ１、ｉｎ２、ｉｎ３、ｉｎ４はグループ化され、１つの構造体（またはクラスなど）に変換される。外部のモデルとはこの構造体のポインタを共有することで入出力処理を行うことが可能となる。
【００４８】
次に、図７と図８は、入出力ポートおよびレジスタを除去する抽象化処理の具体例を示すプログラムリストである。ここでは特に、出力ポートの除去を行う抽象化処理を示している。
【００４９】
図７に示すＶｅｒｉｌｏｇ  ＨＤＬ記述に対して、抽象化パラメータ設定により出力ポートｏｕｔ１を消去する設定があった場合、ｏｕｔ１にのみ関連する処理である「ａｓｓｉｇｎ  ｗｉｒｅ１＝（ｗｉｒｅ２）？  ｗｉｒｅ３：ｗｉｒｅ４；」も消去される。
【００５０】
また、「ａｓｓｉｇｎ  ｗｉｒｅ２＝（ｗｉｒｅ５）？  ｗｉｒｅ６：ｗｉｒｅ７；」もｏｕｔ１に関連する処理であるが、この処理の出力はｒｅｇｉｓｔｅｒ１にも影響を及ぼすものであるため、この処理は削除されない。このような変換処理があるため、結果として生成される関数は図８に示す形になる。
【００５１】
次に、図９と図１０は、内部に含むレジスタを消去し、その間をつなぐ抽象化処理の具体例を示すプログラムリストである。
【００５２】
内部の処理では、ｒｅｇｉｓｔｅｒ１の値が変更されるとそれがｏｕｔ１に反映されるが、このｒｅｇｉｓｔｅｒ１で調整される１クロック分の出力タイミングは、シミュレーション上で問題が無い場合はｒｅｇｉｓｔｅｒ１をｗｉｒｅに変換してしまう処理を行う。この変換結果として、図１０に示すような関数が生成される。
【００５３】
このようにして生成された関数を、利用するシミュレーションツール、または任意のシミュレーション規約に沿うように並び替えて構成し、Ｃ＋＋言語で記述されたシミュレーションモデルを生成する。これにより、例えば、シミュレーションシステムによって関数呼び出しの順序が異なる場合も、その仕様に沿ったシミュレーションモデルの生成が可能になる。
【産業上の利用可能性】
【００５４】
本発明のシミュレーションモデル生成装置および装置は、不要と判断されたレジスタと入出力ポートの自動消去、入出力ポートの効率化を図るための自動グループ化処理またはシミュレーションのタイミング精度としては不要なレジスタの自動変換処理の抽象化処理によりシミュレーションモデルを生成することで、シミュレーションにおいては不要なコードや冗長な機能の生成を回避でき、シミュレーションの高速化を実現することができ、ハードウェア記述言語により記述された論理回路の設計検証を行う論理シミュレーションシステム等として有用である。
【図面の簡単な説明】
【００５５】
【図１】本発明の一実施形態に係るシミュレーションモデル生成方法の全体システム構成を示すブロック図。
【図２】本発明の一実施形態におけるハードウェア記述言語による記述からシミュレーションモデルに用いるプログラミング言語記述への変換方法を示すフローチャート。
【図３】本発明の一実施形態におけるハードウェア記述言語による記述からシミュレーションモデルに用いるプログラミング言語記述への変換方法において、入出力グループ設定部の詳細処理を示すフローチャート。
【図４】本発明の一実施形態におけるハードウェア記述言語による記述からシミュレーションモデルに用いるプログラミング言語記述への変換方法において、関数設計部の詳細処理を示すフローチャート。
【図５】抽象化パラメータ設定により入出力ポートのグループ設定を設定した場合の抽象化処理の具体例を示すＶｅｒｉｌｏｇＨＤＬ記述のプログラムリスト。
【図６】抽象化パラメータ設定により入出力ポートのグループ設定を設定した場合の抽象化処理による変換結果の具体例を示すＣ＋＋言語のプログラムリスト。
【図７】入出力ポートおよびレジスタを除去する抽象化処理の具体例を示すＶｅｒｉｌｏｇＨＤＬ記述のプログラムリスト。
【図８】入出力ポートおよびレジスタを除去する抽象化処理による変換結果の具体例を示すＣ＋＋言語のプログラムリスト。
【図９】内部に含むレジスタを消去しその間をつなぐ抽象化処理の具体例を示すＶｅｒｉｌｏｇＨＤＬ記述のプログラムリスト。
【図１０】内部に含むレジスタを消去しその間をつなぐ抽象化処理による変換結果の具体例を示すＣ＋＋言語のプログラムリスト。
【符号の説明】
【００５６】
１０１  ＨＤＬデータ
１０２  入出力グループ設定部
１０３  関数設計部
１０４  入力グループ
１０５  出力グループ
１０６  処理ツリー
１０７  消去部
１０８  変換部
１０９  抽象化実行部
１１０  抽象化パラメータ
１１１  モデル生成部
１１２  シミュレーションモデル
【図１】
2005122636.tif 000003
【図２】
2005122636.tif 000004
【図３】
2005122636.tif 000005
【図４】
2005122636.tif 000006
【図５】
2005122636.tif 000007
【図６】
2005122636.tif 000008
【図７】
2005122636.tif 000009
【図８】
2005122636.tif 000010
【図９】
2005122636.tif 000011
【図１０】
2005122636.tif 000012