VIVADO学习笔记之--DONT_TOUCH

DONT_TOUCH是FPGA设计中的一种属性,用于防止综合工具优化特定的信号或模块。常见应用场景包括保留等效寄存器以降低扇出、保留观测寄存器以方便调试和保留冗余逻辑。然而,过度使用可能阻碍优化,占用资源并影响时序收敛。建议谨慎使用,并在时序收敛初期避免使用DONT_TOUCH。
摘要由CSDN通过智能技术生成

1.参考

https://mp.weixin.qq.com/s/-Oyc0DVUvtFWBmKNWphCtw

2.警惕设计中的DONT_TOUCH

DONT_TOUCH这个综合属性(Attribute)可能很多FPGA工程师在设计中都用过。先说说在什么情况下会使用DONT_TOUCH。
使用DONT_TOUCH的场景
注:这些场景使用DONT_TOUCH未必合理
场景1:保留等效寄存器
最典型的场合是为降低扇出,对高扇出的寄存器进行复制,之后对复制的寄存器和原始寄存器添加DONT_TOUCH属性。因为这些寄存器是等效寄存器,这样做可以保证在综合阶段哲学等效寄存器不会被合并。

场景2:保留观测寄存器
为了观测某一个信号(需要将其添加到ILA中),可能会出现在综合后的网表中无法找到的情况。这时候有些工程师会选择用DONT_TOUCH,使得该寄存器可以被保留在综合后的网表中。

场景3:保留冗余逻辑
举一个简单的例子,两个LUT级联,每个LUT的功能都是取反,这样最后一级LUT的输出与第一级LUT的输入是完全一样的,差别在于延迟。而这种延迟又是设计刻意为之(暂且不管什么原因)。抛开延迟而言,这两个LUT其实是冗余逻辑,可以被优化掉的。一旦使用了DONT_TOUCH就可以保证它们不会被移除。

DONT_TOUCH的作用对象
从上述三个场景不难看出,DONT_TOUCH的作用对象可以是signal(VHDL)/wire(Verilog),也可以是entity(VHDL)/module(Verilog)。看一个简单的例子:(文字来源Page 49, UG901 (v2019.1) June 12, 2019)
在这里插入图片描述
DONT_TOUCH的后果
DONT_TOUCH的最直接后果就是使得作用对象在设计的任何阶段都不会被优化掉。“不被优化掉”可能是设计本身的意图,从这个角度看是有利的。例如,手工复制寄存器以降低扇出,就要确保这些等效寄存器自始至终都存在。但如果不是设计本身的意图,就会阻碍工具的优化。例如,寄存器输入端D恒为0,但该寄存器被使用了DONT_TOUCH,那么工具就无法对该路径优化。这样,它既占用了一些逻辑资源,同时又占用了一些布线资源。甚至这些路径会成为时序收敛的瓶颈,从而,在应对时序违例时给我们带来困扰或者误导。

如何找到使用DONT_TOUCH的逻辑单元
可以通过如下Tcl命令找到使用了DONT_TOUCH的逻辑单元(只能用Tcl,没有图形界面方式,可见Tcl多么强大,还不赶紧学习学习,想学习Tcl,点这里Tcl知识库),对应下图第3行。也可以只找使用了DONT_TOUCH的触发器,对应下图第5行
在这里插入图片描述
如果需要找到使用了DONT_TOUCH的触发器,且触发器的输入端D恒为高或恒为低,可以使用如下图所示的Tcl脚本
在这里插入图片描述
回到最开始我们提到的三个场景,其中第一个场景是合理的,和KEEP不同,DONT_TOUCH可以保证Vivado在任何阶段都不会对设定对象进行优化。场景2其实是可以用MARK_DEBUG,但要在Elaborated Design阶段使用。场景3,在FPGA中不多见。建议在时序收敛初始阶段,不要使用DONT_TOUCH。

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有钱挣的地方就是江湖之FPGA行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值