SoC FPGA とは?
SoC(System on Chip)は、一つのチップ上に複数の機能を統合した半導体です。一般的には、中央処理装置(CPU, Central Processing Unit)、メモリ(RAM, Random Access Memory)、グラフィック処理装置(GPU, Graphic Processing Unit)、ストレージ、そして周辺デバイスと通信するためのインターフェイス等のコンポーネントが一つのチップ上に統合されています。また、SoCはシステムLSI (Large-Scale Integration)と呼ばれることもあります。
SoCは、スマートフォン、タブレット、スマートウォッチなどの小型デバイスに広く使用されています。これらのデバイスでは、パワー消費を抑えつつ、小型化と高性能化を両立することが必要ですが、SoCにすることで実現することが出来ます。
SoC FPGAとは?活用例
SoC FPGAは、FPGA(Field Programmable Gate Array)が搭載されたSoCのことを指します。FPGAについてはこちらをご覧ください。SoC FPGAは逐次処理が得意なCPUと、並列計算や低レイテンシでの処理が得意なFPGAの良いとこ取りが出来るメリットがあります。このように、システムに異なるプロセッサが搭載された構成をヘテロジーニアスな構成と呼びます。SoC FPGAでは、処理全体のとりまとめをCPU部分で行い、計算負荷が重い部分をFPGA部分に演算させる(オフローディング)といった使い方が一般的です。SoC FPGAの適用先のアプリケーションとしては例えば下記のものがあります。
通信システム
高速で柔軟なデータ処理が必要となるアプリケーションとして、通信システムがあります。例えばネットワークスイッチ・ルータなどの通信インフラストラクチャーでは低レイテンシかつ広通信帯域で、パケットを適切な送信先に転送する必要があります。CPUで処理する場合、処理のオーバーヘッドが大きく、かつ一定時間以内に処理が終わる保証が出来ないため、並列かつ正確な時間での処理が得意なSoC FPGAが活用されています。また、無線通信用途においても、アンテナやレーダに接続するため、内部にRF用AD/DAコンバータのインターフェイスを統合したSoC FPGAも販売されており、広く活用されています。
データセンタ
機械学習やネットワーク仮想化、ハイパフォーマンスコンピューティング、ビッグデータ解析等のアプリケーション向けにSoC FPGAをアクセラレータとして活用することでエネルギー効率の高いデータセンタ向けシステムの構築に用いられています。例えば検索エンジンでは大量のテキストデータベースからキーワードの含まれるページを抽出し、関連度順に並べなおすといった処理が行われていますが、このスコア付けする処理の高速化にSoC FPGAは活用されています。
パワーエレクトロニクス(パワエレ)機器
パワエレ機器をより小型化・高出力密度化するため、パワー半導体のスイッチング速度の高速化の需要が高まっています。近年は新たなパワー半導体であるSiC(Silicon Carbide)やGaN(Gallium Nitride)などの登場により、制御装置側も高速かつ正確なタイミングで動作させるために、SoC FPGAを活用したパワエレ機器の開発が活発に行われております。例えば、近年はモータをさらに小型化するために、モータの高回転化の需要が高まっており、それに伴いモーター制御装置(インバータ)も制御上の計算周期を満たすために、SoC FPGAの適用が進んでいます。
宇宙機器
人工衛星や小惑星探査機などの宇宙機器は厳しい環境下で動作し続ける必要があり、その制御装置についても、設計時に検討が必要となります。例えば、宇宙空間は地上と比較し、高放射線環境であり、放射線がチップにぶつかることで、チップ上の電子ビットが反転し、エラーを引き起こします。そのような使用環境に対し、宇宙用のFPGAを活用することが考えられます。例えばFPGAでは同じ処理回路を複数個実装することで、その処理結果の多数決を取ることにより、エラーを検出・訂正することが出来ます。加えて、未知の環境下でのミッションを行うため、状況に応じて柔軟にロジック回路を書き換えることのできる点もメリットです。そのため、宇宙機器にFPGAは広く活用されています。さらにCPUとFPGAが1チップになっているSoC FPGAを活用することで、ソフトウェアを活用したシステムを構築することも可能です。
SoCが使われる理由
SoCが一般的になる前、電子デバイスは多くの個別のチップやコンポーネントを使用していました。これらはそれぞれ異なる機能を果たし、一緒に動作してデバイス全体を動かす役割を果たしていました。
しかし、これらの各コンポーネントが個別のチップに実装されていると、それぞれのチップ間でデータをやり取りするためには時間がかかります。また、それぞれのチップが独自の電力供給を必要とするため、エネルギー効率も最適ではありません。加えて、基板を作るのに大きな面積が必要となり、デバイスのサイズが大きくなります。
そこで、すべてのコンポーネントを一つのチップに統合することにより、データのやり取りを高速化し、エネルギー効率を向上させ、デバイスのサイズを小さくするというアイデアが生まれました。これがSoCです。これは、特にモバイルデバイスやウェアラブルデバイスなどの小型デバイスにとって、これは非常に重要な利点となります。
SoCの例:スマートフォンやタブレット
例えばスマートフォンのSoCには、一般的に以下のものが実装されます。
まず、中心となるのはCPUです。これは、システム全体の状態管理を行い、スマートフォンが正常に稼働しているか、どの順番で処理を実行するか、電話が掛かってきたときなど割り込み処理が発生していないか等を常にチェックしています。
次に、グラフィックス処理を専門的に行うGPUがあります。近年ではスマートフォンのゲームでも美麗な3Dグラフィックを用いたものが数多くリリースされていますが、このような高度なビジュアルエフェクトをスムーズに描画する役割を果たします。
続いて、ディスプレイからのタッチスクリーン入力の処理を行うモジュールや、カメラの画像取得、音声データの処理など、多様な周辺デバイスからの入力データを受け取り、必要な制御と計算を行うモジュールもあります。
また、DSP(Digital Signal Processor)と呼ばれる特殊なプロセッサも重要なコンポーネントです。これは、アナログ信号をデジタル信号に変換し、画像や音声などのデータを高速に処理する能力を持っています。近年はNPU(Neural Processing Unit)というAIの演算処理に特化して高速で計算行うための専用コンポーネントを搭載している場合もあります。
このほかにも、アンテナから入ってきた高速なアナログ信号をデジタル信号に変換し、CPUからアクセスできる形式に変換するための無線通信用コンポーネントや、GPSからの信号を処理するためのコンポーネントもあります。
SoCの特徴(メリット・デメリット)
上記の通り、SoCには下記のメリットがあります。
小型化
部品点数を削減することで、基板の面積を小さくすることが出来ます。そのため、デバイスの小型化に有利です。
動作の高速化
SoCは1チップ内に全てのコンポーネントが統合されているため、個別のチップの実装の基板と比較し、コンポーネント間の配線長を短くできます。そのため、コンポーネント間のデータの受け渡しにかかる遅延時間(レイテンシ)を短く出来、チップを高速に動作させることが可能になります。さらに、配線長を短くすることで配線の容量や抵抗を小さくすることが可能となり、通信速度を上げることが可能になります。
部品点数の削減/サプライチェーンの統合
個別実装の基板ではコンポーネント毎にチップを入手していたものを、SoC化し1チップに統合することで部品点数を減らすことが出来ます。またチップに付随して必要となる抵抗やコンデンサ等の外付け部品も削減することが出来ます。そのため、部品管理の手間や、製造にかかるサプライチェーン管理の手間を減らすことが出来ます。
一方で、SoCには以下のデメリットがあります。
カスタマイズが難しい
SoCの場合、すでにコンポーネントの構成が決まったチップを販売しているため、構成を変えるようなカスタマイズは難しいです。
開発の長期化
SoCは複数のコンポーネントを合わせて1チップとしているため、設計や検証が複雑化し、かかる時間やコストが増加します。
歩留まりの悪化
SoCでは、1チップ内に複数のパターンの回路が混在しており、チップ面積も大きくなることから歩留まりが悪化します。
そこで、SoCのデメリットを補うため、SiPを使うという選択肢もあります。
SoCのデメリットを補うSiP
SiP(System in Package)は複数のチップをまとめて一つのパッケージ内に収めた半導体製品です。各チップは既存のもの流用して使用することが出来るため、費用を安く抑えることが出来、開発期間を短縮することが可能です。そのため、SiPは費用を抑えたい製品や、タイムリーな市場投入が求められる製品に広く使われます。上記のICに加え、さらに複数のICを組み合わせて1つのボードにしたSoMがあります。
SoMとは
SoM (System on Module)は、SiPやSoC、電源IC、その他の回路を統合し、一つのユニットとして動作することが出来るボードです。SoMボードはキャリア基板に付属して実装されます。キャリア基板とはコネクタ等を介して接続することが出来、キャリア基板とSoMボードの組み合わせを変えることでシステムの変更や拡張を容易に行うことが出来ます。そのため、適用先のアプリケーションに応じて柔軟にシステムを構築することが可能です。
SoC とマイコンの違いとは?
SoCとマイクロコントローラ(マイコン)は、どちらも主に組込み機器において使用される半導体ですが、その使用目的と機能性にはいくつかの違いがあります。
SoCは、上記の通り、スマートフォン、タブレット、スマートウォッチなど、高度な画像・信号処理や、高速通信を伴うアプリケーションを必要とする電子デバイスに使用されます。一方、マイコンは、特定のシンプルなタスクを処理する組み込みシステムによく使用されます。例えば、エアコンのリモコン、電子レンジ、自動車のエンジン制御システムなどに使用されています。
SoCは、GPU、DSP、Wi-Fi®やLTEなどの高速通信インターフェイスが統合されますが、マイコンでは一般的にこれらの高度なコンポーネントは搭載されていません。また、SoCは高度な制御処理を行うために、組込みLinuxなどのOS(Operating System)を搭載して使用されますが、マイコンではOSを実行するオーバーヘッドを避けるためにOSを搭載せずに処理を動かす場合がほとんどです。なお、このようにOSを搭載せずに処理を動かす実装をベアメタル実装といいます。
SoC FPGAの開発方法
SoC FPGA開発のハードル
SoC機器は高い柔軟性と演算能力がありますが、その開発には通常ハードウェアからソフトウェアまで幅広い知識や経験が必要なり、高いハードルがあります。例えば、準備、設計、検証段階においてそれぞれ下記のようなハードルが存在します。
開発環境の準備
ヘテロジーニアスなデバイス・アーキテクチャ上で動作するソフトウェアを開発する上で、複数の開発環境を組み合わせ、適切に連携させる必要があります。例えば、SoC FPGAを活用したパワエレ機器を設計する場合、FPGAの開発環境であるVivado®/Quartus®、組込みCPU(Arm®等)のコンパイルツールチェーン、組込みLinux®/ドライバの開発環境、さらにパワエレ開発の場合には、回路シミュレータであるPSIMやPLECSも組み合わせる必要がある場合もあるかもしれません。このような環境構築は初心者には難易度が高く、うまく動作しなかった場合に原因の分析や解決が困難です。
設計と実装
SoCの開発では、ハードウェアとソフトウェアが密接に協調して動作する必要があります。これらの間のインターフェイスを適切に設計し、最適化するためには、広範な知識と設計の経験が必要となります。
テストと検証
SoC FPGAの設計をテストし、検証するためには、多くの時間と工数が必要となります。特に、ハードウェアとソフトウェアの両方を含むシステム全体をテストするためには、各開発環境でのテストツールが必要です。
MATLABおよびSimulinkを活用したSoC FPGAの開発
MATLAB®およびSimulink®を活用することで、従来のSoCの開発ワークフローにおけるハードルを下げることが出来ます。そのため、MATLABおよびSimulinkを活用したSoCの開発が世の中に広まりつつあります。MATLABおよびSimulinkではCPU、GPU、FPGAからパワエレ回路や機械モデル、ロボットのモデルまで含めた分野横断的な複合シミュレーションが可能です。また、シミュレーションで動作確認後、そのままコード生成、実装、検証まで行うことが出来ます。
例えば上記の例ではSoCを活用したレーダシステムのシミュレーションを行い、そのままCPU向けのCコードやFPGA向けのHDLコードを生成することが出来ます。SoC FPGA開発に必要となるCPU、FPGA、レーダアンテナ用インターフェイスと接続し動作シミュレーションを実行後システムの成立性を確認することが出来ます。
また、上記の例では、SoC と電気回路シミュレーションを組み合わせた降圧型DCDCコンバータの制御シミュレーションを行っております。
さらに、上記の例では、SoC と機械のプラントシミュレーションを組み合わせ、ボールトラッカーの制御シミュレーションを行っております。このように可視化しながらシステムの挙動を確認できるため、MATLABおよびSimulinkはSoC開発におけるシステムのラピッドプロトタイピングにも有効です。
MATLABおよびSimulinkを活用してSoC設計と実装のハードルを下げる
MATLABおよびSimulinkを活用することで、シミュレーションから実装までをシームレスに接続することが可能です。シミュレーションで動作を確認後、等価な挙動をするCコードやCUDA®コード、VerilogHDL/VHDLコードをそのまま生成することが出来ます。
MATLABおよびSimulinkを活用してSoCのテストと検証のハードルを下げる
SoCをテストし、検証するためには、多くの時間と工数が必要となりますが、MATLABおよびSimulinkは検証環境も提供します。例えば、エクスターナルモードを活用することで、システムをリアルタイムに動かしながら、内部の状態を監視したり、調整を行うことが可能です。
例えば上記の例では、AMD社のSoC FPGAであるZC702と、カメラを接続したボールトラッキングシステムを、MATLABおよびSimulinkと接続し内部のパラメータの確認と書き換えを動作中に行っています。