图 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 指令。