要件の簡単な説明
(ここにはたくさんの良い答えがあります。すべてのおかげで、これが飛んだら更新します)。
検出器はトラックに沿って走り、曲線距離の関数として、いくつかの異なる物理パラメータをリアルタイム (決定論的) に測定します。ユーザーは、このプロセス中にボタンをクリックしてウェイポイントを「マーク」し、GUI を使用して各ウェイポイントの詳細を入力できます (人間の時間ですが、データ取得は継続されます)。
これに続いて、システムは取得したデータに対して一連の計算/フィルター/変更を実行し、各ウェイポイントに入力された制約を考慮します。このプロセスの出力は、曲線距離の関数としての一連の補正です。
プロセスの 3 番目の部分では、トラックに沿って再度実行しますが、今回はトラックを修正する物理システムに修正を書き込みます (やはり曲線距離の関数として)。
あなたの入力/コメント/警告に対する私の現在の考え
私が判断したいのは、PC + FPGA でこれを実行できるかどうかです。FPGA が「データ取得」を行い、PC で C# を使用してバッファからデータを読み取ります。ウェイポイント情報は、WPF/Winforms アプリケーションを介して入力し、データベース/フラットファイル/保留中の「処理」にストックすることができます。
処理には F# を使用します。
FPGA は、情報を物理マシンに「書き込む」ために使用されます。
私が現在予見できる問題の 1 つは、処理アルゴリズムがサンプリング周波数を必要とする場合、バッファするデータの量が大きくなりすぎる場合です。これは、処理の一部 (少なくともユーザー入力を必要としないビット) を FPGA にオフロードすることを意味します。残念ながら、唯一の前処理アルゴリズムはカルマン フィルターであり、FPGA で実装するのは難しいと私がググったところからわかりました。
フィードバックをお寄せいただければ幸いです。
更新 (追加情報はいつでもここに追加されます)
カルマン フィルターの入り口では、1 ミリ秒ごとに 1 回見ています。しかし、カルマン フィルターの反対側では、1 メートルごとにサンプリングすることになります。これは、ここで話している速度では 1 秒あたり約 2 になります。
したがって、より正確な質問は次のようになると思います。
FPGAにカルマンフィルターを実装することは可能だと思わ れますが、 それがどのように可能であるかを理解するには、どちらの主題についても十分に理解していません.
また、カルマンの FPGA 実装が 1 ミリ秒ごとに循環できるかどうかもわかりませんが、問題はないと思います。
私の理解が正しければ、FPGA には大量のメモリがありません。プロセスの 3 番目の部分では、(およそ) 4 x 400 の double の配列をルックアップ テーブルとして使用するために送信しますが、これは実行可能ですか?
また、2 つのプロセス (データの読み取り/書き込み) を切り替えることは、FPGA を毎回再プログラミングすることを意味しますか、それとも 2 つのプロセスを切り替えるように指示できますか? (両方を並行して実行し、どちらか一方を無視することも可能かもしれません)。
私が見た別のオプションは、 Avalda FPGA Developerを使用して F# を VHDL にコンパイルすることです。