Main Content

マルチコア プロセッサおよび FPGA への FFT の実装

この例では、モデルをグラフィカルに分割することで、マルチコア プロセッサ ターゲットを FPGA アクセラレーションで利用する方法を示します。この例では、マルチスレッド コードを生成するために Simulink Coder™ が、HDL コードを生成するために HDL Coder™ が必要です。HDL コードは Macintosh システムでは生成できません。

はじめに

複数の最新プロセッサには、高性能アプリケーションを作成するために FPGA コンポーネントと統合された、マルチコア プロセッサが含まれています。これには、マルチコアおよび FPGA プログラミング (並列スレッドのプログラミングなど)、HDL、システムのコア間の通信インターフェイスが必要です。Simulink™ では、アルゴリズムをグラフィカルに分割したり、分割から生成されたソフトウェアをプロセッサのスレッドや FPGA のモジュールに割り当てたりすることで、こうしたアプローチを利用することができます。この例では、1 つのアプリケーション レベルのモデルを使用して 1 つの実行可能ファイル (複数のスレッドで構成) と HDL コードを生成し、FPGA のハードウェア並列処理を利用しています。これを下の図に示します。

モデル例

モデル例を読み込みます。

slexMulticoreFPGAExample

アーキテクチャの定義

このモデルのすべての同時実行設定には、[同時実行] ダイアログ ボックスからアクセスできます ([コンフィギュレーション パラメーター]、[ソルバー]、[タスクの構成])。

アルゴリズムを実装する最初のステップは、ターゲット アーキテクチャの構造化要素を定義することです。これには、処理ノード (CPU や FPGA) の数やタイプなどのハードウェアの構造化要素と、通信チャネル (AXI や PCI) の構造化要素があります。

また、モデルのコンフィギュレーション パラメーターのソフトウェア設定 (システム ターゲット ファイル、ハードウェア実行、データ転送の設定) が含まれています。この例では、事前設定された [ターゲット アーキテクチャ] で [Sample architecture] を選択しています。このアーキテクチャでは、展開プロセスの代わりにデスクトップを使用します。

モデルの分割とマッピング

どの関数を順次実行し、どの関数を同時実行するかを決定するために、モデルを分割します。

モデル例は明示的に分割され、MATLAB System ブロック、Model ブロック、Atomic Subsystem ブロックと Outport ブロックから構成されています。明示的な分割によって、モデルのルートレベルにあるこれらのブロックに基づいて分割が作成されます。一方、暗黙的な分割では、ブロックのサンプル時間とその他のスケジュール上の制約に基づいて分割が作成されます。

モデルの分割後、分割を CPU タスクと FPGA ノードにマッピングできます。設計空間の調査のために GUI または API を使用してマッピングを変更できます。マッピング中、信号はチャネルに自動マッピングされます。

ブロックのスレッドおよび FPGA へのマッピング方法を [同時実行] ダイアログ ボックスで変更できます。詳細については、マルチコア ターゲットでの最適化と展開を参照してください。

マルチスレッド コードと HDL コードの生成

[Generate Code and Profile Report] ボタンをダブルクリックしてマルチスレッド コードを生成します。この例では、ホスト コンピューターによってターゲット環境が置き換えられます。プロセッサ タスクにマッピングされたブロックの C コードが生成されます。このコードは、デスクトップ マシンのネイティブなスレッドを使用して構成されています。コード スニペットは、スレッドの作成方法を示します。さらに、ハードウェア ノードにマッピングされたブロックの HDL コードが生成されます。以下のコード スニペットは、モデルまたはエンティティが VHDL でどのように作成されているかを示します。

close_system('slexMulticoreFPGAExample',0);