プロセッサIPコアの実装手法:最適化により最大の性能を引き出す(2/3 ページ)
組み込みプロセッサを使用するアプリケーションでは、コストを抑えた上で、少しでも高い性能を得たいというケースが多い。ソフトIPを利用する場合に、この要求を満たすのは容易なことではない。しかし、適切な設計/実装フローを用いて最適化を実施すれば、最高の性能を引き出すことも可能である。
実装フロー
プロセッサIPコアを選定/構成し、マクロとプロセス技術を選択してスタンダードセルライブラリを決定したら、実装を開始することができる。各プロセッサベンダーは、汎用アプリケーション向けのリファレンス設計フローを提示している。しかし、最良の結果を得るには、一部の設計については標準的なフローを改変して対処する必要がある(図4)。例えば、マルチ閾値電圧について最適化を行ったり、DFM(Design for Manufacturing)技術を実装したり、サードパーティのツールを採用したりすることが考えられる。米Open-Silicon社のタイミング最適化ツール「CoreMAX」などでライブラリの拡張を行い、設計工程全体に適用することもできる。このツールは、ロジック用ライブラリのスタンダードセルを、タイミング性能を改善した最適化されたセルに置き換えるものだ*1)。具体的には、フルカスタムセルやスタンダードセルを改変した新しいセルを作成し、設計フロー全体において通常のスタンダードセルのように使用することができる。選択したプロセス技術やスタンダードセルライブラリに対して適用し、設計フローの全体にわたって使用するのが最良の方法だ。
プロセッサIPベンダーのキットを利用して構成したHDL(ハードウエア記述言語)設計は、ほかの部分と統合することになる。この統合時には、例えばプロセッサ周辺のロジックにグローバルな電源管理モードを追加するといったことが行える。これにより、プロセッサの性能要求に基づいて消費電力を制御することが可能になる。
合成ツールには、設計のデータパス部分を実装するための多種多様なオプションが存在する。例えば、米Synopsys社の「DesignWare」を用いると、算術演算にかかわる部分の実装を改善することができる。RTL(Register Transfer Level)における最適化は、良い結果につながる。また、設計に対して、設定した性能目標が達成可能かどうかを示すフィードバックになる可能性もある。通常、この段階では、ノイズや寄生要素による遅延など、まだモデル化していない影響を考慮して性能にはマージンを持たせるのが一般的だ。
合成時には、数量は限定されるものの、拡張ライブラリのセルを使用することができる。合成におけるロジックの最適化の作業は、マッピングと再構築から成り、これらの工程では、多種多様な複合ゲートを追加することが有効な手段となる。拡張ライブラリを使用することにより、複合ゲートのドライブ特性と負荷特性の範囲を広くし、プロセッサ全体としての性能を高められる。
この工程では、クロック回路のモデル化と一部のブロックへの意図的なスキューの適用に関する調査も行うべきだ。例えば、クリティカルなメモリーパスでは、クロックにスキューを適用するとよい場合がある。設計フローの初期段階で、有効なクロックスキューを意図的に適用することにより、合成ツールはクリティカルパスを、ロジックを持たないただのメモリーパスと見なすことなく、正しく認識して最適化できるようになる。
プロセッサIPコアのベンダーは、何らかの推奨フロアプランを提供している。しかし、高い性能を得たければ、そのフロアプランを実装ごとに最適化する必要がある。プロセッサのアスペクト比とサイズを変更し、ベンダーが推奨するのとは異なる方法でチップ全体にわたって配置しなければならないかもしれない。マクロの電源グリッドとのインターフェース方法、プロセッサをチップのほかの部分に接続する端子の位置、消費電力の要件などを検討する必要がある。
ここで、フロアプランが下流のフローに及ぼす影響について考察してみよう。まずマクロへの電源は、スタンダードセルの列に干渉してはならない。また、デカップリングコンデンサと基板を接続するために、別の電源配線が必要になるケースもある。フロアプランを適切に使用することにより、クリーンアップの工程を省くことができたならば、設計をさらに優れたものとすることが可能になる。
配置の最適化には、ネットリストを基にした単なる配置だけではなく、サイズの変更やバッファリングが含まれる。IPベンダーは、いくつかの最適化コマンドを含む配置フローを提供しているが、この工程で利用可能な最適化手法はほかにも存在し、拡張ライブラリのセルを追加すると、さらに良い結果が得られる。最もクリティカルなパスのみでなく、ある程度クリティカルなパス全体に最適化を施すことにより、クリティカルでなかったパスが後工程の段階でクリティカルになるのを防ぐことができる。
配置を終えたら、クロックツリーを合成する。クロックツリーの合成でよく使用される2つの手法は、バランスツリー(Balanced Tree)合成とスキューツリー(Skewed Tree)合成である。バランスツリー合成では、エンドポイント間の差またはスキューの最小化を図るのに対し、スキューツリー合成では、設計のタイミングスラックが最小になるようにエンドポイントにスキューを加える。どちらの手法も、クロックツリー合成の前に適用した任意のクロックスキューをサポートする。例えば、ロジック合成および配置の工程でメモリー用のクロックにスキューを適用した場合、クロックツリー合成においてそのスキューが保たれる。
先述したように、クロックツリー合成の前にメモリーパスにスキューを適用してバランスツリー手法と組み合わせることにより、良い結果を得ることができる。このクロックツリー合成の後、配置の難しいパスが存在するならば、それを調整するために有効なスキューを戦略的に適用する。スキューツリー手法では、その使用を制限したとしても、クロックバッファが非常に多くなって設計内の要素が増えてしまう恐れがあるので注意を要する。
クロックツリー合成においてクリティカルパスのほかに検討しなければならないのは、クロック配線をほかの信号配線から隔離することである。クロック信号はサイクルごとにスイッチングし、無視できないレベルのノイズを発生させる。このノイズの影響を抑えるには、クロック配線をシールドするか、ほかの配線から距離を置かなければならない。プロセッサの実装フローには、近接する信号線へのノイズの影響を最小限にするために、シールドやスペーシングを選択するオプションを入れるべきである。
図5は、クリティカルパスの存在する回路の例である。クリティカルパスS2のスキューは、クロックバッファの遅延D1を減少させるか、バッファを取り除くことにより、その遅延分だけ改善する。だが、この手法では、クロックバッファD1を共有するフリップフロップにおいてデータを取り込むタイミングの劣化も生じるので、S1がクリティカルパスとなる可能性がある。
一方、図6の回路において、クリティカルパスS3は、遅延D2を増加させるか、バッファを加えることにより改善する。ただし、クロックバッファを共有するパスは、それと同じ分だけ劣化することになる。
配置とクロックツリー合成を終えたら、配線の工程に移る。配線では、シグナルインテグリティやタイミング、デザインルールについて考慮する必要がある。多くの場合、配線を行った後にも、タイミングを調整するためにさらなる最適化を行わなければならない。この工程で拡張ライブラリを使用すると、セルのサイズが適切になり、より効率的なタイミング調整が可能になる。例えば、クロックバッファの削除/追加やサイズの変更を行うことにより、有効なクロックスキューをさらに追加することもできる。
脚注:
※1…Roy, Rob, Debashis Bhattacharya, and Vamsi Boppana, "Transistor-Level Optimization of Digital Designs with Flex Cells," IEEE Computer, Volume 38, Issue 2, February 2005, p.53
Copyright © ITmedia, Inc. All Rights Reserved.