图 1. 从串流接口获取
描述
MicroBlaze V 从链路 x 接口读取数据,并将结果置于寄存器 rD 内。如果 C_FSL_LINKS
设置的可用链路数小于或等于 x,则使用链路 0。
GET 指令有 32 种变体。
阻塞版本(当 n 位为 0 时)会保持停滞直至确认来自接口的数据有效为止。非阻塞版本不会停滞,如果数据有效,则将 mstream 中的 C 位设为 0,如果数据无效,则将 C 位设为 1。对于无效访问,目标寄存器的内容会保持未定义状态。
所有数据 GET 指令(当 c 位为 0 时)都预判接口的控制位为 0。如果情况有变,则该指令会将 mstream 中的 FSL 位设为 1。所有控制 GET 指令(当 c 位为 1 时)都预判接口的控制位为 1。如果情况有变,则该指令会将 mstream 中的 FSL 位设为 1。
异常版本(当 e 位为 1 时)会在发生控制位不匹配时生成异常。生成异常时,目标寄存器不会更新。
测试版本(当 t 位为 1 时)照常处理,但链路的读取信号不会断言有效。
机器外部中断或外部断点无法中断原子版本(当 a 位为 1 时)。每条原子指令都会防止后续指令被中断。这意味着可以将一连串原子指令组合在一起,不会发生中断而引发程序流程断点。但仍有可能发生异常。
伪代码
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,以防生成串流异常
时延
- 1 个周期,
C_OPTIMIZATION
= 0、2 或 3 - 2 个周期,
C_OPTIMIZATION
= 1
该指令的阻塞版本会使流水线停滞,直至完成该指令为止。当参数 C_USE_EXTENDED_FSL_INSTR
设为 1 时,将提供中断服务,且指令不是原子指令。
注释
- 除非
C_FSL_EXCEPTION
设为 1,否则 e 位没有任何作用。 - 仅当参数
C_FSL_LINKS
大于 0 时,才能使用这些指令。 - 仅当参数
C_USE_EXTENDED_FSL_INSTR
设为 1 时,才能使用扩展指令(异常、测试和原子版本)。