0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Vivado约束学习】 时钟约束介绍

FPGA之家 来源:FPGA开源工作室 2024-01-04 09:16 次阅读

1 时钟介绍

在数字设计中,时钟代表从寄存器(register)到寄存器可靠传输数据的时间基准。Xilinx Vivado集成设计环境(IDE)时序引擎使用ClocK特征计算时序路径要求,并通过松弛计算报告设计时序裕度(Slack)。
时钟必须正确定义,以获得最佳的时序路径。以下特性定义了时钟:

1,时钟定义在它的树根的驱动器管脚或端口上,被称为源点。
2,时钟的边沿是由周期和波形特性相结合来描述的。
3,周期以纳秒(ns)为单位,时钟对应于波形重复的时间。
4,波形是时钟周期内上升边沿和下降边沿绝对时间的列表,以纳秒(ns)为单位。列表必须包含偶数的值。第一个值总是相对应的。到第一个上升的边沿。除非另有规定,占空比默认为50%,相移到0ns。

如图1所示,时钟CLK0具有10ns周期、50%占空比和0ns相位。时钟CLK1具有8ns周期、75%占空比(8ns内的高电平时间为6ns)和2ns上升沿相位偏移。

Clk0: period = 10, waveform = {0 5} 
Clk1: period = 8, waveform = {2 8}

98a16720-aa9e-11ee-8b88-92fbcf53809c.png

图1 时钟波形示例

1.1 传播时钟(Propagated Clocks)

周期和波形属性代表时钟的理想特性。当进入FPGA并通过时钟树传播时,时钟边沿被延迟并受到噪声和硬件行为引起的变化的影响。这些特性称为时钟网络延迟和时钟不确定性。

时钟的不确定性包括:
1,时钟抖动(Clock jitter)
2,相位误差
3,您指定的任何其他不确定性

默认情况下,Vivado IDE始终将时钟视为传播时钟,即非理想时钟,以便提供包括时钟树插入延迟和不确定性的准确松弛值。

1.2专用硬件资源

Xilinx FPGA的专用硬件资源有效支持大量设计时钟。这些时钟通常由电路板上的外部元件产生。它们通常通过输入端口进入设备。
它们也可以由称为时钟修改块的特殊原语生成,例如:
1,MMCM
2,BUFR
3,PLL
它们也可以通过常规单元格(如LUTS和寄存器)进行转换。

2 主时钟(Primary Clocks)

主时钟是通过输入端口或GT收发器输出引脚(例如,恢复时钟)进入设计的板时钟。
主时钟只能由create_clock命令定义。
如图2所示,板时钟通过端口sysclk进入器件,然后在到达路径寄存器之前通过输入缓冲器和时钟缓冲器传播。
1,时钟周期10ns
2,占空比50%
3,没有相位偏移
相应的Xilinx设计约束(XDC):

create_clock -period 10 [get_ports sysclk] 

98a6023a-aa9e-11ee-8b88-92fbcf53809c.png

图2 主时钟

与sysclk类似,板时钟devclk通过端口clkIn进入设备。
1,时钟周期10ns
2,占空比为25%
3,相位偏移90度
对应的XDC:

create_clock -name devclk -period 10 -waveform {2.5 5} [get_ports ClkIn]

如图3所示,展示了一个收发器gt0,它从电路板上的高速链路恢复时钟rxclk。时钟rxclk的周期为3.33 ns,占空比为50%,并被路由到MMCM,MMCM为设计生成多个补偿时钟。
对应的XDC:

create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

98aa84a4-aa9e-11ee-8b88-92fbcf53809c.png

图3 GT主时钟

如图4所示,差分缓冲器驱动PLL。在这种情况下,主时钟只能在差分缓冲区的正输入上创建。在缓冲区的每个正/负输入上创建主时钟将导致不切实际的CDC路径。
相应的XDC:

create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

98b8850e-aa9e-11ee-8b88-92fbcf53809c.png

图4 差动缓冲器上的主时钟

3虚拟时钟( Virtual Clocks)

虚拟时钟是指在设计中没有物理连接到任何Netlist元素的时钟。
虚拟时钟是通过create_clock命令定义的,而不指定源对象。
虚拟时钟通常用于在下列情况之一中指定输入和输出延迟约束:
1,外部设备I/O参考时钟不是设计时钟之一。
2,FPGA I / O路径与内部生成的时钟有关,该时钟无法与从中导出的时钟板正确计时。
3,希望只为与I/O延迟约束相关的时钟指定不同的抖动和延迟,而不修改内部时钟特性。
例如,时钟CLK_virt的周期为10 ns,不附加到任何Netlist对象。未指定[]参数。在这种情况下,-name选项是强制性的.
相应的XDC:

create_clock -name clk_virt -period 10

在输入和输出延迟约束使用之前,必须定义虚拟时钟

4 生成时钟(Generated Clocks)

生成的时钟由设计内部的特殊单元(称为时钟修改块(例如,MMCM))或某些用户逻辑驱动。
生成的时钟与主时钟相关联。create_generated_clock命令考虑主时钟的起始点。主时钟可以是主时钟或另一个生成时钟。
生成的时钟属性直接来自其主时钟。必须描述修改电路如何转换主时钟,而不是指定其周期或波形。

4.1 用户定义产生时钟

例1:一个简单的二分频

98d47bba-aa9e-11ee-8b88-92fbcf53809c.png

图5 Generated Clocks

主时钟clkin的周期为10 ns。寄存器REGA将其除以2,驱动其他寄存器时钟引脚。相应的生成时钟称为clkdiv2。
以下是两个同等的制约因素:

create_clock -name clkin -period 10 [get_ports clkin]
# Option 1: master clock source is the primary clock source point
create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 
[get_pins REGA/Q] 
# Option 2: master clock source is the REGA clock pin
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2 
[get_pins REGA/Q]

例2:除以2使用-edges选项
以下示例等效于示例1中定义的生成时钟:简单除法2

# waveform specified with -edges instead of -divide_by
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -edges {1 3 5}  [get_pins REGA/Q]

例3:使用-edges和-edge_shift选项进行占空比更改和相移
通过使用-edge_shift选项,生成的时钟波形的每个边沿也可以单独移位正值或负值。仅在需要相移时才使用此选项。
-edge_shift选项不能与以下任何内容同时使用:
1,-divide_by
2,-multiply_by
3,-invert

98da5ca6-aa9e-11ee-8b88-92fbcf53809c.png

考虑主时钟clkin,周期为10 ns,占空比为50%。它到达单元mmcm0,产生一个占空比为25%的时钟,移动90度。生成的时钟定义指的是主时钟边沿1,2和3.这些边沿分别出现在0ns,5ns和10ns。要获得所需波形,请将第一个和第三个边沿移动2.5ns。

create_clock -name clkin -period 10 [get_ports clkin] 
create_generated_clock -name clkshift -source [get_pins mmcm0/CLKIN] -edges {1 2 3}  -edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT] 
# First rising edge: 0ns + 2.5ns = 2.5ns
# Falling edge: 5ns + 0ns = 5ns
# Second rising edge: 10ns + 2.5ns = 12.5ns

4.2 自动派生时钟(Automatically Derived Clocks)

自动派生的时钟也称为自动生成的时钟。如果已经定义了相关的主时钟,Vivado IDE会自动为时钟修改模块(CMBs)的输出引脚创建约束。
在Xilinx 7系列器件中,CMBs是:
1,MMCM*/ PLL*
2,BUFR
3, PHASER*
例:以下自动导出的时钟示例是由MMCM生成的时钟。主时钟clkin驱动MMCME2实例clkip / mmcm0的输入CLKIN。自动生成时钟的名称是cpuClk,其定义点是clkip / mmcm0 / CLKOUT。

98eaf110-aa9e-11ee-8b88-92fbcf53809c.png

5 时钟组(Clock Groups)

默认情况下,Vivado IDE会对设计中所有时钟之间的路径进行计时,除非您通过使用时钟组或错误的路径约束来指定。set_clock_groups命令禁用您标识的时钟组之间的时序分析,而不是同一组内的时钟之间的时序分析。与set_false_path约束不同,时钟之间的两个方向都会忽略时序。
可以使用-group选项多次指定多组时钟。如果设计中不存在组中的任何时钟,则该组变空。只有当至少两个组有效且不为空时,set_clock_groups约束才会保持有效。如果只有一个组保持有效且所有其他组都为空,则不应用set_clock_groups约束并生成错误消息。
使用原理图查看器或时钟网络报告可视化时钟树的拓扑,并确定哪些时钟不能一起定时。您还可以使用时钟交互报告来查看两个时钟之间的现有约束,并确定它们是否共享相同的主时钟 - 也就是说,它们具有已知的相位关系 - 或者识别没有共同周期的时钟(不可扩展)。

5.1时钟类别

1)同步时钟(Synchronous Clocks)
当两个时钟的相对相位是可预测的时,它们是同步的。当它们的树源自网表中的同一根,并且它们具有共同的时间段时,通常就是这种情况。
2)异步时钟(Asynchronous Clocks )
当无法确定它们的相对相位时,两个时钟是异步的。
例如,由电路板上的独立振荡器产生并通过不同输入端口进入FPGA的两个时钟没有已知的相位关系。因此,它们必须被视为异步。如果它们是由电路板上的相同振荡器产生的,那就不是真的。
3)不可扩展时钟(Unexpandable Clocks )
当定时引擎无法确定超过1000个周期的共同周期时,两个时钟不可扩展。在这种情况下,在时序分析期间使用1000个周期内的最差设置关系,但是时序引擎无法确保这是最悲观的情况。
这是典型的情况下,两个时钟的奇数分数周期比。例如,考虑由共享同一个主时钟的两个MMCM生成的两个时钟clk 0和clk 1:
1,clk0的周期为5.125 ns。
2,Clk1的周期为6.666 ns.
它们的时钟上升沿不会在1000个周期内重新对齐。定时引擎在两个时钟之间的时序路径上使用0.01 ns的建立路径要求。即使两个时钟在其时钟树根处具有已知的相位关系,它们的波形也不允许它们之间的安全时序分析。

5.2异步时钟组(Asynchronous Clock Groups)

异步时钟和不可扩展的时钟无法安全定时。在分析期间,可以使用set_clock_groups命令忽略它们之间的时序路径。
创建异步时钟组
使用-asynchronous选项创建异步组。

set_clock_groups -name async_clk0_clk1 -asynchronous -group {clk0 usrclk itfclk} -group {clk1 gtclkrx gtclktx}

5.3 排他时钟组(Exclusive Clock Groups)

一些设计具有几种需要使用不同时钟的操作模式。时钟之间的选择通常使用诸如BUFGMUX和BUFGCTRL或A LUT的时钟多路复用器来完成。
通过使用set_clock_groups的选项来约束它们:
1,-logically_exclusive
2, -physically_exclusive
例:MMCM实例生成clk0和clk1,它们连接到BUFGMUX实例clkmux。clkmux的输出驱动设计时钟树。
默认情况下,Vivado IDE会分析clk0和clk1之间的路径,即使两个时钟共享同一个时钟树且不能同时存在。
您必须输入以下约束以禁用两个时钟之间的分析:

set_clock_groups -name exclusive_clk0_clk1 -physically_exclusive 
-group clk0 -group clk1

6 时钟延迟、抖动和不确定性(Clock Latency, Jitter, and Uncertainty)

6.1 时钟延迟

在电路板上和FPGA内部传播之后,时钟边沿到达目的地并有一定的延迟。此延迟通常表示为:
1,源延迟(时钟源点之前的延迟,通常在设备外部)
2,网络延迟
对于Xilinx FPGA,主要使用set_clock_latency命令指定器件外部的时钟延迟。

# Minimum source latency value for clock sysClk (for both Slow and Fast corners)
set_clock_latency -source -early 0.2 [get_clocks sysClk] 
# Maximum source latency value for clock sysClk (for both Slow and Fast corners)
set_clock_latency -source -late 0.5 [get_clocks sysClk]

6.2时钟不确定性

1)时钟抖动(Clock Jitter)
对于ASIC器件,时钟抖动通常用时钟不确定性特性表示。但是,对于Xilinx FPGA,抖动属性是可预测的。它们可以由时序分析引擎自动计算,也可以单独指定。
①输入抖动是连续时钟边沿与标称或理想时钟到达时间的变化之间的差异。输入抖动是绝对值,表示时钟边沿每一侧的变化。
使用set_input_jitter命令分别指定每个主时钟的输入抖动。您不能直接在生成的时钟上指定输入抖动。Vivado IDE定时引擎自动计算生成的时钟从其主时钟继承的抖动。
②系统抖动是由电源噪声,电路板噪声或系统的任何额外抖动引起的整体抖动。
使用set_system_jitter命令仅为整个设计设置一个值,即所有时钟。
以下命令在通过输入端口clkin传播的主时钟上设置+/- 100 ps抖动:

set_input_jitter [get_clocks -of_objects [get_ports clkin]] 0.1

2)额外的时钟不确定性
使用set_clock_uncertainty命令根据需要为不同的角点,延迟或特定时钟关系定义额外的时钟不确定性。这是从时序角度为设计的一部分添加额外余量的便捷方式。

set_clock_uncertainty 2.0 -from [get_clocks clk1] -to [get_clocks clk2] 
set_clock_uncertainty 1.0 [get_clocks clk1]







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    52

    文章

    8077

    浏览量

    145746
  • 寄存器
    +关注

    关注

    31

    文章

    5282

    浏览量

    119763
  • 占空比
    +关注

    关注

    0

    文章

    97

    浏览量

    29023
  • Vivado
    +关注

    关注

    19

    文章

    803

    浏览量

    66194
  • 时钟约束
    +关注

    关注

    0

    文章

    15

    浏览量

    6008

原文标题:【Vivado约束学习】 时钟约束

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VIVADO时序约束及STA基础

    时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序约束Vivado使用SDC基础上的XDC脚本以文本形式约束
    的头像 发表于 03-11 14:39 9631次阅读

    FPGA主时钟约束详解 Vivado添加时序约束方法

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。
    发表于 06-06 18:27 1w次阅读
    FPGA主<b class='flag-5'>时钟</b><b class='flag-5'>约束</b>详解 <b class='flag-5'>Vivado</b>添加时序<b class='flag-5'>约束</b>方法

    FPGA时序约束之衍生时钟约束时钟分组约束

    在FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的主时钟约束
    发表于 06-12 17:29 2526次阅读

    FPGA时钟周期约束讲解

    时钟周期约束是用于对时钟周期的约束,属于时序约束中最重要的约束之一。
    发表于 08-14 18:25 815次阅读

    vivado约束参考文档

    约束指令介绍)UG904 - Vivado Design Suite User Guide -Implementation UG906- Vivado Design Suite U
    发表于 09-26 15:35

    Vivado时钟分组约束的三类应用

    Vivado中通过set_clock_groups来约束不同的时钟组,它有三个选项分别是-asynchronous,-logically_exclusive
    发表于 02-08 08:39 1100次阅读
    <b class='flag-5'>Vivado</b><b class='flag-5'>时钟</b>分组<b class='flag-5'>约束</b>的三类应用

    ISE约束导入vivado总共分几步

    最近有些朋友在ISE中做的V7项目需要切换到vivado来,但导入代码后,导入约束时,发现vivado不再支持UCF文件,如果手抄UCF约束VI
    发表于 03-24 13:54 8815次阅读
    ISE<b class='flag-5'>约束</b>导入<b class='flag-5'>vivado</b>总共分几步

    FPGA约束的详细介绍

    介绍FPGA约束原理,理解约束的目的为设计服务,是为了保证设计满足时序要求,指导FPGA工具进行综合和实现,约束Vivado等工具努力实现
    发表于 06-25 09:14 6662次阅读

    Vivado中XDC文件的约束顺序

    很对人在使用Vivado时喜欢使用多个约束文件对整个工程进行约束,同时Vivado允许设计者使用一个或多个约束文件。虽然使用一个
    的头像 发表于 10-13 16:56 6816次阅读

    vivado时钟周期约束set_multicycle_path使用

    Vivado下set_multicycle_path的使用说明 vivado下多周期路径约束(set_multicycle_path)的使用,set_multicycle_path一般...
    发表于 12-20 19:12 1次下载
    <b class='flag-5'>vivado</b>多<b class='flag-5'>时钟</b>周期<b class='flag-5'>约束</b>set_multicycle_path使用

    Vivado设计约束功能概述

    XDC约束可以用一个或多个XDC文件,也可以用Tcl脚本实现;XDC文件或Tcl脚本都要加入到工程的某个约束集(set)中;虽然一个约束集可以同时添加两种类型约束,但是Tcl脚本不受
    的头像 发表于 06-30 11:27 3647次阅读

    时钟周期约束详细介绍

    时钟周期约束: 时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个
    的头像 发表于 08-05 12:50 3672次阅读

    时序约束---多时钟介绍

    当设计存在多个时钟时,根据时钟的相位和频率关系,分为同步时钟和异步时钟,这两类要分别讨论其约束
    的头像 发表于 04-06 14:34 1153次阅读
    时序<b class='flag-5'>约束</b>---多<b class='flag-5'>时钟</b><b class='flag-5'>介绍</b>

    如何在Vivado中添加时序约束呢?

    今天介绍一下,如何在Vivado中添加时序约束Vivado添加约束的方法有3种:xdc文件、时序约束
    的头像 发表于 06-26 15:21 3795次阅读
    如何在<b class='flag-5'>Vivado</b>中添加时序<b class='flag-5'>约束</b>呢?

    Vivado综合阶段什么约束生效?

    Vivado综合默认是timing driven模式,除了IO管脚等物理约束,建议添加必要的时序约束,有利于综合逻辑的优化,同时综合后的design里面可以评估时序。
    的头像 发表于 07-03 09:03 658次阅读