(57)【特許請求の範囲】
【請求項１】
レジスタ・トランスファ・レベルの論理回路がコード化されたモデルを分析して、同時刻に実行される同時刻ブロックと制御フローグラフとＷａｉｔＳｔｏｒｅグラフとＬｏａｄＳｔｏｒｅグラフとを含む分析結果を出力するモデル分析部と、
前記分析結果に基づいて、実行回数が共通となるコードの集合である共通実行回数群を作成する共通実行回数群作成部と、
前記共通実行回数群内の演算に対して、レジスタの各時刻の値の数列に関する一般項の式を作成する共通実行回数群解析部と、
前記共通実行回数群の相互の関係を解析し、所定の時刻までの各共通実行回数群の実行回数を導出する関係解析部と、
前記一般項の式と前記実行回数とから、前記所定の時刻における前記レジスタの値を導出するレジスタ値導出部と、
前記所定の時刻における前記レジスタの値を入力して、定常時における論理回路動作記述を出力する論理回路モデル作成部と、
を具備することを特徴とする論理回路モデル変換装置。
【請求項２】
前記モデル分析部は、レジスタ・トランスファ・レベルの論理回路モデルと定常時の制約記述とを分析して、前記分析結果を出力することを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項３】
前記モデル分析部は、前記定常時の制約記述に基づいて、前記論理回路モデルに記載された不要コードを削除することを特徴とする請求項２に記載の論理回路モデル変換装置。
【請求項４】
前記同時刻ブロックは、Ｗａｉｔ及びＤｅｌａｙに相当するコード毎に、コード全体を順次区切ることにより作成されることを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項５】
前記制御フローグラフは、前記同時刻ブロックを頂点として複数の同時刻ブロックの処理の順序を示すグラフであることを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項６】
前記ＷａｉｔＳｔｏｒｅグラフは、同時刻ブロック間のレジスタを介した同期関係を表すグラフであることを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項７】
前記ＬｏａｄＳｔｏｒｅグラフは、レジスタのＬｏａｄ、Ｓｔｏｒｅ関係を表すグラフであることを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項８】
前記共通実行回数群解析部は、前記共通実行回数群から漸化式を作成することにより前記一般項の式を作成することを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項９】
前記共通実行回数群解析部は、注目するレジスタの次の時刻の値で現在の時刻の値を置換することにより、前記漸化式を作成することを特徴とする請求項８に記載の論理回路モデル変換装置。
【請求項１０】
前記共通実行回数群解析部により新たな一般項の式が作成された場合には、前記モデル分析部によるモデル分析と、前記共通実行回数群作成部による共通実行回数群の作成と前記共通実行回数群解析部による一般項の式の作成を行うことを特徴とする請求項１に記載の論理回路モデル変換装置。
【請求項１１】
レジスタ・トランスファ・レベルの論理回路がコード化されたモデルと定常時の制約記述とを入力して、定常時における論理回路動作記述を出力するコンピュータで動作可能な論理回路モデル変換プログラムにおいて、
前記レジスタ・トランスファ・レベルの論理回路がコード化されたモデルと定常時の制約記述とを分析して、同時刻に実行される同時刻ブロックと制御フローグラフとＷａｉｔＳｔｏｒｅグラフとＬｏａｄＳｔｏｒｅグラフとを含む分析結果を出力する手段と、
前記分析結果に基づいて、実行回数が共通となるコードの集合である共通実行回数群を作成する手段と、
前記共通実行回数群内の演算に対して、レジスタの各時刻の値の数列に関する一般項の式を作成する手段と、
前記共通実行回数群の相互の関係を解析し、所定の時刻までの各共通実行回数群の実行回数を導出する手段と、
前記一般項の式と前記実行回数とから、前記所定の時刻における前記レジスタの値を導出する手段と、
前記所定の時刻における前記レジスタの値を入力して、前記定常時における論理回路動作記述を出力する手段と、を具備することを特徴とする論理回路モデル変換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理回路モデル変換装置、論理回路モデル変換方法および論理回路モデル変換プログラムに関する。本発明は、特に、ハードウェア記述言語等で表現されたレジスタ・トランスファ・レベル論理回路モデルの中の不要な記述を削減変換することにより、効率的な論理回路モデルを生成する技術に関する。
【背景技術】
【０００２】
近年、ＬＳＩ等の大規模な論理回路の設計・製造では、ハードウェア記述言語（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ：以下、「ＨＤＬ」と称する）と呼ばれる言語でハードウェアを記述し、記述したＨＤＬから「ネットリスト」と呼ばれる回路要素の接続関係を表すデータに変換し、このネットリストから実際のＬＳＩ等のハードウェアを製造することが多い。
【０００３】
ＨＤＬからネットリストへ変換することを「論理合成」と呼び、所定の論理合成ツールを用いてＨＤＬからネットリストへ変換することができる。ネットリストは、例えば、ＡＮＤ回路、ＯＲ回路、レジスタ、カウンタ等の回路要素と相互の接続関係を表すデータであり、このネットリストを用いて従来からあるいわゆる回路図をプリントアウトすることも可能である。
【０００４】
ＨＤＬには、種々のものがあるが、例えば、Ｖｅｒｉｌｏｇ−ＨＤＬ、ＶＨＤＬ、Ｓｙｓｔｅｍ  ＣといったＨＤＬが今日多く用いられている。また、ＨＤＬには幾つかの記述レベルが存在し、代表的には、ビヘイビア・レベル（Ｂｅｈａｖｉｏｒ  Ｌｅｖｅｌ）とレジスタ・トランスファ・レベル（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ：以下、「ＲＴＬ」と称する）がある。  
ビヘイビア・レベルは、動作（ハードウェア動作に限らずソフトウェアの動作をも含む）を「クロックの概念」無しに表現したものである。詳細な設計仕様が固まっていない回路ブロックの記述や、シミュレーションを目的としたモデル、例えばＣＰＵの動作をモデル化したものの記述に用いられる。  
これに対して、ＲＴＬは、回路の構成要素であるレジスタやカウンタ等と、これらの間におけるデータの転送状態（接続状態）を表現しているレベルであり、これらを動作させるための「クロックの概念」が存在する。
【０００５】
ＨＤＬを「論理合成」し、ネットリストを生成するためには、ＨＤＬをＲＴＬで記述する必要がある。ＲＴＬのレベルのＨＤＬで記述された論理回路を「論理回路ＲＴＬモデル」と呼ぶものとする。
【０００６】
他方、今日の大規模な回路では、回路自体の設計に加えて、設計した回路の検証および評価が非常に重要になってきている。設計段階において（物を作る前に）十分な検証および評価を実施することによって、結果的には開発期間が短縮され、開発コストを低減することが可能となる。
【０００７】
さらに、今日のシステムの多くは、マイクロプロセッサ等を含むハードウェア／ソフトウェア一体型のシステムが一般的になってきている。このため、ハードウェアのみならず、マイクロプロセッサ等で動作するソフトウェアも含めて検証、評価する必要が高くなってきている。
【０００８】
ところで、今日、広く用いられている論理回路は同期式論理回路であり、「論理回路ＲＴＬモデル」では、定義されたレジスタ群への書込みは、クロック、リセット等の同期信号を用いて書き込まれるように記述されている。従って、「論理回路ＲＴＬモデル」で評価可能な時間的精度は、周期的なクロック等の同期信号が入力される毎に、レジスタの値が正しいか否かが検証できることが保証される精度である（以下、この精度を「クロックサイクル精度」と称する）。このように、「論理回路ＲＴＬモデル」を用いた検証は、クロックサイクル毎に非常に緻密な検証が可能である。
【０００９】
しかしながら、マイクロプロセッサ等を含む大規模な論理回路においては、個々の論理回路や、それらと相互に通信し、マイクロプロセッサ上で動作するソフトウェアを、「論理回路ＲＴＬモデル」とマイクロプロセッサのシミュレータを接続したシミュレーション環境を用いてクロックサイクル精度で検証すると、シミュレーション時間が膨大になるという大きな問題がある。
【００１０】
一方、「論理回路ＲＴＬモデル」と通信するマイクロプロセッサ等のソフトウェアを検証する場合、クロックサイクル精度のような細かな精度で検証することは必ずしも必要ではない。また、「論理回路ＲＴＬモデル」の内部のレジスタの状態を総てモニタし検証する必要もない。
【００１１】
そこで、検証目的を達成する範囲で、シミュレーションの時間的精度（モニタ・検証する時間的な粗さ）や空間的精度（モニタ・検証するレジスタや信号の種類や量）を落とすことによって、シミュレーション時間を短縮する技術が種々開発されている。
【００１２】
例えば、特許文献１には、同期式回路の特徴を生かして、クロックサイクルの各時刻に対してテーブルを作成し、シミュレーションを行う前にイベントスケジュールを行う技術が開示されている。
【特許文献１】米国特許第５，８６２，３６１号
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上記のように、シミュレーションを行うためのモデル（以下、このモデルを「論理回路動作モデル」と称する）は、「論理回路ＲＴＬモデル」とは別に抽象度の高いモデルを新たに生成し、これを順次詳細化して「論理回路動作モデル」を生成する方法や、既存の「論理回路ＲＴＬモデル」（抽象度が低く細かいモデル）を用いてこれを要約することによって「論理回路動作モデル」に変換する方法によって生成されることが多い。
【００１４】
「論理回路動作モデル」の良否は、「論理回路動作モデル」の精度（第１の条件）と「論理回路動作モデル」の作成の手間（第２の条件）および、論理回路動作モデルの実行速度（第３の条件）という３つの観点から判断する必要がある。
【００１５】
「論理回路動作モデル」の精度（第１の条件）は、検証目的を達成するに十分なシミュレーション精度（時間的精度および空間的精度）を確保することである。  
「論理回路動作モデル」の作成の手間（第２の条件）は、論理回路やソフトウェアプログラムの検証開始時期までに、「論理回路動作モデル」が「論理回路ＲＴＬモデル」と整合が取れた状態で提供されることである。  
「論理回路動作モデル」の実行速度（第３の条件）は、論理回路やソフトウェアプログラムの検証開始時期までの期間に対し、検証目的の模擬実行の速度が十分短い時間で収まることである。
【００１６】
例えば、上記のシミュレーション精度の細かい（抽象度の低い）モデルを要約する方法（特許文献１参照）は、設計済みの「論理回路ＲＴＬモデル」を出発点として自動的に要約して「論理回路動作モデル」を作成するため、第１、第２の条件（開発の手間）を満足する可能性は比較的高い。しかし、実行速度の面では十分速いとはいえず、第３の条件を満たさない。
【００１７】
従って、従来技術では、第１の条件を満足する精度を維持しながら、第２の条件を満足する程度の開発期間において、大規模なシステムであってもシミュレーション実行時間を実用上耐えうる範囲に収めるという、第３の条件を満たす「論理回路動作モデル」を得ることは困難であると予想される。
【００１８】
本発明は、検証目的を達成するＲＴＬの精度を達成する正確な「論理回路動作モデル」を作成し、かつ大規模なシステムであってもシミュレーション実行時間を許容範囲に収めることが可能である技術を提供することを目的とする。
【課題を解決するための手段】
【００１９】
ハードウェアの動作は、たとえば一部の外部入力の変化がなくなった後などにおいて、周期動作などの不要な動作に収束することが多い。しかし、この収束状態に入ったかどうかの判定を、実行時に動的におこなうことは困難であるため、現状では無駄なシミュレーション時間を消費している。ここで、ハードウェアのＲＴＬモデルでは、バスなどからの外部入力がなくなった定常状態では、周期的動作となると想定されるようなコードに対し、実際に周期的動作となることを証明すれば、省略可能な逐次的な周期的動作を１回の演算に変換することができる。  
本発明では、無駄な逐次処理を１回の処理に置き換えることにより、ＲＴＬの論理回路モデルの高速化を行うようにしている。
【００２０】
本発明の局面に係る発明は、レジスタ・トランスファ・レベルの論理回路がコード化されたモデルを分析して、確実に同時刻に実行される同時刻ブロックと分析結果とを出力するモデル分析部と、前記同時刻ブロックと前記分析結果に基づいて、実行回数が共通となるコードの集合である共通実行回数群を作成する共通実行回数群作成部と、前記共通実行回数群を解析して各レジスタの一般項の式を作成する共通実行回数群解析部と、前記共通実行回数群の相互の関係を解析し、所定の時刻までの各共通実行回数群の実行回数を導出する関係解析部と、前記一般項の式と前記実行回数とから、前記所定の時刻における前記各レジスタの値を導出するレジスタ値導出部と、を具備することを特徴とする。なお、本発明は、上記の装置の機能を実現する方法やプログラムの発明としても成立する。
【発明の効果】
【００２１】
本発明によれば、ＲＴＬ精度のシミュレーションを高速化することが可能となる。
【発明を実施するための最良の形態】
【００２２】
図面を参照して本発明の実施の形態を説明する。  
図１は、本発明の一実施形態に係る論理回路モデル変換装置の基本構成をモデル化した概略ブロック図である。
【００２３】
論理回路モデル変換装置１００は、モデル分析部１１０と、共通実行回数群作成部１２０と、共通実行回数群解析部１３０と、関係解析部１４０と、レジスタ値導出部１５０と、論理回路モデル作成部１６０とを有している。また、論理回路モデル変換装置１００は、上記の各部で作成されたデータを一時記憶するための記憶部を有している。具体的には、論理回路モデル変換装置１００は、同時刻ブロック２１２等を記憶するブロック及びグラフ記憶部２１０と、共通実行回数群を記憶する共通実行回数群記憶部２２０と、各レジスタの一般項を記憶する一般項記憶部２３０と、各共通実行回数群の時刻Ｔまでの実行回数を記憶する実行回数記憶部２４０と、各レジスタの時刻Ｔの値を記憶するレジスタ値記憶部２５０とを有している。なお、ブロック及びグラフ記憶部２１０は、具体的には、同時刻ブロック２１２と、制御フローグラフ２１４と、ＷＳグラフ２１６と、ＬＳグラフ２１８とを一時記憶する。
【００２４】
論理回路モデル変換装置１００は、ＲＴＬ（レジスタ・トランスファ・レベル）論理回路モデル記憶部３１０および制約記述記憶部３２０からそれぞれＲＴＬ論理回路モデルおよび定常時の制約記述を入力して、論理回路モデル記憶部４１０に定常時の論理回路モデルを出力する。なお、以下の実施形態において、定常状態という表現も使用するが、基本的に定常時と同様の意味で使用する。  
ＲＴＬ論理回路モデル記憶部３１０に記憶されたＲＴＬ論理回路モデルは、詳細は後述する例えば図３に示すような、Ｖｅｒｉｌｏｇ−ＨＤＬ等で記述されたハードウェアモデルである。ただし、本実施形態に係る論理回路モデル変換装置１００の入力としては、論理合成可能なＲＴＬ以上の精度を想定している。  
また、制約記述記憶部３２０に記憶された定常時の制約記述は、詳細は後述する例えば図４に示すような、解析対象としたい限定した状態を、レジスタの値や、不変値性などの観点から記述したものである。本発明の論理回路モデル変換装置１００は、一部の外部入力がない場合などの定常状態における論理回路モデルの効率化が主要な目的であるため、制約記述記憶部３２０を備えていることが好ましい。
【００２５】
図２を参照して、上記のように構成された論理回路モデル変換装置の基本動作の流れを説明する。図２は、図１の論理回路モデル変換装置の基本動作の流れを示すフローチャートである。
【００２６】
まず、モデル分析部１１０は、ＲＴＬ論理回路モデル記憶部３１０および制約記述記憶部３２０に記憶されたＲＴＬ論理回路モデルと定常時の制約記述を解析して、不要コードの消去をおこなう。そして、モデル分析部１１０は、同時刻ブロック２１２、制御フローグラフ２１４、ＷＳグラフ２１６及びＬＳグラフ２１８を順次作成する（ステップＳ１）。なお、同時刻ブロック２１２、制御フローグラフ２１４、ＷＳグラフ２１６及びＬＳグラフ２１８は、ブロック及びグラフ記憶部２１０に記憶される。ここで、同時刻ブロック２１２は、消去後のコードから作成された、確実に同時刻に実行されるコードの集合である。制御フローグラフ２１４は、作成した同時刻ブロック間の制御関係、すなわち分岐や呼び出しによる制御の流れ、を表すグラフである。ＷＳグラフ２１６は、同時刻ブロック２１２間のレジスタを介した同期関係を表すグラフである。ＬＳグラフ２１８は、レジスタのＬｏａｄ、Ｓｔｏｒｅ関係を表すグラフである。
【００２７】
次に、共通実行回数群作成部１２０は、ステップＳ１で作成した、同時刻ブロック２１２と、それら相互の関係を表す制御フローグラフ２１４、ＷＳグラフ２１６及びＬＳグラフ２１８とを利用して、ある時刻Ｔ（詳細は後述する）までに、同一回数実行されるようなコードの集合である共通実行回数群を得て共通実行回数群記憶部２２０に記憶する（ステップＳ２）。
【００２８】
この共通実行回数群は、漸化式で表すことができるので、共通実行回数群解析部１３０は、ステップＳ２で得た共通実行回数群から漸化式を作成して、この漸化式を解いて各レジスタの一般項を導出して一般項記憶部２３０に記憶する（ステップＳ３）。この漸化式からの一般項の導出は、例えば、漸化式パターンのデータベースを参照することにより実現できるが、一般に知られる他の方法を利用してもよい。そして、ステップＳ３において新たな一般項の式が得られた場合は、他の一般項の導出に活用できる可能性があるため、ステップＳ１に戻り、ステップＳ１からステップＳ３の処理を繰り返す（ステップＳ４のＹｅｓ）。
【００２９】
ステップＳ３において新たな一般項の式が得られない場合（ステップＳ４のＮｏ）には、関係解析部１４０は、同時刻ブロック２１２、制御フローグラフ２１４、ＷＳグラフ２１６、ＬＳグラフ２１８および各レジスタの一般項を利用して、各共通実行回数群の時刻Ｔまでの実行回数を導出して実行回数記憶部２４０に記憶する（ステップＳ５）。
【００３０】
次に、レジスタ値導出部１５０は、一般項記憶部２３０および実行回数記憶部２４０に記憶された情報を総合し、シミュレーション時間Ｔ経過後の各レジスタの値である各レジスタの時刻Ｔの値を導出して、レジスタ値記憶部２５０に記憶する（ステップＳ６）。
【００３１】
最後に、論理回路モデル作成部１６０は、レジスタ値記憶部２５０に記憶された時刻Ｔにおける各レジスタの値を用いて、高速化した定常時の論理回路モデルを作成して、論理回路モデル記憶部４１０に記憶する（ステップＳ７）。
【００３２】
上記のようにして、高速化した定常時の論理回路モデルが作成される。以下、具体的に、各部の動作を説明する。  
まず、論理回路モデル変換装置１００の入力であるＲＴＬ論理回路モデルについて、図３のＶｅｒｉｌｏｇ−ＨＤＬの例を用いて説明する。論理回路モデルは、いくつかの回路に対応するｍｏｄｕｌｅからなることが多い。たとえば、図３の例では５個のｍｏｄｕｌｅ  Ｍ１〜ｍｏｄｕｌｅ  Ｍ５からなる。
【００３３】
次に論理回路モデルは、いくつかの記憶領域をもつ。たとえばＶｅｒｉｌｏｇ−ＨＤＬでは、記憶領域のデータ型として、レジスタ型、ネット型等のいくつかのデータ型をもつが、ここでは、以下で定義するｓｔｏｒｅ、ｌｏａｄ、ｗａｉｔの対象となるような記憶領域を全てレジスタと呼ぶことにする。たとえば図３のｍｏｄｕｌｅ  Ｍ１では、ＣＬＫ、ＲＥＳＥＴ、ｃｎｔ、ｃｎｔ＿ｎｅｘｔがレジスタである。なお、論理回路モデルにおける、この記憶領域（レジスタ）への書き込み、および読み出しの操作のことを、ここではＳｔｏｒｅおよびＬｏａｄと呼ぶことにする。たとえばＶｅｒｉｌｏｇ−ＨＤＬでは、Ｓｔｏｒｅは、例えばｃｎｔ＜＝０のように表現される。ｃｎｔ＜＝０の表現は、レジスタｃｎｔに０を書き込むことを意味する。また、ｃｎｔ＜＝ｃｎｔ＿ｎｅｘｔの表現は、レジスタｃｎｔ＿ｎｅｘｔからＬｏａｄした値をレジスタｃｎｔにＳｔｏｒｅすることを同時に表現している。つまり、＜＝演算の左辺に現れるレジスタはＳｔｏｒｅ先のレジスタとなり、＜＝演算の右辺に現れるレジスタは、Ｌｏａｄ元のレジスタとなる。
【００３４】
また、論理回路モデルにおいて、本明細書では、ＣＬＫ等のレジスタの値の変化と同期する同期操作のことをＷａｉｔと呼ぶことにする。例えばＶｅｒｉｌｏｇ−ＨＤＬでは、同期操作はａｌｗａｙｓ文により実現される。例えば、ｍｏｄｕｌｅ  Ｍ２におけるａｌｗａｙｓ＠（ｃｎｔ）は、レジスタｃｎｔの値が変化した場合に、ａｌｗａｙｓから、対応するｅｎｄまでの節を実行することを表す。つまり、この例では、他のｍｏｄｕｌｅにおいて、レジスタｃｎｔに異なる値が代入されると、ｍｏｄｕｌｅ  Ｍ２は、レジスタｃｎｔへのＳｔｏｒｅをおこなうｍｏｄｕｌｅの後に実行される。このような場合を、Ｗａｉｔ ｃｎｔと呼ぶことにする。
【００３５】
ここで、論理回路モデルにおけるＷａｉｔには、複数のレジスタのいずれかに同期したり、レジスタの立ち上がりに同期するなどのバリエーションがある。たとえば、ｍｏｄｕｌｅ  Ｍ１におけるｐｏｓｅｄｇｅ  ＣＬＫ  ＯＲ  ｎｅｇｅｄｇｅ  ＲＥＳＥＴは、ｐｏｓｅｄｇｅ  ＣＬＫもしくはｎｅｇｅｄｇｅ  ＲＥＳＥＴのいずれかのイベントと同期するＷａｉｔであり、どちらか一方のイベントにより、ｍｏｄｕｌｅ  Ｍ１が起動される。また、ｍｏｄｕｌｅ  Ｍ３におけるｐｏｓｅｄｇｅ  ＣＬＫは、レジスタの立ち上がりのイベントと同期するＷａｉｔであり、レジスタＣＬＫの値が０から１に変化したときのみｍｏｄｕｌｅ  Ｍ３が起動される。同様にｎｅｇｅｄｇｅ  ＲＥＳＥＴは、ＲＥＳＥＴレジスタの値が1から0に変更した場合に起動される。またｍｏｄｕｌｅ  Ｍ５における、ａｌｗａｙｓ  ｂｅｇｉｎは、ａｌｗａｙｓ文の内部を繰り返し実行することを表す。
【００３６】
また、論理回路モデルにおける、シミュレーション時間を進める命令のことをここでは、ｄｅｌａｙと呼ぶ。たとえばＶｅｒｉｌｏｇ−ＨＤＬでは、ｍｏｄｕｌｅ  Ｍ５のように＃によりこのｄｅｌａｙ操作を表す。この＃３２の意味は、３２（時間単位）だけシミュレーション時間を進めるということである。
【００３７】
次に、論理回路モデルには分岐を表す命令がある。図３の例ではｉｆ文があるが、このｉｆ文は、条件式が真の場合に、ｉｆ節内を実行し、偽の場合は、ｅｌｓｅ節内を実行する。
【００３８】
ここで図３の例で表される回路の動作を簡単に説明する。まず、ｃｌｋ＿ｇｅｎｅｒａｔｏｒ（クロック発生器）であるｍｏｄｕｌｅ  Ｍ５がクロックＣＬＫを供給し、このＣＬＫをＷａｉｔするｍｏｄｕｌｅ  Ｍ１、ｍｏｄｕｌｅ  Ｍ３が起動される。ｍｏｄｕｌｅ  Ｍ３、ｍｏｄｕｌｅ  Ｍ４は、タイマの周期cikleを外部入力するためのｍｏｄｕｌｅであり、ＩＯ＝＝１になっている際に、レジスタＩＯ＿ｃｉｋｌｅに書き込まれた値がタイマの周期cikleとして採用される。ｍｏｄｕｌｅ  Ｍ１は、カウンタレジスタｃｎｔをカウントアップし、ＲＥＳＥＴ＝＝０である場合は、レジスタｃｎｔを０にクリアする回路である。ｍｏｄｕｌｅ  Ｍ２は、レジスタｃｎｔの値がレジスタcikleの値の倍数になると、レジスタｏｕｔｐｕｔに１を出力する回路である。全体としては、ＩＯ＿ｃｉｋｌｅに入力されたクロック周期ごとにレジスタｏｕｔｐｕｔに１を出力するような回路である。なお、各ｍｏｄｕｌｅにおける表現は、簡略化しているために、いくつかの不具合があるが、本発明の特徴とは関係がないため省略する。
【００３９】
ここではＶｅｒｉｌｏｇ−ＨＤＬを例にとり説明したが、論理回路モデルが、Ｓｔｏｒｅ、Ｌｏａｄ、Ｗａｉｔ、Ｄｅｌａｙ操作および、分岐命令と、それ以外の算術演算、Ｂｉｔ演算などの数値間の演算操作等により構成できるということが本質的である。そのため、入力ＨＤＬはＶｅｒｉｌｏｇ以外のＨＤＬであってもよいし、ＨＤＬと等価な情報を再構成できる他のグラフ表現等であってもよい。
【００４０】
また、制約記述記憶部３２０に記憶された定常時の制約記述とは、レジスタの値や、不変値性などにより、解析対象としたい状態を限定できる記述のことである。たとえば、外部からのどのレジスタへの書き込みがなくなるかといった情報や、書き込みがなくなった時点でどのような値になっているかといった情報をここに記述する。本発明の論理回路モデル変換装置１００は、この制約記述記憶部３２０がなくても動作するが、この制約記述記憶部３２０による状態の限定が多い程、高速なＨＤＬ記述を出力できる可能性が高くなる。
【００４１】
図４は、定常時の制約記述の例を示す図である。図４に示す例では、定常時には、レジスタＲＥＳＥＴの値が１であり、レジスタＩＯの値が０であり、レジスタＩＯ＿ｃｉｋｌｅの値が不変であることを示している。ここで、不変とは、値は不明であるが一定であることを表している。このような制約はたとえば、定常状態以前には値が変化するが、外部入力がなくなる定常状態においては値が変化しない場合などに生じる。  
このタイマの例では、レジスタＩＯ＿ｃｉｋｌｅはタイマの周期に相当する値であり、ユーザが設定可能であるが、入力がなくなった後には不変となる値である。
【００４２】
以下、各部の機能及び動作について具体的に説明する。まず、図５を参照して、モデル分析部１１０の動作を説明する。図５は、モデル分析部１１０の具体的な動作を示すフローチャートである。
【００４３】
まず、不要コードの削除を行う（ステップＳ１１）。不要コードの例としては、たとえばx <= x_next, x_next <= x の組があり他にレジスタxやx_nextへのStore がない場合に、相互に同じ値を代入するだけであるために、これら２個の代入式が不要となる。あるいは、wait x があるにも関わらず、レジスタx に対する代入処理が１個もない場合には、wait x 以下のコードは決して実行されないため、wait x 以下のコードは不要となる。
【００４４】
不要コードとして、定常時の制約記述に基づき、あるレジスタの値が決定できる場合は、そのレジスタを値で置換する処理がある。また、あるレジスタの値が一定、もしくは不変（すなわち、値自体は不明だが一定となる）となる場合には、当該レジスタをWaitの対象とするWait命令があれば、Waitの対象となるレジスタの中から当該レジスタをモデル化したコードを消去する処理がある。これらの処理により新たに不要となるコードも消去する。このようにコード化されたモデルにおいて、繰り返し演算や、時間などのインクリメントなど実回路上ではある時間の経過が必要であるが結果として値や変数がわかるコード列については不要コードとして、その値や変数に置き換える。
【００４５】
図６は、図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合の不要コードの削除処理の例を示す図である。  
図６において、図４の定常時の制約記述により、ＲＥＳＥＴ＝１（一定）であることがわかるので、ｍｏｄｕｌｅ  Ｍ１のｉｆ文を評価し、ｉｆ節を消去する。同様に、ＩＯ＝０（一定）であることがわかるので、ｍｏｄｕｌｅ  Ｍ３のｉｆ文を評価し、ｉｆ節を消去する。また、レジスタＲＥＳＥＴの値は一定であるためレジスタＲＥＳＥＴの値の変化によりＷａｉｔが起動されることはないため、ｍｏｄｕｌｅ  Ｍ１のＷａｉｔ文からレジスタＲＥＳＥＴ（すなわち、ｏｒ  ｐｏｓｅｄｇｅ  ＲＥＳＥＴ）を消去する。以上のような削除処理により新たに生じる削除処理に関しては、無用命令の削除と呼ばれる既存の手法を用いて実現できるので、説明を省略する。
【００４６】
次に、同時刻ブロックを作成する（ステップＳ１２）。同時刻ブロックとは、確実に同一シミュレーション時刻に実行されるコードの集合である。論理回路モデルでは、ｄｅｌａｙがシミュレーション時刻を進める命令であり、その前後ではシミュレーション時刻が異なる。また、Ｗａｉｔ命令は、別の場所にある(Waitの対象となるレジスタへの)Store命令により起動されるため、前後でシミュレーション時刻が異なる可能性がある。そこで、同時刻ブロックは、元の論理回路モデルに対し、Ｗａｉｔ命令とＤｅｌａｙ命令が現れる毎に、コードを順次区切ることにより作成する。
【００４７】
同時刻ブロック作成処理は、いくつかの例外処理を含む。たとえば、ｉｆ文やｐｏｓｅｄｇｅ（ｎｅｇｅｄｇｅ）ｗａｉｔ等を含む場合は、同時刻ブロックを複製する。ただし全ての分岐の中身が、同一のレジスタへのＳｔｏｒｅであるｉｆ文は例外とし、複製をおこなわない。
【００４８】
図７は、以上の例外的扱いも含めた同時刻ブロック作成処理の詳細の流れを示すフローチャートである。  
まず、元の論理回路モデルに対し、Ｗａｉｔ命令とＤｅｌａｙ命令が現れる毎に、論理回路モデルを区切ることにより同時刻ブロックの候補を作成する（ステップＳ１２１）。この同時刻ブロック候補内にｉｆ文等による分岐がある場合は（ステップＳ１２２のＹｅｓ）、同時刻ブロック候補を分岐の数だけ複製し、各分岐に対応する複数の同時刻ブロックを作成する（ステップＳ１２３）。但し、各分岐節の中味が、同一のレジスタへの代入演算である場合は、例外とし、複製をおこなわない。ステップＳ１２２において、ｉｆ文等による分岐がない場合は、ステップＳ１２４に進む。  
さらに、Ｗａｉｔにｐｏｓｅｄｇｅ  ｗａｉｔ条件がある場合（ステップＳ１２４のＹｅｓ）は、元の同時刻ブロックのｐｏｓｅｄｇｅ  ｗａｉｔをｗａｉｔに置換した同時刻ブロックと、ＷａｉｔからはじまるＷａｉｔ節内が空の同時刻ブロックと、の２個の同時刻ブロックを作成し（ステップＳ１２５）、ステップＳ１２２に戻る。この処理は、ｐｏｓｅｄｇｅ節をｐｏｓｅｄｇｅが生じたか生じないかの分岐であるとみなす処理に相当する。
【００４９】
ステップＳ１２４において、Ｗａｉｔにｐｏｓｅｄｇｅ条件がない場合、すなわち、同時刻ブロック候補内に分岐に相当する処理がない場合には、同時刻ブロック候補を同時刻ブロックとする（ステップＳ１２６）。  
そして、以上の処理を論理回路モデル全体が、いずれかの同時刻ブロックに分類されるまで、繰り返す（ステップＳ１２７）。
【００５０】
図８は、図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合の同時刻ブロックの作成例を示す図である。まずｍｏｄｕｌｅ  Ｍ４に関しては、Ｗａｉｔ節のみからなるため、そのまま同時刻ブロックｂ４となる。次に、ｍｏｄｕｌｅ  Ｍ２に関しては、Ｗａｉｔ節の中にｉｆ節があるが、ｉｆ節およびｅｌｓｅ節の中味が同一のレジスタ（ｏｕｔｐｕｔ）に対する代入文であるため、ｉｆ文処理の例外として複製をおこなわず、そのまま同時刻ブロックｂ２となる。次に、ｍｏｄｕｌｅ  Ｍ１に関しては、Ｗａｉｔ ｐｏｓｅｄｇｅ  ＣＬＫを含むため、複製の対象となり、Ｗａｉｔ ｐｏｓｅｄｇｅ  ＣＬＫをｗａｉｔ ＣＬＫに置換した同時刻ブロックｂ１と、Ｗａｉｔ ｐｏｓｅｄｇｅ  ＣＬＫをＷａｉｔ ＣＬＫに置換し中味が空である同時刻ブロックｂ１−０を作成する。ｍｏｄｕｌｅ  Ｍ３も同様にして、同時刻ブロックｂ３および、同時刻ブロックｂ３−０を作成する。最後に、ｍｏｄｕｌｅ  Ｍ５に対しては、ｍｏｄｕｌｅの内部に、ｄｅｌａｙ処理があるため、２個のｄｅｌａｙ処理を境にして、同時刻ブロックｂ５−１、同時刻ブロックｂ５−２をそれぞれ作成する。  
ハードウェアの処理として妥当な処理であれば、より複雑な論理回路モデルが入力なされた場合であっても、以上の手続きにより、同時刻ブロックは、Ｗａｉｔもしくはｄｅｌａｙから始まる有限の長さの記述となる。  
また、全ての分岐処理およびｐｏｓｅｄｇｅ  ｗａｉｔを含む同時刻ブロックの複製をおこなうと、同時刻ブロック内には分岐およびｐｏｓｅｄｇｅ  ｗａｉｔがなくなる。なお、分岐処理は、次に述べる制御フローグラフの処理により表現する。
【００５１】
次に、ある同時刻ブロックの処理後に、（同期ではなく）他の同時刻ブロックの処理をおこなう可能性がある同時刻ブロックに関しては、同時刻ブロックを頂点とする制御フローを表す制御フローグラフを作成する（ステップＳ１３）。制御フローグラフとは、同時刻ブロックを頂点とする有向グラフであり、辺は、ある同時刻ブロックから他の同時刻ブロックへの同期以外の状態遷移可能性を表す。他の同時刻ブロックに遷移する可能性のない同時刻ブロックは、ノードとしない。また複数の頂点に条件分岐する場合は、その分岐条件を制御フローにより表す。
【００５２】
図９は、図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合の制御フローグラフの作成例を示す図である。ステップＳ１２において作成した同時刻ブロックのうち、他の同時刻ブロックに遷移する可能性がある同時刻ブロックは、ｂ１とｂ１−０、ｂ３とｂ３−０、ｂ５−１とｂ５−２のみであるため、これ以外の同時刻ブロックであるｂ２、ｂ４は、制御フローグラフには現れない。
【００５３】
図９（ａ）は、同時刻ブロックｂ１と同時刻ブロックｂ１−０の状態遷移を表す図である。図９（ａ）では、同時刻ブロックｂ１の終了後、ｐｏｓｅｄｇｅ  ＣＬＫである場合は次も同時刻ブロックｂ１に遷移し、そうでない場合は同時刻ブロックｂ１−０に遷移する。また、同時刻ブロックｂ１−０の終了後、ｐｏｓｅｄｇｅ  ＣＬＫである場合は、次は同時刻ブロックｂ１に遷移し、そうでない場合は同時刻ブロックｂ１−０に遷移する。という２つのことを表現している。図９（ｂ）は、図９（ａ）と同様に、同時刻ブロックｂ３と同時刻ブロックｂ３−０の状態遷移関係を表現している。図９（ｃ）は、同時刻ブロックｂ５−１と同時刻ブロックｂ５−２の状態が交互に出現することを表現している。
【００５４】
次に、ＷａｉｔＳｔｏｒｅグラフ（ＷＳグラフ）を作成する（ステップＳ１４）。ＷＳグラフは、同時刻ブロックとレジスタとを頂点とし、同時刻ブロックＡにレジスタＸへのＳｔｏｒｅがあれば、Ａ＝＞Ｘ辺を追加し、レジスタＹのＷａｉｔがあれば、Ｙ＝＞Ａ辺を追加して、作成される。ＷＳグラフとは、同時刻ブロックおよびレジスタを頂点とする有向グラフであり、同時刻ブロックＸからレジスタＲへの辺は、同時刻ブロックＸにレジスタＲへのＳｔｏｒｅがあることを表し、レジスタＲから同時刻ブロックへの辺は、同時刻ブロックＸにレジスタＲへのＷａｉｔがあることを表すものとする。このＷＳグラフは、各ｍｏｄｕｌｅの同期制御関係を表している。ＷＳグラフは、各同時刻ブロック内のＷａｉｔ命令とＳｔｏｒｅ命令の対象となるレジスタを調べることにより作成できる。  
図１０は、ＷＳグラフの作成例を示す図である。図８の同時刻ブロックにおいて、同時刻ブロックｂ１について説明すると、レジスタＣＬＫをＷａｉｔするため、レジスタＣＬＫとブロックｂ１との間に辺が張られる。また、同時刻ブロックｂ１にレジスタｃｎｔに対するＳｔｏｒｅがあるため、ブロックｂ１とレジスタｃｎｔとの間に辺が張られる。このような全てのｗａｉｔ、ｓｔｏｒｅ関係を図１０に示している。
【００５５】
次に、ＬｏａｄＳｔｏｒｅグラフ（ＬＳグラフ）を作成する（ステップＳ１５）。ＬＳグラフは、同時刻ブロックとレジスタとを頂点とし、同時刻ブロックＡにレジスタＸへのＳｔｏｒｅがあれば、Ａ＝＞Ｘ辺を追加し、レジスタＹからのＬｏａｄがあれば、Ｙ＝＞Ａ辺を追加して、作成される。ＬＳグラフとは、同時刻ブロックおよびレジスタを頂点とする有向グラフであり、同時刻ブロックＡからレジスタＸへの辺は、同時刻ブロックＡにレジスタＸへのＳｔｏｒｅがあることを表し、レジスタＹから同時刻ブロックＡへの辺は、同時刻ブロックＡにレジスタＹのＬｏａｄがあることを表すものとする。  
このＬＳグラフは、同時刻ブロック内のＬｏａｄ命令とＳｔｏｒｅ命令の対象となるレジスタを調べることにより作成できる。なお不変もしくは一定であることが判明しているレジスタからのＬｏａｄ命令は、不変値または所定値で置換することが可能であるため、ＬＳグラフの辺は作成しない。
【００５６】
図１１は、ＬＳグラフの作成例を示す図である。図８の同時刻ブロックにおいて、同時刻ブロックｂ１について説明すると、同時刻ブロックｂ１には、レジスタｃｎｔ＿ｎｅｘｔの値のＬｏａｄがあるため、レジスタｃｎｔ＿ｎｅｘｔとブロックｂ１との間に辺が張られる。また、同時刻ブロックｂ１にレジスタｃｎｔに対するＳｔｏｒｅがあるため、ブロックｂ１とレジスタｃｎｔとの間に辺が張られる。このような全てのＬｏａｄ、Ｓｔｏｒｅ関係を図１１に示している。
【００５７】
次に図１２を参照して、共通実行回数群作成部１２０の動作を説明する。図１２は、共通実行回数群作成部１２０の具体的な動作を示すフローチャートである。  
共通実行回数群作成部１２０は、制御フローグラフの各頂点（同時刻ブロック）のうち、未設定の頂点を基点頂点として、基点ノードを決定する（ステップＳ２１）。そして、基点頂点からＷＳグラフとＬＳグラフをそれぞれ辿り、到達可能な頂点の共通部分を共通実行回数群の候補とする（ステップＳ２２）。これにより、共通実行回数群の候補が決定される。  
ここで得られた共通実行回数群の候補に、ＬＳグラフ上、当該共通実行回数群の外部からのＬｏａｄ辺からの入力があれば（ステップＳ２３のＹｅｓ）、ステップＳ２１に戻る。ステップＳ２３において、共通実行回数群の候補にＬｏａｄ辺からの入力がなければ、共通実行回数群の候補を共通実行回数群に決定して（ステップＳ２４）、処理を終了する。
【００５８】
図１３は、図３の論理回路モデル、図４の定常時の制約記述、図８の同時刻ブロック、図９の制御フローグラフ、図１０のＷＳグラフ、及び図１１のＬＳグラフが与えられた場合の共通実行回数群の作成例である（図１３の破線で示す部分）。図１３では、基点頂点が同時刻ブロックｂ３であるような同時刻ブロックｂ３と同時刻ブロックｂ４からなる共通実行回数群が作成されている。この共通実行回数群は、基点頂点である同時刻ブロックｂ３が実行されると、ＷＳグラフ上のｓｔｏｒｅ命令によるｗａｉｔ命令の起動（同期）により、同時刻ブロックｂ３、同時刻ブロックｂ４の順に実行される。この場合は、当該共通実行回数群の外部に、当該共通実行回数群内部のWaitの対象となるレジスタ（基点同時刻ブロックのｗａｉｔを除く）へのＳｔｏｒｅ命令が存在しないため、同時刻ブロックｂ３の起動回数と、同時刻ブロックｂ４の起動回数は一致する。
【００５９】
ここで、ステップＳ２３の分岐処理は、共通実行回数群を、外部からのＬｏａｄがないものに限定するために行っている。この条件を満たす場合には、ここで得た共通実行回数群は、内部の全ての同時刻ブロックの実行回数が一致するという性質をもつ。  
なお、この性質は、当該共通実行回数群の外部のＳｔｏｒｅ演算により起動される同期処理（Ｗａｉｔ演算）があるかどうかにはよらない。なぜなら、外部からのＬｏａｄがない場合は、外部からの同期操作による同時刻ブロックの動作は、当該共通実行回数群の内部の演算時の動作と同一となるからである。このように、この実行回数を等しいとみなすことができる共通実行回数群を発見できることが本発明のポイントの１つである。
【００６０】
図１４を参照して、共通実行回数群解析部１３０の動作を説明する。図１４は、共通実行回数群解析部１３０の具体的な動作を示すフローチャートである。  
まず、共通実行回数群の基点頂点から、ＷＳグラフを有向向きに辿ることにより、各Ｌｏａｄ、Ｓｔｏｒｅ先のレジスタの前後判定をおこなう（ステップＳ３１）。すなわち、Ｓｔｏｒｅされるレジスタは、必ず次の時刻の値になる。Ｌｏａｄされる場合は、Ｌｏａｄされる値が、Ｓｔｏｒｅ前の値であれば、現在の時刻の値になり、Ｓｔｏｒｅ後の値であれば、次の時刻の値となる。
【００６１】
ここで、共通実行回数群においては、共通実行回数群の基点となる同時刻ブロックが一度実行されてから、次に実行されるまでに、共通実行回数群内のレジスタの値の変更（Ｓｔｏｒｅ）が１度である場合は、Ｌｏａｄ先のレジスタは、この変更前であるか、変更後であるかどちらかである。この変更前であるか、変更後であるかの判定は、ＷＳグラフおよびＬＳグラフの解析により、多くの場合可能である。Ｌｏａｄ先のレジスタに対するＳｔｏｒｅを実行する同時刻ブロックが、ＷＳグラフ上で、Ｌｏａｄ演算を実行する同時刻ブロックよりも上にある場合は、変更前となる。逆に、Ｌｏａｄ先のレジスタに対するＳｔｏｒｅを実行する同時刻ブロックが、ＷＳグラフ上で、Ｌｏａｄ演算を実行する同時刻ブロックよりも上にある場合は、変更後となる。ここで「上にある」とは、矢印の逆向きに辿れること、「下にある」とは、矢印の向きに辿れることを意味することとする。  
たとえば、同時刻ブロックｂ３のレジスタｃｉｋｌｅ＿ｎｅｘｔのＬｏａｄの場合は、レジスタｃｉｋｌｅ＿ｎｅｘｔへのＳｔｏｒｅをおこなう同時刻ブロックｂ４が、ＷＳグラフ上、同時刻ブロックｂ３よりも下にあるため、変更前の値であることが分かる。また、同時刻ブロックｂ４のレジスタｃｉｋｌｅのＬｏａｄの場合は、レジスタｃｉｋｌｅへのＳｔｏｒｅをおこなう同時刻ブロックｂ３が、ＷＳグラフ上、同時刻ブロックｂ４よりも上にあるため、変更後の値であることが分かる。
【００６２】
なお、Ｓｔｏｒｅ回数が２度以上あるような記述や、Ｌｏａｄ、Ｓｔｏｒｅが属する同時刻ブロックの上下が判別できない記述は、設計上の観点から、不適切なコードである可能性が高い。ただし、この場合であっても、値の変化が一度である場合等、前後判定が可能な場合が有りうる。前後判定ができない場合は、ステップＳ３２では何も行わずに、ステップＳ３３に進む。
【００６３】
次に、レジスタの漸化式を作成する（ステップＳ３２）。ここでは、ステップＳ３１のレジスタの前後判定の情報を元に、共通実行回数群内の各代入演算に対して、Ｌｏａｄ演算に対しては、レジスタＸの代入前の値（すなわち、現在の時刻の値）をＸ［ｋ］、代入後の値（すなわち、次の時刻の値）をＸ［ｋ＋１］に置換し、Ｓｔｏｒｅ演算に対しては、代入先の値をＸ［ｋ＋１］に置換することにより漸化式が得られる。ここで、ｉｆ文による分岐はそのまま残すものとする。図１５（ｂ）は、ステップＳ２で共通実行回数群と判定した同時刻ブロックｂ３、ｂ４（図１５（ａ））に対して、漸化式を作成した例を示す図である。
【００６４】
次に、レジスタの一般項の作成をおこなう（ステップＳ３３）。ステップ３２で得た漸化式を数列の漸化式とみなすと、解析的に解ける場合は一般項が得られる。この変換ルールは、予め作成した変換テーブルを利用してもよいし、ユーザが変換ルールを決定してもよい。またその他の既存の方法を使用してもよい。なお一般項が作成できない場合は、ｎ回実行機（任意のｎに関して、ｎ回漸化式実行後の各レジスタの値を出力するコード）を作成し、これを一般項とみなしても良い。
【００６５】
例えば、図１５（ｃ）は、ステップＳ２で共通実行回数群と判定した同時刻ブロックｂ３、ｂ４に対して、一般項を作成した例である。なお以下の議論では、簡単のため  cikle[0] = cikle_next[0], cnt[0]=cnt_next[0], cnt[0] = 1が成立することを仮定する。この場合において、図１５（ｂ）のｃｉｋｌｅ［ｋ＋１］＝ｃｉｋｌｅ＿ｎｅｘｔ［ｋ］、ｃｉｋｌｅ＿ｎｅｘｔ［ｋ＋１］＝ｃｉｋｌｅ［ｋ＋１］という漸化式が得られる場合、これらの漸化式がｋ≧０で成立する場合には、一般項として、ｃｉｋｌｅ［ｋ］＝ｃｉｋｌｅ［０］等が得られることは、数列の一般解法としてよく知られている。この一般項作成処理はたとえば、対応する漸化式のパターンと一般項のパターンの組のテーブルを予め作成することにより得られるが、既存の他の手法を用いることもできるため、特に限定しない。
【００６６】
なお、レジスタの一般項が作成できない漸化式に対しては、任意の実行回数ｎに対する各レジスタの値を作成できるｎ回実行機を作成する。このｎ回実行機も、以下の説明ではレジスタの一般項であるとみなすことにする。なお、このｎ回実行機の作成方法についても、様々な実現方法があり、特に限定しない。
【００６７】
上記のステップＳ２、ステップＳ３は、図２に示したように、新たな一般項が生成された場合は繰り返して実行される。この新たな一般項により、新たな共通実行回数群を作成できる場合があるからである。
【００６８】
実際に、図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合に、図１５の一般項が得られたことにより、新たな共通実行回数群を作成できる例を図１６に示す。図１６のＬＳグラフに示すように、図１５の一般項から、レジスタｃｉｋｌｅの値が不変値であることが判明したために、ｃｉｋｌｅから同時刻ブロックｂ２への辺を削除することができる。このＬＳグラフの変化の効果により、ステップＳ２２で得られる同時刻ブロックｂ１、ｂ２とからなる共通実行回数群候補は、外部からのＬｏａｄ辺入力がなくなり、共通実行回数群となる。
【００６９】
図１７は、図１６に示す同時刻ブロックｂ１、ｂ２からなる、共通実行回数群候補に対して、ステップＳ３を適用した例である。この場合の漸化式および一般項は、条件分岐を含む例となっている。  
このうち、たとえば、ｃｎｔ［ｋ＋１］＝ｃｎｔ＿ｎｅｘｔ［ｋ］およびｃｎｔ＿ｎｅｘｔ［ｋ＋１］＝ｃｎｔ［ｋ］＋１という漸化式に対しては、よく知られた解法により、一般項ｃｎｔ［ｔ］＝ｃｎｔ［０］＋ｔ、ｃｎｔ＿ｎｅｘｔ［ｔ］＝ｃｎｔ［０］＋t +1が得られる。
【００７０】
次に図１８を参照して、関係解析部１４０の動作を説明する。図１８は、関係解析部１４０の具体的な動作を示すフローチャートである。  
実行回数を導出する同時刻ブロックを決定する（ステップＳ５１）。具体的には、共通実行回数群の基点となる同時刻ブロックもしくは、共通実行回数群に含まれない同時刻ブロックのうち、未設定の同時刻ブロックを取りだす。次に、制御フローグラフの解析により、未設定の同時刻ブロックの実行回数の関係式を導出する（ステップＳ５２）。そして、未設定の同時刻ブロックの実行回数の関係式のシミュレーション時間に対する一般項を作成する（ステップＳ５３）。  
ステップＳ５１からステップＳ５３までの処理を未設定の同時刻ブロックがなくなるまで繰り返す（ステップＳ５４）。
【００７１】
図１９は、図３の論理回路モデル、図４の定常時の制約記述および、図８の同時刻ブロック、図９の制御フローグラフ、図１０のＷＳグラフ、及び図１１のＬＳグラフが与えられた場合の、関係解析部140 による各同時刻ブロックの時刻Tまでの実行回数の導出結果を表している。
【００７２】
まずはじめに、交互に実行される同時刻ブロックb5-1, b5-2のそれぞれの内部に32のdelayがあることから、b5-1, b5-2 は、時刻Tまでに、T/64回(厳密には T/64 + 1回)ずつ実行されることが分かる。また、b5-1のclkに1を代入する処理、b5-2のclkに0  を代入する処理が交互におこなわれることから、時刻Tまでにclkの0=>1の変化はT/64回生じることが分かる。このことから、0=>1変化により起動されるposedge wait clkは、時刻TまでにT/64回生じることがわかる。したがって、同時刻ブロックb1, b3 (およびb1-0, b3-0の) それぞれの実行回数はT/64回であることが分かる。
【００７３】
次に図２０を参照して、レジスタ値導出部１５０の動作を説明する。図２０は、レジスタ値導出部１５０の具体的な動作を示すフローチャートである。  
まず、必要なレジスタの作成をおこなう（ステップＳ６１）。具体的には、シミュレーション時間を入力するためのレジスタ、および、各レジスタの初期値を格納するためのレジスタを作成する。また出力結果であるシミュレーション時間Ｔ経過後の各レジスタの値を格納するためのレジスタを作成する。また、各共通実行回数群に対し、実行回数を格納するレジスタを用意する。  
次に、一般項が得られないレジスタがある場合（ステップＳ６２のＹｅｓ）は、レジスタＸの漸化式を必要な回数（例えば、n回）実行し、結果をレジスタＸに出力するｍｏｄｕｌｅ（n回実行機）を作成し、これを一般項とみなす（ステップＳ６３）。  
ステップＳ６２において、一般項が得られないレジスタがない場合には、ステップＳ６１で作成した、各共通実行回数群の実行回数を格納するレジスタの一般項および、各レジスタの一般項を組み合わせ、各レジスタの時刻Ｔ（すなわち、シミュレーション時間T経過時）の値を得る関係式を作成する（ステップＳ６４）。そして、以上の処理で生じた無駄な演算の削除や、共通部分の括りだし等により不要なコードを削除する（ステップＳ６５）。
【００７４】
図２１（ａ）は、図３の論理回路モデル、図４の定常時の制約記述、図８の同時刻ブロック、図９の制御フローグラフ、図１０のＷＳグラフ、及び図１１のＬＳグラフが与えられた場合に得られる各レジスタの一般項を表している（ステップＳ６１の結果）。なお、各レジスタの一般項の実行回数は所属する共通実行回数群により異なる。そのため、各レジスタの一般項の添字は、右側の実行回数を合わせる添字に合わせた。  
たとえば、上で挙げたレジスタｃｎｔの場合、一般項ｃｎｔ［ｋ２］＝ｃｎｔ［０］＋ｋ２が得られているが、時刻Ｔまでのｃｎｔレジスタが所属する共通実行回数群の実行回数はＴ／６４であるので、シミュレーション時刻Ｔにおける一般項は、ｃｎｔ［Ｔ］＝ｃｎｔ［０］＋Ｔ／６４であることが分かる。  
同様にして、各レジスタのシミュレーション時刻Ｔにおける一般項（値）は、図２１（ｂ）のように得られる（ステップＳ６３の結果）。
【００７５】
論理回路モデル作成部１６０の動作について説明する。この論理回路モデル作成部１６０のプロセスは、出力形態により異なるため、一般的に述べることはできないが、図２２は、例えばＶｅｒｉｌｏｇ−ＨＤＬのｍｏｄｕｌｅの形式で出力する場合の、定常時の論理回路モデルの出力の例を表している。この例では、作成されたｍｏｄｕｌｅをただ一度実行するだけで、シミュレーション時刻Ｔの全てのレジスタの値が得られる。
【００７６】
本実施形態で作成された論理回路モデルは、定常状態になった最初の時刻の各レジスタの値と、最初の時刻からの経過時間Ｔとから、時間Ｔ経過後の各レジスタの値を得る動作をおこなう論理回路モデルである。具体的には、定常状態になった最初の時刻における各レジスタの値と、定常状態になった最初の時刻からの経過時間Ｔと、をあらかじめ所定のレジスタに与えておくと、それらのレジスタの情報を元に、定常状態になった最初の時刻からの経過時間Ｔにおける、各レジスタの値を該当するレジスタに出力する動作を行う。
【００７７】
図２２は、図３の論理回路モデルの入力と、図４の定常時の制約記述の入力の例に対応する出力論理回路モデルの例である。この例では、定常状態になった最初の時刻における各レジスタの値を格納したレジスタは、ＣＬＫ０、ｃｉｋｌｅ０、ｃｉｋｌｅ＿ｎｅｘｔ０、ｃｎｔ０、ｃｎｔ＿ｎｅｘｔ０、ｏｕｔｐｕｔ０であり、経過時間を格納したレジスタはレジスタＴである。これらのレジスタの値を元に、時間Ｔ経過後の各レジスタの値を、対応するＣＬＫ、ｃｉｋｌｅ、ｃｉｋｌｅ＿ｎｅｘｔ、ｃｎｔ、ｃｎｔ＿ｎｅｘｔ、ｏｕｔｐｕｔの各レジスタに出力する。
【００７８】
この論理回路モデルの入力である、定常状態になった最初の時刻における各レジスタの値は、たとえば、元の入力時の定常時の制約のない論理回路モデルにより、得ることが可能である。また、定常状態になった最初の時刻における各レジスタの値を、ユーザが直に与えるような利用形態も可能である。
【００７９】
なお上記の実施形態では、経過時間Ｔを引数とし、各レジスタの値を出力するようなＶｅｒｉｌｏｇ−ＨＤＬ記述を出力しているが、本発明の出力としてはＲＴＬのＨＤＬを再構成できる表現であれば、ＨＤＬには限定しない。たとえば、ＨＤＬと等価な情報を保持しながら、ＨＤＬを抽象化したグラフ表現等を出力としてもよい。
【００８０】
図３の論理回路モデル、図４の定常時の制約記述の場合の高速化の効果について説明する。  
シミュレーション時間Ｔ経過後の各レジスタの値を得るために、入力時の論理回路モデル（図３）では、３個のｉｆ文と６個の代入文を含む回路を、毎クロックごと（計Ｔ／64回）に実行する必要がある。  
一方、図２２の出力となる論理回路モデルでは、２個のｉｆ文と６個の代入文を含む回路を、ただ１度実行するだけで各レジスタの値が得られる。このため、この例では、周期状態にある定常的なコードの全てを停止することができ、シミュレーション時間が長ければ長い程効率のよいコードが得られていると言える。
【００８１】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００８２】
【図１】本発明の一実施形態に係る論理回路モデル変換装置の基本構成をモデル化した概略ブロック図である。
【図２】図１の論理回路モデル変換装置の基本動作の流れを示すフローチャートである。
【図３】論理回路モデル変換装置の入力であるＲＴＬ論理回路モデルについて説明するための図である。
【図４】定常時の制約記述の例を示す図である。
【図５】モデル分析部の具体的な動作を示すフローチャートである。
【図６】図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合の不要コードの削除処理の例を示す図である。
【図７】同時刻ブロック作成処理の詳細の流れを示すフローチャートである。
【図８】図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合の同時刻ブロックの作成例を示す図である。
【図９】図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合の制御フローグラフの作成例を示す図である。
【図１０】ＷＳグラフの作成例を示す図である。
【図１１】ＬＳグラフの作成例を示す図である。
【図１２】共通実行回数群作成部１２０の具体的な動作を示すフローチャートである。
【図１３】図３の論理回路モデル、図４の定常時の制約記述、図８の同時刻ブロック、図９の制御フローグラフ、図１０のＷＳグラフ、及び図１１のＬＳグラフが与えられた場合の共通実行回数群の作成例である。
【図１４】共通実行回数群解析部１３０の具体的な動作を示すフローチャートである。
【図１５】共通実行回数群解析部による漸化式及び一般項の式の作成例を示す図である。
【図１６】図３の論理回路モデルと図４の定常時の制約記述とが与えられた場合に、図１５の一般項が得られたことにより、新たな共通実行回数群を作成できる例を示す図である。
【図１７】図１６に示す同時刻ブロックｂ１、ｂ２からなる、共通実行回数群候補に対して、ステップＳ３を適用した例である。
【図１８】関係解析部１４０の具体的な動作を示すフローチャートである。
【図１９】図３の論理回路モデル、図４の定常時の制約記述および、図８の同時刻ブロック、図９の制御フローグラフ、図１０のＷＳグラフ、及び図１１のＬＳグラフが与えられた場合の、関係解析部140による書く同時刻ブロックの時刻Tまでの実行回数の導出結果を表す図である。
【図２０】レジスタ値導出部１５０の具体的な動作を示すフローチャートである。
【図２１】各レジスタのシミュレーション時刻Ｔにおける値の例を示す図である。
【図２２】例えばＶｅｒｉｌｏｇ−ＨＤＬのｍｏｄｕｌｅの形式で出力する場合の、定常時の論理回路モデルの出力の例を表す図である。
【符号の説明】
【００８３】
１００…論理回路モデル変換装置
１１０…モデル分析部
１２０…共通実行回数群作成部
１３０…共通実行回数群解析部
１４０…関係解析部
１５０…レジスタ値導出部
１６０…論理回路モデル作成部
２１０…グラフ記憶部
２１２…同時刻ブロック
２１４…制御フローグラフ
２１６…ＷＳグラフ
２１８…ＬＳグラフ
２２０…共通実行回数群記憶部
２３０…一般項記憶部
２４０…実行回数記憶部
２５０…レジスタ値記憶部
３１０…ＲＴＬ論理回路モデル記憶部
３２０…制約記述記憶部
４１０…論理回路モデル記憶部
【図１】
0004393450.tif 000002
【図２】
0004393450.tif 000003
【図３】
0004393450.tif 000004
【図４】
0004393450.tif 000005
【図５】
0004393450.tif 000006
【図６】
0004393450.tif 000007
【図７】
0004393450.tif 000008
【図８】
0004393450.tif 000009
【図９】
0004393450.tif 000010
【図１０】
0004393450.tif 000011
【図１１】
0004393450.tif 000012
【図１２】
0004393450.tif 000013
【図１３】
0004393450.tif 000014
【図１４】
0004393450.tif 000015
【図１５】
0004393450.tif 000016
【図１６】
0004393450.tif 000017
【図１７】
0004393450.tif 000018
【図１８】
0004393450.tif 000019
【図１９】
0004393450.tif 000020
【図２０】
0004393450.tif 000021
【図２１】
0004393450.tif 000022
【図２２】
0004393450.tif 000023