Vivado从此开始(进阶篇)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1.4 −keep_equivalent_registers

−keep_equivalent_registers在综合设置中的位置如图1.8所示。

所谓等效寄存器(Equivalent Registers)是指具有同源的寄存器,即共享输入端口(时钟端口和数据端口)的寄存器。等效寄存器可能是设计者无意引入的,也可能是有意为之的。对于无意引入的寄存器,Vivado在综合阶段可将其优化,从而避免额外的触发器(Flip Flop)开销。这里重点关注“特意”构造的等效寄存器。

img

图1.8

一个典型案例如图1.9所示。代码(代码的描述方式有VHDL和Verilog版,其含义是等效的,选择适合自己的一种描述方式即可)中的信号rst_rep1和rst_rep2都是信号rst在一个时钟周期延迟后的输出结果。从数字电路的角度看,可理解为有两个D触发器,它们的输入数据端口均为rst,时钟端口均为clk;而输出数据端口分别为rst_rep1和rst_rep2。此时,称这两个寄存器为等效寄存器。

img

图1.9

对于上述代码,在综合阶段,如果勾选−keep_equivalent_registers,那么rst_rep1和rst_rep2对应的寄存器均被保留,即在Schematic中会看到rst_rep1和rst_rep2。但是,通常上述代码只是工程中一个很小的部分,勾选−keep_equivalent_registers会造成Vivado无法对其他无意引入的等效寄存器进行优化,这是不利的方面。鉴于此,可利用综合属性keep保留等效寄存器,如图1.10所示。

img

图1.10

将keep作用于rst_rep1和rst_rep2,可确保这两个寄存器不被优化,同时不勾选−keep_equivalent_registers也使得Vivado可以对其他无意引入的寄存器进行优化。

“特意”引入等效寄存器(也可称之为手工复制寄存器)的一个重要原因是可以有效降低关键路径上的扇出、优化时序,尤其对于全局复位或全局使能信号而言,是一种行之有效的方式。

结论:

① 在通常情况下,建议不要勾选−keep_equivalent_registers,以确保工具可对无意引入的等效寄存器进行优化。

② 对于手工复制的寄存器而言,可通过综合属性keep确保其不被优化。

③ 对于全局复位或全局使能信号而言,可通过手工复制寄存器的方式降低扇出、优化时序。