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。

VIVADO学习笔记之--DONT_TOUCH相关推荐

  1. VIVADO学习笔记之--拥塞

    1.参考 https://mp.weixin.qq.com/s/hYU7BnKcuKyMLM_7wSH62w https://www.xilinx.com/support/answers/66314. ...

  2. FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾

    FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...

  3. FPGA 学习笔记:Vivado 2018.2 MicroBlaze Uartlite 配置

    前言 Vivado 版本: Vivado 2018.2 + Vivado HLS 2018.2, Vivado HLS 2018.2 用于 SDK 开发,C语言开发 创建基于MicroBlaze的 [ ...

  4. FPGA 学习笔记:Vivado 2019.1 添加 IP MicroBlaze

    前言 当前 FPGA 无所不能,能添加 MCU的核,也就是可以嵌入一个单片机的内核,当个单片机使用,这里添加 MicroBlaze,这个是RISC的核,还没有开始熟悉,估计与 ARM 或者 RISC- ...

  5. Vivado System Generator学习笔记

    环境:win7 64   vivado 2014.1 开发板:zedboard version d    xc7z020clg484-1 串口软件:SecureCRT 注意:本文中所有的源码.工程文件 ...

  6. linux之awk命令学习笔记

    Linux之awk命令学习笔记 前言 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, ...

  7. 3级调度 fpga_Vivado HLS学习笔记——1.了解FPGA架构

    本篇文章为本人学习Xilinx的Vivado HLS教程记录的学习笔记,仅供学习参考. Vivado HLS官方视频教程: 优酷视频​v.youku.com 目录: Vivado HLS课程简介 FP ...

  8. FPGA学习笔记(七): DSB调制解调的仿真

    笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...

  9. Design Compiler工具学习笔记(5)

    目录 引言 知识储备 代码风格 DFT 实际操作 引言 本篇继续学习 DC的基本使用.本篇主要学习 DC 工作机理和工作过程 以及简单介绍 DFT. 前文链接: Design Compiler工具学习 ...

最新文章

  1. android获取未安装APK签名信息及MD5指纹
  2. SIP中的SDP offer/answer交换初探
  3. 备受诟病的导购,不过是在替屈臣氏挡子弹
  4. Python 分析天气,告诉你中秋应该去哪里
  5. 4.3.2 基于集合的操作
  6. Bluetooth LE(低功耗蓝牙) - 第一部分
  7. 基于阈值的损失函数_推荐 :常见损失函数和评价指标总结(附公式amp;代码)...
  8. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
  9. c语言 单词变复数_关于C语言中的Complex(复数类型)和imaginary(虚数类型)
  10. android gms包
  11. PWM驱动sg90电机
  12. 小米 10s fastboot下 刷入 rec
  13. 数据库SQLite之嵌入式Linux实际网关项目使用初步
  14. win10打开红警卡死的解决方法--win10专业版
  15. python中求差的函数_Python编程基础11:函数和模块
  16. MarkdownNote
  17. NoSQL-Mongodb基本操作和复制集(一)
  18. 表单form中的submit事件
  19. 南澳.西冲-东冲穿越之旅
  20. oracle中LOB字段相关概念(自动创建LOB索引段和重建索引方法)

热门文章

  1. 【足迹C++primer】43、拷贝控制和资源管理
  2. 高薪程序员面试题精讲系列23之说一下如何实现文件上传、下载以及断点续传?
  3. 【风马一族_php】
  4. UVA 488 Triangle Wave
  5. u盘win7纯净版_教你安装纯净版windows系统
  6. 加强银行余额调节表在财务管理中的作用
  7. 货币银行学简答论述题
  8. 存储卡的相关标准.CF.SD.SDHC.MMC.TF
  9. 卷积神经网络 CNN 学习
  10. 解决win7和win8的64位系统安装NetAdvantage时总是提示%SystemDriver%inetpub\wwwroot错误的方法...