シフトレジスタ: ループ反復間で値を渡す
- 更新日2025-08-27
- 3分で読める
前回の反復からループを介して次の反復へ値を渡す場合には、シフトレジスタを使用します。シフトレジスタは、以下に示すようにループ枠の左右に一対の端子があり、互いに向かい合っています。
ループの右側の端子には上矢印が付いており、反復処理完了時のデータが保存されます。シフトレジスタの右側の端子に保存されたデータは、左側の端子に転送されます。次に、ループでは左側の端子からのデータを次の反復の初期値として使用します。この処理は、ループのすべての反復が実行されるまで継続します。ループの実行後、シフトレジスタに保存されている最後の値はループの右側の端子です。
シフトレジスタはどのタイプのデータでも転送でき、シフトレジスタに配線された最初のオブジェクトのデータタイプに自動的に適用します。各シフトレジスタの端子に配線するデータは、同じタイプである必要があります。並列Forループのシフトレジスタにエラークラスタが配線されている場合、シフトレジスタはエラーレジスタに変換されます。
ループには、複数のシフトレジスタを追加できます。以下のブロックダイアグラムに示すとおり、ループ内で複数の操作が前の反復値を使用している場合、複数のシフトレジスタを使用してストラクチャにそれら複数処理のデータ値を保存します。
上記のブロックダイアグラムでは、右上のシフトレジスタ端子が最初の反復で、左上の端子に2 (0と2の合計) を、追加操作の2番目の反復に対する初期値として転送しています。右下の端子が最初の反復で、左下の端子に2 (1と2の積) を、積算演算の2番目の反復に対する初期値として転送しています。
2番目の反復では、2に2を加算し、その結果 (4) を3番目の反復の左上の端子に転送します。また、2番目の反復では、2に4を積算し、その結果 (8) を3番目の反復の左下の端子に転送します。
10回の反復後、右上の端子は加算演算の最終結果を上部の表示器へ転送し、右下の端子は積算演算の最終結果を下部の表示器へ転送します。