时钟使能
如果正确使用,时钟使能能够显著地降低系统功耗,同时对面积或性能的影响极小。但是如果不正确地使用时钟使能,
可能会造成下列后果:
•
面积增大
•
密度减小
•
功耗上升
•
性能下降
在许多使用大量控制集的设计中,低扇出时钟使能可能是导致控制集数量众多的主要原因。
创建时钟使能
如果在同步块中编写不完整条件语句,就能创建时钟使能。推断时钟使能的目的是当前提条件无法满足时,保留最后
一个值。如果这是需要的功能,用这种方式编码就是有效的。但是在有些情况下,虽然前提条件值未得到满足,但输
出无所谓。此时赛灵思建议用设定的常数 (即为信号赋值 1 或 0 )关闭该条件 (即使用 else 子句)。
在大多数实现方案中,这不会造成额外的逻辑,同时可避免使用时钟使能。不过有个情况例外,即对大型总线而言,
如果推断时钟使能信号,保持上述的最后一个值,有助于降低功耗。基本前提是如果推断的寄存器数量较少,时钟使
能会存在较大弊端,因为它会增加控制集的数量。但是对较大型的群组而言,其利大于弊,所以建议使用。
复位和时钟使能的先后
在赛灵思 FPGA 器件中,所有寄存器的置位 / 复位功能的优先级均高于时钟使能,不论是异步置位 / 复位还是同步置位 /
复位都是如此。为取得最佳结果,赛灵思建议在同步块中的 if/else 结构中,应一直在时钟使能 (如有必要使用)
之前对置位 / 复位进行编码。优先对时钟使能进行编码会强制复位进入数据路径,并导致产生更多逻辑。
如需了解更多有关时钟的信息,请参阅 “ 时钟指南 ” 。
使用综合属性控制使能 / 复位提取
您可以通过根据需要应用 DIRECT_RESET/DIRECT_ENABLE/EXTRACT_RESET/EXTRACT_ENABLE 属性来强制控制器集映
射,以处理给定结构的控制器集的映射。
当设计包括同步复位 / 使能时,当负载等于或高于由 -control_set_opt_threshold 综合开关设置的阈值时,通过
CE/R/S 引脚映射的综合创建逻辑椎,或如果低于阈值,通过 D 引脚映射创建逻辑椎。默认阈值为:
• 7 系列器件: 4
• UltraScale 器件: 2
使用 DIRECT_ENABLE 和 DIRECT_RESET
要使用控制器集映射,你可以将属性应用于连接启用 / 复位信号的网络,但这将强制综合使用 CE/R 引脚。
在下图中,使能信号 (en) 只连接到一个触发器上。因此,综合引擎将 en 信号连接到逻辑的 FDRE/D 引脚椎。注意, CE
引脚连接到逻辑 1 。
要覆盖此默认行为,可以使用 DIRECT_ENABLE 属性。例如,下图显示了如何通过将 DIRECT_ENABLE 属性添加到端口 /
信号来将使能信号 (en) 连接到寄存器的 CE 引脚。
下图显示了 RTL 代码,其中 global_rst 或 int_rst 可以复位寄存器。默认情况下,两者都映射到逻辑的复位引脚
椎。
您可以使用 DIRECT_RESET 属性来指定连接到寄存器复位引脚的复位信号。例如,下图显示了如何使用 DIRECT_RESET
属性仅将 global_rst 信号连接到寄存器 FDRE/R 引脚,并将 int_rst 信号连接到逻辑的 FDRE/D 椎形。
将逻辑从控制引脚推到数据引脚
在分析关键路径时,您可能会发现以控制引脚结束的多个路径。您必须分析这些路径,以确定是否有一种方法将逻辑
推入数据路径,而不会产生损失,例如额外的逻辑层。由于存在最后一个 LUT 的输出到 FF 的 D 输入的直接连接,在给
定相同逻辑层的情况下,到 D 引脚路径的延迟比到 CE/R/S 引脚少。以下编码示例说明如何将逻辑从控制引脚推送到寄
存器的数据引脚。
在以下示例中, dout_reg [0] 的使能引脚具有 2 个逻辑层,数据引脚具有 0 个逻辑层。在这种情况下,通过将 RTL 文件
中 dout 寄存器定义中的 EXTRACT_ENABLE 属性设置为 “no” ,可以将使能逻辑移至 D 引脚,从而提高时序。
以下示例显示如何分离组合和順序逻辑并将完整逻辑映射到数据路径。这将逻辑推入仍然具有 2 个逻辑层的 D 引脚。
您可以通过将 EXTRACT_ENABLE 属性设置为 “no” 来实现相同的结构。如需了解更多有关 EXTRACT_ENABLE 属性的信
息,请参阅 《 Vivado Design Suite 用户指南:综合》 (UG901) [ 参照 18] 。