コンテンツにスキップ

VisualAppletsの基礎#

このドキュメントのイントロダクションと目的#

このトピックでは、VisualAppletsを操作するうえで知っておくべき基本概念について説明します。このトピックを読むことで、VisualAppletsデザインの核となるアイデア、つまり画像処理パイプライン、オペレーターの組み合わせやパラメータ化の方法、そしてそれらの概念がフレームグラバー上のFPGAとどのように関連しているかを理解できます。

主要用語

このチュートリアル全体を通して、Key Termsとラベル付けされたボックスでは、初めて読む読者向けに一般的な用語について説明しています。

VisualAppletsはPC上の設計ツールです。FPGAはフレームグラバー上のチップです。VisualAppletsでパイプラインを描画します。ビルドによって、そのパイプラインがFPGA上のハードウェアとして構成されます。カメラデータはVisualAppletsエディタ内ではなく、フレームグラバー上で処理されます。

基本設計コンセプト#

VisualAppletsを使用すると、VHDLやVerilogのようなハードウェア記述言語でコードを書くことなく、FPGAベースのプログラマブルハードウェア上に画像処理機能を構築できます。ライブラリのオペレーターを使用してグラフィカルにデザインを構築し、画像データが定義されたパスに沿って流れるように接続します。

VisualAppletsでのグラフィカルプログラミング

さらに、PythonおよびTclスクリプト言語を使用してデザインを作成および編集することもできます。

プログラマブルなフレームグラバー上では、カメラなどの画像ソースが継続的なピクセルストリームをアクリジションパスに送り込み、ボード上のFPGAがそのストリームを処理します。構築するものは、CPUのようにFPGAがフェッチして実行するプログラムではありません。そうではなく、ビルドによってFPGA上にパイプライン構造に一致する専用のデジタル回路が構成されます。

PC上でVisualAppletsデザイン( *.vadファイル内のオペレータ、モジュール、リンク)を作成および編集します。その後、ビルドステップでそのパイプラインがハードウェアロジックに変換されます。

画像処理パイプラインの設計VisualApplets

このようなVisualApplets 設計では、演算子ライブラリから演算子をインスタンス化します。設計内の演算子の各インスタンスはモジュールと呼ばれます。モジュールはリンクで接続され、処理順序はモジュールの配置と接続方法によって決まります。モジュールとリンクが一体となって画像処理パイプラインを形成し、ピクセルデータが取得、処理、出力の各段階をどのように移動するかを定義します。

このチュートリアルで、モジュールが実行時にデータを処理、バッファリング、ブロック、または転送すると述べている場合、それはそのモジュールから生成されたFPGAロジックを指します。VisualAppletsのグラフィカルモジュールはそのハードウェアの動作を記述するものであり、それ自体が実行時のカメラデータを処理するわけではありません。

編集可能なデザインを*.vadファイルとして保存します。特定のターゲットフレームグラバー用にデザインを作成すると、 VisualApplets 拡張子*.hapのバイナリハードウェアアプレットファイルが生成されます。このファイルをフレームグラバーにロードします。 *.hapファイルを編集可能な設計ソースとして扱わないでください。 *.vad設計を変更して、再度ビルドする必要があります。実行時には、アプリケーションまたは実行時ツールがデバイスに書き込む動的書き込みパラメータを変更できます。

実際の目標は、ハードウェア上でリアルタイム画像処理を実現することです。PC上でパイプラインを*.vadプロジェクトとして編集および検証しますが、処理ロジックとデータフロー構造を実行可能なハードウェアとしてFPGAに搭載するのは、ビルドされた*.hapファイルのみです。

主要用語

構築とは、グラフィックデザインをVisualApplets フレームグラバーFPGAが動作可能な構成に変換する。
ファイル拡張子が*.hapのハードウェアアプレットが、実行可能な結果です。
フレームグラバーとは、コンピュータ内の拡張ボードであり、カメラデータを受信し、FPGAを搭載し、作成したアプレットを実行する役割を担います。 VisualApplets FPGAは含まれていません。

FPGAテクノロジー#

フィールドプログラマブルゲートアレイ(FPGA)は、多数のプログラマブルロジック素子を内蔵したチップです。これらの素子とチップ上の配線は、多数の演算を並列に実行する複雑なデジタル回路をハードウェア上で実現するように構成できます。

構築するときVisualApplets ターゲットフレームグラバーの設計、 VisualApplets オペレーターとリンクは自動的にFPGAロジックにマッピングされます。このマッピングを自分で実装する必要はありません。 VisualApplets 配置、配線、ビットストリーム生成のためのベンダー固有のFPGAツールチェーン(通常はXilinx Vivado )を処理します。PC上の*.vadプロジェクトがFPGAを構成する*.hapファイルとどのように関連しているかについては、 「基本設計概念」を参照してください。

組み合わせ回路を構築するために通常使用するプログラマブルロジック素子に加えて、FPGAはクロック付きストレージ用のフリップフロップ、ラインバッファやその他のオンチップメモリ​​用のブロックRAM 、高速乗算加算などの機能のためのDSPまたは算術スライスを提供します。同じ自動構築フローの一部として、 VisualApplets 演算子とリンクをこれらのリソースにマッピングします。設計内の各演算子は、論理回路、メモリ、算術演算、またはそれらの組み合わせといった具体的なハードウェアに対応します。

設計に必要なFPGAリソースは、使用するモジュールの数、選択する演算子、並列度、バッファサイズ、その他のパラメータの設定方法によって異なります。ロジック、メモリ、並列データパスの使用頻度が高いほど、消費リソースが増加します。設計がデバイスの実装能力を超えると、ビルドが失敗するか、タイミングクロージャが達成できない可能性があります。 VisualApplets デザインルールチェックレベル2 (DRCレベル2)を実行すると、FPGAリソースの消費量が推定され、報告されます。詳しくは、ユーザーマニュアルの「FPGAリソース推定」および「デザインルールチェック」を参照してください。消費量がどのように蓄積されるか、どのルールが適用されるか、設計上の選択肢をどのようにトレードオフするかについての詳細は、「 Parallelism処理チュートリアル」および「メモリ要素チュートリアル」も参照してください。

ハードウェアにおけるパイプライン処理#

フレームグラバー上では、ビルドされたハードウェアアプレットがデザインをパイプライン処理されたハードウェアパスとして実装します。ピクセルデータは、リンクされたモジュールステージ間を連続的なフローで移動します。

描くパイプラインVisualApplets これは、FPGA上のハードウェアパスのモデルです。FPGAはデータを段階的に処理し、連続的に下流へと渡します。この設計では、パイプラインがパス上の各段階でイメージ全体を格納することを前提としていません。生成されたFPGAパイプラインは、このパイプラインモデルに従ってクロックサイクルごとにデータを段階的に転送します。詳細については、「パイプラインの概念チュートリアル」のトピックを参照してください。

並列パイプライン構造による設計

メモリを通して大量のデータを移動させ、命令をほぼ順番に実行する一般的なCPUワークフローと比較すると、FPGAはパイプラインに沿ってピクセル単位でデータを並列に処理・転送できます。プログラム制御下で多数のスレッドをデータ上で実行するGPUと比較すると、FPGAパイプラインは固定コンベアに近いと言えます。データは設計時に配線された処理ステージを通過します。これが、ドキュメントでパイプラインの比喩が頻繁に用いられる理由です。

主要用語

  • FPGAは、フレームグラバー上のチップと考えてください。そこでは、設計したパスに沿って多数の小さな操作が同時に実行されます。 VisualAppletsこのビルドでは、その設計をFPGA上の専用ハードウェアロジックに変換します。ピクセルデータは、コンベア上のアイテムのように、これらのハードウェアステージを流れていきます。これがパイプラインの概念です。
  • CPUは通常、処理手順を一つずつ順番に実行し、頻繁に大量のデータを読み込んだり保存したりする。
  • プログラムのもと、GPUは多くの画素やスレッドに対して同じ種類の処理を並列で実行します。

クロックサイクルとタイミング#

FPGAの設計は、パイプラインの各ステージに対してデータの取得、転送、処理を行うタイミングを指示するクロック信号に依存しています。VisualAppletsおよびこのチュートリアルでは、このクロックをBase Design Clockと呼びます。これは生成されたFPGAパイプラインのクロックであり、カメラのピクセルクロックとは異なります。クロックサイクルとは、Base Design Clockの1回のティックのことです。クロックの立ち上がりエッジごとに、パイプライン内のフリップフロップが入力データを格納し、次のステージに渡します。

したがって、クロックサイクルは次のことを行います。

  • パイプライン内のレジスタなど、すべての要素のタイミングを定義します。
  • 値は予測可能なクロックエッジでのみ次のステージに移動するため、安定したデータフローを確保します。
  • レジスタ間のすべての組み合わせ論理が次のサイクルの前に正しく落ち着くよう、Base Design Clockの周波数を十分に低くする必要があるため、最大処理速度を決定します。

言い換えれば、クロックリズムによってハードウェアパイプライン全体が同期状態に保たれます。個々のオペレーターもパイプライン化されています。ビルドは各オペレーターを内部レジスタステージで実装するため、単一の入力に対して結果が出力に現れるまでに複数のサイクルが必要な場合でも、FPGAステージはすべてのクロックサイクルで新しい入力を受け入れることができます。パイプラインが満たされた後でも、特定の入力からその結果までのレイテンシは1サイクルを超える場合がありますが、出力のスループットは1サイクルあたり1つの結果のままにすることができます。これが、ビルド中のパイプライン化とリソースマッピングが、達成可能なBase Design Clockの周波数とスループットに直接影響を与える理由です。

情報

フレームグラバーのBase Design Clockの周波数やその他のハードウェアリソースに関する情報は、Device Resourcesで確認できます。

  • From Empty Design to Running Appletチュートリアルのトピック — デザイン、DRC、シミュレーション、ビルド
  • チュートリアルのトピック: Pipeline Concept — パイプライン内でのデータの流れ
  • チュートリアルのトピック: Parallelism — 帯域幅、クロック、FPGAリソース
  • チュートリアルのトピック: Memory Elements — FPGAメモリとフレームグラバーのDRAM
  • Device Resources — Base Design Clockとプラットフォームリソース
  • ユーザーマニュアルのDesign Rules Check — DRCレベル1およびレベル2