平衡流水线深度和 SRL 的使用 - 2023.2 简体中文

适用于 FPGA 和 SoC 的 UltraFast 设计方法指南 (UG949)

Document ID
UG949
Release Date
2023-11-29
Version
2023.2 简体中文

如果寄存器流水线较深,应尽可能将更多寄存器映射在 SRL 中,以避免寄存器使用率显著增加。例如,宽度为 32 的数据的流水线深度为 9,这会导致每个比特 9 个寄存器,总计使用 32 x 9 = 288 个寄存器。要将同样的结构映射到 SRL,需使用 32 个 SRL。每个 SRL 的地址管脚 A4 到 A0 都连接到 5'b01000,从而实现 9 个阶段的深度。

在综合期间可通过多种方法来推断 SRL,包括:

  • SRL
  • REG -> SRL
  • SRL -> REG
  • REG -> SRL -> REG

您可在 RTL 代码中使用 srl_style 属性创建这些结构,如下所示:

  • (* srl_style = "srl" *)
  • (* srl_style = "reg_srl" *)
  • (* srl_style = "srl_reg" *)
  • (* srl_style = "reg_srl_reg" *)

常见的错误是在较深的流水线阶段中使用不同的使能/复位控制信号。以下示例显示的是深度为 9 的流水线阶段中的复位,其中复位连接到第 3、第 5 和第 8 个流水线阶段。对于这种结构,工具只能将流水线阶段映射到寄存器,因为在 SRL 原语中有 1 个复位管脚。

FF->FF->FF(reset) -> FF->FF(reset)->FF->FF->FF(reset)->FF

要充分利用 SRL 推断,请:

  • 确保流水线阶段不含任何复位。
  • 分析是否确实需要复位。
  • 在 1 个触发器上使用复位(例如,在流水线的第一个阶段或最后一个阶段)。