このFPGA回路で使用されているアルゴリズムを理解するのに問題があります。冗長な数値形式と非冗長な数値形式を扱います。非冗長形式の数学的(正式な)定義を見たことがありますが、実際には理解できません。
アルゴリズムを説明するこのペーパーからの抜粋:
図3に、スケーラブルなMontgomery乗数のブロック図を示します。カーネルには、合計wpビットセルのpwビットPEが含まれています。Zは、桁上げ保存冗長形式で保存されます。PE1がZ ^(e-1)を終了する前にPEpがZ ^ 0を完了した場合、PE1が再び使用可能になるまで結果をキューに入れる必要があります。[5]の設計では、結果を冗長形式でキューに入れ、エントリごとに2wビットを必要とします。nが大きい場合、キューはかなりの領域を消費するため、図4に示すように、キュースペースの半分を節約するためにZを非冗長形式に変換することを提案します。最初のサイクルでは、 Zは0に初期化されます。キューイングが不要な場合、桁上げ保存加算器のレイテンシを回避するために、桁上げ保存冗長Z'は直接バイパスされます。非冗長Zの結果は、システムの出力でもあります。
そして図:
そして、これが「改善された」PEブロック図です。これは、「改善された」PEブロック図を示しています-「改善された」は、いくつかの無関係な側面と関係があります。
「改善されていない」FIFOの写真はありませんが、それは単なる通常のFIFOだと思います。私が理解していないのは、FIFOのCPAと3入力MUXが何らかの形でフォーマット間で変換されるのかということです。
(具体的な例では)冗長フォーマットと非冗長フォーマットを理解することが最初のステップであり、この回路がどのようにそれを実現するかを理解することはステップ2になります。