FPGA设计时序约束用法大全保姆级说明

news2025/3/11 1:48:11

目录

一、序言

二、时序约束概览

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云服务运维智能时代:阿里云操作系统控制台

阿里云操作系统控制台 引言需求介绍操作系统使用实例获得的帮助与提升建议 引言 阿里云操作系统控制台是一款创新型云服务器运维工具,专为简化用户的运维工作而设计。它采用智能化和可视化的方式,让运维变得更加高效、直观。借助AI技术,控制…

硬件学习笔记--48 磁保持继电器相关基础知识介绍

目录 1.磁保持继电器工作原理 2.磁保持继电器内部结构及组成部分 3.磁保持继电器主要参数 4.总结 1.磁保持继电器工作原理 磁保持继电器利用永磁体的磁场和线圈通电产生的磁场相互作用,实现触点的切换。其特点在于线圈断电后,触点状态仍能保持&#…

简记_硬件系统设计之需求分析要点

目录 一、 功能需求 二、 整体性能需求 三、 用户接口需求 四、 功耗需求 五、 成本需求 六、 IP和NEMA防护等级需求 七、 认证需求 功能需求 供电方式及防护 供电方式:市电供电、外置直流稳压电源供电、电池供电、PoE(Power Over Ether…

ubuntu 20.04下ZEDmini安装使用

提前安装好显卡驱动和cuda,如果没有安装可以参考我的这两篇文章进行安装: ubuntu20.04配置YOLOV5(非虚拟机)_ubuntu20.04安装yolov5-CSDN博客 ubuntu20.04安装显卡驱动及问题总结_乌班图里怎么备份显卡驱动-CSDN博客 还需要提前…

tauri-plugin-shell插件将_blank的a标签用浏览器打开了,,,解决办法

不要使用这个插件,这个插件默认会将网页中a标签为_blank的使用默认浏览器打开,但是这种做法在我的程序里不是很友好,我需要自定义这种行为,当我点击我自己的链接的时候,使用默认浏览器打开,当点击别的链接的…

C++ 继承(2)

Hello!!大家早上中午晚上好!!今天收尾继承剩余部分内容!! 一、友元不能继承 基类的友元函数不能被子类继承,也就是基类的友元函数访问不了子类的私有或保护成员! 1.1解决方法在子…

解决:Word 保存文档失败,重启电脑后,Word 在试图打开文件时遇到错误

杀千刀的微软,设计的 Word 是个几把,用 LaTex 写完公式,然后保存,卡的飞起 我看文档卡了很久,就关闭文档,然后 TMD 脑抽了重启电脑 重启之后,文档打不开了,显示 杀千刀的&#xff…

基于Asp.net的零食购物商城网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

ESP8266UDP透传

1. 配置 WiFi 模式 ATCWMODE3 // softAPstation mode 响应 : OK 2. PC 连⼊入 ESP8266 softAP 就是连接wifi 3.查询ESP8266设备的IP地址 ATCIFSR 响应: CIFSR: APIP, "192.168.4.1" CIFSR: APMAC, "1a: fe: 34: a5:8d: c6" CIFSR: STAIP, "192.…

UE5从入门到精通之如何创建自定义插件

前言 Unreal 的Plugins插件系统中有很多的插件供大家使用,包括官方的和第三方的,这些插件不仅能帮我我们实现特定功能,还能够提升我们的工作效率。 所以我们今天就来自己创建一个自定义插件,如果我们想实现什么特定的功能,我们也可以发布到商店供大家使用了。 创建插件 …

基于python大数据的招聘数据可视化与推荐系统

博主介绍:资深开发工程师,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有…

olmOCR:高效精准的 PDF 文本提取工具

在日常的工作和学习中,是否经常被 PDF 文本提取问题困扰?例如: 想从学术论文 PDF 中提取关键信息,却发现传统 OCR 工具识别不准确或文本格式混乱?需要快速提取商务合同 PDF 中的条款内容,却因工具不给力而…

Spring Boot使用JDBC /JPA访问达梦数据库

Spring Boot 是一个广泛使用的 Java 框架,用于快速构建基于 Spring 的应用程序。对于达梦数据库(DMDB)的支持,Spring Boot 本身并没有直接内置对达梦数据库的集成,但你可以通过一些配置和依赖来支持达梦数据库。 以下…

【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】

一、ReAct Agent是啥?为什么说它比「普通AI」聪明? 想象一下,你让ChatGPT查快递物流,它可能直接编个假单号糊弄你。但换成ReAct Agent,它会先推理(Reasoning)需要调用哪个接口,再行动(Action)查询真实数据——这就是ReAct的核心:让AI学会「动脑子」再动手。 举个真…

OpenText ETX 助力欧洲之翼航空公司远程工作升级

欧洲之翼航空公司,作为欧洲知名的低成本航空公司,拥有超过 130 架飞机,服务于约 60 个国家的 210 多个目的地,是欧洲第三大的点对点航空公司。面对 2020年 冠状病毒大流行的挑战,欧洲之翼航空公司迅速采取行动&#xf…

特征表示深度解析:颜色、纹理、形状与编码

第一部分:颜色与纹理特征(Part 1) 1. 颜色特征 颜色直方图(Color Histogram) 定义:统计图像中各颜色通道(R/G/B)的像素分布,形成直方图。 计算步骤: 将每个…

LeetCode Hot100刷题——反转链表(迭代+递归)

206.反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3&#…

MCU-缓存Cache与CPU中的主存SRAM

缓存(Cache)和主存(SRAM)均属于 ​SRAM,他们的核心区别: 通过 Cache 缓存 Flash 中的指令和数据,可避免 CPU 因等待数据而停滞。主存 SRAM 存储程序运行时的变量、堆栈、临时数据等。通常作为 …

在Windows 11的WSL中安装Kali Linux

Kali Linux 是网络安全从业者和爱好者的首选工具集,但直接在物理机或虚拟机上运行可能占用较多资源。借助 Windows Subsystem for Linux (WSL),我们可以在Windows 11中原生运行Kali Linux,轻量且高效。本教程将手把手教你如何在WSL2中安装并配…

Manus AI Agent 技术解读:架构、机制与竞品对比

目录 1. Manus 是什么? 1.1 研发背景 1.2 技术特点 1.3 工具调用能力 1.4 主要应用场景 2. Manus 一夜爆火的原因何在? 2.1 技术突破带来的震撼 2.2 完整交付的产品体验 2.3 生态与开源策略 3. Manus 与其他 AI Agent 的对比分析 3.1 技术架构…