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

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

3天内不再提示

FPGA时序案例之多周期路径分析

电子设计 来源:科学计算technomania 作者:猫叔 2020-11-18 13:56 次阅读

两种时序例外

多周期路径

上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿。如下图所示。

FPGA时序约束理论篇之两种时序例外


默认情况下,保持时间的检查是以建立时间的检查为前提,即总是在建立时间的前一个时钟周期确定保持时间检查。这个也不难理解,上面的图中,数据在时刻1的边沿被发起,建立时间的检查是在时刻2进行,而保持时间的检查是在时刻1(如果这里不能理解,再回头看我们讲保持时间章节的内容),因此保持时间的检查是在建立时间检查的前一个时钟沿。

但在实际的工程中,经常会碰到数据被发起后,由于路径过长或者逻辑延迟过长要经过多个时钟周期才能到达捕获寄存器;又或者在数据发起的几个周期后,后续逻辑才能使用。这时如果按照单周期路径进行时序检查,就会报出时序违规。因此就需要我们这一节所讲的多周期路径了。

多周期约束的语句是:

set_multicycle_path  [-setup|-hold] [-start|-end][-from ] [-to ] [-through ]

对于建立时间,num_cycles是指多周期路径所需的时钟周期个数;对于保持时间,num_cycles是指相对于默认的捕获沿,实际捕获沿应回调的周期个数。

发起沿和捕获沿可能是同一个时钟,也可能是两个时钟,参数start和end就是选择参考时钟是发送端还是接收端。

  • start表示参考时钟为发送端(发端)所用时钟,对于保持时间的分析,若后面没有指定start或end,则默认为为-start;
  • end表示参考时钟为捕获端(收端)所用时钟,对于建立时间的分析,若后面没有指定start或end,则默认为为-end;

上面这两句话也不难理解,因为setup-time是在下一个时钟沿进行捕获时的约束,因此默认是对接收端的约束;而hold-up-time是对同一个时钟沿的约束,目的是发送端不能太快,是对发送端的约束。

对于单周期路径来说,setup的num_cycles为1,hold的num_cycles为0.

多周期路径要分以下几种情况进行分析:

1. 单时钟域

即发起时钟和捕获时钟是同一个时钟,其多周期路径模型如下图所示。

FPGA时序约束理论篇之两种时序例外


单时钟域的多周期路径常见于带有使能的电路中,我们以双时钟周期路径为例,其实现电路如下:

FPGA时序约束理论篇之两种时序例外


若我们没有指定任何的约束,默认的建立/保持时间的分析就像我们上面所讲的单周期路径,如下图所示。

FPGA时序约束理论篇之两种时序例外


但由于我们的的数据经过了两个时钟周期才被捕获,因此建立时间的分析时需要再延迟一个周期的时间。

采用如下的时序约束:

set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

在建立时间被修改后,保持时间也会自动调整到捕获时钟沿的前一个时钟沿,如下图所示。

FPGA时序约束理论篇之两种时序例外


很明显,这个保持时间检查是不对的,因为保持时间的检查针对的是同一个时钟沿,因此我们要把保持时间往回调一个周期,需要再增加一句约束:

set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C]  -to [get_pins data1_reg/D]

这里加上-end参数是因为我们要把捕获时钟沿往前移,因此针对的是接收端,但由于我们这边讲的是单时钟域,发送端和接收端的时钟是同一个,因此-end可以省略。这样,完整的时序约束如下:

set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 1 -hold  -from [get_pins data0_reg/C]  -to [get_pins data1_reg/D]

约束完成后,建立保持时间检查如下图所示。

FPGA时序约束理论篇之两种时序例外


在单时钟域下,若数据经过N个周期到达,则约束示例如下:

set_multicycle_path N -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path N-1 -hold  -from [get_pins data0_reg/C]  -to [get_pins data1_reg/D]

2. 时钟相移

FPGA时序约束理论篇之两种时序例外


前面我们讨论的是在单时钟域下,发送端和接收端时钟是同频同相的,如果两个时钟同频不同相怎么处理?

FPGA时序约束理论篇之两种时序例外


如上图所示,时钟周期为4ns,接收端的时钟沿比发送端晚了0.3ns,若不进行约束,建立时间只有0.3ns,时序基本不可能收敛;而保持时间则为3.7ns,过于丰富。可能有的同学对保持时间会有疑惑,3.7ns是怎么来的?还记得我们上面讲的保持时间的定义么,在0ns时刻,接收端捕获到发送的数据后,要再过3.7ns的时间发送端才会发出下一个数据,因此本次捕获的数据最短可持续3.7ns,即保持时间为3.7ns。

因此,在这种情况下,我们应把捕获沿向后移一个周期,约束如下:

set_multicycle_path 2 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]

对setup约束后,hold会自动向后移动一个周期,此时的建立保持时间检查如下:


那如果接收端的时钟比发送端的时钟超前了怎么处理?

FPGA时序约束理论篇之两种时序例外


同样的,时钟周期为4ns,但接收端时钟超前了0.3ns,从图中可以看出,此时setup是3.7ns,而保持时间是0.3ns。这两个时间基本已经满足了Xilinx器件的要求,因此无需进行约束。

3. 慢时钟到快时钟的多周期

当发起时钟慢于捕获时钟时,我们应该如何处理?

FPGA时序约束理论篇之两种时序例外


假设捕获时钟频率是发起时钟频率的3倍,在没有任何约束的情况下,Vivado默认会按照如下图所示的建立保持时间进行分析。

FPGA时序约束理论篇之两种时序例外


但我们可以通过约束让建立时间的要求更容易满足,即

set_multicycle_path 3 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]

跟上面讲的一样,设置了setup,hold会自动变化,但我们不希望hold变化,因此再增加:

set_multicycle_path 2 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2]

这里由于发起和捕获是两个时钟,因此-end参数是不可省的。加上时序约束后,Vivado会按照下面的方式进行时序分析。

FPGA时序约束理论篇之两种时序例外


4. 快时钟到慢时钟的多周期

当发起时钟快于捕获时钟时,我们应该如何处理?

FPGA时序约束理论篇之两种时序例外


假设发起时钟频率是捕获时钟频率的3倍,在没有任何约束的情况下,Vivado默认会按照如下图所示的建立保持时间进行分析。

FPGA时序约束理论篇之两种时序例外


同理,我们可以通过约束,让时序条件更加宽裕。

set_multicycle_path 3 -setup -start -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path 2 -hold -from [get_clocks CLK1] -to [get_clocks CLK2]

这里的hold约束中没有加-end参数,这样的话默认就是-start,是因为我们把发起时钟回调2个周期,如下图所示。

FPGA时序约束理论篇之两种时序例外


针对上面讲的几种多周期路径,总结如下:

FPGA时序约束理论篇之两种时序例外


伪路径

什么是伪路径?伪路径指的是该路径存在,但该路径的电路功能不会发生或者无须时序约束。如果路径上的电路不会发生,那Vivado综合后会自动优化掉,因此我们无需考虑这种情况。

为什么要创建伪路径?创建伪路径可以减少工具运行优化时间,增强实现结果,避免在不需要进行时序约束的地方花较多时间而忽略了真正需要进行优化的地方。

伪路径一般用于:
• 跨时钟域
• 一上电就被写入数据的寄存器
• 异步复位或测试逻辑
• 异步双端口RAM

可以看出,伪路径主要就是用在异步时钟的处理上,我们上一节讲的多周期路径中,也存在跨时钟域的情况的,但上面我们讲的是两个同步的时钟域。

伪路径的约束为:

set_false_path [-setup] [-hold] [-from ] [-to ] [-through ]
  • -from的节点应是有效的起始点.有效的起始点包含时钟对象,时序单元的clock引脚,或者input(or inout)原语;
  • -to的节点应包含有效的终结点.一个有效的终结点包含时钟对象,output(or inout)原语端口,或者时序功能单元的数据输入端口;
  • -through的节点应包括引脚,端口,或线网.当单独使用-through时,应注意所有路径中包含-through节点的路径都将被时序分析工具所忽略.

需要注意的是,-through是有先后顺序的,下面的两个约束是不同的约束:

set_false_path -through cell1/pin1 -through cell2/pin2
set_false_path -through cell2/pin2 -through cell1/pin1

因为它们经过的先后顺序不同,伪路径的约束是单向的,并非双向的,若两个时钟域相互之间都有数据传输,则应采用如下约束:

set_false_path -from [get_clocks clk1] -to [get_clocks clk2]
set_false_path -from [get_clocks clk2] -to [get_clocks clk1]

也可以直接采用如下的方式,与上述两行约束等效:

set_clock_groups -async -group [get_clocks clk1] -to [get_clocks clk2]

还有一些其他的约束,比如case analysis、disabling timing和bus_skew等,由于平时用的比较少,这里就不讲了。

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

    关注

    1626

    文章

    21671

    浏览量

    601889
  • 时序约束
    +关注

    关注

    1

    文章

    115

    浏览量

    13409
收藏 人收藏

    评论

    相关推荐

    使用IBIS模型进行时序分析

    电子发烧友网站提供《使用IBIS模型进行时序分析.pdf》资料免费下载
    发表于 10-21 10:00 0次下载
    使用IBIS模型进行<b class='flag-5'>时序</b><b class='flag-5'>分析</b>

    高速ADC与FPGA的LVDS数据接口中避免时序误差的设计考虑

    电子发烧友网站提供《高速ADC与FPGA的LVDS数据接口中避免时序误差的设计考虑.pdf》资料免费下载
    发表于 10-15 09:50 4次下载
    高速ADC与<b class='flag-5'>FPGA</b>的LVDS数据接口中避免<b class='flag-5'>时序</b>误差的设计考虑

    时序逻辑电路故障分析

    时序逻辑电路的主要故障分析是一个复杂而重要的课题,它涉及电路的稳定性、可靠性以及整体性能。以下是对时序逻辑电路主要故障的全面分析,旨在帮助理解和解决这些故障。
    的头像 发表于 08-29 11:13 567次阅读

    FPGA电源时序控制

    电子发烧友网站提供《FPGA电源时序控制.pdf》资料免费下载
    发表于 08-26 09:25 0次下载
    <b class='flag-5'>FPGA</b>电源<b class='flag-5'>时序</b>控制

    深度解析FPGA中的时序约束

    建立时间和保持时间是FPGA时序约束中两个最基本的概念,同样在芯片电路时序分析中也存在。
    的头像 发表于 08-06 11:40 562次阅读
    深度解析<b class='flag-5'>FPGA</b>中的<b class='flag-5'>时序</b>约束

    FPGA 高级设计:时序分析和收敛

    结果当然是要求系统时序满足设计者提出的要求。 下面举一个最简单的例子来说明时序分析的基本概念。 假设信号需要从输入到输出在FPGA 内部经过一些逻辑延时和
    发表于 06-17 17:07

    Xilinx FPGA编程技巧之常用时序约束详解

    Register-to-Register Constraint 寄存器到寄存器约束往往指的是周期约束,周期约束的覆盖范围包括: 覆盖了时钟域的时序要求 覆盖了同步数据在内部寄存器之间的传输
    发表于 05-06 15:51

    FPGA工程的时序约束实践案例

    详细的原时钟时序、数据路径时序、目标时钟时序的各延迟数据如下图所示。值得注意的是数据路径信息,其中包括Tco延迟和布线延迟,各级累加之后得到
    发表于 04-29 10:39 681次阅读
    <b class='flag-5'>FPGA</b>工程的<b class='flag-5'>时序</b>约束实践案例

    Xilinx FPGA编程技巧之常用时序约束详解

    寄存器到寄存器约束往往指的是周期约束,周期约束的覆盖范围包括: 覆盖了时钟域的时序要求 覆盖了同步数据在内部寄存器之间的传输 分析一个单独的时钟域内的
    发表于 04-12 17:39

    fpga时序仿真和功能仿真的区别

    FPGA时序仿真和功能仿真在芯片设计和验证过程中各自扮演着不可或缺的角色,它们之间存在明显的区别。
    的头像 发表于 03-15 15:28 2002次阅读

    “AI+工业互联网”赋能新型工业化的路径分析

    横看成岭侧成峰,探索“AI+工业互联网”技术赋能新型工业化的路径,还要从技术视角、产业视角、应用视角综合分析
    的头像 发表于 03-14 10:57 1080次阅读

    FPGA设计的常用基本时序路径分析

    该条路径包括了触发器内部clock-to-Q的延迟,触发器之间的由组合逻辑造成的路径延迟以及目标触发器的建立时间,其延时是数据从源触发器开始,在下一个时钟沿来到之前通过组合逻辑和布线的最大时间
    的头像 发表于 01-18 16:31 755次阅读
    <b class='flag-5'>FPGA</b>设计的常用基本<b class='flag-5'>时序</b><b class='flag-5'>路径分析</b>

    Vivado时序问题分析

    有些时候在写完代码之后呢,Vivado时序报红,Timing一栏有很多时序问题。
    的头像 发表于 01-05 10:18 1935次阅读

    FPGA连续信号给到AD9736,总会有周期毛刺出现的原因?

    FPGA连续信号给到AD9736,但是总会有周期毛刺出现,如图 逻辑分析仪检查FPGA的输出信号,没有该毛刺出现
    发表于 12-18 06:16

    FPGA通过SPI对ADC配置简介(二)-4线SPI配置时序分析

    本篇将以德州仪器(TI)的高速ADC芯片—ads52j90为例,进行ADC的4线SPI配置时序介绍与分析
    的头像 发表于 12-11 09:05 1785次阅读
    <b class='flag-5'>FPGA</b>通过SPI对ADC配置简介(二)-4线SPI配置<b class='flag-5'>时序</b><b class='flag-5'>分析</b>