目录
一、前言
二、DONT TOUCH
2.1 属性说明
2.2 属性用法
2.3 工程代码
2.4 参考资料
一、前言
设计中经常会遇到一些信号,模块等被综合工具优化,而实际这些部分确是我们所需要的,针对这种情况,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》