【ug903】FPGA时序约束学习(4)-如何约束跨时钟域(Clock domain crossing,CDC)

这篇具有很好参考价值的文章主要介绍了【ug903】FPGA时序约束学习(4)-如何约束跨时钟域(Clock domain crossing,CDC)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时序约束系列:

  1. 如何约束时钟
    主时钟、虚拟时钟、生成时钟、时钟组、时钟不确定性
  2. 如何约束输入输出延迟
    输入延迟、输出延迟
  3. 如何约束时序例外
    多周期路径、输入输出延迟、虚假路径、最大最小延迟
  4. 如何约束跨时钟域
    总线偏斜

1 关于CDC约束

跨时钟域(Clock Domain Crossing,CDC)约束适用于具有不同启动(launch)和捕获(capture)时钟的时序路径。

根据启动和捕获时钟关系以及在CDC路径上设置的时序例外(timing exception),分为同步CDC和异步CDC。

例如,被虚假路径(false path)约束覆盖的同步时钟之间的CDC路径是不进行时序分析的,因此被视为异步CDC。

异步CDC路径可以是安全(safe)的也可以是不安全(unsafe)的。异步CDC路径的安全和不安全的术语不同于用于时钟间时序分析的术语(参阅report_clock_interaction)。当异步CDC路径使用一个同步电路,以防止捕获时序单元出现亚稳态时,异步CDC路径被认为是安全的。

可以使用 set_false 或 set_clock_groups 约束完全忽略CDC路径的时序分析,也可以使用 set_max_delay -datapath_only 进行部分分析。此外,可以使用 set_bus_skew 约束约束多bit CDC 路径捕获时间。

2 约束总线偏斜(Bus Skew)

2.1 关于总线偏斜约束

总线偏斜约束用于设置多个异步CDC路径之间的最大偏斜要求。总线偏斜不是与时序路径相关的传统时钟偏斜。相反,它对应于被同一 set_bus_skew 约束覆盖的所有路径上的最大捕获时间差。总线偏斜要求适用于 Fast 和 Slow 边界条件,但未对跨边界条件进行分析。

总线偏斜约束的目的是限制可以 launch数据 并被 单个目标时钟边沿捕获的 源时钟边沿的数量。容差取决于用于受约束路径的CDC同步方案。总线偏斜约束通常用于以下CDC拓扑:

  • 格雷码(Gray-code)总线传输,如异步fifo
  • 用CE、MUX或MUX保持电路实现的多bit CDC
  • 配置寄存器

set_bus_skew 命令可以在 时序已经确保安全的同步CDC上 设置总线偏斜约束,虽然不需要这样的约束。因为 setup 和 hold 检查已经确保了两个安全时序的同步CDC路径之间的安全传输。

总线偏斜约束的CDC场景为:

  • 使用 set_clock_groups 覆盖的异步CDC
  • 完全由 set_false_path 和/或 set_max_delay -datapath_only 覆盖的异步CDC
  • 完全由 set_false_path 和/或 set_max_delay -datapath_only 覆盖的同步CDC

总线偏斜约束不是时序例外;相反,这是一种时序断言(timing assertion)。因此,它不会干扰时序例外(set_clock_group, set_false_path,set_max_delay, set_max_delay -datapath_only, and set_multicycle_path)及其优先级。

总线偏斜约束只能通过 route_design 命令进行优化。要报告 set_bus_skew 约束,请从命令行使用 report_bus_skew 命令或从GUI使用 Reports > Timing > report Bus Skew 命令。总线偏斜约束没有在时序摘要报告(report_timing_summary)中报告。

2.2 set_bus_skew 命令的语法

set_bus_skew [-from <args>] [-to <args>] [-through <args>] <value>
  • -from:from选项的对象列表应该是有效startpoint的列表。一个有效的startpoint是一个时钟,一个输入(或inout)端口,或一个时序单元(如寄存器或RAM)的时钟引脚。
  • -to:有效的 endpoint ,一个有效的endpoint是一个时钟,一个输出(或inout)端口,或一个时序单元的数据引脚。
  • -through:-through选项的节点列表应该是有效的引脚、端口或网表。

注意:

  • 在指定总线偏斜约束时,必须同时指定-from和-to选项
  • Xilinx建议在没有扇出输出的路径上设置总线偏斜约束。此外,每个总线偏斜约束必须覆盖至少两个起点和两个终点。

总线偏斜值必须是现实的和合理的。Xilinx建议使用大于源和目标时钟最小周期的一半的值。总线偏斜的推荐值还取决于CDC拓扑,如以下示例所示。

2.3 总线偏斜的例子

例子1:在本例中,CDC是握手机制的一部分。当数据可用于采样时,源时钟域生成发送信号。目标时钟域对发送信号使用4级同步器。在4级同步器之后,信号驱动CDC目标寄存器的时钟使能(CE)引脚。在这种时钟使能的控制CDC结构中,总线偏斜必须调整为CE路径上的级数,因为它代表数据有效的目标时钟周期数。

【ug903】FPGA时序约束学习(4)-如何约束跨时钟域(Clock domain crossing,CDC)

当源时钟周期为5ns,目的时钟周期为2.5 ns时,需要将CDC路径上的总线偏斜设置为10ns (4×2.5 ns)。

set_bus_skew -from [get_cells src_hsdata_ff_reg*] -to [get_cells dest_hsdata_ff_reg*] 10.000

注意:为了完整性,CDC需要一个额外的 set_max_delay 约束来确保源寄存器和目标寄存器没有放置得太远:

set_max_delay -datapath_only -from [get_cells src_hsdata_ff_reg*] -to [get_cells dest_hsdata_ff_reg*] 10.000

例子2:在本例中,CDC位于格雷码的总线上。系统必须保证目标时钟域在同一时间只捕获格雷码总线的一个转换。

如果源时钟周期为5ns,目标时钟周期为2.5 ns,则CDC路径上的总线偏斜应设置为2.5 ns(目标时钟周期)。

【ug903】FPGA时序约束学习(4)-如何约束跨时钟域(Clock domain crossing,CDC)

set_bus_skew -from [get_cells src_gray_ff_reg*] -to [get_cells {dest_graysync_ff_reg[0]*}] 2.500

注意:为了完整性,CDC需要一个附加的set_max_delay约束,以确保源和目标寄存器没有放置得太远。在这种情况下,最大延迟设置为源时钟周期,因为CDC处于较慢时钟到较快时钟之间,目标时钟域应该只捕获总线的一个过渡:文章来源地址https://www.toymoban.com/news/detail-476154.html

set_max_delay -datapath_only -from [get_cells src_gray_ff_reg*] -to [get_cells {dest_graysync_ff_reg[0]*}] 5.000

到了这里,关于【ug903】FPGA时序约束学习(4)-如何约束跨时钟域(Clock domain crossing,CDC)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA时序约束--进阶篇(主时钟约束)

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

    2024年02月09日
    浏览(44)
  • FPGA设计时序约束一、主时钟与生成时钟

    一、主时钟create_clock 1.1 定义 1.2 约束设置格式 1.3 Add this clock to the existing clock 1.4 示例 1.5 差分信号 二、生成时钟generate_clock 2.1 定义 2.2 格式 2.2.1 by clock frequency 2.2.2 by clock edges 2.2.3 示例 2.2.4 自动生成时钟 2.2.5 重命名生成时钟     主时钟是来自FPGA芯片外部的时钟,通过时

    2024年01月20日
    浏览(43)
  • FPGA时序分析与约束(10)——生成时钟

            最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候,它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号,当多个时钟域交互时,设计中只有异步时钟很难满足建立和保持要求。我们将在后面的内容中介绍这部

    2024年02月21日
    浏览(44)
  • FPGA时序分析与约束(3)——时钟不确定性

            在之前的文章中,我们介绍了组合电路的时序和时序电路的时序问题,在阅读本文章之前,强烈推荐先阅读完本系列之前的文章,因为这是我们继续学习的理论的理论基础,前文链接: FPGA时序分析与约束(2)——时序电路时序         本文我们将介绍时钟相关

    2024年02月10日
    浏览(42)
  • FPGA的时序分析、约束和收敛(8)----关于时序路径、时钟悲观度和建立时间/保持时间的一些问题

    目录 写在前面 1、为什么同一条时序路径在报表里的值不一样?

    2024年02月12日
    浏览(57)
  • 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)

    1、 同步设计 : 在同步设计中,整个设计都是使用同一个时钟源,所有时钟的频率和相位都可以事先预知 2、 异步设计 :在设计中有 两个或以上的时钟 , 且时钟之间是 同频不同相 或 不同频 的关系,异步时序设计的关键就是把数据或控制信号正确地进行 跨时钟域传输 。

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

    相关阅读 静态时序分析 https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482         在静态时序分析:SDC约束命令create_clock详解一文的最后,我们谈到了针对理想(ideal)时钟,可以使用set_clock_transition命令直接指定理想时钟到达各触发器时钟引脚的转换时间(这是

    2024年02月20日
    浏览(35)
  • FPGA的时序分析、约束和收敛(6)----如何读懂vivado下的时序报告?

    目录 写在前面 1、建立工程与添加时序约束 2、时序报表         在之前的文章中写了一些时序分析的基础概念,同时还说了文章中提到的公式根本就不需要记忆,因为综合工具vivado会帮你把所有时序路径都做详尽的分析,你所需要做的就是理解概念。         光说不

    2024年02月12日
    浏览(53)
  • 【数字IC/FPFA】时序约束--时钟约束

    时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束。 下面我们以vivado中的时钟约束为例,介绍时钟约束的相关内容。 在Vivado中我们通过使用create_clock来创建时钟周期约束。使用方法如下: 其中,参数name为创建

    2024年02月03日
    浏览(44)
  • 基于Xlinx的时序分析、约束和收敛(4)----主时钟约束

    目录 主时钟约束语法 例1:引脚输入的主时钟约束 例2:高速收发器GT的恢复时钟

    2023年04月17日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包