アキュムレータ(符号なし)
- 更新日2023-02-17
- 10分で読める
アキュムレータ(符号なし)
xを累算するか、または減分します。このノードは、複数チャンネル操作とフィードバックスケールをサポートします。
このノードは、ブール配列と整数および固定小数点データタイプのスカラ値のみをサポートします。
入力/出力

x
合計の値に加算またはその値から減算するデータです。xが固定サイズブール配列の場合、最初の配列要素は最下位ビット(LSB)を、最後の要素は最上位ビット(MSB)を表します。

減算?
減算または加算を実行するかどうかを指定するブールです。この入力を使用して、操作をプログラム的に変更します。
| TRUE | 合計 - xを計算します。 |
| FALSE | 合計 + xを計算します。 |
Default value: FALSE

ロード
新規の累算を0から始めるかどうかを指定するブールです。
| TRUE | 合計の以前の値を無視し、xの値をロードして新たに累算を開始します。 |
| FALSE | 以前の実行から累算を継続します。 |
Default value: FALSE
指定のチャンネルから累算を再開する
マルチチャンネルアプリケーションで、この入力は、ロードが変化した場合、クロックサイクル中にxで受信したデータのチャンネルに影響します。たとえば、8回のクロックサイクルに渡り2つのチャンネルからのデータを累算する場合、xは1、3、5、および7回目のクロックサイクル中にチャンネル1からデータを受信します。チャンネル1の累算を再開するには、任意のクロックサイクル中にロードをTrueに設定します。チャンネル2からの累算は変化がないままです。

有効
xの値に演算するかどうか指定するブールです。適切なx値のみで演算するには、この入力を使用します。たとえば、高スループット数学ノードの出力有効出力をこの入力に配線して、先行ノードが有効な結果を生成した場合にのみアキュムレータが確実に動作するようにできます。
| TRUE | xの現在値を累積します。 |
| FALSE | xを無視し、合計を変更しません。 |
Default value: TRUE
特定のチャンネルからの値を無視する
マルチチャンネルアプリケーションで、この入力は、有効が変化した場合、クロックサイクル中にxで受信したデータのチャンネルに影響します。たとえば、8回のクロックサイクルに渡り2つのチャンネルからのデータを累算する場合、xは1、3、5、および7回目のクロックサイクル中にチャンネル1からデータを受信します。3回目のクロックサイクル中に有効をFalseに設定し、5回目のクロックサイクル中にこの値をTrueに戻せば、チャンネル1の2番目の値だけを無視することができます。チャンネル2からの累算は変化がないままです。

キャリーイン/反転ボローイン
合計の計算時にアキュムレータが追加の最下位ビット(LSB)を含むかどうかを指定するブールです。
| TRUE | 減算?もTrueの場合—sum - xを計算します。 減算?がFalseの場合—sum + x + 1(LSB)を計算します。 |
| FALSE | 減算?がTrueの場合—sum - x - 1(LSB)を計算します。 減算?もFalseの場合—sum + xを計算します。 |

合計
このノードが計算した結果です。
この結果はxの値だけでなく、ロードや有効など、ノードの他のブール入力の値によっても異なります。マルチチャンネルアプリケーションで、合計は各チャンネルごとに累算されます。
この関数は、以下のいずれかの場合にオーバーフローモードの「切り捨て」オプションを合計に適用します。
- 減算?がTrueで、キャリーアウト/反転ボローアウトがFalseを返す
- 減算?がFalseで、キャリーアウト/反転ボローアウトがTrueを返す

キャリーアウト/反転ボローアウト
合計のデータタイプが符号なしの加算の結果値または符号なしの減算の結果値を表すことができないかどうかを示すブールです。
| TRUE | 合計のデータタイプが符号なしの加算の結果値を表すことができません。 |
| FALSE | 合計のデータタイプが符号なしの減算の結果値を表すことができません。この場合、このノードは合計値を破棄します。 |
フィードバックダウンスケール
出力をxで累算または減分する前に、出力のビットパターンをこのノードが右にシフトするビット数を指定します。
チャンネル
このノードが扱うデータのチャンネル数を指定します。
このノードは、別々の内部レジスタで個別のチャンネルからのデータを保存します。複数のチャンネルを指定する場合、xに送信する値をインタリーブする必要があります。デフォルト値は1チャンネルです。
キャリーアウト/反転ボローアウト前にレジスタを追加
このノードが、キャリーアウト/反転ボローアウトの前に内部レジスタを追加するかどうかを指定します。このノードは、合計の値の1クロックサイクル前に、このノードがキャリーアウト/反転ボローアウトの結果をデフォルトで返します。合計の値と同じクロックサイクル中にキャリーアウト/反転ボローアウトの値を返すには、このチェックボックスをオンにします。
Examples
以下の表は、2つのチャンネルからのインタリーブされたデータを累積するアプリケーションで、このノードが合計 + xを計算する例を示します。
| クロックサイクル | x入力 | xの説明 | 合計出力 | 合計の説明 |
|---|---|---|---|---|
| 1 | 6 | チャンネル1サンプル1 | - | アキュムレータを実行するのに1クロックサイクルが必要なため、アキュムレータは最初のクロックサイクル中に合計を返しません。 |
| 2 | 8 | チャンネル2サンプル1 | 6(チャンネル1の累算) | このxはチャンネル2からデータを受信しますが、合計は前回のクロックサイクル1中に受信したチャンネル1からの計算結果を返します。サイクル1中、合計は0で、xは6なので、このノードは6を返します。 |
| 3 | 44 | チャンネル1サンプル2 | 8(チャンネル2の累算) | このxはチャンネル1からデータを受信しますが、合計は前回のクロックサイクル2中に受信したチャンネル2からの計算結果を返します。サイクル2中、チャンネル2の合計は0で、xは8なので、このノードは8を返します。 |
| 4 | 5 | チャンネル2サンプル2 | 50(チャンネル1の累算) | 6(クロックサイクル2からの合計)+ 44 (クロックサイクル3からのx) |
| 5 | 2 | チャンネル1サンプル3 | 13(チャンネル2の累算) | 8(クロックサイクル3からの合計)+ 5 (クロックサイクル4からのx) |
| 6 | 3 | チャンネル2サンプル3 | 52(チャンネル1の累算) | 50(クロックサイクル4からの合計)+ 2 (クロックサイクル5からのx) |
| 7 | - | チャンネル1からのデータはこれ以上ありません。 | 16(チャンネル2の累算) | 13(クロックサイクル5からの合計)+ 3 (クロックサイクル6からのx) |
累算をリセットする
新たに累算を開始するには、ロード入力を設定します。次に、合計で値の累算を続行する場合は、ロードをFalseにリセットします。
複数チャンネル操作
このノードが複数チャンネルからのデータを操作する方法は2つの要素で定義されます。
- このノードでは常に、合計の値を計算するのに1サイクルが必要です。
- 各チャンネルに対して、このノードは合計の別々の内部値を維持します。
2つのチャンネルからのインタリーブされたデータセットがあると、サイクル中のxがサイクル1からの場合、ノードはチャンネル2の合計値を返します。この動作の詳細な例については、このノードのサンプルタブを参照してください。
後続のアキュムレータノードで値を借りる
このノードをカスケードした場合、後続のノードが値を持ち越す(キャリー)か、または借りる(ボロー)かどうかを指定します。後続のノードがこの値を使用することを指定するには、キャリーアウト/反転ボローアウト出力を後続のアキュムレータノードのキャリーイン/反転ボローイン入力に配線します。
合計の値と同じクロックサイクル中にキャリーアウト/反転ボローアウトの値を返すには、キャリーアウト/反転ボローアウト前にレジスタを追加チェックボックスをオンにします。この機能は、アキュムレータをカスケードしていて、あるノードのキャリーアウト/反転ボローアウト出力と後続のノードのキャリーイン/反転ボローイン入力の間で遅延がないようにするのに便利です。このチェックボックスは、デフォルトでオフに設定されており、sの値の1クロックサイクル前に、このノードがキャリーアウト/反転ボローアウトの結果を返すことを意味します。
シミュレーションにおけるパフォーマンスの影響
FPGA VIのダウンロード、停止、実行時にこのノードを使用すると、シミュレーションの実行時間が大幅に増加する場合があります。