(57)【特許請求の範囲】
【請求項１】
シミュレーション対象となるハードウェア記述を入力する入力手段と、
前記ハードウェア記述に含まれる各配列オブジェクトについて、部分要素に対するアクセス有無に関わる１以上の性質に着目した特徴の抽出を実行する特徴抽出手段と、
前記特徴抽出手段により抽出された特徴に基づき、部分要素に対するアクセス有無を判定し、部分要素に対するアクセスが無い場合に、その配列オブジェクトの全要素を１つの信号として取り扱うためのパッキング処理を適用すべきと判定するパッキング処理判定手段と、
前記パッキング処理判定手段がパッキング処理を適用すると判定したときに、その配列オブジェクトに対してパッキング処理を施したシミュレーションコードを生成するシミュレーションコード生成手段と
を具備してなることを特徴とする論理シミュレーション装置。
【請求項２】
前記パッキング処理判定手段は、さらに、前記パッキング処理を適用した場合のシミュレーション処理の処理量と前記パッキング処理を適用しない場合のシミュレーション処理の処理量との差分量を評価し、その評価結果に基づき、パッキング処理の適用有無を判定することを特徴とする請求項１記載の論理シミュレーション装置。
【請求項３】
前記特徴抽出手段は、ポートへのマッピングの有無、ドライブするソースの数、センシティビティリストにおける参照、代入ターゲットとしての参照、代入の種類、式における参照、のうちの１以上に基づき、各配列オブジェクトの特徴を抽出することを特徴とする請求項１記載の論理シミュレーション装置。
【請求項４】
前記パッキング処理判定手段は、各配列オブジェクトが、部分要素がセンシティビティリストに書かれている、部分要素についての０よりも大きな遅延時間をもつ代入がある、の条件のうちの少なくとも一方を満たす場合には、パッキング処理を適用しないように判定することを特徴とする請求項１記載の論理シミュレーション装置。
【請求項５】
パッキング処理の適用候補として指定された配列オブジェクトを抽出するパッキング処理指定抽出手段をさらに具備し、
前記パッキング処理判定手段は、前記パッキング処理指定抽出手段により抽出された配列オブジェクトのみを対象として判定を行うことを特徴とする請求項１記載の論理シミュレーション装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はハードウェアの設計を支援するＣＡＤ（計算機支援設計）システムに適用して好適な論理シミュレーション装置に係り、特に複数要素単位でアクセスされる配列オブジェクトをスカラーオブジェクトとして扱うことによりシミュレーションの高速化を実現する論理シミュレーション装置に関する。
【０００２】
【従来の技術】
近年、ＬＳＩなどの設計対象ハードウェアの大規模化に伴ない、設計効率の向上を目的として機能設計のような設計の上位工程から設計を支援するＣＡＤシステムが種々開発されている。
【０００３】
このようなＣＡＤシステムでは、ＨＤＬを用いて設計対象ハードウェアの機能記述を行ない、ＨＤＬ記述をシミュレーションすることによって設計の正しさを確認する。
【０００４】
ＨＤＬ記述における信号や変数等のオブジェクトには、一要素のみから成るもの（以下、スカラーオブジェクトと呼ぶ）と、複数要素から成るもの（以下、配列オブジェクトと呼ぶ）がある。また、配列オブジェクトには、図２中におけるＲｃｏｄｅのように、取りうる値の集合および演算の集合（以下、型と呼ぶ）の異なった要素から成るものも含むとする。
【０００５】
さらに、前述のＨＤＬでは、ディレイや非同期動作を扱うことを可能としているため、イベントドリブンシミュレーションの概念に基づいて言語仕様が設計されている。なお、このイベントドリブンシミュレーションとは、ある時刻においてあるモジュールの出力信号値が変化したときのみ、その出力信号を入力とするモジュールについて演算処理を行ない、シミュレーションを進行させていくシミュレーション方式をいう。
【０００６】
このイベントドリブン型の記述においては、並列動作の記述単位をプロセスと呼ぶ。そして、このプロセスを起動する誘因となる信号をセンシティビティ信号という。
【０００７】
ＶＨＤＬでは、予約語ｐｒｏｃｅｓｓや、ｗａｉｔ  ｏｎ（場合によっては、ｗａｉｔ  ｕｎｔｉｌ）の次に記述されるものをセンシティビティリストと呼び、このリストに記述されている信号がそのプロセスのセンシティビティ信号となる。また、センシティビティリストには、信号全体の参照だけでなく、複数要素から成る信号の部分要素を記述することも可能である。
【０００８】
また、代入および参照についても、配列オブジェクトの部分要素単位で行なうことが可能となっている。
【０００９】
このような特徴から、ＨＤＬでは、配列オブジェクト全てについて、１スカラー要素単位で別々に取り扱っている。しかしながら、ＨＤＬ記述中の配列オブジェクト中には、たとえばデータの転送に用いられる信号のように、全要素単位で代入や参照等の処理をされることが多いといった性質をもつものも存在する。
【００１０】
すなわち、従来の論理シミュレーション装置においては、前述したような性質が考慮されておらず、配列オブジェクト全てを１スカラー要素ずつ取り扱っており、このことがシミュレーション速度を遅くする原因のひとつとなっていた。
【００１１】
【発明が解決しようとする課題】
前述したように、シミュレーションモデル中には、大部分の場合に全要素単位でアクセスが行なわれる配列オブジェクトが存在するが、従来の機能・論理シミュレーション装置では、このような特徴が考慮されておらず、配列オブジェクト全てを１スカラー要素ずつの処理で行なっていたため、シミュレーション速度を低下させるという問題があった。
【００１２】
本発明は、このような実情に鑑みてなされたものであり、複数要素単位でアクセスされる場合が多い配列オブジェクトについて、その複数要素をひとまとめにしてスカラーオブジェクトとして扱い、複数要素分の処理を一度に行なうことによってシミュレーションを高速化する論理シミュレーション装置を提供することを目的とする。以下、複数要素をひとまとめにすることをパッキングと記す。
【００１３】
【課題を解決するための手段】
この発明の論理シミュレーション装置は、シミュレーション対象となるハードウェア記述を入力する入力手段と、前記ハードウェア記述に含まれる各配列オブジェクトについて、部分要素に対するアクセス有無に関わる１以上の性質に着目した特徴の抽出を実行する特徴抽出手段と、前記特徴抽出手段により抽出された特徴に基づき、部分要素に対するアクセス有無を判定し、部分要素に対するアクセスが無い場合に、その配列オブジェクトの全要素を１つの信号として取り扱うためのパッキング処理を適用すべきと判定するパッキング処理判定手段と、前記パッキング処理判定手段がパッキング処理を適用すると判定したときに、その配列オブジェクトに対してパッキング処理を施したシミュレーションコードを生成するシミュレーションコード生成手段とを具備してなることを特徴とする。
【００１４】
また、この発明の論理シミュレーション装置は、前記パッキング処理判定手段が、さらに、前記パッキング処理を適用した場合のシミュレーション処理の処理量と前記パッキング処理を適用しない場合のシミュレーション処理の処理量との差分量を評価し、その評価結果に基づき、パッキング処理の適用有無を判定することを特徴とする。
【００１５】
また、本発明は、ユーザがパッキング処理の適用候補として指定した配列オブジェクトを抽出するパッキング処理指定抽出手段をさらに具備し、前記パッキング処理判定手段が、前記パッキング処理指定抽出手段により抽出された配列オブジェクトのみを処理対象として動作することを特徴とする。
【００１６】
本発明によれば、入力手段により入力されたシミュレーション対象となるハードウェア記述について、パッキング処理判定手段が、ハードウェア記述に含まれる配列オブジェクトが複数要素単位でアクセスされている程度を判定するための判定基準に基づき、その各配列オブジェクトに対しパッキング処理を適用するか否かを判定する。
【００１７】
または、入力手段により入力されたシミュレーション対象となるハードウェア記述について、まず特徴抽出手段が、この入力されたハードウェア記述をもとにシミュレーションモデル中の配列オブジェクトに関する特徴を抽出し、パッキング処理判定手段が、この抽出された特徴とハードウェア記述に含まれる配列オブジェクトが複数要素単位でアクセスされている程度を判定するための判定基準とに基づき、その各配列オブジェクトに対しパッキング処理を適用するか否かを判定する。
【００１８】
この特徴抽出手段は、
（１）ポートへのマッピングの有無。
【００１９】
（２）配列オブジェクトをドライブするソースの数。
【００２０】
（３）センシティビティリストにおける参照。
【００２１】
（４）部分要素についての代入の有無。
【００２２】
（５）代入ターゲットとしての参照。
【００２３】
（６）代入の種類。
【００２４】
（７）式における参照。
【００２５】
の少なくとも一つ以上に基づいて、配列オブジェクトの特徴を抽出する。
【００２６】
そして、パッキング処理判定手段は、予め与えられた判断基準に基づき、または各配列オブジェクトについて抽出された特徴と予め与えられた判断基準とに基づき、パッキング処理を適用するか否かを判定し、シミュレーションコード生成手段が、パッキング処理を適用すると判定された配列オブジェクトに対しパッキング処理を施したシミュレーションコードを生成する。
【００２７】
このパッキング処理判定手段は、判定対象となる配列オブジェクトが、
（１）部分要素がセンシティビティリストに書かれている。
【００２８】
（２）部分要素についての０よりも大きな遅延時間をもつ代入がある。
【００２９】
の条件のうち少なくともいずれかを満たす場合にはパッキング処理を適用しないことを判定基準として保持し、この判定基準に基づいて各配列オブジェクトのパッキング処理の適用有無を判定する。
【００３０】
また、パッキング処理の方法としては、たとえば、Ｂｉｔ型配列の（右から）ｉ番目（１≧ｉ）の要素を、整数型の右からｉビット目に対応させる形でＢｉｔ型配列を整数型に置き換えを行なうことで、Ｂｉｔ型配列の３２要素分をひとつの整数型として扱う方法があげられる。
【００３１】
この方法によれば、３２要素から成るＢｉｔ型配列の値“０１１０１１００１０１１０１１１０１０１１１１１００００１０１０”は、１番目の要素が０，２番目の要素が１，３番目の要素が０…であるから、右から１ビット目を０，２ビット目を１，３ビット目を０…として置き換えた整数０１１０１１００１０１１０１１１０１０１１１１１００００１０１０（２）すなわち６ｃｂ７５ｆ０ａ（１６）として扱われる。
【００３２】
さらにこの場合、配列の全要素数ｊが１≦ｊ＜３２のときは、（ｊ＋１）ビット目から３２ビット目を０として整数型に置き換え、配列の要素数ｊが３２＜ｊの場合は、３２要素分ずつひとつの整数型に置き換えるものとする。
【００３３】
これにより、配列オブジェクト全てを１スカラー要素単位で別々に取り扱うのと比較して、シミュレーションを高速化することができることとなる。
【００３４】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
【００３５】
（第１実施形態）
図１は本発明の第１実施形態に係る論理シミュレーション装置の機能ブロック図である。
【００３６】
図１に示すように、第１実施形態の論理シミュレーション装置９は、記述入力部１、特徴抽出部２、パッキング処理判定部３およびコード生成部４を具備してなる。
【００３７】
記述入力部１は、シミュレーション対象となるハードウェア記述を入力する。特徴抽出部２は、記述入力部１から入力されたハードウェア記述から、シミュレーションモデル中の配列オブジェクトについて、
（１）ポートにマッピングされているか否か（ポートへのマッピングの有無）。
【００３８】
（２）ドライブするソースが複数ある信号か否か（配列オブジェクトをドライブするソースの数）。
【００３９】
（３）部分要素がセンシティビティリストに書かれているか否か（センシティビティリストにおける参照）。
【００４０】
（４）部分要素についての代入の有無（代入ターゲットとしての参照）。
【００４１】
（５）論理演算の引数になっているか否か（式における参照）。
【００４２】
（６）部分要素についての参照の有無（式における参照）。
【００４３】
（７）その配列オブジェクトと関係｛＊｝がある他の配列オブジェクトの集合。
【００４４】
に着目して特徴を抽出する。
【００４５】
なお、ここでいう関係｛＊｝とは、たとえば以下のように定義される。
【００４６】
＜１＞ＡとＢが、あるオペレータ（代入や論理演算等）のオペランドであるとき、ＡとＢとは関係｛＊｝がある。
【００４７】
＜２＞ＡがポートＢにマッピングされているとき、ＡとＢとは関係＊がある。
【００４８】
＜３＞ＡとＢとに関係｛＊｝があり、ＢとＣとに関係｛＊｝があるならば、ＡとＣとは関係｛＊｝がある。
【００４９】
また、ドライブするソースが複数ある信号は、たとえばバスの表現として用いられる。
【００５０】
パッキング処理判定部３は、特徴抽出部２において抽出された結果を評価基準をもとに各配列オブジェクトについてパッキング処理するか否かを判定する。そして、コード生成部４は、パッキング処理判定部３での判定をもとに、記述入力部１に入力されたハードウェア記述に対応するＣプログラムとして、ハードウェア記述のエラボレーションを行なうコードとステートメントの実行を行なうコードとを生成する。
【００５１】
ここで、図１の記述入力部１に図３のＶＨＤＬ記述が入力された場合を例にとって各部の動作を示す。
【００５２】
まず、図３に示したＶＨＤＬ記述を簡単に説明する。
【００５３】
＜０〜１行＞ｍｏｄｕｌｅ０という名のモジュールと外部とのインターフェイスを定義する。ここでは、入力、出力ともにないことを示している。
【００５４】
＜２〜２２行＞ｍｏｄｕｌｅ０の内部の動作の一つとしてｂｅｈａｖｉｏｒを定義する。
【００５５】
＜４〜５行＞ｂｅｈａｖｉｌｒの内部の信号を定義する。信号Ｓ１は、ｂｉｔ型スカラー信号であり、信号Ａ、信号Ｂ、信号Ｃ、信号Ｄ、信号Ｅ、信号Ｆおよび信号Ｇは、３２要素のｂｉｔ型配列信号である。
【００５６】
＜７〜１１行＞信号Ａまたは信号Ｃにイベントが発生した時に動作するプロセスを定義する。このプロセスが動作すると、信号Ｂに信号Ａの値の否定が代入され、信号Ｓ１に信号Ｃの３要素目の値Ｃ（２）が代入される。また、信号Ｄに信号Ｂの値が代入される。
【００５７】
＜１２〜１７行＞信号Ｄの１要素目であるＤ（０）にイベントが発生した時に動作するプロセスを定義する。このプロセスが動作すると、信号Ｅの要素Ｅ（２）に、１ｎｓ後に信号Ｄの要素Ｄ（０）の値が、２ｎｓ後には要素Ｄ（１）の値が、３ｎｓ後には要素Ｄ（２）の値がそれぞれ代入される。
【００５８】
＜１８〜２１行＞信号Ｆにイベントが発生した時に動作するプロセスを定義する。このプロセスが動作すると、信号Ｇに信号Ｆの値が代入される。
【００５９】
次に、このＶＨＤＬ記述が図１の記述入力部１に入力された場合の各部の動作原理を示す。
【００６０】
記述入力部１にＶＨＤＬ記述が入力されると、特徴抽出部２では、この記述入力部１に入力されたＶＨＤＬ記述をもとに各配列型オブジェクトの特徴を抽出する。
【００６１】
たとえば、信号Ａはポートにマッピングされておらず、また、ドライブするソースが複数ある信号ではない。さらに、どの部分要素もセンシティビティリストに書かれていないし、部分要素について代入も参照も行なわれていないが、プロセスＰ0 において論理演算の引数なっていて、信号Ｂへの代入のソースになっているという性質があることがわかる。また、信号Ｂは信号Ａの他にプロセスＰ0 で信号Ｄと関係｛＊｝があることがわかる。よって、図４に示すテーブルにおいて、信号Ａは、１から７の性質が、それぞれ×、×、×、×、○、×、および｛Ｂ，Ｄ｝となる（○：成立、×：不成立。以下同じ）。
【００６２】
一方、信号Ｃは、ポートにマッピングされておらず、ドライブするソースが複数ある信号でもない。さらに、部分要素がセンシティビティリストに書かれておらず、部分要素についての代入も行なわれていない。また、信号が論理演算の引数にもなっていないが、プロセスＰ0 において部分要素について参照が行われているという性質があることがわかる。また、信号Ｃと前記関係｛＊｝か関ある配列オブジェクトは存在しない。したがって、図４に示すテーブルでは、×、×、×、×、×、○、およびφとなる。
【００６３】
また、パッキング処理判定部３では、この様にして抽出された特徴結果を判定基準をもとに評価して各配列オブジェクトについてパッキング処理するか否かを判定する。
【００６４】
図５にパッキング処理判定のアルゴリズム例を示す。このアルゴリズムは、性質１〜６が全て成り立たず、かつ、性質７にあげられた全てのオブジェクトについて性質１〜６が全て成り立たないオブジェクトにおいてのみパッキングを行なうとするものである。
【００６５】
パッキング処理判定部３の判定基準が図５に示したものであるとすると、パッキング処理が行なわれるのは、信号Ｆと信号Ｇである。
【００６６】
次に、コード生成部４は、パッキング処理判定部３での判定をもとに、シミュレーションのためのＣプログラムを生成する。Ｃプログラムには、ＶＨＤＬ記述内のプロセスや信号等のオブジェクトを生成するエラボレーションコードと、ＶＨＤＬ記述内のステートメントを実行するコードとがある。図６にコード生成部４が生成するエラボレーションコードの一例を示し、図９にコード生成部４が生成する実行コードの一例を示す。ただし、図６のエラボレーションコードについては本発明に関する部分のみを図示する。
【００６７】
図６の＜３行〜１６２行＞までは、信号の情報を生成するコードである。信号Ａは、パッキング処理判定が×であるため、＜４行〜３５行＞において信号Ａ（０）から信号Ａ（３１）までの３２要素がそれぞれ生成されている。また、信号Ｆはパッキング処理判定が○であるから、３２要素をひとつにまとめてひとつの信号として生成される（＜１６１行＞）。パッキング処理を行なわなかった場合は、３２要素それぞれ生成される（図７の＜１９４行〜２２１行＞参照）から、パッキング処理を行なったことで信号情報の生成が減少しており高速化が可能となる。
【００６８】
図６の＜１６４行〜１６６行＞までは、プロセスの情報を生成するコードである。
【００６９】
＜１６７行〜２２６行＞は、プロセスとセンシティビティリストに書かれた信号のセットを行なう。信号Ｆは、パッキング処理判定が○であるため、３２要素ひとまとめにしてひとつの信号としてセットされる（＜２２６行＞）。パッキング処理を行なわなかった場合、１要素ずつセットされる（図８の＜３２３行〜３５４行＞参照）ことと比較して、処理量が減少しており高速化が可能となる。
【００７０】
図９の実行コードは、図３のＶＨＤＬ記述におけるプロセスＰ２に関するものである。ここで、信号ＧおよびＦは、パッキング判定が○であるため、信号Ｆから信号Ｇへ全体の代入を行なうのに、ひとつの代入文が生成される。パッキング処理を行なわなかった場合には、一要素ずつ代入が行われるから代入文が全要素数である３２個の代入文が生成される（図１０の＜３行〜３４行＞）ことと比較して、処理量が減少しており高速化が可能となる。
【００７１】
以上のように、同実施形態の論理シミュレーション装置によれば、配列オブジェクトのうち間接的なものも含めて該配列オブジェクトと関係｛＊｝のある配列オブジェクト全てが、
（１）ポートにマッピングされていない。
【００７２】
（２）ドライブするソースが複数ある信号でない。
【００７３】
（３）部分要素がセンシティビティリストに書かれていない。
【００７４】
（４）部分要素について代入がない。
【００７５】
（５）論理演算の引数になっていない。
【００７６】
（６）部分要素について参照がない。
【００７７】
という特徴を持つ場合のみ該配列オブジェクトについてパッキング処理を行なったシミュレーションコードを生成することにより、シミュレーションを高速に行なうことができるようになる。
【００７８】
これは、部分要素がセンシティビティリストに書かれている、および部分要素についての０よりも大きな遅延時間をもつ代入がある、の条件のうち少なくともいずれかが満たされる場合にはパッキング処理を適用しない上に、さらにパッキング処理を適用する場合を制限する方向の判断基準を用いたことを意味する。
【００７９】
（第２実施形態）
次に、本発明の第２実施形態を説明する。
【００８０】
同実施形態では、特徴抽出部２が、記述入力部１により入力されたハードウェア記述から、シミュレーションモデル中の各配列オブジェクトについて、
（１）ポートにマッピングされている（ポートへのマッピングの有無）。
【００８１】
（２）ドライブするソースが複数ある信号である（配列オブジェクトをドライブするソースの数）。
【００８２】
（３）部分要素がセンシティビティリストに書かれている（センシティビティリストにおける参照）。
【００８３】
（４）部分要素について遅延が０よりも大きな代入がある（代入ターゲットとしての参照、代入の種類）。
【００８４】
（５）論理演算の引数になっている（式における参照）。
【００８５】
が成り立つか否かと、
（６）全要素数（パラメータＸ）（代入ターゲットとしての参照、式における参照に関連）。
【００８６】
（７）全要素数単位での参照（センシティビティリストへのセットを含む）および代入の回数（パラメータＹ）（式における参照）。
【００８７】
（８）部分要素についての参照の回数（パラメータＺ）（式における参照）。
【００８８】
（９）その配列オブジェクトと関係｛＊｝がある他の配列オブジェクトの集合。
【００８９】
とに着目して特徴を抽出する。
【００９０】
パッキング処理判定部３は、特徴抽出部２において抽出された特徴結果とこの特徴結果をパラメータとする評価関数とから、各配列オブジェクトについてのパッキング処理判定を行なう。
【００９１】
そして、コード生成部４は、パッキング処理判定部３での結果をもとに、記述入力部１に入力されたハードウェア記述に対応するＣプログラムとして、ＶＨＤＬ記述のエラボレーションを行なうコードとステートメントの実行を行なうコードとを生成する。
【００９２】
ここで、記述入力部１に図１１のＶＨＤＬ記述が入力された場合の各部の動作原理を示す。
【００９３】
記述入力部１にＶＨＤＬ記述が入力されると、特徴抽出部２では、この記述入力部１に入力されたＶＨＤＬ記述をもとに、各配列オブジェクトの特徴を抽出する。
【００９４】
たとえば、信号Ｆは、１〜５の性質は全て成り立たず、要素数が３２であり、プロセスＰ１において信号Ｂと関係｛＊｝があり信号ＢはプロセスＰ0 において信号Ａおよび信号Ｃと関係｛＊｝があるから、図１２のテーブルでは、×、×、×、×、×、Ｘ＝３２、Ｙ＝０、Ｚ＝０、および｛Ａ，Ｂ，Ｃ｝となる。
【００９５】
また、パッキング処理判定部３は、この様にして抽出された特徴結果と判定基準とをもとに、各配列オブジェクトについてパッキング処理の判定を行なう。ここで、判定基準のうちのひとつの基準として、評価関数を与える。
【００９６】
評価関数とは、該配列オブジェクトについて、例えば、
（パッキング処理を行ったことで省略された処理量）−（パッキング処理を行ったことにより新たに生じた処理量）
を見積もるための関数である。
【００９７】
評価関数の例を以下に示す。
【００９８】
関数ＦＦ（ｘ，ｙ，ｚ）＝（ｘ−１）＋ｘ＊ｙ−ｚ＊３
この評価関数は、当該の配列オブジェクトをパッキングすることで減少するオブジェクト情報生成数、および代入や参照を実行するための処理量と、パッキング処理した信号の部分要素の参照のために新たに生じる処理量との差を計算することで、パッキング処理のシミュレーション高速化への効果を見積もろうとするものである。
【００９９】
図１３にパッキング処理判定のアルゴリズム例を示す。このアルゴリズムは、各配列オブジェクトのうち性質１〜５が全て成り立たなくて、評価関数の値が正であるような場合であり、かつ、性質９にあげられた各配列オブジェクト全てについても性質１〜５が全て成り立たず、評価関数の値が正であるような場合においてのみパッキング判定を○とするものである。
【０１００】
パッキング処理判定部３の判定基準が、前述した評価関数と図１３のアルゴリズムとであるとする場合、図６のハードウェア記述のうちでパッキング処理が行なわれるのは、信号Ａ、Ｂ、ＣおよびＦである。
【０１０１】
なお、評価関数を（パッキング処理を行ったことで省略された処理量）を見積もるための関数とし、この関数の値が所定値以下の場合にパッキング判定を○にする、あるいは評価関数を（パッキング処理を行ったことにより新たに生じた処理量）を見積もるための関数とし、この関数の値が所定値以下の場合にパッキング判定を○にする等、種々の変形が可能である。
【０１０２】
次に、コード生成部４は、パッキング処理判定部３においてパッキング判定が○であるものについてパッキング処理を行なった上で、シミュレーションのためのＣプログラムを生成する。Ｃプログラムには、ＶＨＤＬ記述内のプロセスや信号等のオブジェクを生成するエラボレーションコードと、ＶＨＤＬ記述内のステートメントを実行するコードとがある。
【０１０３】
図１４にコード生成部が生成する実行コードの一例を示す。この実行コードは、図１１に示したＶＨＤＬ記述におけるプロセスＰ0 に関するものである。信号Ａ、ＢおよびＣは、パッキング処理されているため，信号Ａから信号Ｂ、信号Ｂから信号Ｃへの全体の値の代入を行うのにそれぞれひとつの代入文が生成される（図１４の＜４行、６行＞）。これは、パッキング処理されていない場合に、それぞれの代入を行なうのにその全要素数分の代入文が生成される（図１５の＜４行〜３５行＞および＜３６行〜６７行＞参照）ことと比較して、そのシミュレーションの高速化を可能にしている。
【０１０４】
また、パッキング処理されている信号Ｃから、信号Ｓ１に代入する要素Ｃ（２）を切り出すために以下のコードが生成される（図１４の＜８行＞）。
【０１０５】
((gt＿val(C) & MASKO301)>>26) & MASK3201
すなわち、パッキングされた信号Ｃをマスクして要素Ｃ（２）以外を０にした後、右に２６シフトすることで要素Ｃ（２）の領域を右端に動かす。さらに、マスクして低位１ビット以外を０にする。
【０１０６】
これは、パッキング処理しなかった場合に生成されるコード（図１５の＜６８行＞）と比較して、信号Ｃをパッキング処理したことにより新たな処理が生じたことを示している。
【０１０７】
しかしながら、前述の信号Ｃをパッキング処理することにより得られる効果の方が大きいため、シミュレーション全体としては、高速化が実現されることになる。
【０１０８】
なお、前述した第１および第２実施形態では、２値（‘０’，‘１’）についてパッキング処理を行なう場合について説明したが、４値（‘Ｘ’‘０’，‘１’，‘Ｚ’）や、９値（‘Ｕ’，‘Ｘ’，‘０’，‘１’，‘Ｚ’，‘Ｗ’，‘Ｌ’，‘Ｈ’，‘−’）についても適用が可能である。たとえば、４値の場合はひとつの値を２ビットで表現でき、９値の場合はひとつの値を３ビットで表現できることを利用すればよい。４値の場合、‘Ｘ’を００、‘０’を０１、‘１’を１０、‘Ｚ’を１１と表現すれば、１６要素配列“ＺＸ１Ｚ０１０Ｚ００ＸＸ１１ＺＺ”は、整数ｃｂ６７５０ａｆ(16)にパッキングして扱うことができる。
【０１０９】
以上のように、第２実施形態の論理シミュレーション装置によれば、配列オブジェクトのうち間接的なものも含めて該配列オブジェクトと関係｛＊｝のある配列オブジェクト全てが、
（１）ポートにマッピングされていない。
【０１１０】
（２）ドライブするソースが複数ある信号ではない。
【０１１１】
（３）部分要素がセンシティビティリストに書かれていない。
【０１１２】
（４）部分要素について０よりも大きな遅延時間をもつ代入がない。
【０１１３】
（５）論理演算の引数になっていない。
【０１１４】
という特徴をもち、かつ、
（６）処理量についての評価関数が所定の値よりも良い。
【０１１５】
場合のみ、該配列オブジェクトについてパッキング処理を行なったシミュレーションコードを生成することにより、シミュレーションを高速に行なうことができるようになる。
【０１１６】
これは、部分要素がセンシティビティリストに書かれている、および部分要素についての０よりも大きな遅延時間をもつ代入がある、の条件のうち少なくともいずれかが満たされる場合にはパッキング処理を適用しない上に、さらにパッキング処理を適用する場合を制限する方向の判断基準を用いたことを意味するが、その制限は、第１実施形態の制限よりも、部分要素の代入について０よりも大きな遅延時間をもつか否かを見るという点で緩和されている（パッキング処理が適用される配列オブジェクトがより多くなるようになっている）。また、処理量についての評価関数を用いるようにした点で、パッキング処理を適用する効果が大きい場合を選んでパッキングすることができるようになっている。
【０１１７】
また、前述した第１および第２実施形態では、一階層に記述された例を挙げたが、複数の階層のまたがって記述されたシミュレーションモデルについても適用できる。たとえば、この場合着目する性質を、
（１）ポートに部分要素単位でマッピングされている。
【０１１８】
（２）ドライブするソースが複数ある信号である。
【０１１９】
（３）部分要素がセンシティビティリストに書かれている。
【０１２０】
（４）部分要素について遅延が０よりも大きな代入がある。
【０１２１】
（５）論理演算の引数になっている。
【０１２２】
が成り立つか否かと、
（６）全要素数（パラメータＸ）。
【０１２３】
（７）全要素数単位での参照（センシティビティリストへのセットを含む）および代入の回数（パラメータＹ）。
【０１２４】
（８）部分要素についての参照の回数（パラメータＺ）。
【０１２５】
（９）その配列型オブジェクトと関係｛＊｝がある配列型オブジェクトの集合。
【０１２６】
と変更して行なう方法があげられる。これは、部分要素がセンシティビティリストに書かれている、および部分要素についての０よりも大きな遅延時間をもつ代入がある、の条件のうち少なくともいずれかが満たされる場合にはパッキング処理を適用しない上に、さらにパッキング処理を適用する場合を制限する方向の判定基準を用いたことを意味するが、その制限は、第２実施形態の制限よりも、ポートへのマッピングの有無については部分要素単位でか否かを見るという点で緩和されている（パッキング処理が適用される配列オブジェクトがより多くなるようになっている）。
【０１２７】
その他にも、入力されたＶＨＤＬ記述に関して階層展開を行ない階層をフラットにした後で、ＶＨＤＬ記述が一階層であるときと同様の方法を用いることにより適用することも可能である。
【０１２８】
（第３実施形態）
次に、本発明の第３実施形態を説明する。
【０１２９】
図１６は本発明の第３実施形態に係る論理シミュレーション装置の機能ブロック図である。
【０１３０】
同実施形態の論理シミュレーション装置９は、前述した記述入力部１、パッキング処理判定部３およびコード生成部４に加え、パッキング処理指定抽出部５と配列オブジェクト指示部６を具備した構成となっている。
【０１３１】
ここでは、この記述入力部１に図１７に示すようなシミュレーションモデル記述が入力されたとする。このとき、パッキング処理指定抽出部５は、記述中の各配列オブジェクトのうちパッキング指定されているものを抽出する。図１７の記述においては、信号Ｙおよび信号Ｚがパッキング指定として抽出される。
【０１３２】
また、配列オブジェクト指示部６は、設計者からのパッキング指定を受け付け、図１７の記述のようにパッキング指定を書き込む（Ａ）か、あるいは通常のシミュレーションモデル記述中の配列オブジェクトを直接指定する（Ｂ）。
【０１３３】
そして、パッキング処理判定部３は、パッキング処理指定抽出部５によって抽出された各配列型オブジェクト、および配列オブジェクト指示部６によって指定された各配列型オブジェクトについてパッキング処理を適用するかどうかを判定する。ここで、パッキング処理を適用すると判定されたときに、コード生成部４がパッキング処理を行ない、第１および第２実施形態と同様に、入力されたＶＨＤＬ記述に対応するＣプログラムとして、ＶＨＤＬ記述のエラボレーションを行なうコードとステートメントの実行を行なうコードとを生成する。
【０１３４】
これにより、設計者によりパッキング処理候補として予め指定された配列オブジェクトについて、パッキング処理を施すことが適当であるかどうかを判断したうえでパッキング処理を行なうことにより、その処理効率および操作性をより向上させることができる。
【０１３５】
また、前述した第１乃至第３実施形態では、ＶＨＤＬ記述を例に説明したが、他のＨＤＬ言語で記述されたシミュレーションモデルについても適用可能である。
【０１３６】
また、前述した第１、第２、第３実施形態ではコード生成部より生成されるコードとしてＣプログラムが生成される例を説明したが、他の言語で記述されたコードを生成することも可能である。
【０１３７】
さらに、前述した第１乃至第３実施形態では、コンパイル方式の論理シミュレーション装置を前提に説明したが、これに限るものではなく、たとえばインタープリタ方式のシミュレータにも適用可能である。
【０１３８】
【発明の効果】
以上詳述したように本発明の論理シミュレーション装置によれば、配列オブジェクトのうち部分要素ごとの処理のないものについてはパッキング処理を行なったシミュレーションコードを生成することになり、シミュレーションを高速に行なうことができるようになる。
【０１３９】
また、設計者によってパッキング処理候補予め指定された配列オブジェクトについては、パッキング処理を施すことが適当であるかどうかを判断したうえでパッキング処理を行なうことにより、その処理効率および操作性をより向上させることができることとなる。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係る論理シミュレーション装置の機能ブロック図。
【図２】配列オブジェクトの一例を示す図。
【図３】第１実施形態のシミュレーション対象となるＶＨＤＬ記述を示す図。
【図４】第１実施形態の各配列オブジェクトの特徴を抽出するための性質の一例を示す図。
【図５】第１実施形態のパッキング処理判定のアルゴリズムの一例を示す図。
【図６】第１実施形態のコード生成部より生成されるエラボレーションコードの一例を示す図。
【図７】第１実施形態のコード生成部より生成されるエラボレーションコードの一例を示す図。
【図８】第１実施形態のコード生成部より生成されるエラボレーションコードの一例を示す図。
【図９】第１実施形態のコード生成部より生成される実行コードの一例を示す図。
【図１０】第１実施形態のコード生成部より生成される実行コードの一例を示す図。
【図１１】第２実施形態のシミュレーション対象となるＶＨＤＬ記述を示す図。
【図１２】第２実施形態の各配列オブジェクトの特徴を抽出するための性質の一例を示す図。
【図１３】第２実施形態のパッキング処理判定のアルゴリズムの一例を示す図。
【図１４】第２実施形態のコード生成部が生成する実行コードの一例を示す図。
【図１５】第２実施形態のコード生成部が生成する実行コードの一例を示す図。
【図１６】第３実施形態に係る論理シミュレーション装置の機能ブロック図。
【図１７】第３実施形態のシミュレーション対象となるＶＨＤＬ記述を示す図。
【符号の説明】
１…記述入力部、２…特徴抽出部、３…パッキング処理判定部、４…コード生成部、５…パッキング処理指定抽出部。
【図１】
0003766872.tif 000002
【図２】
0003766872.tif 000003
【図３】
0003766872.tif 000004
【図４】
0003766872.tif 000005
【図５】
0003766872.tif 000006
【図６】
0003766872.tif 000007
【図７】
0003766872.tif 000008
【図８】
0003766872.tif 000009
【図９】
0003766872.tif 000010
【図１０】
0003766872.tif 000011
【図１１】
0003766872.tif 000012
【図１２】
0003766872.tif 000013
【図１３】
0003766872.tif 000014
【図１４】
0003766872.tif 000015
【図１５】
0003766872.tif 000016
【図１６】
0003766872.tif 000017
【図１７】
0003766872.tif 000018