【文献】
松本 剛史, 小松 聡, 藤田 昌宏,動作合成前後の設計記述に対する記号シミュレーションによる形式的等価性検証の検討,情報処理学会研究報告システムLSI設計技術(SLDM),日本,社団法人情報処理学会,2006年 5月12日,第2006巻/第41号,第37-42頁
(58)【調査した分野】(Int.Cl.,DB名)
請求項1において前記コンピュータは、帰納法により等価性を検証する場合に、前記フィードバックループ内のフリップ・フロップに値を伝播するに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出し、抽出したリセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態として等価性の検証に利用する、等価性検証方法。
請求項2において前記コンピュータは、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第1対応関係情報を生成する、等価性検証方法。
請求項3において前記コンピュータは、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報を生成する、等価性検証方法。
請求項4において、前記コンピュータが、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係を示す情報を生成する、生成ステップを更に含み、
前記コンピュータが、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性の検証を行う、等価性検証方法。
請求項5において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第3対応関係情報を生成する、等価性検証方法。
請求項6において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報を生成する、等価性検証方法。
動作記述としての高位レベル記述と、前記高位レベル記述に基づいて得られたハードウェア記述と、の等価性を、コンピュータに検証させる等価性検証プログラムであって、
前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との逆データ依存関係に係る対応関係情報を等価性検証の支援情報として生成する、生成ステップと、
前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う検証ステップと、を実行させる等価性検証プログラム。
請求項9において、前記生成ステップは、前記コンピュータに、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出させ、
前記検証ステップは、前記コンピュータに、抽出された前記リセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態に用いて、帰納法により等価性を検証させる、等価性検証プログラム。
請求項10において、前記生成ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第1対応関係情報を生成させる、等価性検証プログラム。
請求項11において、前記生成ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報を生成させる、等価性検証プログラム。
請求項12において、前記生成ステップは更に、前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との対応関係を示す順データ依存関係に係る対応関係情報を等価性検証の支援情報として生成させ、
前記検証ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証させる、等価性検証プログラム。
請求項13において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第3対応関係情報を生成させる、等価性検証プログラム。
請求項14において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報を生成させる、等価性検証プログラム。
動作記述としての高位レベル記述と、前記高位レベル記述に基づいて得られたハードウェア記述と、の等価性を、プログラム処理によって検証する等価性検証装置であって、
前記プログラム処理により、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との逆データ依存関係に係る対応関係情報を等価性検証の支援情報として生成する、生成部と、
前記プログラム処理により、前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う検証部と、を含む等価性検証装置。
請求項17において、前記生成部は、前記プログラム処理により、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出し、
前記検証部は、前記プログラム処理により、抽出した前記リセットサイクル数分の記号シミュレーション結果を前記フィードバックループの初期状態として、帰納法により等価性を検証する、等価性検証装置。
請求項18において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリッフリップ・フロップを当該変数と一対一に対応させる第1対応関係情報を生成する、等価性検証装置。
請求項19において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報を生成する、等価性検証装置。
請求項20において、前記生成部は更に、前記プログラム処理により、前記動作合成結果におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の変数との対応関係を示す順データ依存関係に係る対応関係情報を等価性検証の支援情報として更に生成し、
前記検証部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証する、等価性検証装置。
請求項21において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリッフリップ・フロップを当該変数と一対一に対応させる第3対応関係情報を生成する、等価性検証装置。
請求項22において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報を生成する、等価性検証装置。
【発明を実施するための形態】
【0017】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0018】
〔1〕<フリップ・フロップと高位レベル記述内の逆データ依存関係を伴う変数との対応>
代表的な実施の形態に係る等価性検証方法は、動作記述としての高位レベル記述(1)と、前記高位レベル記述に基づいて得られたハードウェア記述(3,30)と、の等価性を、コンピュータを用いて検証する方法である。この方法は、前記コンピュータが、ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係の情報(8)を生成する、生成ステップを含み、前記コンピュータが、前記対応関係の情報を利用して前記等価性を検証する(9)。前記ハードウェア記述は、例えば、高位レベル記述を動作合成制約にしたがって合成したRTL記述などの合成結果、或いは高位レベル記述に基づいて人手を介して作成されたRTL記述とされる。
【0019】
これによれば、入力と出力による等価検証の単位を小さく分割して個々の検証範囲を小さくしたとき、検証の数が増えることによって逆に検証時間が長くなる事態を、前記対応関係の情報を用いることによって、前記対応関係にない対応関係を間引く事によって、抑制することができる。したがって、高位レベル記述とハードウェア記述との等価性検証に要する処理時間の短縮に寄与することができる。
【0020】
〔2〕<帰納法ベースの等価性検証、リセットサイクルの抽出>
項1において、前記コンピュータは、帰納法により等価性を検証する場合に、フィードバックループを伴うフリップ・フロップ、即ち高位レベル記述にて逆データ依存関係を伴う変数と対応付けられたフリップ・フロップに着目して、フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出し、抽出したリセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態に用いて等価性検証を実施する(
図6参照)。
【0021】
これによれば、帰納法ベースの等価性検証で行われる帰納ステップの深さを求める処理の軽減による高速化と、記号シミュレーションをあらかじめ実施する事で可能となる論理簡約化や前記論理簡約化による内部等価点判定の高速化が期待できるため、その分、等価検証の処理時間短縮に寄与する。
【0022】
〔3〕<フリップ・フロップと変数との唯一に決まる対応>
項1又は項2において、前記コンピュータは、前記対応関係の情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第1対応関係情報を生成する。
【0023】
これによれば、第1対応関係情報は例えば等価性検証の検証単位であってフィードバックループを伴うフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【0024】
〔4〕<フリップ・フロップと変数の時間サイクルなどに依存する対応>
項3において、前記コンピュータは、前記対応関係の情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報を生成する。
【0025】
これによれば、フィードバックループのフィードバックサイクル単位でフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【0026】
〔5〕<フリップ・フロップと高位レベル記述内の順データ依存関係のみを伴う変数との対応>
項4において、前記コンピュータが、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係情報を生成する、生成ステップを更に含む。このとき、前記コンピュータが、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性の検証を行う。
【0027】
これによれば、逆データ依存関係に基づく対応関係情報だけでなく順データ依存関係に基づく対応関係情報も併用して等価検証を行うことができる。
【0028】
〔6〕<フリップ・フロップと変数との唯一に決まる対応>
項5において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第3対応関係情報を生成する。
【0029】
これによれば、第3対応関係情報は例えば等価性検証の検証単位であってフィードバックループを伴わないフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【0030】
〔7〕<フリップ・フロップと変数の時間サイクルなどに依存する対応>
項6において前記コンピュータは、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報を生成する、等価性検証方法。
【0031】
これによれば、同じ関数に対して処理サイクル単位で異なるフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【0032】
〔8〕<対応関係情報を優先順位に従って追加及び修正>
項7において、前記コンピュータが、前記リセットサイクル数、逆データ依存関係に係る第1対応関係情報、逆データ依存関係に係る第2対応関係情報、順データ依存関係に係る第3対応関係情報、及び順データ依存関係に係る第4対応関係情報に、追加及び修正を行いながら、等価性を検証する。このとき、前記追加及び修正に関する優先順位として、第1優先順位をリセットサイクル数、第2優先順位を逆データ依存関係に係る第1対応関係情報、第3優先順位を逆データ依存関係に係る第2対応関係情報、第4優先順位を順データ依存関係に係る第3対応関係情報、第5優先順位を順データ依存関係に係る第4対応関係情報とする。等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追及び修正を行う(
図10、
図15参照)。
【0033】
これによれば、等価性の検証処理時間短縮に寄与する度合いが大きいと考えられる要素ほど追加及び修正に高い優先順を与える。第2関係情報よりも第1関係情報を用いた方が等価検証時間の短縮に寄与し、順データ依存関係に係る関係情報よりも逆データ依存関係に係る関係情報を用いた方が等価検証時間の短縮に寄与すると考える。したがって、等価検証に用いる依存関係情報などの情報量が過大にならないようにすることができ、制約時間内に等価検証を完了できないときに下位の依存関係情報を追加又はリセットサイクル数の修正などを行って、効率的に等価性の検証を完了することができる。
【0034】
〔9〕<フリップ・フロップと高位レベル記述内の逆データ依存関係を伴う変数との対応>
別の実施の形態に係る等価性検証プログラム(40)は、動作記述としての高位レベル記述(1)と、前記高位レベル記述に基づいて得られたハードウェア記述(3,30)と、の等価性を、コンピュータ(41)に検証させるプログラムであって、前記コンピュータに以下のステップを実行させる。第1に、前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報(8)を等価性検証の支援情報として生成する、生成ステップ(7,12)を実行させる。第2に、前記対応関係情報を利用して前記等価性の検証を行う検証ステップ(9)を実行させる。
【0035】
これによれば、逆データ依存関係に係る対応関係情報を用いて等価性の検証を行うという項1の方法を容易に実現することが可能になる。要するに、高位レベル記述とハードウェア記述との等価性検証の処理時間を容易に短縮可能にすることができる。
【0036】
〔10〕<帰納法ベースの等価性検証、リセットサイクルの抽出>
項9において、前記生成ステップは、前記コンピュータに、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出させる。前記検証ステップは、前記コンピュータに、抽出された前記リセットサイクル数分についての記号シミュレーション結果を前記フィードバックループの初期状態に用いて、帰納法により等価性を検証させる。
【0037】
これによれば、項2と同様に、等価検証の処理時間短縮に寄与する。
【0038】
〔11〕<フリップ・フロップと変数との唯一に決まる対応>
項9又は10において、前記生成ステップは、前記コンピュータに、前記逆データ依存に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第1対応関係情報を生成させる。
【0039】
これによれば、項3と同様に、フィードバックループを伴うフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【0040】
〔12〕<フリップ・フロップと変数の時間サイクルなどに依存する対応>
項11において、前記生成ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報を生成させる。
【0041】
これによれば、項4と同様に、フィードバックループのフィードバックサイクル単位でフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【0042】
〔13〕<順データ依存関係にあるフリップ・フロップと高位レベル記述内変数との対応>
項12において、前記生成ステップは更に、前記コンピュータに、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係を示す情報を等価性検証の支援情報として生成させる。前記検証ステップは、前記コンピュータに、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証させる。
【0043】
これによれば、項5と同様に、順データ依存関係に係る対応関係情報も併用して等価検証を可能にする。
【0044】
〔14〕<フリップ・フロップと変数との唯一に決まる対応>
項13において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第3対応関係情報を生成させる。
【0045】
これによれば、項6と同様に、フィードバックループを伴わないフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【0046】
〔15〕<フリップ・フロップと変数の時間サイクルなどに依存する対応>
項14において、前記生成ステップは、前記コンピュータに、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報を生成させる。
【0047】
これによれば、項7と同様に、同じ関数に対して処理サイクル単位で異なるフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【0048】
〔16〕<対応関係情報を優先順位に従って追加及び修正>
項15において、前記生成ステップは、前記コンピュータに、前記リセットサイクルパス、逆データ依存関係に係る第1対応関係情報、逆データ依存関係に係る第2対応関係情報、順データ依存関係に係る第3対応関係情報、及び順データ依存関係に係る第4対応関係情報に、優先順位に従って必要な追加及び修正を実行させる。前記検証ステップは、コンピュータに、前記必要な追加及び修正を受けた前記等価性検証の支援情報を反映して等価性を検証させる。前記追加及び修正に関する優先順位として、第1優先順位をリセットサイクルパス、第2優先順位を逆データ依存関係に係る第1対応関係情報、第3優先順位を逆データ依存関係に係る第2対応関係情報、第4優先順位を順データ依存関係に係る第3対応関係情報、第5優先順位を順データ依存関係に係る第4対応関係情報とする。等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追及び修正を行う。
【0049】
これによれば、項8と同様に、等価検証に用いる依存関係情報などの情報量が過大にならないようにすることができ、制約時間内に等価検証を完了できないときに下位の依存関係情報を追加又はリセットサイクルパスの修正などを行って、効率的に等価性の検証を完了することができる。更に、依存関係情報を用いる順番を最適することができ、等価性の検証処理時間の更なる短縮に寄与する。
【0050】
〔17〕<フリップ・フロップと高位レベル記述内の逆データ依存関係を伴う変数との対応>
更に別の実施の形態に係る等価性検証装置(42)は、動作記述としての高位レベル記述(1)と、前記高位レベル記述に基づいて得られたハードウェア記述(3,39と、の等価性を、プログラム処理によって検証する。この等価性検証装置は、生成部(41A)と検証部(42B)を有する。生成部は、前記プログラム処理により、前記ハードウェア記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報(8)を等価性検証の支援情報として生成する(7,12)。検証部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う(9)。
【0051】
これによれば、項1と同様に、逆データ依存関係に係る対応関係情報を用いて等価性の検証を行うから、高位レベル記述とハードウェア記述との等価性検証の処理時間を短縮可することができる。
【0052】
〔18〕<帰納法ベースの等価性検証、リセットサイクルの抽出>
項17において、前記生成部は、前記プログラム処理により、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出する。前記検証部は、前記プログラム処理により、抽出した前記リセットサイクル数分の記号シミュレーション結果を前記フィードバックループの初期状態として、帰納法により等価性を検証する。
【0053】
これによれば、項2と同様に、等価検証の処理時間を短縮することができる。
【0054】
〔19〕<フリップ・フロップと変数との唯一に決まる対応>
項17又は18において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第1対応関係情報を生成する。
【0055】
これによれば、項3と同様に、フィードバックループを伴うフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【0056】
〔20〕<フリップ・フロップと変数の時間サイクルなどに依存する対応>
項19において、前記生成部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報を生成する。
【0057】
これによれば、項4と同様に、フィードバックループのフィードバックサイクル単位でフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【0058】
〔21〕<順データ依存関係にあるフリップ・フロップと高位レベル記述内変数との対応>
項20において、前記生成部は更に、前記プログラム処理により、前記ハードウェア記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係を示す情報を等価性検証の支援情報として更に生成する。前記検証部は、前記プログラム処理により、前記逆データ依存関係に係る対応関係情報と共に前記順データ依存関係に係る対応関係情報を利用して等価性を検証する。
【0059】
これによれば、項5と同様に、順データ依存関係に係る対応関係情報も併用して等価検証を可能にする。
【0060】
〔22〕<フリップ・フロップと変数との唯一に決まる対応>
項21において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対一に対応させる第3対応関係情報を生成する。
【0061】
これによれば、項6と同様に、フィードバックループを伴わないフリップ・フロップを終点とした論理コーンを小さく分割するのに好適である。
【0062】
〔23〕<フリップ・フロップと変数の時間サイクルなどに依存する対応>
項22において、前記生成部は、前記プログラム処理により、前記順データ依存関係に係る対応関係情報として、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報を生成する。
【0063】
これによれば、項7と同様に、同じ関数に対して処理サイクル単位で異なるフリップ・フロップを終点とする論理コーンを把握するのに好適である。
【0064】
〔24〕<対応関係情報を優先順位に従って追加及び修正>
項23において、前記生成部は、前記プログラム処理により、前記リセットサイクルパス、逆データ依存関係に係る第1対応関係情報、逆データ依存関係に係る第2対応関係情報、順データ依存関係に係る第3対応関係情報、及び順データ依存関係に係る第4対応関係情報に、優先順位に従って必要な追加及び修正を行う。前記検証部は、前記プログラム処理により、前記必要な追加及び修正を受けた前記等価性検証の支援情報を反映して等価性を検証する。前記追加及び修正に関する優先順位として、第1優先順位をリセットサイクルパス、第2優先順位を逆データ依存関係に係る第1対応関係情報、第3優先順位を逆データ依存関係に係る第2対応関係情報、第4優先順位を順データ依存関係に係る第3対応関係情報、第5優先順位を順データ依存関係に係る第4対応関係情報とする。等価性の検証処理が所定の制約時間内に完了しないとき、前記優先順位に従った前記追及び修正を行う。
【0065】
これによれば、項8と同様に、等価検証に用いる依存関係情報などの情報量が過大にならないようにすることができ、制約時間内に等価検証を完了できないときに下位の依存関係情報を追加又はリセットサイクルパスの修正などを行って、効率的に等価性の検証を完了することができる。
【0066】
2.実施の形態の詳細
実施の形態について更に詳述する。
【0067】
2−1.第1の実施の形態
《動作合成と等価検証の全体フロー》
図1には高位レベル記述から等価検証結果を得るまでの全体的な処理フローが例示される。動作合成可能な高位レベル記述(動作記述とも称する)1は、システムベル言語であるSystemCやプログラミング言語Cなどを用いて記述される。動作合成スクリプト2は、高位レベル記述からどのような回路を合成するかの指定を行った記述(動作合成制約)である。動作合成処理4は、動作合成スクリプト2にしたがって高位レベル記述1の動作合成を実施し、動作合成結果3としてRTL(レジスタ・トランスファー・レベル)のハードウェア記述言語による記述を生成する処理である。この動作合成結果を以下単にRTL記述3とも称する。動作合成処理4はEWS(エンジニアリングワークステーション)又はPC(パーソナルコンピュータ)などのコンピュータによって動作合成プログラムを実行することで実現される。RTL記述は
図2に概念的に例示されるように、動作合成スクリプト2による動作合成制約によって、同一の高位レベル記述からレイテンシ、スループット又は動作周波数などの異なるRTL記述を生成することが可能にされる。
【0068】
図1において、動作合成処理4は、RTL記述のほかに、等価性検証の実行に必要となる情報が記述された雛形の検証スクリプト(以下単に雛形検証スクリプトとも称する)5を生成する。雛形の検証スクリプト5には、高位レベル記述とRTL記述での入力・出力ポートの対応関係や、双方の出力ポートの比較サイクルなどが記述されている。
【0069】
これに加え、動作合成処理4は、スケジューリングやリソース共有、更に動作合成の実行後であってRTL記述を出力する前に取得可能な状態遷移表6を生成する。
【0070】
情報抽出生成処理7は、高位レベル記述1、動作合成結果としてのRTL記述3、状態遷移表6、及び雛形検証スクリプト5に基づいて、RTL記述におけるフリップ・フロップとしてのレジスタと高位レベル記述内の変数との依存関係を明瞭にするための情報を生成し、検証スクリプト8として保持する。検証スクリプト8は、前記雛形検証スクリプト5に対して、前記依存関係を明瞭にするための情報の追加や前記依存関係を明瞭にするための情報による修正を行った情報として位置付けられる。
【0071】
上記依存関係を明瞭にするための情報として、合成結果としてのRTL記述におけるフィードバックループを伴うフリップ・フロップとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報を生成する。この逆データ依存関係に係る対応関係情報には、変数にフリップ・フロップを一対一に対応させる第1対応関係情報(ループ有り変数一対一対応関係情報)と、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第2対応関係情報(ループ有り変数非一対一対応関係情報)とがある。
【0072】
上記依存関係に係る対応関係を明瞭にするための情報として、更に、合成結果としてのRTL記述におけるフィードバックループを伴わないフリップ・フロップとこれに対応付けされる高位レベル記述内の順データ依存関係のみを伴う変数との対応関係情報を生成する。この順データ依存関係に係る対応関係情報には、変数にフリップ・フロップを一対一に対応させる第3対応関係情報(ループ無し変数一対一対応関係情報)と、変数に対応するフリップ・フロップを当該変数と一対多に対応させる第4対応関係情報(ループ無し変数非一対一対応関係情報)とがある。
【0073】
その他に、上記依存関係を明瞭にするための情報として、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数のリセットサイクル数を抽出する。抽出されたリセットサイクル数分の記号シミュレーション結果を初期状態として前記フィードバックループに与えて等価性の検証に利用する。本明細書では周期的な状態遷移ループを含む広い概念としてフィードバックループを把握する。また、本明細書ではフリップ・フロップを単にレジスタ若しくはFFとも記す。
【0074】
情報抽出生成処理7において、上記依存関係を明瞭にするために抽出すべき情報は、上記情報の内の一部であってもよいし、最初から全ての情報を用いなくてもよく、等価検証の進捗に併せて追加するようにしてもよい。どの情報を先に用いるかは、等価検証処理時間の短縮に効果のあるものほど先に用いることが望ましい。例えば使用優先度の第1優先順位を、リセットサイクル期間(前記必要な最小のフリップ・フロップ段数のリセットサイクル数)、及びリセットサイクル期間分の有界等価性検証の実行(ファインド・エラー・モードによるシミュレーション結果)とする。その次に、高位レベル記述内の変数で、動作合成結果としてのRTL記述にてフィードバックループを伴うレジスタに対応付けられる可能性のある変数の情報を抽出し、優先度の高いものから順に、前記変数とRTL記述内の対応するレジスタとの一対一対応関係情報(ループ有り変数一対一対応関係情報)、前記変数とRTL記述内の対応するレジスタとの、必ずしも1対1ではない対応関係情報(ループ有り変数非一対一対応関係情報)、前記以外の高位レベル記述内の変数とRTL記述内の対応するレジスタとの一対一対応関係情報(ループ無し変数一対一対応関係情報)、前記以外の高位レベル記述内の変数とRTL記述内の対応するレジスタとの非一対一対応関係情報(ループ無し変数非一対一対応関係情報)とすればよい。
【0075】
高位等価性検証処理9では、あらゆる入力シーケンスを想定して、同等の入力を高位レベル記述とRTL記述との双方に与えたとき、双方の出力が一致するか否かを判別する。例えば帰納法ベースのモデルチェッキングにて等価検証を行う。等価検証では、RTL記述及び高位レベル記述と共に、上記依存関係を明瞭にするための情報を用いて、等価性検証に要する時間を短縮する。10は高位等価性検証処理9による検証結果である。
【0076】
等価性検証時間を短縮するために上記依存関係を明瞭にするための情報を用いることによる作用について
図3ないし
図6の概念図を参照しながら説明する。
【0077】
図3には特定の変数とレジスタとの対応関係を与えることによる効果が概念的に例示される。論理コーンを等価性検証の単位とすると、論理コーンの論理規模が大きいとそれに応じて検証範囲も膨大になる。これに対して、レジスタを終点とする、論理規模の小さな論理コーンに分割すれば、個々の論理コーンにおける検証範囲が小さくなる。一方、個々の論理コーンの規模は小さくなっても、
図4に例示されるように検証対象数が増大することによって、逆に検証時間が増えることも懸念される。したがって、コーンの分割によって等価検証時間の短縮効果のあるものについてだけ論理コーンを分割することが好ましい。本発明者が着眼したように、フィードバックループを構成するレジスタに対して逆データ依存関係を伴う変数との対応を指定し、その指定されたレジスタに関して論理コーンを分割して等価性検証を行うようにする。
図5に例示されるように、フィードバックループはレジスタの出力がレジスタの入力で参照される関係である。当該レジスタに対応する変数との対応関係をレジスタマップとして与えることで、そのフィードバックループを切断して得られる論理コーン同士の等価性検証に帰着する事ができる。即ち、フィードバックループのレジスタの出力を検証するのに、当該レジスタの複数サイクルに亘る前の多数の状態を検証対象にしなければならなくなって検証範囲が拡大するという事態の発生を抑制することができる。
【0078】
図6には前記リセットサイクル数を抽出して利用する場合の作用が概念的に例示される。フィードバックループにループフリーな状態遷移パスが繋がっている場合に、リセット状態S0を初期状態とするその全体を帰納法ベースで等価性を完全証明しようとすると、Snの状態が決まらないフィードバックループの状態も確定されず、検証結果を得るのに多大に処理時間を要することになる。このとき、前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数を、前記フィードバックループに繋がるループフリーな状態遷移パス上のフリップ・フロップ列(リセットサイクルパス)S0〜Snの段数とし、それによるリセットサイクル数を抽出する。前記フィードバックループ内のフリップ・フロップに値を伝播させるのに必要な最小のフリップ・フロップ段数については、着目するフィードバックループに繋がるリセットサイクルパスの内の最大パスにおいて、考慮すれば済む最小フリップ・フロップ段数、と把握することができる。これを簡略化して、最小最大パス上のフリップ・フロップ段数、とも称する。抽出されたリセットサイクルパスに対して前記リセットサイクル数分の記号シミュレーション結果を前記フィードバックループにおける状態Snの初期状態として前記フィードバックループの等価性の検証に利用する。要するに、分割点Snまでを有界検証手法であるファインド・エラー・モード(Find Error Mode)で検証し、周期的な状態遷移ループに対してフル プルーフ モード(Full Proof Mode)のような帰納法ベースの完全証明による等価検証を行うようにすることができる。全体をフル プルーフ モードで検証する場合と同様の範囲について検証範囲を分割して処理時間の短縮を図ることができる。
【0079】
上述の作用説明とは一部重複することになるが、前記依存関係を明瞭にするための情報を用いることによる作用効果について詳細に補足する。
【0080】
先ず、特定の変数とFFとの対応関係を与える事による作用効果について補足する。例えば
図7に示された高位レベル記述を一例とすると、
図8には高位記述に対応するデータフローが例示され、
図9はそれに対応する動作合成結果の回路図を例示する。
【0081】
高位レベル記述内の変数とRTL記述内のFFとの対応関係情報を与える事で、等価性判定で比較すべきデータフローの分割が可能となるため、判定対象規模削減による高速化が可能となる。
図7乃至
図9に例示されるように、変数とFFの対応関係を示す事で、以下のような判定高速化が可能となる。即ち、変数x、yとFFx、FFyの夫々の対応関係が与えられていると仮定する。先ず、aとa、(b∧c)∧dとb∧(c∧d)が等価である事を検証する。これらは等価である。fcとfRTLが等価である事は、双方、等価な入力を持つEOR(Exclusive OR)演算である事により証明される。
【0082】
一方、対応関係が正しいか否かの検証が等価性検証では必要となり、この検証が余分に実行されるため、その実行時間オーバヘッドが無視できなくなる、という問題がある。従って、例えば全対応関係情報を与える事は、一般に好ましくないと考えられる。高位レベル記述内の逆データ依存関係を持つ変数に着目した場合、対応するRTL記述内のFFは、RTL構造内でフィードバックループを持つFFとなっており、一般に、この構造はフィードバックループを伴わない構造に比べ、大きな状態空間を構成する。それ故、逆データ依存関係を持つ変数に着目し、変数・FF対応関係情報を与えた場合、フィードバックループが切断可能となるため、検証対象の状態空間が小さくなり、等価性判定処理の高速化が達成できる。逆データ依存関係を持つ変数に着目する事で、変数とFFの対応関係の指定数を削減でき、変数とFFとの対応関係が正しいかの検証オーバヘッドも削減できる。
【0083】
次に、リセットサイクル算出による作用効果を補足する。
【0084】
高位等価性検証の一つの実現手段では、高位レベル記述とRTL記述双方に対して、記号シミュレーション(単に信号Simとも記す)による状態展開を実施するなどで、全状態にて対応する出力が同一の値を出力する事を検証する。ここで、対応する出力が同一の値となるか否かは、命題論理で記述可能であるため、多くの場合、命題論理を対象とした安全性(Safety Property)検証を実施する事となる。
【0085】
安全性検証の手法として利用可能なものとしては、
1.帰納法ベースの検証技術(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.参照)
2.記号モデル検査法(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.参照)
3.非有界モデル検査法(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.参照)
4.帰納的不変量抽出に基づく、到達可能状態空間近似による検証(Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.参照)
などが挙げられる。
【0086】
上記どの技術を用いるとしても、リセットサイクルを適切に与え、そのサイクル期間分、記号Simにて状態展開を行った結果得られた状態を初期状態とする事で、次の効果が得られる。
【0087】
第1に、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の取り得る値の範囲の同定による論理簡約化により、内部等価点判定の高速化や、次状態算出での像計算の高速化による、等価性検証高速化が期待できる。
【0088】
第2に、上記2.、3.、4.のように、到達可能状態の算出が必要となる場合、出力値の一致が証明できない範囲で、論理簡約化を期待した状態展開を予め行っておく事で、次状態算出での像計算高速化による等価性判定処理の高速化が期待できる。
【0089】
第3に、上記1.の手法では、K回まで状態展開した状態空間で出力値が一致している事を検証し、K+1回まで状態展開した状態空間でも同様に成立する事を示す必要があるが、このKの値により検証速度が左右されるため、このKを適切に選定する事で、検証速度向上が期待できる。
【0090】
一方、リセットサイクルが長いと、新たに設定した初期状態が大きくなるという問題もあり、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手法による新たな初期状態表現の簡約化を行ったとしても、反って処理が低速となる事が懸念される。
【0091】
従って、上記に示した効果を得るためには、適切なリセットサイクル数の算出が必要となる。本実施の形態の手法では、RTL構造にてフィードバックループを構成するFF、即ち高位レベル記述にて逆データ依存関係がある変数と対応付けられたFFに着目し、フィードバックループに対してループフリーな最小最大パス上のFF段数を、リセットサイクルとして抽出する。その理由は下記である。
【0092】
RTL構造に着目した場合、フィードバックループを伴うFFが存在する場合、そのループに対してループフリーな最小最大パスのFF段数分のサイクル以上のサイクル分の状態展開を行わない限り、記号Simでの記号値の伝播は、全FFに行き渡らない。
【0093】
FFの段数に着目しているため、このループが持つ状態空間を覆うのに必要となるサイクルよりも十分小さな値となっており、リセットサイクル後に得られる新たな初期状態も大きくならない事が予想される。
【0094】
従って、2.,3.,4.の手法の場合、このサイクル分だけ状態展開を行ったとしても、到達可能な状態に必要な展開数以下となり、論理簡約化の恩恵を受けられるものと考えられる。
【0095】
また、1.の手法の場合であっても、展開サイクル数の選び方、即ち全FF内の一部のFFからなるループに着目した選び方から、このサイクルが全FFの成す状態空間内のループフリーな最小最大パスを超える事はないため、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より大きな値に設定する事での帰納ステップ削減による高速化と、論理簡約化による内部等価点判定の高速化が期待できる。
【0096】
上記議論により、提案手法によるリセットサイクル算出により、安全性検証に帰着しての等価性検証手法は、その実現手法に依らず、処理高速化の達成が可能であると考えられる。
【0097】
一方、リセットサイクルが長いと、新たに設定した初期状態が大きくなるという問題があり、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手法による新たな初期状態表現の簡約化を行ったとしても、状態遷移表現が複雑となる虞があるため、反って処理が低速となる事が懸念される。
【0098】
本実施の形態では、RTL構造にてフィードバックループを構成するFF、即ち高位レベル記述にて逆データ依存関係がある変数と対応付けられたFFに着目し、フィードバックループ内のループフリーな最小最大パス上のFF段数を、リセットサイクル数として抽出する。その理由は下記である。RTL構造に着目した場合、フィードバックループを伴うFFが存在する場合、そのループ内の内部ループフリーな最小最大パスのFF段数分のサイクル以上のサイクル分の状態展開を行わない限り、記号Simでの記号値の伝播は、全FFに行き渡らず、定数伝播などでの論理簡約化の効果を期待できない。
【0099】
上記リセットサイクル算出により、その実現手法に依らず、高位レベル記述とRTL記述の既存等価性検証の処理高速化の達成が可能であると考えられる。
【0100】
上記情報抽出生成処理7及び高位等価検証処理9は、
図110に例示されるように、EWS(エンジニアリングワークステーション)又はPC(パーソナルコンピュータ)などのコンピュータ41によって等価性検証プログラム40を実行することで実現される。等価性検証プログラムは、高位レベル記述1と、この高位レベル記述1を動作合成処理4によって動作合成したRTL記述3と、の等価性を、コンピュータに検証させるプログラムである。このプログラムは、第1に前記コンピュータに、前記合成結果におけるフィードバックループを伴うレジスタとこれに対応付けされる高位レベル記述内の逆データ依存関係を伴う変数との対応関係情報を等価性検証の制約情報として生成する、生成ステップとしての情報抽出生成処理7を実行させる。第2に、前記逆データ依存関係に係る対応関係情報を利用して前記等価性の検証を行う検証ステップとしての高位等価性検証処理9を実行させる。各処理7,9の内容については既に説明した通りである。
【0101】
コンピュータ41に前記等価性検証プログラム40をインストールした装置が等価性検証装置42を構成する。この等価性検証装置は、コンピュータのプログラム処理によって前記情報抽出処理7を行う生成部41Aと、コンピュータのプログラム処理によって前記高位等価性検証処理を行う検証部42Bとを有する。生成部及び検証部は、コンピュータに特定のプログラムを実行させて実現される機能実現手段として位置付けられる。
【0102】
2−2.第2の実施の形態
《高位等価性検証に時間制約を設ける》
図10には高位等価性検証に時間制約を設けた場合の全体的な等価検証処理フローが例示される。
図1との相違点は時間制約を設けて高位等価検証を行うようにしたことである。即ち、高位等価検証処理9が制約時間内に完了したか否かの判別処理11を行い、制約時間内に完了しなかったと判別されたときは、検証スクリプトの設定変更処理12が行われ、これによる設定変更内容が検証スクリプト8に反映される。この後、設定変更内容が反映された検証スクリプト8を用いて、高位等価性検証処理が開始される。
【0103】
検証スクリプトの設定変更処理12は、優先度に従って、上記依存関係を明瞭にするための情報の追加や修正を行う処理である。例えば、リセットサイクルパスの情報を抽出しフィードバックループの等価性の検証にて当該リセットサイクルパスに着目した記号Simを実施する事での初期状態を与えて利用可能にすることを最優先度とする。以下、優先度の高い情報として、第1対応関係情報(ループ有り変数一対一対応関係情報)、第2対応関係情報(ループ有り変数非一対一対応関係情報)、第3対応関係情報(ループ無し変数一対一対応関係情報)、第4対応関係情報(ループ無し変数非一対一対応関係情報)を、制約時間が経過する毎に、順次検証スクリプト8に追加する処理を行っていく。途中で、リセットサイクルパスを修正する設定変更処理を加えることも可能である。更に、優先度に従っていくつかの対応関係情報をまとめて検証スクリプト8に追加することも可能である。
【0104】
代表的な例として、情報抽出生成処理において上記依存関係を明瞭にするための情報を抽出して優先順位付けを行う場合には、以下1)〜6)の順番に情報の抽出を行う。
1)高位レベル記述内の変数で、動作合成結果としてのRTL記述にてフィードバックループを伴うレジスタに対応付けられる可能性のある変数の情報。
2)抽出した前記変数と、RTL記述内の対応するレジスタとの一対一対応関係情報(ループ有り変数一対一対応関係情報)。
3)抽出した前記変数と、RTL記述内の対応するレジスタとの、必ずしも1対1ではない対応関係情報(ループ有り変数非一対一対応関係情報)。
4)抽出した前記以外の高位レベル記述内の変数と、RTL記述内の対応するレジスタとの一対一対応関係情報(ループ無し変数一対一対応関係情報)。
5)抽出した前記以外の高位レベル記述内の変数と、RTL記述内の対応するレジスタとの非一対一対応関係情報(ループ無し変数非一対一対応関係情報)。
6)リセットサイクル期間(リセットサイクルパス)、及びリセットサイクル期間分の有界等価性検証の実行(ファインド・エラー・モードによるシミュレーション結果)
それらの情報に対して6)、2)、3)、4)、5)の順で優先順位を付け、その順位に従って、検証スクリプトへの情報追加及び修正を実施すればよい。
【0105】
時間制約を設ける本実施の形態においては、最初に6)の条件を用いて等価性の検証を行ったとき制約時間内で実行を完了することができない場合に、検証スクリプト設定変更処理12で、優先度に従い、変数とレジスタとの対応関係情報を検証スクリプト8に追加する処理を行って、高位等価性検証を実施すればよい。
【0106】
第2の実施の形態では上記情報抽出生成処理7、検証スクリプト設定変更処理及び高位等価検証処理9は、EWS(エンジニアリングワークステーション)又はPC(パーソナルコンピュータ)などのコンピュータによって等価性検証プログラムを実行することで実現される。第2の実施の形態における等価性検証プログラムは
図10の処理手順に従って高位レベル記述1とRTL記述3との等価性を、コンピュータに検証させるプログラムである。コンピュータに当該等価性検証プログラムをインストールした装置が等価性検証装置を構成するという関係は第1の実施の形態と同じである。
【0107】
2−3.第3の実施の形態
《RTL記述から直接状態遷移表を抽出》
図11にはRTL記述から直接状態遷移表を抽出するようにした場合の全体的な等価検証処理フローが例示される。
図1との相違点は状態遷移表抽出処理13によってRTL記述3から直接状態遷移表6を抽出するようにしたことである。
【0108】
状態遷移表6は、所謂データパス付き状態遷移図(FSMD:Finite State Machine with Datapath)の表形式である。HDL(ハードウェア記述言語)でのRTL記述における、所謂2プロセスモデルに直接対応する。2プロセスモデルとは、状態FFやレジスタを表すFFなどのフリップ・フロップを記述するalwaysブロックと、各状態または状態遷移にて実行する実行文からなる組合わせ回路を表すalwaysブロックの2つのプロセスにて記述されたRTL記述形式である。動作合成ツールからの合成結果RTLが、2プロセスモデルで記述されている場合は、組合わせ回路記述から、状態FFを識別可能であり、レジスタFFへの代入操作も識別可能であるため、直接合成結果RTLから状態遷移表を抽出可能である。その場合、動作合成ツールからの状態遷移表生成は、RTLからの抽出にて代替可能である。
図12に2プロセスRTL記述の例が示される。これに対応するFSMD記述は
図13に例示され、対応する状態遷移表6は
図14に例示される。
図14に例示されるように、状態遷移表6は、現状態から次状態への遷移条件を伴う。状態遷移表6には状態遷移の中で、レジスタFFへの代入操作及びその実行条件が記述されている。状態遷移表の更なる詳細についてはH.-P. Juan, “Design Methodology and Algorithms for Interactive Behavioral Synthesis,”PhD Thesis, CECS U.C Irvine, 1997.の文献がある。
【0109】
図15には合成結果であるRTL記述が常に2プロセスモデルであって、時間制約を設けて高位等価性検証を実施する場合の全体的な等価検証処理フローが例示される。
【0110】
2−4.第4の実施の形態
《情報抽出処理の概要》
図16には情報抽出処理7について詳細な処理手順が全体的に例示される。
図16において情報抽出処理7は、データ依存解析処理s1、入出力サイクル情報抽出処理s2、対応FF抽出処理s3、リセット伸長サイクル抽出処理s4、及び検証スクリプト改変処理s5から成る。
【0111】
データ依存解析処理s1では、高位レベル記述1を入力として、変数のデータ依存関係解析を実施し、各変数に対して、合成結果RTL記述3にてフィードバックループを伴うFFに対応付けられる可能性があるか否か推定し、その分類結果を変数依存関係情報21に格納する。
【0112】
入出力サイクル情報抽出処理s2では、高位レベル記述1と動作合成スクリプト2を読み込み、合成結果RTL記述3がパイプライン回路であるか否か、および各入力・出力のスループットが定数サイクルであるか否かの解析を実施する。定数サイクルの場合は、各入力・出力のスループットサイクル数を取得する。パイプライン回路の場合はこれに加えて、レイテンシサイクル数を取得する。また、入力高位レベル記述をサイクル精度記述と見做してのスループットサイクル数を取得する。これら取得した情報を入出力サイクル情報20に格納する。
【0113】
対応FF抽出処理s3では、高位レベル記述1、合成結果RTL記述3、変数依存関係情報21、状態遷移表6、及び入出力サイクル情報20を読み込み、高位レベル記述1内の変数と合成結果RTL記述3内のFFの対応関係を解析する。ここで、合成結果RTL記述3にてフィードバックループを伴うFFに対応付けられる可能性のない変数(以下、ループなし変数)に関しては、一対一に対応するFFが各変数に存在するか否かを解析し、存在した場合、その対応関係をループなし変数一対一対応関係情報24に格納する。存在しない場合、その対応関係をループなし変数非一対一対応関係情報25に格納する。合成結果RTL記述3にてフィードバックループを伴うFFに対応付けられる可能性がある変数(以下、ループあり変数)に関しては、先ず一対一に対応するFFが各変数に存在するか否かを解析し、存在した場合、その対応関係をループあり変数一対一対応関係情報22に格納。一対一に対応するFFが存在しなかった変数が残っていれば、状態遷移表6のFFへの代入条件に着目して、条件付きで対応付けられるFFが存在するか否かを解析し、存在した場合、その対応関係をループあり変数非一対一対応関係情報23に格納する。
【0114】
リセット伸長サイクル抽出処理s4では、合成結果RTL記述3、ループあり変数一対一対応関係情報22、及びループあり変数非一対一対応関係情報23、入出力サイクル情報20を入力とし、RTL記述3内のループあり変数に対応付けられたFFの成すフィードバックループが存在するか否かを解析する。存在した場合、各フィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数を求める。このサイクル情報の中で、最大値をパイプライン回路でない場合、リセットサイクル期間情報26に格納する。パイプライン回路である場合、この最大値とレイテンシサイクル数−1の値で大きい方を、リセットサイクル期間情報26に格納する。一方、RTL記述3にてフィードバックループを構成しなかった場合は、この変数の持つ対応関係情報を、夫々ループなし変数一対一対応関係情報24とループなし変数非一対一対応関係情報25に格納し、この変数を夫々夫々ループあり変数一対一対応関係情報22とループあり変数非一対一対応関係情報23から削除する。
【0115】
検証スクリプト改変処理s5では、高位レベル記述1、合成結果RTL記述3、入出力サイクル情報20、4つの変数・FF対応関係情報(ループあり変数非一対一対応関係情報23、ループあり変数一対一対応関係情報22、ループなし変数非一対一対応関係情報25、ループなし変数一対一対応関係情報24)、リセットサイクル期間情報26、及び動作合成処理4が出力した雛形検証スクリプト5を入力として、これら情報を、雛形検証スクリプト5を修正する事で追加し、検証スクリプト8を出力する。
【0116】
《データ依存解析処理》
データ依存解析処理s1について詳述する。
【0117】
高位レベル記述1を入力として、既存コンパイラ技術を用いて、変数のデータ依存関係解析を実施し、各変数に対して、合成結果RTL記述3にてフィードバックループを伴うFFに対応付けられる可能性があるか否か推定し、その分類結果を変数依存関係情報21に格納する。
【0118】
ここで、逆データ依存関係とは、
図17例示するように、プログラムの実行と逆方向に変数の定義と参照が行われている関係をいう。この逆データ依存関係を持つ変数を、フィードバックループを伴うFFに対応付けられる可能性のある変数として識別する。
図18には
図12の高位レベル記述1のデータ依存関係を纏めて記載した。
【0119】
動作合成可能な高位レベル記述では、ハードウェアの動作をモデル化するため、動作記述全体が無限ループ内に記述されており、ループ伝播データ依存関係、即ち、
図17に示すような変数への定義後に一回以上ループを回ってから変数への参照が行われる事がある場合も、フィードバックループを伴うFFに対応付けられる可能性のある変数として識別する。
【0120】
本解析では、ループ伝播データ依存関係を逆データ依存関係と見做して解析を行っても問題ないため、配列要素間のループ伝播データ依存解析に関しては、配列変数を1つのスカラ変数と見做して、逆データ依存関係があるかの解析のみを行う、としても良い。
【0121】
更に、
図17に示すように、分岐内で変数定義が行われているが、全分岐では変数定義が行われていない変数もフィードバックループを伴うFFに対応付けられる可能性のある変数として識別する。
【0122】
順データ依存関係のみがある変数とは、
図17に示すように、高位レベル言語記述内の変数であって、データ依存関係が存在し、逆データ依存関係や、ループ伝播データ依存関係を一切持たない変数を指す。この変数を、フィードバックループを伴うFFに対応付けられる可能性のない変数として識別する。
【0123】
上記データ依存関係での解析では、各変数への代入と参照にのみ着目し、解析対象変数への代入文と参照のみを対象に解析を実施し、代入操作の推移閉方を考慮した解析は行わない。
【0124】
尚、本解析に必要となるデータ依存解析技術は、既存コンパイラ技術のデータ依存関係解析をそのまま利用可能であり、それは、
中田郁男 「コンパイラの構成と最適化」 朝倉書店, 1999年、及び
Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman, “Compilers: Principles, Techniques, & Tools with Gradiance(2nd Edition),” Addison Wesley, 2007.
等の文献で開示されている。
【0125】
図19にはデータ依存解析処理のフローチャートが例示される。データ依存解析処理s1での各ステップの処理内容は下記の通りである。尚、本明細書で参照するフローチャートにおいて、左右位置にそれぞれ縦線を付加した矩形は関数コールを意味し、処理を意味する単なる矩形とは区別して図示してある。
【0126】
s11では、高位レベル記述を読み込み、無限ループ記述内の変数を識別し、当該変数の集合をVとし、処理をs12へ移行する。
【0127】
s12では、集合Vが空集合であるか否かを判定し、空集合の場合、処理を終了し、そうでない場合、処理をs13へ移行する。
【0128】
s13では、集合Vから変数vを一つ選び、集合Vから当該変数vを削除し、処理をs14へ移行する。
【0129】
s14では、既存コンパイラ技術を用いて、変数vを対象としたデータ依存解析を実施し、処理をs17へ移行する。尚、高位レベル記述がポインタ変数を伴う場合は、ポインタの存在しない記述へ変更するものとし、変数vが配列変数である場合は、配列要素間のデータ依存解析も併せて実施するものとする。
【0130】
s15では、変数vへの代入条件を全て取得し、それらをORで結合した条件式Cond(v)を構成し、処理をs15へ移行する。
【0131】
s16では、Cond(v)が恒真か否か判定し、恒真の場合、処理をs16へ移行し、そうでない場合、処理をs20へ移行。ここで、恒真判定では、必要ならCond(v)内の変数への代入文識別を実施し、Cond(v)内の変数の置き換えを実施した上で、充足可能性判定による恒真判定を実施するものとする。
【0132】
s17では、変数vが逆データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs18へ移行する。
【0133】
s18では、変数vがループ伝播データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs19へ移行する。
【0134】
s19では、変数vが順データ依存関係を持つ変数か否か判定し、持つ場合は処理をs21へ、そうでない場合は、処理をs12へ移行する。
【0135】
s20では、変数vをループあり変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【0136】
s21では、変数vをループなし変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【0137】
図20には高速化手法を用いたデータ依存解析処理の一例を示す。
図20を詳細に説明する前に高速化手法の要点について説明する。
【0138】
配列変数をインデックスの違いを識別せず取扱い可能とするため、インデックスが変数の場合、スカラ変数に置換して解析を実施する。
【0139】
配列インデックスが変数の場合、ループ伝播データ依存関係が存在する可能性がある。ループ伝播データ依存がある場合、逆データ依存として識別可能である一方、ループ伝播データ依存がない場合でも、逆データ依存関係があると識別してしまう可能性があるが、リセット伸長サイクル抽出部にて、後者の変数が実際にRTLにてフィードバックループを伴うFFに対応付けられたか否かを判定するため、安全な抽象化となっている。この抽象化により、計算コストの高い配列要素間のデータ依存解析が不要となる。
【0140】
ポインタ変数をスカラ変数に置換して解析を実施する。配列変数と同様の議論から、安全な抽象化となっている。この抽象化により、計算コストの高いポインタ解析及び配列要素間のデータ依存解析が不要となる。
【0141】
変数代入条件の分岐条件の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か否かの判定処理が高速化される。
【0142】
図20による高速化されたデータ依存解析処理s1での各ステップの処理内容は下記の通りである。
【0143】
s11’では、高位レベル記述を読み込み、無限ループ記述内の配列インデックスが変数である配列変数やポインタ変数をスカラ変数に置換えた後、変数を識別し、当該変数の集合をVとし、処理をs12へ移行する。ここで、定数インデックスのみを伴う配列変数も、インデックス値の違いが識別可能な互いに異なるスカラ変数へ置換する。
【0144】
s12では、集合Vが空集合であるか否かを判定し、空集合の場合、処理を終了し、そうでない場合、処理をs13へ移行する。
【0145】
s13では、集合Vから変数vを一つ選び、集合Vから当該変数vを削除し、処理をs14へ移行する。
【0146】
s14では、既存コンパイラ技術を用いて、変数vを対象としたデータ依存解析を実施し、処理をs17へ移行する。
【0147】
s15’では、「分岐構造に着目したCond(v)の構成」を実施し、処理をs15へ移行する。
【0148】
s16では、Cond(v)が恒真か否か判定し、恒真の場合、処理をs16へ移行し、そうでない場合、処理をs20へ移行する。尚、Cond(v)のが恒真か否かはs15で求められているため、s16では処理の分岐のみを実施する。
【0149】
s17では、変数vが逆データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs18へ移行する。
【0150】
s18では、変数vがループ伝播データ依存関係を持つ変数か否か判定し、持つ場合は処理をs20へ、そうでない場合は、処理をs19へ移行する。
【0151】
s19では、変数vが順データ依存関係を持つ変数か否か判定し、持つ場合は処理をs21へ、そうでない場合は、処理をs12へ移行する。
【0152】
s20では、変数vをループあり変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【0153】
s21では、変数vをループなし変数として識別し、変数依存関係情報に格納後、処理をs12へ移行する。
【0154】
《入出力サイクル情報抽出処理_処理概要》
入出力サイクル情報抽出処理s2について概要を説明する。
【0155】
第1に、入出力サイクル情報処理s2は高位レベル記述1と動作合成スクリプト2を読み込み、下記の処理を実施する。
【0156】
(1)入力情報を分析し、合成結果RTL3を下記に分類する。
a)パイプライン(以下Pipelineとも記す)合成RTL:回路全体が固定のThroughput/Latencyサイクルを伴うRTL。
b)サイクル精度合成RTL:高位レベル記述の各入力から各出力に至る消費サイクルが維持されたRTL。
c)パスレイテンシ設定合成RTL:高位レベル記述内のプログラムパスに対して、実行サイクル数が別途プログラム記述とは別に合成スクリプトや合成ディレクティブにて指定された場合の、合成結果RTL。
d)内部ループPipeline合成RTL:高位レベル記述内の内部ループに対して、固定のThroughput/Latencyサイクルの指定を伴うPipeline化指定が別途プログラム記述とは別に合成スクリプトや合成ディレクティブにて指定された場合の、合成結果RTL。
e)非サイクル精度合成RTL:高位レベル記述内のプログラムパスに対して、実行サイクル数が、内部ループに対して、固定のThroughput/Latencyサイクルを指定してPipeline化指定が別途プログラム記述とは別に合成スクリプトや合成ディレクティブにて指定された場合の、合成結果RTL。
【0157】
(2)高位レベル記述の入出力サイクル情報を取得する。
【0158】
(3)分類後の各RTL構造に応じた、合成結果RTLの入出力サイクル情報を取得する。
【0159】
(4)得られた入出力サイクル情報を元に、Pipeline合成RTLとサイクル精度合成RTL以外の合成結果RTLを、再度下記に分類する。
a)入出力スループット比一定RTL:高位レベル記述の各入力・出力スループットが一定で、RTLの各入力・出力スループットが一定であり、各スループットサイクルの比が一定値となるRTL。
b)入出力スループット比非一定RTL:上記以外のRTL。
【0160】
第2に、入出力サイクル情報処理s2は更に、入力情報を用いた合成結果RTL構造分類処理を以下の通り行う。
【0161】
動作合成スクリプト内のコマンドや、高位レベル記述内部の合成ディレクティブを解釈する。
【0162】
記述全体に対してPipeline合成指定を行っている場合、Pipeline合成RTLと識別する。
【0163】
高位レベル記述内のプログラムパスに対する実行サイクル指定のみが、合成コマンドや合成ディレクティブにより指定されている場合、パスレイテンシ設定合成RTLと識別する。
【0164】
高位レベル記述内の内部ループに対してのみ、固定のThroughput/Latencyサイクルの指定を伴うPipeline化指定のみが、合成コマンドや合成ディレクティブにより指定されている場合、内部ループPipeline合成RTLと識別する。
【0165】
上記双方が指定されている場合、非サイクル精度合成RTLと識別する。
【0166】
上記以外の場合、サイクル精度合成RTLと識別する。
【0167】
《入出力サイクル情報抽出処理_Pipeline合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理s2におけるPipeline合成RTLを対象とした情報抽出ついて説明する。
【0168】
Pipeline合成RTLを対象とした情報抽出処理で抽出すべき情報は、Pipeline回路内の各入出力のThroughput/Latencyサイクル、及び得られたThroughput値の最大公約数である。
【0169】
Pipeline構造に関しては、各入力・出力はPipelineの各ステージの何れかに割当てられる。特に複数のステージに入力・出力が割当てられた場合、その入力同士や出力同士は、1)初段ステージからThroughputサイクル番目のステージの何れかに存在するか、2)Latencyサイクル分のステージをThroughputサイクル区間毎に分割した区間サイクル内で異なるステージに出力が割当てられているか、の何れかである。実際、上記1)2)の条件を満たさない場合、
図21〜
図26に示すように出力衝突が発生する。また、入力の場合は入力衝突を起こし、衝突回数分だけ入力データの取りこぼしが発生し、高位レベル記述と異なる入力動作となる。
図21は同一出力信号が複数あり、それらが初段ステージからスループットサイクル番目のステージまでに存在するパイプライン動作を示す。
図22は同一出力信号が複数のステージにあり、それらがレイテンシサイクル分のステージをスループットサイクル区間毎に分割した区間サイクル内で異なるステージに割当てられたパイプライン動作を例示する。
図23は同一出力信号が複数のステージにあり、それらが出力衝突を起こすパイプライン動作を例示する。
図24は同一入力信号が複数のステージにあり、それらが初段ステージからスループットサイクル番目のステージまでに存在するパイプライン動作を例示する。
図25は同一入力信号が複数のステージにあり、それらがレイテンシサイクル分のステージをスループットサイクル区間毎に分割した区間サイクル内で異なるステージに割当てられたパイプライン動作を例示する。
図26は同一出力信号が複数のステージにあり、入力データの取りこぼしが発生するパイプライン動作を例示する。
【0170】
Throughput/Latency情報の取得は次のように行う。動作合成スクリプト内のコマンドや、高位レベル記述内部の合成ディレクティブを解釈し、Pipeline回路全体でのスループット・レイテンシサイクル数を取得する。次いで、Pipeline内のどのステージにどの入力・出力動作が割当てられたかを、動作合成スクリプト内のコマンドや、高位レベル記述内部の合成ディレクティブを解釈し、取得する。全出力のThroughputは、1つのステージにのみ割当てられた入力・出力に対して、現れる入力・出力の数を1とし、そのステージまでのサイクルをLatencyサイクルとする。Pipeline回路全体でのThroughput値をThroughputサイクルとして算出する。複数のステージに割当てられた入力・出力に対しては、以下の2つの情報を出力する。第1に、現れる同一入力・出力の数、及び、割り当てステージまでのサイクル情報を全てLatency情報として算出し、Pipeline回路全体でのThroughput値をThroughputサイクルとして算出する。第2に、ceil(Latencyサイクル数/Throughputサイクル数)を算出し、その値分パイプライン(Pipleine)構造を表すリストを作成する。次いで、同一入力・出力間の最小サイクルを求め、それをThroughputサイクル値として出力。また、Latencyサイクル数は、Pipeline内での各同一入力・出力の割り当てサイクル数全体の最大公約数として算出する。ここでceil()は、小数点以下を切り上げる関数を表し、以降もそのような関数として用いるものとする。
【0171】
入出力サイクル情報の出力では、Pipeline回路である事、及び取得した各出力のスループット・レイテンシサイクル情報を入出力サイクル情報に格納する。
図27及び
図28に示すように、入出力サイクル情報は、入力または出力信号名、出現回数、Throghput、Latencyの順でリスト構造により表現される。特に、出現回数が2以上の場合は、出現回数から二つのリストへのポインタがあるものとする。尚、この構造の表現は、ネストした構造体を用いても良い。
図27はパイプライン動作を対象とした、入出力サイクル情報の入力サイクル情報の格納形式を例示し、
図28はパイプライン動作を対象とした、入出力サイクル情報の出力サイクル情報の格納形式を例示する。
【0172】
図23から
図26にはPipeline合成RTLを対象とした情報抽出処理における入出力サイクル情報の出力例として上記1)、2)の条件を満たす場合の出力サイクル情報の出力例が示される。
図29は
図21に示したパイプライン動作例に対応する出力サイクル情報を示す。
図30は
図22に示したパイプライン動作例に対応する出力サイクル情報を示す。
図31は
図24に示したパイプライン動作例に対応する入力サイクル情報を示す。
図32は
図25に示したパイプライン動作例に対応する入力サイクル情報を示す。
【0173】
《入出力サイクル情報抽出処理_サイクル精度合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理s2におけるサイクル精度合成RTLを対象とした情報抽出について説明する。
【0174】
抽出すべき情報は、各入力・出力のThroughputサイクル情報、及び入力全体や出力全体でのThroughputサイクル情報である。ここで、各入力・出力Throughputサイクル情報には、初期Throughputサイクル情報(最初の信号変化までのサイクル数)と、Throughputサイクル情報(信号変化間隔サイクル数)が含まれるものとし、入力全体や出力全体でのThroughputサイクル数は、前記Throughputサイクル情報から構成するものとする。
【0175】
プログラム構造に関しては、高位レベル記述をCFG(Control Flow Graph:コントロールフローグラフ)に変換した場合を考える。CFGの無限ループ内部に非決定ループ構造があり、その内部に出力や入力の内1つでも存在しない場合、ループの実行回数に応じて、当該非決定ループに含まれない出力や入力の値変化サイクルは、周期的と成り得ない。したがって、そのような場合、当該非決定ループに含まれない出力や入力は毎サイクル変化するものとして扱わざるを得ない。
【0176】
各出力のThroughputサイクル情報の取得については次の通りとする。
【0178】
(2)高位レベル記述をCFGに変換する。CFG構成法は、特許第3909073号に記載がある。
【0179】
(3)CFGの無限ループ内のループにてループ展開可能なループを全て展開する。
【0180】
(4)(#)O =φなら、得られた出力毎のThroughputサイクル数情報に対して、全ての値の最大公約数を求め、それを出力全体のThroughputサイクル値として処理を終了する。
【0181】
(5)出力o∈Oを一つとり、O=O-{o}とする。
【0182】
(6)CFG内のoへの代入操作を行うノードを2つに分離し、新たな2点のノード間には接続辺がないものとし、得られたCFGに対して強連結成分への分割を行い、強連結成分が現れた場合、oを含まない非決定ループが存在する事となるため、出力oのThroughputサイクル値を1として、処理を(#)へ移行。そうでない場合は、以下を実行する。即ち、無限ループ先頭から出力oへ至るプログラムパス上のサイクル数を取得し、初期Throughputサイクルとする。出力oから同一出力oに至るプログラムパスが存在する場合は、そのパス上のサイクル数を取得する。ここで、プログラムパスの探索では、フォールスパス判定を必要なら行うものとする。フォールスパスか否かの判定は、パス上に現れる分岐条件を全てANDした条件式を構成し、その条件式が、恒偽となるか否かを充足可能性判定手法にて判定すれば良い。フォールスパスと判定されたプログラムパスは、取得したサイクル情報を破棄するものとする。各出力oに対して、得られたサイクル数が全て一致するか否か判定し、一致する場合Throughputの性質を「一定」とし、そうでない場合、「非一定」とした上で、得られたサイクル数の最大公約数を求め、出力oのThroughputサイクル値とし、処理を(#)へ移行する。
【0183】
(7)上記処理を、集合を入力信号の集合Iに置換えて実施する。
【0184】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)を
図33のテーブル形式にて出力する。
図33はサイクル精度合成RTLを対象とした入出力サイクル情報の形式を示している。
【0185】
CFG内の指定変数を含む文の実行を行うノードを2つに分離する操作に関しては、以下に示す
図34のように、分離→強連結成分への分割→再結合を実施する。分離後に強連結成分が存在しない場合、常に非巡回グラフとなるため、whileループ先頭から当該代入操作までのパスや、当該代入操作から別の同一変数への代入操作までのパスの識別はグラフ上の探索で可能であり、識別したパス上に存在するクロック数の識別は、パス識別時に実施可能である。
【0186】
《入出力サイクル情報抽出処理_パスレイテンシ設定合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理s2におけるパスレイテンシ設定合成RTLを対象とした情報抽出について説明する。
【0187】
抽出すべき情報は、サイクル精度合成RTLと同じ形式の情報である。
【0188】
プログラム構造に関して、高位レベル記述をCFG(Control Flow Graph:コントロールフローグラフ)に変換した場合を考える。プログラムパスへのサイクル設定のみがなされている場合は、高位レベル記述のCFG上のループをプログラムパスに対して、始点・終点が指定され、その始点・終点間にクロックサイクル指定がなされているものとする。特に、異なる指定で対象となるCFG上のプログラムパスは共有ノードを持たないものとする。したがって、当該プログラムパスの終点直前に、指定クロックサイクル数となるようクロック境界ノードを連続に付加すれば、サイクル精度合成から得られるCFGとして取り扱い可能である。
【0189】
各出力のThroughputサイクル情報の取得については、合成スクリプト、合成ディレクティブを解釈し、サイクルが設定されているプログラムパス及び、設定サイクル数を識別し、その集合を{{s,e},n}∈Th⊆(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)を算出する。
【0190】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)を
図35及び
図36のテーブル形式にて出力する。
【0191】
《入出力サイクル情報抽出処理_内部ループPipeline合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理s2における内部ループPipeline合成RTLを対象とした情報抽出について説明する。
【0192】
抽出すべき情報は、サイクル精度合成RTLと同じ形式の情報である。
【0193】
プログラム構造に関しては、高位レベル記述をCFG(Control Flow Graph:コントロールフローグラフ)に変換した場合を考える。内部ループ記述に対してPipeline化設定のみがなされている場合は、当該ループを適切な出力間隔を持つ構造に置き換える事が出来れば、サイクル精度合成から得られるCFGとして取り扱い可能である。
【0194】
各出力のThroughputサイクル情報の取得については、合成スクリプト、合成ディレクティブを解釈し、Pipeline化指定されている内部ループを識別し、その集合をLoopとする。(#)Loop=φなら、得られたCFGに対して、サイクル精度合成RTLでの各入力・出力Throughputサイクル情報の取得処理を適用する。l∈Loopを一つとり、Loop=Loop-{l}とする。lが一つも入力や出力を持たない場合、当該ループが非決定ループの場合は、他の全入力や全出力は周期的に成り得ないため、全入力や全出力のThroughputサイクルを1として処理を終了。そうでない場合は、ループ展開可能であるため、そのループ実行回数をNumとし、Throughput=T, Latency=Lとして、T×Num+Lだけクロック境界ノードを含むサブCFGに、当該ループlを置換し、処理を(#)に移行する。
図37には変換前のPipeline化対象ループのサブCFG構造が例示され、
図38には
図37の部分CFGに対して変換を施したサブCFG構造が例示される。
【0195】
各入力・出力のThroughputサイクル情報の取得については、lが入力や出力を伴う場合、lから構成されるPipeline回路を全体回路として、Pipeline合成RTLを対象とした情報抽出を実施する。得られた入出力サイクル情報から、各入力・出力に対して、第一情報のみを取得する。Latencyサイクルが複数存在する場合や、Throughputサイクルを超える場合は、夫々をそのサイクル数%Throughputサイクル数の値に変更し、得られたサイクルにて出力を行う。そして、全体としてThroughputサイクルからなるループ構造へと変換し、処理を(#)に移行する。
図39にはパイプライン動作を対象とした、入出力サイクルの修正例が例示される。
図40にはパイプライン化対象ループの部分CFG例が示され、
図41には
図40の部分CFGに対して変換を施した例(入出力動作を含む場合)が示される。ここで、本処理にて、Latency情報は希釈されるが、今求める対象は、各入力・出力のThroughputサイクル情報であるため、このような変換を行っても問題ない。
【0196】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)を
図42のテーブルに示される出力サイクル形式及び
図43のテーブルに示される入力サイクル形式にて出力する。
【0197】
《入出力サイクル情報抽出処理_非サイクル精度合成RTLを対象とした情報抽出》
入出力サイクル情報抽出処理s2における非サイクル精度合成RTLを対象とした情報抽出について説明する。
【0198】
抽出すべき情報はサイクル精度合成RTLと同じ形式の情報である。
【0199】
プログラム構造に関しては、高位レベル記述をCFG(Control Flow Graph:コントロールフローグラフ)に変換した場合を考える。内部ループであって、Pipeline合成指定が成されているループ内のプログラムパスには、パスレイテンシ設定が成されていない事を前提とする。それが成されている場合は、当該内部ループ内の実行ブロック内にあるパスの中で最大サイクルを求め、この値以上のLatencyが設定されたPipeline合成が実行されていると解釈可能である。したがって、その前提にて一般性を失う事はない。内部レベル記述のプログラムパスへのサイクル設定がなされている箇所、及び内部ループであってPipeline化設定がなされている箇所を、夫々パスレイテンシ設定合成RTLでのCFG変換処理と内部ループPipeline合成RTLでのCFG変換処理を施せば、サイクル精度合成から得られるCFGとして取り扱い可能である。
【0200】
各出力のThroughputサイクル情報の取得については、パスレイテンシ合成RTLに対するCFG変換処理を実施する。得られたCFGに対して、内部ループPipeline合成RTLに対するCFG変換処理を実施する。得られたCFGに対して、サイクル精度合成RTLでの各入力・出力Throughputサイクル情報の取得処理を適用する。
【0201】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)を
図44の入出力サイクル情報を示すテーブル形式にて出力する。
【0202】
《入出力サイクル情報抽出処理_高位レベル記述を対象とした情報抽》
入出力サイクル情報抽出処理s2における高位レベル記述を対象とした情報抽について説明する。
【0203】
抽出すべき情報はサイクル精度合成RTLと同じ形式の情報である。
【0204】
各出力のThroughputサイクル情報の取得については、合成スクリプトや合成ディレクティブを変更し、サイクル精度合成を実施する内容に修正し、サイクル精度合成RTLを対象とした入力・出力Throughputサイクル情報抽出処理をそのまま実施すれば良い。
【0205】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)を
図45及び
図46のテーブル形式にて出力する。
【0206】
《入出力サイクル情報抽出処理_全体的な処理フロー》
図47には入出力サイクル情報抽出処理s2の全体的な処理フローが例示される。各ステップの処理内容は以下の通りである。
【0207】
s21では、高位レベル記述、及び動作合成スクリプトを読み込み、合成コマンド及び合成ディレクティブを識別し、識別結果を合成制約情報として格納し、変数flgを0に初期化し、処理をs22へ移行する。
【0208】
s22は、合成制約情報を読み込み、合成指定が記述全体に対するPipeline化指定であるか否か判定する。そうである場合は、処理をs23へ、そうでない場合は処理をs24へ移行する。
【0209】
s23は、各入力・出力変数を対象とした、別途
図48で定義された「Pipeline合成RTLを対象とした情報抽出」を実行し、スループット・レイテンシサイクル情報の抽出を実施する。その後、処理をs32へ移行する。
【0210】
s24では、高位レベル記述のクロック境界ノードを伴うCFGへの変換処理を実施し、当該CFGを格納し、処理をs25へ移行する。ここで、クロック境界ノードを伴うCFGの定義、及び高位レベル記述からの当該CFGへの変換手法に関しては、特許第3909073号に詳細な記載がある。
【0211】
s25では、合成制約情報を読み込み、合成指定に高位レベル記述のプログラムパスへのサイクル設定が含まれるか否かを判定する。含まれる場合、処理をs26へ移行し、そうでない場合、処理をs28へ移行する。
【0212】
s26においては、 プログラムパスへのサイクル設定情報に基づき、別途
図49で定義された「パスレイテンシ合成RTLを対象としたCFG変換」を実行し、変換後のCFGを格納し、処理をs27へ移行する。
【0213】
s27においては、変数flgに1を代入し、処理をs28へ移行する。
【0214】
s28では、合成制約情報を読み込み、合成指定に高位レベル記述内の内部ループへのPipeline化指定があるか否か判定する。含まれる場合は、処理をs29へ移行し、そうでない場合は、処理をs31へ移行する。
【0215】
s29では、内部ループへのPipeline化指定に基づき、別途
図50で定義された「内部ループPipeline合成RTLを対象としたCFG変換」を実行し、変換後のCFGを格納し、処理をs30へ移行する。
【0216】
s30においては、変数flgへ1を代入し、処理をs31へ移行する。
【0217】
s31は、別途
図51で定義された「サイクル精度合成RTLを対象とした情報抽出手段」を実行し、その後に処理がs32へ移行される。
【0218】
s32では、合成スクリプトや合成ディレクティブを変更し、サイクル精度合成を実施する内容に修正し、処理をs33へ移行スル。この修正は、Pipeline化指定やプログラムパスへのサイクル指定を削除するのみで実現可能である。
【0219】
s33では、別途定義された「サイクル精度合成RTLを対象とした情報抽出手段」を実行し、処理をs34へ移行する。
【0220】
s34では、変数flgが1か否か判定し、1の場合、処理をs35へ、1でない場合s38へ移行する。
【0221】
s35では、高位レベル記述の各入力・出力スループットが一定で、RTLの各入力・出力スループットが一定であり、且つその比が一定か否か判定する。一定の場合、処理をs36へ、そうでない場合、S37へ移行する。
【0222】
s36では、入出力スループット比一定RTLとして識別し、処理をs38へ移行する。
【0223】
s37では、入出力スループット比非一定RTLとして識別し、処理をs38へ移行する。
【0224】
s38においては、RTL構造の種別であるPipeline合成RTL、パスレイテンシ設定合成RTL、内部ループPipeline合成RTL、非サイクル精度合成RTL、サイクル精度合成RTL、入力高位レベル記述の回路種別情報、Pipeline合成RTL、及び入力高位レベル記述の場合は、各入力・出力の信号名、各入力・出力の出現するステージ数、各入力・出力のスループット・レイテンシサイクル数を出力する。それ以外の場合は、各入力・出力の信号名、各入力・出力のスループットサイクル数と性質(一定か否か) 、全出力・全入力共通のスループットサイクル数と性質(一定か否か)を入出力サイクル情報として、入出力サイクル情報を出力する。
【0225】
《入出力サイクル情報抽出処理_
図47のs23の詳細フロー》
図48には
図47におけるs23の「Pipeline合成RTLを対象とした情報抽出」についての詳細フローが例示される。その各ステップの処理内容は以下の通りである。
【0226】
s32_1では、変数flgに0を代入し、処理をs32_2へ移行する。
【0227】
s32_2では、合成制約情報を読み込み、Pipeline回路全体でのスループット・レイテンシサイクル数、及び入力・出力信号名を取得し、出力信号の集合をO、入力信号の集合をIとし、処理をs23_3へ移行する。
【0228】
s23_3においては、集合Vに集合Oを代入し、処理をs23_4へ移行する。
【0229】
s23_4では、集合Vが空であるか否か判定し、空の場合は処理をs23_15へ、空でない場合は、s23_5へ移行する。
【0230】
s23_5では、v∈Vを一つ選択し、V=V-{v}とし、処理をs23_6へ移行する。
【0231】
s23_6では、vが配置されているPipeline内のステージ数の情報を取得し、処理をs23_7へ移行する。
【0232】
s23_7においては、vは1つのステージにのみに割当てられているか否か判定し、その場合は、処理をs23_8へ、そうでない場合は、処理をs23_9へ移行する。
【0233】
s23_8では、Pipeline回路全体でのスループットサイクル数をvのスループットサイクル数とし、vが割当てられたステージのサイクル数をvのレイテンシサイクル数として識別し、これとvの信号名、及び出現回数1をサイクル情報として識別し、処理をs23_4へ移行する。
【0234】
s23_9では、vが現れるステージの総数を識別し、処理をs23_10へ移行する。
【0235】
s23_10では、Pipeline回路全体でのスループットサイクル数をvの第一のスループットサイクル数とし、vが割当てられた全ステージのサイクル数の組を、vの第一のレイテンシサイクル数として識別し、処理をs23_11へ移行する。
【0236】
s23_11においては、ceil(Pipeline回路全体でのレイテンシサイクル数/Pipeline回路全体でのスループットサイクル数)を算出し、この値をNum(v)とし、処理をs23_12へ移行する。
【0237】
s23_12では、Num(v)の値分Pipelineを展開し(p.43の例参照)、vの出現間隔の最小値を求め、この最小値をvの第2のスループットサイクル数として識別し、処理をs23_13へ移行する。
【0238】
s23_13では、第1のスループットサイクル数の値の組の成す最大公約数を、vの第二のレイテンシサイクル数として識別し、処理をs23_14へ移行する。
【0239】
s23_14では、vの信号名、出力oが現れるステージ数、及び、第一と第二のスループットサイクル情報を、サイクル情報として識別し、処理をs23_4へ移行する。
【0240】
s23_15においては、変数flgが0か否か判定し、0なら処理をs23_16へ、0でないならs23_18へ移行する。
【0241】
s23_16では、これまでに識別したサイクル情報を、出力サイクル情報として再識別し、処理をs23_17へ移行する。
【0242】
s23_17では、変数flgに1を代入し、集合Vに集合Iを代入し、処理をs23_4へ移行する。
【0243】
s23_18においては、これまでに識別したサイクル情報を、入力サイクル情報として再識別し、処理をs23_19へ移行する。
【0244】
s23_19でハ、入力サイクル情報と出力サイクル情報からなる情報を、入出力サイクル情報として再識別し、処理を終了スル。
【0245】
《入出力サイクル情報抽出処理_
図47のs26の詳細フロー》
図49には
図47におけるs26の「パスレイテンシ設定合成RTLを対象としたCFG変換」の詳細な処理フローが例示される。その各ステップの処理内容は以下の通りである。
【0246】
s26_1では、CFGと合成制約情報を読み込み、サイクルが設定されているプログラムパスの始点・終点、及び設定サイクル数を識別し、その集合を{{s,e},n}∈Th⊆(S×E)×Nとし、処理をs26_2に移行する。ここで、Sはプログラムパスの始点の集合、Eはプログラムパスの終点の集合、Nは設定サイクル数の集合であり、{{s,e},n}は始点s、終点eのプログラムパス集合とそれに設定されたサイクル数の組であるとする。
【0247】
s26_2では、Thが空集合か否か判断し、空集合の場合、処理を終了し、そうでない場合、処理をs26_3へ移行する。
【0248】
s26_3では、{{s,e},n}∈Thを一つ選択し、Th=Th-{{s,e},n}とし、処理をs26_4へ移行する。
【0249】
s26_4においては、CFG上の始点s・終点eとなるパス集合を識別し、その集合をPとし、処理をs26_5へ移行する。
【0250】
s26_5では、パス集合Pが空か否か判断し、空集合の場合、処理をs26_6へ移行し、そうでない場合、処理をs26_7へ移行する。
【0251】
s26_6においては、得られた修正サイクル数の中で最小のサイクル数分のクロック境界ノードを終点eの直前に挿入する。夫々残りのサイクルは、パスの合流点を識別しつつ、共有パスの場合は、残りのサイクルの中で最小のサイクル数分のクロック境界ノードを当該合流点の直前に配置するといった具合に、順次パスを終点から遡りながらクロック境界ノードを挿入する。このようにして、CFGを修正し、処理をs26_2へ移行する。
【0252】
s26_7では、p∈Pを一つとり、P=P-{p}とし、処理をs26_8へ移行する。
【0253】
s26_8では、プログラムパスp上のクロック境界ノードの数を取得し、これをn(p)として、n-n(p)を算出し、プログラムパスpとn-n(p)を対として識別し、処理をs26_5へ移行する。
【0254】
《入出力サイクル情報抽出処理_
図47のs29の詳細フロー》
図50には
図47におけるs29の「内部ループPipeline合成RTLを対象としたCFG変換」の詳細な処理フローが例示される。その各ステップの処理内容は以下の通りである。
【0255】
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の組であるとする。
【0256】
s28_2では、Loop×(T×L) が空集合か否か判定し、空集合の場合、処理を終了し、そうでない場合、処理をs28_3へ移行する。
【0257】
s28_3では、{l,{th,la}}∈ThLaを一つ選択し、ThLa= ThLa-{l,{th,la}}とし、処理をs28_4へ移行する。
【0258】
s28_4では、内部ループlが出力動作を含むか判定し、含む場合は、処理をs28_7へ移行する。含まない場合は、処理をs28_5へ移行する。
【0259】
s28_5においては、内部ループlがループ展開可能か判定し、ループ展開可能な場合は、処理をs28_13へ、そうでない場合は、処理をs28_6へ移行する。
【0260】
s28_6では、全出力のThroughputサイクル数を1として識別し、入出力サイクル情報に格納後、処理を終了する。
【0261】
s28_7では、lから構成されるPipeline回路を全体回路として識別し、その回路をllとし、処理をs28_8へ移行する。
【0262】
s28_8では、llに対して、「Pipeline合成RTLを対象とした情報抽出」を実施し、入出力サイクル情報Kを取得し、処理をs28_9へ移行する。ここで、llに含まれる出力信号の集合をO、入力信号の集合をIとし、処理をs28_9へ移行する。
【0263】
s28_9では、入出力の集合O∪Iが空集合か判定し、空集合の場合は、処理をs28_12へ、そうでない場合は、処理をs28_10へ移行する。
【0264】
s28_10では、v∈O∪Iを一つ選択し、O∪I=O∪I-{v}とし、処理をs28_11へ移行する。
【0265】
s28_11では、vに対して、入出力サイクル情報Kの中で、第一情報のみを取得し、対応するLatencyサイクルでThroughputサイクルを超える場合は、入出力サイクル情報Kの該当箇所をLatencyサイクル数%Throughputサイクル数の値に変更し、処理をs28_9へ移行する。
【0266】
s28_12においては、各出力が入出力サイクル情報KのThroughput/Latencyサイクル間隔で出力を行うループ構造のサブCFGを構成し、ループlに対応するサブCFGを、新たに構成したサブCFGに置換し、処理をs28_2へ移行する。
【0267】
s28_13では、内部ループlのループ実行回数を識別し、その値をNumとし、処理をs28_14へ移行する。
【0268】
s28_14では、th×Num+laを算出し、その値の数のクロック境界ノードを含むサブCFGを構成し、ループlに対応するサブCFGを、新たに構成したサブCFGに置換し、処理をs28_2へ移行する。
【0269】
《入出力サイクル情報抽出処理_
図47のs31に係る詳細フロー》
図47のs31におけるサイクル精度合成RTLを対象とした情報抽出の詳細フローを説明する前に、
図51に例示されるクロック数取得処理について説明する。クロック数取得処理は、プログラムパス集合が与えられた場合に、各プログラムパス内に含まれるクロック数を識別するための処理である。クロック数取得処理の各ステップの内容は以下の通りである。
【0270】
s291_1では、R=P∪Qを求め、処理をs291_2へ移行する。
【0271】
s291_2では、集合Rが空か否か判定し、空の場合は、処理をs291_17へ、空でない場合は、処理をs291_3へ移行する。
【0272】
s291_3では、r∈Rを一つ選択し、R=R-{r}とし、処理をs291_4へ移行する。
【0273】
s291_4では、パスrの実行条件Cond(r)を識別し、処理をs291_5へ移行する。
【0274】
s291_5では、Cond(r)が充足可能か判定し、充足可能なら処理をs291_6へ移行し、そうでなければs291_2へ移行する。
【0275】
s291_6においては、パスr上のクロック境界ノード数N(r)を識別し、N(r)=N(r)+1を算出し、この値を格納し、処理をs291_2へ移行する。
【0276】
s291_7では、各パスrのサイクル数N(r)を戻り値として返し、処理を終了する。
【0277】
図52には
図47のs31に係るサイクル精度合成RTLを対象とした情報抽出処理の詳細フローが例示される。各ステップの処理内容は次の通りである。
【0278】
s29_1では、CFGを読み込み、出力の集合をO、入力の集合をIとし、処理をs29_2へ移行する。
【0279】
s29_2では、CFG上のループでループ展開可能なループを全て展開し、処理をs29_3へ移行する。
【0280】
s29_3では、変数flgを0に初期化し、集合変数Vに集合Oを代入し、処理をs29\4へ移行する。
【0281】
s29_4では、集合Vが空か否か判定し、空の場合、処理をs29_21へ移行し、そうでない場合、処理をs29_5へ移行する。
【0282】
s29_5では、v∈Vを一つ選択し、V=V-{v}とし、処理をs29_6へ移行する。
【0283】
s29_6においては、vを含むノードの出力枝の集合をWとし、Wに含まれるノードを2つに分離する事でCFGを更新し、処理をs29_7へ移行する。
【0284】
s29_7では、CFGを有向グラフとして扱い、強連結成分への分解を実施し、処理をs29_8へ移行する。
【0285】
s29_8では、強連結成分が存在するか否か判定し、存在した場合、処理をs29_9へ移行し、存在しない場合、処理をs29_10へ移行する。
【0286】
s29_9では、vのThroughputサイクルを非定数と識別し、CFGにて集合Wに含まれる枝を再接続してCFGを更新し、処理をs29_4へ移行する。
【0287】
s29_10においては、CFGにて集合Wに含まれるノードを再接続する事でCFGを更新し、処理をs29_11へ移行する。
【0288】
s29_11では、無限ループ先頭からvに至るプログラムパスの集合Rを識別し、処理をs29_12へ移行する。
【0289】
s29_12では、パス集合Rを対象として定義済み処理「クロック数取得処理」を実施し、各パスr∈R上のクロック数N(r)を取得し、処理をs29_13へ移行する。
【0290】
s29_13では、各r∈Rに対して求めたN(r)が全て一致するか否か判定し、一致する場合、処理をs29_14へ移行し、一致しない場合、s29_15へ移行する。
【0291】
s29_14では、vのThroughputの性質を「一定」とし、処理をs29_16へ移行する。
【0292】
s29_15では、vのThroughputの性質を「非一定」とし、処理をs29_16へ移行する。
【0293】
s29_16においては、vからvに至るプログラムパスの集合Rを識別し、処理をs29_17へ移行する。
【0294】
s29_17では、パス集合Rを対象として定義済み処理「クロック数取得処理」を実施し、各パスr∈R上のクロック数N(r)を取得し、処理をs29_18へ移行する。
【0295】
s29_18では、各r∈Rに対して求めたN(r)が全て一致するか否か判定し、一致する場合、処理をs29_19へ移行し、一致しない場合、s29_20へ移行する。
【0296】
s29_19では、vのThroughputの性質を「一定」とし、処理をs29_21へ移行する。
【0297】
s29_20では、vのThroughputの性質を「非一定」とし、処理をs29_21へ移行する。
【0298】
s29_21では、各r∈Rに対して求めたN(r)の最大公約数をvのThroughputサイクル数として識別し、処理をs29_4へ移行する。ここで、N(r)に「非定数」が含まれる場合、vのThroughputサイクル数を1とする。
【0299】
s29_22では、 全てのvのThroughputサイクル数の性質が「一定」かつThroughputサイクル数が同一か判定し、そうなる場合、処理をs29_23へ移行し、そうでない場合、処理をs29_24へ移行する。
【0300】
s29_23では、共通のThroughputサイクルの性質を「一定」とし、Throughputサイクル数を同一値として識別し、処理をs29_25へ移行する。
【0301】
s29_24では、共通のThroughputサイクルの性質を「非一定」とし、v∈Vに対して求めたThroughputサイクルの最大公約数を、共通のThroughputサイクルとして識別し、処理をs29_25へ移行する。
【0302】
s29_25では、変数flgが0か否か判定し、0の場合、処理をs29_26へ移行し、0以外の場合、s29_28へ移行する。
【0303】
s29_26においては、これまでに識別した情報を出力サイクル情報として再識別し、処理をs29_27へ移行する。
【0304】
s29_27では、変数flgに1を代入し、集合変数Vに集合Iを代入し、集合Vに対応する情報を破棄し、処理をs29_4へ移行する。
【0305】
s29_28では、これまでに識別した情報を入力サイクル情報として再識別し、処理を終了する。
【0306】
《対応FF抽出処理_処理概要》
対応FF抽出処理s3について概要を説明する。
【0307】
対応FF抽出処理s3は、高位レベル記述、合成結果RTL、変数依存関係情報、状態遷移表、及び入出力サイクル情報を読み込み、高位レベル記述内の変数と合成結果RTL内のFFの対応関係を解析する処理である。ここで、合成結果RTLにてフィードバックループを伴うFFに対応付けられる可能性のない変数(以下、ループなし変数)に関しては、一対一に対応するFFが各変数に存在するか否かを解析し、存在した場合、その対応関係をループなし変数一対一対応関係情報に格納する。合成結果RTLにてフィードバックループを伴うFFに対応付けられる可能性がある変数(以下、ループあり変数)に関しては、先ず一対一に対応するFFが各変数に存在するか否かを解析し、存在した場合、その対応関係をループあり変数一対一対応関係情報に格納。一対一に対応するFFが存在しなかった変数が残っていれば、状態遷移表のFFへの代入条件に着目して、条件付きで対応付けられるFFが存在するか否かを解析し、存在した場合、その対応関係をループあり変数非一対一対応関係情報に格納する。
【0308】
高位レベル記述内の変数と合成結果RTL内のFFの対応関係取得では、合成結果RTLの分類に従って処理を切り替える。ここで、上記分類は、サイクル精度合成RTL、Pipeline合成RTL、上記以外のRTLである。上記以外のRTLとしては、入出力スループット比一定RTL、入出力スループット比非一定RTLがある。上記の場合に対して、「高位レベル記述の変数とRTLのFFの一対一対応関係」、「高位レベル記述の変数とRTLのFFの条件付き対応関」、及び「動作合成にて、変数のリソース共有が行われた場合の、変数・FFの対応関係」のそれぞれを既存手法に帰着する事で取得することが可能である。
【0309】
《対応FF抽出処理_サイクル精度合成RTL》
サイクル精度合成RTLについての対応FF抽出処理s3について説明する。
【0310】
高位レベル記述の変数とRTLのFFの一対一対応関係に関しては、高位レベル記述とRTLの双方に対して、何サイクルかランダムSimを実施し、ランダムSim結果で得られた値とサイクルの組から成る系列が一致するものを一対一対応関係候補とする。候補となった高位レベル記述内の変数をFFの出力と見做し、当該変数と対応候補となった合成結果RTL記述内のFFの出力とが任意サイクルで常に一致するか否かを検証する問題に帰着する事で、既存のフリップ・フロップ内で等価な信号出力系列を持つFFの組を、帰納的不変量として抽出する手法に帰着可能である。したがって、処理の詳細は割愛し、以下この操作を「フリップ・フロップ変数・FF対応関係取得処理」と呼ぶ。
【0311】
既存手法としては、文献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一対一対応関係を、高位レベル記述内の変数の種別である、ループあり変数とループなし変数に分類する事で、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を出力する。
【0312】
また、文献Michael Case, Alan Mishchenko, and Robert Brayton, "Cut-Based Inductive Invariant Computation," In Proc. of IWLS, pp.253-258, 2008.の3. Computing inductive invariantsにて開示されている、帰納的不変量抽出手法に帰着可能である。この文献では、フリップ・フロップ内のゲート間の結線群にカットを挿入し、カット上に現れたリテラルからなる最小項が常に1となるか否かの判定手法が開示されている。
【0313】
一方、本抽出部の入力の1つである状態遷移表には、RTL記述内の各レジスタへの代入動作の実行条件が、現状態、状態遷移条件、実行条件の組で記述されておいる。後者2つは論理式で記述されており、現状態も状態変数を用いて論理式で表現可能である。夫々の論理式の集合をX,Y,Zとし、FFの集合をFとして、{{x,y,z},f}∈PredFF⊆(X×Y×Z)×Fを、FF変数fへの代入実行条件がx∧y∧zである3つの論理式とFF変数の組であるとする。
【0314】
高位レベル記述内のループあり変数の集合をVarとする。
【0315】
{{x,y,z},f}∈PredFFのリテラルx,y,zからなる最小項({M1, …, M8}と記載)と、v∈Varに対して、を構成し、¬(Mi∧(v==f))=¬Mi∨(v!=f)なる論理式を構成する。
【0316】
これら論理式を、上記文献でのカットから構成した最小項と見做して、上記文献記載の帰納的不変量抽出手法を適用すれば、Mi∧(v==f)の形式で記述された論理の中で、帰納的不変量となるものが抽出可能となる。
【0317】
各v∈Varに対して、帰納的不変量として抽出された論理式を全て列挙する。Ex.{Pred1∧(v==f1), Pred2∧(v==f2), …, Predn∧(v==fn)}が得られたとする。
【0318】
当該論理式の集合から、FFへの代入条件を構成する3つのリテラルからなる最小項を抽出する。例えば、Ex.{Pred1, Pred2, …, Predn}、となる。
【0319】
それら最小項の論理和が常真となる場合、変数vと最小項を条件とするFFとの対応関係を抽出可能である。例えば、Ex. Pred1∨Pred2∨…∨Predn==1となった場合、変数とFFの条件付対応関係として、v=(Pred1∧f1)∨(Pred2∧f2)∨…∨(Predn∧fn)を得る事ができる。
【0320】
また、また別の方法がある。即ち、ランダム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.」の手法に従い、帰納的不変量となっているか否かを検証する。
【0321】
ここで、得られた帰納的不変量からの条件付き変数・FF対応関係の抽出手法は、先に示した手法と同じである。
【0322】
《対応FF抽出処理_パイプライン合成RTL》
パイプライン合成RTLについての対応FF抽出処理s3について説明する。
【0323】
この場合、高位レベル記述の変数とRTLのFFの一対一対応関係に関し、一般にランダムSimを用いた変数・FF対応関係の取得が困難である。理由は、入力・出力サイクルが高位レベル記述と合成結果RTLで異なるからである。但し、入力・出力での信号変化サイクル間隔の違いは、一般に一定の比率を持つ違いとなる。
【0324】
そこで、本発明者による先の出願である特開2009−230451号公報で開示されている等価検証技術を用いて変数・FFの一対一対応関係候補とサイクルの違いを取得する手法について述べる。
【0325】
特開2009−230451号公報には、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述と合成結果RTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法が開示されている。従って、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、同合特許公開公報にて開示されている手法を適用し、値の変化系列が一致する変数とFFの組を抽出し、これを一対一対応関係候補として抽出すれば良い。また、対応付けられた値の変化系列での信号変化サイクル間隔の違いが一定の同一比率となるか否か判定し、一定となっていれば、その同一比率を格納する。候補全てで、信号変化サイクル間隔の比率が一定であり、その比率が全ての対応関係で同じである場合、この一対一対応関係候補が実際に、対応関係となっているかは、後述する入出力比一定RTLを対象とした証明手続きを行えば良い。
【0326】
具体的には、一対一対応関係候補の高位レベル記述の各変数と合成結果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一対一対応関係を、高位レベル記述内の変数の種別である、ループあり変数とループなし変数に分類する事で、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を出力する。
【0327】
高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開2009−230451号公報にて開示されている手法を適用し、状態遷移表から抽出したFF代入条件を構成する3つの論理式をリテラルと見做して構成した最小項の値に着目する。信号値変化系列の中で、最小項の値が1となるところで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出する。本最小項をPredと記載した場合、Pred∧(v==f)として表現される(複数の)命題論理を帰納的不変量候補として先ず抽出する。
【0328】
一対一対応関係候補の抽出同様、対応付けられた値の変化系列での信号変化サイクル間隔の違いが一定の同一比率となるか否か判定し、一定となっていれば、その同一比率を格納する。候補全てで、信号変化サイクル間隔の比率が一定であり、その比率が全ての対応関係で同じである場合、後述する入出力比一定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を対象とした証明手続きを行えば良い。
【0329】
《対応FF抽出処理_入出力スループット比一定RTL》
上記以外のRTLである入出力スループット比一定RTLについての対応FF抽出処理s3について説明する。
【0330】
この場合、高位レベル記述の変数とRTLのFFの一対一対応関係に関し、一般にランダムSimを用いた変数・FF対応関係の取得が困難である。理由は、入力・出力サイクルが高位レベル記述と合成結果RTLで異なるからである。そこで、同じく、特開2009−230451号公報に開示されている手法を用いて変数・FFの一対一対応関係候補を取得する手法を述べる。
【0331】
特開2009−230451号公報では、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述と合成結果RTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法が開示されている。従って、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開2009-230451にて開示されている手法を適用し、値の変化系列が一致する変数とFFの組を抽出し、これを一対一対応関係候補として抽出すれば良い。
【0332】
この一対一対応関係候補が実際に、対応関係となっているかは、一対一対応関係候補の高位レベル記述の各変数と合成結果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.」の手法に帰着する事で、証明可能である。
【0333】
また、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開2009−230451号公報にて開示されている手法を適用し、状態遷移表から抽出したFF代入条件を構成する3つの論理式をリテラルと見做して構成した最小項の値に着目する。着目した信号値変化系列の中で、最小項の値が1となるところで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出し、本最小項をPredと記載した場合、Pred∧(v==f)として表現される(複数の)命題論理を帰納的不変量候補として先ず抽出する。一対一対応関係候補の抽出同様、対応付けられた値の変化系列での信号変化サイクル間隔の違いが一定の同一比率となるか否か判定し、一定となっていれば、その同一比率を格納する。
【0334】
候補全てで、信号変化サイクル間隔の比率が一定であり、その比率が全ての対応関係で同じである場合、この一対一対応関係候補が実際に、対応関係となっているかは、一対一対応関係候補の高位レベル記述の各変数と合成結果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)に修正する事で、証明可能である。
【0335】
《対応FF抽出処理_入出力スループット比非一定RTL》
上記以外のRTLである入出力スループット比非一定RTLについての対応FF抽出処理s3について説明する。
【0336】
この場合、高位レベル記述の変数とRTLのFFの一対一対応関係に関し、一般にランダムSimを用いた変数・FF対応関係の取得が困難である。理由は、入力・出力サイクルが高位レベル記述と合成結果RTLで異なるからである。そこで、特開2009−230451号公報にて開示されている手法を用いて変数・FFの一対一対応関係候補を取得する手法を述べる。
【0337】
特開2009−230451号公報では、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述と合成結果RTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法が開示されている。
【0338】
従って、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開2009−230451号公報にて開示されている手法を適用し、値の変化系列が一致する変数とFFの組を抽出し、これを一対一対応関係候補として抽出すれば良い。
【0339】
この一対一対応関係候補が実際に、対応関係となっているかは、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」の手法に帰着する事で、証明可能な場合、証明可能である。扱えない場合もあるが、その場合は、例え真に帰納的不変量であっても帰納的不変量とは判定されないが、帰納的不変量でないものを帰納的不変量としては判定しないので、問題とはならない。得られる帰納的不変量の数が実際の総数以下となるだけである。
【0340】
上記文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」では、入力信号の値変化系列が同一という前提の下、出力信号の値変化系列が同一か否かをモデル検査法の安全性検証問題に帰着する事で、証明する手法が開示されている。
【0341】
具体的には、等価性判定問題を、高位レベル記述と合成結果RTLを入力・出力動作を観測可能な動作とし、それ以外を内部動作としたラベル付き遷移システムと見做し、同一入力や同一出力では同期するものとし、内部動作は自由に動作可能とする。これによって得られた2つのラベル付き遷移システムの積を構成し、この積上での出力動作を持つ動作が常に同じ値出力を行うか否かの検証問題に帰着している。特に、このラベル付き遷移システムの積がデッドロックする場合、判定不能となる。従って、上記ランダムSimで得られた一対一対応関係候補となる変数とFFの組を、同一の出力とみなして、当該文献の手法を適用すれば、任意サイクルで一対一の対応関係となっているか否かの検証が可能である。
【0342】
得られた変数・FF一対一対応関係を、高位レベル記述内の変数の種別である、ループあり変数とループなし変数に分類する事で、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を出力する。
【0343】
また、高位レベル記述の各変数と合成結果RTLの各FFを出力と見做し、特開2009−230451号公報にて開示されている手法を適用し、状態遷移表から抽出したFF代入条件を構成する3つの論理式をリテラルと見做して構成した最小項の値に着目し、信号値変化系列の中で、最小項の値が1となるところで値一致が発生するv∈Var、f∈Fと当該最小項の組を抽出する。本最小項をPredと記載した場合、Pred∧(v==f)として表現される(複数の)命題論理を帰納的不変量候補として先ず抽出する。
【0344】
この帰納的不変量候補が実際に、帰納的不変量となっているかは、文献「Daniel Kroening and Edmund Clarke, "Checking Consistency of C and Verilog using Predicate Abstraction and Induction," In Proc. of ICCAD, pp. 66-72, 2004.」の手法に帰着する事で、証明可能である。扱えない場合もあるが、その場合は、例え真に帰納的不変量であっても帰納的不変量とは判定されないが、帰納的不変量でないものを帰納的不変量としては判定しないので、問題とはならない。得られる帰納的不変量の数が実際の総数以下となるだけである。
【0345】
実際、上記ランダム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)が常に成立する事を証明すれば、帰納的不変量候補が、任意サイクルで帰納的不変量となっているか否かの検証が可能となる。
【0346】
《対応FF抽出処理_全体的な処理フロー》
図53には対応FF抽出処理s3の全体的な処理フローが例示される。各ステップの処理内容は以下の通りである。
【0347】
s3_1では、入出力サイクル情報と変数依存関係情報を読み込み、ループあり変数の集合をPとするとし、処理をs3_2へ移行する。
【0348】
s3_2では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがサイクル精度合成RTLか否か判定し、その場合、処理をs3_5へ移行する。そうでない場合、s3_3へ移行する。
【0349】
s3_3では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがPipeline合成RTLか否か判定する。そうである場合、処理をs3_6へ移行し、そうでない場合、s3_4へ移行する。
【0350】
s3_4では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLが入出力スループット比一定RTLか否か判定し、そうである場合、処理をs3_7へ移行し、そうでない場合、s3_8へ移行する。
【0351】
s3_5では、変数flgにCAを代入し、処理をs3_9へ移行する。
【0352】
s3_6では、変数flgにPIPEを代入し、処理をs3_10へ移行する。
【0353】
s3_7では、変数flgにConstを代入し、処理をs3_11へ移行する。
【0354】
s3_8では、変数flgにOTHERを代入し、処理をs3_12へ移行する。
【0355】
s3_9においては、「フリップ・フロップ変数・FF対応関係取得処理」を実施し、処理をs3_13へ移行する。
【0356】
s3_10では、「Pipeline合成RTLを対象とした一対一対応関係情報の抽出」を実施し、処理をs3_13へ移行する。
【0357】
s3_11では、「入出力スループット比一定RTLを対象とした一対一対応関係情報の抽出」を実施し、処理をs3_13へ移行する。
【0358】
s3_12では、「入出力スループット比非一定RTLを対象とした一対一対応関係情報の抽出」を実施し、処理をs3_13へ移行する。
【0359】
s3_13では、V={FFに一対一対応付けられた変数}とし、処理をs3_14へ移行する。
【0360】
s3_14では、「一対一対応関係情報の格納」を実施し、処理をs3_15へ移行する。
【0361】
s3_15では、P=P-Vを実施し、処理をs3_16へ移行する。
【0362】
s3_16においては、出力集合Pが空であるか否か判定し、空の場合、処理を終了し、空でない場合、処理をs3_17へ移行する。
【0363】
s3_17では、変数flgがCAに一致するか判定し、一致する場合、処理をs3_20へ移行し、一致しない場合、s3_18へ移行する。
【0364】
s3_18では、変数flgがPIPEに一致するか判定し、一致する場合、処理をs3_21へ移行し、一致しない場合、s3_19へ移行する。
【0365】
s3_19では、変数flgがConstに一致するか判定し、一致する場合、処理をs3_22へ移行し、一致しない場合、s3_23へ移行する。
【0366】
s3_20では、「サイクル精度合成RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【0367】
s3_21では、「Pipeline合成RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【0368】
s3_22においては、「入出力スループット比一定RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【0369】
s3_23では、「入出力スループット比非一定RTLを対象とした、帰納的不変量の抽出」を実施し、処理をs3_24へ移行する。
【0370】
s3_24では、「条件付き変数・FF対応関係情報の抽出・格納」を実施し、処理を終了する。
【0371】
図53の対応FF抽出処理s3における主要なステップに対する詳細な説明を加える前に、次の処理について説明する。第1には、特開2009−230451号公報にて開示されている、高位レベル記述と合成結果RTLのSimによる等価性判定手法を用いた、一対一変数・FF対応関係候補を抽出するためのランダムSim手法としての、「既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出」処理である。第2には、状態遷移表からの、「最小項構成」処理である。第3には、特開2009−230451号公報にて開示されている、高位レベル記述と合成結果RTLのSimによる等価性判定手法を用いた、条件付き変数・FF対応関係候補を抽出するためのランダムSim手法としての、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出」処理である。
【0372】
《対応FF抽出処理_既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出処理フロー》
図54には既存Simベース等価性判定手法を用いた一対一変数・FF対応候補抽出処理フローが例示される。各ステップの処理内容は以下の通りである。
【0373】
s01では、高位レベル記述を読み込み、処理をs02へ移行する。
【0374】
s02では、変数依存関係情報を読み込み、ループあり変数とループなし変数を識別し、その集合をVarとし、処理をs03へ移行する。
【0375】
s03では、集合Varが空か否か判定し、空の場合、処理をs07へ移行し、空でない場合、s04へ移行する。
【0376】
s04では、v∈Varを一つ取り、Var=Var-{v}とし、処理をs05へ移行する。
【0377】
s05では、vの値を出力するための出力変数を高位レベル記述に追加し、処理をs06へ移行する。
【0378】
s06では、vへの代入文を識別し、その直後にvから対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs03へ移行する。
【0379】
s07では、高位レベル記述の入力信号へランダム値を与えるテストベンチ生成し、処理をs08へ移行する。
【0380】
s08では、合成結果RTL記述を読み込み、記述内のFFを識別し、その集合をFとし、処理をs09へ移行する。ここで、FFの識別では、既存の論理合成技術を用いても良いし、既存の記述スタイルチェッカによる識別を行ってもよい。
【0381】
s09においては、集合Fが空か否か判定し、空の場合、処理をs014へ移行し、空でない場合、s010へ移行する。
【0382】
s010では、f∈Fを一つ取り、F=F-{f}とし、処理をs011へ移行する。
【0383】
s011では、fの値を出力するための出力変数を合成結果RTL記述に追加し、処理をs012へ移行する。
【0384】
s012では、fの値を出力するための出力変数への代入記述を合成結果RTL記述に追加し、処理をs09へ移行する。ここで、例えば、RTLがVerilog記述の場合、代入文としては、assign文を用いた代入文記述を追加すれば良い。
【0385】
s013では、特開2009−230451号公報に開示されているSimモデル生成手段適用し、Simモデルを構成後、処理をs014へ移行する。
【0386】
s014では、Simモデルを対象にランダムSimを実行し、v∈Varとf∈Fで信号変化系列が同一となる組を識別し、一対一変数・FF対応候補として格納し、処理を終了する。ここで、同一となった(v,f)の信号変化系列をサイクル情報込みで、一対一変数・FF対応候補に格納しておく。
【0387】
《対応FF抽出処理_最小構成処理フロー》
図55には最小構成処理フローが例示される。各ステップの処理内容は以下の通りである。
【0388】
s001では、状態遷移表を読み込み、処理をs002へ移行する。
【0389】
s002では、変数依存関係情報を読み込み、ループあり変数を識別し、その集合をVarとし、処理をs003へ移行する。
【0390】
s003では、集合Varが空であるか否か判定し、空の場合、処理を終了し、そうでない場合、処理をs004へ移行する。
【0391】
s004では、v∈Varを一つ取り、Var=Var-{v}とし、処理をs005へ移行する。
【0392】
s005では、vへの代入条件を構成する、現状態、遷移条件、実行条件の組からなる集合を状態遷移表から識別し、その集合をΛとし、処理をs006へ移行する。
【0393】
s006では、集合Λが空か否か判定し、空の場合、処理をs003へ移行し、空でない場合、s007へ移行する。
【0394】
s007では、λ∈Λを一つ取り、Λ=Λ-{λ}とし、処理をs008へ移行する。
【0395】
s008では、λに対して、現状態、遷移条件、実行条件を夫々リテラルと見做し、最小項を8個構成し、8個の最小項とvの組を最小項・変数対応関係情報に格納し、処理をs006へ移行する。
【0396】
《対応FF抽出処理_既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出フロー》
図56には既存Simベース等価性判定手法を用いた条件付き変数・FF対応候補抽出処理のフローが例示される。各ステップの処理内容は以下の通りである。
【0397】
s0001では、高位レベル記述を読み込み、処理をs0002へ移行する。
【0398】
s0002では、変数依存関係情報を読み込み、ループあり変数とループなし変数を識別し、その集合をVar1,Var2とし、処理をs0003へ移行する。
【0399】
s0003では、集合Var1が空か否か判定し、空の場合、処理をs0007へ移行し、空でない場合、s0004へ移行する。
【0400】
s0004では、v∈Var1を一つ取り、Var1=Var1-{v}とし、処理をs0005へ移行する。
【0401】
s0005では、vの値を出力するための出力変数を高位レベル記述に追加し、処理をs0006へ移行する。
【0402】
s0006では、vへの代入文を識別し、その直後にvから対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs0003へ移行する。
【0403】
s0007では、高位レベル記述の入力信号へランダム値を与えるテストベンチ生成し、処理をs0008へ移行する。
【0404】
s0008では、合成結果RTL記述を読み込み、記述内のFFを識別し、その集合をF1,F2とし、処理をs0009へ移行する。ここで、FFの識別では、既存の論理合成技術を用いても良いし、既存の記述スタイルチェッカによる識別を行ってもよい。また、F2内のFFにて、連接記述が用いられている場合は、連接記述に従った分割を行い、得られた複数のFFをF2に追加すると伴に、分割対象となった連接記述に対応するFFはF2から削除しておくものとする。
【0405】
s0009において、集合F1が空か否か判定し、空の場合、処理をs00014へ移行し、空でない場合、s00010へ移行する。
【0406】
s00010では、f∈F1を一つ取り、F1=F1-{f}とし、処理をs00011へ移行する。
【0407】
s00011では、fの値を出力するための出力変数を合成結果RTL記述に追加し、処理をs00012へ移行する。
【0408】
s00012では、fの値を出力するための出力変数への代入記述を合成結果RTL記述に追加し、処理をs0009へ移行する。ここで、例えば、RTLがVerilog記述の場合、代入文としては、assign文を用いた代入文記述を追加すれば良い。
【0409】
s00013では、特開2009−230451号公報に開示されているSimモデル生成手段適用し、Simモデルを構成しSimモデルを対象にランダムSimを実行した後、処理をs00014へ移行する。
【0410】
s00014では、集合Var2が空か否か判定し、空の場合、処理を終了し、空でない場合、処理をs00015へ移行する。
【0411】
s00015では、v∈Var2を一つ取り、Var2=Var2-{v}とし、処理をs0016へ移行する。
【0412】
s00016では、最小項・変数対応関係情報から、vに対応する最小項を識別し、その集合をΛとし、処理をs0017へ移行する。
【0413】
s00017で、集合Λが空か否か判定し、空の場合、処理をs0014へ移行し、空でない場合、s00018へ移行する。
【0414】
s00018では、λ∈Λを一つ取り、Λ=Λ-{λ}とし、処理をs00019へ移行する。
【0415】
s00019では、集合F2が空か否か判定し、空の場合、処理をs00017へ移行し、空でない場合、s00020へ移行する。
【0416】
s00020では、 f∈F2を一つ取り、F2=F2-{f}とし、処理をs00021へ移行する。ここで、fとしては、vのBit幅以下のものを選択する。
【0417】
s00021においては、λ=1となる条件でvの信号変化系列とfの信号変化系列が一致するか否か判定し、一致する場合、処理をs00022へ移行し、一致しない場合、s00019へ移行する。
【0418】
s00022では、(λ,v,f)を条件付き変数・FF対応候補として格納し、処理をs00019へ移行する。ここで、同一となった(λ,v,f)の信号変化系列をサイクル情報込みで、条件付き変数・FF対応候補に格納しておく。
【0419】
《対応FF抽出処理_
図53におけるs3−10の詳細処理》
図57には
図53の対応FF抽出処理におけるs3−10の「Pipeline合成RTLを対象とした一対一対応関係情報の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0420】
s3_10_1では、「既存Simベース等価性判定手法を用いた一対一変数・FF対応関係候補抽出」を実施し、処理をs3_10_2へ移行する。
【0421】
s3_10_2では、一対一対応関係候補の抽出結果の集合をΓ1,Γ2とし、処理をs3_10_3に移行する。ここで、Γ1=Γ2である。
【0422】
s3_10_3では、変数iを0に初期化し、処理をs3_10_4に移行する。
【0423】
s3_10_4では、集合Γ1が空か否か判定し、空の場合、処理をs3_10_9へ移行し、空でない場合、s3_10_5へ移行する。
【0424】
s3_10_5では、γ∈Γ1を一つ取り、Γ1=Γ1-{γ}とし、処理をs3_10_6へ移行する。
【0425】
s3_10_6では、γを構成する変数とFFの信号変化系列の信号変化間隔比が一定か否か判定し、一定の場合、処理をs3_10_7へ移行し、そうでない場合、s3_10_10へ移行する。
【0426】
s3_10_7では、γを構成する変数とFFの信号変化系列の信号変化間隔の比をR[i]に代入し、処理をs3_10_8へ移行する。
【0427】
s3_10_8においては、i=i+1を実行し、処理をs3_10_4へ移行する。
【0428】
s3_10_9では、配列R[ ]に格納された正数値が全て等しいか否か判定し、等しい場合、処理をs3_10_11へ移行し、等しくない場合、s3_10_10へ移行する。
【0429】
s3_10_10では、定義済み処理である「入出力スループット比非一定RTLを対象とした一対一対応関係情報抽出」処理を実施し、処理を終了する。
【0430】
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.」の手法を適用し、処理を終了する。
【0431】
《対応FF抽出処理_
図53におけるs3−11の詳細処理》
図58には
図53の対応FF抽出処理におけるs3−11の「入出力スループット比一定RTLを対象とした一対一対応関係情報の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0432】
s3_11_1では、定義済み処理である「既存Simベース等価性判定手法を用いた一対一変数・FF対応関係候補抽出」を実施し、処理をs3_11_2へ移行する。
【0433】
s3_11_2では、一対一対応関係候補の抽出結果の集合をΓとし、処理をs3_11_3へ移行する。
【0434】
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へ移行する。
【0435】
s3_11_13では、Γの部分集合である、一対一対応関係の集合Ξを識別し、処理を終了する。
【0436】
《対応FF抽出処理_
図53におけるs3−12の詳細処理》
図59には
図53の対応FF抽出処理におけるs3−12の「入出力スループット比非一定RTLを対象とした一対一対応関係情報の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0437】
s3_12_1では、定義済み処理である「既存Simベース等価性判定手法を用いた一対一変数・FF対応関係候補抽出」を実施し、処理をs3_11_2へ移行する。
【0438】
s3_12_2では、一対一対応関係候補の抽出結果の集合をΓとし、集合Ξを空集合として初期化し、処理をs3_12_3へ移行する。
【0439】
s3_12_3では、高位レベル記述を読み込み、クロック境界記述を全て削除し、高位レベル記述を修正し、処理をs3_12_4へ移行する。
【0440】
s3_12_4では、集合Γが空か否か判定し、空の場合、処理をs3_12_10へ、空でない場合、s3_12_5へ移行する。
【0441】
s3_12_5では、γ∈Γを一つ取り、Γ=Γ-{γ}とし、処理をs3_12_6へ移行する。
【0442】
s3_12_6では、γの構成要素である変数vとFF出力ピンfを、双方出力と見做し、これらと入力動作以外の動作を内部動作と見做し、非特許文献<6>の手法を適用し、処理をs3_11_7へ移行する。
【0443】
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へ移行する。
【0444】
s3_12_8では、v==fが成立したか否か判定し、成立した場合、処理をs3_11_9へ移行し、成立しない場合、s3_12_4へ移行する。
【0445】
s3_12_9では、vとfの組を一対一対応関係の集合Ξに追加し、処理をs3_12_10へ移行する。
【0446】
s3_12_10では、Γの部分集合である、一対一対応関係の集合Ξを識別し、処理を終了する。
【0447】
《対応FF抽出処理_
図53におけるs3−14の詳細処理》
図60には
図53の対応FF抽出処理におけるs3−14の「一対一対応関係情報の格納」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0448】
s3_13_1では、一対一対応関係情報を読み込み、出力の集合をVとし、処理をs3_13_2へ移行する。
【0449】
s3_13_2では、集合Vが空であるか否か判定し、空の場合、処理を終了し、空でない場合、処理をs3_13_3へ移行する。
【0450】
s3_13_3では、v∈Vを一つとり、V=V-{v}とし、処理をs3_13_4へ移行する。
【0451】
s3_13_4では、vがループあり変数か否か判定し、そうである場合、処理をs3_13_6へ移行し、そうでない場合、s3_13_5へ移行する。
【0452】
s3_13_5では、vと対応するFFの一対一対応関係をループなし変数一対一対応関係情報に格納し、処理をs3_13_2へ移行する。
【0453】
s3_13_6では、vと対応するFFの一対一対応関係をループあり変数一対一対応関係情報に格納し、処理をs3_13_2へ移行する。
【0454】
《対応FF抽出処理_
図53におけるs3−20の詳細処理》
図61には
図53の対応FF抽出処理におけるs3−20の「サイクル精度合成RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0455】
s3_20_1では、「最小項構成」処理を実施し、処理をs3_20_2へ移行する。
【0456】
s3_20_2では、最小項・変数対応関係情報を読み込み、その情報の成す集合をΔとし、処理をs3_20_3へ移行する。
【0457】
s3_20_3では、変数依存関係情報を読み込み、ループあり変数を識別し、その集合をVarとし、処理をs3_20_4へ移行する。
【0458】
s3_20_4では、集合Δが空か否か判定し、空の場合、処理をs3_20_9へ移行し、空でない場合、s3_20_5へ移行する。
【0459】
s3_20_5では、δ∈Δを一つ取り、Δ=Δ-{δ}とし、処理をs3_20_6へ移行する。
【0460】
s3_20_6では、集合Varが空か否か判定し、空の場合、処理をs3_20_4へ移行し、空でない場合、s3_20_7へ移行する。
【0461】
s3_20_7では、v∈Varを一つ取り、Var=Var-{v}とし、処理をs3_20_8へ移行する。
【0462】
s3_20_8では、δの要素である最小項λとFF出力ピンfに対して、¬(λ∧(v==f))を構成し、集合Γに格納し、処理をs3_20_6へ移行する。
【0463】
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へ移行する。
【0464】
s3_20_10では、帰納的不変量の集合Ξを識別し、処理を終了する。ここで、∀ξ∈Ξに対して、¬ξ∈Λが常に成立する。即ち、集合Ξはλ∧(v==f)の形式で記述された命題論理の集合であり、帰納的不変量の集合となる。
【0465】
《対応FF抽出処理_
図53におけるs3−21の詳細処理》
図62には
図53の対応FF抽出処理におけるs3−21の「Pipeline合成RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0466】
s3_21_1では、「最小項構成」処理を実施し、処理をs3_21_2へ移行する。
【0467】
s3_21_2では、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応関係候補抽出」を実施し、処理をs3_21_3へ移行する。
【0468】
s3_21_3では、条件付き対応関係候補の抽出結果の集合をΓ1,Γ2とし、処理をs3_21_4に移行する。ここで、Γ1=Γ2である。
【0469】
s3_21_4では、変数iを0に初期化し、処理をs3_21_5に移行する。
【0470】
s3_21_5では、集合Γ1が空か否か判定し、空の場合、処理をs3_21_10へ移行し、空でない場合、s3_21_6へ移行する。
【0471】
s3_21_6においては、γ∈Γ1を一つ取り、Γ1=Γ1-{γ}とし、処理をs3_21_7へ移行する。
【0472】
s3_21_7では、γを構成する変数とFFの信号変化系列の信号変化間隔比が一定か否か判定し、一定の場合、処理をs3_21_7へ移行し、そうでない場合、s3_21_10へ移行する。
【0473】
s3_21_8では、γの構成要素である最小項λが1となるサイクルのみを対象とした場合の、γを構成する変数とFFの信号変化系列の信号変化間隔の比をR[i]に代入し、処理をs3_21_9へ移行する。
【0474】
s3_21_9では、i=i+1を実行し、処理をs3_21_10へ移行する。
【0475】
s3_21_10では、配列R[ ]に格納された正数値が全て等しいか否か判定し、等しい場合、処理をs3_21_11へ移行し、等しくない場合、s3_21_12へ移行する。
【0476】
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へ移行する。
【0477】
s3_21_12では、定義済み処理である「入出力スループット比非一定RTLを対象とした、帰納的不変量抽出」処理を実施し、処理をs3_21_13へ移行する。
【0478】
s3_21_13では、Γ2の部分集合である、帰納的不変量の集合Ξを識別し、処理を終了する。
【0479】
《対応FF抽出処理_
図53におけるs3−22の詳細処理》
図63には
図53の対応FF抽出処理におけるs3−22の「入出力スループット比一定RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0480】
s3_22_1では、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応関係候補抽出」を実施し、処理をs3_22_2へ移行する。
【0481】
s3_22_2では、条件付き応関係候補の抽出結果の集合をΓとし、処理をs3_22_3へ移行する。
【0482】
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へ移行する。
【0483】
s3_22_4では、Γの部分集合である、条件付き対応関係の集合Ξを識別し、処理を終了する。
【0484】
《対応FF抽出処理_
図53におけるs3−23の詳細処理》
図64には
図53の対応FF抽出処理におけるs3−23の「入出力スループット比非一定RTLを対象とした帰納的不変量の抽出」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0485】
s3_23_1では、「既存Simベース等価性判定手法を用いた条件付き変数・FF対応関係候補抽出」を実施し、処理をs3_23_2へ移行する。
【0486】
s3_23_2では、条件付き応関係候補の抽出結果の集合をΓとし、集合Ξを空集合として初期化し、処理をs3_23_3へ移行する。
【0487】
s3_23_3では、高位レベル記述を読み込み、クロック境界記述を全て削除し、高位レベル記述を修正し、処理をs3_23_4へ移行する。
【0488】
s3_23_4では、集合Γが空か否か判定し、空の場合、処理をs3_23_10へ移行し、空でない場合、s3_23_5へ移行する。
【0489】
s3_23_5では、γ∈Γを一つ取り、Γ=Γ-{γ}とし、処理をs3_23_6へ移行する。
【0490】
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へ移行する。
【0491】
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へ移行する。
【0492】
s3_23_8では、λ∧(v==f)が成立したか否か判定し、成立した場合、処理をs3_23_9へ移行し、成立しない場合、s3_23_4へ移行する。
【0493】
s3_23_9では、vとfの組を条件付き対応関係の集合Ξに追加し、処理をs3_23_10へ移行する。
【0494】
s3_23_10では、Γの部分集合である、条件付き対応関係の集合Ξを識別し、処理を終了する。
【0495】
《対応FF抽出処理_
図53におけるs3−24の詳細処理》
図65には
図53の対応FF抽出処理におけるs3−24の「条件付き変数・FF対応関係情報の抽出・格納」処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0496】
s3_24_1では、帰納的不変量情報を読み込み、その情報の成す集合をΞとし、処理をs3_24_2へ移行する。
【0497】
s3_24_2では、集合Ξに含まれるFFと出力変数の集合を識別し、それら集合をそれぞれFとVarとし、処理をs3_24_3へ移行する。
【0498】
s3_24_3では、集合Fが空か否か判定し、空の場合、処理を終了し、空でない場合、処理をs3_24_4へ移行する。
【0499】
s3_24_4では、f∈Fを一つ取り、F=F-{f}とし、処理をs3_24_5へ移行する。
【0500】
s3_24_5では、fに対応する最小項と変数の組の集合を識別し、その集合をR⊆Λ×Varとし、処理をs3_24_6へ移行する。ここで、Λは最小項のなす集合であり、Varは変数のなす集合である。
【0501】
s3_24_6では、FF fを含む帰納的不変量の式に現れる最小項を全て抽出し、それら最小項全ての論理和が恒真であるか否かを判定し、恒真である場合、処理をs3_24_7へ移行する、そうでない場合、s3_24_3へ移行する。
【0502】
s3_24_7で、FF fに対して次に示される数1の式を構成し、条件付き変数・FF対応関係情報に格納し、処理をs3_24_3へ移行する。
【0504】
《リセット伸張サイクル抽出処理》
リセット伸張サイクル抽出処理s4について詳細を説明する。
【0505】
リセット伸張サイクル抽出処理s4は、合成結果RTL、ループあり変数一対一対応関係情報、及びループあり変数非一対一対応関係情報、入出力サイクル情報を入力とし、下記処理を実施する。
【0506】
第1に、RTL記述内のループあり変数に対応付けられたFF fの成すフィードバックループが存在するか否かを解析する。フィードバックループの識別は、RTL記述を論理合成して得られるネットリストを、FFを頂点として、FF間の組合わせ論理を介した接続関係を有向辺とするグラフGを構成し、Gに対して、強連結成分への分割を行い、得られた強連結成分の集合をSCCとする事で実施する。各強連結成分がFF fを含むか否か判定する事で、本解析を実施する。
【0507】
第2に、上記解析結果で、フィードバックループが存在した場合、FF fを含むフィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数を算出する。FF fを含む強連結成分内f以外の頂点へのfからの最短パスをダイクストラ法により求め、最短パスが経由する頂点数を各頂点の距離とし、その中で最大の値をFF fを含むフィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数として識別する。この値分のサイクル数にて、各頂点に値伝播が可能となり、これがFF fを含むフィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数である事は、構成の仕方から自明である。
【0508】
第3に、それらを全てのFFに対して実行し、得られたサイクル数の中で、最大値を求める。Pipeline合成RTLでない場合、この最大値をリセットサイクル期間情報に格納する。Pipeline合成RTLの場合、この最大値とPipeline回路としてのLatencyサイクル-1の値とで、大きい方の値を、リセットサイクル期間情報に格納する。
【0509】
第4に、RTLにてフィードバックループを構成しなかった場合は、この変数の持つ対応関係情報を夫々ループなし変数一対一対応関係情報とループなし変数非一対一対応関係情報に格納し、これら変数をループあり変数一対一対応関係情報とループあり変数非一対一対応関係情報から削除する。
【0510】
図66及び
図67にはリセット伸長サイクル抽出処理の詳細が例示される。各ステップの処理内容は以下の通りである。
【0511】
s4_1では、ループあり変数一対一対応関係情報を読み込み、FFの集合を識別し、その集合をF1とし、処理をs4_2へ移行する。
【0512】
s4_2では、ループあり変数条件付き対応関係情報を読み込み、FFの集合を識別し、その集合をF2とし、処理をs4_3へ移行する。
【0513】
s4_3では、集合F, F’をF=F’=F1∪F2と初期化し、集合TをT=φと初期化し、処理をs4_4へ移行する。
【0514】
s4_4では、合成結果RTLを読み込み、処理をs4_5へ移行する。
【0515】
s4_5では、FFを頂点として、FF間の組合わせ論理やネット接続を介した接続関係を有向辺とするグラフGを構成し、処理をs4_6へ移行する。
【0516】
s4_6では、グラフGに対して、強連結成分への分割を行い、得られた強連結成分の集合をSCC1, SCC2とし、全てのs∈SCC2に対して, max_dist[s]=0と初期化し、処理をs4_7へ移行する。ここで、SCC1とSCC2は集合として等しく、SCC1=SCC2である。
【0517】
s4_7では、集合SCC1が空か否か判定し、空の場合、処理をs4_26へ移行する。空でない場合、s4_8へ移行する。
【0518】
s4_8では、s∈SCC1を一つ取り、SCC1=SCC1-{s}とし、処理をs4_9へ移行する。
【0519】
s4_9では、集合TsをTs=φ(空集合)に初期化し、処理をs4_10へ移行する。
【0520】
s4_10でjは、集合Fが空か否か判定し、空の場合、処理をs4_14へ移行する。空でない場合、s4_11へ移行する。
【0521】
s4_11では、f∈Fを一つ取り、F=F-{f}とし、処理をs4_12へ移行する。
【0522】
s4_12では、fが有向グラフsの頂点として含まれるか否か判定し、含まれる場合、処理をs4_13へ移行する。含まれない場合、s4_10へ移行する。
【0523】
s4_13では、Ts=Ts∪{f}、即ち、集合Tsにfを追加し、処理をs4_10へ移行する。
【0524】
s4_14では、集合Tsが空か否か判定し、空の場合、処理をs4_22へ移行する。空でない場合、s4_15へ移行する。
【0525】
s4_15では、t∈Tsを一つ任意に選択し、処理をs4_16へ移行する。
【0526】
s4_16では、変数iを0に初期化し、処理をs4_17へ移行する。
【0527】
s4_17では、有向グラフsの頂点の集合をSとし、処理をs4_18へ移行する。
【0528】
s4_18では、集合Sが{t}のみを含む集合となっているか否か判定し、そうなっている場合、処理をs4_22へ移行し、そうでない場合、s4_19へ移行する。
【0529】
s4_19では、tと異なる頂点s0∈Sを一つ選び、S=S-{s0}とし、処理をs4_20へ移行する。
【0530】
s4_20では、ダイクストラ法を用いて、tからs0への最短経路を求め、最短経路がs0に至るまでに経由する頂点数+1をdist[s,i]とし、処理をs4_21へ移行する。
【0531】
s4_21で、i=i+1を実行し、処理をs4_18へ移行する。
【0532】
s4_22で、dist[s,j](1≦j≦i)の最大値を求め、それをmax_dist[s]とし、処理をs4_23へ移行する。
【0533】
s4_23で、T=T∪Ts、即ち集合Tと集合Tsを集合Tに代入し、処理をs4_24へ移行する。
【0534】
s4_24で、F=F’-T、即ち、集合F’と集合Tの差集合を集合Fに代入し、処理をs4_25へ移行する。
【0535】
s4_25では、集合Fが空か否か判定し、空の場合、処理をs4_26へいこうし、空でない場合、s4_7へ移行する。
【0536】
s4_26では、s∈SCC2に対して、max_dixt[s]の最大値max_distを求め、処理をs4_27へ移行する。
【0537】
s4_27では、入出力サイクル情報を読み込み、処理をs4_28へ移行する。
【0538】
s4_28では、Pipeline合成RTLか否か判定し、その場合、処理をs4_29へ移行する。そうでない場合、s4_30へ移行する。
【0539】
s4_29で、max_distをリセットサイクル期間情報に格納し、処理をs4_32へ移行する。
【0540】
s4_30で、max_dist>レイテンシサイクル数−1の判定を行い、判定結果が真の場合、処理をs4_29へいこうし、偽の場合、s4_31へ移行する。
【0541】
s4_31では、レイテンシサイクル数-1をリセットサイクル期間情報に格納し、処理をs4_32へ移行する。
【0542】
s4_32では、ループあり変数条件対応関係情報から、集合Fに含まれるFFとの対応関係情報を識別する。それをループなし変数条件付き対応関係情報に格納するとともに、ループあり変数条件付き対応関係情報から削除し、処理をs4_28へ移行する。
【0543】
s4_33では、ループあり変数一対一対応関係情報から、集合Fに含まれるFFとの対応関係情報を識別する。それをループなし変数一対一対応関係情報に追加するとともに、ループあり変数一対一対応関係情報から削除し、処理を終了する。
【0544】
《検証スクリプト改変処理_処理概要》
検証スクリプト改変処理s5についてその概要を先ず説明する。
【0545】
検証スクリプト改変処理は、高位レベル記述、合成結果RTL、リセットサイクル期間情報、入出力サイクル情報、変数・FF対応情報、及び動作合成ツールが出力した雛形検証スクリプトを入力として、雛形スクリプトに対して、リセットサイクル期間情報、入出力サイクル情報、変数・FF対応情報の生成及び改変を実施する。ここでは、「検証スクリプトコマンド例」を対象としたスクリプト情報の生成及び改変処理を一例としてその詳細について説明する。
【0546】
検証スクリプト改変処理では、読み込んだ入出力サイクル情報の合成結果RTL構造情報から、合成結果RTLの分類を実施し、次に示す「検証スクリプトコマンド例」で対応可能なRTL構造に関して、以下のスクリプト改変処理を実施する。
第1は、入出力対応設定のスクリプト改変処理である。これは、高位レベル記述/合成結果RTL間の各入出力信号の対応関係は雛形検証スクリプトに記載されていることを前提とする。
第2は、一対一対応変数・FFのサイクル情報抽出処理である。
第3は、リセットサイクル期間設定のスクリプト改変処理である。第4は、変数・FF対応設定のスクリプト生成処理である。
【0547】
また、上記の生成及び改変処理を実施する中で、スクリプト情報の優先順位付けを実施し、以下の3つの検証スクリプトを生成する。
第1の検証スクリプトは、雛形スクリプトに対して、入出力対応設定の追加と、リセットサイクル期間設定を改変したスクリプトである。
第2の検証スクリプトは、第1の検証スクリプトに対して、ループあり変数一対一対応設定と、ループあり変数非一対一対応設定を追加したスクリプトである。
第3の検証スクリプトは、第2の検証スクリプトに対して、ループなし変数一対一対応設定と、ループなし変数非一対一対応設定を追加したスクリプトである。
【0548】
検証スクリプト改変処理で実行するコマンドの例として以下の検証スクリプトコマンドを用いる。
【0549】
(1)リセットサイクル期間設定コマンド:reset
リセットサイクル期間設定コマンドは、高位レベル記述もしくはRTLに対して、リセットとなる入力ポートを指定し、リセットサイクル期間と、その期間に入力すべき入力値を指定する。
【0550】
このコマンドの記述形式、コマンド記述例は
図68に示す。
【0551】
(2)Throughputサイクル設定コマンド:throughput
Throughputサイクル設定コマンドは、高位レベル記述もしくはRTLに対して、回路全体のThroughputを指定する。当該コマンドの記述形式、及びコマンド記述例を
図69に示す。
【0552】
(3)入力ポート対応設定コマンド:input_map
入力ポート対応設定コマンドは、高位レベル記述とRTLの間で対応する入力ポートを指定するコマンドである。本コマンドで指定された高位レベル記述とRTLの入力ポートには、同パターンの入力値が入力される。また、高位レベル記述、RTLそれぞれに対して、リセット処理から最初の入力値変化までのサイクル数(Latencyサイクル値)と入力値変化周期サイクル値を指定することができる。
【0553】
当該コマンドの記述形式、及びコマンド記述例を
図70に示す。
【0554】
(4)出力ポート対応設定コマンド:output_map
出力ポート対応設定コマンドは、高位レベル記述とRTLの間で対応する出力ポートを指定する。本コマンドで指定された高位レベル記述とRTLの出力ポートに関して、比較動作が実施される。また、高位レベル記述、RTLそれぞれに対して、リセット処理から最初の出力値比較までのサイクル数(Latencyサイクル値)と出力値比較周期サイクル値を指定することができる。
【0555】
当該コマンドの記述形式、及びコマンド記述例を
図71に示す。
【0556】
(5)変数・FF一対一対応設定コマンド:flop_map
変数・FF一対一対応設定コマンドは、高位レベル記述とRTLの間で一対一に対応する変数・FFを指定する。本コマンドで指定された高位レベル記 述の変数とRTLのFFに関して、比較動作が実施される。また、高位レベル記述、RTLそれぞれに対して、リセット処理から最初の値比較までのサイクル数(Latencyサイクル値)と値比較周期サイクル値を指定することができる。
【0557】
当該コマンドの記述形式、及びコマンド記述例を
図72に示す。
【0558】
(6)変数・FF非一対一対応設定コマンド:conditional_flop_map
変数・FF非一対一対応設定コマンドは、高位レベル記述とRTLの間で条件付きで対応する変数・FFを指定する。本コマンドで指定された高位レベル記述の変数とRTLのFFに関して、比較動作が実施される。本実施の形態では、RTLのFFに対して、高位レベル記述の変数が複数対応する場合を想定しており、それぞれの変数に対して、RTLのFFと対応するための条件 (代入実行条件)もあわせて指定する。
【0559】
当該コマンドの記述形式、及びコマンド記述例を
図73に示す。
【0560】
《検証スクリプト改変処理s5の詳細》
検証スクリプト改変処理s5についてその詳細を説明する。
【0561】
動作合成結果であるRTL記述に対して、その構造から検証スクリプト改変処理s5のために、以下の分類が行われる。サイクル精度合成RTLに対しては、入出力スループット比一定、又は入出力スループット比非一定、の分類が行われる。Pipeline合成RTLに対しては、全入出力の出現回数が1、又は上記以外(出現回数が2以上の入出力を有する)、の分類が行われる。上記以外のRTLに対しては、入出力スループット比一定、又は入出力スループット比非一定、の分類が行われる。
【0562】
上記分類に対して、前記検証スクリプトコマンド例で対応可能なものは、以下の通りである。サイクル精度合成RTLについては、入出力スループット比一定及び入出力スループット比非一定が対応可能である。Pipeline合成RTLについては全入出力の出現回数が1のp場合に対応可能である。上記以外のRTLについては入出力スループット比一定の場合が対応可能である。
【0563】
図74には検証スクリプト改変処理s5の全体的な処理フローが例示される。各ステップの処理内容は以下の通りである。
【0564】
s5_1では、入出力サイクル情報を読み込み、処理をs5_2へ移行する。
【0565】
s5_2では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがサイクル精度合成か否かを判定し、サイクル制度合成の場合、処理をs5_6へ移行する。そうでない場合、s5_3へ移行する。
【0566】
s5_3では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLがパイプライン合成か否かを判定し、パイプライン合成の場合、処理をs5_9へ移行する、そうでない場合、s5_4へ移行する。
【0567】
s5_4では、入出力サイクル情報に含まれる回路種別情報を参照し、合成結果RTLが入出力スループット比一定RTLか否かを判定し、入出力スループット比一定RTLの場合、処理をs5_11へ移行する。そうでない場合、s5_5に移行する。
【0568】
s5_5では、本実施の形態で使用する検証スクリプトコマンド例では対応できない構造であるため、「対応不可能」の旨を標準出力し、処理を終了する。
【0569】
s5_6では、入出力サイクル情報に含まれる全入力共通のThroughput情報と全出力共通のThroughput情報の両者を参照し、両者ともに一定か否かを判定し、その場合、処理をs5_7へ移行する。そうでない場合、s5_8へ移行する。
【0570】
s5_7では、「入出力スループット比一定のサイクル精度合成RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_12へ移行する。
【0571】
s5_8では、「入出力スループット比非一定のサイクル精度合成RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_13へ移行する。
【0572】
s5_9では、入出力サイクル情報に含まれる各入出力の出現回数情報を参照し、全入出力の出現回数が1であるか否かを判定し、その場合、処理をs5_10へ移行する。そうでない場合、s5_5に移行する。
【0573】
s5_10では、「Pipeline合成RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_14へ移行する。
【0574】
s5_11では、「入出力スループット比一定RTLを対象とした入出力対応設定改変処理」を実施し、処理をs5_15へ移行する。
【0575】
s5_12では、「入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【0576】
s5_13では、「入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【0577】
s5_14では、「Pipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【0578】
s5_15では、「入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」を実施し、処理をs5_16に移行する。
【0579】
s5_16では、「リセットサイクル期間設定改変処理」を実施し、処理をs5_17へ移行する。
【0580】
s5_17では、雛形スクリプトに対して、入出力対応設定の追加と、リセットサイクル期間設定を改変したスクリプトを第1のスクリプトとして出力し、処理をs5_18に移行する。
【0581】
s5_19では、「変数・FF対応設定生成処理」を実施し、処理を終了する。
【0582】
上記ステップの内、関数コールを伴うステップs5_7、s5_8、s5_10、s5_11、s5_12、s5_13、s5_14、s5_15、s5_16、s5_18について以下詳述する。
【0583】
《検証スクリプト改変処理内のs5_7》
入出力スループット比一定のサイクル精度合成を対象とした入出力対応設定改変処理s5_7では、高位レベル記述と入出力スループット比一定のサイクル精度合成RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、及び高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンドthroughputである。
【0584】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)対応するRTLの入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、サイクル精度合成であるため、各入力ポートに対する初期Throughput値、Throughput値は高位レベル記述とRTLで同じ値となる。
【0585】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、更に、対応するRTLの出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、サイクル精度合成であるため、各出力ポートに対する初期Throughput値、Throughput値は高位レベル記述とRTLで同じ値となる。
【0586】
高位レベル記述/RTLそれぞれのthroughputコマンドには、以下を設定する。すなわち、高位レベル記述のThroughput値は、高位レベル記述の全入出力のThroughput値の中の最大値である。RTLのThroughput値は、RTLの全入出力のThroughput値の中の最大値である。なお、入出力スループット比一定のサイクル精度合成であるため、回路全体のThroughput値は高位レベル記述とRTLで同じ値となる。
【0587】
《検証スクリプト改変処理内のs5_8》
入出力スループット比非一定のサイクル精度合成を対象とした入出力対応設定改変処理s5_8では、高位レベル記述と入出力スループット比非一定のサイクル精度合成RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、及び高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンドthroughputである。
【0588】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)対応するRTLの入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、入出力スループット比非一定のサイクル精度合成であるため、各入力ポートが毎サイクル変化するものとみなし、各入力ポートに対する初期Throughput値、Throughput値は高位レベル記述/RTLともに1とする。
【0589】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。なお、入出力スループット比非一定のサイクル精度合成であるため、各出力ポートが毎サイクル変化するものをみなし、各出力ポートに対する初期Throughput値、Throughput値は高位レベル記述/RTLともに1とする。
【0590】
高位レベル記述/RTLそれぞれのthroughputコマンドには、それぞれの回路全体のThroughput値を設定する。なお、入出力スループット比非一定のサイクル精度合成であるため、全入出力が毎サイクル変化するものとみなし、高位レベル記述/RTL両者の回路全体のThroughput値は1とする。
【0591】
《検証スクリプト改変処理内のs5_10》
Pipeline合成を対象とした入出力対応設定改変処理s5_10では、高位レベル記述とPipeline合成RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンド throughputである。
【0592】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの入力ポート名、Latency値(-lat)、Throughput値(-freq)である。
【0593】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの出力ポート名、Latency値(-lat)、Throughput値(-freq)である。
【0594】
高位レベル記述/RTLそれぞれのthroughputコマンドには、以下を設定する。すなわち、高位レベル記述のThroughput値には、高位レベル記述の全入出力のThroughput値の中の最大値を設定し、RTLのThroughput値には、全出力共通のThroughput値を設定する。
【0595】
《検証スクリプト改変処理内のs5_11》
入出力スループット比一定RTLを対象とした入出力対応設定改変処理s5_11では、高位レベル記述と入出力スループット比一定RTLに対して、入出力サイクル情報、雛形検証スクリプトを使用し、以下を改変する。改変の対象は、各入力ポートの対応設定コマンドinput_map、各出力ポートの対応設定コマンドoutput_map、高位レベル記述/RTLそれぞれのThroughputサイクル設定コマンドthroughputである。
【0596】
具体的には、各入力ポートのinput_mapコマンドには、以下を設定する。即ち、高位レベル記述の入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの入力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。
【0597】
各出力ポートのoutput_mapコマンドには、以下を設定する。即ち、高位レベル記述の出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)、対応するRTLの出力ポート名、初期Throughput値(-lat)、Throughput値(-freq)である。
【0598】
高位レベル記述/RTLそれぞれのthroughputコマンドには、以下を設定する。即ち、高位レベル記述のThroughput値には、高位レベル記述の全入出力のThroughput値の中の最大値を、RTLのThroughput値には、RTLの全入出力のThroughput値の中の最大値を設定する。
【0599】
《検証スクリプト改変処理内のs5_12》
入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理s5_12では、ループあり変数一対一対応関係情報、ループなし変数一対一対応関係情報、高位レベル記述、及び合成結果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値(値変化が発生する周期サイクル)である。
【0600】
Latency値は以下の方法で抽出する。すなわち、記号Sim結果から、各変数・FFのリセット処理から最初の記号値変化が発生するサイクル数をLatency値として抽出する。
【0601】
Throughput値は以下の方法で抽出する。即ち、ランダムSim結果から、各変数・FFの信号値変化のサイクル間隔を識別し、信号値変化サイクルの最小値を求め、信号変化系列に現れる全信号変化のサイクル間隔が最小値の整数倍か否かを判定する。記号Simを適用することで、正確なサイクル間隔を抽出することも可能であるが、現実的な時間で情報抽出できない可能性もあるため、本実施の形態ではランダムSimによって、各変数・FFの値変化のサイクル間隔情報を抽出する。全信号値変化のサイクル間隔が最小値の整数倍である場合、その最小値をThroughput値として抽出する。全信号値変化のサイクル間隔が最小値の整数倍でない場合、Throughput値を1とする。
【0602】
各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【0603】
《検証スクリプト改変処理内のs5_13》
入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理s5_13では、ループあり変数一対一対応関係情報、及びループなし変数一対一対応関係情報を使用し、一対一対応する変数・FFに対して、以下の情報を抽出する。抽出する情報は、各変数・FFのLatency値(リセット処理から最初の値変化が発生するサイクル数)、各変数・FFのThroughput値(値変化が発生する周期サイクル)である。
【0604】
Latency値は以下の方法で抽出する。即ち、各変数・FFのLatency値を1とする。
【0605】
Throughput値は以下の方法で抽出する。即ち、各変数・FFのThroughput値を1とする。
【0606】
また、各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【0607】
《検証スクリプト改変処理内のs5_14》
Pipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理s5_14では、ループあり変数一対一対応関係情報、ループなし変数一対一対応関係情報、高位レベル記述、及び合成結果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値(値変化が発生する周期サイクル)である。
【0608】
Latency値は以下の方法で抽出する。即ち、記号Sim結果から、各変数・FFのリセット処理から最初の記号値変化が発生するサイクル数をLatency値として抽出する。
【0609】
Throughput値は以下の方法で抽出する。すなわち、ランダムSim結果から、各変数の信号値変化のサイクル間隔を識別し、信号値変化サイクルの最小値を求め、その最小値を各変数のThroughput値として抽出する。記号Simを適用することで、正確なサイクル間隔を抽出することも可能であるが、現実的な時間で情報抽出できない可能性もあるため、本実施例ではランダムSimによって、各変数の値変化のサイクル間隔情報を抽出する。Pipeline合成RTLの全出力のThroughput値を、各FFのThroughput値として抽出する。
【0610】
また、各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【0611】
《検証スクリプト改変処理内のs5_15》
入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理s5_15では、ループあり変数一対一対応関係情報、ループなし変数一対一対応関係情報、高位レベル記述、及び合成結果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値(値変化が発生する周期サイクル)である。
【0612】
Latency値は以下の方法で抽出する。即ち、記号Sim結果から、各変数・FFのリセット処理から最初の記号値変化が発生するサイクル数をLatency値として抽出する。
【0613】
Throughput値は以下の方法で抽出する。すなわち、ランダムSim結果から、各変数・FFの信号値変化のサイクル間隔を識別し、信号値変化サイクルの最小値を求め、信号変化系列に現れる全信号変化のサイクル間隔が最小値の整数倍か否かを判定する。記号Simを適用することで、正確なサイクル間隔を抽出することも可能であるが、現実的な時間で情報抽出できない可能性もあるため、本実施例ではランダムSimによって、各変数・FFの値変化のサイクル間隔情報を抽出する。一対一対応する変数とFFの、それぞれの全信号値変化のサイクル間隔がともに最小値の整数倍の場合、変数・FFそれぞれの信号値変化のサイクル間隔の最小値を、それぞれのThroughput値として抽出する。一方、一対一対応する変数・FFどちらかの、全信号値変化のサイクル間隔が最小値の整数倍でない場合、前記「入出力スループット比一定RTLを対象とした入出力対応設定生成処理」で生成された、高位レベル記述/RTL向けそれぞれのthroughputコマンドに設定されている値を、各変数・FFのThroughput値として、それぞれ抽出する。
【0614】
また、各変数・FFの上記のサイクル情報を抽出後、各変数・FFが格納されているループあり変数一対一対応関係情報もしくはループなし変数一対一対応関係情報に、抽出したサイクル情報を追加する。
【0615】
《検証スクリプト改変処理内のs5_16》
リセットサイクル期間設定改変処理s5_16では、高位レベル記述とRTLに対して、リセットサイクル期間情報と雛形スクリプトのリセットサイクル期間設定を使用し、以下を改変する。改変対象は、高位レベル記述/RTLそれぞれのリセットサイクル期間設定コマンド resetである。
【0616】
また、雛形スクリプトで設定されたリセット値のサイクル期間と(非リセット値が設定されている場合はその期間を除く)、リセットサイクル期間情報のサイクル期間をあわせたサイクル期間を、改変したリセットサイクル期間とし、高位レベル記述/RTLの両者のresetコマンドに設定する。
【0617】
《検証スクリプト改変処理内のs5_18》
変数・FF対応設定生成処理では、高位レベル記述とRTLに対して、変数・FF対応情報を使用し、以下を設定する。即ち、設定対象は、変数・FF一対一対応設定コマンド flop_map、変数・FF非一対一対応設定コマンド conditional_flop_mapである。
【0618】
変数・FF一対一対応設定コマンドflop_mapには、以下を設定する。即ち、高位レベル記述の変数名、リセット処理から最初の値変化が行われるまでのサイクル数(-lat)、値変化の周期サイクル(-freq)、対応するRTLのFF名、リセット処理から最初の値変化が行われるまでのサイクル数(-lat)、及び値変化の周期サイクル (-freq)である。
【0619】
また、変数・FF非一対一対応設定コマンドconditional_flop_mapには、以下を設定する。即ち、RTLのFF名、及び対応する高位レベルの全変数と、それら各変数に代入が実施される代入実行条件(-cond)である。
【0620】
また、変数・FF対応設定を可能な限り指定した場合、対応関係が正しいか否かの検証が等価性検証では必要となり、これが実行されるため、沢山指定した場合、その実行時間のオーバヘッドが無視できなくなる、という問題があるため、本実施の形態では、変数・FF対応設定に以下の優先順位を付ける。
1) ループあり変数一対一対応設定
2) ループあり変数非一対一対応設定
3) ループなし変数一対一対応設定
4) ループなし変数非一対一対応設定
上記の優先順位に従い、変数・FF対応設定生成処理では、第2の検証スクリプトと第3の検証スクリプトを出力し、それぞれの設定内容は以下となる。第1の検証スクリプトには、前記までの入出力対応設定とリセットサイクル期間設定が設定されている。第2の検証スクリプトには、第1の検証スクリプトの設定に加えて、ループあり変数一対一対応設定、又はループあり変数非一対一対応設定を設定する。第3の検証スクリプトには、第2の検証スクリプトの設定に加えて、ループなし変数一対一対応設定、又はループなし非一対一対応設定を設定する。
【0621】
《検証スクリプト改変処理内のs5_7の詳細フロー》
図75にはs5_7の「入出力スループット比一定のサイクル精度合成を対象とした入出力対応設定改変処理」フローの前半が例示される。
図76にはその処理フローの後半が例示される。各ステップの内容は以下の通りである。
【0622】
s5_7_1では、入出力サイクル情報に含まれる回路種別情報からサイクル精度合成RTLを識別し、RTLに対する各入力情報の集合をI、各出力情報の集合をOとし、処理をs5_7_2へ移行する。
【0623】
s5_7_2では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納する。更にスクリプトコマンドoutput_mapを識別し、各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_7_3に移行する。
【0624】
s5_7_3では、集合変数VにIを代入し、変数max_thを0に初期化し、処理をs5_7_4へ移行する。
【0625】
s5_7_4では、集合Vが空か否かを判定し、その場合、処理をs5_7_5へ移行し、そうでない場合、s5_7_10へ移行する。
【0626】
s5_7_5では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_7_6へ移行する。
【0627】
s5_7_6では、入力信号対応関係情報RIからvに対応する高位レベル記述の入力信号名を識別し、処理をs5_7_7に移行する。
【0628】
s5_7_7では、スクリプトコマンドinput_mapの-rに対して、
[ <高位レベル記述の信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、-iに対して、
[ <vの信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、処理をs5_7_8に移行する。
【0629】
s5_7_8では、 vのThroughput値 > max_thの判定を行い、その場合、処理をs5_7_9へ移行し、そうでない場合、s5_7_4へ移行する。
【0630】
s5_7_9では、変数max_thにvのThroughput値を代入し、処理をs5_7_4へ移行する。
【0631】
s5_7_10では、集合変数VにOを代入し、処理をs5_7_11へ移行する。
【0632】
s5_7_11では、集合Vが空か否かを判定し、空の場合、処理をs5_7_13へ移行し、空でない場合、s5_7_12へ移行する。
【0633】
s5_7_12では、スクリプトコマンドthroughputの-r、-iの両者に対して、max_thの値を設定し、処理を終了する。
【0634】
s5_7_13では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_7_14へ移行する。
【0635】
s5_7_14では、出力信号対応関係情報ROからvに対応する高位レベル記述の出力信号名を識別し、処理をs5_7_15に移行する。
【0636】
s5_7_15では、スクリプトコマンドoutput_mapの-rに対して、
[ <高位レベル記述の信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、-iに対して、
[ <vの信号名> -lat <vの初期Throughput値> -freq <vのThroughput値> ]を指定し、処理をs5_7_16に移行する。
【0637】
s5_7_16では、vのThroughput値 > max_thの判定を行い、その場合には処理をs5_7_17へ移行し、そうでない場合には処理をs5_7_11へ移行する。
【0638】
s5_7_17では、変数max_thにvのThroughput値を代入し、処理をs5_7_11へ移行する。
【0639】
《検証スクリプト改変処理内のs5_8の詳細フロー》
図77にはs5_8の「入出力スループット比非一定のサイクル精度合成を対象とした入出力対応設定改変処理」フローが例示される。各ステップの内容は以下の通りである。
【0640】
s5_8_1では、入出力サイクル情報に含まれる回路種別情報からサイクル精度合成RTLを識別し、RTLに対する各入力情報の集合をI、各出力情報の集合をOとし、処理をs5_8_2へ移行する。
【0641】
s5_8_2では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納し、スクリプトコマンドoutput_mapを識別する。そして各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_8_3に移行する。
【0642】
s5_8_3では、集合変数VにIを代入し、処理をs5_8_4へ移行する。
【0643】
s5_8_4では、集合Vが空か否かを判定し、空の場合、処理をs5_8_8へ移行する。空でない場合、s5_8_5へ移行する。
【0644】
s5_8_5では、集合変数VにOを代入し、処理をs5_8_6へ移行する。
【0645】
s5_8_6では、集合Vが空か否かを判定し、空の場合、処理をs5_8_11へ移行する。空でない場合、s5_8_7へ移行する。
【0646】
s5_8_7では、スクリプトコマンドthroughputの-r、-iの両者に対して、1を設定し、処理を終了する。
【0647】
s5_8_8では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_8_9へ移行する。
【0648】
s5_8_9では、入力信号対応関係情報RIからvに対応する高位レベル記述の入力信号名を識別し、処理をs5_8_10に移行する。
【0649】
s5_8_10では、スクリプトコマンドinput_mapの-r に対して、
[ <高位レベル記述の信号名> -lat 1 -freq 1 ]を指定し、-i に対して、
[ <vの信号名> -lat 1 -freq 1 ]を指定し、処理をs5_8_4に移行する。
【0650】
s5_8_11では、v∈Vを一つ取り、V=V-{v}とし、処理をs5_8_12へ移行する。
【0651】
s5_8_12では、出力信号対応関係情報ROからvに対応する高位レベル記述の入力信号名を識別し、処理をs5_8_13に移行する。
【0652】
s5_8_13では、スクリプトコマンドoutput_mapの-r に対して、
[ <高位レベル記述の信号名> -lat 1 -freq 1 ]を指定し、-i に対して、
[ <vの信号名> -lat 1 -freq 1 ]を指定し、処理をs5_8_6に移行する。
【0653】
《検証スクリプト改変処理内のs5_10の詳細フロー》
図78にはs5_10の「Pipeline合成RTLを対象とした入出力対応設定改変処理」フローの前半が例示される。
図79にはその処理フローの後半が例示される。各ステップの内容は以下の通りである。
【0654】
s5_10_1では、入出力サイクル情報に含まれる回路種別情報から高位レベル記述を識別し、高位レベル記述に対する各入力情報の集合を集合変数I1に、各出力情報の集合を集合変数O1に、それぞれ代入し、処理をs5_10_2に移行する。
【0655】
s5_10_2では、入出力サイクル情報に含まれる回路種別情報からPipeline合成RTLを識別し、Pipeline合成RTLに対する各入力情報の集合を集合変数I2に、各出力情報の集合を集合変数O2に、それぞれ代入し、処理をs5_10_3に移行する。
【0656】
s5_10_3では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納し、スクリプトコマンドoutput_mapを識別し、各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_10_4に移行する。
【0657】
s5_10_4では、集合変数V1にI1を、集合変数V2にI2を、それぞれ代入し、処理をs5_10_5に移行する。
【0658】
s5_10_5では、変数max_thを0に初期化し、処理をs5_10_6に移行する。
【0659】
s5_10_6では、集合V1が空か否かを判定し、空の場合、処理をs5_10_7に移行する。空でない場合、s5_10_13に移行する。
【0660】
s5_10_7では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_10_8に移行する。
【0661】
s5_10_8では、入力信号対応関係情報RIからv1に対応する入力ポートv2を識別し、処理をs5_10_9に移行する。
【0662】
s5_10_9では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_10_10に移行する。
【0663】
s5_10_10では、スクリプトコマンドinput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2のLatency値> -freq <v2のThroughput値> ]を指定し、処理をs5_10_11に移行する。
【0664】
s5_10_11では、v1のThroughput値 > max_thの判定を行い、その場合、処理をs5_10_12に移行し、そうでない場合、s5_10_6に移行する。
【0665】
s5_10_12では、変数max_thにv1のThroughput値を代入し、処理をs5_10_6に移行する。
【0666】
s5_10_13では、集合変数V1にO1を、集合変数V2にO2を、それぞれ代入し、処理をs5_10_14に移行する。
【0667】
s5_10_14では、集合V1が空か否かを判定し、空の場合、処理をs5_10_17に移行し、空でない場合、処理をs5_10_15に移行する。
【0668】
s5_10_15では、スクリプトコマンドthroughputの-rに対して、max_thの値を指定し、処理をs5_10_16に移行する。
【0669】
s5_10_16では、スクリプトコマンドthroughputの-iに対して、Pipeline合成RTLの回路全体のThroughput値を指定し、処理を終了する。
【0670】
s5_10_17では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_10_18に移行する。
【0671】
s5_10_18では、出力信号対応関係情報ROからv1に対応する出力ポートv2を識別し、処理をs5_10_19に移行する。
【0672】
s5_10_19では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_10_20に移行する。
【0673】
s5_10_20では、スクリプトコマンドoutput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2のLatency値> -freq <v2のThroughput値> ]を指定し、処理をs5_10_21に移行する。
【0674】
s5_10_21では、v1のThroughput値 > max_thの判定を行い、その場合、処理をs5_10_22に移行し、そうでない場合、s5_10_14に移行する。
【0675】
s5_10_22では、変数max_thにv1のThroughput値を代入し、処理をs5_10_14に移行する。
【0676】
《検証スクリプト改変処理内のs5_11の詳細フロー》
図80にはs5_11の「入出力スループット比一定RTLを対象とした入出力対応設定改変処理」の前半のフローが例示される。
図81にはその後半の処理フローが例示される。各ステップの内容は以下の通りである。
【0677】
s5_11_1では、入出力サイクル情報に含まれる回路種別情報から高位レベル記述を識別し、高位レベル記述に対する各入力情報の集合をI1、各出力情報の集合をO1とし、処理をs5_11_2に移行する。
【0678】
s5_11_2では、入出力サイクル情報に含まれる回路種別情報から入出力スループット比一定RTLを識別し、入出力スループット比一定RTLに対する各入力情報の集合をI2、各出力情報の集合をO2とし、処理をs5_11_3に移行する。
【0679】
s5_11_3では、雛形検証スクリプトを読込み、スクリプトコマンドinput_mapを識別し、各入力信号の対応関係情報の集合を集合変数RIに格納し、スクリプトコマンドoutput_mapを識別し、各出力信号の対応関係情報の集合を集合変数ROに格納し、処理をs5_11_4に移行する。
【0680】
s5_11_4では、変数max_th1、max_th2を0に初期化し、処理をs5_11_5に移行する。
【0681】
s5_11_5では、集合変数V1にI1、V2にI2をそれぞれ代入し、処理をs5_11_6に移行する。
【0682】
s5_11_6では、集合V1が空か否かを判定し、その場合、処理をs5_11_7に移行し、そうでない場合、s5_11_15に移行する。
【0683】
s5_11_7では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_11_8に移行する。
【0684】
s5_11_8では、入力信号対応関係情報RIからv1に対応する入力ポートv2を識別し、処理をs5_11_9に移行する。
【0685】
s5_11_9では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_11_10に移行する。
【0686】
s5_11_10では、スクリプトコマンドinput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2の初期Throughput値> -freq <v2のThroughput値> ]を指定し、処理をs5_11_11に移行する。
【0687】
s5_11_11では、v1のThroughput値 > max_th1の判定を行い、その場合、処理をs5_11_12に移行し、そうでない場合、s5_11_13に移行する。
【0688】
s5_11_12では、変数max_th1にv1のThroughput値を代入し、処理をs5_11_13に移行する。
【0689】
s5_11_13では、v2のThroughput値 > max_th2の判定を行い、その場合、処理をs5_11_14に移行し、そうでない場合、s5_11_6に移行する。
【0690】
s5_11_14では、変数max_th2にv2のThroughput値を代入し、処理をs5_11_6に移行する。
【0691】
s5_11_15では、集合変数V1にO1、V2にO2をそれぞれ代入し、処理をs5_11_16に移行する。
【0692】
s5_11_16では、集合V1が空か否かを判定し、その場合、処理をs5_11_19に移行し、そうでない場合、s5_11_17に移行する。
【0693】
s5_11_17では、スクリプトコマンドthroughputの-rに対して、max_th1の値を指定し、処理をs5_11_18に移行する。
【0694】
s5_11_18では、スクリプトコマンドthroughputの-iに対して、max_th2の値を指定し、処理を終了する。
【0695】
s5_11_19では、v1∈V1を一つ取り、V1=V1-{v1}とし、処理をs5_11_20に移行する。
【0696】
s5_11_20では、出力信号対応関係情報ROからv1に対応する入力ポートv2を識別し、処理をs5_11_21に移行する。
【0697】
s5_11_21では、v2∈V2を取り、V2=V2-{v2}とし、処理をs5_11_22に移行する。
【0698】
s5_11_22では、スクリプトコマンドoutput_mapの-rに対して、
[ <v1の信号名> -lat <v1の初期Throughput値> -freq <v1のThroughput値> ]を指定し、-iに対して、
[ <v2の信号名> -lat <v2の初期Throughput値> -freq <v2のThroughput値> ]を指定し、処理をs5_11_23に移行する。
【0699】
s5_11_23では、v1のThroughput値 > max_th1の判定を行い、その場合、処理をs5_11_24に移行し、そうでない場合、s5_11_25に移行する。
【0700】
s5_11_24では、変数max_th1にv1のThroughput値を代入し、処理をs5_11_25に移行する。
【0701】
s5_11_25では、v2のThroughput値 > max_th2の判定を行い、その場合、処理をs5_11_26に移行し、そうでない場合、s5_11_16に移行する。
【0702】
s5_11_26では、変数max_th2にv2のThroughput値を代入し、処理をs5_11_16に移行する。
【0703】
《検証スクリプト改変処理内のs5_12の詳細フロー》
図82にはs5_12の「入出力スループット比一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」の開始からの一部のフローが例示される。
図83には
図82に続く処理フローが例示され、
図84には
図83に続いて終了にいたる処理フローが例示される。各ステップの内容は以下の通りである。
【0704】
s5_12_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_12_2に移行する。
【0705】
s5_12_2では、集合変数Var2にVar1を、F2にF1をそれぞれ代入し、処理をs5_12_3に移行する。
【0706】
s5_12_3では、高位レベル記述を読込み、処理をs5_12_4に移行する。
【0707】
s5_12_4では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_12_8へ移行し、空でない場合、処理s5_12_5に移行する。
【0708】
s5_12_5では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_12_6に移行する。
【0709】
s5_12_6では、v1の値を出力するための出力変数を高位レベル記述に追加し、処理をs5_12_7に移行する。
【0710】
s5_12_7で、v1への代入文を識別し、その直後にv1から対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs5_12_4に移行する。
【0711】
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に移行する。
【0712】
s5_12_9では。高位レベル記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_12_10に移行する。
【0713】
s5_12_10では、高位レベル記述に対して、NサイクルのランダムSimを実施し、処理をs5_12_11に移行する。
【0714】
s5_12_11では、集合Var2が空であるか否かを判定し、空の場合、処理をs5_12_22へ移行し、空でない場合、処理をs5_12_12に移行する。
【0715】
s5_12_12では、v2∈Var2を一つ取り、Var2=Var2-{v2}とし、処理をs5_12_13に移行する。
【0716】
s5_12_13では、v2に対する記号Sim出力結果を識別し、処理をs5_12_14に移行する。
【0717】
s5_12_14では、リセット処理から最初の記号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_12_15に移行する。
【0718】
s5_12_15では、v2に対するランダムSim結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から値とサイクルの組の集合を(v2v, v2c)∈v2sigとして格納し、処理をs5_12_16に移行する。
【0719】
s5_12_16では、v2sig内の要素数をMとし、v2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_12_17に移行する。
【0720】
s5_12_17では、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_12_18に移行する。
【0721】
s5_12_18では、v2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_12_19へ移行し、そうでない場合、処理をs5_12_20に移行する。
【0722】
s5_12_19では、変数freqに変数Tの値を代入し、処理をs5_12_21に移行する。
【0723】
bs5_12_20では、変数freqに1を代入し、処理をs5_12_22に移行する。
【0724】
s5_12_21では、高位レベル記述の変数v2に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値)とし、集合Varにvを格納し、処理をs5_12_11に移行する。
【0725】
s5_12_22では、合成結果RTLを読込み、処理をs5_12_23に移行する。
【0726】
s5_12_23で、集合F1が空であるか否かを判定し、空の場合、処理をs5_12_27へ移行し、空でない場合、処理をs5_12_24に移行する。
【0727】
s5_12_24では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_12_25に移行する。
【0728】
s5_12_25では、f1の値を出力するための出力変数をRTL記述に追加し、処理をs5_12_26に移行する。
【0729】
s5_12_26では、f1への代入文を識別し、その直後にf1から対応する新たに挿入した出力変数への代入記述をRTL記述に追加し、処理をs5_12_23に移行する。
【0730】
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に移行する。
【0731】
s5_12_28では、RTL記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_12_29に移行する。
【0732】
s5_12_29では、RTL記述に対して、NサイクルのランダムSimを実施し、処理をs5_12_30に移行する。
【0733】
s5_12_30では、集合F2が空であるか否かを判定し、空の場合、処理をs5_12_41へ移行し、空でない場合、処理をs5_12_31に移行する。
【0734】
s5_12_31では、f2∈F2を一つ取り、F2=F2-{f2}とし、処理をs5_12_32に移行する。
【0735】
s5_12_32では、f2に対する記号Sim出力結果を識別し、処理をs5_12_33に移行する。
【0736】
s5_12_33では、リセット処理から最初の信号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_12_34に移行する。
【0737】
s5_12_34では、f2に対するランダムSim出力結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から、値とサイクルの組の集合を(f2v, f2c)∈f2sigとして格納し、処理をs5_12_35に移行する。
【0738】
s5_12_35では、f2sig内の要素数をMとし、f2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_12_36に移行する。
【0739】
s5_12_36では、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_12_37に移行する。
【0740】
s5_12_37では、f2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_12_38移行し、そうでない場合、処理をs5_12_39に移行する。
【0741】
s5_12_38では、変数freqに変数Tの値を代入し、処理をs5_12_40に移行する。
【0742】
s5_12_39では、変数freqに1を代入し、処理をs5_12_40に移行する。
【0743】
s5_12_40では、合成結果RTLのFFであるf2に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値)とし、集合Fにfを格納し、処理をs5_12_30に移行する。
【0744】
s5_12_41では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_12_42に移行する。
【0745】
s5_12_42では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_12_43に移行する。
【0746】
s5_12_43では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_12_44に移行する。
【0747】
s5_12_44では、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_12_45へ移行し、そうでない場合、処理をs5_12_47に移行する。
【0748】
s5_12_45では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_46に移行する。
【0749】
s5_12_46では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_41に移行する。
【0750】
s5_12_47では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_48に移行する。
【0751】
s5_12_48では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_12_41に移行する。
【0752】
《検証スクリプト改変処理内のs5_13の詳細フロー》
図85にはs5_13の「入出力スループット比非一定のサイクル精度合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」のフローが例示される。各ステップの内容は以下の通りである。
【0753】
s5_13_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_13_2に移行する。
【0754】
s5_13_2では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_13_6へ移行し、空でない場合、処理s5_13_3に移行する。
【0755】
s5_13_3では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_13_4に移行する。
【0756】
s5_13_4では、変数latに1を、変数freqに1を代入し、処理をs5_13_5に移行する。
【0757】
s5_13_5では、高位レベル記述の変数v1に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値)とし、集合Varにvを格納し、処理をs5_13_2に移行する。
【0758】
s5_13_6では、集合F1が空であるか否かを判定し、空の場合、処理をs5_13_10へ移行し、空でない場合、処理をs5_13_7に移行する。
【0759】
s5_13_7では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_13_8に移行する。
【0760】
s5_13_8では、変数latに1を、変数freqに1を代入し、処理をs5_13_9に移行する。
【0761】
s5_13_9では、合成結果RTLのFFであるf1に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値)とし、集合Fにfを格納し、処理をs5_13_6に移行する。
【0762】
s5_13_10では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_13_11に移行する。
【0763】
s5_13_11では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_13_11に移行する。
【0764】
s5_13_12では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_13_12に移行する。
【0765】
s5_13_13では、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_13_14へ移行し、そうでない場合、処理をs5_13_16に移行する。
【0766】
s5_13_14では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_15に移行する。
【0767】
s5_13_15では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_10に移行する。
【0768】
s5_13_16では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_17に移行する。
【0769】
s5_13_17では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_13_10に移行する。
【0770】
《検証スクリプト改変処理内のs5_14の詳細フロー》
図86にはs5_14の「Pipeline合成RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」の前半フローが例示される。
図87には
図86に続く後半処理のフローが例示される。各ステップの内容は以下の通りである。
【0771】
s5_14_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_14_2に移行する。
【0772】
s5_14_2では、集合変数Var2にVar1を、F2にF1をそれぞれ代入し、処理をs5_14_3に移行する。
【0773】
s5_14_3では、高位レベル記述を読込み、処理をs5_14_4に移行する。
【0774】
s5_14_4では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_14_8へ移行し、空でない場合、処理s5_14_5に移行する。
【0775】
s5_14_5では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_14_6に移行する。
【0776】
s5_14_6では、v1の値を出力するための出力変数を高位レベル記述に追加し、処理をs5_14_7に移行する。
【0777】
s5_14_7では、v1への代入文を識別し、その直後にv1から対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs5_14_4に移行する。
【0778】
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に移行する。
【0779】
s5_14_9では、高位レベル記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_14_10に移行する。
【0780】
s5_14_10では、高位レベル記述に対して、NサイクルのランダムSimを実施し、処理をs5_14_11に移行する。
【0781】
s5_14_11では、集合Var2が空であるか否かを判定し、空の場合、処理をs5_14_20へ移行し、空でない場合、処理をs5_14_12に移行する。
【0782】
s5_14_12では、v2∈Var2を一つ取り、Var2=Var2-{v2}とし、処理をs5_14_13に移行する。
【0783】
s5_14_13では、v2に対する記号Sim出力結果を識別し、処理をs5_14_14に移行する。
【0784】
s5_14_14では、リセット処理から最初の記号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_14_15に移行する。
【0785】
s5_14_15では、v2に対するランダムSim結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から値とサイクルの組の集合を(v2v, v2c)∈v2sigとして格納し、処理をs5_14_16に移行する。
【0786】
s5_14_16では、v2sig内の要素数をMとし、v2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_14_17に移行する。
【0787】
s5_14_17で、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_14_18に移行する。
【0788】
s5_14_18では、変数freqに変数Tの値を代入し、処理をs5_14_19に移行する。
【0789】
s5_14_19では、高位レベル記述の変数v2に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値)とし、集合Varにvを格納し、処理をs5_14_11に移行する。
【0790】
s5_14_20では、前記「Pipeline合成RTLを対象とした入出力対応設定生成処理」で生成したコマンドスクリプトthroughputの-iに設定した値をthに格納し、処理をs5_14_21に移行する。
【0791】
s5_14_21では、合成結果RTLを読込み、処理をs5_14_22に移行する。
【0792】
s5_14_22では、集合F1が空であるか否かを判定し、空の場合、処理をs5_14_26へ移行し、空でない場合、処理をs5_14_23に移行する。
【0793】
s5_14_23では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_14_24に移行する。
【0794】
s5_14_24では、f1の値を出力するための出力変数をRTL記述に追加し、処理をs5_14_25に移行する。
【0795】
s5_14_25では、f1への代入文を識別し、その直後にf1から対応する新たに挿入した出力変数への代入記述をRTL記述に追加し、処理をs5_14_20に移行する。
【0796】
s5_14_26では、非特許文献<2>の手法を適用し、RTL記述の記号Simを実施し、処理をs5_14_27に移行する。
【0797】
s5_14_27では、集合F2が空であるか否かを判定し、空の場合、処理をs5_14_32へ移行し、空でない場合、処理をs5_14_28に移行する。
【0798】
s5_14_28では、f2∈F2を一つ取り、F2=F2-{f2}とし、処理をs5_14_29に移行する。
【0799】
s5_14_29では、f2に対する記号Sim出力結果を識別し、処理をs5_14_30に移行する。
【0800】
s5_14_30では、リセット処理から最初の信号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_14_31に移行する。
【0801】
s5_14_31では、変数freqにthの値を格納し、処理をs5_14_32に移行する。
【0802】
s5_14_32では、合成結果RTLのFFであるf2に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値)とし、集合Fにfを格納し、処理をs5_14_27に移行する。
【0803】
s5_14_33では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_14_34に移行する。
【0804】
s5_14_34では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_14_35に移行する。
【0805】
s5_14_35では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_14_36に移行する。
【0806】
s5_14_36では、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_14_37へ移行し、そうでない場合、処理をs5_14_39に移行する。
【0807】
s5_14_37では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_38に移行する。
【0808】
s5_14_38では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_33に移行する。
【0809】
s5_14_39では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_40に移行する。
【0810】
s5_14_40では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_14_33に移行する。
【0811】
《検証スクリプト改変処理内のs5_15の詳細フロー》
図88にはs5_15の「入出力スループット比一定RTLを対象とした一対一対応変数・FFのサイクル情報抽出処理」の開始からの一部の処理フローが例示される。
図89には
図88に続く処理フローが例示され、
図90には
図89に続いて終了にいたる処理フローが例示される。各ステップの内容は以下の通りである。
【0812】
s5_15_1では、ループあり変数一対一対応関係情報とループなし変数一対一対応関係情報を読み込み、それぞれの高位レベル記述の変数情報を集合変数Var1に、RTLのFF情報を集合変数F1に格納し、処理をs5_15_2に移行する。
【0813】
s5_15_2では、集合変数Var2にVar1を、F2にF1をそれぞれ代入し、処理をs5_15_3に移行する。
【0814】
s5_15_3では、前記「入出力スループット比一定RTLを対象とした入出力対応設定生成処理」で生成したスクリプトコマンドthroughputの-rに設定された値をth1に、-iに設定された値をth2にそれぞれ格納し、処理をs5_15_4に以降する。
【0815】
s5_15_4では、高位レベル記述を読込み、処理をs5_15_5に移行する。
【0816】
s5_15_5では、集合Var1が空であるか否かを判定し、空の場合、処理をs5_15_9へ移行し、空でない場合、処理s5_15_6に移行する。
【0817】
s5_15_6では、v1∈Var1を一つ取り、Var1=Var1-{v1}とし、処理をs5_15_7に移行する。
【0818】
s5_15_7では、v1の値を出力するための出力変数を高位レベル記述に追加し、処理をs5_15_8に移行する。
【0819】
s5_15_8では、v1への代入文を識別し、その直後にv1から対応する新たに挿入した出力変数への代入記述を高位レベル記述に追加し、処理をs5_15_5に移行する。
【0820】
s5_15_9では、非特許文献<1>の手法を適用し、高位レベル記述の記号Simを実施し、処理をs5_15_10に移行する。
【0821】
s5_15_10では、高位レベル記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_15_11に移行する。
【0822】
s5_15_11では、高位レベルに対して、NサイクルのランダムSimを実施し、処理をs5_15_12に移行する。
【0823】
s5_15_12では、集合Var2が空であるか否かを判定し、空の場合、処理をs5_15_25へ移行し、空でない場合、処理をs5_15_13に移行する。
【0824】
s5_15_13では、v2∈Var2を一つ取り、Var2=Var2-{v2}とし、処理をs5_15_14に移行する。
【0825】
s5_15_14では、v2に対する記号Sim出力結果を識別し、処理をs5_15_15に移行する。
【0826】
s5_15_15では、リセット処理から最初の記号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_15_16に移行する。
【0827】
s5_15_16では、v2に対するランダムSim結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から値とサイクルの組の集合を(v2v, v2c)∈v2sigとして格納し、処理をs5_15_17に移行する。
【0828】
s5_15_17では、v2sig内の要素数をMとし、v2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_15_18に移行する。
【0829】
s5_15_18では、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_15_19に移行する。
【0830】
s5_15_19では、v2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_15_20へ移行し、そうでない場合、処理をs5_15_22に移行する。
【0831】
s5_15_20では、変数freqに変数Tの値を代入し、処理をs5_15_21に移行する。
【0832】
s5_15_21では、信号値変化のサイクル間隔の性質を「一定」とし、処理をs5_15_24に移行する。
【0833】
s5_15_22では、変数freqにth1の値を代入し、処理をs5_15_23に移行する。
【0834】
s5_15_23では、信号値変化のサイクル間隔の性質を「非一定」とし、処理をs5_15_24に移行する。
【0835】
s5_15_24では、高位レベル記述の変数v2に対する情報をvとし、vの内容を(変数名、対応FF名、latの値、freqの値、記号値変化間隔の性質)とし、集合Varにvを格納し、処理をs5_15_12に移行する。
【0836】
s5_15_25では、合成結果RTLを読込み、処理をs5_15_26に移行する。
【0837】
s5_15_26では、集合F1が空であるか否かを判定し、空の場合、処理をs5_15_30へ移行し、空でない場合、処理をs5_15_27に移行する。
【0838】
s5_15_27では、f1∈F1を一つ取り、F1=F1-{f1}とし、処理をs5_15_28に移行する。
【0839】
s5_15_28では、f1の値を出力するための出力変数をRTL記述に追加し、処理をs5_15_29に移行する。
【0840】
s5_15_29では、f1への代入文を識別し、その直後にf1から対応する新たに挿入した出力変数への代入記述をRTL記述に追加し、処理をs5_15_26に移行する。
【0841】
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に移行する。
【0842】
s5_15_31では、RTL記述の入力信号へランダム値を与えるテストベンチを生成し、処理をs5_15_32に移行する。
【0843】
s5_15_32では、RTL記述に対して、NサイクルのランダムSimを実施し、処理をs5_15_33に移行する。
【0844】
s5_15_33では、集合F2が空であるか否かを判定し、空の場合、処理をs5_15_46へ移行し、空でない場合、処理をs5_15_34に移行する。
【0845】
s5_15_34では、f2∈F2を一つ取り、F2=F2-{f2}とし、処理をs5_15_35に移行する。
【0846】
s5_15_35では、f2に対する記号Sim出力結果を識別し、処理をs5_15_36に移行する。
【0847】
s5_15_36では、リセット処理から最初の信号値変化が発生したサイクルまでのサイクル数を変数latに格納し、処理をs5_15_37に移行する。
【0848】
s5_15_37では、f2に対するランダムSim出力結果を識別し、リセット処理から最初の信号値変化が発生したサイクル以降の信号系列から、値とサイクルの組の集合を(f2v, f2c)∈f2sigとして格納し、処理をs5_12_38に移行する。
【0849】
s5_15_38では、f2sig内の要素数をMとし、f2sigの要素の各サイクル数をtc(i)(0≦i<M)とし、処理をs5_12_39に移行する。
【0850】
s5_15_39で、連続する要素間のサイクル間隔の最小値(min{(tc(i+1)-tc(i)|(0≦i<M-1))})を変数Tに代入し、処理をs5_12_40に移行する。
【0851】
s5_15_40では、f2sig内の連続する要素間のサイクル間隔が全て、Tの整数倍であるか否かを判定し、その場合、処理をs5_12_41へ移行し、そうでない場合、処理をs5_12_43に移行する。
【0852】
s5_15_41では、変数freqに変数Tの値を代入し、処理をs5_15_42に移行する。
【0853】
s5_15_42では、記号値変化のサイクル間隔の性質を「一定」とし、処理をs5_15_45に移行する。
【0854】
s5_15_43では、変数freqにth2の値を代入し、処理をs5_15_44に移行する。
【0855】
s5_15_44では、記号値変化のサイクル間隔の性質を「非一定」とし、処理をs5_15_45に移行する。
【0856】
s5_15_45では、合成結果RTLのFFであるf2に対する情報をfとし、fの内容を(FF名、ループ有無情報、latの値、freqの値、記号値変化間隔の性質)とし、集合Fにfを格納し、処理をs5_15_33に移行する。
【0857】
s5_15_46では、集合Fが空であるか否かを判定し、空の場合、処理を終了し、空でない場合、処理をs5_15_47に移行する。
【0858】
s5_15_47では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_15_48に移行する。
【0859】
s5_15_48では、fに対応する高位レベルの変数v∈Varを識別し、Var=Var-{v}とし、処理をs5_15_49に移行する。
【0860】
s5_15_49では、fの記号値変化間隔とvの記号値変化間隔がともに「一定」であるか否かを判定し、一定であれば、処理をs5_15_50へ移行し、そうでなければ、処理をs5_15_51に移行する。
【0861】
s5_15_50では、vのfreqにth1の値を、fのfreqにth2の値をそれぞれ代入し、処理をs5_15_51に移行。
s5_15_51で、fがフィードバックループを有するFFであるかをfのループ有無情報から判定し、ループありの場合、処理をs5_15_52へ移行し、そうでない場合、処理をs5_15_54に移行する。
【0862】
s5_15_52では、ループあり変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_53に移行する。
【0863】
s5_15_53では、ループあり変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_46に移行する。
【0864】
s5_15_54では、ループなし変数一対一対応関係情報のfの情報に対して、fのlatの値をLatency値、fのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_55に移行する。
【0865】
s5_15_55では、ループなし変数一対一対応関係情報のvの情報に対して、vのlatの値をLatency値、vのfreqの値をThroughput値として、それぞれ追加し、処理s5_15_46に移行する。
【0866】
《検証スクリプト改変処理内のs5_16の詳細フロー》
図91にはs5_16の「リセットサイクル期間設定改変処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【0867】
s5_16_1では、リセットサイクル期間情報を読み込み、リセットサイクル期間を変数l1に格納し、処理をs5_16_2へ移行する。
【0868】
s5_16_2では、雛形スクリプトのスクリプトコマンドresetを識別し、設定されている波形を変数w1に格納し、処理をs5_16_3へ移行する。
【0869】
s5_16_3では、変数w1からリセット値を識別し、リセット値が設定されているサイクル期間を変数l2に格納し、処理をs5_16_4に移行する。
【0870】
s5_16_4では、変数lにl2+l1の値を格納し、処理をs5_16_5に移行する。
【0871】
s5_16_5では、リセット値をl2サイクル、非リセット値をl1サイクルとし、2つの波形を連結したものを変数wに格納し、処理をs5_16_6に移行する。
【0872】
s5_16_6では、スクリプトコマンドresetの-r、-i の両者の、-lenghに対して変数lの値を指定し、リセットサイクル期間の波形として変数wの波形を指定し、処理を終了する。
【0873】
《検証スクリプト改変処理内のs5_18の詳細フロー》
図92にはs5_18の「変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【0874】
s5_18_1では、「ループあり変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_2に移行する。
【0875】
s5_18_2では、「ループあり変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_3に移行する。
【0876】
s5_18_3では、第1の検証スクリプトに対して、ループあり変数一対一対応設定と、ループあり変数非一対一対応設定を追加したスクリプトを第2の検証スクリプトとして出力し、処理をs5_18_4に移行する。
【0877】
s5_18_4では、「ループなし変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_5に移行する。
【0878】
s5_18_5では、「ループなし変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」を実施し、処理をs5_18_6に移行する。
【0879】
s5_18_6では、第2の検証スクリプトに対して、ループなし変数一対一対応設定と、ループなし変数非一対一対応設定を追加したスクリプトを第3の検証スクリプトとして出力し、処理を終了する。
【0880】
《検証スクリプト改変処理内のs5_18_1の詳細フロー》
図93にはs5_18_1の「ループあり変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【0881】
s5_18_1_1では、ループあり変数一対一対応関係情報を読み込み、その情報を成す集合をVとし、処理をs5_18_1_2に移行する。
【0882】
s5_18_1_2では、集合Vに含まれる高位レベル記述の変数情報の集合を識別し、その集合を集合変数Varに代入し、処理をs5_18_1_3に移行する。
【0883】
s5_18_1_3では、集合Vに含まれているRTLのFF情報の集合を識別し、その集合を集合変数Fに代入し、処理をs5_18_1_4に移行する。
【0884】
s5_18_1_4では、集合Varが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_1_5に移行する。
【0885】
s5_18_1_5では、var∈Varを一つ取り、Var=Var-{var}とし、処理をs5_18_1_6へ移行する。
【0886】
s5_18_1_6では、varに対応するRTLのFFであるf∈Fを一つ取り、F=F-{f}とし、処理をs5_18_1_7に移行する。
【0887】
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に移行する。
【0888】
《検証スクリプト改変処理内のs5_18_2の詳細フロー》
図94にはs5_18_2の「ループあり変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【0889】
s5_18_2_1では、ループあり変数非一対一対応関係情報を読み込み、その情報を成す集合をFとし、処理をs5_18_2_2に移行する。
【0890】
s5_18_2_2では、集合Fが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_2_3に移行する。
【0891】
s5_18_2_3では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_18_2_4へ移行する。
【0892】
s5_18_2_4では、スクリプトコマンドconditional_flop_mapの-iに対して、[ <fのFF名> ]を指定し、処理をs5_18_2_5に移行する。
【0893】
s5_18_2_5では、fとの対応情報である数2の情報を集合変数Vに代入し、処理をs5_18_2_6に移行する。
【0895】
s5_18_2_6では、集合Vが空か否かを判定し、その場合、処理をs5_18_2_2に移行し、そうでない場合、s5_18_2_7に移行する。
【0896】
s5_18_2_7では、v=λ∧var∈Vを一つ取り、V=V-{v}とし、処理をs5_18_2_8へ移行する。
【0897】
s5_18_2_8では、スクリプトコマンドconditional_flop_mapの-rに対して、
[ <vの変数名var> -cond <vの代入実行条件λ> ]を指定し、処理をs5_18_2_6に移行する。
【0898】
《検証スクリプト改変処理内のs5_18_4の詳細フロー》
図95にはs5_18_4の「ループなし変数一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【0899】
s5_18_4_1では、ループあり変数一対一対応関係情報を読み込み、その情報を成す集合をVとし、処理をs5_18_4_2に移行する。
【0900】
s5_18_4_2では、集合Vに含まれる高位レベル記述の変数情報の集合を識別し、その集合を集合変数Varに代入し、処理をs5_18_4_3に移行する。
【0901】
s5_18_4_3では、集合Vに含まれているRTLのFF情報の集合を識別し、その集合を集合変数Fに代入し、処理をs5_18_4_4に移行する。
【0902】
s5_18_4_4では、集合Varが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_4_5に移行する。
【0903】
s5_18_4_5では、var∈Varを一つ取り、Var=Var-{var}とし、処理をs5_18_4_6へ移行する。
【0904】
s5_18_4_6では、varに対応するRTLのFFであるf∈Fを一つ取り、F=F-{f}とし、処理をs5_18_1_7に移行する。
【0905】
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に移行する。
【0906】
《検証スクリプト改変処理内のs5_18_5の詳細フロー》
図96にはs5_18_5の「ループなし変数非一対一対応関係情報を対象とした変数・FF対応設定生成処理」の処理フローが例示される。各ステップの内容は以下の通りである。
【0907】
s5_18_5_1では、ループあり変数非一対一対応関係情報を読み込み、その情報を成す集合をFとし、処理をs5_18_5_2に移行する。
【0908】
s5_18_5_2では、集合Fが空か否かを判定し、その場合、処理を終了し、そうでない場合、s5_18_5_3に移行する。
【0909】
s5_18_5_3では、f∈Fを一つ取り、F=F-{f}とし、処理をs5_18_5_4へ移行する。
【0910】
s5_18_5_4では、スクリプトコマンドconditional_flop_mapの-iに対して、[ <fのFF名> ]を指定し、処理をs5_18_5_5に移行する。
【0911】
s5_18_5_5では、fとの対応情報である前記数2に示される情報を集合変数Vに代入し、処理をs5_18_5_6に移行する。
【0912】
s5_18_5_6では、集合Vが空か否かを判定し、その場合、処理をs5_18_5_2に移行し、そうでない場合、s5_18_5_7に移行する。
【0913】
s5_18_5_7では、v=λ∧var∈Vを一つ取り、V=V-{v}とし、処理をs5_18_5_8へ移行する。
【0914】
s5_18_5_8では、スクリプトコマンドconditional_flop_mapの-rに対して、
[ <vの変数名var> -cond <vの代入実行条件λ> ]を指定し、処理をs5_18_5_6に移行する。
【0915】
2−5.第5の実施の形態
上記実施の形態で述べた手法は、下記の場合に拡張可能である。即ち、高位レベル記述と人手作成RTLを対象とした場合である。即ち、高位レベル記述を機能モデルとして、機能等価となるRTLを人手で作成し、両者の等価性検証を実施する場合(実施例1が対象としたRTLを含むより一般の場合)である。
図97にはその場合の情報抽出処理の詳細が例示される。
【0916】
この場合、次を前提とする。即ち、高位レベル記述と人手作成RTL間の、入力・出力Portの対応関係情報が与えられていることである。また、人手作成RTL30から状態遷移表が抽出可能か、または仕様記述として状態遷移表が存在することである。RTL記述が2プロセスモデルの場合、状態遷移表の抽出は、状態遷移表と2プロセスモデルの定義から、容易に実現可能である。よって、2プロセスモデルRTL記述からの状態遷移表抽出処理s60を追加すればよい。
【0917】
今まで説明した動作合成結果RTLを対象とした場合との違いは次の通りである。第1に、高位等価性検証用の雛形スクリプトが生成されない。したがって、雛形スクリプト情報の生成が別途必要になる。したがって、検証スクリプト改変処理を、検証スクリプト生成処理s50へ変更する。
【0918】
第2に、合成結果RTL回路構造の推定に必要となる。動作合成スクリプトや合成ディレクティブ情報が与えられない。人手作成RTL30の入出力サイクル情報の取得が別途必要となるが、「既存Simベースの等価性判定手法」での人手作成RTLの構造推定時に、同時に推定値を取得する事が可能である。また、人手作成RTLの回路構造の推定手段が別途必要となるが、基本的には、下記の何れかの場合分けのみが行えれば良い。第1は、サイクル精度合成RTLである。この場合、サイクル動作込みで一致しているか判定が必要になる。対応FF抽出では、サイクル精度合成RTLでの処理を修正して流用可能である。第2は、上記以外のRTLである。この場合、対応FF抽出では、入出力スループット比一定/非一定RTLの処理を修正して流用可能である。
【0919】
《情報抽出処理の概要》
図97に例示された情報抽出処理の概要を説明する。
【0920】
データ依存解析処理s1では、
図16の場合と同じく、高位レベル記述1を入力として、変数のデータ依存関係解析を実施し、各変数に対して、合成結果RTLにてフィードバックループを伴うFFに対応付けられる可能性があるか否か推定し、その分類結果を変数依存関係情報に格納する。
図16の場合と全く同じであるため、更なる詳細に付いては説明を省略する。
【0921】
入出力サイクル情報抽出処理s20では、Pipeline情報31、高位レベル記述1と人手作成RTL30のPort対応情報32、及び人手作成RTL30を読み込み、「既存Simベース等価性判定手法」を用いて、ランダムSimをNサイクル実行する事で、Pipeline回路として実装されている場合、人手作成RTL30が指定Pipeline構造を持つか否かの検証を実施する。Pipeline回路として実装されていない場合、サイクル精度合成RTLに該当するか否かや、周期的な入出力を行うRTLとなっているか否かを判定するとともに、Simにて取得した実行系列から、高位レベル記述と人手作成RTLの各入力・出力Portのスループットサイクル数の推定を実施する。これら取得した情報を入出力サイクル情報20に格納する。尚、「既存Simベース等価性判定手法」にて不一致となった場合は、その時点で後続の処理を含め中断し、検証結果として「不一致」を返す。
【0922】
状態遷移表抽出処理s60では、人手作成RTL30が2プロセスモデルにて記述されている事を前提に、人手作成RTL30からの状態遷移表6の抽出を行う。状態遷移表の定義で示したように、この実現方法は自明であるため、更なる詳細に付いては説明を省略する。
【0923】
対応FF抽出処理s30では、高位レベル記述1、人手作成RTL30、変数依存関係情報21、状態遷移表6、Port対応情報31、及び入出力サイクル情報20を読み込み、高位レベル記述1内の変数と人手作成RTL30内のFFの対応関係を解析する。ここで、人手作成RTL30にてフィードバックループを伴うFFに対応付けられる可能性のない変数(以下、ループなし変数)に関しては、一対一に対応するFFが各変数に存在するか否かを解析する。存在した場合、その対応関係をループなし変数一対一対応関係情報に格納する。人手作成RTL30にてフィードバックループを伴うFFに対応付けられる可能性がある変数(以下、ループあり変数)に関しては、先ず一対一に対応するFFが各変数に存在するか否かを解析する。存在した場合、その対応関係をループあり変数一対一対応関係情報に格納する。一対一に対応するFFが存在しなかった変数が残っていれば、状態遷移表のFFへの代入条件に着目して、条件付きで対応付けられるFFが存在するか否かを解析する。存在した場合、その対応関係をループあり変数非一対一対応関係情報に格納する。即ち、
図16の場合との相違点は、入出力サイクル抽出処理s20で、処理終了となった場合を考慮する必要がある部分と、合成結果RTLの代わりに人手RTLを読み込む部分の、2つのみである。
【0924】
リセット伸長サイクル抽出処理s40では、人手作成RTL30、ループあり変数一対一対応関係情報22、及びループあり変数非一対一対応関係情報23、入出力サイクル情報20を入力とし、RTL記述内のループあり変数に対応付けられたFFの成すフィードバックループが存在するか否かを解析し、存在した場合、各フィードバックループ内の全FFに値伝播を行うのに必要となる最小のサイクル数を求める。このサイクル情報の中で、最大値をPipeline回路でない場合、リセットサイクル期間情報に格納する。Pipeline回路である場合、この最大値とレイテンシサイクル数-1の値で大きい方を、リセットサイクル期間情報に格納する。一方、RTLにてフィードバックループを構成しなかった場合は、この変数の持つ対応関係情報を、夫々ループなし変数一対一対応関係情報24とループなし変数非一対一対応関係情報25に格納し、この変数を夫々夫々ループあり変数一対一対応関係情報22とループあり変数非一対一対応関係情報23から削除する。即ち、
図16の場合との相違点は、入出力サイクル抽出処理s20で、処理終了となった場合を考慮する必要がある部分と、合成結果RTLの代わりに人手RTL30を読み込む部分の、2つのみである。
【0925】
検証スクリプト生成処理s50では、高位レベル記述1、人手作成RTL30、Port対応情報31、入出力サイクル情報20、4つの変数・FF対応関係情報(ループあり変数非一対一対応関係情報23、ループあり変数一対一対応関係情報22、ループなし変数非一対一対応関係情報25、ループなし変数一対一対応関係情報24)、及びリセットサイクル期間情報を入力として、検証スクリプトを出力する。
【0926】
《入出力サイクル情報抽出処理s20》
入出力サイクル情報抽出処理s20について説明する。
【0927】
入出力サイクル情報抽出処理s20は、Pipeline情報32、高位レベル記述1、及び人手作成RTL30を読み込み、下記の処理を実施する。
【0928】
第1には、高位レベル記述の入力・出力のスループットサイクル数を抽出する。尚、Pipeline情報には下記が含まれる。ひとつには、人手作成RTLがPipeline回路か否かの情報である。また、人手作成RTLがPipeline回路の場合、下記Pipeline構造情報を含む。即ち、Pipeline回路全体でのThroughput/Latency情報、各入力・出力が割当てられているPipeline Stage情報、及び
図16の場合におけるPipeline化RTLを生成するための合成制約情報と同一の情報、である。
【0929】
第2には、人手作成RTLの入力・出力のスループットサイクル数を抽出する。特に、Pipeline情報に、人手RTLがPipeline回路であると指定されている場合は、Pipeline構造情報に矛盾した動作を行うか否かの検証を、「既存Simベース等価性判定手法」にて実施する。矛盾した動作を行う場合、その時点で後続の処理を含め中断し、「Pipeline構造仕様不一致」を返す。
【0930】
第3には、人手作成RTLの構造情報の抽出し、
Pipelined RTL:回路全体での固定のThroughput/Latencyサイクルを持つRTL、
サイクル精度RTL:高位レベル記述の各入力から各出力に至る消費サイクルが維持されたRTL、
周期比一定RTL:高位レベル記述の各入力・出力スループットが一定で、人手RTLの各入力・出力スループットが一定であり、各スループットサイクルの比が一定値となるRTL、
周期比非一定RTL:上記2つ以外のRTL、
に分類する。
【0931】
《高位レベル記述の入力・出力のスループットサイクル数抽出処理の概要》
前記高位レベル記述の出力スループットサイクル数抽出処理において、抽出すべき情報は、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)の情報である。
【0932】
各出力のThroughputサイクル情報の取得については、合成スクリプトや合成ディレクティブを変更し、サイクル精度合成を実施する内容に修正し、サイクル精度合成RTLを対象とした入力・出力Throughputサイクル情報抽出処理をそのまま実施しても良いが、本実施の形態では、「既存Simベース等価性判定手法」にて取得した、Sim結果の入力・出力信号系列からの推定を実施する手法を開示する。
【0933】
入出力サイクル情報の出力については、各入力・出力に対応するThroughputサイクル情報(一定か否か)、及び、全出力・全入力共通のThroughputサイクル情報(一定か否か)を
図98のテーブル形式にて出力する。即ち、
図16で説明した手法にて、高位レベル記述に対して、
図16における「サイクル精度RTLを対象とした各入力・出力変数のスループットサイクル情報の取得」処理をそのまま適用すれば良い。
【0934】
《人手作成RTLの出力のスループットサイクル数抽出処理の概要》
特開2009-230451号公報の記載では、サイクルを無視して同一の値変化を持つ入力信号系列が高位レベル記述とRTLに与えられた場合に、高位レベル記述と合成結果RTLで対応関係にある出力対から、サイクルを無視して同一の値変化を持つ出力信号系列が得られるかを、ランダムSimにて検証する手法(以下、「既存Simベース等価性判定手法」)が開示されている。
【0935】
従って、Port対応情報、高位レベル記述、及び人手作成RTLを読み込み、特開2009-230451号高位方の開示されている手法を適用し、Nサイクル分の各入力値及び各出力値の変化系列を取得可能である。
【0936】
Pipeline情報にて、Pipeline回路であると指定されている場合は、各信号の値変化間隔がPipeline構造情報に矛盾した動作を行うか否かを検証する。矛盾がある場合は、「Pipeline構造仕様不一致」返し、矛盾しない場合は、Pipeline構造情報から
図16の場合と同様の手続きにて、入出力サイクル情報を抽出する。
【0937】
Pipeline回路でないと指定された場合は、各信号の値変化間隔が一定になっているかを判定し、一定の場合、その一定サイクル数を当該信号のスループットサイクル数とし、性質を‘一定’とし、入出力サイクル情報に格納する。
【0938】
一方、一定でない場合は、得られた複数のサイクル数の最大公約数を当該信号のスループットサイクル数とし、性質を‘非一定’として、入出力サイクル情報に格納する。
【0939】
尚、特開2009-230451号公報ではRTL記述への入力信号の変化サイクルの取得手段は直接述べられていないが、RTLからの入力FIFO群への読出しサイクルを所得する事で、入力信号の変化サイクルとして識別可能である。
【0940】
また、各入力・出力信号の系列としては、(信号値, サイクル数)を要素とする、サイクル数に関して昇順に整列したリスト形式として識別可能であり、そのように情報を格納しているものとする。
【0941】
特に、特開2009-230451号公報に記載の方法を用いたランダムSimにて、高位レベル記述とRTL記述の入出力動作が完全に一致する場合、RTL記述をサイクル精度RTLとして識別する。
【0942】
全ての入力[出力]の性質が“一定”であり、Throughputサイクル数が全て同一である場合、全入力[出力]の性質を“一定とし、そのサイクル数を全入力[出力]のThroughputサイクル数とする。そうでない場合、全入力[出力]の性質を”非一定“とし、全ての入力[出力]のThroughputサイクル数の最大公約数を、全入力[出力]のThroughputサイクル数とする。
【0943】
ここで、ランダム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を用いた場合、実行時間は長大化するが、上記判定での精度が向上する。
【0944】
尚、スループットサイクル数の格納形式として
図99の形式を採用することができる。
【0945】
《入出力サイクル情報抽出処理s20の詳細》
図100には入出力サイクル情報抽出処理s20の詳細フローが例示される。各ステップの内容は以下の通りである。
【0946】
s20_1では、大域変数abortに0を代入し、処理をs20_2へ移行する。
【0947】
s20_2では、高位レベル記述、人手作成RTL、Pipeline情報、及びPort対応情報を読み込み、高位レベル記述の入力Portの集合をI1、出力Portの集合をO1、人手RTLの入力Portの集合をI2、出力Portの集合をO2とし、処理をs20_3へ移行する。
【0948】
s20_3では、特開2009-230451号公報に開示されているSimモデル生成手段適用し、生成Simモデルを対象にNサイクル分のSimを実行し、処理をs20_4へ移行する。
【0949】
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へ移行する。
【0950】
s20_5では、Sim結果が一致しているか否か判定し、一致している場合、処理をs20_6へ移行し、そうでない場合、s20_11へ移行する。
【0951】
s20_6では、高位レベル記述と人手RTLの入力信号系列及び出力信号系列が、夫々完全一致(I1sig == I2sig ∧ O1sig == O2sig)しているか否か判定し、完全一致している場合、処理をs20_7へ移行し、そうでない場合、s20_8へ移行する。
【0952】
s20_7では、変数flgに文字列CAを代入し、処理をs20_8へ移行する。
【0953】
s20_8では、Pipeline情報にてPipeline指定があるか否か判定し、ある場合、処理をs20_9へ移行し、そうでない場合、s20_14へ移行する。
【0954】
s20_9では、後述する「Pipeline構造仕様検証」を実施し、処理をs20_10へ移行する。
【0955】
s20_10では、人手RTLがPipeline構造仕様を満たすか否か判定し、満たす場合、処理をs20_12へ移行し、満たさない場合、s20_11へ移行する。
【0956】
s20_11では、大域変数abortに1を代入し、処理を終了する。
【0957】
s20_12では、
図16の実施の形態にて定義済みの処理である「Pipeline合成RTLを対象とした情報抽出処理」を実施し、処理をs20_13へ移行する。
【0958】
s20_13では、変数flgに文字列PIPEを代入し、処理をs20_14へ移行する。
【0959】
s20_14では、集合の集合を表す大域変数Tsigに対して、Tsig={I1sig, O1sig, I2sig, O2sig}とし、処理をs20_15へ移行する。
【0960】
s20_15では、Tsigが空であるか否か判定し、空である場合、処理をs20_18へ移行し、空でない場合、s20_16へ移行する。
【0961】
s20_16では、tsig∈Tsigを一つ取り、Tsig=Tsig-{tsig}とし、処理をs20_17へ移行する。
【0962】
s20_17では、後述する「tsigに対してのThroughputサイクル数推定処理」を実施し、処理をs20_15へ移行する。
【0963】
s20_18では、I1sig, I2sigに対応する入力サイクル情報、即ち高位レベル記述の入力サイクル情報と、人手RTL記述の入力サイクル情報を読み込み、処理をs20_19へ移行する。
【0964】
s20_19では、高位レベル記述と人手RTL記述夫々に対応する入力サイクル情報での全入力の性質が、双方ともに“一定”か否か判定し、そうなる場合、処理をs20_20へ移行し、そうでない場合、s20_24へ移行する。
【0965】
s20_20では、高位レベル記述と人手RTL記述夫々に対応する入力サイクル情報での対応するPortのThroughputサイクルの比を各々求め、それらが全て同一値になっているか否か判定し、同一値の場合、処理をs20_21へ移行する。そうでない場合、s20_24へ移行する。
【0966】
s20_21では、O1sig, O2sigに対応する出力サイクル情報、即ち高位レベル記述の出力サイクル情報と、人手RTL記述の出力サイクル情報を読み込み、処理をs20_22へ移行する。
【0967】
s20_22では、高位レベル記述と人手RTL記述夫々に対応する出力サイクル情報での全出力の性質が、双方ともに“一定”か否か判定し、そうなる場合、処理をs20_23へ移行する、そうでない場合、s20_24へ移行する。
【0968】
s20_23では、高位レベル記述と人手RTL記述夫々に対応する出力サイクル情報での対応するPortのThroughputサイクルの比を各々求め、それらが全て同一値になっているか否か判定し、同一値の場合、処理をs20_25へ移行する。そうでない場合、s20_24へ移行する。
【0969】
s20_24では、変数flgが文字列CAに一致するか否か判定し、一致する場合、処理をs20_26へ移行する。そうでない場合、s20_27へ移行する。
【0970】
s20_25では、変数flgが文字列PIPEに一致するか否か判定し、一致する場合、処理をs20_38へ移行する。そうでない場合、s20_30へ移行する。
【0971】
s20_26では、人手RTLをサイクル精度RTLとして識別し、処理をs20_31へ移行する。
【0972】
s20_27で、変数flgが文字列PIPEに一致するか否か判定し、一致する場合、処理をs20_38へ移行し、そうでない場合、s20_29へ移行する。
【0973】
s20_28では、人手RTLをPipelined RTLとして識別し、処理をs20_31へ移行する。
【0974】
s20_29では、人手RTLを周期比一定RTLとして識別し、処理をs20_31へ移行する。
【0975】
s20_30では、人手RTLを周期比非一定RTLとして識別し、処理をs20_31へ移行する。
【0976】
s20_31では、識別した人手RTLの分類情報を、人手RTLの入出力サイクル情報に追加格納し、処理を終了する。
【0977】
《入出力サイクル情報抽出_s20_9の詳細フロー》
図101にはs20_9のPipeline構造仕様検証での詳細処理フローが例示される。各ステップの内容は以下の通りである。
【0978】
20_9_1では、変数i0を代入し、処理をs20_9_2へ移行する。
【0979】
s20_9_2では、変数ThにPipeline構造情報にて指定されているThroughputサイクル数を、変数LaにLatencyサイクル数を代入し、処理をs20_9_3へ移行する。
【0980】
s20_9_3では、人手RTLの入力信号系列I2sigと出力信号変化系列O2sigの和集合を取り、サイクル数をキーとして要素を昇順にソートし、得られた集合をIosigとし、処理をs20_9_4へ移行する。
【0981】
s20_9_4では、IOsigが空か否か判定し、空の場合、処理をs20_9_13へ移行する。空でない場合、s20_9_5へ移行する。
【0982】
s20_9_5では、IOsig内で、サイクル数がサイクル期間[Th×i, La+Th×i]に含まれる要素からなる部分集合を識別し、それをsig1とし、集合sig2を空集合とし、処理をs20_9_6へ移行する。
【0983】
s20_9_6では、集合sig1が空か否か判定し、空の場合、処理をs20_9_11へ移行し、空でない場合、s20_9_7へ移行する。
【0984】
s20_9_7では、s∈sig1を一つ取り、sig1=sig1-{s}とし、処理をs20_9_8へ移行する。
【0985】
s20_9_8では、sのサイクル数が、“Th×i+指定Stageサイクル数“に一致するか否か判定し、一致する場合、処理をs20_9_10へ移行する。一致しない場合、s20_9_9へ移行する。
【0986】
s20_9_9では、 sのサイクル数が、“Th×i+指定Stageサイクル数+k×Th“に一致するような正数k∈[Th×i, floor(La/Th)+Th×i]が存在するか否か判定する。存在した場合、処理をs20_9_6へ移行し、存在しない場合、s20_9_12へ移行する。ここで、関数floor()は、割り算結果の切り下げを返す関数である。
【0987】
s20_9_10では、sig2=sig2∪{s}を実行し、処理をs20_9_6へ移行する。
【0988】
s20_9_11では、IOsig=IOsig-sig2、及びi=i+1を実行し、処理をs20_9_4へ移行する。
【0989】
s20_9_12では、仕様充足=False、即ち人手RTLがPipeline構造情報に指定された仕様が満たさないとして、処理を終了する。
【0990】
s20_9_13では、仕様充足=True、即ち人手RTLがPipeline構造情報に指定された仕様が満たされるとして、処理を終了する。
【0991】
《入出力サイクル情報抽出_s20_17の詳細フロー》
図102にはs20_17のThroughputサイクル数推定での詳細な処理フローが例示される。各ステップの内容は以下の通りである。
【0992】
s20_17_1では、Tsigに対応するPort集合をPとし、処理をs20_17_2へ移行する。
【0993】
s20_17_2では、集合Pが空か否か判定し、空の場合、処理をs20_17_9へ移行する。空でない場合、s20_17_3へ移行する。
【0994】
s20_17_3では、p∈Pを一つ取り出し、P=P-{p}とし、処理をs20_17_4へ移行する。
【0995】
s20_17_4では、Tsig内のpに対応する要素数を求めMとし、処理をs20_17_5へ移行。ここで、当該要素の夫々のサイクル数が、tc(i)(0≦i<M)で表わされているものとする。
【0996】
s20_17_5では、連続する要素間のサイクル間隔の最小値を求め変数Tに代入、即ち、T=min{tc(i+1)-tc(i)|0≦i<M-1}を実行し、処理をs20_17_6へ移行する。
【0997】
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へ移行する。
【0998】
s20_17_7では、Port pのThroughputサイクル数をTとし、性質を“一定”として、Port集合Pに対応する入出力サイクル情報に格納し、処理をs20_17_2へ移行する。
【0999】
s20_17_8では、Port pのThroughputサイクル数を連続する要素間のサイクル間隔(tc(i+1)-tc(i)(0≦i<M-1))の最大公約数Tとし、性質を“非一定”として、Port集合Pに対応する入出力サイクル情報に格納し、処理をs20_17_2へ移行する。
【1000】
s20_17_9では、Port集合Pに属するPort pの性質が全て“一定”であるか否か判定する。そうである場合、処理をs20_17_10へ移行し、そうでない場合、s20_17_11へ移行する。
【1001】
s20_17_10では、Port集合Pに対応する入出力サイクル情報の全入力または全出力の性質へ、“一定”を格納し、処理をs20_17_2へ移行する。
【1002】
s20_17_11では、Port集合Pに対応する入出力サイクル情報の全入力または全出力の性質へ、“非一定”を格納し、処理をs20_17_4へ移行する。
【1003】
s20_17_12では、Port集合Pに属するPort pのThroughputサイクル数が全て同一か判定する。全て同一の場合、処理をs20_17_13へ移行し、一つでも異なる場合、s20_17_14へ処理を移行する。
【1004】
s20_17_13では、Port集合Pに対応する入出力サイクル情報の全入力または全出力のThroughputサイクル数へ、Tを格納し、処理を終了する。
【1005】
s20_17_14では、Port集合Pに対応する入出力サイクル情報の全入力または全出力のThroughputサイクル数へ、全PortのThroughputサイクル数の最大公約数を格納し、処理を終了する。
【1006】
《対応FF抽出処理s30の詳細》
対応FF抽出処理s30の処理内容は
図16の第4の実施の形態における対応FF抽出処理s3とほぼ同じである。相違点は以下の通りである。即ち、入力情報として、
図16では合成結果RTLを読み込んでいたが、本実施の形態5では人手RTLを読み込む。入出力サイクル情報抽出処理で、大域変数abortが1に設定されている場合、本第5の実施の形態では、処理を実施しない。人手RTLの分類名が異なるが、
図103の対応に従えばよい。
【1007】
従って、
図16の実施に形態4に対して、大域変数abortの値に従って、処理を実施するか否かの処理を追加し、
図103に示した対応関係に従い各処理を読み替え、合成結果RTLを人手RTLに読み替えれば、第5の実施の形態の処理を定義可能である。
【1008】
図104にはそのような読み替えを前提とした処理のフローチャートが例示される。各ステップの内容は以下の通りである。
【1009】
s30_2では、第4の実施の形態で定義済みの「対応FF抽出部の全体処理」を、RTLの分類名の対応関係に従い、読み替える。そして、合成結果RTL読み込み処理を、人手RTL読み込み処理に置換えて実行し、処理を終了する。
【1010】
s30_1では、大域変数abortが1と等しいか否か判定し、等しい場合、処理を終了し、異なる場合、処理をs30_2へ移行する。
【1011】
《リセット伸長サイクル抽出処理s40の詳細》
リセット伸長サイクル抽出処理s40の内容は
図16の第4の実施の形態とほぼ同一である。
【1012】
相違点は下記の通りである。即ち、入力情報として、実施例1では合成結果RTLを読み込んでいたが、実施例3では人手RTLを読み込む。入出力サイクル情報抽出処理で、大域変数abortが1に設定されている場合、本実施の形態では、処理を実施しない。人手RTLの分類名が異なるが、
図105の対応に従えばよい。
【1013】
従って、
図16の第4の実施の形態に対して、大域変数abortの値に従って、処理を実施するか否かの処理を追加し、
図105に示した対応関係に従い各処理を読み替え、合成結果RTLを人手RTLに読み替えれば、
図97の第5の実施の形態の処理を定義可能である。
【1014】
図106にはそのような読み替えを前提とした処理のフローチャートが例示される。各ステップの内容は以下の通りである。
【1015】
s40_1では、大域変数abortが1と等しいか否か判定し、等しい場合、処理を終了し、異なる場合、処理をs40_2へ移行する。
【1016】
s40_2では、
図16の第4の実施の形態で定義済みの「リセット伸長サイクル抽出部の処理」を、RTLの分類名の対応関係に従い、読み替え、合成結果RTL読み込み処理を、人手RTL読み込み処理に置換えて実行し、処理を終了する。
【1017】
《検証スクリプト生成処理s50の詳細》
検証スクリプト生成処理s50の処理内容は
図16における第4の実施の形態の検証スクリプト改変処理とほぼ同一である。相違点は次の通りである。即ち、入力情報として、第4の実施の形態では合成結果RTLを読み込んでいたが、
図97の第5の実施の形態では人手RTLを読み込む。入出力サイクル情報抽出処理で、大域変数abortが1に設定されている場合、第5の実施の形態では、処理を実施しない。入力情報として、
図16の第4の実施の形態では雛形検証スクリプトを読み込んでいたが、
図97の第5の実施の形態では雛形検証スクリプトは存在しない。人手RTLの分類名が異なるが、
図107の対応に従えばよい。
【1018】
第5の実施の形態では雛形検証スクリプトが存在しないため、「高位レベル記述/合成結果RTLのファイル読込み」コマンドや「クロック情報設定」コマンドを別途検証スクリプトに設定する必要がある。ただし、処理内容は自明であるため、その詳細な説明は省略する。
【1019】
各RTL分類で実施されていた「入出力対応設定改変処理」が「入出力対応設定生成処理」に置換される。また、
図16の第4の実施の形態では、雛形検証スクリプトから抽出していた入出力ポート対応関係情報が、
図97の第5の実施の形態では、Port対応情報で与えられることになる。
【1020】
図16の第4の実施の形態の「リセットサイクル期間設定改変処理」が、
図97の第5の実施の形態では以降で示す「リセットサイクル期間設定生成処理」に置換される。
【1021】
従って、
図16の第4の実施の形態に対して、大域変数abortの値に従って、処理を実施するか否かの処理を追加し、第4の実施の形態との相違点を考慮した形で、第5の実施の形態の処理を定義可能である。
【1022】
図108には
図16の第4の実施の形態との相違点を考慮した「検証スクリプト生成処理」のフローが例示される。各ステップの内容は次の通りである。
【1023】
s50_1では、大域変数abortが1と等しいか否か判定し、等しい場合、処理を終了し、異なる場合、処理をs50_2へ移行する。
【1024】
s50_2では、検証対象となる高位レベル記述と合成結果RTLのファイルを指定するコマンドを生成し、処理をs50_3に移行する。
【1025】
s50_3では、検証対象のクロック情報(クロック名、周期、Duty比など)を設定するコマンドを生成し、処理をs50_4に移行する。
【1026】
s50_4では、第4の実施の形態で定義済みの「検証スクリプト改変部」の処理を実施し、処理を終了する。ただし、「検証スクリプト改変部」の「リセットサイクル期間設定改変処理」は後述する「リセットサイクル期間設定生成処理」に置き換わる。
【1027】
《リセットサイクル期間設定生成処理の詳細》
前記リセットサイクル期間設定生成処理について説明する。リセットサイクル期間設定生成処理は、高位レベル記述とRTLに対して、高位レベル記述とリセットサイクル期間情報を使用し、以下を生成する。即ち、高位レベル記述/RTLそれぞれのリセットサイクル期間設定コマンド resetを生成する。高位レベル記述と合成結果RTLの両者で、リセット処理に差異がないことを前提とし、高位レベル記述からリセット信号名、リセット値、及びリセット処理に必要となるサイクル数を抽出する。抽出したリセット処理のサイクル数に、リセットサイクル期間情報のサイクル期間をあわせたサイクル期間を高位レベル記述/RTL記述の両者のresetコマンドに設定する。
【1028】
図109には「リセットサイクル期間設定生成処理」のフローが例示される。この処理は第4の実施の形態における
図91の処理に対応される。
図109の各ステップの内容は次に示す通りである。
図109におけるステップ番号は、
図91のステップ番号s5_16_1〜s5_16_6との対応付けが容易なように、便宜的にs50_16_1〜s50_16_6とした。
【1029】
s50_16_1では、リセットサイクル期間情報を読み込み、リセットサイクル期間を変数l1に格納し、処理をs50_16_2へ移行する。
【1030】
s50_16_2では、高位レベル記述を読込み、処理をs50_16_3へ移行する。
【1031】
s50_16_3では、高位レベル記述から、リセット信号名を変数nameに、リセット値を変数valに、リセット処理に必要となるサイクル数を変数l2に、それぞれ格納し、処理をs50_16_4に移行する。
【1032】
s50_16_4では、変数lにl2+l1の値を格納し、処理をs50_16_5に移行する。
【1033】
s50_16_5では、リセット値(val)をl2サイクル、非リセット値(¬val)をl1サイクルとし、2つの波形を連結したものを変数wに格納し、処理をs50_16_6に移行する。
【1034】
s50_16_6では、スクリプトコマンドresetの-r、-i の両者の、リセットポート名に変数nameの信号名を指定し、-lengthに対して変数lの値を指定し、リセットサイクル期間の波形として変数wの波形を指定し、処理を終了する。
【1035】
第5の実施の形態においても基本的に第1乃至第4の実施の形態と同様の作用効果を奏する。特に、それらとは異なり、動作合成前後ではない、高位レベル記述と人手作成RTLを対象とした高位等価性検証の高速化が可能となる。
【1036】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。動作記述としての高位レベル記述はSystemCに限定されず、ハードウェア記述がRTL記述に限定されず、それぞれ適宜変更可能である。
【1037】
本発明は、動作合成適用可能な電子回路や論理モジュールの設計に対して全般的に適用可能である。具体的には、MPEGなどの画像処理IP(IPとは半導体集積回路若しくはこれに適用される回路モジュールを総称する)、音声処理IP、通信処理IP、タイマやIICに代表されるマイコン周辺IPなどの設計に広く適用することができる。