【JSNUG】Synphony C CompilerによるC言語ベース設計事例
昨今のHLS(高位合成ツール)ムーブメントを語る上で外すことの出来ないツール、Synopsysの「Synphony C Compiler」について、その顧客事例を紹介する。
2010年10月15日、都内のホテルで開催された「SYNOPSYS USERS MEETING 2010」での事例講演。
オリンパスデジタルシステムデザイン株式会社 ハードウェア部 丸田知彦氏:
「Synphony C CompilerによるC言語ベース設計事例」
オリンパスデジタルシステムデザインは、オリンパスの子会社としてオリンパス製品向けの画像システムの研究開発を行う会社で、丸田氏はアルゴリズムのハード実装を担当する人物。同社では動画処理アルゴリズムの開発に動画のリアルタイム評価が必須という背景から、2009年旧Synfora社からC言語入力の高位合成ツール「PICO」を導入。その後SynopsysがSynforaを買収したことで「PICO」は「Synphony C Compiler」としてSynopsysから提供されるようになったが、同社では現在でも複数のプロジェクトで「Synphony C Compiler」を適用している。
今回、丸田氏が紹介した事例は、新規開発した画像処理アルゴリズムのプロトタイプ開発への「Synphony C Compiler」適用事例で、プロジェクトのターゲットはFPGA、フルHD60インターレースの性能で動作周波数75Mhz、回路規模300万ゲート以下という目標設定で、アルゴリズム開発者、ソフト開発者を含めた計6名のチームでハード化が施された。
丸田氏によると、階層的な設計が可能というのが「Synphony C Compiler」の特徴の一つで、今回のケースではハード化対象とした画像処理サブシステムのモジュール25個全てに「Synphony C Compiler」を適用し、トップの設計も全て「Synphony C Compiler」で実行。デバッグの効率性と合成時間短縮のためトップは3分割の形をとり、手設計したのは外部インタフェースのみで、回路規模としては99%を「Synphony C Compiler」で合成した。
※画像はオリンパスデジタルシステムデザイン提供のデータ
プロジェクトの初期段階において、丸田氏らのチームは比較的小規模な30万ゲート規模(合成した結果)のモジュールから「Synphony C Compiler」を使った合成を開始したが、出だしはあまりうまく行かなかった。コード量の制限で合成に失敗したり、メモリのポート数が増え実機に実装できないなど、処理性能の改善に17日間もの余計な工数を取られ、更に回路規模の削減に6日を割いた。この経験から、Cコードからのハード合成にはSW/HW双方のスキルが重要、コーディングやデバッグのガイドラインやチームでの情報共有の重要性などを認識した。
しかし、プロジェクト中盤で取り組んだ60万ゲート規模のモジュールの合成にあたっては、それまでの経験を生かし予定よりも5日もモジュールを完成する事に成功。ツールの制約や回路の性能を意識して「Synphony C Compiler」の入力Cコードをコーディングしたことが成功の要因だった。
トップの設計については、ハード設計の後工程をスムーズに進めることを念頭に、大きく下記3つのステップで進めた。まずプラットフォームを作り、そこに順次合成したモジュールを追加していくという形で、段階的にトップを設計することで設計の効率化を実現できた。
1.プロジェクト前期:バスブリッジ(手設計)+DMA機能(Synphony C Compilerで合成)のみのFPGA実装
→画像処理サブシステムとしての接続検証を実施
2.プロジェクト中期:トップに合成したモジュール1つのみを追加してFPGA実装
→トップ組込みのコーディングルール作成と合成したRTLの品質確認、検証環境の共通化を実施
3.プロジェクト後期:トップへのモジュールの実装
→このフェーズでトップを3分割することに決定。
丸田氏はトップ設計を担当する立場で、予定期間内に25個全てのモジュールを実装可能かどうか不安を感じた事もあったが、「Synphony C Compiler」で合成したモジュールは「面白いほど一発動作が決まり」、実機によるデバッグ工数はゼロ。モジュールの追加もCで関数を追加していくだけで「非常に簡単な作業」だったという。終わってみればプロジェクト後期に実施したトップへのモジュール実装はトータル300万ゲートを3週間で完了。工数で換算すると従来の人手設計手法と比べて36%(8.5人月)の削減効果が確認できたという。
※画像はオリンパスデジタルシステムデザイン提供のデータ
丸田氏は「Synphony C Compiler」を利用して成功した理由として、C言語ベースで効率的な設計が出来た点と合わせて、アルゴリズム技術者とHW技術者の「良い協力体制」を構築できた事を強調。引き続き更なる工数削減に向けて、「Synphony C Compiler」向け入力Cコードのガイドラインを更新しつつ、高位合成を活用したHW/SWプラットフォームの開発や検証方法の確立等に注力していくと語っていた。