英特尔 Quartus Prime Pro Edition用户指南: 设计建议

ID 683082
日期 8/03/2023
Public
文档目录

1.4.3. 在HDL代码中推断移位寄存器

英特尔Quartus Prime软件中的Compiler的Analysis & Synthesis阶段会根据以下准则自动检测并推断您的HDL代码中的移位寄存器:

英特尔 Stratix 10英特尔 Agilex 7器件的移位寄存器推断

由于在英特尔 Hyperflex 体系结构的布线分段中普遍存在寄存器,因此对于英特尔 Stratix 10英特尔 Agilex 7器件,Compiler的移位寄存器推断的阈值会增加。阈值的增加意味着Compiler推断为上一代FPGA中的移位寄存器的某些逻辑当使用英特尔 Stratix 10或者英特尔 Agilex 7目标器件时可能不会被推断为移位寄存器。此阈值的增加会允许更多的寄存器重定时,从而提高整体的设计性能。

以下标准适用于英特尔 Stratix 10英特尔 Agilex 7器件的移位寄存器检测和推断。

英特尔 Stratix 10英特尔 Agilex 7器件的默认移位寄存器推断要求

  1. 移位寄存器中推断的寄存器的最小数量为64。当寄存器链的宽度为1时,此链必须包含至少69个寄存器才能使综合(synthesis)推断出一个移位寄存器。在这69个寄存器中,综合(synthesis)不会将链中的第一个和第二个寄存器包括在推断的移位寄存器中。综合(synthesis)将第一个和第二个移位寄存器放置在ALM中。综合(synthesis)推断出一个64比特长的移位寄存器,其中包含第三个到第六十六个寄存器。综合(synthesis)不会将链中的最后三个寄存器包括在推断的移位寄存器中。相反,综合(synthesis)将最后三个寄存器放置在ALM中。
  2. 移位寄存器中推断的寄存器的最小深度为32。当寄存器链的宽度为2或以上时,该链必须包含至少37个寄存器级才能使综合(synthesis)推断出一个移位寄存器。与第一个要求一样,综合(synthesis)综合不会将每个链中的第一个和第二个寄存器级包括在推断的移位寄存器中,也不会将最后三个寄存器级包括在推断的移位寄存器中。
图 2.  英特尔 Stratix 10英特尔 Agilex 7器件的移位寄存器推断
  • 通过使用以下assignment,所需要的寄存器总数(深度 * 宽度)下降到37:
    set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION ON
    注: 由于物理综合优化会恢复尚未重定时的寄存器的区域,因此在早期重定时阶段会出现额外的推断阶段。
  • 通过使用以下两个assignment,所需要的寄存器总数(深度 * 宽度)下降到13:
    set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION ON
    set_global_assignment -name PHYSICAL_SHIFT_REGISTER_INFERENCE=OFF
注: 降低移位寄存器推断阈值能够对设计性能产生负面影响,因为该技术会减少可用于重定时的寄存器数量。

英特尔 Arria 10英特尔 Cyclone 10 GX器件的移位寄存器推断

对于英特尔 Arria 10器件,Analysis & Synthesis检测一组相同长度的移位寄存器,并使用 Shift Register Intel® FPGA IP实现这些寄存器。

对于自动检测,所有移位寄存器都必须要有以下特征:

  • 使用相同的时钟和时钟使能
  • 没有其他次级信号
  • 有等间隔的抽头,抽头间至少相隔3个寄存器

综合(synthesis)仅针对具有专用RAM模块的器件系列识别移位寄存器。 英特尔 Quartus Prime Pro Edition 合使用以下准则:

  • 英特尔Quartus Prime软件决定是根据寄存的总线宽度(W),每个抽头之间的长度(L),还是抽头的数量(N)来推断 Shift Register Intel® FPGA IP
  • 如果Auto Shift Register Recognition选项被设置为Auto,那么 英特尔 Quartus Prime Pro Edition 综合决定在RAM模块中通过使用以下方法为逻辑实现哪些移位寄存器:
    • Optimization Technique设置
    • 关于设计的逻辑和RAM使用信息
    • 来自Timing-Driven Synthesis的时序信息
  • 如果寄存的总线宽度是1( W = 1 ),那么如果抽头的数量与每个抽头之间的长度的乘积大于或等于64 ( N x L > 64 ),那么英特尔Quartus Prime综合会推断移位寄存器IP。
  • 如果寄存的总线宽度大于1 ( W > 1 ),并且寄存的总线宽度,抽头数量与每个抽头之间的长度的乘积大于或者等于( W × N × L > 32 ),那么英特尔Quartus Prime综合Shift Register Intel® FPGA IP
  • 如果每个抽头之间的长度(L)不是2的幂,那么由于移位寄存器的不同尺寸,英特尔Quartus Prime综合需要外部逻辑(LE或者ALM)对读计数器和写计数器进行解码。这种额外的解码逻辑消除了在存储器中实现移位寄存器的性能和利用率优势。

英特尔Quartus Prime综合映射到Shift Register Intel® FPGA IP并放置在RAM中的寄存器不包括在Verilog HDL和VHDL输出文件中(用于仿真工具),因为这些寄存器的节点名称在综合后不存在。

注: Compiler不能将一个使用shift enable信号的移位寄存器实现到MLAB存储器中;而是使用专用RAM模式。要对实现移位寄存器的存储器结构的类型进行控制,请使用ramstyle属性。例如:
(* ramstyle = "mlab" *) my_shift_reg