Vivado綜合屬性系列之七 DONT TOUCH
一、前言
????????設(shè)計(jì)中經(jīng)常會(huì)遇到一些信號(hào),模塊等被綜合工具優(yōu)化,而實(shí)際這些部分確是我們所需要的,針對(duì)這種情況,DONT TOUCH屬性可以滿足我們的需求,該屬性使用頻率較高。
二、DONT TOUCH
????????2.1? 屬性說(shuō)明
????????DONT TOUCH可以用于代替屬性KEEP和KEEP HIERARCHY,與兩者僅作用于綜合階段,DONT TOUCH可以作用范圍包含布局和布線階段,依舊可以保持不被優(yōu)化。當(dāng)和其他屬性沖突時(shí),DONT TOUCH的優(yōu)先級(jí)最高。
????????2.2 屬性用法
????????DONT TOUCH作用對(duì)象包括信號(hào),模塊,以及網(wǎng)表,格式為(*DONT_TOUCH=VALUE*),屬性值VALUE可設(shè)為TRUE/FALSE或yes/no;
作用于信號(hào):(*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文件中,因?yàn)閷?duì)于信號(hào)來(lái)說(shuō),通常優(yōu)化是發(fā)生在工具讀取XDC文件前,因此設(shè)置屬性可能導(dǎo)致無(wú)效。唯一一種推薦使用到XDC中的場(chǎng)景是當(dāng)RTL代碼中使用了DONT TOUCH屬性并設(shè)置為yes時(shí),想讓該屬性不生效但又不想改變RTL設(shè)計(jì)時(shí),可以在XDC文件中再次進(jìn)行DONT TOUCH屬性設(shè)置為no的設(shè)置,此時(shí)后者設(shè)置生效,信號(hào)將會(huì)被優(yōu)化。
?????????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屬性時(shí),結(jié)果如下圖,使用了一個(gè)LUT2來(lái)實(shí)現(xiàn),temp信號(hào)已經(jīng)被優(yōu)化掉

添加DONT_TOUCH屬性后,結(jié)果如下圖,信號(hào)temp依舊保留,并且使用了兩個(gè)LUT2實(shí)現(xiàn)邏輯。

??????????2.4 參考資料
用戶手冊(cè):《ug901-vivado-synthesis.pdf》