Technology Reports 2006

アルゴリズム合成とは?

はじめに

  アルゴリズムベースの合成は、ハードウェアのより効率的な生成と検証、設計アーキテクチャの最適化により良い制御性を与えることでハードウェア設計者を支援します。このフローは、ビット精度のクラス・ライブラリを含む純粋なC++のサブセットから開始します。このコードをアナライズし、アーキテクチャの制約を与え、スケジューリングを行うことで、合成可能なHDLを生成します。RTLの検証もまた、この設計プロセスにおける重要な部分と言えます。

  従来の設計フローでは、ハードウェア・アーキテクチャの開発とRTL合成用のVHDLやVerilogの記述に、かなりの努力を必要とします。このコードは、合成のための標準的な記述ルールに従い、タイミングを満足し、インタフェース仕様を実装し、かつ機能的に正しいものである必要があります。これらすべての制約を満足するには、設計チームには十分な時間を与えなくてはなりません。しかしながら設計者が、タイム・トゥ・マーケットのプレッシャーから、必要以上の機能や性能を持つ再利用ブロックやIPを使用することで、エリア面での妥協を強いられるのは、珍しいことではありません。

 5年程前、メンター・グラフィックスは、高位合成を実際の設計に対し適用可能とするための、おおよその基準を提案しました。第一に、新しいフローへの切り替えを正当化するには、高位合成による検証済みRTLの生成が、手動の手法に比べて1桁早いものでなくてはいけないというものです。すなわち、ある設計者が現在、1日あたり1,000ゲートの生成と検証を行っている場合、同じ設計者で10,000ゲートの生成と検証が行えなくては、この手法へ移行することは正当化できないということになります。第二に、同じパフォーマンスの設計を実現するためのエリアの増加が、 10%を超えてはならないというものです。

 次に、動作合成の失敗要因を解析しました。設計者は、インタフェース・プロトコルの定義にwait文が使用できることを期待していました。しかしながら、インタフェース・プロトコルの中断から動作合成によって追加される時間を抑制するための十分な情報をwait文は伝達することができません。この問題に対処すべく、インタフェース・プロトコルを定義する新しい制約が作成され、インタフェース・タイミングを完全に定義可能な合成用言語が作成されました。しかしながら、wait文とこれらのインタフェース・プロトコル制約の組み合わせは、動作合成を更に複雑なものにし、約束されていた生産性が達成できなくなり、結果として動作合成の終焉に至らせました。合成においては、SystemCを含むすべての動作記述言語におけるwait文がこの欠点に苦しむことになります。

 ただし、動作合成用のタイミング・プロトコル制約は、ソース内にタイミングや並列性を明示的に定義することなく、設計に使用することが可能です。タイミングや並列性のソース言語からの分離が、第一世代の高位合成(動作)と第二世代の高位合成(アルゴリズムベース)を分けるものと言えます。アルゴリズムベースの合成ツールでは、複雑なIOタイミングをソースの機能から分けて考えます。これにより、機能とタイミングの開発と検証を独立して行うことが可能になります。

Pure ANSI C++からの高位合成

  ANSI(American National Standards Institute)C++は、世界中で最も幅広く使用されているアルゴリズムベースのモデリング言語と言えるでしょう。この言語では、アルゴリズムを簡潔、明確、かつ効率的にモデル化するために必要なすべての要素が提供されます。また、ビット精度の動作には、一般的なクラス・ライブラリを使用することが可能です。また、C++向けに存在する多数のソフトウェア設計ツールとデバッグ・ツールを、ハードウェア設計に対しても利用することが可能になります。

 SystemCやSystemVerilogのような新しいモデリング言語を使用することもできますが、高位合成と比較して、ユーザーに対する新しい言語の教育が必要となります。更に、これらの言語における階層や並列性はシーケンシャルなC++から合成するツールによって自動的に生成可能であり、このような抽象度のシステム・モデリング言語をシステムレベル検証に利用することができるようになりました。設計者は、システム全体の構造に対してソース・コードを書き直すことなく迅速に変更することもできます。

 RTL合成の場合と同様に、デザインの解析は生成されるハードウェアと同じく重要です。デザインが遅すぎることが分かっても、修正方法が分からないのでは意味がありません。多くの高位合成ツールには、デザインの迅速な解析を可能にするデータパスおよびFSMビューワが組み込まれています。ただし、重要なのは、このビューワを実行中のデータベースの上位に実装することで、新しい設計制約に基づいた合成実行をすべてに対して行うことなく、インタラクティブかつインクリメンタルなデザインの最適化を可能とすることです。

その上でアーキテクチャに対する合成制約をデザインの解析結果に基づいて適用することが可能です。機能と設計意図を切り離すことで、アーキテクチャ変更にともなうソース・コードの再記述や再テストといった退屈なプロセスを回避できます。これらの制約は、階層、インタフェース、メモリ、ループ、および低位のタイミング制約に分けられます。階層制約では、シーケンシャルなデザインを複数の階層ブロックに分割し、それらの並列性を定義するものです。インタフェース制約は、デザインにおけるトランザクション・レベル通信、ピン・レベル・タイミング、およびフロー制御を定義するものです。メモリ制約は、ブロック間通信とブロック内の双方について、異なるメモリ・アーキテクチャの選択を可能にするものです。ループ制約は、デザイン内にある各ブロックに並列性を追加するもので、パイプライン処理化を含みます。最後の低位のタイミング制約も必要に応じて使用可能です。設計制約が完了したら、スケジューリングを実施することが可能です。これらの制約により、パフォーマンス要件を満たすために必要となる適切な並列性を、設計者が迅速に割り出すことが可能となります。すなわち、同一のシーケンシャルなC++コードを使って、非常にコンパクトな実装(シリアルなデザイン)から非常に高速な実装(パラレルなデザイン)までを実現することが可能になるわけです。

あらゆる高位合成ツールの中心はスケジューラです。すべてのアーキテクチャ制約が選択された後は、スケジューラがそれらを適用し、完全なタイミングを含むデザインを生成します。スケジューラは、クロック・ピリオドを含むすべてのタイミング制約への合致を受け持ちます。これは、RTL合成とアルゴリズムベースの合成の考え方の大きな違いの1つと言えます。アルゴリズムベースの合成では、特定のクロック速度での実行を想定した設計記述は行わずに、高位合成ツールがクロック速度制約に基づいたデザインの生成を行います。多くのツールが高位合成ツールを自称していますが、スケジューラ無しでは、単なる変換ソフトウェアであり、高位合成ツールで得られるはずの恩恵のほとんどが得られません。

階層的なガント・チャートはコンポーネントがどのように使用され、データがデザイン上でどう動くかを明確に理解する事が出来ます。(図をクリックすると拡大表示します)階層的なガント・チャートはコンポーネントがどのように使用され、データがデザイン上でどう動くかを明確に理解する事が出来ます。(図をクリックすると拡大表示します)

 スケジューラによるタイミング追加が完了したら、RTLを生成することが可能となります。このRTL生成には、デザインにおけるデータパス、コントロール、およびFSMの抽出が含まれます。生成されたデザインに対しては検証を行う必要があります。

 アルゴリズムベースの合成ツールは、デザインに対して追加されたタイミングと構造に関する全情報を持っています。すなわち、このツールにより、タイミングを含まないオリジナルのC++テストベンチをツールの全出力で再利用することも可能になります。設計検証が完了した後は、それらを標準的なRTL合成フローに受け渡すことができます。

メンター・グラフィックスのソリューション

 メンター・グラフィックスは、2004年のDACにおいて Catapult C Synthesisを発表しました。2004年に新たにユーザーとなった25社の内、およそ18社がこのツールをASIC設計に利用し、その一部は FPGAプロトタイプ構築にも同ツールを利用しています。ワイヤレス機器の設計企業である上位5社のうち4社で採用されたことにより、Catapult Cはワイヤレス通信デバイスの設計分野で最も幅広く利用されています。2番目に利用されているアプリケーション分野は動画および画像処理となります。

 アルゴリズムベースの合成は、シーケンシャルな言語記述からタイミングを含むRTLへの現実的なハードウェア合成を可能にした、最初の手法です。C++から始めることで、ソフトウェア、ハードウェア、およびシステムのモデル化に同一の言語を使用することが可能になりました。より多くの最適化オプションが選択可能となり、ハードウェア設計者は、データパス中心のデザインに何ヶ月も費やすことなく、手書き設計よりも常に優れた結果を数日で達成することが可能になります。今後10~15年間の設計課題に対応していくには、この目標がすべての設計で達成されねばなりません。

Catapult C Synthesisは抽象度の高いCスペックから高品質なハードウェアインプリメンテーションまでの、簡単かつ迅速なパスを提供します。((図をクリックすると拡大表示します)Catapult C Synthesisは抽象度の高いCスペックから高品質なハードウェアインプリメンテーションまでの、簡単かつ迅速なパスを提供します。((図をクリックすると拡大表示します)