前提

在做时序约束之前,先保证逻辑代码合理性

  1. 代码风格:使用同步复位,高电平复位;
  2. 模块边界上使用寄存器非组合逻辑;
  3. logic level要少;
  4. 适当使用DSP和RAM实现方式;DSP48和RAM不支持异步复位
  5. MMCM输出多个频率,把最高频率放在out0,VCO最高,uncertainty最小
  6. 减少工程中ILA VIO使用,包括深度和位宽
  7. 更改实现策略
  8. 关注复位和时钟,形成时钟网络,尽量少时钟及复位
  9. 每一步执行后都会有时序报告:策略更改为Timing Closure Reports
  10. 看官方文档UG903,UG949,UG945
  11. 时钟管理单元尽量放在顶层,模块的输出用寄存器输出
  12. 在没有优先的情况下,多使用case
  13. logic level最高不要超过8

综合synthesis

  1. DRC 检查违规项,并解决
  2. 解决相应的warning
  3. 查看FPGA资源消耗
  4. 看报告,为了发现关键路径(slack最差路径),将interconnect设置为none,目的是使线延迟为0,只看门级延迟

实现implement

Implementation里Post-place Phys Opt Design和Post-route Phys Opt Design是没有使能的。工程后期使能这两个配置也能在一定程度上改善时序收敛。

执行之后就可查看timing报告
报告主要分为3部分

  1. intra-clock paths 同步时钟的单时钟路径
  2. inter-clock paths 同步时钟的跨时钟路径
  3. async-default 异步时钟的跨时钟路径

上述三种的解决步骤依次为3,2,1

先缕清楚程序中都有哪些时钟?时钟网络如何?时钟与时钟之间的关系如何?时钟与数据之间的关系如何?
可借助Tcl指令
report_clocks 查看所有时钟状态,可得到时钟路径
report_clock_interation 查看异步时钟交互关系,重点关注unsafe
report_clock_network 查看时钟的生成关系网络
report_cdc查看跨时钟域之间的路径约束是否合理
report_high_fanout_nets -timing 管理高扇出
checking_timing 查看未约束的主时钟和衍生时钟
edit timing constraints 图形化约束接口
链接: 时序约束UI界面操作
///异步时钟约束//

set_false_path :设置虚假路径 ,针对同步时钟
set_clock_group:设置时钟分组 , 针对异步时钟
两者设置针对2,3,在代码端已经处理好时钟问题的基础上,让软件自动忽略检测,但设置要谨慎,两者对crosstalk的计算方法不同
两个时钟存在互相数据传递时,要互相设置from…to…

///输入输出port//
input delay max和input delay min
相位左移为-,右移为+。相位左移,减小建立时间裕量;相位右移,减小保持时间裕量

  • set_input_delay 和set_output_delay用于约束定义FPGA引脚边界之外的时序延时。两个设置都需要查看芯片外部器件的datasheet
  • set_input_delay:应用于FPGA器件的输入数据引脚或双向数据引脚,但不适用于FPGA内部信号或时钟输入引脚,可正,可负,取决于时钟相对于数据信号在FPGA引脚上的相位关系。 -max 建立时间检查 -min 保持时间检查;表明该信号在时钟沿后多长时间到达模块的port上
  • set_input_delay -clock wbclk 2 -reference_pin [get_pin wbclk_IBUF_BUFG_inst/O] [get_ports reset] 对输入reset做约束,指定其同步时钟为wbclk,相对参考时钟上升沿2ns的输入延时值
  • set_output_delay:该输出信号在后记模块中需要在时钟沿之前提前多久时间准备好;用于指定输出数据引脚相对于其时钟沿的路径延时。输出延时值包括数据信号从FPGA引脚到外部芯片的板级延时、外部芯片的建立时间和保持时间等。可正可负

/path分析
建立时间裕量:时钟到达时间-数据到达时间(数据到达早,时钟到达晚)
保持时间裕量:数据到达时间-时钟到达时间(时钟先离开,数据后离开)

  • 建立时间检查要保证的是时间数据到达时间(arrival time)必须早于规定时间(required time)
  • 保持时间检查要保证的是时间数据到达时间(arrival time)不能早于规定时间(required time)
  • 跨时钟域分析中,requirement=0.5ns(2000M)明显过小,需要确认两个clock之间的关系;clock skew = -3.448ns明显太大,
  • data path delay 中route5.838ns不正常 ,logic level=4 看是不是绕线严重,可能是拥塞导致
  • logic level 一个对应LUT+NET 大
  • 约0.5ns ,看时钟驱动,假如为200M=5ns 最多10级
  • 如果遇到复位信号因高扇出产生时序问题,可以用BUFG优化
  • clock path skew 一般不小于-0.5ns
  • clock uncertainty 一般不大于0.1ns
  • C时钟输入端;D数据输入端;Q输出输出端

/约束时钟分类//

  1. 主时钟
  2. 衍生时钟(生成时钟)
  3. 异步时钟
  4. 延迟时钟

/虚拟时钟/

  • 在一些时序路径中,如一些引脚上的数据信号,其同步时钟只存在于芯片外部,并不存在于FPGA器件内部。这种情况下,为了时序分析的需要也必须定义一个时钟用于描述时序数据引脚的外部时钟信号,这个时钟就是虚拟时钟。
  • 虚拟时钟并不是实际存在于FPGA器件中的
  • 虚拟时钟同样是以creat_clock命令进行约束定义的,但无需指定目标端口或网络

    虚拟时钟约束和主时钟约束区别:后边有无[get_ports DIN]

衍生时钟 (生成时钟)

  • MMCM/PLL生成的衍生时钟,不需要手动约束
  • 衍生时钟约束必须指定时钟源
  • 衍生时钟不直接定义频率、占空比等参数,而是定义其与时钟源的相对关系,如分频系数、倍频系数、相移差值等,因此在做衍生时钟约束前,要求先做好其时钟源的约束定义。

    高扇出问题/
    fanout:扇出,模块直接调用下级模块的个数,如果这个值太大,在FPGA中直接表现为net delay太大,不利于时序收敛。通过优化手段解决高扇出的三种方法:
  1. 寄存器复制
    a) 通过复制几个相同的寄存器来分担由原先一个寄存器驱动所有模块的任务。为了防止综合器优化为相同的寄存器,在对应信号上加入(EQUIVALENT_REGISTER_REMOVAL=”NO”)属性避免被优化
  2. max_fanout属性
    a) 在代码中可以设置信号属性,将对应信号的max_fanout属性设置成一个合理的值,当实际的设计中该信号的fanout超过了这个值,综合器就会自动对该信号采用优化手段,常用的手段就是寄存器复制。属性设置代码为:(max_fanout = “3”) reg signed [15:0] din_d; 赛灵思建议仅在支持中低扇出的局部信号上的层级内使用 MAX_FANOUT
  3. BUFG(复位信号)
    a) BUFG用于全局时钟资源,可以解决信号因为高扇出产生的问题。但是一般用于时钟或者复位之类扇出超级大的信号,此类信号设计的逻辑遍布整个芯片,而BUFG可以从全局的角度优化布线。一块FPGA中的BUFG的资源有限,用于普通信号的高扇出优化不现实。所以在时钟上用BUFG是必须的。如果设计中遇到某些复位信号因高扇出产生的时序问题,可以在此信号上使用BUFG来优化。

vivado时序约束相关推荐

  1. (95)Vivado时序约束TCL命令-all

    (95)Vivado时序约束TCL命令-all 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado时序约束TCL命令-all 5)技术交流 6)参考资料 2 ...

  2. (94)Vivado时序约束TCL命令-get_nets

    (94)Vivado时序约束TCL命令-get_nets 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado时序约束TCL命令-get_nets 5)技术交流 ...

  3. VIVADO时序约束及STA基础

    一.前言 无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节.在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求.本文阐述基本 ...

  4. VIVADO时序约束之Input Delay(set_input_delay)

    前言 I/O Delay约束主要有两个命令:set_input_delay和set_output_delay. I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟 ...

  5. VIVADO时序约束之Output Delay(set_output_delay)

    前言 I/O Delay约束主要有两个命令:set_input_delay和set_output_delay. I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟 ...

  6. VIVADO时序约束之时序例外(set_false_path)

    前言 当FPGA设计中的逻辑行为不能满足默认的时序要求时,设计者需要使用时序例外语法对该逻辑行为进行处理,例如:有些结果只需每个一个或多个时钟周期捕获一次. vivado开发工具支持4个时序例外约束的 ...

  7. Vivado时序约束之—— set_max_delay、set_min_dealy(最大最小延迟约束)

    set_max_delay.set_min_delay(最大.最小延迟约束) 1. set_max_delay.set_min_delay约束的目的 最大最小延迟约束主要是为了解决异步信号之间的时序路 ...

  8. 【 Vivado 】基本的时序约束、分析的概念

    目录 时序路径: Clock Setup Check: Clock Hold Check: Timing Report in Vivado: 时序路径: 关于时序路径,曾也有几篇博文讲到:[ FPGA ...

  9. TIMING_06 VIVADO环境下的时序约束 之 输入延迟约束

    由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/ ...

最新文章

  1. centos7 yum安装docker
  2. Axure RP Pro 6.0 原型设计工具(产品经理必备)
  3. html 订阅发布,发布-订阅模式.html
  4. java 对象的解释过程
  5. Python练习-迭代器-模拟cat|grep文件
  6. python安装requests模块失败_No module named quot;Cryptoquot;,如何安装Python三方模块Crypto...
  7. zblog php 调用缩略图,缩略图插件
  8. 开发中所使用的渠道(统计分析、分享、第三方登录、短信等)
  9. 讲师BLOG:http://linuxguest.blog.51cto.com/
  10. 统计学怎么求加权指数_统计学——指数
  11. oracle 列名sql,SQL查询表名、列名、列属性-Oracle
  12. android手机电池寿命,手机电池寿命检测
  13. Safari浏览器中工具栏的高度问题
  14. 计算机连接打印机连接打印机,怎么连接打印机.教您怎么连接打印机
  15. CQRS\ES架构介绍
  16. Hyper-V 和 VMWare 终于可以无缝共存、同时运行了
  17. 是的,各位久等的 Windows 神器已上架
  18. vb mysql_VB6 如何连接MYSQL数据库
  19. 服务器双机热备软件是什么?有什么作用?有哪些?
  20. VS 2019 + CUDA 10 开发环境搭建

热门文章

  1. python基础·入门笔记1(变量、数据类型、类型转换)
  2. Python中Tkinter解决button的command无返回值问题
  3. Initialization failed for Block pool registering (Datanode Uuid unassigned)
  4. 数据结构上机——希尔排序(含监视哨版本)
  5. 腾讯要建超级大脑,用三张网实现AI in All万物互联
  6. Educational Codeforces Round 96 (Rated for Div. 2) ABCD
  7. 【Excel】巧用数组——多项目跨越多个调整期的利息计算器
  8. java使用freemarker生成word
  9. [DeploymentService:290066]Error occurred while downloading files from admin server for deployment re
  10. mysql导出nb3文件_MySQL导入导出.sql文件