克孜勒苏柯尔克孜自治州网站建设_网站建设公司_网站制作_seo优化
2026/1/20 11:27:07 网站建设 项目流程
关注、星标公众号,精彩内容每日送达 来源:网络素材

在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设计,关注我们的公众号,探索

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询