news 2026/4/18 7:41:01

时序约束分析——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/18 10:50:01

如何避免职业倦怠:软件测试工程师的终极自救手册

倦怠危机的行业特殊性 在敏捷开发与持续交付的行业背景下,软件测试工程师面临版本迭代加速、需求变更频繁、质量责任高压三重挑战。2025年行业调研显示,78%的测试从业者存在中度以上倦怠感,其中自动化脚本维护、跨部门协作摩擦、技术迭代焦虑…

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

亲测好用!专科生毕业论文TOP10 AI论文平台测评

亲测好用!专科生毕业论文TOP10 AI论文平台测评 2026年专科生毕业论文AI平台测评:选对工具事半功倍 随着人工智能技术的不断进步,越来越多的专科生开始借助AI写作工具来提升毕业论文的撰写效率与质量。然而,面对市场上五花八门的平…

作者头像 李华
网站建设 2026/4/18 11:03:55

Apache HTTP Server 高危漏洞:mod_proxy编码问题导致认证绕过

Apache HTTP Server — ACL 绕过 CVE-2024–38473 概述: 描述: 此漏洞源于 mod_proxy 模块中的一个编码问题,它允许将编码不正确的请求 URL 发送到后端服务。这有可能通过精心构造的请求绕过认证。 该漏洞可能允许攻击者绕过认证机制&#xf…

作者头像 李华
网站建设 2026/4/18 8:38:29

2026必备!10个AI论文写作软件,助本科生轻松搞定毕业论文!

2026必备!10个AI论文写作软件,助本科生轻松搞定毕业论文! AI 工具如何改变论文写作的未来 随着人工智能技术的不断发展,越来越多的本科生开始关注并依赖 AI 工具来提升论文写作效率。尤其是在当前 AIGC(人工智能生成…

作者头像 李华
网站建设 2026/4/18 8:49:37

揭秘Gemini如何防御间接提示注入攻击

构建最安全的Gemini模型 我们发布了一份新的白皮书,阐述了如何使Gemini 2.5成为迄今为止最安全的模型家族。想象一下,要求你的AI助手总结最新的电子邮件——这看起来是一项简单的任务。Gemini和其他大型语言模型正通过访问我们的文档、日历或外部网站等…

作者头像 李华
网站建设 2026/4/18 8:47:28

查重 AI 痕双标红?虎贲等考 AI:降重降 AIGC 一步到位,论文合规稳了

论文定稿前的至暗时刻,莫过于查重率居高不下,改到头晕眼花后,又被 AIGC 检测系统标红。你是不是也试过同义词替换改得语句不通,费尽心思降重后,却因 “机器文风” 被导师打回重写?作为深耕论文写作科普的博…

作者头像 李华