欢迎光临散文网 会员登陆 & 注册

Vivado综合属性系列之七 DONT TOUCH

2023-05-20 16:57 作者:行中悟_悟中行  | 我要投稿

一、前言

        设计中经常会遇到一些信号,模块等被综合工具优化,而实际这些部分确是我们所需要的,针对这种情况,DONT TOUCH属性可以满足我们的需求,该属性使用频率较高。

二、DONT TOUCH

        2.1  属性说明

        DONT TOUCH可以用于代替属性KEEP和KEEP HIERARCHY,与两者仅作用于综合阶段,DONT TOUCH可以作用范围包含布局和布线阶段,依旧可以保持不被优化。当和其他属性冲突时,DONT TOUCH的优先级最高。

        2.2 属性用法

        DONT TOUCH作用对象包括信号,模块,以及网表,格式为(*DONT_TOUCH=VALUE*),属性值VALUE可设为TRUE/FALSE或yes/no;

作用于信号:(*DONT_TOUCH="YES"*) wire signal;

作用于模块:(*DONT_TOUCH="YES"*) module module_test(in,out);

作用于例化单元:(*DONT_TOUCH="YES"*) inst  inst_example(.in(in),.out(out));

        通常,DONT_TOUCH属性不建议使用在XDC文件中,因为对于信号来说,通常优化是发生在工具读取XDC文件前,因此设置属性可能导致无效。唯一一种推荐使用到XDC中的场景是当RTL代码中使用了DONT TOUCH属性并设置为yes时,想让该属性不生效但又不想改变RTL设计时,可以在XDC文件中再次进行DONT TOUCH属性设置为no的设置,此时后者设置生效,信号将会被优化。

         2.3 工程代码

module DONT_TOUCH(in1,in2,out );

input in1,in2;

(*DONT_TOUCH="YES"*) wire temp;

output out;

assign temp=in1&in2;

assign out=temp&in1;

endmodule

未使用DONT_TOUCH属性时,结果如下图,使用了一个LUT2来实现,temp信号已经被优化掉

添加DONT_TOUCH属性后,结果如下图,信号temp依旧保留,并且使用了两个LUT2实现逻辑。

          2.4 参考资料

用户手册:《ug901-vivado-synthesis.pdf》

Vivado综合属性系列之七 DONT TOUCH的评论 (共 条)

分享到微博请遵守国家法律