(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-23
(45)【発行日】2023-01-31
(54)【発明の名称】記述変換方法、シミュレーション方法及び記述変換プログラム
(51)【国際特許分類】
G06F 30/323 20200101AFI20230124BHJP
G06F 30/3308 20200101ALI20230124BHJP
【FI】
G06F30/323
G06F30/3308
(21)【出願番号】P 2019042590
(22)【出願日】2019-03-08
【審査請求日】2021-12-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】田宮 豊
【審査官】松浦 功
(56)【参考文献】
【文献】特開2010-237858(JP,A)
【文献】特開平11-085810(JP,A)
【文献】特開平03-278447(JP,A)
【文献】特開2013-196245(JP,A)
【文献】松本敦 外1名,高位仕様記述からの非同期式回路自動合成について,電子情報通信学会論文誌,社団法人電子情報通信学会,2006年,Vol. J89-D, No. 4,pp. 660-673
(58)【調査した分野】(Int.Cl.,DB名)
G06F 30/30 -30/398
(57)【特許請求の範囲】
【請求項1】
ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータが実行する記述変換方法。
【請求項2】
前記決定する処理は、抽出された関係が所定の条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定することを特徴とする請求項1に記載の記述変換方法。
【請求項3】
前記決定する処理は、順序回路に対応するプロセスによる読み込みが書き込みよりも先に実行され、組合せ回路に対応するプロセスによる書き込みが読み込みよりも先に実行され、かつ、複数のプロセスによる同一のレジスタ変数への書き込みが順序通りに実行される条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定する請求項2に記載の記述変換方法。
【請求項4】
前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルを所定のシミュレータへ出力すると共に、決定されたプロセスの評価順序を前記シミュレータの制御情報として前記シミュレータへ出力する処理を前記コンピュータがさらに実行することを特徴とする請求項1、2または3に記載の記述変換方法。
【請求項5】
前記取得する処理によりマルチスレッド対応の回路モデルが取得された場合、スレッドごとに、当該スレッドに割り当てられたプロセス及びレジスタ変数を入力とし、前記抽出する処理、前記決定する処理および前記変換する処理を行うことを特徴とする請求項1~4のいずれか1つに記載の記述変換方法。
【請求項6】
ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換し、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する、
処理をコンピュータが実行するシミュレーション方法。
【請求項7】
ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータに実行させる記述変換プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、記述変換方法、シミュレーション方法及び記述変換プログラムに関する。
【背景技術】
【0002】
デジタル回路の設計では、対象回路をVerilogやVHDL(VHSIC Hardware Description Language)、SystemCなどといったHDLで記述し、この回路記述の論理機能を論理シミュレーションを使ってデバッグする。
【0003】
HDLの回路モデルは、プロセス(process)とレジスタ変数(register)から構成されるネットワークである。このうち、プロセス(process)は、組み合せ回路と順序回路など、並行動作するモジュールを表す。以下、レジスタ変数を入力に演算処理を行い、その結果をレジスタ変数に出力する動作をプロセスに実行させることを「プロセスを評価する」と表記する。また、レジスタ(register)変数は、FF(Flip-Flop)やラッチなど、値を保持する信号線を表す。レジスタ変数は、現在値(curr)と次時刻値(next)の2つの値を持ち、プロセスの入力に対しては現在値を、出力には次時刻値を用いる。プロセスの評価後にΔt(微小時間)経過すると、レジスタ変数の現在値は次時刻値で上書きされる。以下、レジスタ変数の現在値は次時刻値で上書きすることを「レジスタを更新する」と表記する。
【0004】
論理シミュレーションは、回路設計において繰り返し実行されるため、その高速化は設計作業の効率化に直結する。
【0005】
論理シミュレーションを高速化する実行手法の一例として、サイクルベース型シミュレーションが挙げられる。サイクルベース型シミュレーションでは、予め回路構成情報から求められた順序に従って、1クロック内に発生するプロセス評価とレジスタ更新を実行する。各プロセスの評価、および、各レジスタ変数の更新は、1クロック内に高々1回しか実行されないため、イベントドリブン型と比べて演算量が少なくなる結果、シミュレーションの高速化が実現される。
【先行技術文献】
【特許文献】
【0006】
【文献】特開平08-106476号公報
【文献】特開平10-027185号公報
【文献】特開平11-085832号公報
【文献】特開2001-338008号公報
【非特許文献】
【0007】
【文献】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).
【発明の概要】
【発明が解決しようとする課題】
【0008】
近年のプロセッサ、例えばマルチコアCPU(Central Processing Unit)やGPU(Graphics Processing Unit)等の回路は大規模であるため、そのHDL記述は多くのプロセスとレジスタ変数を持つ。特に、レジスタ変数の多さは、論理シミュレーションでのレジスタ更新の回数に影響するため、論理シミュレーションの実行が低下する要因となっている。
【0009】
このようにプロセッサの回路が大規模化する一方で、上記のサイクルベース型シミュレーションにおいてシミュレーション実行を高速化するのには限界がある。
【0010】
1つの側面では、本発明は、シミュレーション実行を高速化できる記述変換方法、シミュレーション方法及び記述変換プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
一態様では、ハードウェア記述言語で記述された回路モデルを取得し、前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、処理をコンピュータが実行する。
【発明の効果】
【0012】
シミュレーション実行を高速化できる。
【図面の簡単な説明】
【0013】
【
図1】
図1は、実施例1に係るシミュレーション装置の機能的構成の一例を示すブロック図である。
【
図2】
図2は、HDLの回路モデルの一例を示す図である。
【
図3】
図3は、プロセス評価とレジスタ更新の一例を示す図である。
【
図4】
図4は、registerBの動作の一例を示す図である。
【
図5】
図5は、registerBの動作の一例を示す図である。
【
図6】
図6は、blockingBの動作の一例を示す図である。
【
図7】
図7は、blockingBの動作の一例を示す図である。
【
図8】
図8は、レジスタ変数の関係データの一例を示す図である。
【
図9】
図9は、プロセス評価順序付きのレジスタ変数の関係データの一例を示す図である。
【
図10】
図10は、Verilog記述の一例を示す図である。
【
図11】
図11は、SystemC記述の一例を示す図である。
【
図12】
図12は、プロセス評価とレジスタ更新の一例を示す図である。
【
図13】
図13は、実施例1に係るシミュレーション処理の手順を示すフローチャートである。
【
図14】
図14は、実施例1に係るプロセス評価順序決定処理の手順を示すフローチャートである。
【
図15】
図15は、コンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【0014】
以下に添付図面を参照して本願に係る記述変換方法、シミュレーション方法及び記述変換プログラムについて説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例1】
【0015】
[システム構成]
図1は、実施例1に係るシミュレーション装置10の機能的構成の一例を示すブロック図である。
図1に示すシミュレーションシステム1は、デジタル回路の設計を支援する側面から、HDLで記述された回路モデルの動作を検証する論理シミュレーションの機能を提供するものである。
【0016】
図1に示すように、シミュレーションシステム1には、シミュレーション装置10と、クライアント端末50とが含まれ得る。これらシミュレーション装置10及びクライアント端末50は、ネットワークNWを介して通信可能に接続される。ネットワークNWは、有線または無線を問わず、インターネットやLAN(Local Area Network)などの任意の種類の通信網であってかまわない。なお、
図1には、説明の便宜上、1つのシミュレーション装置10につき1つのクライアント端末50が接続される例を挙げたが、1つのサーバ装置10につき複数のクライアント端末50が接続されることを妨げない。
【0017】
シミュレーション装置10は、上記の論理シミュレーションの機能を提供するコンピュータの一例である。
【0018】
一実施形態として、シミュレーション装置10は、いわゆるEDA(Electronic Design Automation)ツールとして、上記の論理シミュレーションの機能を実現する論理シミュレータを任意のコンピュータにインストールさせることによって実装できる。例えば、シミュレーション装置10は、上記の論理シミュレーションの機能をオンプレミスに提供するサーバとして実装することができる。これに限定されず、シミュレーション装置10は、SaaS(Software as a Service)型のアプリケーションとして実装することで、上記の論理シミュレーションの機能をクラウドサービスとして提供することとしてもかまわない。
【0019】
クライアント端末50は、上記の論理シミュレーションの機能の提供を受けるクライアントにより使用されるコンピュータの一例に対応する。このようなクライアントのあくまで一例として、デジタル回路の設計に携わる関係者全般が挙げられる。また、クライアント端末50には、デスクトップ型またはラップトップ型のパーソナルコンピュータなどが対応する。これはあくまで一例であり、クライアント端末50は、携帯端末装置やウェアラブル端末などの任意のコンピュータであってもかまわない。
【0020】
なお、
図1には、あくまで一例として、論理シミュレーションの機能がクライアントサーバシステムで提供される例を示したが、論理シミュレーションの機能はスタンドアローンで実装されることとしてもかまわない。
【0021】
[回路モデルの一例]
HDLの回路モデルは、プロセスとレジスタ変数から構成されるネットワークである。このうち、プロセスは、組み合せ回路と順序回路など、並行動作するモジュールを表す。以下、レジスタ変数を入力に演算処理を行い、その結果をレジスタ変数に出力する動作をプロセスに実行させることを「プロセスを評価する」と表記する。また、レジスタ変数は、FFやラッチなど、値を保持する信号線を表す。レジスタ変数は、現在値と次時刻値の2つの値を持ち、プロセスの入力に対しては現在値を、出力には次時刻値を用いる。プロセスの評価後にΔt(微小時間)経過すると、レジスタ変数の現在値は次時刻値で上書きされる。以下、レジスタ変数の現在値は次時刻値で上書きすることを「レジスタを更新する」と表記する。
【0022】
図2は、HDLの回路モデルの一例を示す図である。
図2では、順序回路が点模様の網掛けで示され、組合せ回路が斜線の網掛けで示されると共に、レジスタ変数が白の塗りつぶしで示されている。
図2に示すHDLの回路モデルの例で言えば、process1~process4の4つのプロセスと、registerA~registerDの4つのレジスタ変数とが含まれる。これら4つのプロセスのうち、process1、process2及びprocess4は、クロック信号の入力時に動作が行われることがモデル化された順序回路である。また、process3は、クロックとは無関係に入力のレジスタ変数の値が変化すると動作することがモデル化された組合せ回路である。
【0023】
図2に示すHDLの回路モデルにサイクルベース型シミュレーションが行われる場合、1クロック内に実行されるプロセス評価とレジスタ更新の様子は
図3に示す通りとなる。
図3は、プロセス評価とレジスタ更新の一例を示す図である。
図3に示すように、先ず、クロック信号が入力される時刻nにおいて、クロックに同期するprocess1、process2及びprocess4の評価が行われる。続いて、時刻nからΔt経過後に、process1、process2及びprocess4の出力が書き込まれたregisterB、registerC及びregisterAにおいて、レジスタ変数の現在値が次時刻値で上書きされる。その後、時刻n+ΔtからさらにΔt経過後に、組合せ回路であるprocess3の評価が行われる。最後に、時刻n+2*ΔtからさらにΔt経過後に、registerDにおいて、レジスタ変数の現在値が次時刻値で上書きされる。
【0024】
このように、サイクルベース型シミュレーションでは、プロセスの評価、および、レジスタ変数の更新が1クロック内に高々1回しか実行されないため、イベントドリブン型と比べてはるかに演算量を少なくできる一面がある。
【0025】
[課題の一側面]
近年のプロセッサ、例えばマルチコアCPUやGPU等の回路は大規模であるため、そのHDL記述は多くのプロセスとレジスタ変数を持つ。特に、レジスタ変数の多さは、論理シミュレーションでのレジスタ更新の回数に影響するため、論理シミュレーションの実行が低下する要因となっている。
【0026】
このように、近年のプロセッサの回路は、大規模化の一途を辿っており、サイクルベース型シミュレーションにおいてもシミュレーション実行を高速化するのには限界がある。
【0027】
また、レジスタ個数を削減するRetimingと呼ばれる技術も存在する。Retimingとは、組合せ回路の入力側のレジスタを出力側へ再配置したり、あるいは出力側のレジスタを入力側へ再配置したりすることで、回路の論理動作を変えずにレジスタ個数を削減する技術である。
【0028】
しかしながら、Retimingは、論理シミュレーション時のレジスタ削減手法としては実効的でなく、レジスタの削減効果が限定的に留まる。
【0029】
第一に、Retimingは、組合せ回路にしか適用できない上、レジスタを入力側から出力側へまたは出力側から入力側へ再配置するための制約も厳しいので、Retimingを適用できる場面そのものが限定的である。例えば、組合せ回路の入力側のレジスタを出力側へ再配置するとしたとき、組合せ回路の入力側において全ての入力にレジスタが1つ以上存在しなければ、出力側へレジスタを再配置することができない。このような制約がある上、組合せ回路において入力の数が出力の数を上回らなければ、レジスタの削減効果が得られない。これは出力側のレジスタを入力側へ再配置する場合も同様である。
【0030】
第二に、再配置によってレジスタのリセット状態が変わるため、レジスタのリセット時の値を再計算する必要があるが、その再計算も困難である。例えば、組合せ回路の入力側のレジスタが出力側へ再配置される場合、プロセスの関数を用いてリセット時の値を再計算する必要があるが、その値が論理回路として許されるのかどうかも回路モデルの設計者が検証せねばならない。また、組合せ回路の出力側のレジスタが入力側へ再配置される場合、リセット時の値を再計算するには、プロセスの逆関数を作成する必要があるが、必ずしも逆関数を作成できるとは限らない。
【0031】
これらのことから、上記のRetimingを論理シミュレーションに適用することは困難である。
【0032】
[課題解決のアプローチの一側面]
そこで、本実施例では、シミュレーション実行を高速化するために、HDLで記述された回路モデルのレジスタ変数をブロッキング変数へ変換することで、レジスタ変数を削減する。
【0033】
図2に示すHDLの回路モデルに対する論理シミュレーションにおいて、process1及びprocess4と、registerBとを抜粋して、レジスタ変数の動作を説明する。
【0034】
図4及び
図5は、registerBの動作の一例を示す図である。
図4には、時刻nにおけるregisterBの動作が示される一方で、
図5には、時刻n+ΔtにおけるregisterBの動作が示されている。
【0035】
図4に示すように、時刻nでは、registerBが持つ値をXとする。また、プロセスの評価によって、process1とprocess4は、registerBに対して、それぞれ、書き込みと読み込みを行う。この時刻nにおけるregisterBでは、process1によって次時刻値(next)へYが書き込まれると共に、process4によって現在値(curr)からXが読み込まれる。その後、時刻nからΔt経過後には、
図5に示すように、registerBで現在値が次時刻値によって上書きされる。この結果、現在値が値Yを持つようになる。
【0036】
このように、プロセスが並列に評価される時、同一のレジスタ変数に書き込みと読み書きが同時刻に行われても正しい動作をする目的の為、論理シミュレーションの実装では、レジスタ変数は2つの値(現在値と次時刻値)を持っている。また、レジスタ変数の更新は、レジスタ変数が持つ2つ値を同期させるために必要となっている。
【0037】
本実施例において、「ブロッキング(blocking)変数」を以下のように定義する。「ブロッキング変数」とは、論理シミュレーションの回路モデルにおいて値を保持するレジスタを表す変数で、書き込まれた値は、即時、読み出しが可能となる変数。HDL記述上は、ブロッキング変数は、代入時は常にブロッキング代入、例えばVerilog文法では“=”が使われるレジスタ変数である。しかし、レジスタ変数と異なり、常にブロッキング代入されるため、値は現在値の1つのみを保持する。
【0038】
ここで、レジスタ変数registerBをブロッキング変数blockingBに変換する。その上で、「並列評価されるべきプロセスを、逐次的に評価しても論理シミュレーションの動作は正しいままである」という性質を使って、
図4及び
図5と同じ動作をするように、プロセスの評価順序を決める。具体的には、変換されたブロッキング変数を読み出すプロセスを先に評価し、その後、書き込むプロセスを評価する。
【0039】
図6及び
図7は、blockingBの動作の一例を示す図である。
図6には、時刻nにおけるblockingBの動作(前半)が示される一方で、
図7には、時刻nにおけるblockingBの動作(後半)が示されている。
【0040】
図6に示すように、時刻nにおいて、blockingBが持つ値をXとする。ここで、本実施例では、ブロッキング変数の使用時にも論理シミュレーションの動作を保証するために、process1及びprocess4の評価のうち、process4の評価が先に実行される。すなわち、blockingBでは、process4によって値Xが読み込まれる。このようにprocess4の評価が先に行われた後、process1の評価が行われる。すなわち、
図7に示すように、blockingBでは、process1によって値Yが書き込まれる。これによって、
図4及び
図5に示すregisterBの時と同じく、各プロセスは、入出力値を読み書きするため、論理シミュレーションが正しく動作することが保証される。
【0041】
このように、レジスタ変数をブロッキング変数に変換すれば、論理シミュレーションの動作は正しいまま、その分のレジスタ変数の更新回数が削減される事が分かる。
【0042】
[シミュレーション装置の機能的構成]
次に、本実施例に係る論理シミュレータの機能を搭載するシミュレーション装置10の機能的構成について説明する。
図1に示すように、シミュレーション装置10は、通信インタフェース部11と、記憶部13と、制御部15とを有する。なお、
図1には、データの授受の関係を表す実線が示されているが、説明の便宜上、最小限の部分について示されているに過ぎない。すなわち、各処理部に関するデータの入出力は、図示の例に限定されず、図示以外のデータの入出力、例えば処理部及び処理部の間、処理部及びデータの間、並びに、処理部及び外部装置の間のデータの入出力が行われることとしてもかまわない。
【0043】
通信インタフェース11は、他の装置、例えばクライアント端末50との間で通信制御を行うインタフェースである。
【0044】
あくまで一例として、通信インタフェース11には、LANカードなどのネットワークインタフェースカードを採用することができる。例えば、通信インタフェース11は、クライアント端末50から論理シミュレーションの実行リクエストを受け付けたり、また、論理シミュレーションの実行結果をクライアント端末50へ送信したりする。
【0045】
記憶部13は、任意のデータを記憶する機能部である。例えば、記憶部13には、制御部15で実行されるOS(Operating System)を始めとする各種のプログラムが記憶される。この他、記憶部13には、上記の論理シミュレータ、あるいはHDLで記述されたコードに含まれるレジスタ変数をブロッキング変数に変換するHDL記述変換機能がモジュール化されたHDL記述変換プログラムなどの各種プログラムが記憶される。
【0046】
あくまで一例として、記憶部13は、シミュレーション装置10における補助記憶装置に対応する。例えば、HDD(Hard Disk Drive)、光ディスクやSSD(Solid State Drive)などが補助記憶装置に対応する。この他、EPROM(Erasable Programmable Read Only Memory)などのフラッシュメモリも補助記憶装置に対応する。
【0047】
記憶部13は、制御部15で実行されるプログラムに用いられるデータの一例として、関係データ13Aとを記憶する。この関係データ13A以外にも、上記の論理シミュレータによって論理シミュレーションに用いられるデータ、例えば回路モデルや回路モデルへの入力信号、シミュレーションの制御情報などが記憶部13に記憶されることとしてもかまわない。なお、関係データ13Aの説明は、各データの参照または生成が行われる制御部15の説明と合わせて行うこととする。
【0048】
制御部15は、シミュレーション装置10の全体制御を行う機能部である。
【0049】
一実施形態として、制御部15は、CPUやMPU(Micro Processing Unit)などのハードウェアプロセッサにより実装することができる。ここでは、プロセッサの一例として、CPUやMPUを例示したが、汎用型および特化型を問わず、任意のプロセッサにより実装することができる。この他、制御部15は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などのハードワイヤードロジックによって実現されることとしてもかまわない。
【0050】
制御部15は、上記の論理シミュレータを実行することにより、図示しない主記憶装置として実装されるDRAM(Dynamic Random Access Memory)などのRAMのワークエリア上に
図1に示す処理部を仮想的に実現する。なお、ここでは、上記のHDL記述変換機能がパッケージ化された論理シミュレータが実行される例を挙げるが、上記の論理シミュレータのうち任意の機能、例えばHDL記述変換機能を抜粋してプログラムモジュールとして実行されたり、あるいはライブラリとして参照されたりすることとしてもかまわない。
【0051】
例えば、制御部15は、
図1に示すように、HDL記述取得部15Aと、関係抽出部15Bと、評価順序決定部15Cと、レジスタ変数変換部15Dと、シミュレーション実行部15Eとを有する。
【0052】
HDL記述取得部15Aは、HDLで記述されたコードを取得する処理部である。以下、HDLで回路モデルが記述されたコードのことを「HDL記述」と記載する場合がある。
【0053】
あくまで一例として、HDL記述取得部15Aは、クライアント端末50から論理シミュレーションの実行リクエストを受け付ける際、HDL記述のアップロードを受け付けることができる。この他、HDL記述取得部15Aは、シミュレーション装置10の記憶部13、あるいは図示しない外部のファイルサーバ等に登録されたHDL記述から、論理シミュレーションを行うHDL記述を指定させることもできる。
【0054】
関係抽出部15Bは、プロセス及びレジスタ変数の間で読み込み及び書き込みの関係を抽出する処理部である。
【0055】
一実施形態として、関係抽出部15Bは、HDL記述取得部15Aにより取得された対象回路のHDL記述を入力として、プロセス毎に、レジスタ変数へのReadとWriteの関係を抽出する。このとき、関係抽出部15Bは、各プロセスについて、順序回路または組合せ回路のプロセスの種類も抽出する。このようにプロセスごとに抽出されたレジスタ変数へのReadとWriteの関係は、プロセスを行とし、レジスタ変数を列とする関係データに出力される。この時、関係抽出部15Bは、各レジスタ変数に対して、下記のRead-Write制約に従って矢印等の方向を記録することにより、Read-Write制約を定式化する。
【0056】
Read-Write制約には、(A)~(C)の3つのRead-Write制約が含まれる。
【0057】
(A)順序回路プロセスによるReadから、(複数Writeが有る場合は最初の)Writeへ矢印を付ける。
このような定式化が行われるのは、レジスタ変数に対して、全てのReadが実行された後でWriteが実行される場合、そのRead中は現在値(curr)と次時刻値(next)は一致したままであるからである。この事実がプロセスの評価順序の決定時に考慮される、レジスタ変数のブロッキング変数への変換に使われる。
【0058】
(B)組合せ回路プロセスによるReadへ、(複数Writeが有る場合は最初の)Writeから矢印を付ける。
このような定式化が行われるのは、HDLの回路モデルでは、組合せ回路プロセスは、その全ての入力値が確定した後で評価が行われる為である。
【0059】
(C)同一レジスタ変数へ複数プロセスのWriteがある場合、その順序に従って矢印を付ける。
このような定式化が行われるのは、HDLの回路モデルでは、レジスタ変数への複数回の書き込みは、最後の書き込みが次時刻値(next)に反映される為である。
【0060】
あくまで一例として、
図2に示す回路モデルのHDL記述が入力された場合、
図8に示すレジスタ変数の関係データ13A1が作成される。
図8は、レジスタ変数の関係データ13A1の一例を示す図である。
図2に示すHDLの回路モデルでは、各レジスタ変数の書き込みは1個のプロセスに限られている為、Read-Write制約(C)は適用されない。
図8に示すように、関係データ13A1には、process1~process4の4つのプロセスの行が作成すると共に、registerA~registerDの4つのレジスタ変数の列が作成される。さらに、関係データ13A1には、process1~process4の4つのプロセスについては、各プロセスの種類も抽出される。すなわち、process1、process2及びprocess4の種類として順序回路が抽出されると共に、process3の種類として組合せ回路が抽出される。さらに、関係データ13A1のレジスタ変数の行において、Read-Write制約(A)に従って順序回路プロセスによるReadからWriteへ黒地の矢印が設定される。さらに、関係データ13A1のレジスタ変数の行において、Read-Write制約(B)に従って組合せ回路プロセスによるReadへWriteから白地の矢印が設定される。このような関係データ13A1が記憶部13に保存される。
【0061】
評価順序決定部15Cは、上記のRead-Write制約を満たすレジスタ変数が最大となるプロセスの評価順序を決定する処理部である。
【0062】
一実施形態として、評価順序決定部15Cは、レジスタ変数の関係データ13A1が生成された場合に処理を起動することができる。例えば、評価順序決定部15Cは、関係抽出部15Bにより出力されたレジスタ変数の関係データ13A1において、レジスタ変数のブロッキング変数への変換によってレジスタ変数が最小になるプロセス評価順序を決定する。ここで、プロセスの評価順序の決定には、以下のRead-Write制約とレジスタ削減の関係が利用される。すなわち、レジスタ変数の関係データ13A1の行順序、例えば上方向から下方向へ向かって論理シミュレーションがプロセスを評価する場合、Read-Write制約の全ての矢印が上から下へ向いているレジスタ変数をブロッキング変数に変換しても、シミュレーション結果が変わらないことが保証される。このように定式化されたレジスタ変数の関係データ13A1を利用して、評価順序決定部15Cは、Read-Write制約を満たすレジスタ変数の個数を最大化するように、プロセスの評価順序を決定する。その上で、評価順序決定部15Cは、レジスタ変数のブロッキング変数への変換によってレジスタ変数が最小になるプロセス評価順序をプロセス評価順序付きのレジスタ変数の関係データ13A2として記憶部13に保存する。
【0063】
あくまで一例として、
図8に示すレジスタ変数の関係データ13A1が入力される場合、
図8に示す関係データ13A1からも分かる通り、registerA及びregisterBの間でRead-Write制約(A)が循環している(黒地の矢印が双方向に循環している)。このため、全てのRead-Write制約を満たすプロセスの評価順序は存在しない。しかしながら、
図9に示すプロセス評価順序を論理シミュレータに設定すれば、Read-Write制約を最大限に満たすことができる。
【0064】
図9は、プロセス評価順序付きのレジスタ変数の関係データ13A2の一例を示す図である。
図9に示す関係データ13A2では、プロセス評価順序がprocess4、process1、process2、process3の順に設定されている。このプロセス評価順序が設定された場合、registerAでは、Read-Write制約(A)の矢印が下から上へ向いている。このため、registerAは、Read-Write制約(A)を満たさず、ブロッキング変数へ変換できない。その一方で、registerB、registerC及びregisterDでは、Read-Write制約(A)またはRead-Write制約(B)の矢印が上から下へ向いている。よって、registerB、registerC及びregisterDは、ブロッキング変数へ変換可能である。このように、
図9に示すプロセス評価順序は、ブロッキング変数に変換できないレジスタ変数の個数は最小の1個(registerA)であり、最適であると言える。
【0065】
レジスタ変数変換部15Dは、レジスタ変数をブロキング変数に変換する処理部である。
【0066】
一実施形態として、レジスタ変数変換部15Dは、評価順序決定部15Cにより出力されたプロセス評価順序付きのレジスタ変数の関係データ13A2を用いて、オリジナルの回路モデルのHDL記述のレジスタ変数をブロッキング変数に変換する。その上で、レジスタ変数変換部15Dは、レジスタ変数がブロッキング変数に変換されたHDL記述をシミュレーション実行部15Eへ出力する。
【0067】
あくまで一例として、
図9に示すプロセス評価順序付きのレジスタ変数の関係データ13A2が得られた場合、レジスタ変数変換部15Dは、次のような動作を行う。すなわち、レジスタ変数変換部15Dは、Read-Write制約(A)及びRead-Write制約(B)を満たすregisterB、registerC及びregisterDの3つのレジスタ変数をブロッキング変数に変換する。
【0068】
図10は、Verilog記述の一例を示す図である。
図10には、オリジナルのVerilog記述21と、レジスタ変数削減後のVerilog記述22とが示されている。
図2に示す各レジスタ変数(A、B、C及びD)への代入文は、並列動作するプロセスとみなすことができる。コメントで示した通り、process1~process4と命名する。さらに、各レジスタ変数X(={A,B,C,D})をregisterXと読み替えれば、
図10に示すオリジナルのVerilog記述21は、
図2に示す回路モデルと等価になる。
【0069】
図10に太字の記述で示す通り、オリジナルのVerilog記述21では、
図9に示す代入文の順序(プロセス評価順)と、変数B、変数Cおよび変数Dの代入とがノンブロッキング代入(“<=”)からブロッキング代入(“=”)に置換される。このような変換によって、レジスタ変数が削減されたVerilog記述22が得られる。Verilog記述22では、オリジナルのVerilog記述21に比べて、process4、process1、process2、process3の順序でプロセスの評価を行うというプロセスの評価順序に制約が生じる。しかしながら、論理シミュレーションの実行を高速化する上で、プロセスの評価順序を変えることにデメリットはない。その一方で、Verilog記述22では、オリジナルのVerilog記述21に比べて、変数B、変数Cおよび変数Dの代入をノンブロッキング代入へ変換できるので、レジスタ変数B、レジスタ変数Cおよびレジスタ変数Dを削減できる。
【0070】
さらに、
図10に示すオリジナルのVerilog記述21がSystemCで記述された例を
図11に示す。
図11は、SystemC記述の一例を示す図である。
図11には、オリジナルのSystemC記述31と、レジスタ変数削減後のSystemC記述32とが示されている。
図11に示すように、オリジナルのSystemC記述31におけるレジスタ変数がsc_signal変数、図中の例で言えば「sc_signal<int16_t>」と定義され、ブロッキング変数がモジュールクラスのメンバ変数、同例で言えば「int16_t」として定義される。このような変換によって、
図10に示す例と同様、レジスタ変数が削減されたSystemC記述32を得ることができる。
【0071】
シミュレーション実行部15Eは、論理シミュレーションを実行する処理部である。
【0072】
一実施形態として、シミュレーション実行部15Eは、評価順序決定部15Cにより決定されたプロセス評価順序に従ってレジスタ変数変換部15Dにより出力されたHDL記述に論理シミュレーションを実行する。このとき、HDL記述は、コンパイラによって実行形式のファイルへ変換された上で論理シミュレータに入力される。
【0073】
あくまで一例として、
図9に示すプロセス評価順序付きのレジスタ変数の関係データ13A2が得られた場合、シミュレーション実行部15Eは、process4、process1、process2、process3の順序でプロセスの評価を行う。このように、
図10に示すレジスタ変数削減後のVerilog記述22、あるいは
図11に示すレジスタ変数削減後のSystemC記述32が論理シミュレータに入力される場合、1クロック内の論理シミュレーションの動作は
図12に示す通りとなる。
【0074】
図12は、プロセス評価とレジスタ更新の一例を示す図である。
図12に示すように、クロックに同期して、process4、process1、process2、process3の順でプロセスの評価が行われる。その結果、registerAの更新が行われる。これを
図3に示す例と比較すれば、registerB、registerC及びregisterDの更新が削減されており、その分の1クロックに行われる計算量、並びに、データアクセスが低減されていることが明らかである。また、Retimingでは、そもそも組合せ回路に接続されるレジスタ変数にしか適用範囲が及ばないため、そもそもregisterB、registerC及びregisterDのレジスタ変数を削減できない。このため、レジスタの削減効果は限定的に留まる。その一方で、本実施例では、プロセスの評価順序を考慮することでより多くのレジスタ変数を削減できるため、レジスタ変数の削減効果が高いことが分かる。
【0075】
ここでは、あくまで一例として、
図2に示す回路モデルの論理シミュレーションを例に挙げたが、任意の回路モデルに対する論理シミュレーションに上記のHDL記述変換を適用できる。例えば、マルチスレッド等の並列化論理シミュレーションに応用可能である。並列実行の際、同じスレッドに実行割り当てされたプロセスの単位で、レジスタ変数関係表作成、プロセス評価順序決定、および、レジスタ変数変換を行うことにより、個々のスレッド実行を高速化できる。また、異なるスレッド間に割り当てられたプロセス同士のデータ授受は、依然としてレジスタ変数を介して行われるため、並列化によって論理シミュレーションの結果が変わることは無い。
【0076】
あくまで一例として、SystemCの標準シミュレータに対し、gen、inc及びchkの3個のプロセスと2個のレジスタ変数を持つモジュールを4096個並列に動作させる例で効果を検証した。レジスタ変数は、合計8192個(=2*4096)となる。使用環境は「SystemC-2.3.2」とし、計算機は「Intel CPU Xeon E5-2620v3@2.4GHz, 1コア」とする。このような環境下では、オリジナルのSystemC記述およびレジスタ変数削減後のSystemC記述のシミュレーション時間は、次の通りとなった。すなわち、オリジナルのSystemC記述のシミュレーション時間は「20.39秒」となり、レジスタ変数削減後のSystemC記述のシミュレーション時間は「6.15秒」となった。このことから、レジスタ削減によって3.3版の高速化が実現できたことが確認できる。
【0077】
[処理の流れ]
次に、本実施例に係るシミュレーション装置10の処理の流れについて説明する。
図13は、実施例1に係るシミュレーション処理の手順を示すフローチャートである。この処理は、あくまで一例として、クライアント端末50から論理シミュレーションの実行リクエストを受け付けた場合に開始される。
【0078】
図13に示すように、HDL記述取得部15AによりHDL記述が取得されると(ステップS101)、関係抽出部15Bは、プロセス及びレジスタ変数の間で読み込み及び書き込みの関係を抽出する(ステップS102)。これによって、レジスタ変数の関係データ13A1が作成される。
【0079】
続いて、評価順序決定部15Cは、レジスタ変数の関係データ13A1を参照して、上記のRead-Write制約を満たすレジスタ変数が最大となるプロセスの評価順序を決定する「プロセス評価順序決定処理」を実行する(ステップS103)。これによって、レジスタ変数の関係データ13A1がプロセス評価順序付きのレジスタ変数の関係データ13A2に更新される。
【0080】
その後、レジスタ変数変換部15Dは、ステップS101で取得されたHDL記述に含まれる回路モデルのレジスタ変数のうちステップS103で決定されたプロセス評価順序でRead-Write制約を満たすレジスタ変数をブロキング変数に変換する(ステップS104)。
【0081】
最後に、シミュレーション実行部15Eは、ステップS103で決定されたプロセス評価順序に従ってステップS104でレジスタ変数がブロッキング変数に変換されたHDL記述に論理シミュレーションを実行し(ステップS105)、処理を終了する。
【0082】
図14は、実施例1に係るプロセス評価順序決定処理の手順を示すフローチャートである。この処理は、
図13に示されたステップS103で実行される処理である。
図4には、あくまで一例として、Read-Write制約を満たすレジスタ変数の個数を最大化するプロセスの評価順序を探索するためのアルゴリズムとして、貪欲法(greedy algorithm)を用いる例を挙げる。
【0083】
図14に示すように、評価順序決定部15Cは、レジスタSmに任意のプロセス評価順序を設定すると共に、Sに対する得点を計算してレジスタVmに保存する(ステップS301)。
【0084】
その後、評価順序決定部15Cは、前よりも得点が増加する間、すなわち得点が改善する限り、ステップS303からステップS307までの処理を繰り返し実行する(ステップS302)。
【0085】
すなわち、評価順序決定部15Cは、レジスタ変数の関係データ13A1から切り取られる行のループカウンタi=1,・・・,Nごとに、ステップS304からステップS307までの処理を繰り返し実行する(ステップS303)。さらに、評価順序決定部15Cは、レジスタ変数の関係データ13A1から切り取った行が挿入される行のループカウンタj=1,・・・,NごとにステップS305からステップS307までの処理を繰り返し実行する(ステップS304)。
【0086】
より具体的には、評価順序決定部15Cは、上記のステップS303で切り取りが指定された行iをレジスタ変数の関係データ13A1から削除し、上記のステップS304で挿入が指定されたj番目の行に挿入することで得たプロセス評価順序をレジスタSに保存する。そして、評価順序決定部15Cは、プロセス評価順序Sの得点を計算してレジスタVに保存する(ステップS305)。
【0087】
その上で、評価順序決定部15Cは、プロセス評価順序Sの得点Vがプロセス評価順序Smの特定Vmよりも大きいか否かを判定する(ステップS306)。そして、プロセス評価順序Sの得点Vがプロセス評価順序Smの特定Vmよりも大きい場合(ステップS306Yes)、評価順序決定部15Cは、次のような処理を実行する。すなわち、評価順序決定部15Cは、レジスタSmの値をレジスタSの値で上書きする共に、レジスタVmの値をレジスタVの値で上書きすることで、現在の最適解として{S,V}を保存する(ステップS307)。
【0088】
その後、ステップS303で前よりも得点が増加しなかった場合、評価順序決定部15Cは、レジスタSmに保存されたプロセス評価順序を最適解として出力し(ステップS308)、処理を終了する。
【0089】
ここで、上記の「得点」の計算方法の一例を挙げる。あくまで一例として、上記の「得点」は、レジスタ変数の関係データ13A1とプロセス評価順が与えられたとき、各レジスタ変数に対する素点の合計とすることができる。この素点は、上記のRead-Write制約に対して以下の通り定義する。
【0090】
1)全てのRead-Write制約を満たすとき、1
2)Read-Write制約(C)の複数Write制約を満たさないとき、-∞(マイナス無限大)
3)上記1)及び2)以外、0
【0091】
例えば、
図8に示すレジスタ変数の関係データ13A1の例で言えば、register{A~D}の素点は、それぞれ「1」、「0」、「1」、「0」となるので、これらを合計することにより、得点は「2」と計算できる。また、4行目が1行目に挿入された
図9に示すプロセス評価順序付きのレジスタ変数の関係データ13A2の例で言えば、register{A~D}の素点は、それぞれ「0」、「1」、「1」、「1」となるので、これらを合計することにより、得点は最大の「3」となる。
【0092】
[効果の一側面]
上述してきたように、本実施例に係るシミュレーション装置10は、論理シミュレーションの動作を保証するRead-Write制約を満たすレジスタ変数をブロッキング変数に変換する。したがって、本実施例に係るシミュレーション装置10によれば、レジスタ変数を削減し、レジスタの更新回数を低減し、ひいてはシミュレーション実行を高速化することが可能である。
【0093】
また、本実施例に係るシミュレーション装置10は、Read-Write制約を満たすレジスタ変数が最大となるプロセスの評価順序を決定し、プロセスの評価順序でRead-Write制約を満たすレジスタ変数をブロッキング変数に変換する。したがって、本実施例に係るシミュレーション装置10によれば、レジスタ変数をより効果的に削減することが可能である。
【実施例2】
【0094】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【0095】
[分散および統合]
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されておらずともよい。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、HDL記述取得部15A、関係抽出部15B、評価順序決定部15C、レジスタ変数変換部15Dまたはシミュレーション実行部15Eをシミュレーション装置10の外部装置としてネットワーク経由で接続するようにしてもよい。また、HDL記述取得部15A、関係抽出部15B、評価順序決定部15C、レジスタ変数変換部15Dまたはシミュレーション実行部15Eを別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記のシミュレーション装置10の機能を実現するようにしてもよい。
【0096】
[記述変換プログラム]
また、上記の実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、
図15を用いて、上記の実施例と同様の機能を有する記述変換プログラムを実行するコンピュータの一例について説明する。
【0097】
図15は、コンピュータのハードウェア構成例を示す図である。
図15に示すように、コンピュータ100は、操作部110aと、スピーカ110bと、カメラ110cと、ディスプレイ120と、通信部130とを有する。さらに、このコンピュータ100は、CPU150と、ROM160と、HDD170と、RAM180とを有する。これら110~180の各部はバス140を介して接続される。
【0098】
HDD170には、
図15に示すように、上記の実施例1で示したHDL記述取得部15A、関係抽出部15B、評価順序決定部15C及びレジスタ変数変換部15Dと同様の機能を発揮する記述変換プログラム170aが記憶される。この記述変換プログラム170aは、
図1に示した各構成要素と同様、統合又は分離してもかまわない。例えば、シミュレーション実行部15Eの機能がさらにパッケージされたシミュレーションプログラムがHDD170に記憶されることとしてもかまわない。また、HDD170には、必ずしも上記の実施例1で示した全てのデータが格納されずともよく、処理に用いるデータがHDD170に格納されればよい。
【0099】
このような環境の下、CPU150は、HDD170から記述変換プログラム170aを読み出した上でRAM180へ展開する。この結果、記述変換プログラム170aは、
図15に示すように、記述変換プロセス180aとして機能する。この記述変換プロセス180aは、RAM180が有する記憶領域のうち記述変換プロセス180aに割り当てられた領域にHDD170から読み出した各種データを展開し、この展開した各種データを用いて各種の処理を実行する。例えば、記述変換プロセス180aが実行する処理の一例として、
図13や
図14に示す処理などが含まれる。なお、CPU150では、必ずしも上記の実施例1で示した全ての処理部が動作せずともよく、実行対象とする処理に対応する処理部が仮想的に実現されればよい。
【0100】
なお、上記の記述変換プログラム170aは、必ずしも最初からHDD170やROM160に記憶されておらずともかまわない。例えば、コンピュータ100に挿入されるフレキシブルディスク、いわゆるFD、CD-ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に記述変換プログラム170aを記憶させる。そして、コンピュータ100がこれらの可搬用の物理媒体から記述変換プログラム170aを取得して実行するようにしてもよい。また、公衆回線、インターネット、LAN、WANなどを介してコンピュータ100に接続される他のコンピュータまたはサーバ装置などに記述変換プログラム170aを記憶させておき、コンピュータ100がこれらから記述変換プログラム170aを取得して実行するようにしてもよい。
【0101】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0102】
(付記1)ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータが実行する記述変換方法。
【0103】
(付記2)前記決定する処理は、抽出された関係が所定の条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定することを特徴とする付記1に記載の記述変換方法。
【0104】
(付記3)前記決定する処理は、順序回路に対応するプロセスによる読み込みが書き込みよりも先に実行され、組合せ回路に対応するプロセスによる書き込みが読み込みよりも先に実行され、かつ、複数のプロセスによる同一のレジスタ変数への書き込みが順序通りに実行される条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定する付記2に記載の記述変換方法。
【0105】
(付記4)前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルを所定のシミュレータへ出力すると共に、決定されたプロセスの評価順序を前記シミュレータの制御情報として前記シミュレータへ出力する処理を前記コンピュータがさらに実行することを特徴とする付記1に記載の記述変換方法。
【0106】
(付記5)前記出力する処理は、サイクルベース型の論理シミュレータへ出力することを特徴とする付記4に記載の記述変換方法。
【0107】
(付記6)前記取得する処理によりマルチスレッド対応の回路モデルが取得された場合、スレッドごとに当該スレッドに割り当てられたプロセス及びレジスタ変数を入力とし、前記抽出する処理、前記決定する処理および前記変換する処理を行うことを特徴とする付記1に記載の記述変換方法。
【0108】
(付記7)前記回路モデルは、Verilog、VHDL又はSystemCにより記述されたコードであることを特徴とする付記1に記載の記述変換方法。
【0109】
(付記8)ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換し、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する、
処理をコンピュータが実行するシミュレーション方法。
【0110】
(付記9)ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する、
処理をコンピュータに実行させる記述変換プログラム。
【0111】
(付記10)前記決定する処理は、抽出された関係が所定の条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定することを特徴とする付記9に記載の記述変換プログラム。
【0112】
(付記11)前記決定する処理は、順序回路に対応するプロセスによる読み込みが書き込みよりも先に実行され、組合せ回路に対応するプロセスによる書き込みが読み込みよりも先に実行され、かつ、複数のプロセスによる同一のレジスタ変数への書き込みが順序通りに実行される条件を満たすレジスタ変数の個数が最大となるプロセスの評価順序を決定する付記10に記載の記述変換プログラム。
【0113】
(付記12)前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルを所定のシミュレータへ出力すると共に、決定されたプロセスの評価順序を前記シミュレータの制御情報として前記シミュレータへ出力する処理を前記コンピュータにさらに実行させることを特徴とする付記9に記載の記述変換プログラム。
【0114】
(付記13)前記出力する処理は、サイクルベース型の論理シミュレータへ出力することを特徴とする付記12に記載の記述変換プログラム。
【0115】
(付記14)前記取得する処理によりマルチスレッド対応の回路モデルが取得された場合、スレッドごとに、当該スレッドに割り当てられたプロセス及びレジスタ変数を入力とし、前記抽出する処理、前記決定する処理および前記変換する処理を行うことを特徴とする付記9に記載の記述変換プログラム。
【0116】
(付記15)前記回路モデルは、Verilog、VHDL又はSystemCにより記述されたコードであることを特徴とする付記9に記載の記述変換プログラム。
【0117】
(付記16)ハードウェア記述言語で記述された回路モデルを取得し、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出し、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定し、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換し、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する、
処理をコンピュータに実行させるシミュレーションプログラム。
【0118】
(付記17)ハードウェア記述言語で記述された回路モデルを取得する取得部と、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出する抽出部と、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定する決定部と、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する変換部と、
を有することを特徴とする記述変換装置。
【0119】
(付記18)ハードウェア記述言語で記述された回路モデルを取得する取得部と、
前記回路モデルに含まれるプロセス及びレジスタ変数の間における読み込み及び書き込みの関係を抽出する抽出部と、
抽出された関係が所定の条件を満たすレジスタ変数の個数に基づいて前記プロセスの評価順序を決定する決定部と、
前記回路モデルに含まれるレジスタ変数のうち、決定された前記プロセスの評価順序で前記条件を満たすレジスタ変数をブロッキング変数に変換する変換部と、
決定されたプロセスの評価順序に従って、前記レジスタ変数が前記ブロッキング変数へ変換された回路モデルに論理シミュレーションを実行する実行部と、
を有することを特徴とするシミュレーション装置。
【符号の説明】
【0120】
10 シミュレーション装置
11 通信インタフェース
13 記憶部
13A 関係データ
15 制御部
15A HDL記述取得部
15B 関係抽出部
15C 評価順序決定部
15D レジスタ変数変換部
15E シミュレーション実行部
50 クライアント端末