高扇出信号可能会因为布线拥塞而导致时序问题,常用的方法是通过寄存器复制以降低扇出,这可通过综合属性MAX_FANOUT实现。

MAX_FANOUT可应用于RTL代码中,也可以应用于XDC中,如下图所示。此外,MAX_FANOUT优先级高于-fanout_limit,且可作用于控制信号。

在使用MAX_FANOUT时可能会出现MAX_FANOUT不生效,可能的原因之一是其作用对象与负载不在同一层次,如下图所示。触发器在inst_0模块中,inst_0与inst_1在同一层次,但负载在inst_1下的三个模块inst_10、inst_11和inst_12中。

此时,一个可行的方法是将触发器搬移到相应的层次下再用MAX_FANOUT,如下图所示。

这里就不得不提到-flatten_hierarchy对MAX_FANOUT的影响。如下表所示。

MAX_FANOUT可作用于Xilinx IP内部信号,但未必会生效。这是因为IP本身会有一些保护属性,使得层次保留,造成触发器与负载不在同一层次下。此时,可使用如下方法。

另外,当MAX_FANOUT作用于bus中的某一位时,如下图所示,会造成其他位对应的寄存器也被复制。在这里rx_data_reg[0]~rx_data_reg[3]均被复制,这可能是不期望的。

为此,可采用如下方法。创建临时信号,将要使用MAX_FANOUT的信号和不使用MAX_FANOUT的信号隔离。

在RTL代码中使用MAX_FANOUT。

或在XDC中使用MAX_FANOUT。

通常,复制后的寄存器名字带有字符串rep。例如:
uart_rx_i0/uart_rx_ctl_i0/rx_data_reg[3]_rep
uart_rx_i0/uart_rx_ctl_i0/rx_data_reg[3]_rep__0
据此,可帮助查找已复制的寄存器。
结论
-MAX_FANOUT可有效帮助降低扇出,但需要确保待复制寄存器与负载在同一层次下
-对于IP,MAX_FANOUT未必生效,此时可借助phys_opt_design中的选项达到复制目的

------------------------------------------

关于set_max_fanout的准确理解和说明

在DC 的ug中说“the tool ensures the total loads connected to the input ports is small enough to keep the fanout no more the maximu value;”

很多人不能理解为什么set_max_fanout命令为什么是约束 input ports的而不是output,原因如下: ug中关于该命令的更详细的说明如下: ... compile attempts to ensure that the sum of the fanout_load attributes for input pins on nets driven by the specified ports or all nets in the specified design is less than the given value. 也就是说set_max_fanout约束了 由 input port 驱动的net(以及design内部所有nets)上所有相连 的input pin的fanout_load值的总和,而该fanout_load值由lib库中的default_fanout_load定义,这个值一般都为“1”。 由此大家可以简单理解为set_max_fanout约束了某条net上驱动的所有cell的个数的总和,而这条net可以由input port驱动, 也可以使内部的任何一条net; 这也是为什么set_max_fanout命令不是用来约束output ports,因为一个输出端口可能会连有很多条net; 而DC是根据net单独进行分析的; output port的约束使用set_fanout_load命令来约束的,现在一般用set_load命令代替; 注意这里set_fanout_load和lib库中default_fanout_load的值是没有关系的; 不知道这次解释清楚了没有,有兴趣的可以站内进行交流

------------------------------------

set_max_fanout:Sets the max_fanout attribute to a specified value on specified input ports and/ordesigns.

set_fanout_load:Sets the fanout_load attribute to a specified value on specified output ports of the current design.

应该这样理解set_max_fanout设置在input上,是通知DC该Cell上一级Cell的output max_fanout是N,则该级选用的Cell的input的load不能大于N。
set_fanout_load设置在output上的N,是通知DC该Cell下一级的Cell的input的load是N,则选取该Cell时它的max_fanout要大于(N+已知load)。

set_fanout_load 几乎不用了,就用set_max_fanout 设下DRC limit就行了

关于Vivado综合属性:MAX_FANOUT相关推荐

  1. Vivado使用技巧(24):HDL/XDC中设置综合属性

    Vivado综合工具支持直接在RTL文件或XDC文件中设置综合属性.如果Vivado识别出设置的属性,会创建与之相关的逻辑电路:如果不能识别设置的属性,会将该属性和值存放在生成的网表中.因为某些属性, ...

  2. Vivado 随笔(3) 其他综合属性 dont_touch、fsm_encoding?

    目录 dont_touch fsm_encoding dont_touch 可以参考: Vivado中如何避免信号被优化掉? fsm_encoding 我们在RTL设计中,在状态机的设计中,会给状态变 ...

  3. Vivado 随笔(2) 综合属性之use_dsp48?

    目录 背景 正文 测试 放置在Module前 放置在变量声明前 附加测试 放置在某个变量声明前 放置在Module前 相关链接 背景 在做一些FPGA算法的时候,我们不可避免的使用到大量的算术运算,例 ...

  4. Vivado 随笔(1) 综合属性之 ram_style rom_style?

    目录 背景 正文 相关文献 背景 在很多情况下,我们会定义一个二维数组来作为RAM或者ROM来使用,例如我们在设计一个异步FIFO时,我们需要例化一个双端口RAM来作为FIFO的存储空间,当然我们可以 ...

  5. Vivado使用:综合篇(三)综合属性

    Vivado 开发套件中,Vivado综合能够综合多种类型的属性,大多数情况下,这些属性的使用语法和行为都一样.当使用综合属性时,假如Vivado能够识别该属性,那么就使用这个属性并创建反映已经使用该 ...

  6. Vivado综合设置之-gated_clock_conversion

    本文验证-gated_clock_conversion设置为on或off时,给Schematic带来的差异. -gated_clock_conversion设置为on时,用于移除门控时钟,门控时钟是由 ...

  7. Vivado 综合约束实用命令(更新中……)

    引言 本文记录一些用于 Vivado 综合约束的实用命令,欢迎补充~ 本文会适当结合一些特定设计进行解释,并结合相关工程进行具体的综合实现分析,不只是理论知识还有实际操作. 演示使用的Vivado 版 ...

  8. 【vivado学习六】 Vivado综合

    世界上一成不变的东西,只有"任何事物都是在不断变化的"这条真理. -- 斯里兰卡 [vivado学习六] Vivado综合 在 Flow Navigator 中点击设置, 然后选择 ...

  9. 【蜂鸟E203的FPGA验证】Chap.8 Vivado综合与性能分析-Vivado性能分析

    [蜂鸟E203的FPGA验证]Chap.8 Vivado综合与性能分析-Vivado性能分析 综合后资源利用率分析 2. 综合后功耗与功耗优化 3. 综合后布局布线实现 4. 综合后静态时序分析 前言 ...

  10. vivado 综合报错 “ incorrect freePtr. Call out of sequence? “

    vivado 综合报错 " incorrect freePtr. Call out of sequence? " 很多FPGA的初学者或者第一次使用Viado作为开发工具的同学经常 ...

最新文章

  1. BZOJ1396:识别子串(SAM)
  2. 【细品架构12/100】架构漫谈系列脑图
  3. c语言中猴子拿香蕉的代码题,猴子分香蕉(2018年第九届蓝桥杯省赛第二题)
  4. php正则表达式,数组,函数
  5. 全国计算机c二级编程题,全国计算机二级C上机 编程题.doc
  6. fritz 使用手册_Fritz对象检测指南:使用机器学习在Android中构建宠物监控应用
  7. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
  8. cat3 utp是不是网线_小科普 | 网线也有高低?聊聊网线的差别
  9. python3 random模块操作
  10. 离开载具_迷你世界 自制火箭试飞成功 飞行载具不负众望
  11. 24种设计模式--命令模式【Command Pattern】
  12. fckeditor异常总结---The server didn‘t reply with a proper XML data. Please check your configuration.
  13. 服务器安装SSH服务:
  14. js上传文件并预览文件内容
  15. 计算机组装内存条安装,笔记本电脑内存条的正确安装方法
  16. mysql外键代码_SQL数据库外键代码
  17. postgreSql连接报不支持10验证类型
  18. html外链自动加nofollow,WordPress自动为站外链接添加nofollow标签
  19. Recent Advances in Open Set Recognition A survey全文翻译精校
  20. 2. Python函数式编程中的字符串,元组,函数的分类,高阶函数,一篇文章都介绍一遍

热门文章

  1. 485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多
  2. 风控项目2---风控建模流程
  3. Java jdk下载安装与配置及其不同版本jdk切换
  4. 最小二乘法计算平面度
  5. DDCTFMulTzor-xoortol的使用
  6. MySQL基础(常用的语句)
  7. LDAP认证-ldap介绍
  8. 易辅客栈-第16套从零学手游脚本实战
  9. 浅谈JSP编程的网店管理系统构造
  10. python查看微信撤回消息_Python查看微信好友撤回的消息