説明
MicroBlaze V は、rs2 の最下位 4 ビットで定義されたリンクから読み出しを実行し、その結果をレジスタ rD に配置します。C_FSL_LINKS
により設定されたリンク数が rs2 の最下位 4 ビットまたはそれ以下の場合、リンク 0 が使用されます。
GETD 命令には 32 個のバリエーションがあります。
ブロッキング バージョン (n ビットが 0 のとき) は、インターフェイスからのデータが有効になるまでストールします。ノンブロッキング バージョンはストールせず、mstream の C ビットを、データが有効な場合は 0 に、有効でない場合は 1 にセットします。アクセスが無効な場合は、デスティネーション レジスタの内容は未定義になります。
すべてのデータ GETD 命令 (c ビットが 0 のとき) は、インターフェイスからの制御ビットが 0 になるはずです。そうでない場合は、命令は mstream の FSL ビットを 1 にセットします。すべての制御 GETD 命令 (c ビットが 1 のとき) は、インターフェイスからの制御ビットが 1 になるはずです。そうでない場合は、命令は mstream の FSL ビットを 1 にセットします。
例外バージョン (e ビットが 1 のとき) は、制御ビットが一致しない場合に例外を生成します。デスティネーション レジスタは、例外が生成されるとアップデートされません。
テスト バージョン (t ビットが 1 のとき) は、リンクへの読み出し信号がアサートされていない場合を除き、標準ケースとして処理されます。
アトミック バージョン (a ビットが 1 のとき) は、マシン外部割り込みや外部ブレークによって割り込まれることはありません。各アトミック命令は、その後に続く命令の割り込みを防ぎます。つまり、アトミック命令のシーケンスは、プログラム フローを割り込むことなく、グループにまとめることができます。ただし、それでも例外は発生する可能性があります。
擬似コード
x ← rs2[3:0]
if x >= C_FSL_LINKS then
x ← 0
(rD) ← Sx_AXIS_TDATA
if n = 1 then
mstream.C ← Sx_AXIS_TVALID
if Sx_AXIS_TLAST ≠ c and Sx_AXIS_TVALID then
mstream.FSL ← 1
if (e = 1) then
PC ← mtval
mcause ← 24
変更されるレジスタ
- xD (例外が生成されない場合。例外が生成されるとこのレジスタは変更されません)。
- mstream
- PC および mcause (ストリーム例外が生成される場合)。
レイテンシ
-
C_OPTIMIZATION
= 0、2、3 で 1 サイクル -
C_OPTIMIZATION
= 1 で 2 サイクル
この命令のブロッキング バージョンは、命令を完了できるまでパイプラインをストールします。C_USE_EXTENDED_FSL_INSTR
が 1 に設定されていて、命令がアトミックでない場合に、割り込みが実行されます。
備考
-
C_FSL_EXCEPTION
1 でない限り、e ビットに効力はありません。 - これらの命令は、パラメーター
C_FSL_LINKS
が 0 より大きい場合のみ使用可能です。 - 拡張命令 (例外、テスト、およびアトミック バージョン) は、パラメーター
C_USE_EXTENDED_FSL_INSTR
が 1 に設定されている場合にのみ使用可能です。