(57)【特許請求の範囲】
【請求項１】
動作記述としての高位レベル記述と、前記高位レベル記述に基づいて得られたハードウェア記述と、の等価性を、コンピュータを用いて検証する方法において、
前記コンピュータが、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報を生成する、生成ステップを含み、
前記コンピュータが、前記逆データ依存関係に係る対応関係情報を利用して前記等価性を検証する、等価性検証方法。
【請求項２】
請求項１において前記コンピュータは、帰納法により等価性を検証する場合に、前記フィードバックループ内のフリップ・フロップに値を伝播するに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出し、抽出したリセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態として等価性の検証に利用する、等価性検証方法。
【請求項３】
請求項２において前記コンピュータは、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第１対応関係情報を生成する、等価性検証方法。
【請求項４】
請求項３において前記コンピュータは、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報を生成する、等価性検証方法。
【請求項５】
請求項４において、前記コンピュータが、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係を示す情報を生成する、生成ステップを更に含み、
前記コンピュータが、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性の検証を行う、等価性検証方法。
【請求項６】
請求項５において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第３対応関係情報を生成する、等価性検証方法。
【請求項７】
請求項６において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報を生成する、等価性検証方法。
【請求項８】
請求項７において、前記コンピュータが、前記最小のフリップ・フロップ段数を構成するリセットサイクルパス、逆データ依存関係に係る前記第１対応関係情報、逆データ依存関係に係る前記第２対応関係情報、順データ依存関係に係る前記第３対応関係情報、及び順データ依存関係に係る前記第４対応関係情報に、追加及び修正を行いながら、等価性を検証し、
前記追加及び修正に関する優先順位として、第１優先順位を前記リセットサイクルパス、第２優先順位を逆データ依存関係に係る前記第１対応関係情報、第３優先順位を逆データ依存関係に係る前記第２対応関係情報、第４優先順位を順データ依存関係に係る前記第３対応関係情報、第５優先順位を順データ依存関係に係る前記第４対応関係情報とし、
等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追加及び修正を行う、等価性検証方法。
【請求項９】
動作記述としての高位レベル記述と、前記高位レベル記述に基づいて得られたハードウェア記述と、の等価性を、コンピュータに検証させる等価性検証プログラムであって、
前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との逆データ依存関係に係る対応関係情報を等価性検証の支援情報として生成する、生成ステップと、
前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う検証ステップと、を実行させる等価性検証プログラム。
【請求項１０】
請求項９において、前記生成ステップは、前記コンピュータに、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出させ、
前記検証ステップは、前記コンピュータに、抽出された前記リセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態に用いて、帰納法により等価性を検証させる、等価性検証プログラム。
【請求項１１】
請求項１０において、前記生成ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第１対応関係情報を生成させる、等価性検証プログラム。
【請求項１２】
請求項１１において、前記生成ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報を生成させる、等価性検証プログラム。
【請求項１３】
請求項１２において、前記生成ステップは更に、前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との対応関係を示す順データ依存関係に係る対応関係情報を等価性検証の支援情報として生成させ、
前記検証ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証させる、等価性検証プログラム。
【請求項１４】
請求項１３において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第３対応関係情報を生成させる、等価性検証プログラム。
【請求項１５】
請求項１４において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報を生成させる、等価性検証プログラム。
【請求項１６】
請求項１５において、前記生成ステップは、前記コンピュータに、前記最小のフリップ・フロップ段数を構成するリセットサイクルパス、逆データ依存関係に係る前記第１対応関係情報、逆データ依存関係に係る前記第２対応関係情報、順データ依存関係に係る前記第３対応関係情報、及び順データ依存関係に係る前記第４対応関係情報に、優先順位に従って必要な追加及び修正を実行させ、
前記検証ステップは、コンピュータに、前記必要な追加及び修正を受けた前記等価性検証の支援情報を反映して等価性を検証させ、
前記追加及び修正に関する優先順位として、第１優先順位を前記リセットサイクルパス、第２優先順位を逆データ依存関係に係る前記第１対応関係情報、第３優先順位を逆データ依存関係に係る前記第２対応関係情報、第４優先順位を順データ依存関係に係る前記第３対応関係情報、第５優先順位を順データ依存関係に係る前記第４対応関係情報とし、
等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追加及び修正を行う、等価性検証プログラム。
【請求項１７】
動作記述としての高位レベル記述と、前記高位レベル記述に基づいて得られたハードウェア記述と、の等価性を、プログラム処理によって検証する等価性検証装置であって、
前記プログラム処理により、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との逆データ依存関係に係る対応関係情報を等価性検証の支援情報として生成する、生成部と、
前記プログラム処理により、前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う検証部と、を含む等価性検証装置。
【請求項１８】
請求項１７において、前記生成部は、前記プログラム処理により、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出し、
前記検証部は、前記プログラム処理により、抽出した前記リセットサイクル数分の記号シミュレーション結果を前記フィードバックループの初期状態として、帰納法により等価性を検証する、等価性検証装置。
【請求項１９】
請求項１８において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリッフリップ・フロップを当該変数と一対一に対応させる第１対応関係情報を生成する、等価性検証装置。
【請求項２０】
請求項１９において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報を生成する、等価性検証装置。
【請求項２１】
請求項２０において、前記生成部は更に、前記プログラム処理により、前記動作合成結果におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との対応関係を示す順データ依存関係に係る対応関係情報を等価性検証の支援情報として更に生成し、
前記検証部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証する、等価性検証装置。
【請求項２２】
請求項２１において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリッフリップ・フロップを当該変数と一対一に対応させる第３対応関係情報を生成する、等価性検証装置。
【請求項２３】
請求項２２において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報を生成する、等価性検証装置。
【請求項２４】
請求項２３において、前記生成部は、前記プログラム処理により、前記最小のフリップ・フロップ段数を構成するリセットサイクルパス、逆データ依存関係に係る前記第１対応関係情報、逆データ依存関係に係る前記第２対応関係情報、順データ依存関係に係る前記第３対応関係情報、及び順データ依存関係に係る前記第４対応関係情報に、優先順位に従って必要な追加及び修正を行い、
前記検証部は、前記プログラム処理により、前記必要な追加及び修正を受けた前記等価性検証の支援情報を反映して等価性を検証し、
前記追加及び修正に関する優先順位として、第１優先順位を前記リセットサイクルパス、第２優先順位を逆データ依存関係に係る前記第１対応関係情報、第３優先順位を逆データ依存関係に係る前記第２対応関係情報、第４優先順位を順データ依存関係に係る前記第３対応関係情報、第５優先順位を順データ依存関係に係る前記第４対応関係情報とし、
等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追加及び修正を行う、等価性検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位レベル記述とこれを動作合成した合成結果との等価性を検証する技術に関し、例えば、マイクロコンピュータ、SoC（システムオンチップの半導体集積回路）、アナログ・ディジタル混載集積回路などの、ディジタル論理回路を集積した半導体装置の設計支援に適用して有効な技術に関する。
【背景技術】
【０００２】
半導体集積回路の設計では、抽象度の高い動作記述から、例えば、動作合成システムによって論理合成可能なＲＴＬ（Register - Transfer Level）記述を合成することがしばしば行われる。この設計手法では、抽象度の高い動作レベルでの設計を行うことで記述量を少なくすることができ、設計・検証の生産性を大きく向上させることが可能になる。動作記述には、例えばＣ 言語を拡張した言語や、ＳｙｓｔｅｍＣ言語などの高位レベル記述が用いられる。
【０００３】
一般に、動作合成システムはソフトウエアで構成されており、ソフトウエアである以上は、細心の注意を払っても、システム自体にバグが含まれる可能性を無くすことが困難である。動作合成の適用範囲の拡大に伴って、全ての検証やメンテナンスを、動作記述上で行う場合も現れつつあるが、動作合成システムのバグによって、誤ったＲＴＬ記述が生成されると、動作記述上で行った検証が無意味になるばかりではなく、後工程におけるリワークを発生させる原因ともなり得る。後工程におけるリワークの発生は、開発期間や工数の増大をもたらし、結果として大きな損失につながる。このような理由から、動作合成システムを実際のＬＳＩ設計に適用する際は、合成されたＲＴＬ記述の正しさを確認すること、すなわち、動作記述とＲＴＬ記述が等価であることを検証することが必要とされる。
【０００４】
動作記述とＲＴＬ記述との間の等価性検証について、特許文献１では、動作合成の各工程(前処理工程、スケジューリング・レジスタバインディグ工程、演算器バインディング工程、後処理工程)にて中間表現と、中間表現間の変数などの対応関係情報を出力し、中間表現間の等価性検証を順次行う事で、等価性検証を高速化する手法を開示している。
【０００５】
特許文献２には、動作合成での変換履歴から、ある条件下で対応付けられる中間論理コーンを識別することで、等価性検証の高速化を行う手法が開示されている。
【０００６】
特許文献３には、動作レベル記述をコンパイルして得たオブジェクトコードと、動作レベル記述から導出したＲＴＬ記述の両者から論理コーンを抽出し、動作レベル記述とＲＴＬ記述の対応関係(信号の組)が与えられている事を前提とする手法が開示される。すなわち、その対応関係から、オブジェクトコードとＲＴＬ記述との対応する信号の組に対して、記号シミュレーション（Symbolic Simulation）によって得られた論理コーンの等価性を、充足可能性判定問題に帰着する事で等価性検証を実施する手法を開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−０９０８６５号公報
【特許文献２】特開２００７−２６５１７５号公報
【特許文献３】特開２００４−０３８６１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明者はＳｙｓｔｅｍＣなどの高位記述言語で記述された動作記述と、これを動作合成した得られた合成結果例えばＲＴＬ記述との等価性、即ち合成が正しく行われたか否か、を検証する技術について検討した。これによれば、動作合成結果であるＲＴＬ記述に対する等価性の検証（等価性の検証を以下単に等価検証とも称する）は、あらゆる入力シーケンスを想定して、動作記述に基づいて得られる結果と動作ＲＴＬ記述に基づいて得られる結果との一致を、出力タイミングも考慮して数学的に検証することである。これはＲＴＬ記述に対するバグの有無を調べるＲＴＬシミュレーションとの大きな違いであり、モデルチェッキングのような静的検証を行うものであるから検証の高速性が期待される。この点について、ＳｏＣなどの半導体集積回路の高機能化や複雑化に伴って、等価検証を行う場合であってもその処理時間の増大は避けられない。本発明者は、動作記述とハードウェア記述との間の分岐構造や構造上の依存関係などの特定の特徴について把握することによって等価検証の処理時間を短縮することについて検討した。
【０００９】
しかしながら、どのようなデータの特徴に着目すれば処理時間の短縮に効果的であるかについては更なる検討を要した。動作記述とハードウェア記述との間の分岐構造や構造上の依存関係などの特定の特徴を等価検証の処理時間短縮のために抽出して用いるという点について、何れの引用文献にも記載されていない。
【００１０】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１２】
すなわち、動作記述としての高位レベル記述と、前記高位レベル記述に基づいて得られたハードウェア記述と、の等価性を検証する場合に、前記合成結果におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数とから成る対応関係情報を生成して用いる。
【００１３】
これによれば、等価検証の単位を小さく分割して個々の検証範囲を小さくしたとき、検証単位の数が増えることによって逆に検証時間が長くなる事態を抑制することができる。
【発明の効果】
【００１４】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１５】
すなわち、高位レベル記述と動作合成結果との等価性検証に要する処理時間の短縮に寄与することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は高位レベル記述から等価検証結果を得るまでの全体的な処理フローを例示するフローチャートである。
【図２】図２は動作合成スクリプトによりＲＴＬ記述を生成する動作合成の概略を示す説明図である。
【図３】図３は特定の変数とレジスタとの対応関係を与えることによる効果が例示する説明図である。
【図４】図４は論理コーンの規模を小さくすると検証対象数が増大することを示す説明図である。
【図５】図５はフィードバックループを構成する逆データ依存関係にあるレジスタに対して変数との対応を指定し、その指定されたレジスタに関して論理コーンを分割して等価性検証を行うようにすることの意義を例示する説明図である。
【図６】図６はリセットサイクルパスを抽出して利用することによる作用を例示する説明図である。
【図７】図７は高位レベル記述の一例を示す説明図である。
【図８】図８は高位記述に対応するデータフローを例示する説明図である。
【図９】図９は図７及び図８に対応する動作合成結果の回路図を例示する説明図である。
【図１０】図１０は高位等価性検証に時間制約を設けた場合の全体的な等価検証処理フローを例示するフローチャートである。
【図１１】図１１はＲＴＬ記述から直接状態遷移表を抽出するようにした場合の全体的な等価検証処理を例示するフローチャートである。
【図１２】図１２は２プロセスＲＴＬ記述を例示する説明図である。
【図１３】図１３は図１２に対応するＦＳＭＤ記述を例示する説明図である。
【図１４】図１４は図１２に対応する状態遷移表を例示する説明図である。
【図１５】図１５は合成結果であるＲＴＬ記述が常に２プロセスモデルであって、時間制約を設けて高位等価性検証を実施する場合の全体的な等価検証処理を例示するフローチャートである。
【図１６】図１６は情報抽出処理の詳細な処理を全体的に例示するフローチャートである。
【図１７】図１７は逆データ依存関係を例示する説明図である。
【図１８】図１８は図１７の高位レベル記述のデータ依存関係を纏めて記載した説明図である。
【図１９】図１９はデータ依存解析処理の一例を示すフローチャートである。
【図２０】図２０は高速化手法を用いたデータ依存解析処理の一例を示すフローチャートである。
【図２１】図２１は同一出力信号が複数あり、それらが初段ステージからスループットサイクル番目のステージまでに存在するパイプライン動作を示すタイミングチャートである。
【図２２】図２２は同一出力信号が複数のステージにあり、それらがレイテンシサイクル分のステージをスループットサイクル区間毎に分割した区間サイクル内で異なるステージに割当てられたパイプライン動作を例示するタイミングチャートである。
【図２３】図２３は同一出力信号が複数のステージにあり、それらが出力衝突を起こすパイプライン動作を例示するタイミングチャートである。
【図２４】図２４は同一入力信号が複数のステージにあり、それらが初段ステージからスループットサイクル番目のステージまでに存在するパイプライン動作を例示するタイミングチャートである。
【図２５】図２５はレイテンシサイクル分のステージをスループットサイクル区間毎に分割した区間サイクル内で異なるステージに割当てられたパイプライン動作を例示するタイミングチャートである。
【図２６】図２６は同一出力信号が複数のステージにあり、入力データの取りこぼしが発生するパイプライン動作を例示するタイミングチャートである。
【図２７】図２７はパイプライン動作を対象とした、入出力サイクル情報の入力サイクル情報の格納形式を例示する説明図である。
【図２８】図２８はパイプライン動作を対象とした、入出力サイクル情報の出力サイクル情報の格納形式を例示する説明図である。
【図２９】図２９は図２１に示したパイプライン動作例に対応する出力サイクル情報の格納形式を例示する説明図である。
【図３０】図３０は図２２に示したパイプライン動作例に対応する出力サイクル情報の格納形式を例示する説明図である。
【図３１】図３１は図２４に示したパイプライン動作例に対応する入力サイクル情報の格納形式を例示する説明図である。
【図３２】図３２は図２５に示したパイプライン動作例に対応する入力サイクル情報の格納形式を例示する説明図である。
【図３３】図３３はサイクル精度合成RTLを対象とした入出力サイクル情報の形式を例示する説明図である。
【図３４】図３４はＣＦＧ内の指定変数を含む文の実行を行うノードの分離と再結合操作例を示す説明図である。
【図３５】図３５はパスレイテンシ設定合成RTLを対象とした入出力サイクル情報の出力サイクル情報の形式を示す説明図である。
【図３６】図３６はパスレイテンシ設定合成RTLを対象とした入出力サイクル情報の入力サイクル情報の形式を示す説明図である。
【図３７】図３７は変換前のPipeline化対象ループのサブCFG構造を示す説明図である。
【図３８】図３８は図３７の部分ＣＦＧに対して変換を施したサブCFG構造を示す説明図である。
【図３９】図３９はパイプライン動作を対象とした、入出力サイクルの修正例を示す説明図である。
【図４０】図４０はパイプライン化対象ループの部分CFGを例示する状態遷移図である。
【図４１】図４１は図４０の部分CFGに対して変換を施した例を示す状態遷移図である。
【図４２】図４２は内部ループパイプライン合成RTLを対象とした入出力サイクル情報の出力サイクル情報の形式を示す説明図である。
【図４３】図４３は内部ループパイプライン合成RTLを対象とした入出力サイクル情報の入力サイクル情報の形式を示す説明図である。
【図４４】図４４は非サイクル精度合成RTLを対象とした入出力サイクル情報の形式を示す説明図である。
【図４５】図４５は高位レベル記述を対象とした入出力サイクル情報の出力サイクル情報の形式を示す説明図である。
【図４６】図４６は高位レベル記述を対象とした入出力サイクル情報の入力サイクル情報の形式を示す説明図である。
【図４７】図４７は入出力サイクル情報抽出処理ｓ２の全体的な処理を例示するフローチャートである。
【図４８】図４８は図４７におけるs23のパイプライン合成RTLを対象とした情報抽出についての詳細な処理を例示するフローチャートである。
【図４９】図４９は図４７におけるs26のパスレイテンシ設定合成RTLを対象としたCFG変換」の詳細な処理を例示するフローチャートである。
【図５０】図５０は図４７におけるs29の内部ループパイプライン合成RTLを対象としたCFG変換の処理を示すフローチャートである。
【図５１】図５１はクロック数取得処理を例示するフローチャートである。
【図５２】図５２は図４７のｓ３１に係るサイクル精度合成RTLを対象とした情報抽出処理の詳細を例示するフローチャートである。
【図５３】図５３は対応FF抽出処理ｓ３の全体的な処理を例示するフローチャートである。
【図５４】図５４は既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出処理を例示するフローチャートである。
【図５５】図５５は最小構成処理を例示するフローチャートである。
【図５６】図５６は既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出処理を例示するフローチャートである。
【図５７】図５７は図５３の対応FF抽出処理におけるｓ３−１０のPipeline合成RTLを対象とした一対一対応関係情報の抽出処理の詳細が例示されるフローチャートである。
【図５８】図５８は図５３の対応FF抽出処理におけるｓ３−１１の入出力スループット比一定RTLを対象とした一対一対応関係情報の抽出処理の詳細を例示するフローチャートである。
【図５９】図５９には図５３の対応FF抽出処理におけるｓ３−１２の入出力スループット比非一定RTLを対象とした一対一対応関係情報の抽出処理の詳細を例示するフローチャートである。
【図６０】図６０は図５３の対応FF抽出処理におけるｓ３−１４の一対一対応関係情報の格納処理の詳細を例示するフローチャートである。
【図６１】図６１は図５３の対応FF抽出処理におけるｓ３−２０のサイクル精度合成RTLを対象とした帰納的不変量の抽出処理の詳細を例示するフローチャートである。
【図６２】図６２には図５３の対応FF抽出処理におけるｓ３−２１のPipeline合成RTLを対象とした帰納的不変量の抽出処理の詳細を例示するフローチャートである。
【図６３】図６３は図５３の対応FF抽出処理におけるｓ３−２２の入出力スループット比一定RTLを対象とした帰納的不変量の抽出処理の詳細を例示するフローチャートである。
【図６４】図６４は図５３の対応FF抽出処理におけるｓ３−２３の入出力スループット比非一定RTLを対象とした帰納的不変量の抽出処理の詳細を例示するフローチャートである。
【図６５】図６５は図５３の対応FF抽出処理におけるｓ３−２４の条件付き変数・FF対応関係情報の抽出・格納処理の詳細を例示するフローチャートである。
【図６６】図６６はリセット伸長サイクル抽出処理の前半の詳細を例示するフローチャートである。
【図６７】図６７はリセット伸長サイクル抽出処理の後半の詳細を例示するフローチャートである。
【図６８】図６８はリセットサイクル期間設定コマンド（reset）の説明図である。
【図６９】図６９はThroughputサイクル設定コマンド（throughput）の説明図である。
【図７０】図７０は入力ポート対応設定コマンド（input_map）の説明図である。
【図７１】図７１は出力ポート対応設定コマンド（output_map）の説明図である。
【図７２】図７２は変数・FF一対一対応設定コマンド（flop_map）の説明図である。
【図７３】図７３は変数・FF非一対一対応設定コマンド（conditional_flop_map）の説明図である。
【図７４】図７４は検証スクリプト改変処理ｓ５の全体を示すフローチャートである。
【図７５】図７５はs5_7の入出力スループット比一定のサイクル精度合成を対象とした入出力対応設定改変処理の前半を例示するフローチャートである。
【図７６】図７６はs5_7の入出力スループット比一定のサイクル精度合成を対象とした入出力対応設定改変処理の後半を例示するフローチャートである。
【図７７】図７７はs5_8の入出力スループット比非一定のサイクル精度合成を対象とした入出力対応設定改変処理を示すフローチャートである。
【図７８】図７８はs5_10のPipeline合成RTLを対象とした入出力対応設定改変処理の前半を示すフローチャートである。
【図７９】図７９はs5_10のPipeline合成RTLを対象とした入出力対応設定改変処理の後半を示すフローチャートである。
【図８０】図８０はs5_11の入出力スループット比一定RTLを対象とした入出力対応設定改変処理の前半を例示するフローチャートである。
【図８１】図８１はs5_11の入出力スループット比一定RTLを対象とした入出力対応設定改変処理の後半を例示するフローチャートである。
【図８２】図８２はs5_12の入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理の開始からの一部の処理を例示するフローチャートである。
【図８３】図８３は図８２に続く処理を例示するフローチャートである。
【図８４】図８４は図８３に続いて終了にいたる処理を例示するフローチャートである。
【図８５】図８５にはs5_13の入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理を例示するフローチャートである。
【図８６】図８６にはs5_14のPipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理の前半を例示するフローチャートである。
【図８７】図８７にはs5_14のPipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理の後半を例示するフローチャートである。
【図８８】図８８はs5_15の入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理の開始から一部を例示するフローチャートである。
【図８９】図８９は図８８に続く処理を例示するフローチャートである。
【図９０】図９０は図８９に続いて終了にいたる処理を例示するフローチャートである。
【図９１】図９１はs5_16のリセットサイクル期間設定改変処理を例示するフローチャートである。
【図９２】図９２はs5_18の変数・FF対応設定生成処理を例示するフローチャートである。
【図９３】図９３はs5_18_1のループあり変数一対一対応関係情報を対象とした変数・FF対応設定生成処理を例示するフローチャートである。
【図９４】図９４はs5_18_2のループあり変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理を例示するフローチャートである。
【図９５】図９５はs5_18_4のループなし変数一対一対応関係情報を対象とした変数・FF対応設定生成処理を例示するフローチャートである。
【図９６】図９６はs5_18_5のループなし変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理を例示するフローチャートである。
【図９７】図９７は高位レベル記述と人手作成RTLを対象とした情報抽出処理の詳細を例示するフローチャートである。
【図９８】図９８は図９７における出力サイクル情報の出力形式を例示する説明図である。
【図９９】図９９はスループットサイクル数の格納形式を例示する説明図である。
【図１００】図１００は入出力サイクル情報抽出処理ｓ２０の詳細処理を例示するフローチャートである。
【図１０１】図１０１はs20_9のPipeline構造仕様検証における詳細処理を例示するフローチャートである。
【図１０２】図１０２はs20_17のThroughputサイクル数推定での詳細な処理を例示するフローチャートである。
【図１０３】図１０３は対応FF抽出処理ｓ３０において第５の実施の形態と第４の実施の形態との間で異なる人手RTLの分類名の対応を示す説明図である。
【図１０４】図１０４は図１０３に従って読み替えを前提とした処理を例示するフローチャートである。
【図１０５】図１０５はリセット伸長サイクル抽出処理ｓ４０において第５の実施の形態と第４の実施の形態との間で異なる人手RTLの分類名の対応を示す説明図である。
【図１０６】図１０６は図１０５に従って読み替えを前提とした処理を例示するフローチャートである。
【図１０７】図１０７は検証スクリプト生成処理ｓ５０において第５の実施の形態と第４の実施の形態との間で異なる人手RTLの分類名の対応を示す説明図である。
【図１０８】図１０８は図１６の第４の実施の形態との相違点を考慮した「検証スクリプト生成処理」を例示するフローチャートである。
【図１０９】図１０９は検証スクリプト生成処理ｓ５０におけるリセットサイクル期間設定生成処理を例示するフローチャートである。
【図１１０】図１１０はコンピュータ及び等価性検証プログラムと等価性検証装置との関係を示す説明図である。
【発明を実施するための形態】
【００１７】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１８】
〔１〕＜フリップ・フロップと高位レベル記述内の逆データ依存関係を伴う変数との対応＞
代表的な実施の形態に係る等価性検証方法は、動作記述としての高位レベル記述（１）と、前記高位レベル記述に基づいて得られたハードウェア記述（３，３０）と、の等価性を、コンピュータを用いて検証する方法である。この方法は、前記コンピュータが、ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係の情報（８）を生成する、生成ステップを含み、前記コンピュータが、前記対応関係の情報を利用して前記等価性を検証する（９）。前記ハードウェア記述は、例えば、高位レベル記述を動作合成制約にしたがって合成したRTL記述などの合成結果、或いは高位レベル記述に基づいて人手を介して作成されたRTL記述とされる。
【００１９】
これによれば、入力と出力による等価検証の単位を小さく分割して個々の検証範囲を小さくしたとき、検証の数が増えることによって逆に検証時間が長くなる事態を、前記対応関係の情報を用いることによって、前記対応関係にない対応関係を間引く事によって、抑制することができる。したがって、高位レベル記述とハードウェア記述との等価性検証に要する処理時間の短縮に寄与することができる。
【００２０】
〔２〕＜帰納法ベースの等価性検証、リセットサイクルの抽出＞
項１において、前記コンピュータは、帰納法により等価性を検証する場合に、フィードバックループを伴うフリップ・フロップ、即ち高位レベル記述にて逆データ依存関係を伴う変数と対応付けられたフリップ・フロップに着目して、フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出し、抽出したリセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態に用いて等価性検証を実施する（図６参照）。
【００２１】
これによれば、帰納法ベースの等価性検証で行われる帰納ステップの深さを求める処理の軽減による高速化と、記号シミュレーションをあらかじめ実施する事で可能となる論理簡約化や前記論理簡約化による内部等価点判定の高速化が期待できるため、その分、等価検証の処理時間短縮に寄与する。
【００２２】
〔３〕＜フリップ・フロップと変数との唯一に決まる対応＞
項１又は項２において、前記コンピュータは、前記対応関係の情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第１対応関係情報を生成する。
【００２３】
これによれば、第１対応関係情報は例えば等価性検証の検証単位であってフィードバックループを伴うフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【００２４】
〔４〕＜フリップ・フロップと変数の時間サイクルなどに依存する対応＞
項３において、前記コンピュータは、前記対応関係の情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報を生成する。
【００２５】
これによれば、フィードバックループのフィードバックサイクル単位でフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【００２６】
〔５〕＜フリップ・フロップと高位レベル記述内の順データ依存関係のみを伴う変数との対応＞
項４において、前記コンピュータが、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係情報を生成する、生成ステップを更に含む。このとき、前記コンピュータが、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性の検証を行う。
【００２７】
これによれば、逆データ依存関係に基づく対応関係情報だけでなく順データ依存関係に基づく対応関係情報も併用して等価検証を行うことができる。
【００２８】
〔６〕＜フリップ・フロップと変数との唯一に決まる対応＞
項５において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第３対応関係情報を生成する。
【００２９】
これによれば、第３対応関係情報は例えば等価性検証の検証単位であってフィードバックループを伴わないフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【００３０】
〔７〕＜フリップ・フロップと変数の時間サイクルなどに依存する対応＞
項６において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報を生成する、等価性検証方法。
【００３１】
これによれば、同じ関数に対して処理サイクル単位で異なるフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【００３２】
〔８〕＜対応関係情報を優先順位に従って追加及び修正＞
項７において、前記コンピュータが、前記リセットサイクル数、逆データ依存関係に係る第１対応関係情報、逆データ依存関係に係る第２対応関係情報、順データ依存関係に係る第３対応関係情報、及び順データ依存関係に係る第４対応関係情報に、追加及び修正を行いながら、等価性を検証する。このとき、前記追加及び修正に関する優先順位として、第１優先順位をリセットサイクル数、第２優先順位を逆データ依存関係に係る第１対応関係情報、第３優先順位を逆データ依存関係に係る第２対応関係情報、第４優先順位を順データ依存関係に係る第３対応関係情報、第５優先順位を順データ依存関係に係る第４対応関係情報とする。等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追及び修正を行う（図１０、図１５参照）。
【００３３】
これによれば、等価性の検証処理時間短縮に寄与する度合いが大きいと考えられる要素ほど追加及び修正に高い優先順を与える。第２関係情報よりも第１関係情報を用いた方が等価検証時間の短縮に寄与し、順データ依存関係に係る関係情報よりも逆データ依存関係に係る関係情報を用いた方が等価検証時間の短縮に寄与すると考える。したがって、等価検証に用いる依存関係情報などの情報量が過大にならないようにすることができ、制約時間内に等価検証を完了できないときに下位の依存関係情報を追加又はリセットサイクル数の修正などを行って、効率的に等価性の検証を完了することができる。
【００３４】
〔９〕＜フリップ・フロップと高位レベル記述内の逆データ依存関係を伴う変数との対応＞
別の実施の形態に係る等価性検証プログラム（４０）は、動作記述としての高位レベル記述（１）と、前記高位レベル記述に基づいて得られたハードウェア記述（３，３０）と、の等価性を、コンピュータ（４１）に検証させるプログラムであって、前記コンピュータに以下のステップを実行させる。第１に、前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報（８）を等価性検証の支援情報として生成する、生成ステップ（７，１２）を実行させる。第２に、前記対応関係情報を利用して前記等価性の検証を行う検証ステップ（９）を実行させる。
【００３５】
これによれば、逆データ依存関係に係る対応関係情報を用いて等価性の検証を行うという項１の方法を容易に実現することが可能になる。要するに、高位レベル記述とハードウェア記述との等価性検証の処理時間を容易に短縮可能にすることができる。
【００３６】
〔１０〕＜帰納法ベースの等価性検証、リセットサイクルの抽出＞
項９において、前記生成ステップは、前記コンピュータに、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出させる。前記検証ステップは、前記コンピュータに、抽出された前記リセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態に用いて、帰納法により等価性を検証させる。
【００３７】
これによれば、項２と同様に、等価検証の処理時間短縮に寄与する。
【００３８】
〔１１〕＜フリップ・フロップと変数との唯一に決まる対応＞
項９又は１０において、前記生成ステップは、前記コンピュータに、前記逆データ依存に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第１対応関係情報を生成させる。
【００３９】
これによれば、項３と同様に、フィードバックループを伴うフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【００４０】
〔１２〕＜フリップ・フロップと変数の時間サイクルなどに依存する対応＞
項１１において、前記生成ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報を生成させる。
【００４１】
これによれば、項４と同様に、フィードバックループのフィードバックサイクル単位でフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【００４２】
〔１３〕＜順データ依存関係にあるフリップ・フロップと高位レベル記述内変数との対応＞
項１２において、前記生成ステップは更に、前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係を示す情報を等価性検証の支援情報として生成させる。前記検証ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証させる。
【００４３】
これによれば、項５と同様に、順データ依存関係に係る対応関係情報も併用して等価検証を可能にする。
【００４４】
〔１４〕＜フリップ・フロップと変数との唯一に決まる対応＞
項１３において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第３対応関係情報を生成させる。
【００４５】
これによれば、項６と同様に、フィードバックループを伴わないフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【００４６】
〔１５〕＜フリップ・フロップと変数の時間サイクルなどに依存する対応＞
項１４において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報を生成させる。
【００４７】
これによれば、項７と同様に、同じ関数に対して処理サイクル単位で異なるフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【００４８】
〔１６〕＜対応関係情報を優先順位に従って追加及び修正＞
項１５において、前記生成ステップは、前記コンピュータに、前記リセットサイクルパス、逆データ依存関係に係る第１対応関係情報、逆データ依存関係に係る第２対応関係情報、順データ依存関係に係る第３対応関係情報、及び順データ依存関係に係る第４対応関係情報に、優先順位に従って必要な追加及び修正を実行させる。前記検証ステップは、コンピュータに、前記必要な追加及び修正を受けた前記等価性検証の支援情報を反映して等価性を検証させる。前記追加及び修正に関する優先順位として、第１優先順位をリセットサイクルパス、第２優先順位を逆データ依存関係に係る第１対応関係情報、第３優先順位を逆データ依存関係に係る第２対応関係情報、第４優先順位を順データ依存関係に係る第３対応関係情報、第５優先順位を順データ依存関係に係る第４対応関係情報とする。等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追及び修正を行う。
【００４９】
これによれば、項８と同様に、等価検証に用いる依存関係情報などの情報量が過大にならないようにすることができ、制約時間内に等価検証を完了できないときに下位の依存関係情報を追加又はリセットサイクルパスの修正などを行って、効率的に等価性の検証を完了することができる。更に、依存関係情報を用いる順番を最適することができ、等価性の検証処理時間の更なる短縮に寄与する。
【００５０】
〔１７〕＜フリップ・フロップと高位レベル記述内の逆データ依存関係を伴う変数との対応＞
更に別の実施の形態に係る等価性検証装置（４２）は、動作記述としての高位レベル記述（１）と、前記高位レベル記述に基づいて得られたハードウェア記述（３，３９と、の等価性を、プログラム処理によって検証する。この等価性検証装置は、生成部（４１Ａ)と検証部（４２Ｂ）を有する。生成部は、前記プログラム処理により、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報（８）を等価性検証の支援情報として生成する（７，１２）。検証部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う（９）。
【００５１】
これによれば、項１と同様に、逆データ依存関係に係る対応関係情報を用いて等価性の検証を行うから、高位レベル記述とハードウェア記述との等価性検証の処理時間を短縮可することができる。
【００５２】
〔１８〕＜帰納法ベースの等価性検証、リセットサイクルの抽出＞
項１７において、前記生成部は、前記プログラム処理により、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出する。前記検証部は、前記プログラム処理により、抽出した前記リセットサイクル数分の記号シミュレーション結果を前記フィードバックループの初期状態として、帰納法により等価性を検証する。
【００５３】
これによれば、項２と同様に、等価検証の処理時間を短縮することができる。
【００５４】
〔１９〕＜フリップ・フロップと変数との唯一に決まる対応＞
項１７又は１８において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第１対応関係情報を生成する。
【００５５】
これによれば、項３と同様に、フィードバックループを伴うフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【００５６】
〔２０〕＜フリップ・フロップと変数の時間サイクルなどに依存する対応＞
項１９において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報を生成する。
【００５７】
これによれば、項４と同様に、フィードバックループのフィードバックサイクル単位でフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【００５８】
〔２１〕＜順データ依存関係にあるフリップ・フロップと高位レベル記述内変数との対応＞
項２０において、前記生成部は更に、前記プログラム処理により、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係を示す情報を等価性検証の支援情報として更に生成する。前記検証部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証する。
【００５９】
これによれば、項５と同様に、順データ依存関係に係る対応関係情報も併用して等価検証を可能にする。
【００６０】
〔２２〕＜フリップ・フロップと変数との唯一に決まる対応＞
項２１において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第３対応関係情報を生成する。
【００６１】
これによれば、項６と同様に、フィードバックループを伴わないフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【００６２】
〔２３〕＜フリップ・フロップと変数の時間サイクルなどに依存する対応＞
項２２において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報を生成する。
【００６３】
これによれば、項７と同様に、同じ関数に対して処理サイクル単位で異なるフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【００６４】
〔２４〕＜対応関係情報を優先順位に従って追加及び修正＞
項２３において、前記生成部は、前記プログラム処理により、前記リセットサイクルパス、逆データ依存関係に係る第１対応関係情報、逆データ依存関係に係る第２対応関係情報、順データ依存関係に係る第３対応関係情報、及び順データ依存関係に係る第４対応関係情報に、優先順位に従って必要な追加及び修正を行う。前記検証部は、前記プログラム処理により、前記必要な追加及び修正を受けた前記等価性検証の支援情報を反映して等価性を検証する。前記追加及び修正に関する優先順位として、第１優先順位をリセットサイクルパス、第２優先順位を逆データ依存関係に係る第１対応関係情報、第３優先順位を逆データ依存関係に係る第２対応関係情報、第４優先順位を順データ依存関係に係る第３対応関係情報、第５優先順位を順データ依存関係に係る第４対応関係情報とする。等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追及び修正を行う。
【００６５】
これによれば、項８と同様に、等価検証に用いる依存関係情報などの情報量が過大にならないようにすることができ、制約時間内に等価検証を完了できないときに下位の依存関係情報を追加又はリセットサイクルパスの修正などを行って、効率的に等価性の検証を完了することができる。
【００６６】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００６７】
２−１．第１の実施の形態
《動作合成と等価検証の全体フロー》
図１には高位レベル記述から等価検証結果を得るまでの全体的な処理フローが例示される。動作合成可能な高位レベル記述（動作記述とも称する）１は、システムベル言語であるＳｙｓｔｅｍＣやプログラミング言語Ｃなどを用いて記述される。動作合成スクリプト２は、高位レベル記述からどのような回路を合成するかの指定を行った記述（動作合成制約）である。動作合成処理４は、動作合成スクリプト２にしたがって高位レベル記述１の動作合成を実施し、動作合成結果３としてＲＴＬ（レジスタ・トランスファー・レベル）のハードウェア記述言語による記述を生成する処理である。この動作合成結果を以下単にＲＴＬ記述３とも称する。動作合成処理４はＥＷＳ（エンジニアリングワークステーション）又はＰＣ（パーソナルコンピュータ）などのコンピュータによって動作合成プログラムを実行することで実現される。ＲＴＬ記述は図２に概念的に例示されるように、動作合成スクリプト２による動作合成制約によって、同一の高位レベル記述からレイテンシ、スループット又は動作周波数などの異なるＲＴＬ記述を生成することが可能にされる。
【００６８】
図１において、動作合成処理４は、ＲＴＬ記述のほかに、等価性検証の実行に必要となる情報が記述された雛形の検証スクリプト（以下単に雛形検証スクリプトとも称する）５を生成する。雛形の検証スクリプト５には、高位レベル記述とＲＴＬ記述での入力・出力ポートの対応関係や、双方の出力ポートの比較サイクルなどが記述されている。
【００６９】
これに加え、動作合成処理４は、スケジューリングやリソース共有、更に動作合成の実行後であってＲＴＬ記述を出力する前に取得可能な状態遷移表６を生成する。
【００７０】
情報抽出生成処理７は、高位レベル記述１、動作合成結果としてのＲＴＬ記述３、状態遷移表６、及び雛形検証スクリプト５に基づいて、ＲＴＬ記述におけるフリップ・フロップとしてのレジスタと高位レベル記述内の変数との依存関係を明瞭にするための情報を生成し、検証スクリプト８として保持する。検証スクリプト８は、前記雛形検証スクリプト５に対して、前記依存関係を明瞭にするための情報の追加や前記依存関係を明瞭にするための情報による修正を行った情報として位置付けられる。
【００７１】
上記依存関係を明瞭にするための情報として、合成結果としてのＲＴＬ記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報を生成する。この逆データ依存関係に係る対応関係情報には、変数にフリップ・フロップを一対一に対応させる第１対応関係情報（ループ有り変数一対一対応関係情報）と、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第２対応関係情報（ループ有り変数非一対一対応関係情報）とがある。
【００７２】
上記依存関係に係る対応関係を明瞭にするための情報として、更に、合成結果としてのＲＴＬ記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係情報を生成する。この順データ依存関係に係る対応関係情報には、変数にフリップ・フロップを一対一に対応させる第３対応関係情報（ループ無し変数一対一対応関係情報）と、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第４対応関係情報（ループ無し変数非一対一対応関係情報）とがある。
【００７３】
その他に、上記依存関係を明瞭にするための情報として、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出する。抽出されたリセットサイクル数分の記号シミュレーション結果を初期状態として前記フィードバックループに与えて等価性の検証に利用する。本明細書では周期的な状態遷移ループを含む広い概念としてフィードバックループを把握する。また、本明細書ではフリップ・フロップを単にレジスタ若しくはＦＦとも記す。
【００７４】
情報抽出生成処理７において、上記依存関係を明瞭にするために抽出すべき情報は、上記情報の内の一部であってもよいし、最初から全ての情報を用いなくてもよく、等価検証の進捗に併せて追加するようにしてもよい。どの情報を先に用いるかは、等価検証処理時間の短縮に効果のあるものほど先に用いることが望ましい。例えば使用優先度の第１優先順位を、リセットサイクル期間（前記必要な最小のフリップ・フロップ段数のリセットサイクル数）、及びリセットサイクル期間分の有界等価性検証の実行（ファインド・エラー・モードによるシミュレーション結果）とする。その次に、高位レベル記述内の変数で、動作合成結果としてのＲＴＬ記述にてフィードバックループを伴うレジスタに対応付けられる可能性のある変数の情報を抽出し、優先度の高いものから順に、前記変数とＲＴＬ記述内の対応するレジスタとの一対一対応関係情報（ループ有り変数一対一対応関係情報）、前記変数とＲＴＬ記述内の対応するレジスタとの、必ずしも１対１ではない対応関係情報（ループ有り変数非一対一対応関係情報）、前記以外の高位レベル記述内の変数とＲＴＬ記述内の対応するレジスタとの一対一対応関係情報（ループ無し変数一対一対応関係情報）、前記以外の高位レベル記述内の変数とＲＴＬ記述内の対応するレジスタとの非一対一対応関係情報（ループ無し変数非一対一対応関係情報）とすればよい。
【００７５】
高位等価性検証処理９では、あらゆる入力シーケンスを想定して、同等の入力を高位レベル記述とＲＴＬ記述との双方に与えたとき、双方の出力が一致するか否かを判別する。例えば帰納法ベースのモデルチェッキングにて等価検証を行う。等価検証では、ＲＴＬ記述及び高位レベル記述と共に、上記依存関係を明瞭にするための情報を用いて、等価性検証に要する時間を短縮する。１０は高位等価性検証処理９による検証結果である。
【００７６】
等価性検証時間を短縮するために上記依存関係を明瞭にするための情報を用いることによる作用について図３ないし図６の概念図を参照しながら説明する。
【００７７】
図３には特定の変数とレジスタとの対応関係を与えることによる効果が概念的に例示される。論理コーンを等価性検証の単位とすると、論理コーンの論理規模が大きいとそれに応じて検証範囲も膨大になる。これに対して、レジスタを終点とする、論理規模の小さな論理コーンに分割すれば、個々の論理コーンにおける検証範囲が小さくなる。一方、個々の論理コーンの規模は小さくなっても、図４に例示されるように検証対象数が増大することによって、逆に検証時間が増えることも懸念される。したがって、コーンの分割によって等価検証時間の短縮効果のあるものについてだけ論理コーンを分割することが好ましい。本発明者が着眼したように、フィードバックループを構成するレジスタに対して逆データ依存関係を伴う変数との対応を指定し、その指定されたレジスタに関して論理コーンを分割して等価性検証を行うようにする。図５に例示されるように、フィードバックループはレジスタの出力がレジスタの入力で参照される関係である。当該レジスタに対応する変数との対応関係をレジスタマップとして与えることで、そのフィードバックループを切断して得られる論理コーン同士の等価性検証に帰着する事ができる。即ち、フィードバックループのレジスタの出力を検証するのに、当該レジスタの複数サイクルに亘る前の多数の状態を検証対象にしなければならなくなって検証範囲が拡大するという事態の発生を抑制することができる。
【００７８】
図６には前記リセットサイクル数を抽出して利用する場合の作用が概念的に例示される。フィードバックループにループフリーな状態遷移パスが繋がっている場合に、リセット状態Ｓ０を初期状態とするその全体を帰納法ベースで等価性を完全証明しようとすると、Ｓｎの状態が決まらないフィードバックループの状態も確定されず、検証結果を得るのに多大に処理時間を要することになる。このとき、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数を、前記フィードバックループに繋がるループフリーな状態遷移パス上のフリップ・フロップ列（リセットサイクルパス）Ｓ０〜Ｓｎの段数とし、それによるリセットサイクル数を抽出する。前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数については、着目するフィードバックループに繋がるリセットサイクルパスの内の最大パスにおいて、考慮すれば済む最小フリップ・フロップ段数、と把握することができる。これを簡略化して、最小最大パス上のフリップ・フロップ段数、とも称する。抽出されたリセットサイクルパスに対して前記リセットサイクル数分の記号シミュレーション結果を前記フィードバックループにおける状態Ｓｎの初期状態として前記フィードバックループの等価性の検証に利用する。要するに、分割点Ｓｎまでを有界検証手法であるファインド・エラー・モード（Ｆｉｎｄ  Ｅｒｒｏｒ  Ｍｏｄｅ）で検証し、周期的な状態遷移ループに対してフル  プルーフ  モード（Ｆｕｌｌ  Ｐｒｏｏｆ  Ｍｏｄｅ）のような帰納法ベースの完全証明による等価検証を行うようにすることができる。全体をフル  プルーフ  モードで検証する場合と同様の範囲について検証範囲を分割して処理時間の短縮を図ることができる。
【００７９】
上述の作用説明とは一部重複することになるが、前記依存関係を明瞭にするための情報を用いることによる作用効果について詳細に補足する。
【００８０】
先ず、特定の変数とＦＦとの対応関係を与える事による作用効果について補足する。例えば図７に示された高位レベル記述を一例とすると、図８には高位記述に対応するデータフローが例示され、図９はそれに対応する動作合成結果の回路図を例示する。
【００８１】
高位レベル記述内の変数とＲＴＬ記述内のＦＦとの対応関係情報を与える事で、等価性判定で比較すべきデータフローの分割が可能となるため、判定対象規模削減による高速化が可能となる。図７乃至図９に例示されるように、変数とＦＦの対応関係を示す事で、以下のような判定高速化が可能となる。即ち、変数ｘ、yとＦＦｘ、ＦＦｙの夫々の対応関係が与えられていると仮定する。先ず、aとa、(b∧c)∧dとb∧(c∧d)が等価である事を検証する。これらは等価である。ｆcとfRTLが等価である事は、双方、等価な入力を持つＥＯＲ（Exclusive OR）演算である事により証明される。
【００８２】
一方、対応関係が正しいか否かの検証が等価性検証では必要となり、この検証が余分に実行されるため、その実行時間オーバヘッドが無視できなくなる、という問題がある。従って、例えば全対応関係情報を与える事は、一般に好ましくないと考えられる。高位レベル記述内の逆データ依存関係を持つ変数に着目した場合、対応するＲＴＬ記述内のＦＦは、ＲＴＬ構造内でフィードバックループを持つＦＦとなっており、一般に、この構造はフィードバックループを伴わない構造に比べ、大きな状態空間を構成する。それ故、逆データ依存関係を持つ変数に着目し、変数・ＦＦ対応関係情報を与えた場合、フィードバックループが切断可能となるため、検証対象の状態空間が小さくなり、等価性判定処理の高速化が達成できる。逆データ依存関係を持つ変数に着目する事で、変数とＦＦの対応関係の指定数を削減でき、変数とＦＦとの対応関係が正しいかの検証オーバヘッドも削減できる。
【００８３】
次に、リセットサイクル算出による作用効果を補足する。
【００８４】
高位等価性検証の一つの実現手段では、高位レベル記述とＲＴＬ記述双方に対して、記号シミュレーション（単に信号Simとも記す）による状態展開を実施するなどで、全状態にて対応する出力が同一の値を出力する事を検証する。ここで、対応する出力が同一の値となるか否かは、命題論理で記述可能であるため、多くの場合、命題論理を対象とした安全性（Safety Property）検証を実施する事となる。
【００８５】
安全性検証の手法として利用可能なものとしては、
１．帰納法ベースの検証技術（C. A. J. van Eijk, "Sequential Equivalence Checking Based on Structural Similarities," IEEE Trans. CAD, pp.814-819, July 2000.、
M. Sheeran, S. Singh and G. Stalmarck, “Checking Safety Properties Using Induction and a SAT-Solver,“ In Proc. of Int. Conf. Formal Methods in Computer-Aided Design (FMCAD), pp.108-125, 2000.、
P. Bjesse and K. Claessen, "SAT-Based Verification without State Space Traversal," In Proc. of Int. Conf. Formal Methods in Computer-Aided Design (FMCAD), 2000.、及び
Alan Mishchenko, Michael Case, Robert Brayton, and Stephan Jang, “Scalable and Scalably-Verifiable Sequential Synthesis," In Proc. of ICCAD, pp.234-241, 2008.参照）
２．記号モデル検査法（Edmund M. Clarke and Daniel Kroening, “Checking Consistency of C and Verilog Using Predicate Abstraction and Induction,” In Proc. of ICCAD, pp.66-72, 2004.参照）
３．非有界モデル検査法（J. Baumgartner, A. Kuehlmann, and J. Abraham, “Property Checking via Structural Analysis,” In Proc of the 14th Int. Conf. on Computer Aided Verification (CAV), LNCS Vol.2404, pp.151-165, 2002.、
Daniel Kroening, "Computing Over-Approximations with Bounded Model Checking," Electronic Notes in Theoretical Computer Science Vol.144, pp.79-92, 2006.、及び
Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.参照）
４．帰納的不変量抽出に基づく、到達可能状態空間近似による検証（Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.参照）
などが挙げられる。
【００８６】
上記どの技術を用いるとしても、リセットサイクルを適切に与え、そのサイクル期間分、記号Simにて状態展開を行った結果得られた状態を初期状態とする事で、次の効果が得られる。
【００８７】
第１に、G. Ritter, "Formal Sequential Equivalence Checking of Digital System by Symbolic Simulation," PhD Thesis, Darmstat University of Technology, Germany, & Universite Joseph Fourier, France, March 2001.の文献に示されている、定数伝播や、条件分割による各変数やBitの取り得る値の範囲の同定による論理簡約化により、内部等価点判定の高速化や、次状態算出での像計算の高速化による、等価性検証高速化が期待できる。
【００８８】
第２に、上記２．、３．、４．のように、到達可能状態の算出が必要となる場合、出力値の一致が証明できない範囲で、論理簡約化を期待した状態展開を予め行っておく事で、次状態算出での像計算高速化による等価性判定処理の高速化が期待できる。
【００８９】
第３に、上記１．の手法では、K回まで状態展開した状態空間で出力値が一致している事を検証し、K+1回まで状態展開した状態空間でも同様に成立する事を示す必要があるが、このKの値により検証速度が左右されるため、このKを適切に選定する事で、検証速度向上が期待できる。
【００９０】
一方、リセットサイクルが長いと、新たに設定した初期状態が大きくなるという問題もあり、Pankaj Chauhan, Edmund M. Clarke, and Daniel Kroening, “A SAT-Based Algorithm for Reparameterization in Symbolic Simulation,“ In Proc. of DAC, pp.524-529, 2004.の文献によるReparameterization手法による新たな初期状態表現の簡約化を行ったとしても、反って処理が低速となる事が懸念される。
【００９１】
従って、上記に示した効果を得るためには、適切なリセットサイクル数の算出が必要となる。本実施の形態の手法では、ＲＴＬ構造にてフィードバックループを構成するＦＦ、即ち高位レベル記述にて逆データ依存関係がある変数と対応付けられたＦＦに着目し、フィードバックループに対してループフリーな最小最大パス上のＦＦ段数を、リセットサイクルとして抽出する。その理由は下記である。
【００９２】
ＲＴＬ構造に着目した場合、フィードバックループを伴うＦＦが存在する場合、そのループに対してループフリーな最小最大パスのＦＦ段数分のサイクル以上のサイクル分の状態展開を行わない限り、記号Simでの記号値の伝播は、全ＦＦに行き渡らない。
【００９３】
ＦＦの段数に着目しているため、このループが持つ状態空間を覆うのに必要となるサイクルよりも十分小さな値となっており、リセットサイクル後に得られる新たな初期状態も大きくならない事が予想される。
【００９４】
従って、２．，３．，４．の手法の場合、このサイクル分だけ状態展開を行ったとしても、到達可能な状態に必要な展開数以下となり、論理簡約化の恩恵を受けられるものと考えられる。
【００９５】
また、１．の手法の場合であっても、展開サイクル数の選び方、即ち全ＦＦ内の一部のＦＦからなるループに着目した選び方から、このサイクルが全ＦＦの成す状態空間内のループフリーな最小最大パスを超える事はないため、M. Sheeran, S. Singh and G. Stalmarck, “Checking Safety Properties Using Induction and a SAT-Solver,“ In Proc. of Int. Conf. Formal Methods in Computer-Aided Design (FMCAD), pp.108-125, 2000.の文献に示されたInduction Depth（帰納ステップの深さ）Kを大きくする事での非効率化、即ち必要以上の探索による処理低速化、は発生せず、当該文献に示されたKを0より大きな値に設定する事での帰納ステップ削減による高速化と、論理簡約化による内部等価点判定の高速化が期待できる。
【００９６】
上記議論により、提案手法によるリセットサイクル算出により、安全性検証に帰着しての等価性検証手法は、その実現手法に依らず、処理高速化の達成が可能であると考えられる。
【００９７】
一方、リセットサイクルが長いと、新たに設定した初期状態が大きくなるという問題があり、Pankaj Chauhan, Edmund M. Clarke, and Daniel Kroening, “A SAT-Based Algorithm for Reparameterization in Symbolic Simulation,“ In Proc. of DAC, pp.524-529, 2004.の文献のReparameterization手法による新たな初期状態表現の簡約化を行ったとしても、状態遷移表現が複雑となる虞があるため、反って処理が低速となる事が懸念される。
【００９８】
本実施の形態では、ＲＴＬ構造にてフィードバックループを構成するＦＦ、即ち高位レベル記述にて逆データ依存関係がある変数と対応付けられたＦＦに着目し、フィードバックループ内のループフリーな最小最大パス上のＦＦ段数を、リセットサイクル数として抽出する。その理由は下記である。ＲＴＬ構造に着目した場合、フィードバックループを伴うＦＦが存在する場合、そのループ内の内部ループフリーな最小最大パスのＦＦ段数分のサイクル以上のサイクル分の状態展開を行わない限り、記号Simでの記号値の伝播は、全ＦＦに行き渡らず、定数伝播などでの論理簡約化の効果を期待できない。
【００９９】
上記リセットサイクル算出により、その実現手法に依らず、高位レベル記述とＲＴＬ記述の既存等価性検証の処理高速化の達成が可能であると考えられる。
【０１００】
上記情報抽出生成処理７及び高位等価検証処理９は、図１１０に例示されるように、ＥＷＳ（エンジニアリングワークステーション）又はＰＣ（パーソナルコンピュータ）などのコンピュータ４１によって等価性検証プログラム４０を実行することで実現される。等価性検証プログラムは、高位レベル記述１と、この高位レベル記述１を動作合成処理４によって動作合成したＲＴＬ記述３と、の等価性を、コンピュータに検証させるプログラムである。このプログラムは、第１に前記コンピュータに、前記合成結果におけるフィードバックループを伴うレジスタとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報を等価性検証の制約情報として生成する、生成ステップとしての情報抽出生成処理７を実行させる。第２に、前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う検証ステップとしての高位等価性検証処理９を実行させる。各処理７，９の内容については既に説明した通りである。
【０１０１】
コンピュータ４１に前記等価性検証プログラム４０をインストールした装置が等価性検証装置４２を構成する。この等価性検証装置は、コンピュータのプログラム処理によって前記情報抽出処理７を行う生成部４１Ａと、コンピュータのプログラム処理によって前記高位等価性検証処理を行う検証部４２Ｂとを有する。生成部及び検証部は、コンピュータに特定のプログラムを実行させて実現される機能実現手段として位置付けられる。
【０１０２】
２−２．第２の実施の形態
《高位等価性検証に時間制約を設ける》
図１０には高位等価性検証に時間制約を設けた場合の全体的な等価検証処理フローが例示される。図１との相違点は時間制約を設けて高位等価検証を行うようにしたことである。即ち、高位等価検証処理９が制約時間内に完了したか否かの判別処理１１を行い、制約時間内に完了しなかったと判別されたときは、検証スクリプトの設定変更処理１２が行われ、これによる設定変更内容が検証スクリプト８に反映される。この後、設定変更内容が反映された検証スクリプト８を用いて、高位等価性検証処理が開始される。
【０１０３】
検証スクリプトの設定変更処理１２は、優先度に従って、上記依存関係を明瞭にするための情報の追加や修正を行う処理である。例えば、リセットサイクルパスの情報を抽出しフィードバックループの等価性の検証にて当該リセットサイクルパスに着目した記号Ｓimを実施する事での初期状態を与えて利用可能にすることを最優先度とする。以下、優先度の高い情報として、第１対応関係情報（ループ有り変数一対一対応関係情報）、第２対応関係情報（ループ有り変数非一対一対応関係情報）、第３対応関係情報（ループ無し変数一対一対応関係情報）、第４対応関係情報（ループ無し変数非一対一対応関係情報）を、制約時間が経過する毎に、順次検証スクリプト８に追加する処理を行っていく。途中で、リセットサイクルパスを修正する設定変更処理を加えることも可能である。更に、優先度に従っていくつかの対応関係情報をまとめて検証スクリプト８に追加することも可能である。
【０１０４】
代表的な例として、情報抽出生成処理において上記依存関係を明瞭にするための情報を抽出して優先順位付けを行う場合には、以下１）〜６）の順番に情報の抽出を行う。
１）高位レベル記述内の変数で、動作合成結果としてのＲＴＬ記述にてフィードバックループを伴うレジスタに対応付けられる可能性のある変数の情報。
２）抽出した前記変数と、ＲＴＬ記述内の対応するレジスタとの一対一対応関係情報（ループ有り変数一対一対応関係情報）。
３）抽出した前記変数と、ＲＴＬ記述内の対応するレジスタとの、必ずしも１対１ではない対応関係情報（ループ有り変数非一対一対応関係情報）。
４）抽出した前記以外の高位レベル記述内の変数と、ＲＴＬ記述内の対応するレジスタとの一対一対応関係情報（ループ無し変数一対一対応関係情報）。
５）抽出した前記以外の高位レベル記述内の変数と、ＲＴＬ記述内の対応するレジスタとの非一対一対応関係情報（ループ無し変数非一対一対応関係情報）。
６）リセットサイクル期間（リセットサイクルパス）、及びリセットサイクル期間分の有界等価性検証の実行（ファインド・エラー・モードによるシミュレーション結果）
それらの情報に対して６）、２）、３）、４）、５）の順で優先順位を付け、その順位に従って、検証スクリプトへの情報追加及び修正を実施すればよい。
【０１０５】
時間制約を設ける本実施の形態においては、最初に６）の条件を用いて等価性の検証を行ったとき制約時間内で実行を完了することができない場合に、検証スクリプト設定変更処理１２で、優先度に従い、変数とレジスタとの対応関係情報を検証スクリプト８に追加する処理を行って、高位等価性検証を実施すればよい。
【０１０６】
第２の実施の形態では上記情報抽出生成処理７、検証スクリプト設定変更処理及び高位等価検証処理９は、ＥＷＳ（エンジニアリングワークステーション）又はＰＣ（パーソナルコンピュータ）などのコンピュータによって等価性検証プログラムを実行することで実現される。第２の実施の形態における等価性検証プログラムは図１０の処理手順に従って高位レベル記述１とＲＴＬ記述３との等価性を、コンピュータに検証させるプログラムである。コンピュータに当該等価性検証プログラムをインストールした装置が等価性検証装置を構成するという関係は第１の実施の形態と同じである。
【０１０７】
２−３．第３の実施の形態
《ＲＴＬ記述から直接状態遷移表を抽出》
図１１にはＲＴＬ記述から直接状態遷移表を抽出するようにした場合の全体的な等価検証処理フローが例示される。図１との相違点は状態遷移表抽出処理１３によってＲＴＬ記述３から直接状態遷移表６を抽出するようにしたことである。
【０１０８】
状態遷移表６は、所謂データパス付き状態遷移図（FSMD：Finite State Machine with Datapath）の表形式である。HDL（ハードウェア記述言語）でのＲＴＬ記述における、所謂２プロセスモデルに直接対応する。２プロセスモデルとは、状態ＦＦやレジスタを表すＦＦなどのフリップ・フロップを記述するalwaysブロックと、各状態または状態遷移にて実行する実行文からなる組合わせ回路を表すalwaysブロックの２つのプロセスにて記述されたＲＴＬ記述形式である。動作合成ツールからの合成結果ＲＴＬが、２プロセスモデルで記述されている場合は、組合わせ回路記述から、状態ＦＦを識別可能であり、レジスタＦＦへの代入操作も識別可能であるため、直接合成結果ＲＴＬから状態遷移表を抽出可能である。その場合、動作合成ツールからの状態遷移表生成は、ＲＴＬからの抽出にて代替可能である。図１２に２プロセスＲＴＬ記述の例が示される。これに対応するＦＳＭＤ記述は図１３に例示され、対応する状態遷移表６は図１４に例示される。図１４に例示されるように、状態遷移表６は、現状態から次状態への遷移条件を伴う。状態遷移表６には状態遷移の中で、レジスタＦＦへの代入操作及びその実行条件が記述されている。状態遷移表の更なる詳細についてはH.-P. Juan, “Design Methodology and Algorithms for Interactive Behavioral Synthesis,”PhD Thesis, CECS U.C Irvine, 1997.の文献がある。
【０１０９】
図１５には合成結果であるＲＴＬ記述が常に２プロセスモデルであって、時間制約を設けて高位等価性検証を実施する場合の全体的な等価検証処理フローが例示される。
【０１１０】
２−４．第４の実施の形態
《情報抽出処理の概要》
図１６には情報抽出処理７について詳細な処理手順が全体的に例示される。図１６において情報抽出処理７は、データ依存解析処理ｓ１、入出力サイクル情報抽出処理ｓ２、対応ＦＦ抽出処理ｓ３、リセット伸長サイクル抽出処理ｓ４、及び検証スクリプト改変処理ｓ５から成る。
【０１１１】
データ依存解析処理ｓ１では、高位レベル記述１を入力として、変数のデータ依存関係解析を実施し、各変数に対して、合成結果ＲＴＬ記述３にてフィードバックループを伴うＦＦに対応付けられる可能性があるか否か推定し、その分類結果を変数依存関係情報２１に格納する。
【０１１２】
入出力サイクル情報抽出処理ｓ２では、高位レベル記述１と動作合成スクリプト２を読み込み、合成結果ＲＴＬ記述３がパイプライン回路であるか否か、および各入力・出力のスループットが定数サイクルであるか否かの解析を実施する。定数サイクルの場合は、各入力・出力のスループットサイクル数を取得する。パイプライン回路の場合はこれに加えて、レイテンシサイクル数を取得する。また、入力高位レベル記述をサイクル精度記述と見做してのスループットサイクル数を取得する。これら取得した情報を入出力サイクル情報２０に格納する。
【０１１３】
対応ＦＦ抽出処理ｓ３では、高位レベル記述１、合成結果ＲＴＬ記述３、変数依存関係情報２１、状態遷移表６、及び入出力サイクル情報２０を読み込み、高位レベル記述１内の変数と合成結果ＲＴＬ記述３内のＦＦの対応関係を解析する。ここで、合成結果ＲＴＬ記述３にてフィードバックループを伴うＦＦに対応付けられる可能性のない変数（以下、ループなし変数）に関しては、一対一に対応するＦＦが各変数に存在するか否かを解析し、存在した場合、その対応関係をループなし変数一対一対応関係情報２４に格納する。存在しない場合、その対応関係をループなし変数非一対一対応関係情報２５に格納する。合成結果ＲＴＬ記述３にてフィードバックループを伴うＦＦに対応付けられる可能性がある変数（以下、ループあり変数）に関しては、先ず一対一に対応するＦＦが各変数に存在するか否かを解析し、存在した場合、その対応関係をループあり変数一対一対応関係情報２２に格納。一対一に対応するＦＦが存在しなかった変数が残っていれば、状態遷移表６のＦＦへの代入条件に着目して、条件付きで対応付けられるＦＦが存在するか否かを解析し、存在した場合、その対応関係をループあり変数非一対一対応関係情報２３に格納する。
【０１１４】
リセット伸長サイクル抽出処理ｓ４では、合成結果ＲＴＬ記述３、ループあり変数一対一対応関係情報２２、及びループあり変数非一対一対応関係情報２３、入出力サイクル情報２０を入力とし、ＲＴＬ記述３内のループあり変数に対応付けられたＦＦの成すフィードバックループが存在するか否かを解析する。存在した場合、各フィードバックループ内の全ＦＦに値伝播を行うのに必要となる最小のサイクル数を求める。このサイクル情報の中で、最大値をパイプライン回路でない場合、リセットサイクル期間情報２６に格納する。パイプライン回路である場合、この最大値とレイテンシサイクル数−１の値で大きい方を、リセットサイクル期間情報２６に格納する。一方、ＲＴＬ記述３にてフィードバックループを構成しなかった場合は、この変数の持つ対応関係情報を、夫々ループなし変数一対一対応関係情報２４とループなし変数非一対一対応関係情報２５に格納し、この変数を夫々夫々ループあり変数一対一対応関係情報２２とループあり変数非一対一対応関係情報２３から削除する。
【０１１５】
検証スクリプト改変処理ｓ５では、高位レベル記述１、合成結果ＲＴＬ記述３、入出力サイクル情報２０、４つの変数・ＦＦ対応関係情報（ループあり変数非一対一対応関係情報２３、ループあり変数一対一対応関係情報２２、ループなし変数非一対一対応関係情報２５、ループなし変数一対一対応関係情報２４）、リセットサイクル期間情報２６、及び動作合成処理４が出力した雛形検証スクリプト５を入力として、これら情報を、雛形検証スクリプト５を修正する事で追加し、検証スクリプト８を出力する。
【０１１６】
《データ依存解析処理》
データ依存解析処理ｓ１について詳述する。
【０１１７】
高位レベル記述１を入力として、既存コンパイラ技術を用いて、変数のデータ依存関係解析を実施し、各変数に対して、合成結果ＲＴＬ記述３にてフィードバックループを伴うＦＦに対応付けられる可能性があるか否か推定し、その分類結果を変数依存関係情報２１に格納する。
【０１１８】
ここで、逆データ依存関係とは、図１７例示するように、プログラムの実行と逆方向に変数の定義と参照が行われている関係をいう。この逆データ依存関係を持つ変数を、フィードバックループを伴うＦＦに対応付けられる可能性のある変数として識別する。図１８には図１２の高位レベル記述１のデータ依存関係を纏めて記載した。
【０１１９】
動作合成可能な高位レベル記述では、ハードウェアの動作をモデル化するため、動作記述全体が無限ループ内に記述されており、ループ伝播データ依存関係、即ち、図１７に示すような変数への定義後に一回以上ループを回ってから変数への参照が行われる事がある場合も、フィードバックループを伴うＦＦに対応付けられる可能性のある変数として識別する。
【０１２０】
本解析では、ループ伝播データ依存関係を逆データ依存関係と見做して解析を行っても問題ないため、配列要素間のループ伝播データ依存解析に関しては、配列変数を１つのスカラ変数と見做して、逆データ依存関係があるかの解析のみを行う、としても良い。
【０１２１】
更に、図１７に示すように、分岐内で変数定義が行われているが、全分岐では変数定義が行われていない変数もフィードバックループを伴うＦＦに対応付けられる可能性のある変数として識別する。
【０１２２】
順データ依存関係のみがある変数とは、図１７に示すように、高位レベル言語記述内の変数であって、データ依存関係が存在し、逆データ依存関係や、ループ伝播データ依存関係を一切持たない変数を指す。この変数を、フィードバックループを伴うＦＦに対応付けられる可能性のない変数として識別する。
【０１２３】
上記データ依存関係での解析では、各変数への代入と参照にのみ着目し、解析対象変数への代入文と参照のみを対象に解析を実施し、代入操作の推移閉方を考慮した解析は行わない。
【０１２４】
尚、本解析に必要となるデータ依存解析技術は、既存コンパイラ技術のデータ依存関係解析をそのまま利用可能であり、それは、
中田郁男 「コンパイラの構成と最適化」 朝倉書店, 1999年、及び
Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman, “Compilers: Principles, Techniques, & Tools with Gradiance(2nd Edition),” Addison Wesley, 2007.
等の文献で開示されている。
【０１２５】
図１９にはデータ依存解析処理のフローチャートが例示される。データ依存解析処理ｓ１での各ステップの処理内容は下記の通りである。尚、本明細書で参照するフローチャートにおいて、左右位置にそれぞれ縦線を付加した矩形は関数コールを意味し、処理を意味する単なる矩形とは区別して図示してある。
【０１２６】
s11では、高位レベル記述を読み込み、無限ループ記述内の変数を識別し、当該変数の集合をVとし、処理をs12へ移行する。
【０１２７】
s12では、集合Vが空集合であるか否かを判定し、空集合の場合、処理を終了し、そうでない場合、処理をs13へ移行する。
【０１２８】
s13では、集合Vから変数vを一つ選び、集合Vから当該変数vを削除し、処理をs14へ移行する。
【０１２９】
s14では、既存コンパイラ技術を用いて、変数vを対象としたデータ依存解析を実施し、処理をs17へ移行する。尚、高位レベル記述がポインタ変数を伴う場合は、ポインタの存在しない記述へ変更するものとし、変数vが配列変数である場合は、配列要素間のデータ依存解析も併せて実施するものとする。
【０１３０】
s15では、変数vへの代入条件を全て取得し、それらをORで結合した条件式Cond(v)を構成し、処理をs15へ移行する。
【０１３１】
s16では、Cond(v)が恒真か否か判定し、恒真の場合、処理をs16へ移行し、そうでない場合、処理をs20へ移行。ここで、恒真判定では、必要ならCond(v)内の変数への代入文識別を実施し、Cond(v)内の変数の置き換えを実施した上で、充足可能性判定による恒真判定を実施するものとする。
【０１３２】
s17では、変数vが逆データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs18へ移行する。
【０１３３】
s18では、変数vがループ伝播データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs19へ移行する。
【０１３４】
s19では、変数vが順データ依存関係を持つ変数か否か判定し、持つ場合は処理をs21へ、そうでない場合は、処理をs12へ移行する。
【０１３５】
s20では、変数vをループあり変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【０１３６】
s21では、変数vをループなし変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【０１３７】
図２０には高速化手法を用いたデータ依存解析処理の一例を示す。図２０を詳細に説明する前に高速化手法の要点について説明する。
【０１３８】
配列変数をインデックスの違いを識別せず取扱い可能とするため、インデックスが変数の場合、スカラ変数に置換して解析を実施する。
【０１３９】
配列インデックスが変数の場合、ループ伝播データ依存関係が存在する可能性がある。ループ伝播データ依存がある場合、逆データ依存として識別可能である一方、ループ伝播データ依存がない場合でも、逆データ依存関係があると識別してしまう可能性があるが、リセット伸長サイクル抽出部にて、後者の変数が実際にRTLにてフィードバックループを伴うFFに対応付けられたか否かを判定するため、安全な抽象化となっている。この抽象化により、計算コストの高い配列要素間のデータ依存解析が不要となる。
【０１４０】
ポインタ変数をスカラ変数に置換して解析を実施する。配列変数と同様の議論から、安全な抽象化となっている。この抽象化により、計算コストの高いポインタ解析及び配列要素間のデータ依存解析が不要となる。
【０１４１】
変数代入条件の分岐条件のOR取りに基づく変数代入条件が恒真か否かの判定を行わず、変数代入が行われている分岐構造解析による変数代入条件の恒真判定を実施する。この場合、（スカラ変数への置換後であったとしても）ポインタ変数vや変数インデックスを伴う配列変数vへの代入文が分岐内に存在する場合、Cond(v)≠1とする。分岐より先立って、同一変数vへの代入が分岐構造を伴わない形で行われていれば、Cond(v)=1とする。分岐の後で、同一変数vへの代入が分岐構造を伴わない形で行われていれば、Cond(v)=1とする。上記以外の場合であって、if-else文やswitch-case文内の他の分岐全てで、同一変数vへの代入が行われていれば、Cond(v)=1とし、そうでなければ、Cond(v)≠1とする。上記一連の処理を「分岐構造に着目したCond(v)の構成」と呼ぶ。上記処理による弊害は、本来Cond(v)=1と判定されるべき変数が、Cond(v)≠1と判定される場合がある事であるが、配列変数と同様の議論から、その弊害は問題とはならない。上記処理への代替により、Cond(v)=1か否かの判定処理が高速化される。
【０１４２】
図２０による高速化されたデータ依存解析処理ｓ１での各ステップの処理内容は下記の通りである。
【０１４３】
s11’では、高位レベル記述を読み込み、無限ループ記述内の配列インデックスが変数である配列変数やポインタ変数をスカラ変数に置換えた後、変数を識別し、当該変数の集合をVとし、処理をs12へ移行する。ここで、定数インデックスのみを伴う配列変数も、インデックス値の違いが識別可能な互いに異なるスカラ変数へ置換する。
【０１４４】
s12では、集合Vが空集合であるか否かを判定し、空集合の場合、処理を終了し、そうでない場合、処理をs13へ移行する。
【０１４５】
s13では、集合Vから変数vを一つ選び、集合Vから当該変数vを削除し、処理をs14へ移行する。
【０１４６】
s14では、既存コンパイラ技術を用いて、変数vを対象としたデータ依存解析を実施し、処理をs17へ移行する。
【０１４７】
s15’では、「分岐構造に着目したCond(v)の構成」を実施し、処理をs15へ移行する。
【０１４８】
s16では、Cond(v)が恒真か否か判定し、恒真の場合、処理をs16へ移行し、そうでない場合、処理をs20へ移行する。尚、Cond(v)のが恒真か否かはs15で求められているため、s16では処理の分岐のみを実施する。
【０１４９】
s17では、変数vが逆データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs18へ移行する。
【０１５０】
s18では、変数vがループ伝播データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs19へ移行する。
【０１５１】
s19では、変数vが順データ依存関係を持つ変数か否か判定し、持つ場合は処理をs21へ、そうでない場合は、処理をs12へ移行する。
【０１５２】
s20では、変数vをループあり変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【０１５３】
s21では、変数vをループなし変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【０１５４】
《入出力サイクル情報抽出処理＿処理概要》
入出力サイクル情報抽出処理ｓ２について概要を説明する。
【０１５５】
第１に、入出力サイクル情報処理ｓ２は高位レベル記述１と動作合成スクリプト２を読み込み、下記の処理を実施する。
【０１５６】
（１）入力情報を分析し、合成結果ＲＴＬ３を下記に分類する。
ａ）パイプライン（以下Pipelineとも記す）合成ＲＴＬ：回路全体が固定のThroughput/Latencyサイクルを伴うＲＴＬ。
ｂ）サイクル精度合成ＲＴＬ：高位レベル記述の各入力から各出力に至る消費サイクルが維持されたＲＴＬ。
ｃ）パスレイテンシ設定合成ＲＴＬ：高位レベル記述内のプログラムパスに対して、実行サイクル数が別途プログラム記述とは別に合成スクリプトや合成ディレクティブにて指定された場合の、合成結果ＲＴＬ。
ｄ）内部ループPipeline合成ＲＴＬ：高位レベル記述内の内部ループに対して、固定のThroughput/Latencyサイクルの指定を伴うPipeline化指定が別途プログラム記述とは別に合成スクリプトや合成ディレクティブにて指定された場合の、合成結果ＲＴＬ。
ｅ）非サイクル精度合成ＲＴＬ：高位レベル記述内のプログラムパスに対して、実行サイクル数が、内部ループに対して、固定のThroughput/Latencyサイクルを指定してPipeline化指定が別途プログラム記述とは別に合成スクリプトや合成ディレクティブにて指定された場合の、合成結果ＲＴＬ。
【０１５７】
（２）高位レベル記述の入出力サイクル情報を取得する。
【０１５８】
（３）分類後の各ＲＴＬ構造に応じた、合成結果ＲＴＬの入出力サイクル情報を取得する。
【０１５９】
（４）得られた入出力サイクル情報を元に、Pipeline合成ＲＴＬとサイクル精度合成ＲＴＬ以外の合成結果ＲＴＬを、再度下記に分類する。
ａ）入出力スループット比一定ＲＴＬ：高位レベル記述の各入力・出力スループットが一定で、ＲＴＬの各入力・出力スループットが一定であり、各スループットサイクルの比が一定値となるＲＴＬ。
ｂ）入出力スループット比非一定ＲＴＬ：上記以外のＲＴＬ。
【０１６０】
第２に、入出力サイクル情報処理ｓ２は更に、入力情報を用いた合成結果ＲＴＬ構造分類処理を以下の通り行う。
【０１６１】
動作合成スクリプト内のコマンドや、高位レベル記述内部の合成ディレクティブを解釈する。
【０１６２】
記述全体に対してPipeline合成指定を行っている場合、Pipeline合成RTLと識別する。
【０１６３】
高位レベル記述内のプログラムパスに対する実行サイクル指定のみが、合成コマンドや合成ディレクティブにより指定されている場合、パスレイテンシ設定合成RTLと識別する。
【０１６４】
高位レベル記述内の内部ループに対してのみ、固定のThroughput/Latencyサイクルの指定を伴うPipeline化指定のみが、合成コマンドや合成ディレクティブにより指定されている場合、内部ループPipeline合成RTLと識別する。
【０１６５】
上記双方が指定されている場合、非サイクル精度合成RTLと識別する。
【０１６６】
上記以外の場合、サイクル精度合成RTLと識別する。
【０１６７】
《入出力サイクル情報抽出処理＿Pipeline合成ＲＴＬを対象とした情報抽出》
入出力サイクル情報抽出処理ｓ２におけるPipeline合成ＲＴＬを対象とした情報抽出ついて説明する。
【０１６８】
Pipeline合成RTLを対象とした情報抽出処理で抽出すべき情報は、Pipeline回路内の各入出力のThroughput/Latencyサイクル、及び得られたThroughput値の最大公約数である。
【０１６９】
Pipeline構造に関しては、各入力・出力はPipelineの各ステージの何れかに割当てられる。特に複数のステージに入力・出力が割当てられた場合、その入力同士や出力同士は、１）初段ステージからThroughputサイクル番目のステージの何れかに存在するか、２）Latencyサイクル分のステージをThroughputサイクル区間毎に分割した区間サイクル内で異なるステージに出力が割当てられているか、の何れかである。実際、上記１）２）の条件を満たさない場合、図２１〜図２６に示すように出力衝突が発生する。また、入力の場合は入力衝突を起こし、衝突回数分だけ入力データの取りこぼしが発生し、高位レベル記述と異なる入力動作となる。図２１は同一出力信号が複数あり、それらが初段ステージからスループットサイクル番目のステージまでに存在するパイプライン動作を示す。図２２は同一出力信号が複数のステージにあり、それらがレイテンシサイクル分のステージをスループットサイクル区間毎に分割した区間サイクル内で異なるステージに割当てられたパイプライン動作を例示する。図２３は同一出力信号が複数のステージにあり、それらが出力衝突を起こすパイプライン動作を例示する。図２４は同一入力信号が複数のステージにあり、それらが初段ステージからスループットサイクル番目のステージまでに存在するパイプライン動作を例示する。図２５は同一入力信号が複数のステージにあり、それらがレイテンシサイクル分のステージをスループットサイクル区間毎に分割した区間サイクル内で異なるステージに割当てられたパイプライン動作を例示する。図２６は同一出力信号が複数のステージにあり、入力データの取りこぼしが発生するパイプライン動作を例示する。
【０１７０】
Throughput/Latency情報の取得は次のように行う。動作合成スクリプト内のコマンドや、高位レベル記述内部の合成ディレクティブを解釈し、Pipeline回路全体でのスループット・レイテンシサイクル数を取得する。次いで、Pipeline内のどのステージにどの入力・出力動作が割当てられたかを、動作合成スクリプト内のコマンドや、高位レベル記述内部の合成ディレクティブを解釈し、取得する。全出力のThroughputは、１つのステージにのみ割当てられた入力・出力に対して、現れる入力・出力の数を１とし、そのステージまでのサイクルをLatencyサイクルとする。Pipeline回路全体でのThroughput値をThroughputサイクルとして算出する。複数のステージに割当てられた入力・出力に対しては、以下の２つの情報を出力する。第１に、現れる同一入力・出力の数、及び、割り当てステージまでのサイクル情報を全てLatency情報として算出し、Pipeline回路全体でのThroughput値をThroughputサイクルとして算出する。第２に、ceil(Latencyサイクル数/Throughputサイクル数)を算出し、その値分パイプライン（Pipleine）構造を表すリストを作成する。次いで、同一入力・出力間の最小サイクルを求め、それをThroughputサイクル値として出力。また、Latencyサイクル数は、Pipeline内での各同一入力・出力の割り当てサイクル数全体の最大公約数として算出する。ここでceil()は、小数点以下を切り上げる関数を表し、以降もそのような関数として用いるものとする。
【０１７１】
入出力サイクル情報の出力では、Pipeline回路である事、及び取得した各出力のスループット・レイテンシサイクル情報を入出力サイクル情報に格納する。図２７及び図２８に示すように、入出力サイクル情報は、入力または出力信号名、出現回数、Throghput、Latencyの順でリスト構造により表現される。特に、出現回数が２以上の場合は、出現回数から二つのリストへのポインタがあるものとする。尚、この構造の表現は、ネストした構造体を用いても良い。図２７はパイプライン動作を対象とした、入出力サイクル情報の入力サイクル情報の格納形式を例示し、図２８はパイプライン動作を対象とした、入出力サイクル情報の出力サイクル情報の格納形式を例示する。
【０１７２】
図２３から図２６にはPipeline合成RTLを対象とした情報抽出処理における入出力サイクル情報の出力例として上記１）、２）の条件を満たす場合の出力サイクル情報の出力例が示される。図２９は図２１に示したパイプライン動作例に対応する出力サイクル情報を示す。図３０は図２２に示したパイプライン動作例に対応する出力サイクル情報を示す。図３１は図２４に示したパイプライン動作例に対応する入力サイクル情報を示す。図３２は図２５に示したパイプライン動作例に対応する入力サイクル情報を示す。
【０１７３】
《入出力サイクル情報抽出処理＿サイクル精度合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理ｓ２におけるサイクル精度合成RTLを対象とした情報抽出について説明する。
【０１７４】
抽出すべき情報は、各入力・出力のThroughputサイクル情報、及び入力全体や出力全体でのThroughputサイクル情報である。ここで、各入力・出力Throughputサイクル情報には、初期Throughputサイクル情報（最初の信号変化までのサイクル数）と、Throughputサイクル情報（信号変化間隔サイクル数）が含まれるものとし、入力全体や出力全体でのThroughputサイクル数は、前記Throughputサイクル情報から構成するものとする。
【０１７５】
プログラム構造に関しては、高位レベル記述をCFG（Control Flow Graph：コントロールフローグラフ）に変換した場合を考える。CFGの無限ループ内部に非決定ループ構造があり、その内部に出力や入力の内１つでも存在しない場合、ループの実行回数に応じて、当該非決定ループに含まれない出力や入力の値変化サイクルは、周期的と成り得ない。したがって、そのような場合、当該非決定ループに含まれない出力や入力は毎サイクル変化するものとして扱わざるを得ない。
【０１７６】
各出力のThroughputサイクル情報の取得については次の通りとする。
【０１７７】
（１）出力信号の集合をOとする。
【０１７８】
（２）高位レベル記述をCFGに変換する。CFG構成法は、特許第3909073号に記載がある。
【０１７９】
（３）CFGの無限ループ内のループにてループ展開可能なループを全て展開する。
【０１８０】
（４）(#)O =φなら、得られた出力毎のThroughputサイクル数情報に対して、全ての値の最大公約数を求め、それを出力全体のThroughputサイクル値として処理を終了する。
【０１８１】
（５）出力o∈Oを一つとり、O=O-{o}とする。
【０１８２】
（６）CFG内のoへの代入操作を行うノードを２つに分離し、新たな2点のノード間には接続辺がないものとし、得られたCFGに対して強連結成分への分割を行い、強連結成分が現れた場合、oを含まない非決定ループが存在する事となるため、出力oのThroughputサイクル値を１として、処理を(#)へ移行。そうでない場合は、以下を実行する。即ち、無限ループ先頭から出力oへ至るプログラムパス上のサイクル数を取得し、初期Throughputサイクルとする。出力oから同一出力oに至るプログラムパスが存在する場合は、そのパス上のサイクル数を取得する。ここで、プログラムパスの探索では、フォールスパス判定を必要なら行うものとする。フォールスパスか否かの判定は、パス上に現れる分岐条件を全てANDした条件式を構成し、その条件式が、恒偽となるか否かを充足可能性判定手法にて判定すれば良い。フォールスパスと判定されたプログラムパスは、取得したサイクル情報を破棄するものとする。各出力oに対して、得られたサイクル数が全て一致するか否か判定し、一致する場合Throughputの性質を「一定」とし、そうでない場合、「非一定」とした上で、得られたサイクル数の最大公約数を求め、出力oのThroughputサイクル値とし、処理を(#)へ移行する。
【０１８３】
（７）上記処理を、集合を入力信号の集合Iに置換えて実施する。
【０１８４】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）を図３３のテーブル形式にて出力する。図３３はサイクル精度合成RTLを対象とした入出力サイクル情報の形式を示している。
【０１８５】
CFG内の指定変数を含む文の実行を行うノードを２つに分離する操作に関しては、以下に示す図３４のように、分離→強連結成分への分割→再結合を実施する。分離後に強連結成分が存在しない場合、常に非巡回グラフとなるため、whileループ先頭から当該代入操作までのパスや、当該代入操作から別の同一変数への代入操作までのパスの識別はグラフ上の探索で可能であり、識別したパス上に存在するクロック数の識別は、パス識別時に実施可能である。
【０１８６】
《入出力サイクル情報抽出処理＿パスレイテンシ設定合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理ｓ２におけるパスレイテンシ設定合成RTLを対象とした情報抽出について説明する。
【０１８７】
抽出すべき情報は、サイクル精度合成RTLと同じ形式の情報である。
【０１８８】
プログラム構造に関して、高位レベル記述をCFG（Control Flow Graph：コントロールフローグラフ）に変換した場合を考える。プログラムパスへのサイクル設定のみがなされている場合は、高位レベル記述のCFG上のループをプログラムパスに対して、始点・終点が指定され、その始点・終点間にクロックサイクル指定がなされているものとする。特に、異なる指定で対象となるCFG上のプログラムパスは共有ノードを持たないものとする。したがって、当該プログラムパスの終点直前に、指定クロックサイクル数となるようクロック境界ノードを連続に付加すれば、サイクル精度合成から得られるCFGとして取り扱い可能である。
【０１８９】
各出力のThroughputサイクル情報の取得については、合成スクリプト、合成ディレクティブを解釈し、サイクルが設定されているプログラムパス及び、設定サイクル数を識別し、その集合を｛{s,e},n｝∈Tｈ⊆（S×E）×Nとする。ここで、Sはプログラムパスの始点の集合、Eはプログラムパスの終点の集合、Nは設定サイクル数の集合であり、{{s,e},n}は始点s、終点eのプログラムパス集合とそれに設定されたサイクル数の組であるとする。高位レベル記述をCFGに変換する。(#)Th==φなら、得られたCFGに対して、サイクル精度合成RTLでの各出力Throughputサイクル情報の取得処理を適用する。｛{s,e},n｝∈Thとし、Th=Th-{{s,e},n}とする。CFG上の始点s・終点eとなるパス集合を識別し、その集合をPとする。(*)P=φなら、得られた修正サイクル数の中で最小のサイクル数分のクロック境界ノードを終点eの直前に挿入し、夫々残りのサイクルは、パスの合流点を識別しつつ、共有パスの場合は、残りのサイクルの中で最小のサイクル数分のクロック境界ノードを当該合流点の直前に配置するといった具合に、順次パスを終点から遡りながらクロック境界ノードを挿入する事で、CFGを修正し、処理を(#)へ移行する。p∈Pを一つとり、P=P-{p}とする。プログラムパスp上のクロック境界ノード出現数を取得し、これをn(p)として、n-n(p)を算出する。
【０１９０】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）を図３５及び図３６のテーブル形式にて出力する。
【０１９１】
《入出力サイクル情報抽出処理＿内部ループPipeline合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理ｓ２における内部ループPipeline合成RTLを対象とした情報抽出について説明する。
【０１９２】
抽出すべき情報は、サイクル精度合成RTLと同じ形式の情報である。
【０１９３】
プログラム構造に関しては、高位レベル記述をCFG（Control Flow Graph：コントロールフローグラフ）に変換した場合を考える。内部ループ記述に対してPipeline化設定のみがなされている場合は、当該ループを適切な出力間隔を持つ構造に置き換える事が出来れば、サイクル精度合成から得られるCFGとして取り扱い可能である。
【０１９４】
各出力のThroughputサイクル情報の取得については、合成スクリプト、合成ディレクティブを解釈し、Pipeline化指定されている内部ループを識別し、その集合をLoopとする。(#)Loop=φなら、得られたCFGに対して、サイクル精度合成RTLでの各入力・出力Throughputサイクル情報の取得処理を適用する。l∈Loopを一つとり、Loop=Loop-{l}とする。lが一つも入力や出力を持たない場合、当該ループが非決定ループの場合は、他の全入力や全出力は周期的に成り得ないため、全入力や全出力のThroughputサイクルを１として処理を終了。そうでない場合は、ループ展開可能であるため、そのループ実行回数をNumとし、Throughput=T, Latency=Lとして、T×Num+Lだけクロック境界ノードを含むサブCFGに、当該ループlを置換し、処理を(#)に移行する。図３７には変換前のPipeline化対象ループのサブCFG構造が例示され、図３８には図３７の部分ＣＦＧに対して変換を施したサブCFG構造が例示される。
【０１９５】
各入力・出力のThroughputサイクル情報の取得については、lが入力や出力を伴う場合、lから構成されるPipeline回路を全体回路として、Pipeline合成RTLを対象とした情報抽出を実施する。得られた入出力サイクル情報から、各入力・出力に対して、第一情報のみを取得する。Latencyサイクルが複数存在する場合や、Throughputサイクルを超える場合は、夫々をそのサイクル数%Throughputサイクル数の値に変更し、得られたサイクルにて出力を行う。そして、全体としてThroughputサイクルからなるループ構造へと変換し、処理を(#)に移行する。図３９にはパイプライン動作を対象とした、入出力サイクルの修正例が例示される。図４０にはパイプライン化対象ループの部分CFG例が示され、図４１には図４０の部分CFGに対して変換を施した例（入出力動作を含む場合）が示される。ここで、本処理にて、Latency情報は希釈されるが、今求める対象は、各入力・出力のThroughputサイクル情報であるため、このような変換を行っても問題ない。
【０１９６】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）を図４２のテーブルに示される出力サイクル形式及び図４３のテーブルに示される入力サイクル形式にて出力する。
【０１９７】
《入出力サイクル情報抽出処理＿非サイクル精度合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理ｓ２における非サイクル精度合成RTLを対象とした情報抽出について説明する。
【０１９８】
抽出すべき情報はサイクル精度合成RTLと同じ形式の情報である。
【０１９９】
プログラム構造に関しては、高位レベル記述をCFG（Control Flow Graph：コントロールフローグラフ）に変換した場合を考える。内部ループであって、Pipeline合成指定が成されているループ内のプログラムパスには、パスレイテンシ設定が成されていない事を前提とする。それが成されている場合は、当該内部ループ内の実行ブロック内にあるパスの中で最大サイクルを求め、この値以上のLatencyが設定されたPipeline合成が実行されていると解釈可能である。したがって、その前提にて一般性を失う事はない。内部レベル記述のプログラムパスへのサイクル設定がなされている箇所、及び内部ループであってPipeline化設定がなされている箇所を、夫々パスレイテンシ設定合成RTLでのCFG変換処理と内部ループPipeline合成RTLでのCFG変換処理を施せば、サイクル精度合成から得られるCFGとして取り扱い可能である。
【０２００】
各出力のThroughputサイクル情報の取得については、パスレイテンシ合成RTLに対するCFG変換処理を実施する。得られたCFGに対して、内部ループPipeline合成RTLに対するCFG変換処理を実施する。得られたCFGに対して、サイクル精度合成RTLでの各入力・出力Throughputサイクル情報の取得処理を適用する。
【０２０１】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）を図４４の入出力サイクル情報を示すテーブル形式にて出力する。
【０２０２】
《入出力サイクル情報抽出処理＿高位レベル記述を対象とした情報抽》
入出力サイクル情報抽出処理ｓ２における高位レベル記述を対象とした情報抽について説明する。
【０２０３】
抽出すべき情報はサイクル精度合成RTLと同じ形式の情報である。
【０２０４】
各出力のThroughputサイクル情報の取得については、合成スクリプトや合成ディレクティブを変更し、サイクル精度合成を実施する内容に修正し、サイクル精度合成RTLを対象とした入力・出力Throughputサイクル情報抽出処理をそのまま実施すれば良い。
【０２０５】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）を図４５及び図４６のテーブル形式にて出力する。
【０２０６】
《入出力サイクル情報抽出処理＿全体的な処理フロー》
図４７には入出力サイクル情報抽出処理ｓ２の全体的な処理フローが例示される。各ステップの処理内容は以下の通りである。
【０２０７】
s21では、高位レベル記述、及び動作合成スクリプトを読み込み、合成コマンド及び合成ディレクティブを識別し、識別結果を合成制約情報として格納し、変数flgを0に初期化し、処理をs22へ移行する。
【０２０８】
s22は、合成制約情報を読み込み、合成指定が記述全体に対するPipeline化指定であるか否か判定する。そうである場合は、処理をs23へ、そうでない場合は処理をs24へ移行する。
【０２０９】
s23は、各入力・出力変数を対象とした、別途図４８で定義された「Pipeline合成RTLを対象とした情報抽出」を実行し、スループット・レイテンシサイクル情報の抽出を実施する。その後、処理をs32へ移行する。
【０２１０】
s24では、高位レベル記述のクロック境界ノードを伴うCFGへの変換処理を実施し、当該CFGを格納し、処理をs25へ移行する。ここで、クロック境界ノードを伴うCFGの定義、及び高位レベル記述からの当該CFGへの変換手法に関しては、特許第3909073号に詳細な記載がある。
【０２１１】
s25では、合成制約情報を読み込み、合成指定に高位レベル記述のプログラムパスへのサイクル設定が含まれるか否かを判定する。含まれる場合、処理をs26へ移行し、そうでない場合、処理をs28へ移行する。
【０２１２】
s26においては、 プログラムパスへのサイクル設定情報に基づき、別途図４９で定義された「パスレイテンシ合成RTLを対象としたCFG変換」を実行し、変換後のCFGを格納し、処理をs27へ移行する。
【０２１３】
s27においては、変数flgに１を代入し、処理をs28へ移行する。
【０２１４】
s28では、合成制約情報を読み込み、合成指定に高位レベル記述内の内部ループへのPipeline化指定があるか否か判定する。含まれる場合は、処理をs29へ移行し、そうでない場合は、処理をs31へ移行する。
【０２１５】
s29では、内部ループへのPipeline化指定に基づき、別途図５０で定義された「内部ループPipeline合成RTLを対象としたCFG変換」を実行し、変換後のCFGを格納し、処理をs30へ移行する。
【０２１６】
s30においては、変数flgへ１を代入し、処理をs31へ移行する。
【０２１７】
s31は、別途図５１で定義された「サイクル精度合成RTLを対象とした情報抽出手段」を実行し、その後に処理がs32へ移行される。
【０２１８】
s32では、合成スクリプトや合成ディレクティブを変更し、サイクル精度合成を実施する内容に修正し、処理をs33へ移行スル。この修正は、Pipeline化指定やプログラムパスへのサイクル指定を削除するのみで実現可能である。
【０２１９】
s33では、別途定義された「サイクル精度合成RTLを対象とした情報抽出手段」を実行し、処理をs34へ移行する。
【０２２０】
s34では、変数flgが１か否か判定し、１の場合、処理をs35へ、１でない場合s38へ移行する。
【０２２１】
s35では、高位レベル記述の各入力・出力スループットが一定で、RTLの各入力・出力スループットが一定であり、且つその比が一定か否か判定する。一定の場合、処理をs36へ、そうでない場合、S37へ移行する。
【０２２２】
s36では、入出力スループット比一定RTLとして識別し、処理をs38へ移行する。
【０２２３】
s37では、入出力スループット比非一定RTLとして識別し、処理をs38へ移行する。
【０２２４】
s38においては、RTL構造の種別であるPipeline合成RTL、パスレイテンシ設定合成RTL、内部ループPipeline合成RTL、非サイクル精度合成RTL、サイクル精度合成RTL、入力高位レベル記述の回路種別情報、Pipeline合成RTL、及び入力高位レベル記述の場合は、各入力・出力の信号名、各入力・出力の出現するステージ数、各入力・出力のスループット・レイテンシサイクル数を出力する。それ以外の場合は、各入力・出力の信号名、各入力・出力のスループットサイクル数と性質（一定か否か） 、全出力・全入力共通のスループットサイクル数と性質（一定か否か）を入出力サイクル情報として、入出力サイクル情報を出力する。
【０２２５】
《入出力サイクル情報抽出処理＿図４７のｓ２３の詳細フロー》
図４８には図４７におけるs23の「Pipeline合成RTLを対象とした情報抽出」についての詳細フローが例示される。その各ステップの処理内容は以下の通りである。
【０２２６】
s32_1では、変数flgに0を代入し、処理をs32_2へ移行する。
【０２２７】
s32_2では、合成制約情報を読み込み、Pipeline回路全体でのスループット・レイテンシサイクル数、及び入力・出力信号名を取得し、出力信号の集合をO、入力信号の集合をIとし、処理をs23_3へ移行する。
【０２２８】
s23_3においては、集合Vに集合Oを代入し、処理をs23_4へ移行する。
【０２２９】
s23_4では、集合Vが空であるか否か判定し、空の場合は処理をs23_15へ、空でない場合は、s23_5へ移行する。
【０２３０】
s23_5では、v∈Vを一つ選択し、V=V-{v}とし、処理をs23_6へ移行する。
【０２３１】
s23_6では、vが配置されているPipeline内のステージ数の情報を取得し、処理をs23_7へ移行する。
【０２３２】
s23_7においては、vは１つのステージにのみに割当てられているか否か判定し、その場合は、処理をs23_8へ、そうでない場合は、処理をs23_9へ移行する。
【０２３３】
s23_8では、Pipeline回路全体でのスループットサイクル数をvのスループットサイクル数とし、vが割当てられたステージのサイクル数をvのレイテンシサイクル数として識別し、これとvの信号名、及び出現回数1をサイクル情報として識別し、処理をs23_4へ移行する。
【０２３４】
s23_9では、vが現れるステージの総数を識別し、処理をs23_10へ移行する。
【０２３５】
s23_10では、Pipeline回路全体でのスループットサイクル数をvの第一のスループットサイクル数とし、vが割当てられた全ステージのサイクル数の組を、vの第一のレイテンシサイクル数として識別し、処理をs23_11へ移行する。
【０２３６】
s23_11においては、ceil（Pipeline回路全体でのレイテンシサイクル数/Pipeline回路全体でのスループットサイクル数）を算出し、この値をNum(v)とし、処理をs23_12へ移行する。
【０２３７】
s23_12では、Num(v)の値分Pipelineを展開し（p.43の例参照）、vの出現間隔の最小値を求め、この最小値をvの第２のスループットサイクル数として識別し、処理をs23_13へ移行する。
【０２３８】
s23_13では、第１のスループットサイクル数の値の組の成す最大公約数を、vの第二のレイテンシサイクル数として識別し、処理をs23_14へ移行する。
【０２３９】
s23_14では、vの信号名、出力oが現れるステージ数、及び、第一と第二のスループットサイクル情報を、サイクル情報として識別し、処理をs23_4へ移行する。
【０２４０】
s23_15においては、変数flgが0か否か判定し、0なら処理をs23_16へ、0でないならs23_18へ移行する。
【０２４１】
s23_16では、これまでに識別したサイクル情報を、出力サイクル情報として再識別し、処理をs23_17へ移行する。
【０２４２】
s23_17では、変数flgに1を代入し、集合Vに集合Iを代入し、処理をs23_4へ移行する。
【０２４３】
s23_18においては、これまでに識別したサイクル情報を、入力サイクル情報として再識別し、処理をs23_19へ移行する。
【０２４４】
s23_19でハ、入力サイクル情報と出力サイクル情報からなる情報を、入出力サイクル情報として再識別し、処理を終了スル。
【０２４５】
《入出力サイクル情報抽出処理＿図４７のｓ２６の詳細フロー》
図４９には図47におけるs26の「パスレイテンシ設定合成RTLを対象としたCFG変換」の詳細な処理フローが例示される。その各ステップの処理内容は以下の通りである。
【０２４６】
s26_1では、CFGと合成制約情報を読み込み、サイクルが設定されているプログラムパスの始点・終点、及び設定サイクル数を識別し、その集合を｛{s,e},n｝∈Th⊆（S×E）×Nとし、処理をs26_2に移行する。ここで、Sはプログラムパスの始点の集合、Eはプログラムパスの終点の集合、Nは設定サイクル数の集合であり、{{s,e},n}は始点s、終点eのプログラムパス集合とそれに設定されたサイクル数の組であるとする。
【０２４７】
s26_2では、Thが空集合か否か判断し、空集合の場合、処理を終了し、そうでない場合、処理をs26_3へ移行する。
【０２４８】
s26_3では、｛{s,e},n｝∈Thを一つ選択し、Th=Th-{{s,e},n}とし、処理をs26_4へ移行する。
【０２４９】
s26_4においては、CFG上の始点s・終点eとなるパス集合を識別し、その集合をPとし、処理をs26_5へ移行する。
【０２５０】
s26_5では、パス集合Pが空か否か判断し、空集合の場合、処理をs26_6へ移行し、そうでない場合、処理をs26_7へ移行する。
【０２５１】
s26_6においては、得られた修正サイクル数の中で最小のサイクル数分のクロック境界ノードを終点eの直前に挿入する。夫々残りのサイクルは、パスの合流点を識別しつつ、共有パスの場合は、残りのサイクルの中で最小のサイクル数分のクロック境界ノードを当該合流点の直前に配置するといった具合に、順次パスを終点から遡りながらクロック境界ノードを挿入する。このようにして、CFGを修正し、処理をs26_2へ移行する。
【０２５２】
s26_7では、p∈Pを一つとり、P=P-{p}とし、処理をs26_8へ移行する。
【０２５３】
s26_8では、プログラムパスp上のクロック境界ノードの数を取得し、これをn(p)として、n-n(p)を算出し、プログラムパスpとn-n(p)を対として識別し、処理をs26_5へ移行する。
【０２５４】
《入出力サイクル情報抽出処理＿図４７のｓ２９の詳細フロー》
図５０には図４７におけるs29の「内部ループPipeline合成RTLを対象としたCFG変換」の詳細な処理フローが例示される。その各ステップの処理内容は以下の通りである。
【０２５５】
s28_1では、CFGと合成制約情報を読み込み、Pipeline化指定が成されている内部ループ、及び、設定スループット・レイテンシサイクル数を識別し、その集合を｛l,{th,la}｝∈ThLa⊆Loop×（T×L）とし、処理をs28_2へ移行する。ここで、LoopはPipeline化指定された内部ループの集合、TはThroughputサイクル数の集合、LはLatencyサイクル数の集合であり、 ｛l,{th,la}｝は内部ループlと、lに対して設定されたThroughputサイクル数th、及びLatencyサイクル数laの組であるとする。
【０２５６】
s28_2では、Loop×（T×L） が空集合か否か判定し、空集合の場合、処理を終了し、そうでない場合、処理をs28_3へ移行する。
【０２５７】
s28_3では、｛l,{th,la}｝∈ThLaを一つ選択し、ThLa= ThLa-{l,{th,la}}とし、処理をs28_4へ移行する。
【０２５８】
s28_4では、内部ループlが出力動作を含むか判定し、含む場合は、処理をs28_7へ移行する。含まない場合は、処理をs28_5へ移行する。
【０２５９】
s28_5においては、内部ループlがループ展開可能か判定し、ループ展開可能な場合は、処理をs28_13へ、そうでない場合は、処理をs28_6へ移行する。
【０２６０】
s28_6では、全出力のThroughputサイクル数を１として識別し、入出力サイクル情報に格納後、処理を終了する。
【０２６１】
s28_7では、lから構成されるPipeline回路を全体回路として識別し、その回路をllとし、処理をs28_8へ移行する。
【０２６２】
s28_8では、llに対して、「Pipeline合成RTLを対象とした情報抽出」を実施し、入出力サイクル情報Kを取得し、処理をs28_9へ移行する。ここで、llに含まれる出力信号の集合をO、入力信号の集合をＩとし、処理をs28_9へ移行する。
【０２６３】
s28_9では、入出力の集合O∪Iが空集合か判定し、空集合の場合は、処理をs28_12へ、そうでない場合は、処理をs28_10へ移行する。
【０２６４】
s28_10では、v∈O∪Iを一つ選択し、O∪I=O∪I-{v}とし、処理をs28_11へ移行する。
【０２６５】
s28_11では、vに対して、入出力サイクル情報Kの中で、第一情報のみを取得し、対応するLatencyサイクルでThroughputサイクルを超える場合は、入出力サイクル情報Kの該当箇所をLatencyサイクル数%Throughputサイクル数の値に変更し、処理をs28_9へ移行する。
【０２６６】
s28_12においては、各出力が入出力サイクル情報KのThroughput/Latencyサイクル間隔で出力を行うループ構造のサブCFGを構成し、ループlに対応するサブCFGを、新たに構成したサブCFGに置換し、処理をs28_2へ移行する。
【０２６７】
s28_13では、内部ループlのループ実行回数を識別し、その値をNumとし、処理をs28_14へ移行する。
【０２６８】
s28_14では、th×Num+laを算出し、その値の数のクロック境界ノードを含むサブCFGを構成し、ループlに対応するサブCFGを、新たに構成したサブCFGに置換し、処理をs28_2へ移行する。
【０２６９】
《入出力サイクル情報抽出処理＿図４７のｓ３１に係る詳細フロー》
図４７のｓ３１におけるサイクル精度合成RTLを対象とした情報抽出の詳細フローを説明する前に、図５１に例示されるクロック数取得処理について説明する。クロック数取得処理は、プログラムパス集合が与えられた場合に、各プログラムパス内に含まれるクロック数を識別するための処理である。クロック数取得処理の各ステップの内容は以下の通りである。
【０２７０】
s291_1では、R=P∪Qを求め、処理をs291_2へ移行する。
【０２７１】
s291_2では、集合Rが空か否か判定し、空の場合は、処理をs291_17へ、空でない場合は、処理をs291_3へ移行する。
【０２７２】
s291_3では、r∈Rを一つ選択し、R=R-{r}とし、処理をs291_4へ移行する。
【０２７３】
s291_4では、パスrの実行条件Cond(r)を識別し、処理をs291_5へ移行する。
【０２７４】
s291_5では、Cond(r)が充足可能か判定し、充足可能なら処理をs291_6へ移行し、そうでなければs291_2へ移行する。
【０２７５】
s291_6においては、パスr上のクロック境界ノード数N(r)を識別し、N(r)=N(r)+1を算出し、この値を格納し、処理をs291_2へ移行する。
【０２７６】
s291_7では、各パスrのサイクル数N(r)を戻り値として返し、処理を終了する。
【０２７７】
図５２には図４７のｓ３１に係るサイクル精度合成RTLを対象とした情報抽出処理の詳細フローが例示される。各ステップの処理内容は次の通りである。
【０２７８】
s29_1では、CFGを読み込み、出力の集合をO、入力の集合をIとし、処理をs29_2へ移行する。
【０２７９】
s29_2では、CFG上のループでループ展開可能なループを全て展開し、処理をs29_3へ移行する。
【０２８０】
s29_3では、変数ｆｌｇを0に初期化し、集合変数Vに集合Oを代入し、処理をs29\4へ移行する。
【０２８１】
s29_4では、集合Vが空か否か判定し、空の場合、処理をs29_21へ移行し、そうでない場合、処理をs29_5へ移行する。
【０２８２】
s29_5では、v∈Vを一つ選択し、V=V-{v}とし、処理をs29_6へ移行する。
【０２８３】
s29_6においては、vを含むノードの出力枝の集合をWとし、Wに含まれるノードを２つに分離する事でCFGを更新し、処理をs29_7へ移行する。
【０２８４】
s29_7では、CFGを有向グラフとして扱い、強連結成分への分解を実施し、処理をs29_8へ移行する。
【０２８５】
s29_8では、強連結成分が存在するか否か判定し、存在した場合、処理をs29_9へ移行し、存在しない場合、処理をs29_10へ移行する。
【０２８６】
s29_9では、vのThroughputサイクルを非定数と識別し、CFGにて集合Wに含まれる枝を再接続してCFGを更新し、処理をs29_4へ移行する。
【０２８７】
s29_10においては、CFGにて集合Wに含まれるノードを再接続する事でCFGを更新し、処理をs29_11へ移行する。
【０２８８】
s29_11では、無限ループ先頭からvに至るプログラムパスの集合Rを識別し、処理をs29_12へ移行する。
【０２８９】
s29_12では、パス集合Rを対象として定義済み処理「クロック数取得処理」を実施し、各パスr∈R上のクロック数N(r)を取得し、処理をs29_13へ移行する。
【０２９０】
s29_13では、各r∈Rに対して求めたN(r)が全て一致するか否か判定し、一致する場合、処理をs29_14へ移行し、一致しない場合、s29_15へ移行する。
【０２９１】
s29_14では、vのThroughputの性質を「一定」とし、処理をs29_16へ移行する。
【０２９２】
s29_15では、vのThroughputの性質を「非一定」とし、処理をs29_16へ移行する。
【０２９３】
s29_16においては、vからvに至るプログラムパスの集合Rを識別し、処理をs29_17へ移行する。
【０２９４】
s29_17では、パス集合Rを対象として定義済み処理「クロック数取得処理」を実施し、各パスr∈R上のクロック数N(r)を取得し、処理をs29_18へ移行する。
【０２９５】
s29_18では、各r∈Rに対して求めたN(r)が全て一致するか否か判定し、一致する場合、処理をs29_19へ移行し、一致しない場合、s29_20へ移行する。
【０２９６】
s29_19では、vのThroughputの性質を「一定」とし、処理をs29_21へ移行する。
【０２９７】
s29_20では、vのThroughputの性質を「非一定」とし、処理をs29_21へ移行する。
【０２９８】
s29_21では、各r∈Rに対して求めたN(r)の最大公約数をvのThroughputサイクル数として識別し、処理をs29_4へ移行する。ここで、N(r)に「非定数」が含まれる場合、vのThroughputサイクル数を１とする。
【０２９９】
s29_22では、 全てのvのThroughputサイクル数の性質が「一定」かつThroughputサイクル数が同一か判定し、そうなる場合、処理をs29_23へ移行し、そうでない場合、処理をs29_24へ移行する。
【０３００】
s29_23では、共通のThroughputサイクルの性質を「一定」とし、Throughputサイクル数を同一値として識別し、処理をs29_25へ移行する。
【０３０１】
s29_24では、共通のThroughputサイクルの性質を「非一定」とし、v∈Vに対して求めたThroughputサイクルの最大公約数を、共通のThroughputサイクルとして識別し、処理をs29_25へ移行する。
【０３０２】
s29_25では、変数flgが0か否か判定し、0の場合、処理をs29_26へ移行し、0以外の場合、s29_28へ移行する。
【０３０３】
s29_26においては、これまでに識別した情報を出力サイクル情報として再識別し、処理をs29_27へ移行する。
【０３０４】
s29_27では、変数flgに1を代入し、集合変数Vに集合Iを代入し、集合Vに対応する情報を破棄し、処理をs29_4へ移行する。
【０３０５】
s29_28では、これまでに識別した情報を入力サイクル情報として再識別し、処理を終了する。
【０３０６】
《対応FF抽出処理＿処理概要》
対応FF抽出処理ｓ３について概要を説明する。
【０３０７】
対応FF抽出処理ｓ３は、高位レベル記述、合成結果RTL、変数依存関係情報、状態遷移表、及び入出力サイクル情報を読み込み、高位レベル記述内の変数と合成結果RTL内のFFの対応関係を解析する処理である。ここで、合成結果RTLにてフィードバックループを伴うFFに対応付けられる可能性のない変数（以下、ループなし変数）に関しては、一対一に対応するFFが各変数に存在するか否かを解析し、存在した場合、その対応関係をループなし変数一対一対応関係情報に格納する。合成結果RTLにてフィードバックループを伴うFFに対応付けられる可能性がある変数（以下、ループあり変数）に関しては、先ず一対一に対応するFFが各変数に存在するか否かを解析し、存在した場合、その対応関係をループあり変数一対一対応関係情報に格納。一対一に対応するFFが存在しなかった変数が残っていれば、状態遷移表のFFへの代入条件に着目して、条件付きで対応付けられるFFが存在するか否かを解析し、存在した場合、その対応関係をループあり変数非一対一対応関係情報に格納する。
【０３０８】
高位レベル記述内の変数と合成結果RTL内のFFの対応関係取得では、合成結果RTLの分類に従って処理を切り替える。ここで、上記分類は、サイクル精度合成RTL、Pipeline合成RTL、上記以外のRTLである。上記以外のRTLとしては、入出力スループット比一定RTL、入出力スループット比非一定RTLがある。上記の場合に対して、「高位レベル記述の変数とRTLのFFの一対一対応関係」、「高位レベル記述の変数とRTLのFFの条件付き対応関」、及び「動作合成にて、変数のリソース共有が行われた場合の、変数・FFの対応関係」のそれぞれを既存手法に帰着する事で取得することが可能である。
【０３０９】
《対応FF抽出処理＿サイクル精度合成RTL》
サイクル精度合成RTLについての対応FF抽出処理ｓ３について説明する。
【０３１０】
高位レベル記述の変数とRTLのFFの一対一対応関係に関しては、高位レベル記述とRTLの双方に対して、何サイクルかランダムSimを実施し、ランダムSim結果で得られた値とサイクルの組から成る系列が一致するものを一対一対応関係候補とする。候補となった高位レベル記述内の変数をFFの出力と見做し、当該変数と対応候補となった合成結果RTL記述内のFFの出力とが任意サイクルで常に一致するか否かを検証する問題に帰着する事で、既存のフリップ・フロップ内で等価な信号出力系列を持つFFの組を、帰納的不変量として抽出する手法に帰着可能である。したがって、処理の詳細は割愛し、以下この操作を「フリップ・フロップ変数・FF対応関係取得処理」と呼ぶ。
【０３１１】
既存手法としては、文献Alan Mishchenko, Michael Case, Robert Brayton, and Stephan Jang, “Scalable and Scalably-Verifiable Sequential Synthesis" In Proc. of ICCAD, pp.234-241, 2008.に記載されているRegister-correspondence（レジスタ対応関係）抽出手法がある。得られた変数・FF一対一対応関係を、高位レベル記述内の変数の種別である、ループあり変数とループなし変数に分類する事で、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を出力する。
【０３１２】
また、文献Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.の3. Computing inductive invariantsにて開示されている、帰納的不変量抽出手法に帰着可能である。この文献では、フリップ・フロップ内のゲート間の結線群にカットを挿入し、カット上に現れたリテラルからなる最小項が常に１となるか否かの判定手法が開示されている。
【０３１３】
一方、本抽出部の入力の１つである状態遷移表には、RTL記述内の各レジスタへの代入動作の実行条件が、現状態、状態遷移条件、実行条件の組で記述されておいる。後者２つは論理式で記述されており、現状態も状態変数を用いて論理式で表現可能である。夫々の論理式の集合をX,Y,Zとし、FFの集合をFとして、{{x,y,z},f}∈PredFF⊆（X×Y×Z）×Fを、FF変数fへの代入実行条件がx∧y∧zである３つの論理式とFF変数の組であるとする。
【０３１４】
高位レベル記述内のループあり変数の集合をVarとする。
【０３１５】
{{x,y,z},f}∈PredFFのリテラルx,y,zからなる最小項（{M1, …, M8}と記載）と、v∈Varに対して、を構成し、¬（Mi∧(v==f)）＝¬Mi∨(v!=f)なる論理式を構成する。
【０３１６】
これら論理式を、上記文献でのカットから構成した最小項と見做して、上記文献記載の帰納的不変量抽出手法を適用すれば、Mi∧(v==f)の形式で記述された論理の中で、帰納的不変量となるものが抽出可能となる。
【０３１７】
各v∈Varに対して、帰納的不変量として抽出された論理式を全て列挙する。Ex.{Pred1∧(v==f1), Pred2∧(v==f2), …, Predn∧(v==fn)}が得られたとする。
【０３１８】
当該論理式の集合から、FFへの代入条件を構成する３つのリテラルからなる最小項を抽出する。例えば、Ex.{Pred1, Pred2, …, Predn}、となる。
【０３１９】
それら最小項の論理和が常真となる場合、変数vと最小項を条件とするFFとの対応関係を抽出可能である。例えば、Ex. Pred1∨Pred2∨…∨Predn==1となった場合、変数とFFの条件付対応関係として、v=（Pred1∧f1）∨（Pred2∧f2）∨…∨（Predn∧fn）を得る事ができる。
【０３２０】
また、また別の方法がある。即ち、ランダムSimを実行し、状態遷移表から構成した各最小項の値に着目し、最小項の値が1となるサイクルで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出する。本最小項をPredと記載した場合、Pred∧(v==f)として表現される（複数の）命題論理を帰納的不変量候補として抽出する。この後、文献「M. Sheeran, S. Singh and G. Stalmarck, “Checking Safety Properties Using Induction and a SAT-Solver,“ In Proc. of Int. Conf. Formal Methods in Computer-Aided Design (FMCAD), pp.108-125, 2000.」又は「P. Bjesse and K. Claessen, "SAT-Based Verification without State Space Traversal," In Proc. of Int. Conf. Formal Methods in Computer-Aided Design (FMCAD), 2000.」の手法に従い、帰納的不変量となっているか否かを検証する。
【０３２１】
ここで、得られた帰納的不変量からの条件付き変数・FF対応関係の抽出手法は、先に示した手法と同じである。
【０３２２】
《対応FF抽出処理＿パイプライン合成RTL》
パイプライン合成RTLについての対応FF抽出処理ｓ３について説明する。
【０３２３】
この場合、高位レベル記述の変数とRTLのFFの一対一対応関係に関し、一般にランダムSimを用いた変数・FF対応関係の取得が困難である。理由は、入力・出力サイクルが高位レベル記述と合成結果RTLで異なるからである。但し、入力・出力での信号変化サイクル間隔の違いは、一般に一定の比率を持つ違いとなる。
【０３２４】
そこで、本発明者による先の出願である特開２００９−２３０４５１号公報で開示されている等価検証技術を用いて変数・FFの一対一対応関係候補とサイクルの違いを取得する手法について述べる。
【０３２５】
特開２００９−２３０４５１号公報には、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述と合成結果RTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法が開示されている。従って、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、同合特許公開公報にて開示されている手法を適用し、値の変化系列が一致する変数とFFの組を抽出し、これを一対一対応関係候補として抽出すれば良い。また、対応付けられた値の変化系列での信号変化サイクル間隔の違いが一定の同一比率となるか否か判定し、一定となっていれば、その同一比率を格納する。候補全てで、信号変化サイクル間隔の比率が一定であり、その比率が全ての対応関係で同じである場合、この一対一対応関係候補が実際に、対応関係となっているかは、後述する入出力比一定RTLを対象とした証明手続きを行えば良い。
【０３２６】
具体的には、一対一対応関係候補の高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」の手法に帰着する事で、証明可能である。そうでない場合、後述する入出力スループット比非一定RTLの場合の証明手続きを行えば良い。得られた変数・FF一対一対応関係を、高位レベル記述内の変数の種別である、ループあり変数とループなし変数に分類する事で、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を出力する。
【０３２７】
高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開２００９−２３０４５１号公報にて開示されている手法を適用し、状態遷移表から抽出したFF代入条件を構成する３つの論理式をリテラルと見做して構成した最小項の値に着目する。信号値変化系列の中で、最小項の値が1となるところで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出する。本最小項をPredと記載した場合、Pred∧(v==f)として表現される（複数の）命題論理を帰納的不変量候補として先ず抽出する。
【０３２８】
一対一対応関係候補の抽出同様、対応付けられた値の変化系列での信号変化サイクル間隔の違いが一定の同一比率となるか否か判定し、一定となっていれば、その同一比率を格納する。候補全てで、信号変化サイクル間隔の比率が一定であり、その比率が全ての対応関係で同じである場合、後述する入出力比一定RTLを対象とした証明手続きを行えば良い。具体的には、この条件付き応関係候補が実際に、対応関係となっているかは、条件付き対応関係候補の高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」で用いられているミッター論理をPred∧(v==f)に修正する事で、証明可能である。そうでない場合は、後述する、入出力スループット比非一定RTLを対象とした証明手続きを行えば良い。
【０３２９】
《対応FF抽出処理＿入出力スループット比一定RTL》
上記以外のRTLである入出力スループット比一定RTLについての対応FF抽出処理ｓ３について説明する。
【０３３０】
この場合、高位レベル記述の変数とRTLのFFの一対一対応関係に関し、一般にランダムSimを用いた変数・FF対応関係の取得が困難である。理由は、入力・出力サイクルが高位レベル記述と合成結果RTLで異なるからである。そこで、同じく、特開２００９−２３０４５１号公報に開示されている手法を用いて変数・FFの一対一対応関係候補を取得する手法を述べる。
【０３３１】
特開２００９−２３０４５１号公報では、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述と合成結果RTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法が開示されている。従って、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開2009-230451にて開示されている手法を適用し、値の変化系列が一致する変数とFFの組を抽出し、これを一対一対応関係候補として抽出すれば良い。
【０３３２】
この一対一対応関係候補が実際に、対応関係となっているかは、一対一対応関係候補の高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」の手法に帰着する事で、証明可能である。
【０３３３】
また、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開２００９−２３０４５１号公報にて開示されている手法を適用し、状態遷移表から抽出したFF代入条件を構成する３つの論理式をリテラルと見做して構成した最小項の値に着目する。着目した信号値変化系列の中で、最小項の値が1となるところで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出し、本最小項をPredと記載した場合、Pred∧(v==f)として表現される（複数の）命題論理を帰納的不変量候補として先ず抽出する。一対一対応関係候補の抽出同様、対応付けられた値の変化系列での信号変化サイクル間隔の違いが一定の同一比率となるか否か判定し、一定となっていれば、その同一比率を格納する。
【０３３４】
候補全てで、信号変化サイクル間隔の比率が一定であり、その比率が全ての対応関係で同じである場合、この一対一対応関係候補が実際に、対応関係となっているかは、一対一対応関係候補の高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」で用いられているミッター論理をPred∧(v==f)に修正する事で、証明可能である。
【０３３５】
《対応FF抽出処理＿入出力スループット比非一定RTL》
上記以外のRTLである入出力スループット比非一定RTLについての対応FF抽出処理ｓ３について説明する。
【０３３６】
この場合、高位レベル記述の変数とRTLのFFの一対一対応関係に関し、一般にランダムSimを用いた変数・FF対応関係の取得が困難である。理由は、入力・出力サイクルが高位レベル記述と合成結果RTLで異なるからである。そこで、特開２００９−２３０４５１号公報にて開示されている手法を用いて変数・FFの一対一対応関係候補を取得する手法を述べる。
【０３３７】
特開２００９−２３０４５１号公報では、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述と合成結果RTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法が開示されている。
【０３３８】
従って、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開２００９−２３０４５１号公報にて開示されている手法を適用し、値の変化系列が一致する変数とFFの組を抽出し、これを一対一対応関係候補として抽出すれば良い。
【０３３９】
この一対一対応関係候補が実際に、対応関係となっているかは、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」の手法に帰着する事で、証明可能な場合、証明可能である。扱えない場合もあるが、その場合は、例え真に帰納的不変量であっても帰納的不変量とは判定されないが、帰納的不変量でないものを帰納的不変量としては判定しないので、問題とはならない。得られる帰納的不変量の数が実際の総数以下となるだけである。
【０３４０】
上記文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」では、入力信号の値変化系列が同一という前提の下、出力信号の値変化系列が同一か否かをモデル検査法の安全性検証問題に帰着する事で、証明する手法が開示されている。
【０３４１】
具体的には、等価性判定問題を、高位レベル記述と合成結果RTLを入力・出力動作を観測可能な動作とし、それ以外を内部動作としたラベル付き遷移システムと見做し、同一入力や同一出力では同期するものとし、内部動作は自由に動作可能とする。これによって得られた２つのラベル付き遷移システムの積を構成し、この積上での出力動作を持つ動作が常に同じ値出力を行うか否かの検証問題に帰着している。特に、このラベル付き遷移システムの積がデッドロックする場合、判定不能となる。従って、上記ランダムSimで得られた一対一対応関係候補となる変数とFFの組を、同一の出力とみなして、当該文献の手法を適用すれば、任意サイクルで一対一の対応関係となっているか否かの検証が可能である。
【０３４２】
得られた変数・FF一対一対応関係を、高位レベル記述内の変数の種別である、ループあり変数とループなし変数に分類する事で、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を出力する。
【０３４３】
また、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開２００９−２３０４５１号公報にて開示されている手法を適用し、状態遷移表から抽出したFF代入条件を構成する３つの論理式をリテラルと見做して構成した最小項の値に着目し、信号値変化系列の中で、最小項の値が1となるところで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出する。本最小項をPredと記載した場合、Pred∧(v==f)として表現される（複数の）命題論理を帰納的不変量候補として先ず抽出する。
【０３４４】
この帰納的不変量候補が実際に、帰納的不変量となっているかは、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」の手法に帰着する事で、証明可能である。扱えない場合もあるが、その場合は、例え真に帰納的不変量であっても帰納的不変量とは判定されないが、帰納的不変量でないものを帰納的不変量としては判定しないので、問題とはならない。得られる帰納的不変量の数が実際の総数以下となるだけである。
【０３４５】
実際、上記ランダムSimで得られた帰納的不変量候補となる変数とFFの組を、同一の出力とみなして、上記文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」の手法を適用し、積遷移システムを構成し、帰納的不変量候補となる変数とFFの値出力動作が行われる全ての状態で、対応する最小項を伴う命題論理Pred∧(v==f)が常に成立する事を証明すれば、帰納的不変量候補が、任意サイクルで帰納的不変量となっているか否かの検証が可能となる。
【０３４６】
《対応FF抽出処理＿全体的な処理フロー》
図５３には対応FF抽出処理ｓ３の全体的な処理フローが例示される。各ステップの処理内容は以下の通りである。
【０３４７】
s3_1では、入出力サイクル情報と変数依存関係情報を読み込み、ループあり変数の集合をPとするとし、処理をs3_2へ移行する。
【０３４８】
s3_2では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがサイクル精度合成RTLか否か判定し、その場合、処理をs3_5へ移行する。そうでない場合、s3_3へ移行する。
【０３４９】
s3_3では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがPipeline合成RTLか否か判定する。そうである場合、処理をs3_6へ移行し、そうでない場合、s3_4へ移行する。
【０３５０】
s3_4では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLが入出力スループット比一定RTLか否か判定し、そうである場合、処理をs3_7へ移行し、そうでない場合、s3_8へ移行する。
【０３５１】
s3_5では、変数flgにCAを代入し、処理をs3_9へ移行する。
【０３５２】
s3_6では、変数flgにPIPEを代入し、処理をs3_10へ移行する。
【０３５３】
s3_7では、変数flgにConstを代入し、処理をs3_11へ移行する。
【０３５４】
s3_8では、変数flgにOTHERを代入し、処理をs3_12へ移行する。
【０３５５】
s3_9においては、「フリップ・フロップ変数・FF対応関係取得処理」を実施し、処理をs3_13へ移行する。
【０３５６】
s3_10では、「Pipeline合成RTLを対象とした一対一対応関係情報の抽出」を実施し、処理をs3_13へ移行する。
【０３５７】
s3_11では、「入出力スループット比一定RTLを対象とした一対一対応関係情報の抽出」を実施し、処理をs3_13へ移行する。
【０３５８】
s3_12では、「入出力スループット比非一定RTLを対象とした一対一対応関係情報の抽出」を実施し、処理をs3_13へ移行する。
【０３５９】
s3_13では、V={FFに一対一対応付けられた変数}とし、処理をs3_14へ移行する。
【０３６０】
s3_14では、「一対一対応関係情報の格納」を実施し、処理をs3_15へ移行する。
【０３６１】
s3_15では、P=P-Vを実施し、処理をs3_16へ移行する。
【０３６２】
s3_16においては、出力集合Pが空であるか否か判定し、空の場合、処理を終了し、空でない場合、処理をs3_17へ移行する。
【０３６３】
s3_17では、変数flgがCAに一致するか判定し、一致する場合、処理をs3_20へ移行し、一致しない場合、s3_18へ移行する。
【０３６４】
s3_18では、変数flgがPIPEに一致するか判定し、一致する場合、処理をs3_21へ移行し、一致しない場合、s3_19へ移行する。
【０３６５】
s3_19では、変数flgがConstに一致するか判定し、一致する場合、処理をs3_22へ移行し、一致しない場合、s3_23へ移行する。
【０３６６】
s3_20では、「サイクル精度合成RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【０３６７】
s3_21では、「Pipeline合成RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【０３６８】
s3_22においては、「入出力スループット比一定RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【０３６９】
s3_23では、「入出力スループット比非一定RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【０３７０】
s3_24では、「条件付き変数・FF対応関係情報の抽出・格納」を実施し、処理を終了する。
【０３７１】
図５３の対応FF抽出処理ｓ３における主要なステップに対する詳細な説明を加える前に、次の処理について説明する。第１には、特開２００９−２３０４５１号公報にて開示されている、高位レベル記述と合成結果RTLのSimによる等価性判定手法を用いた、一対一変数・FF対応関係候補を抽出するためのランダムSim手法としての、「既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出」処理である。第２には、状態遷移表からの、「最小項構成」処理である。第３には、特開２００９−２３０４５１号公報にて開示されている、高位レベル記述と合成結果RTLのSimによる等価性判定手法を用いた、条件付き変数・FF対応関係候補を抽出するためのランダムSim手法としての、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出」処理である。
【０３７２】
《対応FF抽出処理＿既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出処理フロー》
図５４には既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出処理フローが例示される。各ステップの処理内容は以下の通りである。
【０３７３】
s01では、高位レベル記述を読み込み、処理をs02へ移行する。
【０３７４】
s02では、変数依存関係情報を読み込み、ループあり変数とループなし変数を識別し、その集合をVarとし、処理をs03へ移行する。
【０３７５】
s03では、集合Varが空か否か判定し、空の場合、処理をs07へ移行し、空でない場合、s04へ移行する。
【０３７６】
s04では、v∈Varを一つ取り、Var=Var-{v}とし、処理をs05へ移行する。
【０３７７】
s05では、vの値を出力するための出力変数を高位レベル記述に追加し、処理をs06へ移行する。
【０３７８】
s06では、vへの代入文を識別し、その直後にvから対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs03へ移行する。
【０３７９】
s07では、高位レベル記述の入力信号へランダム値を与えるテストベンチ生成し、処理をs08へ移行する。
【０３８０】
s08では、合成結果RTL記述を読み込み、記述内のFFを識別し、その集合をFとし、処理をs09へ移行する。ここで、FFの識別では、既存の論理合成技術を用いても良いし、既存の記述スタイルチェッカによる識別を行ってもよい。
【０３８１】
s09においては、集合Fが空か否か判定し、空の場合、処理をs014へ移行し、空でない場合、s010へ移行する。
【０３８２】
s010では、f∈Fを一つ取り、F=F-{f}とし、処理をs011へ移行する。
【０３８３】
s011では、fの値を出力するための出力変数を合成結果RTL記述に追加し、処理をs012へ移行する。
【０３８４】
s012では、fの値を出力するための出力変数への代入記述を合成結果RTL記述に追加し、処理をs09へ移行する。ここで、例えば、RTLがVerilog記述の場合、代入文としては、assign文を用いた代入文記述を追加すれば良い。
【０３８５】
s013では、特開２００９−２３０４５１号公報に開示されているSimモデル生成手段適用し、Simモデルを構成後、処理をs014へ移行する。
【０３８６】
s014では、Simモデルを対象にランダムSimを実行し、v∈Varとf∈Fで信号変化系列が同一となる組を識別し、一対一変数・FF対応候補として格納し、処理を終了する。ここで、同一となった(v,f)の信号変化系列をサイクル情報込みで、一対一変数・FF対応候補に格納しておく。
【０３８７】
《対応FF抽出処理＿最小構成処理フロー》
図５５には最小構成処理フローが例示される。各ステップの処理内容は以下の通りである。
【０３８８】
s001では、状態遷移表を読み込み、処理をs002へ移行する。
【０３８９】
s002では、変数依存関係情報を読み込み、ループあり変数を識別し、その集合をVarとし、処理をs003へ移行する。
【０３９０】
s003では、集合Varが空であるか否か判定し、空の場合、処理を終了し、そうでない場合、処理をs004へ移行する。
【０３９１】
s004では、v∈Varを一つ取り、Var=Var-{v}とし、処理をs005へ移行する。
【０３９２】
s005では、vへの代入条件を構成する、現状態、遷移条件、実行条件の組からなる集合を状態遷移表から識別し、その集合をΛとし、処理をs006へ移行する。
【０３９３】
s006では、集合Λが空か否か判定し、空の場合、処理をs003へ移行し、空でない場合、s007へ移行する。
【０３９４】
s007では、λ∈Λを一つ取り、Λ=Λ-{λ}とし、処理をs008へ移行する。
【０３９５】
s008では、λに対して、現状態、遷移条件、実行条件を夫々リテラルと見做し、最小項を８個構成し、8個の最小項とvの組を最小項・変数対応関係情報に格納し、処理をs006へ移行する。
【０３９６】
《対応FF抽出処理＿既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出フロー》
図５６には既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出処理のフローが例示される。各ステップの処理内容は以下の通りである。
【０３９７】
s0001では、高位レベル記述を読み込み、処理をs0002へ移行する。
【０３９８】
s0002では、変数依存関係情報を読み込み、ループあり変数とループなし変数を識別し、その集合をVar1,Var2とし、処理をs0003へ移行する。
【０３９９】
s0003では、集合Var1が空か否か判定し、空の場合、処理をs0007へ移行し、空でない場合、s0004へ移行する。
【０４００】
s0004では、v∈Var1を一つ取り、Var1=Var1-{v}とし、処理をs0005へ移行する。
【０４０１】
s0005では、vの値を出力するための出力変数を高位レベル記述に追加し、処理をs0006へ移行する。
【０４０２】
s0006では、vへの代入文を識別し、その直後にvから対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs0003へ移行する。
【０４０３】
s0007では、高位レベル記述の入力信号へランダム値を与えるテストベンチ生成し、処理をs0008へ移行する。
【０４０４】
s0008では、合成結果RTL記述を読み込み、記述内のFFを識別し、その集合をF1,F2とし、処理をs0009へ移行する。ここで、FFの識別では、既存の論理合成技術を用いても良いし、既存の記述スタイルチェッカによる識別を行ってもよい。また、F2内のFFにて、連接記述が用いられている場合は、連接記述に従った分割を行い、得られた複数のFFをF2に追加すると伴に、分割対象となった連接記述に対応するFFはF2から削除しておくものとする。
【０４０５】
s0009において、集合F1が空か否か判定し、空の場合、処理をs00014へ移行し、空でない場合、s00010へ移行する。
【０４０６】
s00010では、f∈F1を一つ取り、F1=F1-{f}とし、処理をs00011へ移行する。
【０４０７】
s00011では、fの値を出力するための出力変数を合成結果RTL記述に追加し、処理をs00012へ移行する。
【０４０８】
s00012では、fの値を出力するための出力変数への代入記述を合成結果RTL記述に追加し、処理をs0009へ移行する。ここで、例えば、RTLがVerilog記述の場合、代入文としては、assign文を用いた代入文記述を追加すれば良い。
【０４０９】
s00013では、特開２００９−２３０４５１号公報に開示されているSimモデル生成手段適用し、Simモデルを構成しSimモデルを対象にランダムSimを実行した後、処理をs00014へ移行する。
【０４１０】
s00014では、集合Var2が空か否か判定し、空の場合、処理を終了し、空でない場合、処理をs00015へ移行する。
【０４１１】
s00015では、v∈Var2を一つ取り、Var2=Var2-{v}とし、処理をs0016へ移行する。
【０４１２】
s00016では、最小項・変数対応関係情報から、vに対応する最小項を識別し、その集合をΛとし、処理をs0017へ移行する。
【０４１３】
s00017で、集合Λが空か否か判定し、空の場合、処理をs0014へ移行し、空でない場合、s00018へ移行する。
【０４１４】
s00018では、λ∈Λを一つ取り、Λ=Λ-{λ}とし、処理をs00019へ移行する。
【０４１５】
s00019では、集合F2が空か否か判定し、空の場合、処理をs00017へ移行し、空でない場合、s00020へ移行する。
【０４１６】
s00020では、 f∈F2を一つ取り、F2=F2-{f}とし、処理をs00021へ移行する。ここで、fとしては、vのBit幅以下のものを選択する。
【０４１７】
s00021においては、λ=1となる条件でvの信号変化系列とfの信号変化系列が一致するか否か判定し、一致する場合、処理をs00022へ移行し、一致しない場合、s00019へ移行する。
【０４１８】
s00022では、(λ,v,f)を条件付き変数・FF対応候補として格納し、処理をs00019へ移行する。ここで、同一となった(λ,v,f)の信号変化系列をサイクル情報込みで、条件付き変数・FF対応候補に格納しておく。
【０４１９】
《対応FF抽出処理＿図５３におけるｓ３−１０の詳細処理》
図５７には図５３の対応FF抽出処理におけるｓ３−１０の「Pipeline合成RTLを対象とした一対一対応関係情報の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４２０】
s3_10_1では、「既存Simベース等価性判定手法を用いた一対一変数・FF対応関係候補抽出」を実施し、処理をs3_10_2へ移行する。
【０４２１】
s3_10_2では、一対一対応関係候補の抽出結果の集合をΓ1,Γ2とし、処理をs3_10_3に移行する。ここで、Γ1＝Γ2である。
【０４２２】
s3_10_3では、変数iを0に初期化し、処理をs3_10_4に移行する。
【０４２３】
s3_10_4では、集合Γ1が空か否か判定し、空の場合、処理をs3_10_9へ移行し、空でない場合、s3_10_5へ移行する。
【０４２４】
s3_10_5では、γ∈Γ1を一つ取り、Γ1=Γ1-{γ}とし、処理をs3_10_6へ移行する。
【０４２５】
s3_10_6では、γを構成する変数とFFの信号変化系列の信号変化間隔比が一定か否か判定し、一定の場合、処理をs3_10_7へ移行し、そうでない場合、s3_10_10へ移行する。
【０４２６】
s3_10_7では、γを構成する変数とFFの信号変化系列の信号変化間隔の比をR[i]に代入し、処理をs3_10_8へ移行する。
【０４２７】
s3_10_8においては、i=i+1を実行し、処理をs3_10_4へ移行する。
【０４２８】
s3_10_9では、配列R[ ]に格納された正数値が全て等しいか否か判定し、等しい場合、処理をs3_10_11へ移行し、等しくない場合、s3_10_10へ移行する。
【０４２９】
s3_10_10では、定義済み処理である「入出力スループット比非一定RTLを対象とした一対一対応関係情報抽出」処理を実施し、処理を終了する。
【０４３０】
s3_10_11では、任意のγ∈Γ2に対して、γの構成要素である変数とFF出力ピンを、双方出力と見做し、R[0]を用いて文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」の手法を適用し、処理を終了する。
【０４３１】
《対応FF抽出処理＿図５３におけるｓ３−１１の詳細処理》
図５８には図５３の対応FF抽出処理におけるｓ３−１１の「入出力スループット比一定RTLを対象とした一対一対応関係情報の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４３２】
s3_11_1では、定義済み処理である「既存Simベース等価性判定手法を用いた一対一変数・FF対応関係候補抽出」を実施し、処理をs3_11_2へ移行する。
【０４３３】
s3_11_2では、一対一対応関係候補の抽出結果の集合をΓとし、処理をs3_11_3へ移行する。
【０４３４】
s3_11_3では、任意のγ∈Γに対して、γの構成要素である変数とFF出力ピンを、双方出力と見做し、定数である出力周期の比R[0]を用いて非特許文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」の手法を適用し、処理をs3_11_4へ移行する。
【０４３５】
s3_11_13では、Γの部分集合である、一対一対応関係の集合Ξを識別し、処理を終了する。
【０４３６】
《対応FF抽出処理＿図５３におけるｓ３−１２の詳細処理》
図５９には図５３の対応FF抽出処理におけるｓ３−１２の「入出力スループット比非一定RTLを対象とした一対一対応関係情報の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４３７】
s3_12_1では、定義済み処理である「既存Simベース等価性判定手法を用いた一対一変数・FF対応関係候補抽出」を実施し、処理をs3_11_2へ移行する。
【０４３８】
s3_12_2では、一対一対応関係候補の抽出結果の集合をΓとし、集合Ξを空集合として初期化し、処理をs3_12_3へ移行する。
【０４３９】
s3_12_3では、高位レベル記述を読み込み、クロック境界記述を全て削除し、高位レベル記述を修正し、処理をs3_12_4へ移行する。
【０４４０】
s3_12_4では、集合Γが空か否か判定し、空の場合、処理をs3_12_10へ、空でない場合、s3_12_5へ移行する。
【０４４１】
s3_12_5では、γ∈Γを一つ取り、Γ=Γ-{γ}とし、処理をs3_12_6へ移行する。
【０４４２】
s3_12_6では、γの構成要素である変数vとFF出力ピンfを、双方出力と見做し、これらと入力動作以外の動作を内部動作と見做し、非特許文献<6>の手法を適用し、処理をs3_11_7へ移行する。
【０４４３】
s3_12_7では、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」の手法に従い構築した、積ラベル付き遷移システムがDeadlockするか否か検証し、Deadlockした場合、処理をs3_12_4へ移行する。そうでない場合、s3_12_8へ移行する。
【０４４４】
s3_12_8では、v==fが成立したか否か判定し、成立した場合、処理をs3_11_9へ移行し、成立しない場合、s3_12_4へ移行する。
【０４４５】
s3_12_9では、vとfの組を一対一対応関係の集合Ξに追加し、処理をs3_12_10へ移行する。
【０４４６】
s3_12_10では、Γの部分集合である、一対一対応関係の集合Ξを識別し、処理を終了する。
【０４４７】
《対応FF抽出処理＿図５３におけるｓ３−１４の詳細処理》
図６０には図５３の対応FF抽出処理におけるｓ３−１４の「一対一対応関係情報の格納」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４４８】
s3_13_1では、一対一対応関係情報を読み込み、出力の集合をVとし、処理をs3_13_2へ移行する。
【０４４９】
s3_13_2では、集合Vが空であるか否か判定し、空の場合、処理を終了し、空でない場合、処理をs3_13_3へ移行する。
【０４５０】
s3_13_3では、v∈Vを一つとり、V=V-{v}とし、処理をs3_13_4へ移行する。
【０４５１】
s3_13_4では、vがループあり変数か否か判定し、そうである場合、処理をs3_13_6へ移行し、そうでない場合、s3_13_5へ移行する。
【０４５２】
s3_13_5では、vと対応するFFの一対一対応関係をループなし変数一対一対応関係情報に格納し、処理をs3_13_2へ移行する。
【０４５３】
s3_13_6では、vと対応するFFの一対一対応関係をループあり変数一対一対応関係情報に格納し、処理をs3_13_2へ移行する。
【０４５４】
《対応FF抽出処理＿図５３におけるｓ３−２０の詳細処理》
図６１には図５３の対応FF抽出処理におけるｓ３−２０の「サイクル精度合成RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４５５】
s3_20_1では、「最小項構成」処理を実施し、処理をs3_20_2へ移行する。
【０４５６】
s3_20_2では、最小項・変数対応関係情報を読み込み、その情報の成す集合をΔとし、処理をs3_20_3へ移行する。
【０４５７】
s3_20_3では、変数依存関係情報を読み込み、ループあり変数を識別し、その集合をVarとし、処理をs3_20_4へ移行する。
【０４５８】
s3_20_4では、集合Δが空か否か判定し、空の場合、処理をs3_20_9へ移行し、空でない場合、s3_20_5へ移行する。
【０４５９】
s3_20_5では、δ∈Δを一つ取り、Δ=Δ-{δ}とし、処理をs3_20_6へ移行する。
【０４６０】
s3_20_6では、集合Varが空か否か判定し、空の場合、処理をs3_20_4へ移行し、空でない場合、s3_20_7へ移行する。
【０４６１】
s3_20_7では、v∈Varを一つ取り、Var=Var-{v}とし、処理をs3_20_8へ移行する。
【０４６２】
s3_20_8では、δの要素である最小項λとFF出力ピンfに対して、¬（λ∧(v==f)）を構成し、集合Γに格納し、処理をs3_20_6へ移行する。
【０４６３】
s3_20_9では、カット集合を集合Γとして、文献「Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.」の手法を適用し、処理をs3_20_10へ移行する。
【０４６４】
s3_20_10では、帰納的不変量の集合Ξを識別し、処理を終了する。ここで、∀ξ∈Ξに対して、¬ξ∈Λが常に成立する。即ち、集合Ξはλ∧(v==f)の形式で記述された命題論理の集合であり、帰納的不変量の集合となる。
【０４６５】
《対応FF抽出処理＿図５３におけるｓ３−２１の詳細処理》
図６２には図５３の対応FF抽出処理におけるｓ３−２１の「Pipeline合成RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４６６】
s3_21_1では、「最小項構成」処理を実施し、処理をs3_21_2へ移行する。
【０４６７】
s3_21_2では、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応関係候補抽出」を実施し、処理をs3_21_3へ移行する。
【０４６８】
s3_21_3では、条件付き対応関係候補の抽出結果の集合をΓ1,Γ2とし、処理をs3_21_4に移行する。ここで、Γ1＝Γ2である。
【０４６９】
s3_21_4では、変数iを0に初期化し、処理をs3_21_5に移行する。
【０４７０】
s3_21_5では、集合Γ1が空か否か判定し、空の場合、処理をs3_21_10へ移行し、空でない場合、s3_21_6へ移行する。
【０４７１】
s3_21_6においては、γ∈Γ1を一つ取り、Γ1=Γ1-{γ}とし、処理をs3_21_7へ移行する。
【０４７２】
s3_21_7では、γを構成する変数とFFの信号変化系列の信号変化間隔比が一定か否か判定し、一定の場合、処理をs3_21_7へ移行し、そうでない場合、s3_21_10へ移行する。
【０４７３】
s3_21_8では、γの構成要素である最小項λが１となるサイクルのみを対象とした場合の、γを構成する変数とFFの信号変化系列の信号変化間隔の比をR[i]に代入し、処理をs3_21_9へ移行する。
【０４７４】
s3_21_9では、i=i+1を実行し、処理をs3_21_10へ移行する。
【０４７５】
s3_21_10では、配列R[ ]に格納された正数値が全て等しいか否か判定し、等しい場合、処理をs3_21_11へ移行し、等しくない場合、s3_21_12へ移行する。
【０４７６】
s3_21_11では、任意のγ∈Γ2に対して、γの構成要素である変数vとFF出力ピンfを、双方出力と見做し、これらv,fと対応する最小項をλとした場合、出力比較判定回路をλ∧(v==f)に修正し、R[0]を用いて文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」に記載の手法を適用し、処理をs3_21_13へ移行する。
【０４７７】
s3_21_12では、定義済み処理である「入出力スループット比非一定RTLを対象とした、帰納的不変量抽出」処理を実施し、処理をs3_21_13へ移行する。
【０４７８】
s3_21_13では、Γ2の部分集合である、帰納的不変量の集合Ξを識別し、処理を終了する。
【０４７９】
《対応FF抽出処理＿図５３におけるｓ３−２２の詳細処理》
図６３には図５３の対応FF抽出処理におけるｓ３−２２の「入出力スループット比一定RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４８０】
s3_22_1では、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応関係候補抽出」を実施し、処理をs3_22_2へ移行する。
【０４８１】
s3_22_2では、条件付き応関係候補の抽出結果の集合をΓとし、処理をs3_22_3へ移行する。
【０４８２】
s3_22_3では、任意のγ∈Γに対して、γの構成要素である変数vとFF出力ピンfを、双方出力と見做し、これらv,fと対応する最小項をλとした場合、出力比較判定回路をλ∧(v==f)に修正し、定数である出力周期の比R[0]を用いて文献「Pankaj Chauhan, Deepak Goyal, Gagan Hasteer, Anmol Mathur, and Nikhil Sharma, "Non-cycle-accurate Sequential Equivalence Checking," In Proc. of DAC, pp.460-465, 2009.」に記載の手法を適用し、処理をs3_22_4へ移行する。
【０４８３】
s3_22_4では、Γの部分集合である、条件付き対応関係の集合Ξを識別し、処理を終了する。
【０４８４】
《対応FF抽出処理＿図５３におけるｓ３−２３の詳細処理》
図６４には図５３の対応FF抽出処理におけるｓ３−２３の「入出力スループット比非一定RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４８５】
s3_23_1では、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応関係候補抽出」を実施し、処理をs3_23_2へ移行する。
【０４８６】
s3_23_2では、条件付き応関係候補の抽出結果の集合をΓとし、集合Ξを空集合として初期化し、処理をs3_23_3へ移行する。
【０４８７】
s3_23_3では、高位レベル記述を読み込み、クロック境界記述を全て削除し、高位レベル記述を修正し、処理をs3_23_4へ移行する。
【０４８８】
s3_23_4では、集合Γが空か否か判定し、空の場合、処理をs3_23_10へ移行し、空でない場合、s3_23_5へ移行する。
【０４８９】
s3_23_5では、γ∈Γを一つ取り、Γ=Γ-{γ}とし、処理をs3_23_6へ移行する。
【０４９０】
s3_23_6では、γの構成要素である変数vとFF出力ピンfを、双方出力と見做し、これらと入力動作以外の動作を内部動作と見做し、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」に記載の手法に沿って、積遷移システムを構成する。その積遷移システムでの変数vの更新とFF出力fの出力が行われる任意の状態で、これらv,fと対応する最小項をλとした場合、λ∧(v==f)が成立するかを証明し、処理をs3_23_7へ移行する。
【０４９１】
s3_23_7では、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」に記載の手法に従い構築した、積ラベル付き遷移システムがDeadlockするか否か検証する。Deadlockした場合、処理をs3_23_4へ移行し、そうでない場合、s3_23_8へ移行する。
【０４９２】
s3_23_8では、λ∧(v==f)が成立したか否か判定し、成立した場合、処理をs3_23_9へ移行し、成立しない場合、s3_23_4へ移行する。
【０４９３】
s3_23_9では、vとfの組を条件付き対応関係の集合Ξに追加し、処理をs3_23_10へ移行する。
【０４９４】
s3_23_10では、Γの部分集合である、条件付き対応関係の集合Ξを識別し、処理を終了する。
【０４９５】
《対応FF抽出処理＿図５３におけるｓ３−２４の詳細処理》
図６５には図５３の対応FF抽出処理におけるｓ３−２４の「条件付き変数・FF対応関係情報の抽出・格納」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０４９６】
s3_24_1では、帰納的不変量情報を読み込み、その情報の成す集合をΞとし、処理をs3_24_2へ移行する。
【０４９７】
s3_24_2では、集合Ξに含まれるFFと出力変数の集合を識別し、それら集合をそれぞれFとVarとし、処理をs3_24_3へ移行する。
【０４９８】
s3_24_3では、集合Fが空か否か判定し、空の場合、処理を終了し、空でない場合、処理をs3_24_4へ移行する。
【０４９９】
s3_24_4では、f∈Fを一つ取り、F=F-{f}とし、処理をs3_24_5へ移行する。
【０５００】
s3_24_5では、fに対応する最小項と変数の組の集合を識別し、その集合をR⊆Λ×Varとし、処理をs3_24_6へ移行する。ここで、Λは最小項のなす集合であり、Varは変数のなす集合である。
【０５０１】
s3_24_6では、FF fを含む帰納的不変量の式に現れる最小項を全て抽出し、それら最小項全ての論理和が恒真であるか否かを判定し、恒真である場合、処理をs3_24_7へ移行する、そうでない場合、s3_24_3へ移行する。
【０５０２】
s3_24_7で、FF fに対して次に示される数1の式を構成し、条件付き変数・FF対応関係情報に格納し、処理をs3_24_3へ移行する。
【０５０３】
【数１】
0005893954.tif 000002
【０５０４】
《リセット伸張サイクル抽出処理》
リセット伸張サイクル抽出処理ｓ４について詳細を説明する。
【０５０５】
リセット伸張サイクル抽出処理ｓ４は、合成結果RTL、ループあり変数一対一対応関係情報、及びループあり変数非一対一対応関係情報、入出力サイクル情報を入力とし、下記処理を実施する。
【０５０６】
第１に、RTL記述内のループあり変数に対応付けられたFF fの成すフィードバックループが存在するか否かを解析する。フィードバックループの識別は、RTL記述を論理合成して得られるネットリストを、FFを頂点として、FF間の組合わせ論理を介した接続関係を有向辺とするグラフGを構成し、Gに対して、強連結成分への分割を行い、得られた強連結成分の集合をSCCとする事で実施する。各強連結成分がFF fを含むか否か判定する事で、本解析を実施する。
【０５０７】
第２に、上記解析結果で、フィードバックループが存在した場合、FF fを含むフィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数を算出する。FF fを含む強連結成分内f以外の頂点へのfからの最短パスをダイクストラ法により求め、最短パスが経由する頂点数を各頂点の距離とし、その中で最大の値をFF fを含むフィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数として識別する。この値分のサイクル数にて、各頂点に値伝播が可能となり、これがFF fを含むフィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数である事は、構成の仕方から自明である。
【０５０８】
第３に、それらを全てのFFに対して実行し、得られたサイクル数の中で、最大値を求める。Pipeline合成RTLでない場合、この最大値をリセットサイクル期間情報に格納する。Pipeline合成RTLの場合、この最大値とPipeline回路としてのLatencyサイクル-1の値とで、大きい方の値を、リセットサイクル期間情報に格納する。
【０５０９】
第４に、RTLにてフィードバックループを構成しなかった場合は、この変数の持つ対応関係情報を夫々ループなし変数一対一対応関係情報とループなし変数非一対一対応関係情報に格納し、これら変数をループあり変数一対一対応関係情報とループあり変数非一対一対応関係情報から削除する。
【０５１０】
図６６及び図６７にはリセット伸長サイクル抽出処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【０５１１】
s4_1では、ループあり変数一対一対応関係情報を読み込み、FFの集合を識別し、その集合をF1とし、処理をs4_2へ移行する。
【０５１２】
s4_2では、ループあり変数条件付き対応関係情報を読み込み、FFの集合を識別し、その集合をF2とし、処理をs4_3へ移行する。
【０５１３】
s4_3では、集合F, F’をF=F’=F1∪F2と初期化し、集合TをT=φと初期化し、処理をs4_4へ移行する。
【０５１４】
s4_4では、合成結果RTLを読み込み、処理をs4_5へ移行する。
【０５１５】
s4_5では、FFを頂点として、FF間の組合わせ論理やネット接続を介した接続関係を有向辺とするグラフGを構成し、処理をs4_6へ移行する。
【０５１６】
s4_6では、グラフGに対して、強連結成分への分割を行い、得られた強連結成分の集合をSCC1, SCC2とし、全てのs∈SCC2に対して, max_dist[s]=0と初期化し、処理をs4_7へ移行する。ここで、SCC1とSCC2は集合として等しく、SCC1=SCC2である。
【０５１７】
s4_7では、集合SCC1が空か否か判定し、空の場合、処理をs4_26へ移行する。空でない場合、s4_8へ移行する。
【０５１８】
s4_8では、s∈SCC1を一つ取り、SCC1=SCC1-{s}とし、処理をs4_9へ移行する。
【０５１９】
s4_9では、集合TsをTs=φ（空集合）に初期化し、処理をs4_10へ移行する。
【０５２０】
s4_10でｊは、集合Fが空か否か判定し、空の場合、処理をs4_14へ移行する。空でない場合、s4_11へ移行する。
【０５２１】
s4_11では、f∈Fを一つ取り、F=F-{f}とし、処理をs4_12へ移行する。
【０５２２】
s4_12では、fが有向グラフsの頂点として含まれるか否か判定し、含まれる場合、処理をs4_13へ移行する。含まれない場合、s4_10へ移行する。
【０５２３】
s4_13では、Ts=Ts∪{f}、即ち、集合Tsにfを追加し、処理をs4_10へ移行する。
【０５２４】
s4_14では、集合Tsが空か否か判定し、空の場合、処理をs4_22へ移行する。空でない場合、s4_15へ移行する。
【０５２５】
s4_15では、t∈Tsを一つ任意に選択し、処理をs4_16へ移行する。
【０５２６】
s4_16では、変数iを0に初期化し、処理をs4_17へ移行する。
【０５２７】
s4_17では、有向グラフsの頂点の集合をSとし、処理をs4_18へ移行する。
【０５２８】
s4_18では、集合Sが{t}のみを含む集合となっているか否か判定し、そうなっている場合、処理をs4_22へ移行し、そうでない場合、s4_19へ移行する。
【０５２９】
s4_19では、tと異なる頂点s0∈Sを一つ選び、S=S-{s0}とし、処理をs4_20へ移行する。
【０５３０】
s4_20では、ダイクストラ法を用いて、tからs0への最短経路を求め、最短経路がs0に至るまでに経由する頂点数+1をdist[s,i]とし、処理をs4_21へ移行する。
【０５３１】
s4_21で、i=i+1を実行し、処理をs4_18へ移行する。
【０５３２】
s4_22で、dist[s,j](1≦j≦i)の最大値を求め、それをmax_dist[s]とし、処理をs4_23へ移行する。
【０５３３】
s4_23で、T=T∪Ts、即ち集合Tと集合Tsを集合Tに代入し、処理をs4_24へ移行する。
【０５３４】
s4_24で、F=F’-T、即ち、集合F’と集合Tの差集合を集合Fに代入し、処理をs4_25へ移行する。
【０５３５】
s4_25では、集合Fが空か否か判定し、空の場合、処理をs4_26へいこうし、空でない場合、s4_7へ移行する。
【０５３６】
s4_26では、s∈SCC2に対して、max_dixt[s]の最大値max_distを求め、処理をs4_27へ移行する。
【０５３７】
s4_27では、入出力サイクル情報を読み込み、処理をs4_28へ移行する。
【０５３８】
s4_28では、Pipeline合成RTLか否か判定し、その場合、処理をs4_29へ移行する。そうでない場合、s4_30へ移行する。
【０５３９】
s4_29で、max_distをリセットサイクル期間情報に格納し、処理をs4_32へ移行する。
【０５４０】
s4_30で、max_dist＞レイテンシサイクル数−１の判定を行い、判定結果が真の場合、処理をs4_29へいこうし、偽の場合、s4_31へ移行する。
【０５４１】
s4_31では、レイテンシサイクル数-1をリセットサイクル期間情報に格納し、処理をs4_32へ移行する。
【０５４２】
s4_32では、ループあり変数条件対応関係情報から、集合Fに含まれるFFとの対応関係情報を識別する。それをループなし変数条件付き対応関係情報に格納するとともに、ループあり変数条件付き対応関係情報から削除し、処理をs4_28へ移行する。
【０５４３】
s4_33では、ループあり変数一対一対応関係情報から、集合Fに含まれるFFとの対応関係情報を識別する。それをループなし変数一対一対応関係情報に追加するとともに、ループあり変数一対一対応関係情報から削除し、処理を終了する。
【０５４４】
《検証スクリプト改変処理＿処理概要》
検証スクリプト改変処理ｓ５についてその概要を先ず説明する。
【０５４５】
検証スクリプト改変処理は、高位レベル記述、合成結果RTL、リセットサイクル期間情報、入出力サイクル情報、変数・FF対応情報、及び動作合成ツールが出力した雛形検証スクリプトを入力として、雛形スクリプトに対して、リセットサイクル期間情報、入出力サイクル情報、変数・FF対応情報の生成及び改変を実施する。ここでは、「検証スクリプトコマンド例」を対象としたスクリプト情報の生成及び改変処理を一例としてその詳細について説明する。
【０５４６】
検証スクリプト改変処理では、読み込んだ入出力サイクル情報の合成結果RTL構造情報から、合成結果RTLの分類を実施し、次に示す「検証スクリプトコマンド例」で対応可能なRTL構造に関して、以下のスクリプト改変処理を実施する。
第１は、入出力対応設定のスクリプト改変処理である。これは、高位レベル記述/合成結果RTL間の各入出力信号の対応関係は雛形検証スクリプトに記載されていることを前提とする。
第２は、一対一対応変数・FFのサイクル情報抽出処理である。
第３は、リセットサイクル期間設定のスクリプト改変処理である。第４は、変数・FF対応設定のスクリプト生成処理である。
【０５４７】
また、上記の生成及び改変処理を実施する中で、スクリプト情報の優先順位付けを実施し、以下の３つの検証スクリプトを生成する。
第１の検証スクリプトは、雛形スクリプトに対して、入出力対応設定の追加と、リセットサイクル期間設定を改変したスクリプトである。
第２の検証スクリプトは、第１の検証スクリプトに対して、ループあり変数一対一対応設定と、ループあり変数非一対一対応設定を追加したスクリプトである。
第３の検証スクリプトは、第２の検証スクリプトに対して、ループなし変数一対一対応設定と、ループなし変数非一対一対応設定を追加したスクリプトである。
【０５４８】
検証スクリプト改変処理で実行するコマンドの例として以下の検証スクリプトコマンドを用いる。
【０５４９】
（１）リセットサイクル期間設定コマンド：reset
リセットサイクル期間設定コマンドは、高位レベル記述もしくはRTLに対して、リセットとなる入力ポートを指定し、リセットサイクル期間と、その期間に入力すべき入力値を指定する。
【０５５０】
このコマンドの記述形式、コマンド記述例は図６８に示す。
【０５５１】
（２）Throughputサイクル設定コマンド：throughput
Throughputサイクル設定コマンドは、高位レベル記述もしくはRTLに対して、回路全体のThroughputを指定する。当該コマンドの記述形式、及びコマンド記述例を図６９に示す。
【０５５２】
（３）入力ポート対応設定コマンド：input_map
入力ポート対応設定コマンドは、高位レベル記述とRTLの間で対応する入力ポートを指定するコマンドである。本コマンドで指定された高位レベル記述とRTLの入力ポートには、同パターンの入力値が入力される。また、高位レベル記述、RTLそれぞれに対して、リセット処理から最初の入力値変化までのサイクル数(Latencyサイクル値)と入力値変化周期サイクル値を指定することができる。
【０５５３】
当該コマンドの記述形式、及びコマンド記述例を図７０に示す。
【０５５４】
（４）出力ポート対応設定コマンド：output_map
出力ポート対応設定コマンドは、高位レベル記述とRTLの間で対応する出力ポートを指定する。本コマンドで指定された高位レベル記述とRTLの出力ポートに関して、比較動作が実施される。また、高位レベル記述、RTLそれぞれに対して、リセット処理から最初の出力値比較までのサイクル数(Latencyサイクル値)と出力値比較周期サイクル値を指定することができる。
【０５５５】
当該コマンドの記述形式、及びコマンド記述例を図７１に示す。
【０５５６】
（５）変数・FF一対一対応設定コマンド：flop_map
変数・FF一対一対応設定コマンドは、高位レベル記述とRTLの間で一対一に対応する変数・FFを指定する。本コマンドで指定された高位レベル記  述の変数とRTLのFFに関して、比較動作が実施される。また、高位レベル記述、RTLそれぞれに対して、リセット処理から最初の値比較までのサイクル数(Latencyサイクル値)と値比較周期サイクル値を指定することができる。
【０５５７】
当該コマンドの記述形式、及びコマンド記述例を図７２に示す。
【０５５８】
（６）変数・FF非一対一対応設定コマンド：conditional_flop_map
変数・FF非一対一対応設定コマンドは、高位レベル記述とRTLの間で条件付きで対応する変数・FFを指定する。本コマンドで指定された高位レベル記述の変数とRTLのFFに関して、比較動作が実施される。本実施の形態では、RTLのFFに対して、高位レベル記述の変数が複数対応する場合を想定しており、それぞれの変数に対して、RTLのFFと対応するための条件 (代入実行条件)もあわせて指定する。
【０５５９】
当該コマンドの記述形式、及びコマンド記述例を図７３に示す。
【０５６０】
《検証スクリプト改変処理ｓ５の詳細》
検証スクリプト改変処理ｓ５についてその詳細を説明する。
【０５６１】
動作合成結果であるＲＴＬ記述に対して、その構造から検証スクリプト改変処理ｓ５のために、以下の分類が行われる。サイクル精度合成RTLに対しては、入出力スループット比一定、又は入出力スループット比非一定、の分類が行われる。Pipeline合成RTLに対しては、全入出力の出現回数が1、又は上記以外(出現回数が2以上の入出力を有する)、の分類が行われる。上記以外のRTLに対しては、入出力スループット比一定、又は入出力スループット比非一定、の分類が行われる。
【０５６２】
上記分類に対して、前記検証スクリプトコマンド例で対応可能なものは、以下の通りである。サイクル精度合成RTLについては、入出力スループット比一定及び入出力スループット比非一定が対応可能である。Pipeline合成RTLについては全入出力の出現回数が1のｐ場合に対応可能である。上記以外のRTLについては入出力スループット比一定の場合が対応可能である。
【０５６３】
図７４には検証スクリプト改変処理ｓ５の全体的な処理フローが例示される。各ステップの処理内容は以下の通りである。
【０５６４】
s5_1では、入出力サイクル情報を読み込み、処理をs5_2へ移行する。
【０５６５】
s5_2では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがサイクル精度合成か否かを判定し、サイクル制度合成の場合、処理をs5_6へ移行する。そうでない場合、s5_3へ移行する。
【０５６６】
s5_3では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがパイプライン合成か否かを判定し、パイプライン合成の場合、処理をs5_9へ移行する、そうでない場合、s5_4へ移行する。
【０５６７】
s5_4では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLが入出力スループット比一定RTLか否かを判定し、入出力スループット比一定RTLの場合、処理をs5_11へ移行する。そうでない場合、s5_5に移行する。
【０５６８】
s5_5では、本実施の形態で使用する検証スクリプトコマンド例では対応できない構造であるため、「対応不可能」の旨を標準出力し、処理を終了する。
【０５６９】
s5_6では、入出力サイクル情報に含まれる全入力共通のThroughput情報と全出力共通のThroughput情報の両者を参照し、両者ともに一定か否かを判定し、その場合、処理をs5_7へ移行する。そうでない場合、s5_8へ移行する。
【０５７０】
s5_7では、「入出力スループット比一定のサイクル精度合成RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_12へ移行する。
【０５７１】
s5_8では、「入出力スループット比非一定のサイクル精度合成RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_13へ移行する。
【０５７２】
s5_9では、入出力サイクル情報に含まれる各入出力の出現回数情報を参照し、全入出力の出現回数が1であるか否かを判定し、その場合、処理をs5_10へ移行する。そうでない場合、s5_5に移行する。
【０５７３】
s5_10では、「Pipeline合成RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_14へ移行する。
【０５７４】
s5_11では、「入出力スループット比一定RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_15へ移行する。
【０５７５】
s5_12では、「入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【０５７６】
s5_13では、「入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【０５７７】
s5_14では、「Pipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【０５７８】
s5_15では、「入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【０５７９】
s5_16では、「リセットサイクル期間設定改変処理」を実施し、処理をs5_17へ移行する。
【０５８０】
s5_17では、雛形スクリプトに対して、入出力対応設定の追加と、リセットサイクル期間設定を改変したスクリプトを第１のスクリプトとして出力し、処理をs5_18に移行する。
【０５８１】
s5_19では、「変数・FF対応設定生成処理」を実施し、処理を終了する。
【０５８２】
上記ステップの内、関数コールを伴うステップｓ５＿７、ｓ５＿８、s５＿１０、s５＿１１、s５＿１２、ｓ５＿１３、ｓ５＿１４、ｓ５＿１５、ｓ５＿１６、ｓ５＿１８について以下詳述する。
【０５８３】
《検証スクリプト改変処理内のｓ５＿７》
入出力スループット比一定のサイクル精度合成を対象とした入出力対応設定改変処理ｓ５＿７では、高位レベル記述と入出力スループット比一定のサイクル精度合成RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、及び高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンドthroughputである。
【０５８４】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)対応するRTLの入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、サイクル精度合成であるため、各入力ポートに対する初期Throughput値、Throughput値は高位レベル記述とRTLで同じ値となる。
【０５８５】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、更に、対応するRTLの出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、サイクル精度合成であるため、各出力ポートに対する初期Throughput値、Throughput値は高位レベル記述とRTLで同じ値となる。
【０５８６】
高位レベル記述/RTLそれぞれのthroughputコマンドには、以下を設定する。すなわち、高位レベル記述のThroughput値は、高位レベル記述の全入出力のThroughput値の中の最大値である。RTLのThroughput値は、RTLの全入出力のThroughput値の中の最大値である。なお、入出力スループット比一定のサイクル精度合成であるため、回路全体のThroughput値は高位レベル記述とRTLで同じ値となる。
【０５８７】
《検証スクリプト改変処理内のｓ５＿８》
入出力スループット比非一定のサイクル精度合成を対象とした入出力対応設定改変処理ｓ５＿８では、高位レベル記述と入出力スループット比非一定のサイクル精度合成RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、及び高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンドthroughputである。
【０５８８】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)対応するRTLの入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、入出力スループット比非一定のサイクル精度合成であるため、各入力ポートが毎サイクル変化するものとみなし、各入力ポートに対する初期Throughput値、Throughput値は高位レベル記述/RTLともに1とする。
【０５８９】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、入出力スループット比非一定のサイクル精度合成であるため、各出力ポートが毎サイクル変化するものをみなし、各出力ポートに対する初期Throughput値、Throughput値は高位レベル記述/RTLともに1とする。
【０５９０】
高位レベル記述/RTLそれぞれのthroughputコマンドには、それぞれの回路全体のThroughput値を設定する。なお、入出力スループット比非一定のサイクル精度合成であるため、全入出力が毎サイクル変化するものとみなし、高位レベル記述/RTL両者の回路全体のThroughput値は1とする。
【０５９１】
《検証スクリプト改変処理内のｓ５＿１０》
Pipeline合成を対象とした入出力対応設定改変処理ｓ５＿１０では、高位レベル記述とPipeline合成RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンド throughputである。
【０５９２】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの入力ポート名、Latency値(-lat)、Throughput値(-freq)である。
【０５９３】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの出力ポート名、Latency値(-lat)、Throughput値(-freq)である。
【０５９４】
高位レベル記述/RTLそれぞれのthroughputコマンドには、以下を設定する。すなわち、高位レベル記述のThroughput値には、高位レベル記述の全入出力のThroughput値の中の最大値を設定し、RTLのThroughput値には、全出力共通のThroughput値を設定する。
【０５９５】
《検証スクリプト改変処理内のｓ５＿１１》
入出力スループット比一定RTLを対象とした入出力対応設定改変処理ｓ５＿１１では、高位レベル記述と入出力スループット比一定RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変の対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンドthroughputである。
【０５９６】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。
【０５９７】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。
【０５９８】
高位レベル記述/RTLそれぞれのthroughputコマンドには、以下を設定する。即ち、高位レベル記述のThroughput値には、高位レベル記述の全入出力のThroughput値の中の最大値を、RTLのThroughput値には、RTLの全入出力のThroughput値の中の最大値を設定する。
【０５９９】
《検証スクリプト改変処理内のｓ５＿１２》
入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理ｓ５＿１２では、ループあり変数一対一対応関係情報、ループなし変数一対一対応関係情報、高位レベル記述、及び合成結果RTL記述を使用し、高位レベル記述を対象とした記号Sim手法である文献「Alfred Koelbl and Carl Pixley, “Constructing Efficient Formal Models from High-Level Descriptions Using Symbolic Simulation,” International Journal of Parallel Programming 33(6), pp.645-666, 2005.」、RTL記述を対象とした記号Sim手法である文献「Alfred Koelbl, James Kukula, and Robert Damiano, “Symbolic RTL simulation,” In Proc. of DAC, 2001.」、及びランダムSimを適用することで、一対一対応する変数・FFに対して、以下の情報を抽出する。抽出対象は、各変数・FFのLatency値(リセット処理から最初の値変化が発生するサイクル数)、及び各変数・FFのThroughput値(値変化が発生する周期サイクル)である。
【０６００】
Latency値は以下の方法で抽出する。すなわち、記号Sim結果から、各変数・FFのリセット処理から最初の記号値変化が発生するサイクル数をLatency値として抽出する。
【０６０１】
Throughput値は以下の方法で抽出する。即ち、ランダムSim結果から、各変数・FFの信号値変化のサイクル間隔を識別し、信号値変化サイクルの最小値を求め、信号変化系列に現れる全信号変化のサイクル間隔が最小値の整数倍か否かを判定する。記号Simを適用することで、正確なサイクル間隔を抽出することも可能であるが、現実的な時間で情報抽出できない可能性もあるため、本実施の形態ではランダムSimによって、各変数・FFの値変化のサイクル間隔情報を抽出する。全信号値変化のサイクル間隔が最小値の整数倍である場合、その最小値をThroughput値として抽出する。全信号値変化のサイクル間隔が最小値の整数倍でない場合、Throughput値を1とする。
【０６０２】
各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【０６０３】
《検証スクリプト改変処理内のｓ５＿１３》
入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理ｓ５＿１３では、ループあり変数一対一対応関係情報、及びループなし変数一対一対応関係情報を使用し、一対一対応する変数・FFに対して、以下の情報を抽出する。抽出する情報は、各変数・FFのLatency値(リセット処理から最初の値変化が発生するサイクル数)、各変数・FFのThroughput値(値変化が発生する周期サイクル)である。
【０６０４】
Latency値は以下の方法で抽出する。即ち、各変数・FFのLatency値を1とする。
【０６０５】
Throughput値は以下の方法で抽出する。即ち、各変数・FFのThroughput値を1とする。
【０６０６】
また、各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【０６０７】
《検証スクリプト改変処理内のｓ５＿１４》
Pipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理ｓ５＿１４では、ループあり変数一対一対応関係情報、ループなし変数一対一対応関係情報、高位レベル記述、及び合成結果RTL記述を使用し、高位レベル記述を対象とした記号Sim手法である非特許文献「Alfred Koelbl and Carl Pixley, “Constructing Efficient Formal Models from High-Level Descriptions Using Symbolic Simulation,” International Journal of Parallel Programming 33(6), pp.645-666, 2005.」、RTL記述を対象とした記号Sim手法である文献「Alfred Koelbl, James Kukula, and Robert Damiano, “Symbolic RTL simulation,” In Proc. of DAC, 2001.」、ランダムSimを適用することで、一対一対応する変数・FFに対して、以下の情報を抽出する。抽出される情報は、各変数・FFのLatency値(リセット処理から最初の値変化が発生するサイクル数)、各変数・FFのThroughput値(値変化が発生する周期サイクル)である。
【０６０８】
Latency値は以下の方法で抽出する。即ち、記号Sim結果から、各変数・FFのリセット処理から最初の記号値変化が発生するサイクル数をLatency値として抽出する。
【０６０９】
Throughput値は以下の方法で抽出する。すなわち、ランダムSim結果から、各変数の信号値変化のサイクル間隔を識別し、信号値変化サイクルの最小値を求め、その最小値を各変数のThroughput値として抽出する。記号Simを適用することで、正確なサイクル間隔を抽出することも可能であるが、現実的な時間で情報抽出できない可能性もあるため、本実施例ではランダムSimによって、各変数の値変化のサイクル間隔情報を抽出する。Pipeline合成RTLの全出力のThroughput値を、各FFのThroughput値として抽出する。
【０６１０】
また、各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【０６１１】
《検証スクリプト改変処理内のｓ５＿１５》
入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理ｓ５＿１５では、ループあり変数一対一対応関係情報、ループなし変数一対一対応関係情報、高位レベル記述、及び合成結果RTL記述を使用し、高位レベル記述を対象とした記号Sim手法である文献「Alfred Koelbl and Carl Pixley, “Constructing Efficient Formal Models from High-Level Descriptions Using Symbolic Simulation,” International Journal of Parallel Programming 33(6), pp.645-666, 2005.」、RTL記述を対象とした記号Sim手法である非特許文献「Alfred Koelbl, James Kukula, and Robert Damiano, “Symbolic RTL simulation,” In Proc. of DAC, 2001.」、ランダムSimを適用することで、一対一対応する変数・FFに対して、以下の情報を抽出する。抽出される情報は、各変数・FFのLatency値(リセット処理から最初の値変化が発生するサイクル数)、各変数・FFのThroughput値(値変化が発生する周期サイクル)である。
【０６１２】
Latency値は以下の方法で抽出する。即ち、記号Sim結果から、各変数・FFのリセット処理から最初の記号値変化が発生するサイクル数をLatency値として抽出する。
【０６１３】
Throughput値は以下の方法で抽出する。すなわち、ランダムSim結果から、各変数・FFの信号値変化のサイクル間隔を識別し、信号値変化サイクルの最小値を求め、信号変化系列に現れる全信号変化のサイクル間隔が最小値の整数倍か否かを判定する。記号Simを適用することで、正確なサイクル間隔を抽出することも可能であるが、現実的な時間で情報抽出できない可能性もあるため、本実施例ではランダムSimによって、各変数・FFの値変化のサイクル間隔情報を抽出する。一対一対応する変数とFFの、それぞれの全信号値変化のサイクル間隔がともに最小値の整数倍の場合、変数・FFそれぞれの信号値変化のサイクル間隔の最小値を、それぞれのThroughput値として抽出する。一方、一対一対応する変数・FFどちらかの、全信号値変化のサイクル間隔が最小値の整数倍でない場合、前記「入出力スループット比一定RTLを対象とした入出力対応設定生成処理」で生成された、高位レベル記述/RTL向けそれぞれのthroughputコマンドに設定されている値を、各変数・FFのThroughput値として、それぞれ抽出する。
【０６１４】
また、各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【０６１５】
《検証スクリプト改変処理内のｓ５＿１６》
リセットサイクル期間設定改変処理ｓ５＿１６では、高位レベル記述とRTLに対して、リセットサイクル期間情報と雛形スクリプトのリセットサイクル期間設定を使用し、以下を改変する。改変対象は、高位レベル記述/RTLそれぞれのリセットサイクル期間設定コマンド resetである。
【０６１６】
また、雛形スクリプトで設定されたリセット値のサイクル期間と(非リセット値が設定されている場合はその期間を除く)、リセットサイクル期間情報のサイクル期間をあわせたサイクル期間を、改変したリセットサイクル期間とし、高位レベル記述/RTLの両者のresetコマンドに設定する。
【０６１７】
《検証スクリプト改変処理内のｓ５＿１８》
変数・FF対応設定生成処理では、高位レベル記述とRTLに対して、変数・FF対応情報を使用し、以下を設定する。即ち、設定対象は、変数・FF一対一対応設定コマンド flop_map、変数・FF非一対一対応設定コマンド conditional_flop_mapである。
【０６１８】
変数・FF一対一対応設定コマンドflop_mapには、以下を設定する。即ち、高位レベル記述の変数名、リセット処理から最初の値変化が行われるまでのサイクル数(-lat)、値変化の周期サイクル(-freq)、対応するRTLのFF名、リセット処理から最初の値変化が行われるまでのサイクル数(-lat)、及び値変化の周期サイクル (-freq)である。
【０６１９】
また、変数・FF非一対一対応設定コマンドconditional_flop_mapには、以下を設定する。即ち、RTLのFF名、及び対応する高位レベルの全変数と、それら各変数に代入が実施される代入実行条件(-cond)である。
【０６２０】
また、変数・FF対応設定を可能な限り指定した場合、対応関係が正しいか否かの検証が等価性検証では必要となり、これが実行されるため、沢山指定した場合、その実行時間のオーバヘッドが無視できなくなる、という問題があるため、本実施の形態では、変数・FF対応設定に以下の優先順位を付ける。
1) ループあり変数一対一対応設定
2) ループあり変数非一対一対応設定
3) ループなし変数一対一対応設定
4) ループなし変数非一対一対応設定
上記の優先順位に従い、変数・FF対応設定生成処理では、第２の検証スクリプトと第３の検証スクリプトを出力し、それぞれの設定内容は以下となる。第１の検証スクリプトには、前記までの入出力対応設定とリセットサイクル期間設定が設定されている。第２の検証スクリプトには、第１の検証スクリプトの設定に加えて、ループあり変数一対一対応設定、又はループあり変数非一対一対応設定を設定する。第３の検証スクリプトには、第２の検証スクリプトの設定に加えて、ループなし変数一対一対応設定、又はループなし非一対一対応設定を設定する。
【０６２１】
《検証スクリプト改変処理内のｓ５＿７の詳細フロー》
図７５にはs5_7の「入出力スループット比一定のサイクル精度合成を対象とした入出力対応設定改変処理」フローの前半が例示される。図７６にはその処理フローの後半が例示される。各ステップの内容は以下の通りである。
【０６２２】
s5_7_1では、入出力サイクル情報に含まれる回路種別情報からサイクル精度合成RTLを識別し、RTLに対する各入力情報の集合をI、各出力情報の集合をOとし、処理をs5_7_2へ移行する。
【０６２３】
s5_7_2では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納する。更にスクリプトコマンドoutput_mapを識別し、各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_7_3に移行する。
【０６２４】
s5_7_3では、集合変数VにIを代入し、変数max_thを0に初期化し、処理をs5_7_4へ移行する。
【０６２５】
s5_7_4では、集合Vが空か否かを判定し、その場合、処理をs5_7_5へ移行し、そうでない場合、s5_7_10へ移行する。
【０６２６】
s5_7_5では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_7_6へ移行する。
【０６２７】
s5_7_6では、入力信号対応関係情報RIからvに対応する高位レベル記述の入力信号名を識別し、処理をs5_7_7に移行する。
【０６２８】
s5_7_7では、スクリプトコマンドinput_mapの-rに対して、
[ <高位レベル記述の信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、-iに対して、
[ <vの信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、処理をs5_7_8に移行する。
【０６２９】
s5_7_8では、 vのThroughput値 > max_thの判定を行い、その場合、処理をs5_7_9へ移行し、そうでない場合、s5_7_4へ移行する。
【０６３０】
s5_7_9では、変数max_thにvのThroughput値を代入し、処理をs5_7_4へ移行する。
【０６３１】
s5_7_10では、集合変数VにOを代入し、処理をs5_7_11へ移行する。
【０６３２】
s5_7_11では、集合Vが空か否かを判定し、空の場合、処理をs5_7_13へ移行し、空でない場合、s5_7_12へ移行する。
【０６３３】
s5_7_12では、スクリプトコマンドthroughputの-r、-iの両者に対して、max_thの値を設定し、処理を終了する。
【０６３４】
s5_7_13では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_7_14へ移行する。
【０６３５】
s5_7_14では、出力信号対応関係情報ROからvに対応する高位レベル記述の出力信号名を識別し、処理をs5_7_15に移行する。
【０６３６】
s5_7_15では、スクリプトコマンドoutput_mapの-rに対して、
[ <高位レベル記述の信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、-iに対して、
[ <vの信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、処理をs5_7_16に移行する。
【０６３７】
s5_7_16では、vのThroughput値 > max_thの判定を行い、その場合には処理をs5_7_17へ移行し、そうでない場合には処理をs5_7_11へ移行する。
【０６３８】
s5_7_17では、変数max_thにvのThroughput値を代入し、処理をs5_7_11へ移行する。
【０６３９】
《検証スクリプト改変処理内のｓ５＿８の詳細フロー》
図７７にはs5_8の「入出力スループット比非一定のサイクル精度合成を対象とした入出力対応設定改変処理」フローが例示される。各ステップの内容は以下の通りである。
【０６４０】
s5_8_1では、入出力サイクル情報に含まれる回路種別情報からサイクル精度合成RTLを識別し、RTLに対する各入力情報の集合をI、各出力情報の集合をOとし、処理をs5_8_2へ移行する。
【０６４１】
s5_8_2では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納し、スクリプトコマンドoutput_mapを識別する。そして各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_8_3に移行する。
【０６４２】
s5_8_3では、集合変数VにIを代入し、処理をs5_8_4へ移行する。
【０６４３】
s5_8_4では、集合Vが空か否かを判定し、空の場合、処理をs5_8_8へ移行する。空でない場合、s5_8_5へ移行する。
【０６４４】
s5_8_5では、集合変数VにOを代入し、処理をs5_8_6へ移行する。
【０６４５】
s5_8_6では、集合Vが空か否かを判定し、空の場合、処理をs5_8_11へ移行する。空でない場合、s5_8_7へ移行する。
【０６４６】
s5_8_7では、スクリプトコマンドthroughputの-r、-iの両者に対して、1を設定し、処理を終了する。
【０６４７】
s5_8_8では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_8_9へ移行する。
【０６４８】
s5_8_9では、入力信号対応関係情報RIからvに対応する高位レベル記述の入力信号名を識別し、処理をs5_8_10に移行する。
【０６４９】
s5_8_10では、スクリプトコマンドinput_mapの-r に対して、
[ <高位レベル記述の信号名> -lat 1 -freq 1 ]を指定し、-i に対して、
[ <vの信号名> -lat 1 -freq 1 ]を指定し、処理をs5_8_4に移行する。
【０６５０】
s5_8_11では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_8_12へ移行する。
【０６５１】
s5_8_12では、出力信号対応関係情報ROからvに対応する高位レベル記述の入力信号名を識別し、処理をs5_8_13に移行する。
【０６５２】
s5_8_13では、スクリプトコマンドoutput_mapの-r に対して、
[ <高位レベル記述の信号名> -lat 1 -freq 1 ]を指定し、-i に対して、
[ <vの信号名> -lat 1 -freq 1 ]を指定し、処理をs5_8_6に移行する。
【０６５３】
《検証スクリプト改変処理内のｓ５＿１０の詳細フロー》
図７８にはs5_10の「Pipeline合成RTLを対象とした入出力対応設定改変処理」フローの前半が例示される。図７９にはその処理フローの後半が例示される。各ステップの内容は以下の通りである。
【０６５４】
s5_10_1では、入出力サイクル情報に含まれる回路種別情報から高位レベル記述を識別し、高位レベル記述に対する各入力情報の集合を集合変数I1に、各出力情報の集合を集合変数O1に、それぞれ代入し、処理をs5_10_2に移行する。
【０６５５】
s5_10_2では、入出力サイクル情報に含まれる回路種別情報からPipeline合成RTLを識別し、Pipeline合成RTLに対する各入力情報の集合を集合変数I2に、各出力情報の集合を集合変数O2に、それぞれ代入し、処理をs5_10_3に移行する。
【０６５６】
s5_10_3では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納し、スクリプトコマンドoutput_mapを識別し、各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_10_4に移行する。
【０６５７】
s5_10_4では、集合変数V1にI1を、集合変数V2にI2を、それぞれ代入し、処理をs5_10_5に移行する。
【０６５８】
s5_10_5では、変数max_thを0に初期化し、処理をs5_10_6に移行する。
【０６５９】
s5_10_6では、集合V1が空か否かを判定し、空の場合、処理をs5_10_7に移行する。空でない場合、s5_10_13に移行する。
【０６６０】
s5_10_7では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_10_8に移行する。
【０６６１】
s5_10_8では、入力信号対応関係情報RIからv1に対応する入力ポートv2を識別し、処理をs5_10_9に移行する。
【０６６２】
s5_10_9では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_10_10に移行する。
【０６６３】
s5_10_10では、スクリプトコマンドinput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2のLatency値> -freq <v2のThroughput値> ]を指定し、処理をs5_10_11に移行する。
【０６６４】
s5_10_11では、v1のThroughput値 > max_thの判定を行い、その場合、処理をs5_10_12に移行し、そうでない場合、s5_10_6に移行する。
【０６６５】
s5_10_12では、変数max_thにv1のThroughput値を代入し、処理をs5_10_6に移行する。
【０６６６】
s5_10_13では、集合変数V1にO1を、集合変数V2にO2を、それぞれ代入し、処理をs5_10_14に移行する。
【０６６７】
s5_10_14では、集合V1が空か否かを判定し、空の場合、処理をs5_10_17に移行し、空でない場合、処理をs5_10_15に移行する。
【０６６８】
s5_10_15では、スクリプトコマンドthroughputの-rに対して、max_thの値を指定し、処理をs5_10_16に移行する。
【０６６９】
s5_10_16では、スクリプトコマンドthroughputの-iに対して、Pipeline合成RTLの回路全体のThroughput値を指定し、処理を終了する。
【０６７０】
s5_10_17では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_10_18に移行する。
【０６７１】
s5_10_18では、出力信号対応関係情報ROからv1に対応する出力ポートv2を識別し、処理をs5_10_19に移行する。
【０６７２】
s5_10_19では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_10_20に移行する。
【０６７３】
s5_10_20では、スクリプトコマンドoutput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2のLatency値> -freq <v2のThroughput値> ]を指定し、処理をs5_10_21に移行する。
【０６７４】
s5_10_21では、v1のThroughput値 > max_thの判定を行い、その場合、処理をs5_10_22に移行し、そうでない場合、s5_10_14に移行する。
【０６７５】
s5_10_22では、変数max_thにv1のThroughput値を代入し、処理をs5_10_14に移行する。
【０６７６】
《検証スクリプト改変処理内のｓ５＿１１の詳細フロー》
図８０にはs5_11の「入出力スループット比一定RTLを対象とした入出力対応設定改変処理」の前半のフローが例示される。図８１にはその後半の処理フローが例示される。各ステップの内容は以下の通りである。
【０６７７】
s5_11_1では、入出力サイクル情報に含まれる回路種別情報から高位レベル記述を識別し、高位レベル記述に対する各入力情報の集合をI1、各出力情報の集合をO1とし、処理をs5_11_2に移行する。
【０６７８】
s5_11_2では、入出力サイクル情報に含まれる回路種別情報から入出力スループット比一定RTLを識別し、入出力スループット比一定RTLに対する各入力情報の集合をI2、各出力情報の集合をO2とし、処理をs5_11_3に移行する。
【０６７９】
s5_11_3では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納し、スクリプトコマンドoutput_mapを識別し、各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_11_4に移行する。
【０６８０】
s5_11_4では、変数max_th1、max_th2を0に初期化し、処理をs5_11_5に移行する。
【０６８１】
s5_11_5では、集合変数V1にI1、V2にI2をそれぞれ代入し、処理をs5_11_6に移行する。
【０６８２】
s5_11_6では、集合V1が空か否かを判定し、その場合、処理をs5_11_7に移行し、そうでない場合、s5_11_15に移行する。
【０６８３】
s5_11_7では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_11_8に移行する。
【０６８４】
s5_11_8では、入力信号対応関係情報RIからv1に対応する入力ポートv2を識別し、処理をs5_11_9に移行する。
【０６８５】
s5_11_9では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_11_10に移行する。
【０６８６】
s5_11_10では、スクリプトコマンドinput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2の初期Throughput値> -freq <v2のThroughput値> ]を指定し、処理をs5_11_11に移行する。
【０６８７】
s5_11_11では、v1のThroughput値 > max_th1の判定を行い、その場合、処理をs5_11_12に移行し、そうでない場合、s5_11_13に移行する。
【０６８８】
s5_11_12では、変数max_th1にv1のThroughput値を代入し、処理をs5_11_13に移行する。
【０６８９】
s5_11_13では、v2のThroughput値 > max_th2の判定を行い、その場合、処理をs5_11_14に移行し、そうでない場合、s5_11_6に移行する。
【０６９０】
s5_11_14では、変数max_th2にv2のThroughput値を代入し、処理をs5_11_6に移行する。
【０６９１】
s5_11_15では、集合変数V1にO1、V2にO2をそれぞれ代入し、処理をs5_11_16に移行する。
【０６９２】
s5_11_16では、集合V1が空か否かを判定し、その場合、処理をs5_11_19に移行し、そうでない場合、s5_11_17に移行する。
【０６９３】
s5_11_17では、スクリプトコマンドthroughputの-rに対して、max_th1の値を指定し、処理をs5_11_18に移行する。
【０６９４】
s5_11_18では、スクリプトコマンドthroughputの-iに対して、max_th2の値を指定し、処理を終了する。
【０６９５】
s5_11_19では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_11_20に移行する。
【０６９６】
s5_11_20では、出力信号対応関係情報ROからv1に対応する入力ポートv2を識別し、処理をs5_11_21に移行する。
【０６９７】
s5_11_21では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_11_22に移行する。
【０６９８】
s5_11_22では、スクリプトコマンドoutput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2の初期Throughput値> -freq <v2のThroughput値> ]を指定し、処理をs5_11_23に移行する。
【０６９９】
s5_11_23では、v1のThroughput値 > max_th1の判定を行い、その場合、処理をs5_11_24に移行し、そうでない場合、s5_11_25に移行する。
【０７００】
s5_11_24では、変数max_th1にv1のThroughput値を代入し、処理をs5_11_25に移行する。
【０７０１】
s5_11_25では、v2のThroughput値 > max_th2の判定を行い、その場合、処理をs5_11_26に移行し、そうでない場合、s5_11_16に移行する。
【０７０２】
s5_11_26では、変数max_th2にv2のThroughput値を代入し、処理をs5_11_16に移行する。
【０７０３】
《検証スクリプト改変処理内のｓ５＿１２の詳細フロー》
図８２にはs5_12の「入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」の開始からの一部のフローが例示される。図８３には図８２に続く処理フローが例示され、図８４には図８３に続いて終了にいたる処理フローが例示される。各ステップの内容は以下の通りである。
【０７０４】
s5_12_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_12_2に移行する。
【０７０５】
s5_12_2では、集合変数Var2にVar1を、F2にF1をそれぞれ代入し、処理をs5_12_3に移行する。
【０７０６】
s5_12_3では、高位レベル記述を読込み、処理をs5_12_4に移行する。
【０７０７】
s5_12_4では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_12_8へ移行し、空でない場合、処理s5_12_5に移行する。
【０７０８】
s5_12_5では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_12_6に移行する。
【０７０９】
s5_12_6では、v1の値を出力するための出力変数を高位レベル記述に追加し、処理をs5_12_7に移行する。
【０７１０】
s5_12_7で、v1への代入文を識別し、その直後にv1から対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs5_12_4に移行する。
【０７１１】
s5_12_8で、文献「Alan Mishchenko, Michael Case, Robert Brayton, and Stephan Jang, “Scalable and Scalably-Verifiable Sequential Synthesis" In Proc. of ICCAD, pp.234-241, 2008.」に記載の手法を適用し、高位レベル記述の記号Simを実施し、処理をs5_12_9に移行する。
【０７１２】
s5_12_9では。高位レベル記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_12_10に移行する。
【０７１３】
s5_12_10では、高位レベル記述に対して、NサイクルのランダムSimを実施し、処理をs5_12_11に移行する。
【０７１４】
s5_12_11では、集合Var2が空であるか否かを判定し、空の場合、処理をs5_12_22へ移行し、空でない場合、処理をs5_12_12に移行する。
【０７１５】
s5_12_12では、v2∈Var2を一つ取り、Var2=Var2-{v2}とし、処理をs5_12_13に移行する。
【０７１６】
s5_12_13では、v2に対する記号Sim出力結果を識別し、処理をs5_12_14に移行する。
【０７１７】
s5_12_14では、リセット処理から最初の記号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_12_15に移行する。
【０７１８】
s5_12_15では、v2に対するランダムSim結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から値とサイクルの組の集合を(v2v, v2c)∈v2sigとして格納し、処理をs5_12_16に移行する。
【０７１９】
s5_12_16では、v2sig内の要素数をMとし、v2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_12_17に移行する。
【０７２０】
s5_12_17では、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_12_18に移行する。
【０７２１】
s5_12_18では、v2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_12_19へ移行し、そうでない場合、処理をs5_12_20に移行する。
【０７２２】
s5_12_19では、変数freqに変数Tの値を代入し、処理をs5_12_21に移行する。
【０７２３】
ｂs5_12_20では、変数freqに1を代入し、処理をs5_12_22に移行する。
【０７２４】
s5_12_21では、高位レベル記述の変数v2に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値)とし、集合Varにvを格納し、処理をs5_12_11に移行する。
【０７２５】
s5_12_22では、合成結果RTLを読込み、処理をs5_12_23に移行する。
【０７２６】
s5_12_23で、集合F1が空であるか否かを判定し、空の場合、処理をs5_12_27へ移行し、空でない場合、処理をs5_12_24に移行する。
【０７２７】
s5_12_24では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_12_25に移行する。
【０７２８】
s5_12_25では、f1の値を出力するための出力変数をRTL記述に追加し、処理をs5_12_26に移行する。
【０７２９】
s5_12_26では、f1への代入文を識別し、その直後にf1から対応する新たに挿入した出力変数への代入記述をRTL記述に追加し、処理をs5_12_23に移行する。
【０７３０】
s5_12_27では、文献「Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.」に記載された手法を適用し、RTL記述の記号Simを実施し、処理をs5_12_28に移行する。
【０７３１】
s5_12_28では、RTL記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_12_29に移行する。
【０７３２】
s5_12_29では、RTL記述に対して、NサイクルのランダムSimを実施し、処理をs5_12_30に移行する。
【０７３３】
s5_12_30では、集合F2が空であるか否かを判定し、空の場合、処理をs5_12_41へ移行し、空でない場合、処理をs5_12_31に移行する。
【０７３４】
s5_12_31では、f2∈F2を一つ取り、F2=F2-{f2}とし、処理をs5_12_32に移行する。
【０７３５】
s5_12_32では、f2に対する記号Sim出力結果を識別し、処理をs5_12_33に移行する。
【０７３６】
s5_12_33では、リセット処理から最初の信号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_12_34に移行する。
【０７３７】
s5_12_34では、f2に対するランダムSim出力結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から、値とサイクルの組の集合を(f2v, f2c)∈f2sigとして格納し、処理をs5_12_35に移行する。
【０７３８】
s5_12_35では、f2sig内の要素数をMとし、f2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_12_36に移行する。
【０７３９】
s5_12_36では、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_12_37に移行する。
【０７４０】
s5_12_37では、f2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_12_38移行し、そうでない場合、処理をs5_12_39に移行する。
【０７４１】
s5_12_38では、変数freqに変数Tの値を代入し、処理をs5_12_40に移行する。
【０７４２】
s5_12_39では、変数freqに1を代入し、処理をs5_12_40に移行する。
【０７４３】
s5_12_40では、合成結果RTLのFFであるf2に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値)とし、集合Fにfを格納し、処理をs5_12_30に移行する。
【０７４４】
s5_12_41では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_12_42に移行する。
【０７４５】
s5_12_42では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_12_43に移行する。
【０７４６】
s5_12_43では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_12_44に移行する。
【０７４７】
s5_12_44では、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_12_45へ移行し、そうでない場合、処理をs5_12_47に移行する。
【０７４８】
s5_12_45では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_46に移行する。
【０７４９】
s5_12_46では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_41に移行する。
【０７５０】
s5_12_47では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_48に移行する。
【０７５１】
s5_12_48では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_41に移行する。
【０７５２】
《検証スクリプト改変処理内のｓ５＿１３の詳細フロー》
図８５にはs5_13の「入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」のフローが例示される。各ステップの内容は以下の通りである。
【０７５３】
s5_13_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_13_2に移行する。
【０７５４】
s5_13_2では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_13_6へ移行し、空でない場合、処理s5_13_3に移行する。
【０７５５】
s5_13_3では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_13_4に移行する。
【０７５６】
s5_13_4では、変数latに1を、変数freqに1を代入し、処理をs5_13_5に移行する。
【０７５７】
s5_13_5では、高位レベル記述の変数v１に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値)とし、集合Varにvを格納し、処理をs5_13_2に移行する。
【０７５８】
s5_13_6では、集合F1が空であるか否かを判定し、空の場合、処理をs5_13_10へ移行し、空でない場合、処理をs5_13_7に移行する。
【０７５９】
s5_13_7では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_13_8に移行する。
【０７６０】
s5_13_8では、変数latに1を、変数freqに1を代入し、処理をs5_13_9に移行する。
【０７６１】
s5_13_9では、合成結果RTLのFFであるf1に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値)とし、集合Fにfを格納し、処理をs5_13_6に移行する。
【０７６２】
s5_13_10では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_13_11に移行する。
【０７６３】
s5_13_11では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_13_11に移行する。
【０７６４】
s5_13_12では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_13_12に移行する。
【０７６５】
s5_13_13では、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_13_14へ移行し、そうでない場合、処理をs5_13_16に移行する。
【０７６６】
s5_13_14では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_15に移行する。
【０７６７】
s5_13_15では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_10に移行する。
【０７６８】
s5_13_16では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_17に移行する。
【０７６９】
s5_13_17では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_10に移行する。
【０７７０】
《検証スクリプト改変処理内のｓ５＿１４の詳細フロー》
図８６にはs5_14の「Pipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」の前半フローが例示される。図８７には図８６に続く後半処理のフローが例示される。各ステップの内容は以下の通りである。
【０７７１】
s5_14_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_14_2に移行する。
【０７７２】
s5_14_2では、集合変数Var2にVar1を、F2にF1をそれぞれ代入し、処理をs5_14_3に移行する。
【０７７３】
s5_14_3では、高位レベル記述を読込み、処理をs5_14_4に移行する。
【０７７４】
s5_14_4では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_14_8へ移行し、空でない場合、処理s5_14_5に移行する。
【０７７５】
s5_14_5では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_14_6に移行する。
【０７７６】
s5_14_6では、v1の値を出力するための出力変数を高位レベル記述に追加し、処理をs5_14_7に移行する。
【０７７７】
s5_14_7では、v1への代入文を識別し、その直後にv1から対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs5_14_4に移行する。
【０７７８】
s5_14_8では、文献「Alan Mishchenko, Michael Case, Robert Brayton, and Stephan Jang, “Scalable and Scalably-Verifiable Sequential Synthesis" In Proc. of ICCAD, pp.234-241, 2008.」に記載の手法を適用し、高位レベル記述の記号Simを実施し、処理をs5_14_9に移行する。
【０７７９】
s5_14_9では、高位レベル記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_14_10に移行する。
【０７８０】
s5_14_10では、高位レベル記述に対して、NサイクルのランダムSimを実施し、処理をs5_14_11に移行する。
【０７８１】
s5_14_11では、集合Var2が空であるか否かを判定し、空の場合、処理をs5_14_20へ移行し、空でない場合、処理をs5_14_12に移行する。
【０７８２】
s5_14_12では、v2∈Var2を一つ取り、Var2=Var2-{v2}とし、処理をs5_14_13に移行する。
【０７８３】
s5_14_13では、v2に対する記号Sim出力結果を識別し、処理をs5_14_14に移行する。
【０７８４】
s5_14_14では、リセット処理から最初の記号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_14_15に移行する。
【０７８５】
s5_14_15では、v2に対するランダムSim結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から値とサイクルの組の集合を(v2v, v2c)∈v2sigとして格納し、処理をs5_14_16に移行する。
【０７８６】
s5_14_16では、v2sig内の要素数をMとし、v2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_14_17に移行する。
【０７８７】
s5_14_17で、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_14_18に移行する。
【０７８８】
s5_14_18では、変数freqに変数Tの値を代入し、処理をs5_14_19に移行する。
【０７８９】
s5_14_19では、高位レベル記述の変数v2に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値)とし、集合Varにvを格納し、処理をs5_14_11に移行する。
【０７９０】
s5_14_20では、前記「Pipeline合成RTLを対象とした入出力対応設定生成処理」で生成したコマンドスクリプトthroughputの-iに設定した値をthに格納し、処理をs5_14_21に移行する。
【０７９１】
s5_14_21では、合成結果RTLを読込み、処理をs5_14_22に移行する。
【０７９２】
s5_14_22では、集合F1が空であるか否かを判定し、空の場合、処理をs5_14_26へ移行し、空でない場合、処理をs5_14_23に移行する。
【０７９３】
s5_14_23では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_14_24に移行する。
【０７９４】
s5_14_24では、f1の値を出力するための出力変数をRTL記述に追加し、処理をs5_14_25に移行する。
【０７９５】
s5_14_25では、f1への代入文を識別し、その直後にf1から対応する新たに挿入した出力変数への代入記述をRTL記述に追加し、処理をs5_14_20に移行する。
【０７９６】
s5_14_26では、非特許文献<2>の手法を適用し、RTL記述の記号Simを実施し、処理をs5_14_27に移行する。
【０７９７】
s5_14_27では、集合F2が空であるか否かを判定し、空の場合、処理をs5_14_32へ移行し、空でない場合、処理をs5_14_28に移行する。
【０７９８】
s5_14_28では、f2∈F2を一つ取り、F2=F2-{f2}とし、処理をs5_14_29に移行する。
【０７９９】
s5_14_29では、f2に対する記号Sim出力結果を識別し、処理をs5_14_30に移行する。
【０８００】
s5_14_30では、リセット処理から最初の信号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_14_31に移行する。
【０８０１】
s5_14_31では、変数freqにthの値を格納し、処理をs5_14_32に移行する。
【０８０２】
s5_14_32では、合成結果RTLのFFであるf2に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値)とし、集合Fにfを格納し、処理をs5_14_27に移行する。
【０８０３】
s5_14_33では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_14_34に移行する。
【０８０４】
s5_14_34では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_14_35に移行する。
【０８０５】
s5_14_35では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_14_36に移行する。
【０８０６】
s5_14_36では、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_14_37へ移行し、そうでない場合、処理をs5_14_39に移行する。
【０８０７】
s5_14_37では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_38に移行する。
【０８０８】
s5_14_38では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_33に移行する。
【０８０９】
s5_14_39では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_40に移行する。
【０８１０】
s5_14_40では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_33に移行する。
【０８１１】
《検証スクリプト改変処理内のｓ５＿１５の詳細フロー》
図８８にはs5_15の「入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」の開始からの一部の処理フローが例示される。図８９には図８８に続く処理フローが例示され、図９０には図８９に続いて終了にいたる処理フローが例示される。各ステップの内容は以下の通りである。
【０８１２】
s5_15_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_15_2に移行する。
【０８１３】
s5_15_2では、集合変数Var2にVar1を、F2にF1をそれぞれ代入し、処理をs5_15_3に移行する。
【０８１４】
s5_15_3では、前記「入出力スループット比一定RTLを対象とした入出力対応設定生成処理」で生成したスクリプトコマンドthroughputの-rに設定された値をth1に、-iに設定された値をth2にそれぞれ格納し、処理をs5_15_4に以降する。
【０８１５】
s5_15_4では、高位レベル記述を読込み、処理をs5_15_5に移行する。
【０８１６】
s5_15_5では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_15_9へ移行し、空でない場合、処理s5_15_6に移行する。
【０８１７】
s5_15_6では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_15_7に移行する。
【０８１８】
s5_15_7では、v1の値を出力するための出力変数を高位レベル記述に追加し、処理をs5_15_8に移行する。
【０８１９】
s5_15_8では、v1への代入文を識別し、その直後にv1から対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs5_15_5に移行する。
【０８２０】
s5_15_9では、非特許文献<1>の手法を適用し、高位レベル記述の記号Simを実施し、処理をs5_15_10に移行する。
【０８２１】
s5_15_10では、高位レベル記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_15_11に移行する。
【０８２２】
s5_15_11では、高位レベルに対して、NサイクルのランダムSimを実施し、処理をs5_15_12に移行する。
【０８２３】
s5_15_12では、集合Var2が空であるか否かを判定し、空の場合、処理をs5_15_25へ移行し、空でない場合、処理をs5_15_13に移行する。
【０８２４】
s5_15_13では、v2∈Var2を一つ取り、Var2=Var2-{v2}とし、処理をs5_15_14に移行する。
【０８２５】
s5_15_14では、v2に対する記号Sim出力結果を識別し、処理をs5_15_15に移行する。
【０８２６】
s5_15_15では、リセット処理から最初の記号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_15_16に移行する。
【０８２７】
s5_15_16では、v2に対するランダムSim結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から値とサイクルの組の集合を(v2v, v2c)∈v2sigとして格納し、処理をs5_15_17に移行する。
【０８２８】
s5_15_17では、v2sig内の要素数をMとし、v2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_15_18に移行する。
【０８２９】
s5_15_18では、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_15_19に移行する。
【０８３０】
s5_15_19では、v2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_15_20へ移行し、そうでない場合、処理をs5_15_22に移行する。
【０８３１】
s5_15_20では、変数freqに変数Tの値を代入し、処理をs5_15_21に移行する。
【０８３２】
s5_15_21では、信号値変化のサイクル間隔の性質を「一定」とし、処理をs5_15_24に移行する。
【０８３３】
s5_15_22では、変数freqにth1の値を代入し、処理をs5_15_23に移行する。
【０８３４】
s5_15_23では、信号値変化のサイクル間隔の性質を「非一定」とし、処理をs5_15_24に移行する。
【０８３５】
s5_15_24では、高位レベル記述の変数v2に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値、記号値変化間隔の性質)とし、集合Varにvを格納し、処理をs5_15_12に移行する。
【０８３６】
s5_15_25では、合成結果RTLを読込み、処理をs5_15_26に移行する。
【０８３７】
s5_15_26では、集合F1が空であるか否かを判定し、空の場合、処理をs5_15_30へ移行し、空でない場合、処理をs5_15_27に移行する。
【０８３８】
s5_15_27では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_15_28に移行する。
【０８３９】
s5_15_28では、f1の値を出力するための出力変数をRTL記述に追加し、処理をs5_15_29に移行する。
【０８４０】
s5_15_29では、f1への代入文を識別し、その直後にf1から対応する新たに挿入した出力変数への代入記述をRTL記述に追加し、処理をs5_15_26に移行する。
【０８４１】
s5_15_30では、文献「Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.」に記載の手法を適用し、RTL記述の記号Simを実施し、処理をs5_15_31に移行する。
【０８４２】
s5_15_31では、RTL記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_15_32に移行する。
【０８４３】
s5_15_32では、RTL記述に対して、NサイクルのランダムSimを実施し、処理をs5_15_33に移行する。
【０８４４】
s5_15_33では、集合F2が空であるか否かを判定し、空の場合、処理をs5_15_46へ移行し、空でない場合、処理をs5_15_34に移行する。
【０８４５】
s5_15_34では、f2∈F2を一つ取り、F2=F2-{f2}とし、処理をs5_15_35に移行する。
【０８４６】
s5_15_35では、f2に対する記号Sim出力結果を識別し、処理をs5_15_36に移行する。
【０８４７】
s5_15_36では、リセット処理から最初の信号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_15_37に移行する。
【０８４８】
s5_15_37では、f2に対するランダムSim出力結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から、値とサイクルの組の集合を(f2v, f2c)∈f2sigとして格納し、処理をs5_12_38に移行する。
【０８４９】
s5_15_38では、f2sig内の要素数をMとし、f2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_12_39に移行する。
【０８５０】
s5_15_39で、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_12_40に移行する。
【０８５１】
s5_15_40では、f2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_12_41へ移行し、そうでない場合、処理をs5_12_43に移行する。
【０８５２】
s5_15_41では、変数freqに変数Tの値を代入し、処理をs5_15_42に移行する。
【０８５３】
s5_15_42では、記号値変化のサイクル間隔の性質を「一定」とし、処理をs5_15_45に移行する。
【０８５４】
s5_15_43では、変数freqにth2の値を代入し、処理をs5_15_44に移行する。
【０８５５】
s5_15_44では、記号値変化のサイクル間隔の性質を「非一定」とし、処理をs5_15_45に移行する。
【０８５６】
s5_15_45では、合成結果RTLのFFであるf2に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値、記号値変化間隔の性質)とし、集合Fにfを格納し、処理をs5_15_33に移行する。
【０８５７】
s5_15_46では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_15_47に移行する。
【０８５８】
s5_15_47では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_15_48に移行する。
【０８５９】
s5_15_48では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_15_49に移行する。
【０８６０】
s5_15_49では、fの記号値変化間隔とvの記号値変化間隔がともに「一定」であるか否かを判定し、一定であれば、処理をs5_15_50へ移行し、そうでなければ、処理をs5_15_51に移行する。
【０８６１】
s5_15_50では、vのfreqにth1の値を、fのfreqにth2の値をそれぞれ代入し、処理をs5_15_51に移行。
s5_15_51で、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_15_52へ移行し、そうでない場合、処理をs5_15_54に移行する。
【０８６２】
s5_15_52では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_53に移行する。
【０８６３】
s5_15_53では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_46に移行する。
【０８６４】
s5_15_54では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_55に移行する。
【０８６５】
s5_15_55では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_46に移行する。
【０８６６】
《検証スクリプト改変処理内のｓ５＿１６の詳細フロー》
図９１にはs5_16の「リセットサイクル期間設定改変処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【０８６７】
s5_16_1では、リセットサイクル期間情報を読み込み、リセットサイクル期間を変数l1に格納し、処理をs5_16_2へ移行する。
【０８６８】
s5_16_2では、雛形スクリプトのスクリプトコマンドresetを識別し、設定されている波形を変数w1に格納し、処理をs5_16_3へ移行する。
【０８６９】
s5_16_3では、変数w1からリセット値を識別し、リセット値が設定されているサイクル期間を変数l2に格納し、処理をs5_16_4に移行する。
【０８７０】
s5_16_4では、変数lにl2+l1の値を格納し、処理をs5_16_5に移行する。
【０８７１】
s5_16_5では、リセット値をl2サイクル、非リセット値をl1サイクルとし、2つの波形を連結したものを変数wに格納し、処理をs5_16_6に移行する。
【０８７２】
s5_16_6では、スクリプトコマンドresetの-r、-i の両者の、-lenghに対して変数lの値を指定し、リセットサイクル期間の波形として変数wの波形を指定し、処理を終了する。
【０８７３】
《検証スクリプト改変処理内のｓ５＿１８の詳細フロー》
図９２にはs5_18の「変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【０８７４】
s5_18_1では、「ループあり変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_2に移行する。
【０８７５】
s5_18_2では、「ループあり変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_3に移行する。
【０８７６】
s5_18_3では、第１の検証スクリプトに対して、ループあり変数一対一対応設定と、ループあり変数非一対一対応設定を追加したスクリプトを第２の検証スクリプトとして出力し、処理をs5_18_4に移行する。
【０８７７】
s5_18_4では、「ループなし変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_5に移行する。
【０８７８】
s5_18_5では、「ループなし変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_6に移行する。
【０８７９】
s5_18_6では、第２の検証スクリプトに対して、ループなし変数一対一対応設定と、ループなし変数非一対一対応設定を追加したスクリプトを第３の検証スクリプトとして出力し、処理を終了する。
【０８８０】
《検証スクリプト改変処理内のｓ５＿１８＿１の詳細フロー》
図９３にはs5_18_1の「ループあり変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【０８８１】
s5_18_1_1では、ループあり変数一対一対応関係情報を読み込み、その情報を成す集合をVとし、処理をs5_18_1_2に移行する。
【０８８２】
s5_18_1_2では、集合Vに含まれる高位レベル記述の変数情報の集合を識別し、その集合を集合変数Varに代入し、処理をs5_18_1_3に移行する。
【０８８３】
s5_18_1_3では、集合Vに含まれているRTLのFF情報の集合を識別し、その集合を集合変数Fに代入し、処理をs5_18_1_4に移行する。
【０８８４】
s5_18_1_4では、集合Varが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_1_5に移行する。
【０８８５】
s5_18_1_5では、var∈Varを一つ取り、Var=Var-{var}とし、処理をs5_18_1_6へ移行する。
【０８８６】
s5_18_1_6では、varに対応するRTLのFFであるf∈Fを一つ取り、F=F-{f}とし、処理をs5_18_1_7に移行する。
【０８８７】
s5_18_1_7では、スクリプトコマンドflop_mapの-rに対して、
[ <varの変数名> -lat <varのLatency値> -freq <varのThroughput値> ]を指定し、-iに対して、
[ <fのFF名> -lat <fのLatency値> -freq <fのThroughput値> ]を指定し、処理をs5_18_1_4に移行する。
【０８８８】
《検証スクリプト改変処理内のｓ５＿１８＿２の詳細フロー》
図９４にはs5_18_2の「ループあり変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【０８８９】
s5_18_2_1では、ループあり変数非一対一対応関係情報を読み込み、その情報を成す集合をFとし、処理をs5_18_2_2に移行する。
【０８９０】
s5_18_2_2では、集合Fが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_2_3に移行する。
【０８９１】
s5_18_2_3では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_18_2_4へ移行する。
【０８９２】
s5_18_2_4では、スクリプトコマンドconditional_flop_mapの-iに対して、[ <fのFF名> ]を指定し、処理をs5_18_2_5に移行する。
【０８９３】
s5_18_2_5では、fとの対応情報である数２の情報を集合変数Vに代入し、処理をs5_18_2_6に移行する。
【０８９４】
【数２】
0005893954.tif 000003
【０８９５】
s5_18_2_6では、集合Vが空か否かを判定し、その場合、処理をs5_18_2_2に移行し、そうでない場合、s5_18_2_7に移行する。
【０８９６】
s5_18_2_7では、v=λ∧var∈Vを一つ取り、V=V-{v}とし、処理をs5_18_2_8へ移行する。
【０８９７】
s5_18_2_8では、スクリプトコマンドconditional_flop_mapの-rに対して、
[ <vの変数名var> -cond <vの代入実行条件λ> ]を指定し、処理をs5_18_2_6に移行する。
【０８９８】
《検証スクリプト改変処理内のｓ５＿１８＿４の詳細フロー》
図９５にはs5_18_4の「ループなし変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【０８９９】
s5_18_4_1では、ループあり変数一対一対応関係情報を読み込み、その情報を成す集合をVとし、処理をs5_18_4_2に移行する。
【０９００】
s5_18_4_2では、集合Vに含まれる高位レベル記述の変数情報の集合を識別し、その集合を集合変数Varに代入し、処理をs5_18_4_3に移行する。
【０９０１】
s5_18_4_3では、集合Vに含まれているRTLのFF情報の集合を識別し、その集合を集合変数Fに代入し、処理をs5_18_4_4に移行する。
【０９０２】
s5_18_4_4では、集合Varが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_4_5に移行する。
【０９０３】
s5_18_4_5では、var∈Varを一つ取り、Var=Var-{var}とし、処理をs5_18_4_6へ移行する。
【０９０４】
s5_18_4_6では、varに対応するRTLのFFであるf∈Fを一つ取り、F=F-{f}とし、処理をs5_18_1_7に移行する。
【０９０５】
s5_18_4_7では、スクリプトコマンドflop_mapの-rに対して、
[ <varの変数名> -lat <varのLatency値> <varのThroughput値> ]を指定し、-iに対して、
[ <fのFF名> -lat <fのLatency値> <fのThroughput値> ]を指定し、処理をs5_18_4_4に移行する。
【０９０６】
《検証スクリプト改変処理内のｓ５＿１８＿５の詳細フロー》
図９６にはs5_18_5の「ループなし変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【０９０７】
s5_18_5_1では、ループあり変数非一対一対応関係情報を読み込み、その情報を成す集合をFとし、処理をs5_18_5_2に移行する。
【０９０８】
s5_18_5_2では、集合Fが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_5_3に移行する。
【０９０９】
s5_18_5_3では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_18_5_4へ移行する。
【０９１０】
s5_18_5_4では、スクリプトコマンドconditional_flop_mapの-iに対して、[ <fのFF名> ]を指定し、処理をs5_18_5_5に移行する。
【０９１１】
s5_18_5_5では、fとの対応情報である前記数２に示される情報を集合変数Vに代入し、処理をs5_18_5_6に移行する。
【０９１２】
s5_18_5_6では、集合Vが空か否かを判定し、その場合、処理をs5_18_5_2に移行し、そうでない場合、s5_18_5_7に移行する。
【０９１３】
s5_18_5_7では、v=λ∧var∈Vを一つ取り、V=V-{v}とし、処理をs5_18_5_8へ移行する。
【０９１４】
s5_18_5_8では、スクリプトコマンドconditional_flop_mapの-rに対して、
[ <vの変数名var> -cond <vの代入実行条件λ> ]を指定し、処理をs5_18_5_6に移行する。
【０９１５】
２−５．第５の実施の形態
上記実施の形態で述べた手法は、下記の場合に拡張可能である。即ち、高位レベル記述と人手作成RTLを対象とした場合である。即ち、高位レベル記述を機能モデルとして、機能等価となるRTLを人手で作成し、両者の等価性検証を実施する場合（実施例１が対象としたRTLを含むより一般の場合）である。図９７にはその場合の情報抽出処理の詳細が例示される。
【０９１６】
この場合、次を前提とする。即ち、高位レベル記述と人手作成RTL間の、入力・出力Portの対応関係情報が与えられていることである。また、人手作成RTL３０から状態遷移表が抽出可能か、または仕様記述として状態遷移表が存在することである。RTL記述が２プロセスモデルの場合、状態遷移表の抽出は、状態遷移表と２プロセスモデルの定義から、容易に実現可能である。よって、２プロセスモデルＲＴＬ記述からの状態遷移表抽出処理ｓ６０を追加すればよい。
【０９１７】
今まで説明した動作合成結果RTLを対象とした場合との違いは次の通りである。第１に、高位等価性検証用の雛形スクリプトが生成されない。したがって、雛形スクリプト情報の生成が別途必要になる。したがって、検証スクリプト改変処理を、検証スクリプト生成処理ｓ５０へ変更する。
【０９１８】
第２に、合成結果RTL回路構造の推定に必要となる。動作合成スクリプトや合成ディレクティブ情報が与えられない。人手作成RTL３０の入出力サイクル情報の取得が別途必要となるが、「既存Simベースの等価性判定手法」での人手作成RTLの構造推定時に、同時に推定値を取得する事が可能である。また、人手作成RTLの回路構造の推定手段が別途必要となるが、基本的には、下記の何れかの場合分けのみが行えれば良い。第１は、サイクル精度合成RTLである。この場合、サイクル動作込みで一致しているか判定が必要になる。対応FF抽出では、サイクル精度合成RTLでの処理を修正して流用可能である。第２は、上記以外のRTLである。この場合、対応FF抽出では、入出力スループット比一定/非一定RTLの処理を修正して流用可能である。
【０９１９】
《情報抽出処理の概要》
図９７に例示された情報抽出処理の概要を説明する。
【０９２０】
データ依存解析処理ｓ１では、図１６の場合と同じく、高位レベル記述１を入力として、変数のデータ依存関係解析を実施し、各変数に対して、合成結果RTLにてフィードバックループを伴うFFに対応付けられる可能性があるか否か推定し、その分類結果を変数依存関係情報に格納する。図１６の場合と全く同じであるため、更なる詳細に付いては説明を省略する。
【０９２１】
入出力サイクル情報抽出処理ｓ２０では、Pipeline情報３１、高位レベル記述１と人手作成ＲＴＬ３０のＰｏｒｔ対応情報３２、及び人手作成ＲＴＬ３０を読み込み、「既存Simベース等価性判定手法」を用いて、ランダムSimをNサイクル実行する事で、Pipeline回路として実装されている場合、人手作成RTL３０が指定Pipeline構造を持つか否かの検証を実施する。Pipeline回路として実装されていない場合、サイクル精度合成RTLに該当するか否かや、周期的な入出力を行うRTLとなっているか否かを判定するとともに、Simにて取得した実行系列から、高位レベル記述と人手作成RTLの各入力・出力Portのスループットサイクル数の推定を実施する。これら取得した情報を入出力サイクル情報２０に格納する。尚、「既存Simベース等価性判定手法」にて不一致となった場合は、その時点で後続の処理を含め中断し、検証結果として「不一致」を返す。
【０９２２】
状態遷移表抽出処理ｓ６０では、人手作成RTL３０が２プロセスモデルにて記述されている事を前提に、人手作成RTL３０からの状態遷移表６の抽出を行う。状態遷移表の定義で示したように、この実現方法は自明であるため、更なる詳細に付いては説明を省略する。
【０９２３】
対応FF抽出処理ｓ３０では、高位レベル記述１、人手作成RTL３０、変数依存関係情報２１、状態遷移表６、Port対応情報３１、及び入出力サイクル情報２０を読み込み、高位レベル記述１内の変数と人手作成RTL３０内のFFの対応関係を解析する。ここで、人手作成RTL３０にてフィードバックループを伴うFFに対応付けられる可能性のない変数（以下、ループなし変数）に関しては、一対一に対応するFFが各変数に存在するか否かを解析する。存在した場合、その対応関係をループなし変数一対一対応関係情報に格納する。人手作成RTL３０にてフィードバックループを伴うFFに対応付けられる可能性がある変数（以下、ループあり変数）に関しては、先ず一対一に対応するFFが各変数に存在するか否かを解析する。存在した場合、その対応関係をループあり変数一対一対応関係情報に格納する。一対一に対応するFFが存在しなかった変数が残っていれば、状態遷移表のFFへの代入条件に着目して、条件付きで対応付けられるFFが存在するか否かを解析する。存在した場合、その対応関係をループあり変数非一対一対応関係情報に格納する。即ち、図１６の場合との相違点は、入出力サイクル抽出処理ｓ２０で、処理終了となった場合を考慮する必要がある部分と、合成結果RTLの代わりに人手RTLを読み込む部分の、２つのみである。
【０９２４】
リセット伸長サイクル抽出処理ｓ４０では、人手作成RTL３０、ループあり変数一対一対応関係情報２２、及びループあり変数非一対一対応関係情報２３、入出力サイクル情報２０を入力とし、RTL記述内のループあり変数に対応付けられたFFの成すフィードバックループが存在するか否かを解析し、存在した場合、各フィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数を求める。このサイクル情報の中で、最大値をPipeline回路でない場合、リセットサイクル期間情報に格納する。Pipeline回路である場合、この最大値とレイテンシサイクル数-1の値で大きい方を、リセットサイクル期間情報に格納する。一方、RTLにてフィードバックループを構成しなかった場合は、この変数の持つ対応関係情報を、夫々ループなし変数一対一対応関係情報２４とループなし変数非一対一対応関係情報２５に格納し、この変数を夫々夫々ループあり変数一対一対応関係情報２２とループあり変数非一対一対応関係情報２３から削除する。即ち、図１６の場合との相違点は、入出力サイクル抽出処理ｓ２０で、処理終了となった場合を考慮する必要がある部分と、合成結果RTLの代わりに人手RTL３０を読み込む部分の、２つのみである。
【０９２５】
検証スクリプト生成処理ｓ５０では、高位レベル記述１、人手作成RTL３０、Port対応情報３１、入出力サイクル情報２０、４つの変数・FF対応関係情報（ループあり変数非一対一対応関係情報２３、ループあり変数一対一対応関係情報２２、ループなし変数非一対一対応関係情報２５、ループなし変数一対一対応関係情報２４）、及びリセットサイクル期間情報を入力として、検証スクリプトを出力する。
【０９２６】
《入出力サイクル情報抽出処理ｓ２０》
入出力サイクル情報抽出処理ｓ２０について説明する。
【０９２７】
入出力サイクル情報抽出処理ｓ２０は、Pipeline情報３２、高位レベル記述１、及び人手作成RTL３０を読み込み、下記の処理を実施する。
【０９２８】
第１には、高位レベル記述の入力・出力のスループットサイクル数を抽出する。尚、Pipeline情報には下記が含まれる。ひとつには、人手作成RTLがPipeline回路か否かの情報である。また、人手作成RTLがPipeline回路の場合、下記Pipeline構造情報を含む。即ち、Pipeline回路全体でのThroughput/Latency情報、各入力・出力が割当てられているPipeline Stage情報、及び図１６の場合におけるPipeline化RTLを生成するための合成制約情報と同一の情報、である。
【０９２９】
第２には、人手作成RTLの入力・出力のスループットサイクル数を抽出する。特に、Pipeline情報に、人手RTLがPipeline回路であると指定されている場合は、Pipeline構造情報に矛盾した動作を行うか否かの検証を、「既存Simベース等価性判定手法」にて実施する。矛盾した動作を行う場合、その時点で後続の処理を含め中断し、「Pipeline構造仕様不一致」を返す。
【０９３０】
第３には、人手作成RTLの構造情報の抽出し、
Pipelined RTL：回路全体での固定のThroughput/Latencyサイクルを持つRTL、
サイクル精度RTL：高位レベル記述の各入力から各出力に至る消費サイクルが維持されたRTL、
周期比一定RTL：高位レベル記述の各入力・出力スループットが一定で、人手RTLの各入力・出力スループットが一定であり、各スループットサイクルの比が一定値となるRTL、
周期比非一定RTL：上記２つ以外のRTL、
に分類する。
【０９３１】
《高位レベル記述の入力・出力のスループットサイクル数抽出処理の概要》
前記高位レベル記述の出力スループットサイクル数抽出処理において、抽出すべき情報は、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）の情報である。
【０９３２】
各出力のThroughputサイクル情報の取得については、合成スクリプトや合成ディレクティブを変更し、サイクル精度合成を実施する内容に修正し、サイクル精度合成RTLを対象とした入力・出力Throughputサイクル情報抽出処理をそのまま実施しても良いが、本実施の形態では、「既存Simベース等価性判定手法」にて取得した、Sim結果の入力・出力信号系列からの推定を実施する手法を開示する。
【０９３３】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報（一定か否か）、及び、全出力・全入力共通のThroughputサイクル情報（一定か否か）を図９８のテーブル形式にて出力する。即ち、図１６で説明した手法にて、高位レベル記述に対して、図１６における「サイクル精度RTLを対象とした各入力・出力変数のスループットサイクル情報の取得」処理をそのまま適用すれば良い。
【０９３４】
《人手作成RTLの出力のスループットサイクル数抽出処理の概要》
特開2009-230451号公報の記載では、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述とRTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法（以下、「既存Simベース等価性判定手法」）が開示されている。
【０９３５】
従って、Port対応情報、高位レベル記述、及び人手作成RTLを読み込み、特開2009-230451号高位方の開示されている手法を適用し、Nサイクル分の各入力値及び各出力値の変化系列を取得可能である。
【０９３６】
Pipeline情報にて、Pipeline回路であると指定されている場合は、各信号の値変化間隔がPipeline構造情報に矛盾した動作を行うか否かを検証する。矛盾がある場合は、「Pipeline構造仕様不一致」返し、矛盾しない場合は、Pipeline構造情報から図１６の場合と同様の手続きにて、入出力サイクル情報を抽出する。
【０９３７】
Pipeline回路でないと指定された場合は、各信号の値変化間隔が一定になっているかを判定し、一定の場合、その一定サイクル数を当該信号のスループットサイクル数とし、性質を‘一定’とし、入出力サイクル情報に格納する。
【０９３８】
一方、一定でない場合は、得られた複数のサイクル数の最大公約数を当該信号のスループットサイクル数とし、性質を‘非一定’として、入出力サイクル情報に格納する。
【０９３９】
尚、特開2009-230451号公報ではRTL記述への入力信号の変化サイクルの取得手段は直接述べられていないが、RTLからの入力FIFO群への読出しサイクルを所得する事で、入力信号の変化サイクルとして識別可能である。
【０９４０】
また、各入力・出力信号の系列としては、(信号値, サイクル数)を要素とする、サイクル数に関して昇順に整列したリスト形式として識別可能であり、そのように情報を格納しているものとする。
【０９４１】
特に、特開2009-230451号公報に記載の方法を用いたランダムSimにて、高位レベル記述とRTL記述の入出力動作が完全に一致する場合、RTL記述をサイクル精度RTLとして識別する。
【０９４２】
全ての入力[出力]の性質が“一定”であり、Throughputサイクル数が全て同一である場合、全入力[出力]の性質を“一定とし、そのサイクル数を全入力[出力]のThroughputサイクル数とする。そうでない場合、全入力[出力]の性質を”非一定“とし、全ての入力[出力]のThroughputサイクル数の最大公約数を、全入力[出力]のThroughputサイクル数とする。
【０９４３】
ここで、ランダムSimの代わりに例えば文献「Alfred Koelbl and Carl Pixley, “Constructing Efficient Formal Models from High-Level Descriptions Using Symbolic Simulation,” International Journal of Parallel Programming 33(6), pp.645-666, 2005.」及び「Alfred Koelbl, James Kukula, and Robert Damiano, “Symbolic RTL simulation,” In Proc. of DAC, 2001.」に示されている高位記述を対象とした記号Sim手法とRTL記述を対象とした記号Sim手法を融合し、記号Simを実施しても良い。記号Simを用いた場合、実行時間は長大化するが、上記判定での精度が向上する。
【０９４４】
尚、スループットサイクル数の格納形式として図９９の形式を採用することができる。
【０９４５】
《入出力サイクル情報抽出処理ｓ２０の詳細》
図１００には入出力サイクル情報抽出処理ｓ２０の詳細フローが例示される。各ステップの内容は以下の通りである。
【０９４６】
s20_1では、大域変数abortに0を代入し、処理をs20_2へ移行する。
【０９４７】
s20_2では、高位レベル記述、人手作成RTL、Pipeline情報、及びPort対応情報を読み込み、高位レベル記述の入力Portの集合をI1、出力Portの集合をO1、人手RTLの入力Portの集合をI2、出力Portの集合をO2とし、処理をs20_3へ移行する。
【０９４８】
s20_3では、特開2009-230451号公報に開示されているSimモデル生成手段適用し、生成Simモデルを対象にNサイクル分のSimを実行し、処理をs20_4へ移行する。
【０９４９】
s20_4では、各入力i1∈I1,i2∈I2の信号系列をサイクル情報込みで、Port名、値、サイクルの組の集合(i1,i1v,i1c)∈I1sig, (i2,i2v,i2c)∈I2sigとして格納する。そして、各出力o1∈O1,o2∈O2の信号変化系列をサイクル情報込みで、Port名、値、サイクルの組の集合(o1,o1v,o1c)∈O1sig, (o2,o2v,o2c)∈O2sigを、特に大域変数として格納し、s20_5へ移行する。
【０９５０】
s20_5では、Sim結果が一致しているか否か判定し、一致している場合、処理をs20_6へ移行し、そうでない場合、s20_11へ移行する。
【０９５１】
s20_6では、高位レベル記述と人手RTLの入力信号系列及び出力信号系列が、夫々完全一致（I1sig == I2sig ∧ O1sig == O2sig）しているか否か判定し、完全一致している場合、処理をs20_7へ移行し、そうでない場合、s20_8へ移行する。
【０９５２】
s20_7では、変数flgに文字列CAを代入し、処理をs20_8へ移行する。
【０９５３】
s20_8では、Pipeline情報にてPipeline指定があるか否か判定し、ある場合、処理をs20_9へ移行し、そうでない場合、s20_14へ移行する。
【０９５４】
s20_9では、後述する「Pipeline構造仕様検証」を実施し、処理をs20_10へ移行する。
【０９５５】
s20_10では、人手RTLがPipeline構造仕様を満たすか否か判定し、満たす場合、処理をs20_12へ移行し、満たさない場合、s20_11へ移行する。
【０９５６】
s20_11では、大域変数abortに1を代入し、処理を終了する。
【０９５７】
s20_12では、図１６の実施の形態にて定義済みの処理である「Pipeline合成RTLを対象とした情報抽出処理」を実施し、処理をs20_13へ移行する。
【０９５８】
s20_13では、変数flgに文字列PIPEを代入し、処理をs20_14へ移行する。
【０９５９】
s20_14では、集合の集合を表す大域変数Tsigに対して、Tsig={I1sig, O1sig, I2sig, O2sig}とし、処理をs20_15へ移行する。
【０９６０】
s20_15では、Tsigが空であるか否か判定し、空である場合、処理をs20_18へ移行し、空でない場合、s20_16へ移行する。
【０９６１】
s20_16では、tsig∈Tsigを一つ取り、Tsig=Tsig-{tsig}とし、処理をs20_17へ移行する。
【０９６２】
s20_17では、後述する「tsigに対してのThroughputサイクル数推定処理」を実施し、処理をs20_15へ移行する。
【０９６３】
s20_18では、I1sig, I2sigに対応する入力サイクル情報、即ち高位レベル記述の入力サイクル情報と、人手RTL記述の入力サイクル情報を読み込み、処理をs20_19へ移行する。
【０９６４】
s20_19では、高位レベル記述と人手RTL記述夫々に対応する入力サイクル情報での全入力の性質が、双方ともに“一定”か否か判定し、そうなる場合、処理をs20_20へ移行し、そうでない場合、s20_24へ移行する。
【０９６５】
s20_20では、高位レベル記述と人手RTL記述夫々に対応する入力サイクル情報での対応するPortのThroughputサイクルの比を各々求め、それらが全て同一値になっているか否か判定し、同一値の場合、処理をs20_21へ移行する。そうでない場合、s20_24へ移行する。
【０９６６】
s20_21では、O1sig, O2sigに対応する出力サイクル情報、即ち高位レベル記述の出力サイクル情報と、人手RTL記述の出力サイクル情報を読み込み、処理をs20_22へ移行する。
【０９６７】
s20_22では、高位レベル記述と人手RTL記述夫々に対応する出力サイクル情報での全出力の性質が、双方ともに“一定”か否か判定し、そうなる場合、処理をs20_23へ移行する、そうでない場合、s20_24へ移行する。
【０９６８】
s20_23では、高位レベル記述と人手RTL記述夫々に対応する出力サイクル情報での対応するPortのThroughputサイクルの比を各々求め、それらが全て同一値になっているか否か判定し、同一値の場合、処理をs20_25へ移行する。そうでない場合、s20_24へ移行する。
【０９６９】
s20_24では、変数flgが文字列CAに一致するか否か判定し、一致する場合、処理をs20_26へ移行する。そうでない場合、s20_27へ移行する。
【０９７０】
s20_25では、変数flgが文字列PIPEに一致するか否か判定し、一致する場合、処理をs20_38へ移行する。そうでない場合、s20_30へ移行する。
【０９７１】
s20_26では、人手RTLをサイクル精度RTLとして識別し、処理をs20_31へ移行する。
【０９７２】
s20_27で、変数flgが文字列PIPEに一致するか否か判定し、一致する場合、処理をs20_38へ移行し、そうでない場合、s20_29へ移行する。
【０９７３】
s20_28では、人手RTLをPipelined RTLとして識別し、処理をs20_31へ移行する。
【０９７４】
s20_29では、人手RTLを周期比一定RTLとして識別し、処理をs20_31へ移行する。
【０９７５】
s20_30では、人手RTLを周期比非一定RTLとして識別し、処理をs20_31へ移行する。
【０９７６】
s20_31では、識別した人手RTLの分類情報を、人手RTLの入出力サイクル情報に追加格納し、処理を終了する。
【０９７７】
《入出力サイクル情報抽出＿s20_9の詳細フロー》
図１０１にはs20_9のPipeline構造仕様検証での詳細処理フローが例示される。各ステップの内容は以下の通りである。
【０９７８】
20_9_1では、変数i0を代入し、処理をs20_9_2へ移行する。
【０９７９】
s20_9_2では、変数ThにPipeline構造情報にて指定されているThroughputサイクル数を、変数LaにLatencyサイクル数を代入し、処理をs20_9_3へ移行する。
【０９８０】
s20_9_3では、人手RTLの入力信号系列I2sigと出力信号変化系列O2sigの和集合を取り、サイクル数をキーとして要素を昇順にソートし、得られた集合をIosigとし、処理をs20_9_4へ移行する。
【０９８１】
s20_9_4では、IOsigが空か否か判定し、空の場合、処理をs20_9_13へ移行する。空でない場合、s20_9_5へ移行する。
【０９８２】
s20_9_5では、IOsig内で、サイクル数がサイクル期間[Th×i, La＋Th×i]に含まれる要素からなる部分集合を識別し、それをsig1とし、集合sig2を空集合とし、処理をs20_9_6へ移行する。
【０９８３】
s20_9_6では、集合sig1が空か否か判定し、空の場合、処理をs20_9_11へ移行し、空でない場合、s20_9_7へ移行する。
【０９８４】
s20_9_7では、s∈sig1を一つ取り、sig1=sig1-{s}とし、処理をs20_9_8へ移行する。
【０９８５】
s20_9_8では、sのサイクル数が、“Th×i＋指定Stageサイクル数“に一致するか否か判定し、一致する場合、処理をs20_9_10へ移行する。一致しない場合、s20_9_9へ移行する。
【０９８６】
s20_9_9では、 sのサイクル数が、“Th×i＋指定Stageサイクル数＋k×Th“に一致するような正数k∈[Th×i, floor(La/Th)＋Th×i]が存在するか否か判定する。存在した場合、処理をs20_9_6へ移行し、存在しない場合、s20_9_12へ移行する。ここで、関数floor()は、割り算結果の切り下げを返す関数である。
【０９８７】
s20_9_10では、sig2=sig2∪{s}を実行し、処理をs20_9_6へ移行する。
【０９８８】
s20_9_11では、IOsig=IOsig-sig2、及びi=i＋1を実行し、処理をs20_9_4へ移行する。
【０９８９】
s20_9_12では、仕様充足=False、即ち人手RTLがPipeline構造情報に指定された仕様が満たさないとして、処理を終了する。
【０９９０】
s20_9_13では、仕様充足=True、即ち人手RTLがPipeline構造情報に指定された仕様が満たされるとして、処理を終了する。
【０９９１】
《入出力サイクル情報抽出＿s20_17の詳細フロー》
図１０２にはs20_17のThroughputサイクル数推定での詳細な処理フローが例示される。各ステップの内容は以下の通りである。
【０９９２】
s20_17_1では、Tsigに対応するPort集合をPとし、処理をs20_17_2へ移行する。
【０９９３】
s20_17_2では、集合Pが空か否か判定し、空の場合、処理をs20_17_9へ移行する。空でない場合、s20_17_3へ移行する。
【０９９４】
s20_17_3では、p∈Pを一つ取り出し、P=P-{p}とし、処理をs20_17_4へ移行する。
【０９９５】
s20_17_4では、Tsig内のpに対応する要素数を求めMとし、処理をs20_17_5へ移行。ここで、当該要素の夫々のサイクル数が、tc(i)（0≦i＜M）で表わされているものとする。
【０９９６】
s20_17_5では、連続する要素間のサイクル間隔の最小値を求め変数Tに代入、即ち、T=min{tc(i+1)-tc(i)|0≦i＜M-1}を実行し、処理をs20_17_6へ移行する。
【０９９７】
s20_17_6では、連続する要素間のサイクル間隔が全て、Tの整数倍となっているか否か、即ち命題「∀i∈N;0≦i＜M-1, ∃k∈N;k≧1 s.t. tc(i+1)-tc(i)==k×T」が成立するか否かを判定する。成立した場合、処理をs20_17_7へ移行し、成立しなかった場合、s20_17_8へ移行する。
【０９９８】
s20_17_7では、Port pのThroughputサイクル数をTとし、性質を“一定”として、Port集合Pに対応する入出力サイクル情報に格納し、処理をs20_17_2へ移行する。
【０９９９】
s20_17_8では、Port pのThroughputサイクル数を連続する要素間のサイクル間隔（tc(i+1)-tc(i)(0≦i＜M-1)）の最大公約数Tとし、性質を“非一定”として、Port集合Pに対応する入出力サイクル情報に格納し、処理をs20_17_2へ移行する。
【１０００】
s20_17_9では、Port集合Pに属するPort pの性質が全て“一定”であるか否か判定する。そうである場合、処理をs20_17_10へ移行し、そうでない場合、s20_17_11へ移行する。
【１００１】
s20_17_10では、Port集合Pに対応する入出力サイクル情報の全入力または全出力の性質へ、“一定”を格納し、処理をs20_17_2へ移行する。
【１００２】
s20_17_11では、Port集合Pに対応する入出力サイクル情報の全入力または全出力の性質へ、“非一定”を格納し、処理をs20_17_4へ移行する。
【１００３】
s20_17_12では、Port集合Pに属するPort pのThroughputサイクル数が全て同一か判定する。全て同一の場合、処理をs20_17_13へ移行し、一つでも異なる場合、s20_17_14へ処理を移行する。
【１００４】
s20_17_13では、Port集合Pに対応する入出力サイクル情報の全入力または全出力のThroughputサイクル数へ、Tを格納し、処理を終了する。
【１００５】
s20_17_14では、Port集合Pに対応する入出力サイクル情報の全入力または全出力のThroughputサイクル数へ、全PortのThroughputサイクル数の最大公約数を格納し、処理を終了する。
【１００６】
《対応FF抽出処理ｓ３０の詳細》
対応FF抽出処理ｓ３０の処理内容は図１６の第４の実施の形態における対応FF抽出処理ｓ３とほぼ同じである。相違点は以下の通りである。即ち、入力情報として、図１６では合成結果RTLを読み込んでいたが、本実施の形態５では人手RTLを読み込む。入出力サイクル情報抽出処理で、大域変数abortが１に設定されている場合、本第５の実施の形態では、処理を実施しない。人手RTLの分類名が異なるが、図１０３の対応に従えばよい。
【１００７】
従って、図１６の実施に形態４に対して、大域変数abortの値に従って、処理を実施するか否かの処理を追加し、図１０３に示した対応関係に従い各処理を読み替え、合成結果RTLを人手RTLに読み替えれば、第５の実施の形態の処理を定義可能である。
【１００８】
図１０４にはそのような読み替えを前提とした処理のフローチャートが例示される。各ステップの内容は以下の通りである。
【１００９】
s30_2では、第４の実施の形態で定義済みの「対応FF抽出部の全体処理」を、RTLの分類名の対応関係に従い、読み替える。そして、合成結果RTL読み込み処理を、人手RTL読み込み処理に置換えて実行し、処理を終了する。
【１０１０】
s30_1では、大域変数abortが1と等しいか否か判定し、等しい場合、処理を終了し、異なる場合、処理をs30_2へ移行する。
【１０１１】
《リセット伸長サイクル抽出処理ｓ４０の詳細》
リセット伸長サイクル抽出処理ｓ４０の内容は図１６の第４の実施の形態とほぼ同一である。
【１０１２】
相違点は下記の通りである。即ち、入力情報として、実施例１では合成結果RTLを読み込んでいたが、実施例３では人手RTLを読み込む。入出力サイクル情報抽出処理で、大域変数abortが１に設定されている場合、本実施の形態では、処理を実施しない。人手RTLの分類名が異なるが、図１０５の対応に従えばよい。
【１０１３】
従って、図１６の第４の実施の形態に対して、大域変数abortの値に従って、処理を実施するか否かの処理を追加し、図１０５に示した対応関係に従い各処理を読み替え、合成結果RTLを人手RTLに読み替えれば、図９７の第５の実施の形態の処理を定義可能である。
【１０１４】
図１０６にはそのような読み替えを前提とした処理のフローチャートが例示される。各ステップの内容は以下の通りである。
【１０１５】
s40_1では、大域変数abortが1と等しいか否か判定し、等しい場合、処理を終了し、異なる場合、処理をs40_2へ移行する。
【１０１６】
s40_2では、図１６の第４の実施の形態で定義済みの「リセット伸長サイクル抽出部の処理」を、RTLの分類名の対応関係に従い、読み替え、合成結果RTL読み込み処理を、人手RTL読み込み処理に置換えて実行し、処理を終了する。
【１０１７】
《検証スクリプト生成処理ｓ５０の詳細》
検証スクリプト生成処理s５０の処理内容は図１６における第４の実施の形態の検証スクリプト改変処理とほぼ同一である。相違点は次の通りである。即ち、入力情報として、第４の実施の形態では合成結果RTLを読み込んでいたが、図９７の第５の実施の形態では人手RTLを読み込む。入出力サイクル情報抽出処理で、大域変数abortが１に設定されている場合、第５の実施の形態では、処理を実施しない。入力情報として、図１６の第４の実施の形態では雛形検証スクリプトを読み込んでいたが、図９７の第５の実施の形態では雛形検証スクリプトは存在しない。人手RTLの分類名が異なるが、図１０７の対応に従えばよい。
【１０１８】
第５の実施の形態では雛形検証スクリプトが存在しないため、「高位レベル記述/合成結果RTLのファイル読込み」コマンドや「クロック情報設定」コマンドを別途検証スクリプトに設定する必要がある。ただし、処理内容は自明であるため、その詳細な説明は省略する。
【１０１９】
各RTL分類で実施されていた「入出力対応設定改変処理」が「入出力対応設定生成処理」に置換される。また、図１６の第４の実施の形態では、雛形検証スクリプトから抽出していた入出力ポート対応関係情報が、図９７の第５の実施の形態では、Port対応情報で与えられることになる。
【１０２０】
図１６の第４の実施の形態の「リセットサイクル期間設定改変処理」が、図９７の第５の実施の形態では以降で示す「リセットサイクル期間設定生成処理」に置換される。
【１０２１】
従って、図１６の第４の実施の形態に対して、大域変数abortの値に従って、処理を実施するか否かの処理を追加し、第４の実施の形態との相違点を考慮した形で、第５の実施の形態の処理を定義可能である。
【１０２２】
図１０８には図１６の第４の実施の形態との相違点を考慮した「検証スクリプト生成処理」のフローが例示される。各ステップの内容は次の通りである。
【１０２３】
s50_1では、大域変数abortが1と等しいか否か判定し、等しい場合、処理を終了し、異なる場合、処理をs50_2へ移行する。
【１０２４】
s50_2では、検証対象となる高位レベル記述と合成結果RTLのファイルを指定するコマンドを生成し、処理をs50_3に移行する。
【１０２５】
s50_3では、検証対象のクロック情報(クロック名、周期、Duty比など)を設定するコマンドを生成し、処理をs50_4に移行する。
【１０２６】
s50_4では、第４の実施の形態で定義済みの「検証スクリプト改変部」の処理を実施し、処理を終了する。ただし、「検証スクリプト改変部」の「リセットサイクル期間設定改変処理」は後述する「リセットサイクル期間設定生成処理」に置き換わる。
【１０２７】
《リセットサイクル期間設定生成処理の詳細》
前記リセットサイクル期間設定生成処理について説明する。リセットサイクル期間設定生成処理は、高位レベル記述とRTLに対して、高位レベル記述とリセットサイクル期間情報を使用し、以下を生成する。即ち、高位レベル記述/RTLそれぞれのリセットサイクル期間設定コマンド resetを生成する。高位レベル記述と合成結果RTLの両者で、リセット処理に差異がないことを前提とし、高位レベル記述からリセット信号名、リセット値、及びリセット処理に必要となるサイクル数を抽出する。抽出したリセット処理のサイクル数に、リセットサイクル期間情報のサイクル期間をあわせたサイクル期間を高位レベル記述/RTL記述の両者のresetコマンドに設定する。
【１０２８】
図１０９には「リセットサイクル期間設定生成処理」のフローが例示される。この処理は第４の実施の形態における図９１の処理に対応される。図１０９の各ステップの内容は次に示す通りである。図１０９におけるステップ番号は、図９１のステップ番号s5_16_1〜s5_16_6との対応付けが容易なように、便宜的にs50_16_1〜s50_16_6とした。
【１０２９】
s50_16_1では、リセットサイクル期間情報を読み込み、リセットサイクル期間を変数l1に格納し、処理をs50_16_2へ移行する。
【１０３０】
s50_16_2では、高位レベル記述を読込み、処理をs50_16_3へ移行する。
【１０３１】
s50_16_3では、高位レベル記述から、リセット信号名を変数nameに、リセット値を変数valに、リセット処理に必要となるサイクル数を変数l2に、それぞれ格納し、処理をs50_16_4に移行する。
【１０３２】
s50_16_4では、変数lにl2+l1の値を格納し、処理をs50_16_5に移行する。
【１０３３】
s50_16_5では、リセット値(val)をl2サイクル、非リセット値(¬val)をl1サイクルとし、2つの波形を連結したものを変数wに格納し、処理をs50_16_6に移行する。
【１０３４】
s50_16_6では、スクリプトコマンドresetの-r、-i の両者の、リセットポート名に変数nameの信号名を指定し、-lengthに対して変数lの値を指定し、リセットサイクル期間の波形として変数wの波形を指定し、処理を終了する。
【１０３５】
第５の実施の形態においても基本的に第１乃至第４の実施の形態と同様の作用効果を奏する。特に、それらとは異なり、動作合成前後ではない、高位レベル記述と人手作成RTLを対象とした高位等価性検証の高速化が可能となる。
【１０３６】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。動作記述としての高位レベル記述はＳｙｓｔｅｍＣに限定されず、ハードウェア記述がＲＴＬ記述に限定されず、それぞれ適宜変更可能である。
【１０３７】
本発明は、動作合成適用可能な電子回路や論理モジュールの設計に対して全般的に適用可能である。具体的には、MPEGなどの画像処理IP（IPとは半導体集積回路若しくはこれに適用される回路モジュールを総称する）、音声処理IP、通信処理IP、タイマやIICに代表されるマイコン周辺IPなどの設計に広く適用することができる。
【符号の説明】
【１０３８】
１  高位レベル記述
２  動作合成スクリプト
３  RTL記述
４  動作合成処理
５  雛形の検証スクリプト
６  状態遷移表
８  検証スクリプト
９  高位等価性検証処理
１０  等価性の検証結果
１１  制約時間経過の判別処理
１２  検証スクリプト設定変更処理
１３  状態遷移表
【図１】
0005893954.tif 000004
【図２】
0005893954.tif 000005
【図３】
0005893954.tif 000006
【図４】
0005893954.tif 000007
【図５】
0005893954.tif 000008
【図６】
0005893954.tif 000009
【図７】
0005893954.tif 000010
【図８】
0005893954.tif 000011
【図９】
0005893954.tif 000012
【図１０】
0005893954.tif 000013
【図１１】
0005893954.tif 000014
【図１２】
0005893954.tif 000015
【図１３】
0005893954.tif 000016
【図１４】
0005893954.tif 000017
【図１５】
0005893954.tif 000018
【図１６】
0005893954.tif 000019
【図１７】
0005893954.tif 000020
【図１８】
0005893954.tif 000021
【図１９】
0005893954.tif 000022
【図２０】
0005893954.tif 000023
【図２１】
0005893954.tif 000024
【図２２】
0005893954.tif 000025
【図２３】
0005893954.tif 000026
【図２４】
0005893954.tif 000027
【図２５】
0005893954.tif 000028
【図２６】
0005893954.tif 000029
【図２７】
0005893954.tif 000030
【図２８】
0005893954.tif 000031
【図２９】
0005893954.tif 000032
【図３０】
0005893954.tif 000033
【図３１】
0005893954.tif 000034
【図３２】
0005893954.tif 000035
【図３３】
0005893954.tif 000036
【図３４】
0005893954.tif 000037
【図３５】
0005893954.tif 000038
【図３６】
0005893954.tif 000039
【図３７】
0005893954.tif 000040
【図３８】
0005893954.tif 000041
【図３９】
0005893954.tif 000042
【図４０】
0005893954.tif 000043
【図４１】
0005893954.tif 000044
【図４２】
0005893954.tif 000045
【図４３】
0005893954.tif 000046
【図４４】
0005893954.tif 000047
【図４５】
0005893954.tif 000048
【図４６】
0005893954.tif 000049
【図４７】
0005893954.tif 000050
【図４８】
0005893954.tif 000051
【図４９】
0005893954.tif 000052
【図５０】
0005893954.tif 000053
【図５１】
0005893954.tif 000054
【図５２】
0005893954.tif 000055
【図５３】
0005893954.tif 000056
【図５４】
0005893954.tif 000057
【図５５】
0005893954.tif 000058
【図５６】
0005893954.tif 000059
【図５７】
0005893954.tif 000060
【図５８】
0005893954.tif 000061
【図５９】
0005893954.tif 000062
【図６０】
0005893954.tif 000063
【図６１】
0005893954.tif 000064
【図６２】
0005893954.tif 000065
【図６３】
0005893954.tif 000066
【図６４】
0005893954.tif 000067
【図６５】
0005893954.tif 000068
【図６６】
0005893954.tif 000069
【図６７】
0005893954.tif 000070
【図６８】
0005893954.tif 000071
【図６９】
0005893954.tif 000072
【図７０】
0005893954.tif 000073
【図７１】
0005893954.tif 000074
【図７２】
0005893954.tif 000075
【図７３】
0005893954.tif 000076
【図７４】
0005893954.tif 000077
【図７５】
0005893954.tif 000078
【図７６】
0005893954.tif 000079
【図７７】
0005893954.tif 000080
【図７８】
0005893954.tif 000081
【図７９】
0005893954.tif 000082
【図８０】
0005893954.tif 000083
【図８１】
0005893954.tif 000084
【図８２】
0005893954.tif 000085
【図８３】
0005893954.tif 000086
【図８４】
0005893954.tif 000087
【図８５】
0005893954.tif 000088
【図８６】
0005893954.tif 000089
【図８７】
0005893954.tif 000090
【図８８】
0005893954.tif 000091
【図８９】
0005893954.tif 000092
【図９０】
0005893954.tif 000093
【図９１】
0005893954.tif 000094
【図９２】
0005893954.tif 000095
【図９３】
0005893954.tif 000096
【図９４】
0005893954.tif 000097
【図９５】
0005893954.tif 000098
【図９６】
0005893954.tif 000099
【図９７】
0005893954.tif 000100
【図９８】
0005893954.tif 000101
【図９９】
0005893954.tif 000102
【図１００】
0005893954.tif 000103
【図１０１】
0005893954.tif 000104
【図１０２】
0005893954.tif 000105
【図１０３】
0005893954.tif 000106
【図１０４】
0005893954.tif 000107
【図１０５】
0005893954.tif 000108
【図１０６】
0005893954.tif 000109
【図１０７】
0005893954.tif 000110
【図１０８】
0005893954.tif 000111
【図１０９】
0005893954.tif 000112
【図１１０】
0005893954.tif 000113