FPGA设计时序约束用法大全保姆级说明
目录
一、序言
二、时序约束概览
2.1 约束五大类
2.2 约束功能简述
2.3 跨时钟域约束
三、时序约束规范
3.1 时序约束顺序
3.2 约束的优先级
四、约束示例
4.1 设计代码
4.2 时序结果
4.2.1 create_clock
4.2.2 create_generated_clock
4.2.3 Rename_Auto-Derived_clock
4.2.4 set_clock_latency
4.2.5 set_clock_uncertainty
4.2.6 set_clock_groups
4.2.7 set_clock_sense
4.2.8 set_input_jitter
4.2.9 set_system_jitter
4.2.10 set_external_delay
4.2.11 set_input_delay
4.2.12 set_output_delay
4.2.13 set_data_check
4.2.14 set_bus_skew
4.2.15 set_false_path
4.2.16 set_multicycle_path
4.2.17 set_max_delay
4.2.18 set_min_delay
4.2.19 set_case_analysis
4.2.20 group_path
4.2.21 set_disable_timing
4.2.22 set_disable_timing
一、序言
在之前的文章中,以命令为章节进行了相关的使用说明,命令彼此间是相互独立的。在本章中,将从时序约束整体的角度对这些约束进行一个使用概述,同时结合时序报告,这样有助于深入理解命令的使用。
二、时序约束概览
2.1 约束五大类
时序约束根据约束特性可分为5类:时钟特性约束,端口路径延时,时序例外约束,断言约束,其他类,具体的约束如下图

时钟特性约束:Vivado时序工具是通过时钟特性来计算时序路径要求,通过slack计算来报告设计的时序阈值。因此,必须准确的约束时钟的特性才能准确且全面地覆盖到所有时序路径。理想的时钟通过周期,相位,频率即可完整描述其特性,但实际时钟信号是通过时钟树来传播,时钟边沿可能因为噪声和硬件特性而产生延时,即时钟网络延时(clock network latency)和时钟不确定性(clock uncertainty)。时钟不确定性包括时钟抖动,相位错误,以及其他的附加不确定性,这些时钟特性都需要通过对应的时钟约束来加入。
端口约束:FPGA与外部的信号通信都是通过port来实现的,port也是FPGA的边界。因此,必须通过set_input_delay和set_output_delay来准确建模外部时延情况。
例外约束:默认情况下,时序分析的path requirement选取规则是对发起时钟和捕获时钟在公共周期内,捕获时钟的有效沿时间减去启动时钟的有效沿,setup分析取最小值,hold分析取最大值。对于一些场景则不适用该规则,如传输数据从路径的起点到终点需要设置指定的周期数进行分析,使用set_multicycle_path约束;对于一些逻辑路径不应该被分析时,则使用set_false_path路径;对于一些路径需要限制最大和最小时延,则需设置set_max_delay和set_min_delay约束。
断言约束:断言约束是作用于时序路径间的约束,不影响其他约束的优先级,也不会覆盖或者被clock groups,max delays,false paths,multicycle paths四类时序例外约束所覆盖。对于断言约束也不会影响不会影响最终的结果,可理解为人为对一些信号设置检查条件,然后报告出见检查结果。
其他类:不在上述四大类中的时序约束属于其他类,有set_case_analysis,group_path,set_disable_timing,set_max_time_borrow四类,对应的使用参见之前的时序约束命令章节
2.2 约束功能简述

2.3 跨时钟域约束
跨时钟域CDC约束用于发起时钟和捕获时钟不同的时序路径上,CDC又分为同步CDC和异步CDC,同步CDC和异步CDC取决于发起时钟和捕获时钟的关系和CDC路径上是否有时序例外约束。如果同步时钟间的CDC路径设置了false path约束是不安全的,因此被看作异步CDC路径。异步CDC路径时序可能是安全的也可能不安全,如果异步跨时钟域路径中存在同步电路来避免亚稳态时,路径是安全的。
跨时钟域路径可以通过设置set_false_path和set_clock_groups从而完全忽略,也可以通过设置set_max_delay -datapath only约束来忽略部分路径,多比特跨时钟域路径可通过set_bus_skew约束来避免捕获时钟失准。
三、时序约束规范
3.1 时序约束顺序
在约束文件XDC中设置时序约束时,按照一定的逻辑顺序进行约束可提高约束的可读性以及方便进行修改,建议按照以下顺序设置时序约束。
## 第一部分:时钟申明
# Primary clocks 使用create_clock创建主时钟
# Virtual clocks 使用create_clock创建虚拟时钟
# Generated clocks 使用create_generated_clock创建生成时钟## 第二部分:时钟断言
# Clock Groups 使用set_clock_groups设置时钟组
# Bus Skew constraints 使用set_bus_skew时钟总线偏斜约束
# Input and output delay constraints 使用set_input_delay/set_output_delay设置输入输出端口时延## 第三部分:设置时序例外
# False Paths 使用set_false_path设置虚假路径
# Max Delay / Min Delay 使用set_max_delay/set_max_delay设置最大、最小时延约束
# Multicycle Paths 使用set_multicycle_path设置多周期约束## 第四部分:其他类约束
# Case Analysis 使用set_case_analysis设置案例分析约束
# Disable Timing 使用set_disable_timing设置断开时序## 第五部分:设置物理约束
3.2 约束的优先级
在时序约束中,不同约束之间存在优先级,这个需要特别注意,否则将达不到预期的约束效果

1)相同类型的约束,后者会覆盖前者,以creat_clock约束为例,实际生效的是第二条约束
create_clock -name clk1 -period 10 [get_ports clk_in1]
create_clock -name clk2 -period 11 [get_ports clk_in1]
但如果是后一条添加了-add,则两条都会生效
create_clock -name clk1 -period 10 [get_ports clk_in1]
create_clock -name clk2 -period 11 [get_ports clk_in1] -add
2)时序例外的约束优先级示例
a.下面的set_max_delay中,第一条约束的比第二条更详细,因此第一条约束生效
set_max_delay 12 -from [get_clocks clk1] -to [get_clocks clk2]
set_max_delay 15 -from [get_clocks clk1]
b. 下面的约束中,第一条约束对象为cell,并且约束更紧,第二条约束对象中from为时钟,并且里面的through不会影响优先级。因此,第一条约束覆盖第二条约束。
set_max_delay 12 -from [get_cells inst0] -to [get_cells inst1]
set_max_delay 15 -from [get_clocks clk1] -through [get_pins hier0/p0] -to [get_cells inst1]
四、约束示例
下面以包含上述所有约束的工程示例,对约束生效的方式进行解读,器件为xcku3p-ffvb676-2-i
4.1 设计代码
module timing_constraint(CLKIN1,CLKIN2,clk1,clk2,CLKINSEL,CLKFBIN,rst,d,S,in,CLKFBOUT,sel,ff2_sense, ff_clkout0_a,ff_clkout0_b,ff_clk1_a,ff_clk2,bus_clk2,GE,clr,ff2_timeborrow,ff_case2);
input CLKIN1,CLKIN2,clk1,clk2,CLKINSEL,CLKFBIN,rst,d,S;
input [4:0] in;
output CLKFBOUT;input sel;
wire mux_n;
reg mux,ff1_sense;
output reg ff2_sense;output reg ff_clkout0_a,ff_clkout0_b;
reg ff_clkout0;
output reg ff_clk1_a,ff_clk2;
reg ff_clk1;reg [4:0] bus;
output reg [4:0] bus_clk2;
wire [4:0] bus_c;input GE,clr;
output reg ff2_timeborrow;
reg ff1_timeborrow;reg ff_case1;
output reg ff_case2;PLLE2_ADV #( .BANDWIDTH("OPTIMIZED"), // OPTIMIZED, HIGH, LOW .CLKFBOUT_MULT(8), // Multiply value for all CLKOUT, (2-64) .CLKFBOUT_PHASE(90相关文章:
FPGA设计时序约束用法大全保姆级说明
目录 一、序言 二、时序约束概览 2.1 约束五大类 2.2 约束功能简述 2.3 跨时钟域约束 三、时序约束规范 3.1 时序约束顺序 3.2 约束的优先级 四、约束示例 4.1 设计代码 4.2 时序结果 4.2.1 create_clock 4.2.2 create_generated_clock 4.2.3 Rename_Auto-Derive…...
【前缀和与差分 C/C++】洛谷 P8218 求区间和
2025 - 03 - 09 - 第 72 篇 Author: 郑龙浩 / 仟濹 【前缀和与差分 C/C】 文章目录 洛谷 P8218 求区间和题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示思路代码 洛谷 P8218 求区间和 题目描述 给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_…...
C++修炼之路:初识C++
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞,关注! 引言 …...
Pytorch 第九回:卷积神经网络——ResNet模型
Pytorch 第九回:卷积神经网络——ResNet模型 本次开启深度学习第九回,基于Pytorch的ResNet卷积神经网络模型。这是分享的第四个卷积神经网络模型。该模型是基于解决因网络加深而出现的梯度消失和网络退化而进行设计的。接下来给大家分享具体思路。 本次…...
2025-3-9 一周总结
目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...
如何在el-input搜索框组件的最后面,添加图标按钮?
1、问题描述 2、解决步骤 在el-input组件标签内,添加一个element-plus的自定义插槽, 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话,请关注本博主~~...
[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信
基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯(飞控部分)六.移植2.4g通讯(遥控部分) 一.Si24Ri原理图 Si24R1芯片原理图如下: 右侧为晶振。 模块…...
Python爬取咸鱼Goodfish店铺所有商品接口的详细指南
在电商数据分析和市场研究中,爬取咸鱼店铺内的所有商品信息是一项极具价值的任务。通过调用咸鱼的goodfish.item_search_shop接口,可以获取指定店铺内的商品列表,包括商品标题、价格、图片链接、销量等详细信息。本文将详细介绍如何使用Pytho…...
【极光 Orbit•STC8A-8H】03. 小刀初试:点亮你的LED灯
【极光 Orbit•STC8H】03. 小刀初试:点亮你的 LED 灯 七律 点灯初探 单片方寸藏乾坤,LED明灭见真章。 端口配置定方向,寄存器值细推敲。 高低电平随心控,循环闪烁展锋芒。 嵌入式门初开启,从此代码手中扬。 摘要 …...
docker本地部署RagFlow
1.安装 克隆仓库 git clone https://github.com/infiniflow/ragflow.git构建预建的Docker映像并启动服务器 cd ragflow/docker chmod x ./entrypoint.sh docker compose -f docker-compose.yml -p ragflow up -d修改ragflow/docker/.env文件 #RAGFLOW_IMAGEinfiniflow/ragfl…...
STM32F4 UDP组播通信:填一填ST官方HAL库的坑
先说写作本文的原因,由于开项目开发中需要用到UDP组播接收的功能,但是ST官方没有提供合适的参考,使用STM32CubeMX生成的代码也是不能直接使用的,而我在网上找了一大圈,也没有一个能够直接解决的方案,deepse…...
基于python大数据的招聘数据可视化与推荐系统
博主介绍:资深开发工程师,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有…...
10. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--认证
在微服务架构中,通过在网关层实现身份认证、权限校验和数据加密,可以有效防范恶意攻击和非法访问,保障内部服务安全。采用JWT、OAuth等主流认证机制,使每次请求均经过严格验证,降低安全漏洞风险。同时,统一…...
DeepSeek 3FS:端到端无缓存的存储新范式
在 2025 年 2 月 28 日,DeepSeek 正式开源了其高性能分布式文件系统 3FS【1】,作为其开源周的压轴项目,3FS 一经发布便引发了技术圈的热烈讨论。它不仅继承了分布式存储的经典设计,还通过极简却高效的架构,展现了存储技…...
vue3组合式API怎么获取全局变量globalProperties
设置全局变量 main.ts app.config.globalProperties.$category { index: 0 } 获取全局变量 const { appContext } getCurrentInstance() as ComponentInternalInstance console.log(appContext.config.globalProperties.$category) 或是 const { proxy } getCurrentInstance…...
【YOLOv12改进trick】多尺度大核注意力机制MLKA模块引入YOLOv12,实现多尺度目标检测涨点,含创新点Python代码,方便发论文
🍋改进模块🍋:多尺度大核注意力机制(MLKA) 🍋解决问题🍋:MLKA模块结合多尺度、门控机制和空间注意力,显著增强卷积网络的模型表示能力。 🍋改进优势🍋:超分辨的MLKA模块对小目标和模糊目标涨点很明显 🍋适用场景🍋:小目标检测、模糊目标检测等 🍋思路…...
网络安全之端口扫描(一)
前置介绍 什么是DVWA? DVWA(Damn Vulnerable Web Application)是一个专门设计用于测试和提高Web应用程序安全技能的开源PHP/MySQL Web应用程序。它是一个具有多个安全漏洞的故意不安全的应用程序,供安全专业人员、渗透测试人员、…...
HCIE云计算学什么?怎么学?未来职业发展如何?
随着云计算成为IT行业发展的主流方向,HCIE云计算(华为认证云计算专家)作为华为认证体系中的高端认证之一,逐渐成为了许多网络工程师和IT从业者提升职业竞争力的重要途径。 那么,HCIE云计算究竟学什么内容,如…...
upload-labs文件上传
第一关 上传一个1.jpg的文件,在里面写好一句webshell 保留一个数据包,将其中截获的1.jpg改为1.php后重新发送 可以看到,已经成功上传 第二关 写一个webshell如图,为2.php 第二关在过滤tpye的属性,在上传2.php后使用b…...
操作系统控制台-健康守护我们的系统
引言基本准备体验功能健康守护系统诊断 收获提升结语 引言 阿里云操作系统控制平台作为新一代云端服务器中枢平台,通过创新交互模式重构主机管理体验。操作系统控制台提供了一系列管理功能,包括运维监控、智能助手、扩展插件管理以及订阅服务等。用户可以…...
Ventoy终极指南:一个U盘启动所有系统,告别重复格式化烦恼 [特殊字符]
Ventoy终极指南:一个U盘启动所有系统,告别重复格式化烦恼 😎 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 还在为每次安装系统都要重新制作启动盘而烦恼吗&#x…...
机器学习赋能6G近场通信:从信道估计到波束赋形的智能革命
1. 项目概述:当6G遇见近场,为何机器学习成为破局关键?如果你关注过5G到6G的技术演进路线,会发现一个核心趋势:天线阵列的规模正在从“大规模”走向“极大规模”。这不仅仅是数量的堆砌,更是通信物理原理的一…...
物理引导的机器学习工作流:气候建模的融合创新与实践
1. 项目概述:当气候建模遇见机器学习如果你像我一样,在气候模拟这个领域摸爬滚打超过十年,就会深刻体会到一种“甜蜜的负担”:我们构建的地球系统模型(ESM)越来越精细,物理过程越来越复杂&#…...
MAX78000移植Zephyr RTOS实战:从BSP创建到AI边缘设备开发
1. 项目概述与动机作为一名长期在嵌入式边缘AI和机器人领域摸爬滚打的开发者,我最近把目光投向了一块相当有潜力的板子:Maxim Integrated(现为ADI一部分)的MAX78000FTHR开发套件。这块板子的核心——MAX78000微控制器,…...
写论文的神助攻!好用的AI写作辅助软件,逻辑清晰质量高
作为一名刚完成毕业论文的过来人,我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不清、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合,简直是论文写作的 "开挂神器",效率直接拉满ÿ…...
告别枯燥理论!用Unity脚本生命周期与预制体玩转一个“会变身的敌人”
用Unity打造会变身的敌人:脚本生命周期与预制体的实战应用在游戏开发中,敌人AI的行为设计往往是新手开发者最感兴趣也最容易感到困惑的部分。Unity的脚本生命周期和预制体系统为这类需求提供了强大支持,但教科书式的讲解常常让学习者陷入枯燥…...
仅限首批200位架构师获取:DeepSeek-DDD联合建模工作坊实录(含领域事件风暴原始会议录像+决策日志)
更多请点击: https://kaifayun.com 第一章:DeepSeek领域驱动设计的范式演进与本质洞察 DeepSeek作为面向大规模智能体协同与复杂业务语义建模的新一代AI原生架构,其领域驱动设计(DDD)实践已突破传统分层单体范式&…...
LLM测试工程师必看,Claude E2E测试架构设计,从用例生成、黄金样本构建到回归基线告警闭环
更多请点击: https://codechina.net 第一章:LLM测试工程师必看,Claude E2E测试架构设计,从用例生成、黄金样本构建到回归基线告警闭环 核心架构概览 Claude端到端测试架构采用三层解耦设计:输入层(动态用…...
从‘找不到dll’到流畅运行:一份给VS2022新手的Zbar+OpenCV3.6.0环境配置避坑指南
从“找不到dll”到流畅运行:VS2022下ZbarOpenCV3.6.0环境配置全解析 当你第一次在Visual Studio 2022中尝试整合Zbar和OpenCV 3.6.0时,可能会遇到各种令人沮丧的错误提示。最常见的就是那个让人头疼的“找不到libzbar64-0.dll”问题。本文将带你一步步解…...
C语言有符号和无符号在内存中的存储方式区别小结
在 C 语言中,有符号类型(如 signed char、signed int)和无符号类型(如 unsigned char、unsigned int)在内存中的存储方式本质上没有区别——它们都是以二进制位的形式存储数值的。两者的核心差异体现在对二进制位的解…...
