news 2026/4/23 11:39:00

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
时序约束分析——vivado中常用指令介绍
关注、星标公众号,精彩内容每日送达 来源:网络素材

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

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

  • (全文完)

    声明:我们尊重原创,也注重分享;文字、图片版权归原作者所有。转载目的在于分享更多信息,不代表本号立场,如有侵犯您的权益请及时联系,我们将第一时间删除,谢谢!

    想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 10:36:29

5个步骤:从软件测试新手到行业专家的2026指南

软件测试行业在2026年正经历深刻变革,AI驱动测试、自动化深化和全栈质量保障成为核心趋势。本文为从业者提供一条系统化成长路径,从新手到专家划分为五个步骤,每个步骤基于行业数据和最佳实践设计,帮助您高效规划职业发展。 步骤…

作者头像 李华
网站建设 2026/4/19 22:38:42

震惊!90%的AI从业者忽略了这些职业发展技巧

AI浪潮下的测试职业警钟 在2026年的今天,人工智能(AI)已渗透到软件开发的每个角落,但一个令人震惊的数据浮出水面:90%的AI从业者——包括开发者、数据科学家和测试工程师——忽视了关键的职业发展技巧。尤其对于软件测…

作者头像 李华
网站建设 2026/4/18 10:26:14

从入门到精通:软件开发职业阶梯全解析

本文聚焦软件测试从业者的职业发展,以“入门—成长—精通”三阶段模型解析软件开发职业阶梯。每个阶段包含核心技能、典型挑战、行动建议及薪酬趋势,确保内容专业且可操作。总字数约2800字,满足深度分析需求。 第一章:入门阶段&a…

作者头像 李华
网站建设 2026/4/18 17:08:00

阿里云服务器如何集中管理一份全面指南

阿里云服务器集中管理指南阿里云服务器(ECS)集中管理涉及多个方面,包括资源监控、权限控制、自动化运维和安全策略。以下是一份详细指南,涵盖关键操作和最佳实践。资源监控与告警启用云监控服务,实时跟踪CPU、内存、磁…

作者头像 李华
网站建设 2026/4/20 16:53:15

哈希1:两数之和:哈希表优化指南

&#x1f525;个人主页&#xff1a;Milestone-里程碑 ❄️个人专栏: <<力扣hot100>> <<C>><<Linux>> <<Git>><<MySQL>> &#x1f31f;心向往之行必能至 &#x1f680; 经典算法入门&#xff1a;两数之和 &…

作者头像 李华
网站建设 2026/4/17 15:56:36

一站式商城小程序源码系统,助您轻松布局全平台

温馨提示&#xff1a;文末有资源获取方式一个能覆盖所有用户入口的电商平台&#xff0c;是企业把握流量、赢得市场的关键。今天&#xff0c;我们向您隆重推荐一款功能空前强大的多端商城源码系统&#xff0c;它正是您构建商业帝国、实现全域营销所急需的利器。本系统经过深度研…

作者头像 李华