Intel® Quartus® Prime Pro Edition用户指南: 设计优化

ID 683641
日期 9/30/2019
Public
文档目录

5.6.5.8.3. 寄存器自动复制:层次接近度

利用设计层次信息指导复制项的创建以及通过DUPLICATE_HIERARCHY_DEPTH约束使能其扇出约束。
set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to <register_name> <num_levels>

其中,

  • 在扇出多个层次结构的链中,register_name是该链中最后一个寄存器。要创建寄存器树,请确保节点后有足够的简单寄存器,且这些简单寄存器将自动拉入该树中。
  • num_levels对应链中存在的用于向下复制层次结构的寄存器数量的上限。

在综合阶段处理DUPLICATE_HIERARCHY_DEPTH约束。高扇出信号通常会穿过寄存器流水线并进入模块的自层次结构。例如,系统范围的复位可在几个时钟周期内传播,并被驱动到整个设计中的多个模块。某些情况下,利用该子层次结构有益于推断将要创建的寄存器树的结构,从而在相似层次结构内的端点被约束到同一信号副本设计中,且设计中的层次分支显示放置寄存器树分支的位置。

重要:

链中寄存器必须满足以下所有条件,才能包含与复制项中:

  • 寄存器必须由另一寄存器馈给。
  • 寄存器不得由组合逻辑馈给。
  • 寄存器不得是同步程序链的一部分。
  • 寄存器不得具有任何辅助信号。
  • 寄存器不可有preserve属性或 PRESERVE_REGISTER约束。
  • 除了链中最后一个寄存器外,链中其他所有寄存器必须仅有一个扇出。

参考以下实例,该网表具有寄存器链及其驱动的端点层次结构。DUPLICATE_HIERARCHY_DEPTH约束复制各个层次中的流水线寄存器,如图 35中所示。

图 32. 原图显示4个流水线寄存器连接到多个层次结构

该情况下,regZ是合适的约束对象,因为它是4个寄存器链中的端点。本实例(regZregYregX)中最多有3个备选复制对象,因此约束值可为1到3之间的任意值。regA未被拉入层次结构,以保持其之前的路径时序和优化。当某信号必须被复制到100个以上,且链下子层足的深度和重要度足以指导所需寄存器树的结构时,最好使用DUPLICATE_HIERARCHY_DEPTH约束。

图 33. 将regZ复制到Hierarchy Level One后的网表 set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to regZ 1

num_levels设置为1时,仅将regZ从链中拉出,并将一个层次级别推低至其扇出树中。

图 34. 将regZ复制到Hierarchy Level Two后的网表 set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to regZ 2

num_levels设置为2时,regYregZ被从链中拉出。regZ结束于最大层次深度2,而regY结束于最大层次深度1。

图 35. 层次结构中的寄存器复制 set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to regZ 3

num_levels设置为3时,所有3个寄存器(regZregYregZ)都从链中拉出,并分别推入3,2和1级的最大层次结构深度。

Synthesis报告中的Hierarchical Tree Duplication Summary面板提供关于由DUPLICATE_HIERARCHY_DEPTH约束指定寄存器的信息。其中还包括为何链的长度可用作进一步改进约束的起点的原因。Synthesis报告还提供名为Hierarchical Tree Duplication Details的面板,以提供关于链中各个寄存器的信息,进而更好了解已实现复制的结构。