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…...
操作系统控制台-健康守护我们的系统
引言基本准备体验功能健康守护系统诊断 收获提升结语 引言 阿里云操作系统控制平台作为新一代云端服务器中枢平台,通过创新交互模式重构主机管理体验。操作系统控制台提供了一系列管理功能,包括运维监控、智能助手、扩展插件管理以及订阅服务等。用户可以…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
