图 1. 置入串流接口动态
描述
MicroBlaze V 将寄存器 rs1 的值写入由 rs2 的 4 个最低有效位所定义的链路接口。如果 C_FSL_LINKS
设置的可用链路数小于或等于 rs2 的 4 个最低有效位,则使用链路 0。
PUTD 指令有 16 种变体。
阻塞版本(当 n 为 0 时)会停滞,直至接口中空间变为可用为止。非阻塞版本不会停滞,如果空间可用,则将 mstream 中的 C 位设为 0,如无空间可用,则将 C 位设为 1。
所有数据 PUTD 指令(当 c 位为 0 时)都将接口的控制位设为 0。所有控制 PUTD 指令(当 c 位为 1 时)都将控制位设为 1。
测试版本(当 t 位为 1 时)照常处理,但链路的写入信号不会断言有效,因此无需任何源寄存器。测试版本要求 rs1 为 x0。
机器外部中断或外部断点无法中断原子版本(当 a 位为 1 时)。每条原子指令都会防止后续指令被中断。这意味着可以将一连串原子指令组合在一起,不会发生中断而引发程序流程断点。
伪代码
x ← rs2[3:0]
if x >= C_FSL_LINKS then
x ← 0
Mx_AXIS_TDATA ← (rs1)
if n = 1 then
mstream.C ← Mx_AXIS_TVALID ˄ Mx_AXIS_TREADY
Mx_AXIS_TLAST ← c
更改寄存器
mstream时延
- 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 时,才能使用扩展指令(测试和原子版本)。