最新世代のザイリンクス製品は、自慢の 4.7TMACS と 600MHz での汎用ロジックを発表したばかりです。(これらは基本的に、より小さなプロセスで製造された Virtex 6 です。)
このような野獣では、主に乗算、加算、減算などの固定小数点演算でアルゴリズムを実装し、ワイド並列処理とパイプライン並列処理の両方を利用できる場合、電力と処理の両方の点で、ほとんどの PC を食い尽くすことができます。
これらでフローティングを行うことはできますが、パフォーマンスが低下します。DSP ブロックには、合計 48 ビットの 25x18 ビット MACC が含まれています。変則的なフォーマットを避けて、通常発生する浮動小数点の正規化の一部をバイパスできる場合でも、これらからトラック ロードのパフォーマンスを引き出すことができます。(つまり、通常の 24 ビットではなく、17 ビットの仮数部を持つ単純な固定小数点または浮動小数点数として 18 ビット入力を使用します。) 倍精度浮動小数点数は多くのリソースを消費するので、それが必要な場合は、おそらく PC の方がうまくいくでしょう。
アルゴリズムを加算演算と減算演算の観点から表現できる場合、これらの汎用ロジックを使用して膨大な数の加算器を実装できます。Bresenham の line/circle/yadda/yadda/yadda アルゴリズムのようなものは、FPGA 設計に非常に適しています。
除算が必要な場合...ええと...それは苦痛であり、除算を乗算として実装できない限り、おそらく比較的遅くなるでしょう。
多くの高精度の三角関数が必要な場合は、それほど多くはありません...これも可能ですが、きれいでも高速でもありません。(ちょうど 6502 でできるのと同じように。) 限られた範囲でルックアップ テーブルを使用するだけで対処できる場合は、ゴールデンです!
6502 といえば、6502 デモ コーダーは、これらのいずれかを歌わせることができます。プログラマーがそのような古い学校のマシンで使用していたすべての古い数学のトリックに精通している人なら誰でも適用できます. 現代のプログラマーが「ライブラリに任せてください」と言うすべてのトリックは、これらに数学を実装するために知っておく必要がある種類のものです。68000 ベースの Atari または Amiga で 3D を行うことについて説明している本を見つけることができれば、整数のみで実装する方法について多くのことを議論するでしょう。
実際、ルックアップ テーブルを使用して実装できるアルゴリズムは、FPGA に非常に適しています。ブロックラムをパーツ全体に分散させるだけでなく、ロジック セル自体をさまざまなサイズの LUT およびミニ RAM として構成できます。
固定ビット操作などが無料で見れる!ルーティングによる単純な処理です。固定シフトまたはビット反転は無料です。可変量によるシフトのような動的なビット操作は、最小限のロジックを消費し、牛が家に帰るまで実行できます!
最大の部分は 3960 乗数です! 142,200 個のスライスがあり、それぞれが 8 ビットの加算器になります。(構成に応じて、スライスあたり 4 つの 6 ビット Lut またはスライスあたり 8 つの 5 ビット Lut)。