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