8

画像処理に関するプロジェクトを行いたいです。このプロジェクトを FPGA に実装するかどうかを知りたいのですが、第 1 段階で Matlab または OPEN CV のどちらのツールを選択すればよいですか? コードジェネレーターをMatlabからFPGAに直接使用できるように、コードをOpen CVからFPGAに直接変換することは可能ですか??

4

3 に答える 3

16

まず、なぜ FPGA を使用したいのですか? 正当な理由がない限り、それを避けてください!

正当な理由としては、次のようなものがあります。

  • 料金
  • パワー
  • サイズ
  • 再利用する必要がある既存のハードウェア
  • 個人的な興味
  • それはFPGAが義務付けられている課題です

悪い理由には、「画像処理...それはFPGAが必要だということです!」が含まれます。


FPGA を考える

FPGAに実装したい場合は、最初から「FPGA」を考える必要があります。これらは、従来のプロセッサと比較して非常に特殊な特性を持っています。つまり、多くの「従来の」アルゴリズムを FPGA に効率的に実装することは非常に困難です。また、従来の処理では苦労する他のアルゴリズムも、実際には FPGA で非常に簡単に実行できます。

古典的な (画像以外の) 例の 1 つは CRC 計算です。これは多くの場合、ソフトウェアでルックアップ テーブルを使用して実装されますが、FPGA では簡単なシフト レジスタと XOR ゲートにすることができます。

コードジェネレーターについて....

ザイリンクスが購入した製品 (AccelDSP) がありました。これは (非常に慎重に作成された) Matlab コードを取得して VHDL を生成できます。あまりうまくいかず、撤回されました。

Matlab にはHDL-coderがあり、これは同じ仕事をすることを目的としており、Simulink ダイアグラムも実行します。私はかなり前にそれを評価しました - 私は今それがどれほど良いかわかりません (とはいえ、それは目を見張るほど高価でした!)。Web ページ ti を見ると、Matlab 関数 (ユーザー定義オブジェクトではない) のみをサポートしているように見えます。これは、すべての状態を関数の外部に格納する必要があるため、その中に状態を格納するもの (IMHO) の非スターターになります。structAccelDSP が抱えていたのと同じ問題。

Xilinx System Generator と Altera の System Builder はどちらも、FPGA コードを生成するためのフロントエンドとして Simulink を使用しています。それらは非常に成功する可能性があります。任意の複雑な Simulink ブロックを破棄して、合成可能な FPGA を生成することはできないことに注意してください。

繰り返しになりますが、FPGA を最初から考えなければなりません。

FPGA の機能

比較語が使用されている場合は常に、「従来のデスクトップ プロセッサ」と比較しています。

  • FPGA はメモリ不足ですが、小さなブロックがたくさんあります。これは、実行する小さなジョブが十分にある場合、総内部帯域幅が膨大になる可能性があることを意味します。メモリは、プロセッサの L1 キャッシュと同様に、非常に低いレイテンシ (1 クロック サイクル) です。
  • 選択 (if..else機能など) は、FPGA 領域に関して非常に高価になる可能性があります。
  • 乗算は限られたリソースであるため、プロセッサに MUL 命令がなかった「昔」のアルゴリズムを使用すると、費用が発生する場合があります。
  • ビット幅は任意に設定できます。18 ビットの計算結果を表すために 32 ビット要素を使用する必要はありません。ほとんどの場合、ツールがこれを解決してくれます。

開発サイクルも異なります。

  • シミュレーションは、比較的迅速にコンパイルして実行できます。これをたくさん行うようにしてください
  • 実際、合成と配置配線 (FPGA チップ自体にプログラムできる「ビットストリーム」を生成する操作) は、非常に長時間実行される可能性があります。私の現在のコンパイル (比較的小さい) には、わずか 30 分しかかかりませんでした。こんなことはできるだけ避けたい!
于 2013-07-25T09:49:18.267 に答える
11

ザイリンクスにはVivado HLSというツールがあります。

このツールを使用して Zynq プラットフォームで OpenCV をターゲットにする方法について説明し たアプリケーション ノート ( XAPP1167 ) もあります。

これについては経験がありませんが、最近の OpenCV ミーティングで知りました。これがアプリノートのオープニングです-

このアプリケーション ノートでは、OpenCV ライブラリを使用して Zynq デバイスでコンピューター ビジョン アプリケーションを開発する方法について説明します。OpenCV は、アルゴリズムのプロトタイピングからインシステム実行まで、設計プロセスのさまざまなポイントで使用できます。Vivado HLS で提供されるビデオ ライブラリを使用して、OpenCV コードを合成可能な C++ コードに移行することもできます。合成されたブロックを Zynq デザインに統合すると、高解像度および高フレーム レートのコンピューター ビジョン アルゴリズムを実装できます。

アルテラは、ANSI C を並列化するための広範な仕様であるOpenCL をサポートしています。OpenCL で使用できるOpenCV モジュールがあります。繰り返しますが、私はこれを経験していません(まだ;))。

このリンクは、FPGA 開発ボードなどのホストおよびハードウェア アクセラレータのコンテキストでの OpenCL の使用を理解するのに役立ちます。

そのため、アルテラのルートに進みたい場合は、上記の OpenCV モジュールを使用して OpenCL で OpenCV 関数をラップし、アルテラの SDK を使用して fpga をターゲットにする必要があります。この方法の利点は、FPGA がアプリケーションにあまり適していないことがわかった場合、OpenCL+OpenCV を他のプラットフォームに向けることができることです。

于 2013-07-26T17:10:51.960 に答える
0

Matlab は HDL をサポートしています。matlab コードを HDL コードに直接変換できるパッケージを提供します。FPGAのプログラミングにも使用できます。

HDLコーダー

一方、Opencv を HDL 言語に変換するのは、ライブラリが原因で簡単ではありません。C++ などの Obect Oriented Programming (OOPs) 言語を Verilog / VHDL に簡単に変換できますが、「OpenCV ライブラリ」のため、いくつかの問題が発生します。

于 2016-01-24T18:53:47.603 に答える