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

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

3天内不再提示

数字设计之时钟约束和时钟类型介绍

电子设计 来源:FPGA开源工作室 作者:FPGA开源工作室 2020-11-29 10:51 次阅读

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}

图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]

图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]

图3 GT主时钟

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

相应的XDC:
create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

图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:一个简单的二分频

图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

考虑主时钟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。

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]

编辑:hfy

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

    关注

    30

    文章

    4991

    浏览量

    117416
  • 数字设计
    +关注

    关注

    0

    文章

    43

    浏览量

    22204
收藏 人收藏

    评论

    相关推荐

    FPGA时序案例分析之时钟周期约束

    时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要
    的头像 发表于 11-19 11:44 5236次阅读
    FPGA时序案例分析<b class='flag-5'>之时钟</b>周期<b class='flag-5'>约束</b>

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

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

    FPGA时钟周期约束讲解

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

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

    数字设计中,时钟代表从寄存器(register)到寄存器可靠传输数据的时间基准。
    的头像 发表于 01-04 09:16 462次阅读
    【Vivado<b class='flag-5'>约束</b>学习】 <b class='flag-5'>时钟</b><b class='flag-5'>约束</b><b class='flag-5'>介绍</b>

    FPGA时钟约束问题

    FPGA的DCM模块,40MHz时钟输入,得到clkout1 40MHz,clkout2 60MHz,clkout1 120MHz。对40MHz时钟添加了约束,系统不是会自动对三个输出时钟
    发表于 05-25 15:06

    时序约束之时钟约束

    1. 基本时钟约束create_clock-period 40.000 -name REFCLK [get_ports ref_clk] 创建时钟周期ns命名 名字连接端口
    发表于 09-21 11:51

    时序约束之时钟约束

    vivado默认计算所有时钟之间的路径,通过set_clock_groups命令可禁止在所标识的时钟组之间以及一个时钟组内的时钟进行时序分析。 1.异步
    发表于 09-21 12:40

    STM32F407之时钟、频率、存储的整体特性

    STM32F407之时钟、频率、存储概述文章目录STM32F407之时钟、频率、存储概述1.整体特性1.1存储器组织架构1.2 内嵌SRAM1.3Flash和自举程序2.电源3.时钟介绍
    发表于 08-02 07:24

    时钟约束的概念

    文章目录1、时钟约束的概念2、 DC中的时序约束参考文章时间又拖拖拖,随着追寻DFT的进度,DC的进度在经历了.dynopsys_dc.setup后,就停滞不前了,接下来本文就来介绍D
    发表于 11-17 06:56

    硬件设计中教你如何正确的约束时钟

    ”列可以容易的辨别出同步时钟。下面是3个场景,你需要使用合适的时钟约束处理异步时钟之间的关系。1. 如果时钟互联报告有很多(或者一个)红色的
    的头像 发表于 07-15 15:35 6006次阅读

    FPGA设计之时钟约束操作

    确定了主时钟和衍生时钟后,再看各个时钟是否有交互,即clka产生的数据是否在clkb的时钟域中被使用。
    发表于 04-06 10:20 4864次阅读

    DC使用教程系列2-时钟的概念与环境接口面积约束脚本

    文章目录1、时钟约束的概念2、 DC中的时序约束参考文章时间又拖拖拖,随着追寻DFT的进度,DC的进度在经历了.dynopsys_dc.setup后,就停滞不前了,接下来本文就来介绍D
    发表于 11-10 10:06 1次下载
    DC使用教程系列2-<b class='flag-5'>时钟</b>的概念与环境接口面积<b class='flag-5'>约束</b>脚本

    时钟周期约束详细介绍

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

    详解数字设计中的时钟约束

    数字设计中的时钟约束 本文作者 IClearner 在此特别鸣谢 最近做完了synopsys的DC workshop,涉及到时钟的建模/约束
    的头像 发表于 01-28 07:53 2142次阅读
    详解<b class='flag-5'>数字</b>设计中的<b class='flag-5'>时钟</b>与<b class='flag-5'>约束</b>

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

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