PUTD - 2025.1 日本語 - UG1629

MicroBlaze V プロセッサ リファレンス ガイド (UG1629)

Document ID
UG1629
Release Date
2025-07-09
Version
2025.1 日本語
図 1. ストリーム インターフェイスへの動的な書き込み

説明

MicroBlaze V は、レジスタ rs1 からの値を、rs2 の最下位 4 ビットで定義されたリンク インターフェイスに書き込みます。

PUTD 命令には 16 個のバリエーションがあります。

ブロッキング バージョン (n が 0 のとき) は、インターフェイスに空きができるまでストールします。ノンブロッキング バージョンはストールせず、mstream の C ビットを、空きがある場合は 0 に、空きがない場合は 1 にセットします。

テスト バージョンを除き、すべてのデータ PUTD 命令 (c ビットが 0 のとき) は、インターフェイスへの制御ビットを 0 にセットします。すべての制御 PUTD 命令 (c が 1 のとき) は、制御ビットを 1 にセットします。

テスト バージョン (t ビットが 1 のとき) は通常どおり処理されますが、データおよび制御ビットは出力されず、リンクへの書き込み信号はアサートされません。そのため、ソース レジスタは不要で、リンク データは割り当てられません。テスト バージョンでは、rs1 は x0 である必要があります。

アトミック バージョン (a ビットが 1 のとき) は、マシン外部割り込みや外部ブレークによって割り込まれることはありません。各アトミック命令は、その後に続く命令の割り込みを防ぎます。つまり、アトミック命令のシーケンスは、プログラム フローを割り込むことなく、グループにまとめることができます。

C_FSL_LINKS で設定された、利用可能なリンク数が rs2 の最下位 4 ビットまたはそれ以下の場合、C_ILL_INSTR_EXCEPTION = 2 のときに無効な命令例外が発生し、それ以外の場合は命令は NOP と同じ動作をします。

擬似コード

x ← rs2[3:0]
if x >= C_FSL_LINKS then
   if C_ILL_INSTR_EXCEPTION = 2 then 
      PC ← mtvec
      mcause ← 2
else
if t = 0 then
   Mx_AXIS_TDATA ← (rs1)
if n = 1 then
   mstream.C ← Mx_AXIS_TVALID ˄ Mx_AXIS_TREADY
if t = 0 then
   Mx_AXIS_TLAST ← c

変更されるレジスタ

  • mstream
  • stream (C_USE_MMU > 0 の場合)
  • PC および mcause (無効な命令例外が生成される場合)

レイテンシ

  • C_OPTIMIZATION = 0、2、3 で 1 サイクル
  • C_OPTIMIZATION = 1 で 2 サイクル

この命令のブロッキング バージョンは、命令を完了できるまでパイプラインをストールします。C_USE_EXTENDED_FSL_INSTR が 1 に設定されていて、命令がアトミックでない場合に、割り込みが実行されます。

備考

  • これらの命令は、パラメーター C_FSL_LINKS が 0 より大きい場合のみ使用可能です。
  • 拡張命令 (テストおよびアトミック バージョン) は、パラメーター C_USE_EXTENDED_FSL_INSTR が 1 に設定されている場合にのみ使用可能です。
  • 命令のデコード時には、命令ビット 7 ~ 11 および 25 ~ 27 は無視されます。
  • テスト バージョンでは、命令のデコード時に rs1 は無視されます。