Vivado使用技巧(19):多周期路径

时序约束(Vivado) 时序约束一、时钟周期约束1、确定主时钟1)、主时钟之间有明确的相位关系2)、异步时钟3)、差分时钟约束4)、同源多时钟5)、高速收发时钟6)、虚拟时钟二、两种时序例外1、多周期路径2、虚假路径 本文参考: 《综合与时序分析的设计约束—Synopsys设计约束(SDC)实用指南》 《vivado从此开始—to learn vivado from here》 一、时钟周期约束 在设计中说明时钟的S... 阅读详情
AI摘要

本文深入解析Vivado时序分析中的多周期路径概念,包括如何通过set_multicycle_path命令正确设置建立时间和保持时间检查,以解决复杂数据路径和时钟相位偏移等问题,确保时序收敛。

多周期路径 Multicycle Paths

默认情况下,vivado时序引擎是按照单周期关系分析数据关系的,即数据在发起沿发送,在捕获被捕获,发起沿和捕获沿相差一个周期;但是很多情况是,数据路径逻辑较为复杂,导致延时较大,使得数据无法在一个时钟周期内稳定下来, 或者数据可以在一个时钟周期内稳定下来,但是在数据发送几个周期之后才使用;在这些情况中,设计者的意图都是使数据的有效期从发起沿为起始直至数个周期之后的捕获沿,这样的意图无法被时序分析工具猜度出来,必须由设计者在时序约束中指明;否则时序分析工具会按照单周期路径检查的方式执行,往往会误报出时序违规;此时,我们可以将这样的path约束为multicycle path,多周期路径的约束我们会用到set_multicycle_path;set_multicycle_path 可以用来修改与源时钟或者目的时钟相关的路径所需要的时钟周期数!


如何理解多周期路径约束?

先看看单时钟周期的情形,如下图所示:红色标记为默认情况下的建立时间检查,蓝色标记为默认情况下的保持时间检查,且注意保持时间的检查是以建立时间的检查为前提,即总是在建立时间检查的前一个时钟周期确定保持时间检查:

 

如果是多周期,如下图所示,此时两个寄存器之间尽管使用同一个时钟但因为使能信号的作用,使得两者数据率变为时钟频率的一半,意味着发起沿和捕获沿相隔2个时钟周期:

 

此时新的建立时间检查如下图中的红色实线所示,红色虚线为默认情况下的建立时间检查:

 

在此基础上,保持时间的检查变为下图中的蓝色实线(建立时间检查前移一个时钟周期):

 

但显然,此时的保持时间检查是不对的,可想象一下,如果是一个时钟频率为原始时钟频率的一半的时钟,保持时间检查应该如下图中的蓝色实线所示:

 

 多周期路径的约束我们会用到set_multicycle_path,常用的约束语法格式:

set_multicycle_path <path_multiplier> [-setup|-hold] [-start|-end]
[-from <startpoints>] [-to <endpoints>] [-through <pins|cells|nets>]

对于大多数情况,可以采用如下公式计算路径的周期数:

Hold cycles = <setup path multiplier> - 1 - <hold path multiplier>

这里我们结合上述分析重点介绍一下相应参数的含义: 

  • <path_multiplier>:周期数,对于建立时间检查默认为1,保持时间检查默认为0;

*语句中数字的含义:

  • 对于-setup:表示该多周期路径建立时间所需要的时钟周期个数;
  • 对于-hold:表示相对于缺省捕获沿(图中的Default hold),实际捕获沿(图中的New hold)应回调的时钟周期个数;

*参考时钟周期的选取:

  • -end表示参考时钟为捕获端(收端)所用时钟,对于-setup缺省为-end;
  • -start表示参考时钟为发送端(发端)所用时钟,对于-hold缺省为-start;

Multicycles in Single Clock Domain  单时钟域的多周期路径
 

 

如上图所示,两个寄存器之间的数据路径为N个周期,默认情况下的建立和保持时间检查如下所示:

 

 例1.Relaxing Setup While Maintaining Hold 放宽建立检查维持保持检查

 

上图中两个寄存器之间的数据路径周期数为2,因此下面的语句设定了一个新的建立检查关系:

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

新的建立检查关系如下所示:

 即默认的保持时间检查总是建立时间检查往前推一个周期

但是很显然,此时的保持时间检查是不对的,它应该在最开始的位置,即上图中的发起沿的位置,所以要用到第二条多周期路径约束: 

set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C] \
-to [get_pins data1_reg/D] #保持检查往前移动1个周期
# end表示参考时钟为捕获端时钟,这里对默认进行了修改,因为保持检查的默认时钟为发起端时钟;
# 当然,这里由于是单一的时钟域,两个时钟是等同的,所以 end为选择项

 对于建立路径周期数为4,多周期路径约束为:

set_multicycle_path 4 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 3 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]

 

一般情况下, 对于建立路径周期数为N,保持时间建立周期数为N-1,多周期路径约束为:

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]

Multicycle Paths and Clock Phase-Shift 时钟相位偏移中的多周期路径

一些情况下,必须对两个具有相同周期但是带相位偏移时钟进行时序约束;这种情况下,最重要的理解时序引擎在默认的情况下设定的建立保持关系,如果不做适当的调整就会导致在两个时钟域之间产生过度约束,情形如下图所示:

默认情况下不带多周期路径约束的建立保持关系:

上图中捕获时钟相对于发起时钟发生了0.3ns的相移,这导致按照单周期时序检查的情况时序根本无法收敛;这时,必须调整建立检查时间和保持检查时间,可用如下的约束:

set_multicycle_path 2 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]
# 数字量为1时为默认的单周期约束,即相对于发起时钟沿往前1个捕获沿

这导致相对于建立需求时间的 捕获沿往后移动了一个周期,保持时间会由建立时间得到默认值,如下图所示:

对于捕获时钟反向偏移相位的情况,如下图所示:

如果偏移量较小,不需要设置多周期路径约束来权衡偏移量;但是如果偏移量较大,此时需要调整发起沿或者捕获沿来满足建立保持需求;


Multicycles Between SLOW-to-FAST Clocks   慢时钟到快时钟的多周期路径

如下图所示,clk2的频率是clk1频率的3倍:

默认的建立保持关系如下图:


 可以看出,捕获沿总是在于发起时钟对齐后的下一个上升沿;需要设置的多周期路径约束为:

set_multicycle_path 3 -setup -from [get_clocks CLK1] -to [get_clocks CLK2]
set_multicycle_path 2 -hold -end -from [get_clocks CLK1] -to [get_clocks CLK2]
# 保持检查默认的参考时钟为发起时钟,这里加入了end,表明了参考时钟为捕获时间,即相对于捕获沿往前回调2个周期

 

 


Multicycles Between FAST-to-SLOW Clocks 快时钟到慢时钟的多周期路径

如下图所示,clk1的频率是clk2频率的3倍:

 

 默认的建立保持关系如下图:

 需要设置的多周期路径约束为:

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]
# 这里的参考时钟为发送时钟,所以在建立时间检查的约束中加入start

下表是对以上几种多周期路径约束语法的总结:

 

多周期路径及set_multicycle_path详解 默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path ......... 阅读详情

相关推荐

VIVADO时序约束之时序例外(set_multicycle_path)

VIVADO时序约束之时序例外(set_multicycle_path)

aaaaaaaa585的博客 4663

Verilog十大基本功9 (Multicycle Paths)

来自:http://blog.chinaaet.com/coyoo/p/31979 概述        Multicycle paths即多周期路径,指的是两个寄存器之间数据要经过多个时钟才能稳定的路径,一般出现于组合逻辑较大的那些路径。在实际工程中,除了乘除法器等少数比较特殊的电路,一般应该尽量避免采用多周期路径电路。即使有所使用,也应该通过约束在综合工具中指出该路径,使得综合工具在计算Fm...

时间的诗 3万+

静态时序分析Static Timing Analysis3——特殊路径(多周期、半周期、伪路径)的时序检查

多周期、半周期、伪路径时序检查

qq_42135020的博客 2142

多周期路径约束

一、什么时候需要用到多周期约束? Vivado、TimeQuest等时序引擎默认是按照单周期关系分析数据关系的,即数据在发起沿发送,在捕获被捕获,发起沿和捕获沿相差一个周期。 但是很多情况是,数据路径逻辑较为复杂,导致延时较大,使得数据无法在一个时钟周期内稳定下来, 或者数据可以在一个时钟周期内稳定下来,但是在数据发送几个周期之后才使用;在这些情况中,设计者的意图都是使数据的有效期从发起沿为起始直至数个周期之后的捕获沿,这样的意图无法被时序分析工具猜度出来,必须由设计者在时序约束中指明;否则时序分析工具会按

耐心的小黑的博客 8981

Vivado使用教程:多周期路径约束设置示例

手把手带你搞定Vivado中多周期路径(MCP)的约束设置,从时序例外原理到实际Tcl命令逐行解析,结合典型场景说明setup/hold调整技巧。本篇是面向FPGA工程师的实用vivado使用教程,聚焦真实工程痛点。

weixin_42613018的博客 433

FPGA时序约束理论之多周期路径(6)

1. 单周期路径 前面的时钟周期约束,都是按照单周期关系进行分析数据路径,即数据的发起沿和采样沿是最邻近的一对时钟沿,如下图所示。

qq_40281783的博客 1741

关于多周期路径约束

一、什么是多周期路径约束? 不管是quartus中还是在Vivado中,默认的建立时间和保持时间的检查都是单周期的,如图1所示,也就是说如果A时刻发送,B时刻捕获,这两者之间相差一个时钟周期,也就是很多文献所说的current launch和current latch,但是某些情况下,这两者之间并不一定只是一个时钟周期,比如加上一个捕获使能信号,或者跨时钟域的情况,两者时钟有相位差的情况,此时就需...

weixin_43606771的博客 3337

FPGA时序约束实战:多周期路径与虚假路径的Vivado避坑指南

本文深入探讨FPGA时序约束中的多周期路径与虚假路径设置,通过Vivado工具的实际操作演示,帮助开发者避开常见误区。重点解析多周期路径约束的核心原理、虚假路径的合理应用,以及最大最小延迟约束的实战技巧,提升时序收敛效率与设计可靠性。

weixin_29234423的博客 121

多周期路径+伪路径

1.4 两种时序例外 多周期路径 前面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿。如下图所示。 默认情况下,保持时间的检查是以建立时间的检查为前提,即总是在建立时间的前一个时钟周期确定保持时间检查。这个也不难理解,上面的图中,数据在时刻1的边沿被发起,建立时间的检查是在时刻2进行,而保持时间的检查是在时刻1(如果这里不能理解,再回头看看时钟周期约束详细介绍),因此保持时间的检查是在建立时间检查的前一个时钟沿。 但在实际的工程中,晶晨会碰到数据被发起

gemengxia的博客 3360

FPGA时序约束实战:多周期路径约束的典型场景与Vivado实现

本文深入解析FPGA时序约束中的多周期路径约束,重点介绍Vivado中set_multicycle_path命令的实战应用。通过典型场景案例,详细讲解跨时钟域传输、使能信号控制等场景的约束策略,帮助工程师有效解决时序违例问题,提升FPGA设计效率。

weixin_42530458的博客 362

Vivado时序约束实战:从基础时钟到多周期路径的完整配置指南

本文为FPGA中高级开发者提供了一份详尽的Vivado时序约束实战指南。文章从基础时钟约束入手,深入解析了主时钟、生成时钟与时钟组的配置,并详细阐述了输入/输出延迟约束、虚拟时钟、伪路径等高级技巧。核心重点在于通过真实案例,手把手教你如何正确配置多周期路径约束,以优化时序收敛并释放非关键路径压力,从而构建稳健高效的时序约束体系。

weixin_29284201的博客 284

Vivado时序约束实战:从基础时钟到多周期路径优化

本文详细讲解了Vivado时序约束的实战应用,从基础时钟约束、I/O延迟约束到多周期路径与伪路径优化。通过具体XDC命令示例,指导FPGA工程师如何正确定义时钟、处理异步时钟组、约束DDR接口,并利用多周期路径约束引导工具优化,从而确保设计在物理世界中稳定可靠,实现时序收敛。

weixin_29288313的博客 427

(85)Vivado 多周期路径约束情况

(85)Vivado 多周期路径约束情况 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado 多周期路径约束情况 5)技术交流 6)参考资料 2 时序约束引言 1)什么是静态时序分析? 通俗来说:在输入信号到输出信号中,因为经过的传输路径、寄存器、门电路等器件的时间,这个时间就是时序。开发工具不知道我们路径上的要求,我们通过时序约束来告诉开发工具,根据要求,重新规划,从而实现我们的时序要求,达到时序的收敛。 2)什么是时序收敛? 一个好的FP

m0_46498597的博客 535

vivado路径最大时钟约束_【精品博文】vivado 多周期路径设置

原标题:【精品博文】vivado 多周期路径设置设置多周期路径约束的目的:放松该路径时序要求,便于优先满足其他路径的布线,也有可能减少编译时间。默认情况下,VIVADO时序分析对应的是单个时钟周期。对于一些特定的逻辑路径显得不太合适,过于严格了。最常用的情况就是,如果应用中的数据可以在多于一个时钟周期在接收端稳定,那么Xilinx就推荐使用多周期约束来放松时序的要求。在VIVADO设计中,利用se...

weixin_39718460的博客 560

完整IC设计流程解析&Makefile学习

本文介绍了decorder38项目的文件结构、自动化综合流程和Makefile使用方法。项目包含RTL到GDSII全流程文件,重点关注syn目录中的综合脚本。通过make dc命令运行综合流程,生成网表、约束和时序文件。关键报告如qor.rpt、area.rpt和min_vio.rpt用于分析综合质量、面积和时序。Makefile部分解释了其基本语法、IC设计中的典型结构,包括目标定义、命令执行和特殊声明,强调了其在自动化构建和依赖管理中的重要性。

m0_63352623的博客 855

WangEditor 5.0版本dangerouslyInsertHtml方法的正确使用方式

WangEditor 5.0版本dangerouslyInsertHtml方法的正确使用方式

yang1067155909的专栏 4291

如何进行多周期路径约束1

分析了目的时钟和源时钟相同的情况下如何进行多周期路径约束

qq_40015999的博客 800

IMU预积分【SLAM】

预积分的推导过程比较多,所以这里只记录关键结论。 其实这些公式不太好记忆,因为预积分推导过程的想法来源很巧妙,无法看出物理意义。一切推导的来源: 最好记忆的旋转相对运动量: △Rij≐RiTRj=∏k=ij−1Exp((ω~k−bg,k−ηgd,k)△t)\triangle R_{ij} \doteq R_{i}^{T}R_{j} = \prod_{k=i}^{j-1}Exp((\tilde{\omega}_{k}-b_{g,k}-\eta_{gd,k})\triangle t) △Rij​≐RiT​Rj​

Tong_1024_的博客 1373

vivado路径最大时钟约束_vivado多时钟周期约束set_multicycle_path使用

Vivado下set_multicycle_path的使用说明vivado下多周期路径约束(set_multicycle_path)的使用,set_multicycle_path一般在如下情况下使用,源时钟和目的时钟来自同一个MMCM、PLL等同一个IP核,或者源时钟和目的时钟是同一个时钟。只要两个时钟间可进行静态时序分析就可以。在这种情况下,即使不加set_multicycle_path的约束,...

weixin_32512451的博客 1625

基于STM32的智能衣柜系统开发实战(附完整源码与硬件设计)

本文详细介绍了基于STM32的智能衣柜系统开发实战,包括硬件设计、软件架构和云端功能实现。系统具备实时温湿度监控、自动加热除湿、紫外线杀菌等核心功能,通过STM32F103C8T6主控芯片和ESP8266无线模块实现智能控制。附完整源码与硬件设计,适合科技爱好者和开发者参考。

peach的博客 782

在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用

VTK+MSVC+Qt Creator + CMake配置

qq_42279379的博客 1000

【FPGA多周期约束】

FPGA时序约束中的多周期约束

qq_20531625的博客 1475

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

王老师青少年编程 1649
上一篇: Vivado使用技巧(18):路径分割现象
下一篇: 移位寄存器示例
bleauchat
博客等级 码龄9年 3925粉丝 239原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值