日経テクノロジーonline SPECIAL

【ザイリンクス】活躍の場が広がるソフトウエア技術者 C/C++でソフトとハードの統合開発が可能に

ハードウエアとソフトウエアの両方を網羅するシステム全体を、ソフトウエア技術者が一気通貫で開発できる環境が整ってきた。プログラマブル・デバイスの大手ザイリンクスが、ソフトウエア技術者が慣れ親しんでいるC/C++言語を使って、最新デバイス「Zynq-7000 SoC」および「Zynq UltraScale+ MPSoC」のハードウエアと、それに組み込むソフトウエアを同時にプログラミングできる開発環境「SDSoC」を実現。さらに開発したプログラムを実装できる用途別のSDSoCプラットフォームの提供を開始した。この統合開発環境は、ソフトウエア技術者の活躍の場を大きく広げる。

 ソフトウエア技術者とハードウエア技術者がそれぞれ得意な技術を生かして作業を分担する体制で組み込みシステムを開発する現場は多い。こうした体制の場合、高機能や優れたパフォーマンスを追求する局面ではハードウエア技術者の役割がぐっと大きくなる。目標とする機能や性能を実現するために、あらかじめ用意されたアーキテクチャを超えてハードウエアを徹底的に最適化する作業が必要になるからだ。

Nick Ni氏
Xilinx
SDSoC Product Manager

  ところが、システム全体を視野に入れながらハードウエアを最適な形に調整する高度な作業をこなせるハードウエア技術者の数は、必ずしも多くはない。このままで開発目標を高くすると、ハードウエア開発が製品化のボトルネックになりかねない。この状況を変えて、より効率的な開発環境を実現することを目指してザイリンクスが実現したプログラマブル・デバイスの開発環境が「SDSoC」である。「ソフトウエア技術者が、ハードウエアを開発し、さらにハードウエアとソフトウエアの両方を含むシステムレベルの最適化が図れる環境です」(Xilinx SDSoC Product Manager Nick Ni氏)。

ハードとソフトを自由にプログラミング

 この環境の中核となるプログラマブル・デバイスが、「Zynq®-7000 SoC」および「Zynq UltraScale™ + MPSoC」である。実は、このデバイス自体が先進的かつユニークなアーキテクチャを備える。いずれもマイクロプロセッサを中心とした「プロセッシング・システム(PS)」とFPGA(Field Programmable Gate Array)に相当する「プログラマブル・ロジック(PL)」が1チップに集積されている(図1)。PLは、集積されている回路が自由にプログラミングできる。Zynq-7000 SoCは、英ARM社の32ビット・マイクロプロセッサ「Coretex-A9」。Zynq UltraScale+ MPSoCは、ARM社の64ビット・マイクロプロセッサ「Coretex-A53」を搭載しているのが大きな違いである。

図1 「Zynq-7000 SoC」および「Zynq UltraScale+ MPSoC」の構成
[画像のクリックで拡大表示]

 つまり、Zynq-7000 SoCとZynq UltraScale+ MPSoCは、仕様変更に対する柔軟性が高いソフトウエア処理のプラットフォームと、高い処理性能を追求するうえで有利なハードウエアのプラットフォームが1チップに集積されており、両者の分担を最適化しながら高いパフォーマンスを追求できる。

 ただし、このデバイスを使いこなすうえでソフトウエア技術者には敷居に高い領域があった。その一つがPLの設計である。これまでPLは、ソフトウエア技術者には馴染みがないHDL(ハードウエア記述言語)を使ってプログラミングする必要があった。もう一つソフトウエア技術者が踏み込みにくいのが、ハードウエア処理とソフトウエア処理の分担を最適化する作業や、ハードウエアとソフトウエアをつなぐ部分の開発である(図2)。

図2 典型的な開発フロー
[画像のクリックで拡大表示]

ソフトウエア技術者の障壁を取り去る

  ザイリンクスは、これらの障壁を取り払ってソフトウエア技術者がZynq-7000 SoCとZynq UltraScale+ MPSoCを使いこなせるようにするために、ソフトウエア技術者の作法でシステム全体が開発できる環境「SDx」の開発を進めてきた。ソフトウエアエンジニアが慣れているC/C++言語でZynq-7000 SoCとZynq UltraScale+ MPSoCのプログラミングができる環境である。ここで、ハードウエアとソフトウエアの分担(機能定義)やコネクティビティ回路の設計など、両方に分野にまたがる作業についてもソフトウエア技術者が慣れている“作法”で検討できる環境を用意する。

 応用分野によってシステムLSIに対する基本要求が異なることから、同社は用途別に「SDx」を展開しており、これまでに通信ネットワーク向けの「SDNet」、データセンター向けの「SDAccel」を提供している。ここに新たに加わったのが組み込みシステム向けの「SDSoC」である。すでに、Zynq-7000 SoCに対応したSDSoCの提供を始めており、2016年春以降にZynq UltraScale+ MPSoC向けのSDSoCをリリースする。

  さらにシステムLSIを実際の機器に実装するときに必要になるインタフェースIPやドライバなどのソフトウエア群と開発ボードがパッケージになった「SDSoCプラットフォーム」を、同社をはじめ複数のサードパーティが提供を始めた(図3)。現在は、画像処理回路向けの「ビデオプラットフォーム」と、通信アプリケ-ション向けの「無線プラットフォーム」が用意されている。これらのSDSoCプラットフォームにSDSoCで開発したプログラムをそのまま実装することができるので、システムレベルの実機検証にも素早く取りかかれる。「SDSoCは、開発効率の向上を図るうえでも大きな利点を開発現場にもたらします」(Ni氏)。

図3 開発から機器への実装までエンド・ツー・エンドでサポート
[画像のクリックで拡大表示]

機能定義やコネクティビティを自動化

 SDSoCが提供する開発環境の注目すべき特長は、ソフトウエア技術者がなかなか踏み込めない作業領域。つまり、ハードウエアとソフトウエアの分担を最適化する「パーテション」の作業と、ハードウエアとソフトウエアをつなぐ回路を設計する「コネクティビティ」の作業が大幅に自動化されていることだ。これによって、ソフトウエア技術者がシステムLSI開発に積極的にかかわれる環境を実現するとともに、従来に比べてシステムLSIの開発効率を格段に高めた。

 具体的には、Eclipseベースのインタフェースを使ってC/C++でシステムLSIが提供するアルゴリズムを記述した後、ユーザーが処理速度などパフォーマンスにかかわる部分を指定すると、SDSoCが自動的にハードウエアの領域に割り当てるための必要なコードを生成。同時に、ハードウエアとソフトウエアの領域をつなぐインタフェースやドライバのソフトウエアも自動的に生成する。C/C++で記述する関数の単位で、ハードウエア処理とソフトウエア処理を選択する機能を備えているので、パーテションを微調整しながらデバイスのパフォーマンスを追求することもできる。「ソフトウエア技術者とハードウエア技術者がやりとりしながら、それぞれが調整する従来の手法では、どうしても作業のイタレーション(手戻り)が発生します。これらの作業プロセスを大幅に自動化したSDSoCを導入することで、開発効率は格段に向上するはずです」(Ni氏)。SDSoCの最新版では、ハードウエアとソフトウエアの両方を網羅してプログラムの動作状態をモニタリングできるトレース機能も提供している。「ソフトウエア開発ツールが提供するトレース機能と同様の使い方で、ハードウエアも含めたシステムの動作状態が確認できます。ソフトウエア技術者には便利な機能だと思います」(Ni氏)。

 ハードウエアの領域に大きく踏み込んだ開発ができる環境を提供するSDSoCおよびSDSoCプラットフォームは、ソフトウエア技術者の可能性を大きく広げる。しかも、組み込みシステムの開発効率を格段に向上する可能性も秘めている。市場競争力の高い製品の実現を迫られている組み込み開発の現場にとって見逃せない技術だと言えよう。

お問い合わせ