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

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

3天内不再提示

vivado中常用时序约束指令介绍

FPGA设计论坛 来源:FPGA设计论坛 2026-01-20 16:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在vivado中,我们常用的时序约束指令主要包括如下几个方面:

类型 命令 说明
时钟约束 create_clock 创建主时钟
时钟约束 create_generated_clock 创建衍生时钟
时钟约束 set_clock_groups 设置时钟组
时钟约束 set_clock_latency 设置时钟延时
时钟约束 set_clock_sense 设置时钟边沿敏感
时钟约束 set_clock_uncertainty 设置时钟不确定度
时钟约束 set_system_jitter 设置系统抖动
时钟约束 set_input_jitter 设置输入抖动
时钟约束 set_external_delay 设置外部延时
输入 / 输出信号接口约束 set_input_delay 设置输入信号延时
输入 / 输出信号接口约束 set_output_delay 设置输出信号延时
时序例外约束 set_false_path 设置虚假路径
时序例外约束 set_multicycle_path 设置多周期路径
时序例外约束 set_max_delay 设置最大延时
时序例外约束 set_min_delay 设置最小延时
时序断言约束 set_data_check 约束数据到数据的建立 / 保持时间检查
时序断言约束 set_bus_skew 设置总线偏斜断言
其他约束 set_case_analysis 设置信号为固定数值
其他约束 group_path 设置时序路径分组
其他约束 set_disable_timing 设置中断时序弧
其他约束 set_max_time_borrow 设置锁存器借用时间

1. create_clock(创建主时钟)

含义:定义设计中的根时钟(如外部晶振输入的时钟),是所有时序分析的基准。

使用方法:

create_clock -name clk_100mhz -period 10 [get_ports clk_in]

-name:指定时钟名称(自定义,便于识别)

-period:时钟周期(单位:ns,10ns对应100MHz)

[get_ports clk_in]:指定时钟源端口FPGA的输入引脚)

关键参数:

-waveform {0 5}:定义时钟边沿位置(默认占空比50%,0ns上升沿,5ns下降沿)

-add:为同一端口添加多个时钟(如双沿采样场景)

2. create_generated_clock(创建衍生时钟)

含义:定义由主时钟通过分频、倍频或相位偏移生成的时钟(如PLL输出时钟),与主时钟存在确定的相位关系。

使用方法:

create_generated_clock -name clk_div2 -source [get_ports clk_in]
-divide_by 2 [get_pins reg_div/Q]

-source:指定源时钟(主时钟的端口或引脚)

-divide_by 2:分频系数(此处为2分频)

[get_pins reg_div/Q]:衍生时钟的生成点(如寄存器输出引脚)

常用参数:

-multiply_by:倍频系数(如-multiply_by 2实现2倍频)

-phase:相位偏移(单位:deg,如-phase 90表示偏移90度)

-invert:时钟反转(实现180度相位偏移)

3. set_clock_groups(设置时钟组)

含义:将相互异步的时钟划分为不同组,告知工具这些时钟间无需进行时序分析(避免虚假时序违规)。

使用方法:

set_clock_groups -name async_groups -asynchronous
-group [get_clocks clk_100mhz]
-group [get_clocks clk_125mhz]

-asynchronous:标记组间时钟为异步关系

-group:指定时钟组(可包含多个时钟)

其他模式:

-physically_exclusive:互斥时钟(同一时刻只有一个时钟有效,如切换时钟源)

4. set_clock_latency(设置时钟延时)

含义:定义时钟从源到寄存器时钟端的传播延时(包括网络延时和器件固有时延),分为理想延时和实际延时。

使用方法:

# 设置时钟网络的理想延时(不考虑布局布线影响)

set_clock_latency 2.5 [get_clocks clk_100mhz]

# 设置输入/输出延时(相对于时钟源)

set_clock_latency -source 1.2 [get_clocks clk_100mhz]

无选项:默认指时钟到达寄存器的延时(目的地延时)

-source:指时钟从源到FPGA引脚的延时(源端延时)

5. set_clock_sense(设置时钟边沿敏感)

含义:指定时钟沿的采样方向(上升沿/下降沿),默认情况下工具自动识别,特殊场景需手动指定。

使用方法:

set_clock_sense -positive [get_clocks clk_100mhz] # 上升沿敏感

set_clock_sense -negative [get_clocks clk_100mhz] # 下降沿敏感

6. set_clock_uncertainty(设置时钟不确定度)

含义:考虑时钟抖动(jitter)和偏斜(skew)的综合影响,为时序分析预留额外余量,确保设计可靠性。

使用方法:

set_clock_uncertainty 0.5 [get_clocks clk_100mhz]

数值表示时钟不确定性的总量(单位:ns),工具会在建立时间和保持时间分析中自动减去/加上该值。

常用参数:-setup(仅对建立时间生效)、-hold(仅对保持时间生效)

7. set_system_jitter(设置系统抖动)

含义:定义外部系统引入的时钟抖动(如晶振抖动),与set_clock_uncertainty的区别在于:系统抖动是外部引入的,而不确定度包含内部偏斜。

使用方法:

set_system_jitter 0.3 [get_clocks clk_100mhz]

8. set_input_jitter(设置输入抖动)

含义:指定输入时钟的抖动特性(针对外部输入的时钟信号),影响时钟的不确定性计算。

使用方法:

set_input_jitter [get_clocks clk_ext] 0.2

第一个参数为外部时钟,第二个参数为抖动值(单位:ns)

9. set_external_delay(设置外部延时)

含义:定义FPGA外部电路的延时(输入信号从外部源到FPGA引脚,或输出信号从FPGA引脚到外部目的地的延时),用于接口时序分析。

使用方法:

# 输入信号:外部电路到FPGA引脚的延时(占时钟周期的30%)

set_external_delay -input 3 [get_clocks clk_100mhz]

# 输出信号:FPGA引脚到外部电路的延时(占时钟周期的20%)

set_external_delay -output 2 [get_clocks clk_100mhz]

10. set_input_delay(设置输入信号延时)

含义:定义外部输入信号到达FPGA引脚后,相对于时钟沿的有效建立时间窗口,用于确保输入数据在时钟采样前稳定。

使用方法:

set_input_delay -clock clk_100mhz -max 3 [get_ports data_in]

set_input_delay -clock clk_100mhz -min 0.5 [get_ports data_in]

-clock:指定采样该输入信号的时钟

-max:输入信号的最大延时(数据最晚到达时间)

-min:输入信号的最小延时(数据最早到达时间)

单位为 ns,需根据外部电路延时特性设置(通常占时钟周期的 20%-30%)

11. set_output_delay(设置输出信号延时)

含义:定义 FPGA 输出信号到达外部器件所需的延时,确保外部电路能在其时钟沿前稳定采样数据。使用方法:

set_output_delay -clock clk_ext -max 2.5 [get_ports data_out]

set_output_delay -clock clk_ext -min 0.3 [get_ports data_out]

-clock:指定外部电路的采样时钟

数值表示输出信号相对于外部时钟的延时,需匹配外部器件的建立 / 保持时间要求

12. set_false_path(设置虚假路径)

含义:标记无需进行时序分析的路径(通常是异步时钟域间路径或逻辑上不可能激活的路径),减少工具分析开销。使用方法:

# 异步时钟间的路径

set_false_path -from [get_clocks clk_100mhz] -to [get_clocks clk_125mhz]

# 特定端口到模块的路径

set_false_path -from [get_ports reset] -to [get_cells *]

-from/-to:指定路径的起点和终点(时钟、端口、单元等)

典型应用:复位信号路径、异步时钟域跨域路径、测试模式专用路径

13. set_multicycle_path(设置多周期路径)

含义:允许数据在多个时钟周期内完成传输(适用于慢路径),工具会放宽时序要求。
使用方法:

# 建立时间:允许3个时钟周期完成传输

set_multicycle_path 3 -setup -from [get_clocks clk_fast] -to [get_clocks clk_slow]

# 保持时间:对应调整为2个周期(通常比setup少1)

set_multicycle_path 2 -hold -from [get_clocks clk_fast] -to [get_clocks clk_slow]

-setup/-hold:分别设置建立时间和保持时间的多周期数

常用于跨时钟域数据传输或低速外设接口(如 SPI、I2C

14. set_max_delay(设置最大延时)

含义:为特定路径指定最大允许延时(覆盖默认时钟约束),确保关键路径不超时。使用方法:

set_max_delay 8 -from [get_ports ctrl_in] -to [get_ports ctrl_out]

数值为路径允许的最大延时(ns),常用于对响应速度有严格要求的路径

15. set_min_delay(设置最小延时)

含义:为特定路径指定最小允许延时,防止因路径过短导致的保持时间违规(信号变化过快)。使用方法:

set_min_delay 0.8 -from [get_cells reg1/Q] -to [get_cells reg2/D]

确保数据在采样时钟沿后保持稳定的最短时间,避免竞争冒险

16. set_data_check(数据到数据的建立/保持时间检查)

含义:定义两个数据信号间的相对时序关系(非时钟触发),常用于握手信号或异步接口。使用方法:

# data信号需在valid信号有效后至少1ns建立,且保持2ns

set_data_check -setup 1 -hold 2 -from [get_ports valid] -to [get_ports data]

检查数据信号相对于控制信号的稳定性,确保握手逻辑可靠

17. set_bus_skew(总线偏斜断言)

含义:约束总线内各信号的最大 skew(偏斜),确保总线信号同步变化(如并行数据总线)。

使用方法:

set_bus_skew 1.2 [get_ports data_bus[*]]

数值为总线内任意两个信号的最大允许延时差,防止因布线长度差异导致的采样错误

18. set_case_analysis(设置信号为固定数值)

含义:强制指定信号为恒定值(0或1),用于简化逻辑分析或验证特定工作模式。使用方法:

set_case_analysis 1 [get_ports enable] # 强制enable信号为高电平

常用于排除未使用的逻辑分支,优化综合结果

19. group_path(时序路径分组)

含义:将相似路径归类,便于集中设置时序约束或查看分析报告。使用方法:

group_path -name axi_path -from [get_clocks axi_clk] -to [get_clocks axi_clk]

set_max_delay 10 [get_paths -group axi_path] # 为分组设置统一约束

提高约束管理效率,尤其适用于大型设计

20. set_disable_timing(中断时序弧)

含义:切断特定逻辑单元间的时序弧(Timing Arc),工具将忽略该路径的时序分析。
使用方法:

set_disable_timing -from A -to Y [get_cells mux1]

适用于冗余逻辑或测试模式下的无效路径,避免误导性时序违规报告

21. set_max_time_borrow(设置锁存器借用时间)

含义:为锁存器(Latch)指定最大允许的时间借用(Time Borrow),平衡前后级路径延时。使用方法:

set_max_time_borrow 2 [get_cells latch1]

锁存器可通过延长前级数据有效时间 “借用” 后级的时序余量,此命令限制最大借用值

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

    关注

    1

    文章

    624

    浏览量

    37708
  • 时序约束
    +关注

    关注

    1

    文章

    121

    浏览量

    14015
  • Vivado
    +关注

    关注

    19

    文章

    860

    浏览量

    71517

原文标题:时序约束分析——vivado中常用指令介绍

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    VIVADO时序约束及STA基础

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

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

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

    一文详解Vivado时序约束

    Vivado时序约束是保存在xdc文件中,添加或创建设计的工程源文件后,需要创建xdc文件设置时序约束
    的头像 发表于 03-24 09:44 5290次阅读
    一文详解<b class='flag-5'>Vivado</b><b class='flag-5'>时序</b><b class='flag-5'>约束</b>

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

    今天给大侠带来Xilinx FPGA编程技巧之常用时序约束详解,话不多说,上货。 基本的约束方法为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取。最普遍的三种路径以及
    发表于 04-12 17:39

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础
    发表于 05-17 16:08 0次下载

    Xilinx FPGA编程技巧常用时序约束介绍

    Xilinx FPGA编程技巧常用时序约束介绍,具体的跟随小编一起来了解一下。
    的头像 发表于 07-14 07:18 5545次阅读
    Xilinx FPGA编程技巧<b class='flag-5'>常用时序</b><b class='flag-5'>约束</b><b class='flag-5'>介绍</b>

    深入了解时序约束以及如何利用时序约束实现FPGA 设计的最优结果

    作为赛灵思用户论坛的定期访客(见 ),我注意到新用户往往对时序收敛以及如何使用时序约束来达到时序收敛感到困惑。为帮助 FPGA设计新手实现时序
    发表于 11-24 19:37 6167次阅读
    深入了解<b class='flag-5'>时序</b><b class='flag-5'>约束</b>以及如何利<b class='flag-5'>用时序</b><b class='flag-5'>约束</b>实现FPGA 设计的最优结果

    时序约束资料包】培训课程Timing VIVADO

    维持吗? 1、Vivado基本操作流程 2、时序基本概念 3、时序基本约束和流程 4、Baselining时序
    发表于 08-06 15:08 796次阅读

    如何使用时序约束向导

    了解时序约束向导如何用于“完全”约束您的设计。 该向导遵循UltraFast设计方法,定义您的时钟,时钟交互,最后是您的输入和输出约束
    的头像 发表于 11-29 06:47 3738次阅读
    如何使<b class='flag-5'>用时序</b><b class='flag-5'>约束</b>向导

    Vivado进行时序约束的两种方式

    上面我们讲的都是xdc文件的方式进行时序约束Vivado中还提供了两种图形界面的方式,帮我们进行时序约束
    的头像 发表于 03-08 17:17 2.1w次阅读
    <b class='flag-5'>Vivado</b>进行<b class='flag-5'>时序</b><b class='flag-5'>约束</b>的两种方式

    常用时序约束介绍之基于ISE的UCF文件语法

    时序约束是我们对FPGA设计的要求和期望,例如,我们希望FPGA设计可以工作在多快的时钟频率下等等。因此,在时序分析工具开始对我们的FPGA设计进行时序分析前,我们必须为其提供相关的
    的头像 发表于 12-28 15:18 5684次阅读

    Vivado中常用TCL命令汇总

    Vivado是Xilinx推出的可编程逻辑设备(FPGA)软件开发工具套件,提供了许多TCL命令来简化流程和自动化开发。本文将介绍Vivado中常用的TCL命令,并对其进行详细说明,
    的头像 发表于 04-13 10:20 5868次阅读

    如何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用时序约束命令,相信大家已经基本掌握了
    的头像 发表于 06-23 17:44 4529次阅读
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

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

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

    Vivado时序约束中invert参数的作用和应用场景

    Vivado时序约束中,-invert是用于控制信号极性的特殊参数,应用于时钟约束(Clock Constraints)和延迟约束(De
    的头像 发表于 02-09 13:49 522次阅读
    <b class='flag-5'>Vivado</b><b class='flag-5'>时序</b><b class='flag-5'>约束</b>中invert参数的作用和应用场景