GETD - GETD - 2025.2 简体中文 - UG1629

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

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

描述

MicroBlaze V 会读取由 rs2 中 4 个最低有效位定义的链路,并将结果置于寄存器 rD 内。

GETD 指令有 32 种变体。

阻塞版本(当 n 位为 0 时)会保持停滞直至确认来自接口的数据有效为止。非阻塞版本不会停滞,如果数据有效,则将 mstream 中的 C 位设为 0,如果数据无效,则将 C 位设为 1。对于无效访问,目标寄存器的内容会保持未定义状态。

所有数据 GETD 指令(当 c 位为 0 时)都预判接口的控制位为 0。如果情况有变,则该指令会将 mstream 中的 FSL 位设为 1。所有控制 GETD 指令(当 c 位为 1 时)都预判接口的控制位为 1。如果情况有变,则该指令会将 mstream 中的 FSL 位设为 1。仅当传输有效数据时,FSL 位才会置位。

异常版本(当 e 位为 1 时)会在发生控制位不匹配时生成异常。生成异常时,目标寄存器不会更新。

测试版本(当 t 位为 1 时)照常处理,但链路的读取信号不会断言有效。

机器外部中断或外部断点无法中断原子版本(当 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
   (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 ← mtvec
         mcause ← 24

更改的寄存器

  • rD,除非生成异常,生成异常时寄存器保持不变。
  • mstream,stream(当 C_USE_MMU > 0 时)
  • PC 和 mcause(当生成串流异常或违规指令异常时)。

时延

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

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

注释

  • 使用 RV64 时,从链路读取的 32 位数据将采用零位扩展。
  • 除非 C_FSL_EXCEPTION 设为 1,否则 e 位没有任何作用。
  • 仅当参数 C_FSL_LINKS 大于 0 时,才能使用这些指令。
  • 仅当参数 C_USE_EXTENDED_FSL_INSTR 设为 1 时,才能使用扩展指令(异常、测试和原子版本)。
  • 对指令进行解码时,会忽略指令位 15-19 和 25-26,例外情况是在使用扩展地址指令时会检查位 25。
  • AXI4-Stream 提供了一个 FIFO 输入寄存器,允许先在接口上完成一项传输事务,然后再执行 GET 指令。