FPGA プログラミングを学ぶために、FPGA で単純なニューラル ネットワークをコーディングする予定です (超並列であるため、FPGA 実装が CPU 実装よりも高速になる可能性がある数少ないものの 1 つです)。
私はCプログラミングに精通していますが(10年以上)。FPGA開発についてはよくわかりません。何をすべきか、何を学ぶべきか、何を購入すべきかのガイド付きリストを提供できますか?
ありがとう!
FPGA プログラミングを学ぶために、FPGA で単純なニューラル ネットワークをコーディングする予定です (超並列であるため、FPGA 実装が CPU 実装よりも高速になる可能性がある数少ないものの 1 つです)。
私はCプログラミングに精通していますが(10年以上)。FPGA開発についてはよくわかりません。何をすべきか、何を学ぶべきか、何を購入すべきかのガイド付きリストを提供できますか?
ありがとう!
Necroposting ですが、この質問に出くわした私のような他の人のために、FPGA を使用してニューラル ネットワークを実装するための、古いものの詳細な処理があります。
これを投稿してから 3 年が経ちましたが、まだ閲覧されているので、最近見つけた昨年の論文を 2 つ追加しようと思いました。
最初の講演では、畳み込みニューラル ネットワークの FPGA アクセラレーションについて説明しました。Nallatech が作業を実行しました。学術論文というよりはマーケティングですが、それでも興味深い読み物であり、実験に興味のある人にとっては出発点になるかもしれません. 私はナラテックとは何の関係もありません。
2 番目の論文は、イギリスのバーミンガム大学から出版されたもので、Yufeng Hao によって書かれました。FPGA 上の一般的なニューラル ネットワーク ハードウェア アーキテクチャを紹介します。
FPGA で「リテラル」ニューラル ネットワークを構築しようとするほとんどの試みは、ルーティングの限界にすぐに達します。P&R プルが完了するまでに数百セルを取得する可能性があり、問題を待つ価値があるよりも長くかかります。NN と FPGA に関する研究のほとんどはこのアプローチを採用しており、最小限の「ノード」の実装に集中しており、スケーリングが今や簡単であることを示唆しています。
適度なサイズのニューラル ネットワークを実際に機能させる方法は、FPGA を使用して専用のニューラル ネットワーク計算機を構築することです。メモリ チップで最初のノード値を取得し、次のタイムスタンプ結果用に 2 番目のメモリ チップを用意し、接続の重みを格納する 3 番目の領域を用意します。ノード値と接続データを、メモリ バスを飽和状態に保つための手法を使用してポンピングします (CAS ラインによるノード ロードの順序付け、パイプラインを使用した先読み)。重みを以前の値とペアにし、それらを DSP MAC ユニットを介して実行して新しいノードの重みを評価し、すべての接続が評価されたら結果メモリ領域にプッシュするため、以前のデータセットに対して多数のパスが必要になります。タイムステップ全体が終了したら、フローの方向を逆にして、次のタイムステップが元のストレージ領域に書き戻すようにします。
ニューラル ネットワークは、FPGA のプログラミング方法を学習するための最良の出発点ではない場合があります。最初は、LED を駆動するカウンターや数値ディスプレイなどの単純なものを試し、そこから構築していきます。役に立つかもしれないサイトは次のとおりです。
C から VHDL または Verilog への移行を支援するために、FPGA でソフト プロセッサを使用することを検討することもできます。これにより、小さなコード モジュールをあるモジュールから別のモジュールに移動して、ハードウェアの違いを確認できます。言語の選択はやや恣意的です。ほとんどの場合、私は VHDL (構文的には ADA に似ています) でコーディングしますが、一部の同僚は Verilog (構文的には C に似ています) を好みます。私たちは時々それについて議論しますが、実際にはそれは個人的な選択です.
購入者/学習者ガイドについては、次のものが必要です。
忍耐 :) - FPGA のデザイン サイクルは、ビルドに追加の「フリー パラメーター」が多数あるため、ソフトウェアの場合よりも大幅に長くなります。そのため、デザインが思いどおりに機能するまでに時間がかかっても驚かないでください。
開発ボード- 学習のために、ザイリンクス、アルテラ、またはラティスの 3 つの大きな FPGA ベンダーのいずれかから 1 つを購入します。私の好みは現時点ではザイリンクスですが、3 つすべてが優れています。学習のために、ハイエンドのパーツに基づいたものを購入しないでください。FPGA の使用を開始するときは必要ありません。ザイリンクスの場合は、SP601 などの Spartan シリーズに基づいたものを入手してください (私自身も持っています)。アルテラの場合は、サイクロンを購入してください。開発ボードは、ハイエンド部品のボードよりも大幅に安くなります。
プログラミング ケーブル- ほとんどの企業は、ボード上のデバイスをプログラムするための特別なコネクタを備えた USB プログラミング ケーブルを製造しています (多くの場合、JTAG を使用)。一部のボードにはプログラミング インターフェイスが組み込まれているため (Xilinx の SP601 など)、余分な費用を支払う必要はありません。
ビルド ツール- これらにはさまざまな種類がありますが、ほとんどの大手 FPGA ベンダーは独自のソリューションを提供しています。これらのツールは、Xilinx ISE Webpack などの小規模で低パフォーマンスの FPGA に対してのみ無料で提供されることに注意してください。
ソフトウェアは、ソフトウェアの世界から来たあなたにはなじみのないステージで構成されています。ツール フローの詳細は常に変化していますが、使用するツールはコードから特定のデバイスに到達できる必要があります。このデザイン フローの最後の部分は、ハードウェア固有で独自のものであるため、通常 FPGA ベンダーによって提供されます。簡単な例を挙げると、必要なソフトウェアは VHDL および Verilog コードを使用する必要があります (これはザイリンクス バージョンです)。
FPGA にニューラル ネットワークを実装する際の潜在的な問題を指摘したいと思います。FPGA の配線リソースは限られています。ロジック リソース (フロップ、ルックアップ テーブル、メモリ) とは異なり、配線リソースは定量化が困難です。単純なニューラル ネットワークは機能するかもしれませんが、メッシュ インターコネクトを備えた「大規模な並列」ネットワークは機能しない可能性があります。
FPGA フローに慣れるために、OpenCores.org の単純なコアから始めてから、ニューラル ネットワークのプロトタイプ作成に進むことをお勧めします。ISIM シミュレーターを含む無料のザイリンクス WebPack をダウンロードすることから始めてください。後で安価な開発者を購入できます。デザインを実行する小さな FPGA (Xilinx Spartan 3 など) を搭載したボード。
Charles Stewart が何を言おうと、Verilog は始めるのに適した場所です。VHDL が ADA を思い出させるように、C を思い出させます。業界では誰も Occam を使用しておらず、大学では一般的ではありません。
Verilog の書籍については、特にVerilog HDLをお勧めします。Verilog は、C とは異なり、並列処理を自明に行います。
購入するには、[Altera] または Altera の3から比較的安価な Cyclone III 評価ボード(たとえば、NIOSを搭載したこの Cyclone III は 449 ドル、これは 199 ドル) または Xilinx から入手してください。
3 番目の推奨事項として、VHDL を使用します。はい、表面的には ADA のように見えます。Verilog は C にかなり似ていますが、Verilog を使用すると、すぐに使用できる型しか取得できません。VHDL を使用すると、独自の新しい型を定義して、より高いレベルでプログラミングすることができます (もちろん RTL のままです)。ザイリンクスとアルテラのフリー ツールが VHDL と Verilog の両方をサポートしていることは確かです。Ashenden による「A Designers Guide to VHDL」は、優れた VHDL の本です。
VHDL には、NN の実装を容易にする標準の固定小数点演算パッケージがあります。
私は 20 年近く FPGA についてあまり考えていなかったので古いものであり、どちらかというとあいまいな並行プログラミング言語を使用していますが、Page & Luk, 1991, Compiling Occam into FPGAsは、いくつかの重要なトピックを良い方法で十分にカバーしています。 、あなたの目的のためだと思います。試してみるための2つのリンク:
Occam->FPGA はアクションの場所ではありませんが、たとえば Verilog よりも開始するのに適した場所である可能性があります。
特に C の経験がある場合は、ザイリンクスの高位合成を調べることをお勧めします。hdl を使用する際の技術的な詳細が抽象化されるため、設計者はアルゴリズムの実装に集中できます。
記述できる C コードのタイプには制限があります。たとえば、動的サイズのハードウェアを推測するため、動的サイズのデータ構造を使用することはできません。