3

Vivado综合设置之-keep_equivalent_registers

 1 year ago
source link: https://blog.51cto.com/u_15927439/5993018
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

​-keep_equivalent_registers即保留等效寄存器,所谓等效寄存器是指共享输入端口(输入时钟端口clk和输入数据端口rst)的寄存器。

勾选它时,意味着Vivado不会对等效寄存器进行优化;

不勾选它时(默认情况),意味着Vivado会合并等效寄存器。

Settings -> Synthesis中可看到设置位置,如下图,默认不勾选。​

Vivado综合设置之-keep_equivalent_registers_keep_equivalent_regi
module top(
input rst_n,
input clk,
output reg rst_rep1,
output reg rst_rep2
);

always @(posedge clk)
begin
rst_rep1 <= rst_n;
rst_rep2 <= rst_n;
end

endmodule

这里的rst_rep1和rst_rep2就是等效寄存器的输出。

不勾选keep_equivalent_registers时

执行综合后,打开Schematic,如下图:

Vivado综合设置之-keep_equivalent_registers_DONT_TOUCH_02

当不勾选keep_equivalent_registers时,意味着不保留等效寄存器,意味着等效寄存器会合并,合并意味着减少触发器FF的使用。

为便于理解,可以和勾选keep_equivalent_registers时的Schematic做对比。

勾选keep_equivalent_registers时

执行综合后,打开Schematic,如下图:

Vivado综合设置之-keep_equivalent_registers_keep_equivalent_regi_03

上图中rst_rep1_reg和rst_rep2_reg即是等效寄存器,因为它们共用了输入时钟端口clk和输入复位端口rst_n。

当勾选keep_equivalent_registers时,意味着保留等效寄存器,意味着不会对等效寄存器进行优化,等效寄存器的好处在于可以有效的降低扇出,坏处是增加了触发器FF的使用数量。既然等效寄存器有好有坏,直接勾选或者不勾选keep_equivalent_register​s都太简单粗暴了,一个好的处理方式是:

​默认不勾选keep_equivalent_registers,并且使用keep或者DONT_TOUCH来保留等效寄存器,确保不被优化。

和KEEP不同,DONT_TOUCH可以保证​ ​Vivado​​在任何阶段都不会对设定对象进行优化。​

KEEP测试代码

module top(
rst_n,
clk,
rst_rep1,
rst_rep2
);
input rst_n;
input clk;
(* keep = "TRUE" *) output reg rst_rep1;
(* keep = "TRUE" *) output reg rst_rep2;

always @(posedge clk)
begin
rst_rep1 <= rst_n;
rst_rep2 <= rst_n;
end

endmodule

综合后的原理图如下,可以看出等效寄存器被keep保留了。

Vivado综合设置之-keep_equivalent_registers_DONT_TOUCH_04

DONT_TOUCH测试代码

module top(
rst_n,
clk,
rst_rep1,
rst_rep2
);
input rst_n;
input clk;
(* DONT_TOUCH = "TRUE" *) output reg rst_rep1;
(* DONT_TOUCH = "TRUE" *) output reg rst_rep2;

always @(posedge clk)
begin
rst_rep1 <= rst_n;
rst_rep2 <= rst_n;
end

综合后的原理图如下,可以看出don't touch等效寄存器生效了。

Vivado综合设置之-keep_equivalent_registers_keep_05

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK