如果寄存器流水线较深,应尽可能将更多寄存器映射在 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 个触发器上使用复位(例如,在流水线的第一个阶段或最后一个阶段)。