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

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

3天内不再提示

时钟周期约束详细介绍

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-08-05 12:50 次阅读

1. 时钟周期约束: 时钟周期约束,顾名思义,就是我们对时钟的周期进行约束,这个约束是我们用的最多的约束了,也是最重要的约束。

2. vivado中时钟约束指令:

create_clock

使用create_clock来创建时钟周期约束,使用方法:

create_clock -name -period -waveform { } [get_ports ]

5df8888c-1473-11ed-ba43-dac502259ad0.png

值得注意的是,这里的时钟必须是主时钟 primary clock。主时钟通常有两种情况:一种是由外部时钟源提供,另外一种是告诉收发器的时钟提供。

如何查看主时钟?

综合、布局布线之后

打开综合设计或者布局布线设计

两种方式查看主时钟:第一种,report_clock_networks -name mainclock,可以直接查看主时钟。第二种,check_timing -override_defaults no_clock,可以查看没有被约束的主时钟

当主时钟之间的相位关系确定时,则通过-waveform参数进行约束

5e144cca-1473-11ed-ba43-dac502259ad0.png

如上图所示的两个主时钟,进行如下约束:

create_clock -name clk0 -period 10.0 -waveform {0 5} [get_ports clk0]

create_clock -name clk1 -period 8.0 -waveform {2 8} [get_ports clk1]

数字单位默认是ns。如果不写waveform参数,则默认占空比是50%且第一个上升沿在0时刻。

一般来说,如果输入时钟是差分的,只需要对P端进行约束即可。

create_generated_clock

约束在FPGA内部产生的衍生时钟,使用方法如下:

create_generated_clock -name

-source

-multiply_by

-divide_by

-master_clock

5e346a14-1473-11ed-ba43-dac502259ad0.png

因为是衍生时钟,所以有-source参数,指明衍生时钟从哪里来的,后面就是源时钟名字,master clock,叫上一级时钟,区别于primary clock。它可以是primary clock 也可以是其他衍生时钟。

这个命令并不是设定周期和波形,而是描述时钟电路如何对上级时钟的转换:

简单的频率分频、倍频

频率和分频组合,获得非整数的比例,通常由MMCM或PLL完成

相移或波形反相

占空比改变

set_clock_groups

使用方法:

set_clock_groups -asynchronous -group -group

set_clock_groups -physically_exclusive -group -group

第一种用法:来指定两个主时钟是异步关系,使用asynchronous。

create_clock -period 10 -name clk1 [get_ports clk1]

create_clock -period 8 -name clk2 [get_ports clk2]

set_clock_groups -asynchronous -group clk1 -group clk2

第二种用法:当我们需要验证同一个时钟端口在不同时钟频率下能否获得时序收敛时使用。 比如有两个异步主时钟clk1和clk2,需要验证在clk2频率为100MHz,clk1频率分别为50MHz、100MHz和200MHz下的时序收敛情况,我们就可以这样写。

create_clock -name clk1A -period 20.0 [get_ports clk1]

create_clock -name clk1B -period 10.0 [get_ports clk1] -add

create_clock -name clk1C -period 5.0 [get_ports clk1] -add

create_clock -name clk2 -period 10.0 [get_ports clk2]

set_clock_groups -physically_exclusive -group clk1A -group clk1B -group clk1C

set_clock_groups -asynchronous -group "clk1A clk1B clk1C" -group clk2

第三种用法:当我们使用BUFGMUX时,会有两个输入时钟,但只会有一个时钟被使用。 比如MMCM输入100MHz时钟,两个输出分别为50MHz和200MHz,这两个时钟进入了BUFGMUX。在这种情况下,我们需要设置的时序约束如下:

set_clock_groups -logically_exclusive

-group [get_clocks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT0]]

-group [get_clocks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT1]]

虚拟时钟

虚拟时钟通常用于设定对输入和输出的延迟约束,这个约束其实是属于IO约束中的延迟约束。虚拟时钟和前面讲的延迟约束的使用场景不太相同。顾名思义,虚拟时钟,就是没有与之绑定的物理管脚。

虚拟时钟主要用于以下三个场景:

外部IO的参考时钟并不是设计中的时钟

FPGA I/O路径参考时钟来源于内部衍生时钟,但与主时钟的频率关系并不是整数倍

针对I/O指定不同的jitter和latency

  简而言之,之所以要创建虚拟时钟,对于输入来说,是因为输入到FPGA数据的捕获时钟是FPGA内部产生的,与主时钟频率不同;或者PCB上有Clock Buffer导致时钟延迟不同。对于输出来说,下游器件只接收到FPGA发送过去的数据,并没有随路时钟,用自己内部的时钟去捕获数据。

比如:如下图所示,在FPGA的A和B端口分别有两个输入,其中捕获A端口的时钟是主时钟,而捕获B端口的时钟是MMCM输出的衍生时钟,而且该衍生时钟与主时钟的频率不是整数倍关系。

5e4950c8-1473-11ed-ba43-dac502259ad0.png

这种情况下时序约束如下:

create_clock -name sysclk -period 10 [get_ports clkin]

create_clock -name virclk -period 6.4

set_input_delay 2 -clock sysclk [get_ports A]

set_input_delay 2 -clock virclk [get_ports B]

可以看到,创建虚拟时钟用的也是create_clock约束,但后面并没有加get_ports参数,因此被称为虚拟时钟。

再举个输出的例子,我们常用的UART和SPI,当FPGA通过串口向下游器件发送数据时,仅仅发过去了uart_tx这个数据,下游器件通过自己内部的时钟去捕获uart_tx上的数据,这就需要通过虚拟时钟来约束;而当FPGA通过SPI向下游器件发送数据时,会发送sclk/sda/csn三个信号,其中sclk就是sda的随路时钟,下游器件通过sclk去捕获sda的数据,而不是用自己内部的时钟,这是就不需要虚拟时钟,直接使用set_output_delay即可。

注意,虚拟时钟必须在约束I/O延迟之前被定义。

max/min delay的约束平时用的相对少一些,因为在跨异步时钟域时,我们往往会设置asynchronous或者false_path。对于异步时钟,我们一般都会通过设计来保证时序能够收敛,而不是通过时序约束来保证。

审核编辑:汤梓红


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

    关注

    1602

    文章

    21320

    浏览量

    593179
  • 时序约束
    +关注

    关注

    1

    文章

    111

    浏览量

    13350
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65099
  • 时钟约束
    +关注

    关注

    0

    文章

    15

    浏览量

    5990

原文标题:FPGA时序约束之时钟周期约束

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    FPGA时序约束之伪路径和多周期路径

    前面几篇FPGA时序约束进阶篇,介绍了常用主时钟约束、衍生时钟约束
    发表于 06-12 17:33 994次阅读

    FPGA时钟周期约束讲解

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

    关于时序约束

    例子来说明如何设置周期约束。考虑图3所示的电路设计范例1,输入时钟周期是10ns,并且是上升沿动作,占空比为45%高电平,55%低电平。  我们可以用这样的UCF语旬来定义这个时钟
    发表于 02-03 14:13

    ISE多周期时序约束

    有没有哪位大神对ISE的时序约束比较熟悉,尤其是多周期约束这一块。在Quartus中使用比较简单,而且相关资料也比较多,但是ISE中的资料好像不是那么多,而且也没有针对具体例子进行分析。官网上给出
    发表于 04-30 09:52

    输入抖动与收紧周期约束有什么不同?

    嗨,将input_jitter值与周期约束一起使用而不是仅仅收紧周期有什么不同?防爆。输入抖动:+/- 100 ps周期:10 ns约束1和2是等价的吗?1)TIMESPEC TS_c
    发表于 03-18 06:28

    设计中的关键路径如何约束

    方法来限制关键路径,而不是将周期约束放在它上面? (没有虚假路径或多周期路径)。我的理解是正确的,如果我应用10ns的周期约束,那么连接到该时钟的所有路径都被
    发表于 04-08 08:58

    MicroZed开发板笔记,第72部分:多周期约束

    By Adam Taylor 在最近的几篇博客中,我们研究了基本的时序约束。那么在设计中我们现在应该能定义时钟了,并且可以创建和声明它们的关系,还应该能在时钟和系统中声明任何缺陷。作为系统设计工
    发表于 02-08 03:13 270次阅读
    MicroZed开发板笔记,第72部分:多<b class='flag-5'>周期约束</b>

    FPGA开发之时序约束周期约束

    时序约束可以使得布线的成功率的提高,减少ISE布局布线时间。这时候用到的全局约束就有周期约束和偏移约束周期约束就是根据
    发表于 02-09 02:56 612次阅读

    添加时序约束的技巧分析

    。 在添加全局时序约束时,需要根据时钟频率划分不同的时钟域,添加各自的周期约束;然后对输入输出端口信号添加偏移约束,对片内逻辑添加附加
    发表于 11-25 09:14 2385次阅读

    Specific Timing Constraints

    关键词:ISE , 时序约束 时钟上升沿和下降沿之间的时序约束 周期约束可以自动计算两个沿的的约束——包括调整非50%占空比的
    发表于 09-26 07:44 217次阅读

    vivado多时钟周期约束set_multicycle_path使用

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

    关于多周期路径约束

    一、什么是多周期路径约束? 不管是quartus中还是在Vivado中,默认的建立时间和保持时间的检查都是单周期的,如图1所示,也就是说如果A时刻发送,B时刻捕获,这两者之间相差一个时钟
    的头像 发表于 12-10 12:05 833次阅读

    FPGA设计中大位宽、高时钟频率时序问题调试经验总结

    时钟周期约束:用户需要将设计中的所有时钟进行约束后,综合器才能进行合理的静态时序分析。一个设计中的时钟主要分为两类:主
    的头像 发表于 05-06 09:31 1380次阅读
    FPGA设计中大位宽、高<b class='flag-5'>时钟</b>频率时序问题调试经验总结