PUTD - PUTD - 2025.2 简体中文 - UG1629

MicroBlaze V 处理器参考指南 (UG1629)

Document ID
UG1629
Release Date
2025-11-20
Version
2025.2 简体中文
图 1. 置入串流接口动态

描述

MicroBlaze V 将寄存器 rs1 的值写入由 rs2 的 4 个最低有效位所定义的链路接口。

PUTD 指令有 16 种变体。

阻塞版本(当 n 为 0 时)会停滞,直至接口中空间变为可用为止。非阻塞版本不会停滞,如果空间可用,则将 mstream 中的 C 位设为 0,如无空间可用,则将 C 位设为 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(当生成违规指令异常时)

时延

  • 1 个周期,C_OPTIMIZATION = 0、2 或 3
  • 2 个周期,C_OPTIMIZATION = 1

该指令的阻塞版本会使流水线停滞,直至完成该指令为止。当参数 C_USE_EXTENDED_FSL_INSTR 设为 1 时,将提供中断服务,且指令不是原子指令。

注释

  • 仅当参数 C_FSL_LINKS 大于 0 时,才能使用这些指令。
  • 仅当参数 C_USE_EXTENDED_FSL_INSTR 设为 1 时,才能使用扩展指令(测试和原子版本)。
  • 对指令进行解码时,会忽略指令位 7-11 和 25-27,例外情况是在使用扩展地址指令时会检查位 25。
  • 对于测试版本,对指令进行解码时会忽略 rs1。
  • AXI4-Stream 提供了一个 FIFO 输出寄存器,允许在接口上发生传输事务之前先完成一条 PUT 指令。