(57)【要約】【課題】シミュレーション実行を高速化すること。【解決手段】記述変換方法では、ハードウェア記述言語で記述された回路モデルを取得し、回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいてプロセスの評価順序を決定し、回路モデルに含まれるレジスタ変数のうち、決定されたプロセスの評価順序で条件を満たすレジスタ変数をブロッキング変数に変換する、処理をコンピュータが実行する。【選択図】図１
2020144765.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータが実行する記述変換方法。
【請求項２】
前記決定する処理は、抽出された関係が所定の条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定することを特徴とする請求項１に記載の記述変換方法。
【請求項３】
前記決定する処理は、順序回路に対応するプロセスによる読み込みが書き込みよりも先に実行され、組合せ回路に対応するプロセスによる書き込みが読み込みよりも先に実行され、かつ、複数のプロセスによる同一のレジスタ変数への書き込みが順序通りに実行される条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定する請求項２に記載の記述変換方法。
【請求項４】
前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルを所定のシミュレータへ出力すると共に、決定されたプロセスの評価順序を前記シミュレータの制御情報として前記シミュレータへ出力する処理を前記コンピュータがさらに実行することを特徴とする請求項１、２または３に記載の記述変換方法。
【請求項５】
前記取得する処理によりマルチスレッド対応の回路モデルが取得された場合、スレッドごとに、当該スレッドに割り当てられたプロセス及びレジスタ変数を入力とし、前記抽出する処理、前記決定する処理および前記変換する処理を行うことを特徴とする請求項１〜４のいずれか１つに記載の記述変換方法。
【請求項６】
ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換し、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する、
処理をコンピュータが実行するシミュレーション方法。
【請求項７】
ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータに実行させる記述変換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記述変換方法、シミュレーション方法及び記述変換プログラムに関する。
【背景技術】
【０００２】
デジタル回路の設計では、対象回路をＶｅｒｉｌｏｇやＶＨＤＬ（VHSIC  Hardware  Description  Language）、ＳｙｓｔｅｍＣなどといったＨＤＬで記述し、この回路記述の論理機能を論理シミュレーションを使ってデバッグする。
【０００３】
ＨＤＬの回路モデルは、プロセス（process）とレジスタ変数（register）から構成されるネットワークである。このうち、プロセス（process）は、組み合せ回路と順序回路など、並行動作するモジュールを表す。以下、レジスタ変数を入力に演算処理を行い、その結果をレジスタ変数に出力する動作をプロセスに実行させることを「プロセスを評価する」と表記する。また、レジスタ（register）変数は、ＦＦ（Flip-Flop）やラッチなど、値を保持する信号線を表す。レジスタ変数は、現在値（curr）と次時刻値（next）の２つの値を持ち、プロセスの入力に対しては現在値を、出力には次時刻値を用いる。プロセスの評価後にΔｔ（微小時間）経過すると、レジスタ変数の現在値は次時刻値で上書きされる。以下、レジスタ変数の現在値は次時刻値で上書きすることを「レジスタを更新する」と表記する。
【０００４】
論理シミュレーションは、回路設計において繰り返し実行されるため、その高速化は設計作業の効率化に直結する。
【０００５】
論理シミュレーションを高速化する実行手法の一例として、サイクルベース型シミュレーションが挙げられる。サイクルベース型シミュレーションでは、予め回路構成情報から求められた順序に従って、１クロック内に発生するプロセス評価とレジスタ更新を実行する。各プロセスの評価、および、各レジスタ変数の更新は、１クロック内に高々１回しか実行されないため、イベントドリブン型と比べて演算量が少なくなる結果、シミュレーションの高速化が実現される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０８−１０６４７６号公報
【特許文献２】特開平１０−０２７１８５号公報
【特許文献３】特開平１１−０８５８３２号公報
【特許文献４】特開２００１−３３８００８号公報
【非特許文献】
【０００７】
【非特許文献１】Key-Yong  Khoo,  Alan  N.  Willson,  Jr.,“Cycle-Based  Timing  Simulation  Using  Event-Streams”,  Proc.  of  ICCD1996.
【非特許文献２】Models  Kumar  N.,  Lalgudi  and  Marios  C.,  Papaefthymiou,  “Retiming  Edge-Triggered  Circuits  Under  General  Delay”,  IEEE  Trans.  on  Computer-Aided  Design  of  Integrated  Circuits  and  Systems  (Vol.  16  ,  Issue:  12  ,  Dec  1997).
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年のプロセッサ、例えばマルチコアＣＰＵ（Central  Processing  Unit）やＧＰＵ（Graphics  Processing  Unit）等の回路は大規模であるため、そのＨＤＬ記述は多くのプロセスとレジスタ変数を持つ。特に、レジスタ変数の多さは、論理シミュレーションでのレジスタ更新の回数に影響するため、論理シミュレーションの実行が低下する要因となっている。
【０００９】
このようにプロセッサの回路が大規模化する一方で、上記のサイクルベース型シミュレーションにおいてシミュレーション実行を高速化するのには限界がある。
【００１０】
１つの側面では、本発明は、シミュレーション実行を高速化できる記述変換方法、シミュレーション方法及び記述変換プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
一態様では、ハードウェア記述言語で記述された回路モデルを取得し、前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、処理をコンピュータが実行する。
【発明の効果】
【００１２】
シミュレーション実行を高速化できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るシミュレーション装置の機能的構成の一例を示すブロック図である。
【図２】図２は、ＨＤＬの回路モデルの一例を示す図である。
【図３】図３は、プロセス評価とレジスタ更新の一例を示す図である。
【図４】図４は、ｒｅｇｉｓｔｅｒＢの動作の一例を示す図である。
【図５】図５は、ｒｅｇｉｓｔｅｒＢの動作の一例を示す図である。
【図６】図６は、ｂｌｏｃｋｉｎｇＢの動作の一例を示す図である。
【図７】図７は、ｂｌｏｃｋｉｎｇＢの動作の一例を示す図である。
【図８】図８は、レジスタ変数の関係データの一例を示す図である。
【図９】図９は、プロセス評価順序付きのレジスタ変数の関係データの一例を示す図である。
【図１０】図１０は、Ｖｅｒｉｌｏｇ記述の一例を示す図である。
【図１１】図１１は、ＳｙｓｔｅｍＣ記述の一例を示す図である。
【図１２】図１２は、プロセス評価とレジスタ更新の一例を示す図である。
【図１３】図１３は、実施例１に係るシミュレーション処理の手順を示すフローチャートである。
【図１４】図１４は、実施例１に係るプロセス評価順序決定処理の手順を示すフローチャートである。
【図１５】図１５は、コンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して本願に係る記述変換方法、シミュレーション方法及び記述変換プログラムについて説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１５】
［システム構成］
図１は、実施例１に係るシミュレーション装置１０の機能的構成の一例を示すブロック図である。図１に示すシミュレーションシステム１は、デジタル回路の設計を支援する側面から、ＨＤＬで記述された回路モデルの動作を検証する論理シミュレーションの機能を提供するものである。
【００１６】
図１に示すように、シミュレーションシステム１には、シミュレーション装置１０と、クライアント端末５０とが含まれ得る。これらシミュレーション装置１０及びクライアント端末５０は、ネットワークＮＷを介して通信可能に接続される。ネットワークＮＷは、有線または無線を問わず、インターネットやＬＡＮ（Local  Area  Network）などの任意の種類の通信網であってかまわない。なお、図１には、説明の便宜上、１つのシミュレーション装置１０につき１つのクライアント端末５０が接続される例を挙げたが、１つのサーバ装置１０につき複数のクライアント端末５０が接続されることを妨げない。
【００１７】
シミュレーション装置１０は、上記の論理シミュレーションの機能を提供するコンピュータの一例である。
【００１８】
一実施形態として、シミュレーション装置１０は、いわゆるＥＤＡ（Electronic  Design  Automation）ツールとして、上記の論理シミュレーションの機能を実現する論理シミュレータを任意のコンピュータにインストールさせることによって実装できる。例えば、シミュレーション装置１０は、上記の論理シミュレーションの機能をオンプレミスに提供するサーバとして実装することができる。これに限定されず、シミュレーション装置１０は、ＳａａＳ（Software  as  a  Service）型のアプリケーションとして実装することで、上記の論理シミュレーションの機能をクラウドサービスとして提供することとしてもかまわない。
【００１９】
クライアント端末５０は、上記の論理シミュレーションの機能の提供を受けるクライアントにより使用されるコンピュータの一例に対応する。このようなクライアントのあくまで一例として、デジタル回路の設計に携わる関係者全般が挙げられる。また、クライアント端末５０には、デスクトップ型またはラップトップ型のパーソナルコンピュータなどが対応する。これはあくまで一例であり、クライアント端末５０は、携帯端末装置やウェアラブル端末などの任意のコンピュータであってもかまわない。
【００２０】
なお、図１には、あくまで一例として、論理シミュレーションの機能がクライアントサーバシステムで提供される例を示したが、論理シミュレーションの機能はスタンドアローンで実装されることとしてもかまわない。
【００２１】
［回路モデルの一例］
ＨＤＬの回路モデルは、プロセスとレジスタ変数から構成されるネットワークである。このうち、プロセスは、組み合せ回路と順序回路など、並行動作するモジュールを表す。以下、レジスタ変数を入力に演算処理を行い、その結果をレジスタ変数に出力する動作をプロセスに実行させることを「プロセスを評価する」と表記する。また、レジスタ変数は、ＦＦやラッチなど、値を保持する信号線を表す。レジスタ変数は、現在値と次時刻値の２つの値を持ち、プロセスの入力に対しては現在値を、出力には次時刻値を用いる。プロセスの評価後にΔｔ（微小時間）経過すると、レジスタ変数の現在値は次時刻値で上書きされる。以下、レジスタ変数の現在値は次時刻値で上書きすることを「レジスタを更新する」と表記する。
【００２２】
図２は、ＨＤＬの回路モデルの一例を示す図である。図２では、順序回路が点模様の網掛けで示され、組合せ回路が斜線の網掛けで示されると共に、レジスタ変数が白の塗りつぶしで示されている。図２に示すＨＤＬの回路モデルの例で言えば、ｐｒｏｃｅｓｓ１〜ｐｒｏｃｅｓｓ４の４つのプロセスと、ｒｅｇｉｓｔｅｒＡ〜ｒｅｇｉｓｔｅｒＤの４つのレジスタ変数とが含まれる。これら４つのプロセスのうち、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２及びｐｒｏｃｅｓｓ４は、クロック信号の入力時に動作が行われることがモデル化された順序回路である。また、ｐｒｏｃｅｓｓ３は、クロックとは無関係に入力のレジスタ変数の値が変化すると動作することがモデル化された組合せ回路である。
【００２３】
図２に示すＨＤＬの回路モデルにサイクルベース型シミュレーションが行われる場合、１クロック内に実行されるプロセス評価とレジスタ更新の様子は図３に示す通りとなる。図３は、プロセス評価とレジスタ更新の一例を示す図である。図３に示すように、先ず、クロック信号が入力される時刻ｎにおいて、クロックに同期するｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２及びｐｒｏｃｅｓｓ４の評価が行われる。続いて、時刻ｎからΔｔ経過後に、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２及びｐｒｏｃｅｓｓ４の出力が書き込まれたｒｅｇｉｓｔｅｒＢ、ｒｅｇｉｓｔｅｒＣ及びｒｅｇｉｓｔｅｒＡにおいて、レジスタ変数の現在値が次時刻値で上書きされる。その後、時刻ｎ＋ΔｔからさらにΔｔ経過後に、組合せ回路であるｐｒｏｃｅｓｓ３の評価が行われる。最後に、時刻ｎ＋２＊ΔｔからさらにΔｔ経過後に、ｒｅｇｉｓｔｅｒＤにおいて、レジスタ変数の現在値が次時刻値で上書きされる。
【００２４】
このように、サイクルベース型シミュレーションでは、プロセスの評価、および、レジスタ変数の更新が１クロック内に高々１回しか実行されないため、イベントドリブン型と比べてはるかに演算量を少なくできる一面がある。
【００２５】
［課題の一側面］
近年のプロセッサ、例えばマルチコアＣＰＵやＧＰＵ等の回路は大規模であるため、そのＨＤＬ記述は多くのプロセスとレジスタ変数を持つ。特に、レジスタ変数の多さは、論理シミュレーションでのレジスタ更新の回数に影響するため、論理シミュレーションの実行が低下する要因となっている。
【００２６】
このように、近年のプロセッサの回路は、大規模化の一途を辿っており、サイクルベース型シミュレーションにおいてもシミュレーション実行を高速化するのには限界がある。
【００２７】
また、レジスタ個数を削減するＲｅｔｉｍｉｎｇと呼ばれる技術も存在する。Ｒｅｔｉｍｉｎｇとは、組合せ回路の入力側のレジスタを出力側へ再配置したり、あるいは出力側のレジスタを入力側へ再配置したりすることで、回路の論理動作を変えずにレジスタ個数を削減する技術である。
【００２８】
しかしながら、Ｒｅｔｉｍｉｎｇは、論理シミュレーション時のレジスタ削減手法としては実効的でなく、レジスタの削減効果が限定的に留まる。
【００２９】
第一に、Ｒｅｔｉｍｉｎｇは、組合せ回路にしか適用できない上、レジスタを入力側から出力側へまたは出力側から入力側へ再配置するための制約も厳しいので、Ｒｅｔｉｍｉｎｇを適用できる場面そのものが限定的である。例えば、組合せ回路の入力側のレジスタを出力側へ再配置するとしたとき、組合せ回路の入力側において全ての入力にレジスタが１つ以上存在しなければ、出力側へレジスタを再配置することができない。このような制約がある上、組合せ回路において入力の数が出力の数を上回らなければ、レジスタの削減効果が得られない。これは出力側のレジスタを入力側へ再配置する場合も同様である。
【００３０】
第二に、再配置によってレジスタのリセット状態が変わるため、レジスタのリセット時の値を再計算する必要があるが、その再計算も困難である。例えば、組合せ回路の入力側のレジスタが出力側へ再配置される場合、プロセスの関数を用いてリセット時の値を再計算する必要があるが、その値が論理回路として許されるのかどうかも回路モデルの設計者が検証せねばならない。また、組合せ回路の出力側のレジスタが入力側へ再配置される場合、リセット時の値を再計算するには、プロセスの逆関数を作成する必要があるが、必ずしも逆関数を作成できるとは限らない。
【００３１】
これらのことから、上記のＲｅｔｉｍｉｎｇを論理シミュレーションに適用することは困難である。
【００３２】
［課題解決のアプローチの一側面］
そこで、本実施例では、シミュレーション実行を高速化するために、ＨＤＬで記述された回路モデルのレジスタ変数をブロッキング変数へ変換することで、レジスタ変数を削減する。
【００３３】
図２に示すＨＤＬの回路モデルに対する論理シミュレーションにおいて、ｐｒｏｃｅｓｓ１及びｐｒｏｃｅｓｓ４と、ｒｅｇｉｓｔｅｒＢとを抜粋して、レジスタ変数の動作を説明する。
【００３４】
図４及び図５は、ｒｅｇｉｓｔｅｒＢの動作の一例を示す図である。図４には、時刻ｎにおけるｒｅｇｉｓｔｅｒＢの動作が示される一方で、図５には、時刻ｎ＋ΔｔにおけるｒｅｇｉｓｔｅｒＢの動作が示されている。
【００３５】
図４に示すように、時刻ｎでは、ｒｅｇｉｓｔｅｒＢが持つ値をＸとする。また、プロセスの評価によって、ｐｒｏｃｅｓｓ１とｐｒｏｃｅｓｓ４は、ｒｅｇｉｓｔｅｒＢに対して、それぞれ、書き込みと読み込みを行う。この時刻ｎにおけるｒｅｇｉｓｔｅｒＢでは、ｐｒｏｃｅｓｓ１によって次時刻値（ｎｅｘｔ）へＹが書き込まれると共に、ｐｒｏｃｅｓｓ４によって現在値（ｃｕｒｒ）からＸが読み込まれる。その後、時刻ｎからΔｔ経過後には、図５に示すように、ｒｅｇｉｓｔｅｒＢで現在値が次時刻値によって上書きされる。この結果、現在値が値Ｙを持つようになる。
【００３６】
このように、プロセスが並列に評価される時、同一のレジスタ変数に書き込みと読み書きが同時刻に行われても正しい動作をする目的の為、論理シミュレーションの実装では、レジスタ変数は２つの値（現在値と次時刻値）を持っている。また、レジスタ変数の更新は、レジスタ変数が持つ２つ値を同期させるために必要となっている。
【００３７】
本実施例において、「ブロッキング（ｂｌｏｃｋｉｎｇ）変数」を以下のように定義する。「ブロッキング変数」とは、論理シミュレーションの回路モデルにおいて値を保持するレジスタを表す変数で、書き込まれた値は、即時、読み出しが可能となる変数。ＨＤＬ記述上は、ブロッキング変数は、代入時は常にブロッキング代入、例えばＶｅｒｉｌｏｇ文法では“＝”が使われるレジスタ変数である。しかし、レジスタ変数と異なり、常にブロッキング代入されるため、値は現在値の１つのみを保持する。
【００３８】
ここで、レジスタ変数ｒｅｇｉｓｔｅｒＢをブロッキング変数ｂｌｏｃｋｉｎｇＢに変換する。その上で、「並列評価されるべきプロセスを、逐次的に評価しても論理シミュレーションの動作は正しいままである」という性質を使って、図４及び図５と同じ動作をするように、プロセスの評価順序を決める。具体的には、変換されたブロッキング変数を読み出すプロセスを先に評価し、その後、書き込むプロセスを評価する。
【００３９】
図６及び図７は、ｂｌｏｃｋｉｎｇＢの動作の一例を示す図である。図６には、時刻ｎにおけるｂｌｏｃｋｉｎｇＢの動作（前半）が示される一方で、図７には、時刻ｎにおけるｂｌｏｃｋｉｎｇＢの動作（後半）が示されている。
【００４０】
図６に示すように、時刻ｎにおいて、ｂｌｏｃｋｉｎｇＢが持つ値をＸとする。ここで、本実施例では、ブロッキング変数の使用時にも論理シミュレーションの動作を保証するために、ｐｒｏｃｅｓｓ１及びｐｒｏｃｅｓｓ４の評価のうち、ｐｒｏｃｅｓｓ４の評価が先に実行される。すなわち、ｂｌｏｃｋｉｎｇＢでは、ｐｒｏｃｅｓｓ４によって値Ｘが読み込まれる。このようにｐｒｏｃｅｓｓ４の評価が先に行われた後、ｐｒｏｃｅｓｓ１の評価が行われる。すなわち、図７に示すように、ｂｌｏｃｋｉｎｇＢでは、ｐｒｏｃｅｓｓ１によって値Ｙが書き込まれる。これによって、図４及び図５に示すｒｅｇｉｓｔｅｒＢの時と同じく、各プロセスは、入出力値を読み書きするため、論理シミュレーションが正しく動作することが保証される。
【００４１】
このように、レジスタ変数をブロッキング変数に変換すれば、論理シミュレーションの動作は正しいまま、その分のレジスタ変数の更新回数が削減される事が分かる。
【００４２】
［シミュレーション装置の機能的構成］
次に、本実施例に係る論理シミュレータの機能を搭載するシミュレーション装置１０の機能的構成について説明する。図１に示すように、シミュレーション装置１０は、通信インタフェース部１１と、記憶部１３と、制御部１５とを有する。なお、図１には、データの授受の関係を表す実線が示されているが、説明の便宜上、最小限の部分について示されているに過ぎない。すなわち、各処理部に関するデータの入出力は、図示の例に限定されず、図示以外のデータの入出力、例えば処理部及び処理部の間、処理部及びデータの間、並びに、処理部及び外部装置の間のデータの入出力が行われることとしてもかまわない。
【００４３】
通信インタフェース１１は、他の装置、例えばクライアント端末５０との間で通信制御を行うインタフェースである。
【００４４】
あくまで一例として、通信インタフェース１１には、ＬＡＮカードなどのネットワークインタフェースカードを採用することができる。例えば、通信インタフェース１１は、クライアント端末５０から論理シミュレーションの実行リクエストを受け付けたり、また、論理シミュレーションの実行結果をクライアント端末５０へ送信したりする。
【００４５】
記憶部１３は、任意のデータを記憶する機能部である。例えば、記憶部１３には、制御部１５で実行されるＯＳ（Operating  System）を始めとする各種のプログラムが記憶される。この他、記憶部１３には、上記の論理シミュレータ、あるいはＨＤＬで記述されたコードに含まれるレジスタ変数をブロッキング変数に変換するＨＤＬ記述変換機能がモジュール化されたＨＤＬ記述変換プログラムなどの各種プログラムが記憶される。
【００４６】
あくまで一例として、記憶部１３は、シミュレーション装置１０における補助記憶装置に対応する。例えば、ＨＤＤ（Hard  Disk  Drive）、光ディスクやＳＳＤ（Solid  State  Drive）などが補助記憶装置に対応する。この他、ＥＰＲＯＭ（Erasable  Programmable  Read  Only  Memory)などのフラッシュメモリも補助記憶装置に対応する。
【００４７】
記憶部１３は、制御部１５で実行されるプログラムに用いられるデータの一例として、関係データ１３Ａとを記憶する。この関係データ１３Ａ以外にも、上記の論理シミュレータによって論理シミュレーションに用いられるデータ、例えば回路モデルや回路モデルへの入力信号、シミュレーションの制御情報などが記憶部１３に記憶されることとしてもかまわない。なお、関係データ１３Ａの説明は、各データの参照または生成が行われる制御部１５の説明と合わせて行うこととする。
【００４８】
制御部１５は、シミュレーション装置１０の全体制御を行う機能部である。
【００４９】
一実施形態として、制御部１５は、ＣＰＵやＭＰＵ（Micro  Processing  Unit）などのハードウェアプロセッサにより実装することができる。ここでは、プロセッサの一例として、ＣＰＵやＭＰＵを例示したが、汎用型および特化型を問わず、任意のプロセッサにより実装することができる。この他、制御部１５は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによって実現されることとしてもかまわない。
【００５０】
制御部１５は、上記の論理シミュレータを実行することにより、図示しない主記憶装置として実装されるＤＲＡＭ（Dynamic  Random  Access  Memory）などのＲＡＭのワークエリア上に図１に示す処理部を仮想的に実現する。なお、ここでは、上記のＨＤＬ記述変換機能がパッケージ化された論理シミュレータが実行される例を挙げるが、上記の論理シミュレータのうち任意の機能、例えばＨＤＬ記述変換機能を抜粋してプログラムモジュールとして実行されたり、あるいはライブラリとして参照されたりすることとしてもかまわない。
【００５１】
例えば、制御部１５は、図１に示すように、ＨＤＬ記述取得部１５Ａと、関係抽出部１５Ｂと、評価順序決定部１５Ｃと、レジスタ変数変換部１５Ｄと、シミュレーション実行部１５Ｅとを有する。
【００５２】
ＨＤＬ記述取得部１５Ａは、ＨＤＬで記述されたコードを取得する処理部である。以下、ＨＤＬで回路モデルが記述されたコードのことを「ＨＤＬ記述」と記載する場合がある。
【００５３】
あくまで一例として、ＨＤＬ記述取得部１５Ａは、クライアント端末５０から論理シミュレーションの実行リクエストを受け付ける際、ＨＤＬ記述のアップロードを受け付けることができる。この他、ＨＤＬ記述取得部１５Ａは、シミュレーション装置１０の記憶部１３、あるいは図示しない外部のファイルサーバ等に登録されたＨＤＬ記述から、論理シミュレーションを行うＨＤＬ記述を指定させることもできる。
【００５４】
関係抽出部１５Ｂは、プロセス及びレジスタ変数の間で読み込み及び書き込みの関係を抽出する処理部である。
【００５５】
一実施形態として、関係抽出部１５Ｂは、ＨＤＬ記述取得部１５Ａにより取得された対象回路のＨＤＬ記述を入力として、プロセス毎に、レジスタ変数へのＲｅａｄとＷｒｉｔｅの関係を抽出する。このとき、関係抽出部１５Ｂは、各プロセスについて、順序回路または組合せ回路のプロセスの種類も抽出する。このようにプロセスごとに抽出されたレジスタ変数へのＲｅａｄとＷｒｉｔｅの関係は、プロセスを行とし、レジスタ変数を列とする関係データに出力される。この時、関係抽出部１５Ｂは、各レジスタ変数に対して、下記のＲｅａｄ−Ｗｒｉｔｅ制約に従って矢印等の方向を記録することにより、Ｒｅａｄ−Ｗｒｉｔｅ制約を定式化する。
【００５６】
Ｒｅａｄ−Ｗｒｉｔｅ制約には、（Ａ）〜（Ｃ）の３つのＲｅａｄ−Ｗｒｉｔｅ制約が含まれる。
【００５７】
（Ａ）順序回路プロセスによるＲｅａｄから、（複数Ｗｒｉｔｅが有る場合は最初の）Ｗｒｉｔｅへ矢印を付ける。
このような定式化が行われるのは、レジスタ変数に対して、全てのＲｅａｄが実行された後でＷｒｉｔｅが実行される場合、そのＲｅａｄ中は現在値（ｃｕｒｒ）と次時刻値（ｎｅｘｔ）は一致したままであるからである。この事実がプロセスの評価順序の決定時に考慮される、レジスタ変数のブロッキング変数への変換に使われる。
【００５８】
（Ｂ）組合せ回路プロセスによるＲｅａｄへ、（複数Ｗｒｉｔｅが有る場合は最初の）Ｗｒｉｔｅから矢印を付ける。
このような定式化が行われるのは、ＨＤＬの回路モデルでは、組合せ回路プロセスは、その全ての入力値が確定した後で評価が行われる為である。
【００５９】
（Ｃ）同一レジスタ変数へ複数プロセスのＷｒｉｔｅがある場合、その順序に従って矢印を付ける。
このような定式化が行われるのは、ＨＤＬの回路モデルでは、レジスタ変数への複数回の書き込みは、最後の書き込みが次時刻値（ｎｅｘｔ）に反映される為である。
【００６０】
あくまで一例として、図２に示す回路モデルのＨＤＬ記述が入力された場合、図８に示すレジスタ変数の関係データ１３Ａ１が作成される。図８は、レジスタ変数の関係データ１３Ａ１の一例を示す図である。図２に示すＨＤＬの回路モデルでは、各レジスタ変数の書き込みは１個のプロセスに限られている為、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ｃ）は適用されない。図８に示すように、関係データ１３Ａ１には、ｐｒｏｃｅｓｓ１〜ｐｒｏｃｅｓｓ４の４つのプロセスの行が作成すると共に、ｒｅｇｉｓｔｅｒＡ〜ｒｅｇｉｓｔｅｒＤの４つのレジスタ変数の列が作成される。さらに、関係データ１３Ａ１には、ｐｒｏｃｅｓｓ１〜ｐｒｏｃｅｓｓ４の４つのプロセスについては、各プロセスの種類も抽出される。すなわち、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２及びｐｒｏｃｅｓｓ４の種類として順序回路が抽出されると共に、ｐｒｏｃｅｓｓ３の種類として組合せ回路が抽出される。さらに、関係データ１３Ａ１のレジスタ変数の行において、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ａ）に従って順序回路プロセスによるＲｅａｄからＷｒｉｔｅへ黒地の矢印が設定される。さらに、関係データ１３Ａ１のレジスタ変数の行において、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ｂ）に従って組合せ回路プロセスによるＲｅａｄへＷｒｉｔｅから白地の矢印が設定される。このような関係データ１３Ａ１が記憶部１３に保存される。
【００６１】
評価順序決定部１５Ｃは、上記のＲｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数が最大となるプロセスの評価順序を決定する処理部である。
【００６２】
一実施形態として、評価順序決定部１５Ｃは、レジスタ変数の関係データ１３Ａ１が生成された場合に処理を起動することができる。例えば、評価順序決定部１５Ｃは、関係抽出部１５Ｂにより出力されたレジスタ変数の関係データ１３Ａ１において、レジスタ変数のブロッキング変数への変換によってレジスタ変数が最小になるプロセス評価順序を決定する。ここで、プロセスの評価順序の決定には、以下のＲｅａｄ−Ｗｒｉｔｅ制約とレジスタ削減の関係が利用される。すなわち、レジスタ変数の関係データ１３Ａ１の行順序、例えば上方向から下方向へ向かって論理シミュレーションがプロセスを評価する場合、Ｒｅａｄ−Ｗｒｉｔｅ制約の全ての矢印が上から下へ向いているレジスタ変数をブロッキング変数に変換しても、シミュレーション結果が変わらないことが保証される。このように定式化されたレジスタ変数の関係データ１３Ａ１を利用して、評価順序決定部１５Ｃは、Ｒｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数の個数を最大化するように、プロセスの評価順序を決定する。その上で、評価順序決定部１５Ｃは、レジスタ変数のブロッキング変数への変換によってレジスタ変数が最小になるプロセス評価順序をプロセス評価順序付きのレジスタ変数の関係データ１３Ａ２として記憶部１３に保存する。
【００６３】
あくまで一例として、図８に示すレジスタ変数の関係データ１３Ａ１が入力される場合、図８に示す関係データ１３Ａ１からも分かる通り、ｒｅｇｉｓｔｅｒＡ及びｒｅｇｉｓｔｅｒＢの間でＲｅａｄ−Ｗｒｉｔｅ制約（Ａ）が循環している（黒地の矢印が双方向に循環している）。このため、全てのＲｅａｄ−Ｗｒｉｔｅ制約を満たすプロセスの評価順序は存在しない。しかしながら、図９に示すプロセス評価順序を論理シミュレータに設定すれば、Ｒｅａｄ−Ｗｒｉｔｅ制約を最大限に満たすことができる。
【００６４】
図９は、プロセス評価順序付きのレジスタ変数の関係データ１３Ａ２の一例を示す図である。図９に示す関係データ１３Ａ２では、プロセス評価順序がｐｒｏｃｅｓｓ４、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２、ｐｒｏｃｅｓｓ３の順に設定されている。このプロセス評価順序が設定された場合、ｒｅｇｉｓｔｅｒＡでは、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ａ）の矢印が下から上へ向いている。このため、ｒｅｇｉｓｔｅｒＡは、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ａ）を満たさず、ブロッキング変数へ変換できない。その一方で、ｒｅｇｉｓｔｅｒＢ、ｒｅｇｉｓｔｅｒＣ及びｒｅｇｉｓｔｅｒＤでは、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ａ）またはＲｅａｄ−Ｗｒｉｔｅ制約（Ｂ）の矢印が上から下へ向いている。よって、ｒｅｇｉｓｔｅｒＢ、ｒｅｇｉｓｔｅｒＣ及びｒｅｇｉｓｔｅｒＤは、ブロッキング変数へ変換可能である。このように、図９に示すプロセス評価順序は、ブロッキング変数に変換できないレジスタ変数の個数は最小の１個（ｒｅｇｉｓｔｅｒＡ）であり、最適であると言える。
【００６５】
レジスタ変数変換部１５Ｄは、レジスタ変数をブロキング変数に変換する処理部である。
【００６６】
一実施形態として、レジスタ変数変換部１５Ｄは、評価順序決定部１５Ｃにより出力されたプロセス評価順序付きのレジスタ変数の関係データ１３Ａ２を用いて、オリジナルの回路モデルのＨＤＬ記述のレジスタ変数をブロッキング変数に変換する。その上で、レジスタ変数変換部１５Ｄは、レジスタ変数がブロッキング変数に変換されたＨＤＬ記述をシミュレーション実行部１５Ｅへ出力する。
【００６７】
あくまで一例として、図９に示すプロセス評価順序付きのレジスタ変数の関係データ１３Ａ２が得られた場合、レジスタ変数変換部１５Ｄは、次のような動作を行う。すなわち、レジスタ変数変換部１５Ｄは、Ｒｅａｄ−Ｗｒｉｔｅ制約（Ａ）及びＲｅａｄ−Ｗｒｉｔｅ制約（Ｂ）を満たすｒｅｇｉｓｔｅｒＢ、ｒｅｇｉｓｔｅｒＣ及びｒｅｇｉｓｔｅｒＤの３つのレジスタ変数をブロッキング変数に変換する。
【００６８】
図１０は、Ｖｅｒｉｌｏｇ記述の一例を示す図である。図１０には、オリジナルのＶｅｒｉｌｏｇ記述２１と、レジスタ変数削減後のＶｅｒｉｌｏｇ記述２２とが示されている。図２に示す各レジスタ変数（Ａ、Ｂ、Ｃ及びＤ）への代入文は、並列動作するプロセスとみなすことができる。コメントで示した通り、ｐｒｏｃｅｓｓ１〜ｐｒｏｃｅｓｓ４と命名する。さらに、各レジスタ変数Ｘ（＝｛Ａ，Ｂ，Ｃ，Ｄ｝）をｒｅｇｉｓｔｅｒＸと読み替えれば、図１０に示すオリジナルのＶｅｒｉｌｏｇ記述２１は、図２に示す回路モデルと等価になる。
【００６９】
図１０に太字の記述で示す通り、オリジナルのＶｅｒｉｌｏｇ記述２１では、図９に示す代入文の順序（プロセス評価順）と、変数Ｂ、変数Ｃおよび変数Ｄの代入とがノンブロッキング代入（“＜＝”）からブロッキング代入（“＝”）に置換される。このような変換によって、レジスタ変数が削減されたＶｅｒｉｌｏｇ記述２２が得られる。Ｖｅｒｉｌｏｇ記述２２では、オリジナルのＶｅｒｉｌｏｇ記述２１に比べて、ｐｒｏｃｅｓｓ４、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２、ｐｒｏｃｅｓｓ３の順序でプロセスの評価を行うというプロセスの評価順序に制約が生じる。しかしながら、論理シミュレーションの実行を高速化する上で、プロセスの評価順序を変えることにデメリットはない。その一方で、Ｖｅｒｉｌｏｇ記述２２では、オリジナルのＶｅｒｉｌｏｇ記述２１に比べて、変数Ｂ、変数Ｃおよび変数Ｄの代入をノンブロッキング代入へ変換できるので、レジスタ変数Ｂ、レジスタ変数Ｃおよびレジスタ変数Ｄを削減できる。
【００７０】
さらに、図１０に示すオリジナルのＶｅｒｉｌｏｇ記述２１がＳｙｓｔｅｍＣで記述された例を図１１に示す。図１１は、ＳｙｓｔｅｍＣ記述の一例を示す図である。図１１には、オリジナルのＳｙｓｔｅｍＣ記述３１と、レジスタ変数削減後のＳｙｓｔｅｍＣ記述３２とが示されている。図１１に示すように、オリジナルのＳｙｓｔｅｍＣ記述３１におけるレジスタ変数がｓｃ＿ｓｉｇｎａｌ変数、図中の例で言えば「ｓｃ＿ｓｉｇｎａｌ＜ｉｎｔ１６＿ｔ＞」と定義され、ブロッキング変数がモジュールクラスのメンバ変数、同例で言えば「ｉｎｔ１６＿ｔ」として定義される。このような変換によって、図１０に示す例と同様、レジスタ変数が削減されたＳｙｓｔｅｍＣ記述３２を得ることができる。
【００７１】
シミュレーション実行部１５Ｅは、論理シミュレーションを実行する処理部である。
【００７２】
一実施形態として、シミュレーション実行部１５Ｅは、評価順序決定部１５Ｃにより決定されたプロセス評価順序に従ってレジスタ変数変換部１５Ｄにより出力されたＨＤＬ記述に論理シミュレーションを実行する。このとき、ＨＤＬ記述は、コンパイラによって実行形式のファイルへ変換された上で論理シミュレータに入力される。
【００７３】
あくまで一例として、図９に示すプロセス評価順序付きのレジスタ変数の関係データ１３Ａ２が得られた場合、シミュレーション実行部１５Ｅは、ｐｒｏｃｅｓｓ４、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２、ｐｒｏｃｅｓｓ３の順序でプロセスの評価を行う。このように、図１０に示すレジスタ変数削減後のＶｅｒｉｌｏｇ記述２２、あるいは図１１に示すレジスタ変数削減後のＳｙｓｔｅｍＣ記述３２が論理シミュレータに入力される場合、１クロック内の論理シミュレーションの動作は図１２に示す通りとなる。
【００７４】
図１２は、プロセス評価とレジスタ更新の一例を示す図である。図１２に示すように、クロックに同期して、ｐｒｏｃｅｓｓ４、ｐｒｏｃｅｓｓ１、ｐｒｏｃｅｓｓ２、ｐｒｏｃｅｓｓ３の順でプロセスの評価が行われる。その結果、ｒｅｇｉｓｔｅｒＡの更新が行われる。これを図３に示す例と比較すれば、ｒｅｇｉｓｔｅｒＢ、ｒｅｇｉｓｔｅｒＣ及びｒｅｇｉｓｔｅｒＤの更新が削減されており、その分の１クロックに行われる計算量、並びに、データアクセスが低減されていることが明らかである。また、Ｒｅｔｉｍｉｎｇでは、そもそも組合せ回路に接続されるレジスタ変数にしか適用範囲が及ばないため、そもそもｒｅｇｉｓｔｅｒＢ、ｒｅｇｉｓｔｅｒＣ及びｒｅｇｉｓｔｅｒＤのレジスタ変数を削減できない。このため、レジスタの削減効果は限定的に留まる。その一方で、本実施例では、プロセスの評価順序を考慮することでより多くのレジスタ変数を削減できるため、レジスタ変数の削減効果が高いことが分かる。
【００７５】
ここでは、あくまで一例として、図２に示す回路モデルの論理シミュレーションを例に挙げたが、任意の回路モデルに対する論理シミュレーションに上記のＨＤＬ記述変換を適用できる。例えば、マルチスレッド等の並列化論理シミュレーションに応用可能である。並列実行の際、同じスレッドに実行割り当てされたプロセスの単位で、レジスタ変数関係表作成、プロセス評価順序決定、および、レジスタ変数変換を行うことにより、個々のスレッド実行を高速化できる。また、異なるスレッド間に割り当てられたプロセス同士のデータ授受は、依然としてレジスタ変数を介して行われるため、並列化によって論理シミュレーションの結果が変わることは無い。
【００７６】
あくまで一例として、ＳｙｓｔｅｍＣの標準シミュレータに対し、ｇｅｎ、ｉｎｃ及びｃｈｋの３個のプロセスと２個のレジスタ変数を持つモジュールを４０９６個並列に動作させる例で効果を検証した。レジスタ変数は、合計８１９２個（＝２＊４０９６）となる。使用環境は「SystemC-2.3.2」とし、計算機は「Intel  CPU  Xeon  E5-2620v3＠2.4GHz,  1コア」とする。このような環境下では、オリジナルのＳｙｓｔｅｍＣ記述およびレジスタ変数削減後のＳｙｓｔｅｍＣ記述のシミュレーション時間は、次の通りとなった。すなわち、オリジナルのＳｙｓｔｅｍＣ記述のシミュレーション時間は「２０．３９秒」となり、レジスタ変数削減後のＳｙｓｔｅｍＣ記述のシミュレーション時間は「６．１５秒」となった。このことから、レジスタ削減によって３．３版の高速化が実現できたことが確認できる。
【００７７】
［処理の流れ］
次に、本実施例に係るシミュレーション装置１０の処理の流れについて説明する。図１３は、実施例１に係るシミュレーション処理の手順を示すフローチャートである。この処理は、あくまで一例として、クライアント端末５０から論理シミュレーションの実行リクエストを受け付けた場合に開始される。
【００７８】
図１３に示すように、ＨＤＬ記述取得部１５ＡによりＨＤＬ記述が取得されると（ステップＳ１０１）、関係抽出部１５Ｂは、プロセス及びレジスタ変数の間で読み込み及び書き込みの関係を抽出する（ステップＳ１０２）。これによって、レジスタ変数の関係データ１３Ａ１が作成される。
【００７９】
続いて、評価順序決定部１５Ｃは、レジスタ変数の関係データ１３Ａ１を参照して、上記のＲｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数が最大となるプロセスの評価順序を決定する「プロセス評価順序決定処理」を実行する（ステップＳ１０３）。これによって、レジスタ変数の関係データ１３Ａ１がプロセス評価順序付きのレジスタ変数の関係データ１３Ａ２に更新される。
【００８０】
その後、レジスタ変数変換部１５Ｄは、ステップＳ１０１で取得されたＨＤＬ記述に含まれる回路モデルのレジスタ変数のうちステップＳ１０３で決定されたプロセス評価順序でＲｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数をブロキング変数に変換する（ステップＳ１０４）。
【００８１】
最後に、シミュレーション実行部１５Ｅは、ステップＳ１０３で決定されたプロセス評価順序に従ってステップＳ１０４でレジスタ変数がブロッキング変数に変換されたＨＤＬ記述に論理シミュレーションを実行し（ステップＳ１０５）、処理を終了する。
【００８２】
図１４は、実施例１に係るプロセス評価順序決定処理の手順を示すフローチャートである。この処理は、図１３に示されたステップＳ１０３で実行される処理である。図４には、あくまで一例として、Ｒｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数の個数を最大化するプロセスの評価順序を探索するためのアルゴリズムとして、貪欲法（greedy  algorithm）を用いる例を挙げる。
【００８３】
図１４に示すように、評価順序決定部１５Ｃは、レジスタＳｍに任意のプロセス評価順序を設定すると共に、Ｓに対する得点を計算してレジスタＶｍに保存する（ステップＳ３０１）。
【００８４】
その後、評価順序決定部１５Ｃは、前よりも得点が増加する間、すなわち得点が改善する限り、ステップＳ３０３からステップＳ３０７までの処理を繰り返し実行する（ステップＳ３０２）。
【００８５】
すなわち、評価順序決定部１５Ｃは、レジスタ変数の関係データ１３Ａ１から切り取られる行のループカウンタｉ＝１，・・・，Ｎごとに、ステップＳ３０４からステップＳ３０７までの処理を繰り返し実行する（ステップＳ３０３）。さらに、評価順序決定部１５Ｃは、レジスタ変数の関係データ１３Ａ１から切り取った行が挿入される行のループカウンタｊ＝１，・・・，ＮごとにステップＳ３０５からステップＳ３０７までの処理を繰り返し実行する（ステップＳ３０４）。
【００８６】
より具体的には、評価順序決定部１５Ｃは、上記のステップＳ３０３で切り取りが指定された行ｉをレジスタ変数の関係データ１３Ａ１から削除し、上記のステップＳ３０４で挿入が指定されたｊ番目の行に挿入することで得たプロセス評価順序をレジスタＳに保存する。そして、評価順序決定部１５Ｃは、プロセス評価順序Ｓの得点を計算してレジスタＶに保存する（ステップＳ３０５）。
【００８７】
その上で、評価順序決定部１５Ｃは、プロセス評価順序Ｓの得点Ｖがプロセス評価順序Ｓｍの特定Ｖｍよりも大きいか否かを判定する（ステップＳ３０６）。そして、プロセス評価順序Ｓの得点Ｖがプロセス評価順序Ｓｍの特定Ｖｍよりも大きい場合（ステップＳ３０６Ｙｅｓ）、評価順序決定部１５Ｃは、次のような処理を実行する。すなわち、評価順序決定部１５Ｃは、レジスタＳｍの値をレジスタＳの値で上書きする共に、レジスタＶｍの値をレジスタＶの値で上書きすることで、現在の最適解として｛Ｓ，Ｖ｝を保存する（ステップＳ３０７）。
【００８８】
その後、ステップＳ３０３で前よりも得点が増加しなかった場合、評価順序決定部１５Ｃは、レジスタＳｍに保存されたプロセス評価順序を最適解として出力し（ステップＳ３０８）、処理を終了する。
【００８９】
ここで、上記の「得点」の計算方法の一例を挙げる。あくまで一例として、上記の「得点」は、レジスタ変数の関係データ１３Ａ１とプロセス評価順が与えられたとき、各レジスタ変数に対する素点の合計とすることができる。この素点は、上記のＲｅａｄ−Ｗｒｉｔｅ制約に対して以下の通り定義する。
【００９０】
１）全てのＲｅａｄ−Ｗｒｉｔｅ制約を満たすとき、１
２）Ｒｅａｄ−Ｗｒｉｔｅ制約（Ｃ）の複数Ｗｒｉｔｅ制約を満たさないとき、−∞（マイナス無限大）
３）上記１）及び２）以外、０
【００９１】
例えば、図８に示すレジスタ変数の関係データ１３Ａ１の例で言えば、ｒｅｇｉｓｔｅｒ｛Ａ〜Ｄ｝の素点は、それぞれ「１」、「０」、「１」、「０」となるので、これらを合計することにより、得点は「２」と計算できる。また、４行目が１行目に挿入された図９に示すプロセス評価順序付きのレジスタ変数の関係データ１３Ａ２の例で言えば、ｒｅｇｉｓｔｅｒ｛Ａ〜Ｄ｝の素点は、それぞれ「０」、「１」、「１」、「１」となるので、これらを合計することにより、得点は最大の「３」となる。
【００９２】
［効果の一側面］
上述してきたように、本実施例に係るシミュレーション装置１０は、論理シミュレーションの動作を保証するＲｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数をブロッキング変数に変換する。したがって、本実施例に係るシミュレーション装置１０によれば、レジスタ変数を削減し、レジスタの更新回数を低減し、ひいてはシミュレーション実行を高速化することが可能である。
【００９３】
また、本実施例に係るシミュレーション装置１０は、Ｒｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数が最大となるプロセスの評価順序を決定し、プロセスの評価順序でＲｅａｄ−Ｗｒｉｔｅ制約を満たすレジスタ変数をブロッキング変数に変換する。したがって、本実施例に係るシミュレーション装置１０によれば、レジスタ変数をより効果的に削減することが可能である。
【実施例２】
【００９４】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【００９５】
［分散および統合］
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されておらずともよい。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ＨＤＬ記述取得部１５Ａ、関係抽出部１５Ｂ、評価順序決定部１５Ｃ、レジスタ変数変換部１５Ｄまたはシミュレーション実行部１５Ｅをシミュレーション装置１０の外部装置としてネットワーク経由で接続するようにしてもよい。また、ＨＤＬ記述取得部１５Ａ、関係抽出部１５Ｂ、評価順序決定部１５Ｃ、レジスタ変数変換部１５Ｄまたはシミュレーション実行部１５Ｅを別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記のシミュレーション装置１０の機能を実現するようにしてもよい。
【００９６】
［記述変換プログラム］
また、上記の実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図１５を用いて、上記の実施例と同様の機能を有する記述変換プログラムを実行するコンピュータの一例について説明する。
【００９７】
図１５は、コンピュータのハードウェア構成例を示す図である。図１５に示すように、コンピュータ１００は、操作部１１０ａと、スピーカ１１０ｂと、カメラ１１０ｃと、ディスプレイ１２０と、通信部１３０とを有する。さらに、このコンピュータ１００は、ＣＰＵ１５０と、ＲＯＭ１６０と、ＨＤＤ１７０と、ＲＡＭ１８０とを有する。これら１１０〜１８０の各部はバス１４０を介して接続される。
【００９８】
ＨＤＤ１７０には、図１５に示すように、上記の実施例１で示したＨＤＬ記述取得部１５Ａ、関係抽出部１５Ｂ、評価順序決定部１５Ｃ及びレジスタ変数変換部１５Ｄと同様の機能を発揮する記述変換プログラム１７０ａが記憶される。この記述変換プログラム１７０ａは、図１に示した各構成要素と同様、統合又は分離してもかまわない。例えば、シミュレーション実行部１５Ｅの機能がさらにパッケージされたシミュレーションプログラムがＨＤＤ１７０に記憶されることとしてもかまわない。また、ＨＤＤ１７０には、必ずしも上記の実施例１で示した全てのデータが格納されずともよく、処理に用いるデータがＨＤＤ１７０に格納されればよい。
【００９９】
このような環境の下、ＣＰＵ１５０は、ＨＤＤ１７０から記述変換プログラム１７０ａを読み出した上でＲＡＭ１８０へ展開する。この結果、記述変換プログラム１７０ａは、図１５に示すように、記述変換プロセス１８０ａとして機能する。この記述変換プロセス１８０ａは、ＲＡＭ１８０が有する記憶領域のうち記述変換プロセス１８０ａに割り当てられた領域にＨＤＤ１７０から読み出した各種データを展開し、この展開した各種データを用いて各種の処理を実行する。例えば、記述変換プロセス１８０ａが実行する処理の一例として、図１３や図１４に示す処理などが含まれる。なお、ＣＰＵ１５０では、必ずしも上記の実施例１で示した全ての処理部が動作せずともよく、実行対象とする処理に対応する処理部が仮想的に実現されればよい。
【０１００】
なお、上記の記述変換プログラム１７０ａは、必ずしも最初からＨＤＤ１７０やＲＯＭ１６０に記憶されておらずともかまわない。例えば、コンピュータ１００に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に記述変換プログラム１７０ａを記憶させる。そして、コンピュータ１００がこれらの可搬用の物理媒体から記述変換プログラム１７０ａを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ１００に接続される他のコンピュータまたはサーバ装置などに記述変換プログラム１７０ａを記憶させておき、コンピュータ１００がこれらから記述変換プログラム１７０ａを取得して実行するようにしてもよい。
【０１０１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０２】
（付記１）ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータが実行する記述変換方法。
【０１０３】
（付記２）前記決定する処理は、抽出された関係が所定の条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定することを特徴とする付記１に記載の記述変換方法。
【０１０４】
（付記３）前記決定する処理は、順序回路に対応するプロセスによる読み込みが書き込みよりも先に実行され、組合せ回路に対応するプロセスによる書き込みが読み込みよりも先に実行され、かつ、複数のプロセスによる同一のレジスタ変数への書き込みが順序通りに実行される条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定する付記２に記載の記述変換方法。
【０１０５】
（付記４）前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルを所定のシミュレータへ出力すると共に、決定されたプロセスの評価順序を前記シミュレータの制御情報として前記シミュレータへ出力する処理を前記コンピュータがさらに実行することを特徴とする付記１に記載の記述変換方法。
【０１０６】
（付記５）前記出力する処理は、サイクルベース型の論理シミュレータへ出力することを特徴とする付記４に記載の記述変換方法。
【０１０７】
（付記６）前記取得する処理によりマルチスレッド対応の回路モデルが取得された場合、スレッドごとに当該スレッドに割り当てられたプロセス及びレジスタ変数を入力とし、前記抽出する処理、前記決定する処理および前記変換する処理を行うことを特徴とする付記１に記載の記述変換方法。
【０１０８】
（付記７）前記回路モデルは、Ｖｅｒｉｌｏｇ、ＶＨＤＬ又はＳｙｓｔｅｍＣにより記述されたコードであることを特徴とする付記１に記載の記述変換方法。
【０１０９】
（付記８）ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換し、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する、
処理をコンピュータが実行するシミュレーション方法。
【０１１０】
（付記９）ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータに実行させる記述変換プログラム。
【０１１１】
（付記１０）前記決定する処理は、抽出された関係が所定の条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定することを特徴とする付記９に記載の記述変換プログラム。
【０１１２】
（付記１１）前記決定する処理は、順序回路に対応するプロセスによる読み込みが書き込みよりも先に実行され、組合せ回路に対応するプロセスによる書き込みが読み込みよりも先に実行され、かつ、複数のプロセスによる同一のレジスタ変数への書き込みが順序通りに実行される条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定する付記１０に記載の記述変換プログラム。
【０１１３】
（付記１２）前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルを所定のシミュレータへ出力すると共に、決定されたプロセスの評価順序を前記シミュレータの制御情報として前記シミュレータへ出力する処理を前記コンピュータにさらに実行させることを特徴とする付記９に記載の記述変換プログラム。
【０１１４】
（付記１３）前記出力する処理は、サイクルベース型の論理シミュレータへ出力することを特徴とする付記１２に記載の記述変換プログラム。
【０１１５】
（付記１４）前記取得する処理によりマルチスレッド対応の回路モデルが取得された場合、スレッドごとに、当該スレッドに割り当てられたプロセス及びレジスタ変数を入力とし、前記抽出する処理、前記決定する処理および前記変換する処理を行うことを特徴とする付記９に記載の記述変換プログラム。
【０１１６】
（付記１５）前記回路モデルは、Ｖｅｒｉｌｏｇ、ＶＨＤＬ又はＳｙｓｔｅｍＣにより記述されたコードであることを特徴とする付記９に記載の記述変換プログラム。
【０１１７】
（付記１６）ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換し、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する、
処理をコンピュータに実行させるシミュレーションプログラム。
【０１１８】
（付記１７）ハードウェア記述言語で記述された回路モデルを取得する取得部と、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出する抽出部と、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定する決定部と、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する変換部と、
を有することを特徴とする記述変換装置。
【０１１９】
（付記１８）ハードウェア記述言語で記述された回路モデルを取得する取得部と、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出する抽出部と、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定する決定部と、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する変換部と、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する実行部と、
を有することを特徴とするシミュレーション装置。
【符号の説明】
【０１２０】
１０    シミュレーション装置
１１    通信インタフェース
１３    記憶部
１３Ａ  関係データ
１５    制御部
１５Ａ  ＨＤＬ記述取得部
１５Ｂ  関係抽出部
１５Ｃ  評価順序決定部
１５Ｄ  レジスタ変数変換部
１５Ｅ  シミュレーション実行部
５０    クライアント端末
【図１】
2020144765.tif 000003
【図２】
2020144765.tif 000004
【図３】
2020144765.tif 000005
【図４】
2020144765.tif 000006
【図５】
2020144765.tif 000007
【図６】
2020144765.tif 000008
【図７】
2020144765.tif 000009
【図８】
2020144765.tif 000010
【図９】
2020144765.tif 000011
【図１０】
2020144765.tif 000012
【図１１】
2020144765.tif 000013
【図１２】
2020144765.tif 000014
【図１３】
2020144765.tif 000015
【図１４】
2020144765.tif 000016
【図１５】
2020144765.tif 000017