FPGA时序约束经历之输出延时约束(set_output_delay)

这篇具有很好参考价值的文章主要介绍了FPGA时序约束经历之输出延时约束(set_output_delay)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

近期在进行emmc数据读写程序调试时,逼迫自己从一个时序小白跨进了时序约束的大门,这里记录一下供大家学习参考。

需求

emmc hs200模式下,允许最高时钟频率为200M。其中emmc和FPGA之间的引脚有单向EMMC_CLK,双向CMD和DATA[7:0]。根据emmc手册,要求建立时间为1.4ns,保持时间为0.8ns。EMMC_CLK是FPGA提供给emmc的,因此要求发送命令或数据时,CLK和CMD到达emmc芯片时要满足手册要求的建立和保持时间。

添加约束

要使输出的CLK和CMD满足emmc的建立保持时间,就需要告诉FPGA编译器,输出的延迟有多少。因此分两步:

第一步:添加时钟约束。

我用的是xilinx ,vivado软件,可以手写xdc约束文件,也可采用GUI界面,网上搜索如何进行约束,都是教的用手写,但遗憾的是,很多文章都是各种抄袭或者写得笼统粗略,对一个新手来说属实很难受(因为总出现语法错误还不知道原因)。因此这里推荐新手采用GUI添加约束,然后软件自动写到xdc文件,自己再去看,等熟练之后再进行手写。
点击implementation下的Edit Timing Constraints即添加约束
FPGA时序约束经历之输出延时约束(set_output_delay)
FPGA时序约束经历之输出延时约束(set_output_delay)
如图所示,可以添加时钟约束,输入输出约束等。
这里,我的时钟是锁相环锁出来的,然后连接到输出端口EMMC_CLK,因此属于衍生时钟,要用create generated clock(锁相环锁出来的或者自己写个分频代码分出来的都属于衍生时钟)。

第二步:添加输出延时。

添加好时钟后,就要添加我的CMD或者DATA相当于EMMC_CLK的输出延迟了,输出延迟的计算网上一搜一大堆,就不讲了,考虑PCB板级的走线延迟若为t,那么输出延迟设置的值max应为t+1.4,min值应为t-0.8,也就是输出延迟最大值应该是走线延迟加下级芯片的建立时间,最小值是走线延迟减去下级芯片的保持时间。
约束后的结果是

create_generated_clock -name CLK100M -source [get_pins pll/clk_in1] -multiply_by 1 -add -master_clock sys_clk [get_pins pll/clk_out2]
create_generated_clock -name emmc_clk -source [get_pins pll/clk_out2] -multiply_by 1 -add -master_clock CLK100M [get_ports emmc_clk]
set_output_delay -clock [get_clocks emmc_clk] -max -add_delay 1.600 [get_ports -filter { NAME =~  "*emmc*" && DIRECTION == "INOUT" }]
set_output_delay -clock [get_clocks emmc_clk] -min -add_delay -1.000 [get_ports -filter { NAME =~  "*emmc*" && DIRECTION == "INOUT" }]

我这里是由于不知道板级延时是多少,因此自己给多加的一点裕量。

现象

这里我用时序报告来给大家讲现象,至于时序报告怎么看,我认为这篇文章讲得很到位,我也是看这篇文章看懂的。
Vivado下如何阅读时序报告-知乎
我添加约束后有一个时序违例,报告建立时间裕度为负,也就是WNS为负,来看看报告。
先看保持时间
FPGA时序约束经历之输出延时约束(set_output_delay)
FPGA时序约束经历之输出延时约束(set_output_delay)
FPGA时序约束经历之输出延时约束(set_output_delay)
FPGA时序约束经历之输出延时约束(set_output_delay)
这里,保持时间的目标时钟Required Time 为10.223ns,vivado为了满足保持时间,让数据(Data Path)走了一个最小延迟为7.791ns的路径。
再看建立时间。
FPGA时序约束经历之输出延时约束(set_output_delay)
FPGA时序约束经历之输出延时约束(set_output_delay)
FPGA时序约束经历之输出延时约束(set_output_delay)
在建立时间中,Data Path数据路径是按最大值计算,这里由于保持时间中已经把路径定了,这里的数据路径延时就是16.115ns,但这直接导致了建立时间不满足时序了,也就是WNS为负。
我们来看布线图
FPGA时序约束经历之输出延时约束(set_output_delay)
途中就是这一条路径的走线,数据寄存器的起点和终点实际都在左上角,却在途中走了一个大圈。这里我在网上看到一个说法,无法求证,说vivado在编译的时候就是优先保证满足保持时间,再来满足建立时间。这个说法在这次实例中我认为得到了证明,这也就是平常WNS为负的情况比WHS为负的情况多的原因,也可以解释平常的WHS总是很小的现象。

时序优化

在这次实例中,我经过分析,我认为时序违例的原因是在计算保持时间裕度时,目的时钟的走线是按最大延迟计算,而这里我用了一个问号冒号语句来切换时钟,导致目的时钟算出来的最大延迟较大,所以数据路径被迫去绕一大圈来满足保持时间。而计算建立时间裕度时,目的时钟走线按最小延迟计算,我估计问号冒号语句时钟切换导致其最大延迟和最小延迟相差太大,因此采用了一个时钟切换小模块,不会产生毛刺的那种,替换了问号冒号。尔后这个问题就解决了。

总结

我认为分析时序违例,就得去看他违例的走线路径是怎么走的,然后分析导致裕度为负他的主要原因可能是哪里。然后再尝试更改设计。我是一个时序约束入门小白,若有理解不对,请大家留言指正,欢迎大家一起探讨。文章来源地址https://www.toymoban.com/news/detail-403655.html

到了这里,关于FPGA时序约束经历之输出延时约束(set_output_delay)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA时序分析与时序约束(二)——时钟约束

    目录 一、时序约束的步骤 二、时序网表和路径 2.1 时序网表 2.2 时序路径  三、时序约束的方式 三、时钟约束 3.1 主时钟约束 3.2 虚拟时钟约束 3.3 衍生时钟约束 3.4 时钟组约束 3.5 时钟特性约束 3.6 时钟延时约束         上一章了解了时序分析和约束的很多基本概念(FP

    2024年02月03日
    浏览(71)
  • FPGA时序约束与分析(1) --- 时序约束概述

    本系列参考文献 — FPGA时序与约束分析-吴厚航 FPGA从综合到实现需要的过程如下:synth_design - opt_design - place-design - phys_opt_design - route_design 1、时序约束的理解 2、时序约束的基本路径 3、时序约束的步骤 4、时序约束的主要方法 5、查看相关时序信息 FPGA的设计约束分为物理约束

    2024年02月16日
    浏览(34)
  • FPGA时序约束--实战篇(Vivado添加时序约束)

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束的方法。 今天介绍一下,如何在Vivado中添加时序约束,Vivado添加约束的方法有3种:xdc文件、时序约束向导(Constraints Wizard)、时序约束编辑器(Edit Timing Constrain

    2024年02月10日
    浏览(51)
  • Vivado时序约束之—— set_max_delay、set_min_dealy(最大最小延迟约束)

    1. set_max_delay、set_min_delay约束的目的 最大最小延迟约束主要是为了解决异步信号之间的时序路径进行时序约束的问题。最大延迟约束(set_max_delay)将默认覆盖建立时间分析中的最大路径延迟;最小延迟约束(set_min_delay)将默认覆盖保持时间分析中的最小路径延迟。所谓的最

    2023年04月09日
    浏览(40)
  • FPGA时序分析与约束(2)——时序电路时序

            在之前的内容中,我们介绍了组合电路的时序问题和可能导致的毛刺,强烈推荐在阅读前文的基础上再继续阅读本文, 前文链接:FPGA时序分析与约束(1)——组合电路时序         这篇文章中,我们将继续介绍FPGA时序分析相关内容,本文介绍的是时序电路的时序

    2024年02月10日
    浏览(42)
  • FPGA时序约束(二)利用Quartus18对Altera进行时序约束

    FPGA时序约束(一)基本概念入门及简单语法 最近由于不懂时序约束,在高速信号采集上面吃了很多亏,不知道系统工作异常的原因是什么。记录一下查到的资料,有些许自己的理解,可能有误。(主要是小梅哥及《FPGA时序约束与分析(吴厚航)》) 在程序编译之后,会出现

    2024年02月05日
    浏览(44)
  • 静态时序分析:SDC约束命令set_drive详解

    相关阅读 静态时序分析 https://blog.csdn.net/weixin_45791458/category_12567571.html         本章将讨论使用set_drive命令,它用于对输入端口的驱动能力建模。首先需要说明的是,默认情况下,DC在STA时默认输入端口的转换时间是0,这对于大多数情况来说过于理想。         set_drive命令设

    2024年02月22日
    浏览(51)
  • FPGA时序约束--进阶篇(主时钟约束)

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。 本文将重点讲解主时钟约束设置,给出详细的约束命令,并介绍了在Vivado中如何写入主时钟约束。 主时钟是FPGA电路中最基础的时钟,其稳定性和

    2024年02月09日
    浏览(44)
  • FPGA时序约束--实战篇(时序收敛优化)

    目录 一、模块运行时钟频率 二、HDL代码 1、HDL代码风格 2、HDL代码逻辑优化 三、组合逻辑层数 1、插入寄存器 2、逻辑展平设计 3、防止变量被优化 四、高扇出 1、使用max_fanout 2、复位信号高扇出 五、资源消耗 1、优化代码逻辑,减少资源消耗。 2、使用替代资源实现 六、总结

    2024年02月11日
    浏览(46)
  • FPGA时序分析与约束(8)——时序引擎

            要想进行时序分析和约束,我们需要理解时序引擎究竟是如何进行时序分析的,包括时序引擎如何进行建立分析(setup),保持分析(hold),恢复时间分析(recovery)和移除时间分析(removal)。         发起沿(launch edge,源时钟产生数据的有效时钟沿),捕获沿(capture

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包