VIVADO时序约束之时序例外(set_false_path)

news/2024/11/7 14:44:12/

前言

当FPGA设计中的逻辑行为不能满足默认的时序要求时,设计者需要使用时序例外语法对该逻辑行为进行处理,例如:有些结果只需每个一个或多个时钟周期捕获一次。
vivado开发工具支持4个时序例外约束的语法,如下表所示:

命令功能
set_multicycle_path表示从路径的开始到结束传播数据所需的时钟周期数。
set_false_path表示不应分析设计中的逻辑路径。
set_max_delay设置最大路径延迟值。 这将使用用户指定的最大和最小延迟值覆盖默认的建立和保持约束。
set_min_delay设置最小路径延迟值。 这将使用用户指定的最大和最小延迟值覆盖默认的建立和保持约束。

基于运行时间的考虑,vivado工具不支持冲突时序例外的实时分析,可以使用命令report_exceptions对整个工程进行时序例外进行分析和报告。

false路径

false路径指设计中存在的,但是1、不起作用,2、不需要关心时序的路径。因此,false路径常常不做时序分析。常见的false路径包括:
1、跨时钟域信号经两级同步逻辑处理的;
2、上电后,只需要被写一次;
3、复位或者测试逻辑;
4、异步分布式RAM的写入时钟和异步读取时钟之间的路径;

移除false路径的约束的好处

1、减少编译时间:当false路径已从时序分析中移除时,该工具不需要计时或优化那些非功能性路径。 使时序和优化引擎满足的非功能性路径的时序要求,会浪费大量的运行时间;
2、可以提高编译结果的质量:一些时序问题,会极大的影响工具对工程的综合、布局和优化质量;例如,某些非功能性路径存在时序违规,该工具可能会尝试修复这些路径,而不是处理真正的功能性路径。 不仅可能会不必要地增加设计的大小(例如逻辑克隆),而且该工具可能会跳过修复实际问题,因为非功能性路径具有更大的违规,掩盖了其他实际违规。

set_false_path

set_false_path 	[-setup] [-hold] [-rise] [-fall] [-reset_path] [-from <args>] [-rise_from <args>] [-fall_from <args>][-to <args>] [-rise_to <args>] [-fall_to <args>][-through <args>] [-rise_through <args>] [-fall_through <args>][-quiet] [-verbose] 
选项含义
-setup排除路径上的setup分析;
-hold排除路径上的hold分析;
-rise/fall排除路径上的上升沿/下降沿延迟;
-reset_path复位之前该路径上的约束;
-from <args>起始点或时钟列表;
-rise_from <args>作用于路径上上升沿开始的起始点或时钟列表;
–fall_from <args>作用于路径上下降沿开始的起始点或时钟列表;
-to <args>终端点或时钟列表;
-rise_to <args>作用于路径上上升沿接收的终端点或时钟列表;
-fall_to <args>作用于路径上下降沿接收的终端点或时钟列表;
-through <args>pins、cell、nets列表,所有经过该列表的路径均受约束作用;
-rise_through <args>pins、cell、nets列表,所有经过该列表的上升沿路径均受约束作用;
-fall_through <args>pins、cell、nets列表,所有经过该列表的下降沿路径均受约束作用;
-quiet忽略命令错误

使用不带 -from 和 -to 的 -through 选项时要小心,因为它会从时序分析中删除通过此引脚或端口列表的任何路径。 当时序约束是为 IP 或子块设计的,但随后用于不同的环境或更大的项目时,要特别小心。 当单独使用 -through 时,可以删除比预期更多的路径。

实例说明:

1、删除从端口reset到所有寄存器的所有路径的时序分析:

set_false_path -from [get_port reset] -to [all_registers]

2、禁止工具对两个异步时钟域CLKA和CLKB之间,从CLKA到CLKB的路径的时序分析:

set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]

3、非功能路径的约束可以使用-through替代-from -to的选项完成约束:
在这里插入图片描述

set_false_path -through [get_pins MUX1/a0] -through [get_pins MUX2/a1]

注意:
-through选项的顺序很重要,下面例子的命令是完全不相同的

set_false_path -through cell1/pin1 -through cell2/pin2
set_false_path -through cell2/pin2 -through cell1/pin1

4、公共的例子:异步双端口分布式RAM。写操作与RAM时钟域是同步的,但是读操作与RAM时钟域是异步的,这种情况下,写时钟域和读时钟域设置false路径是安全的。两种方式实现以上约束:
a、定义RAM前端的写寄存器到RAM后端的读时钟域下寄存器之间的路径为false路径:

set_false_path -from [get_cells <write_registers>] -to [get_cells <read_registers>]
set_false_path -from [get_cells -hier -filter {NAME =~ *gntv_or_sync_fifo.gl0.wr*reg[*]}] -to [get_cells -hier -filter {NAME=~ *gntv_or_sync_fifo.mem*gpr1.dout_i_reg[*]}]

b、定义以写引脚WE为起始点的所有路径为false路径:

set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ <PATTERN_FOR_DISTRIBUTED_RAMS>}]
set_false_path -from [get_cells -hier -filter {REF_NAME =~ RAM* && IS_SEQUENTIAL && NAME =~ *char_fifo*}]

特别说明:

对于有些同步时钟下的路径,可以适当放松约束,但这些路径仍然必须满足一定的时序要求,可以使用多路径约束替代set_false_path约束。


http://www.ppmy.cn/news/2065.html

相关文章

XXL-JOB核心源码解读及时间轮原理剖析

你好&#xff0c;今天我想和你分享一下XXL-JOB的核心实现。如果你是XXL-JOB的用户&#xff0c;那么你肯定思考过它的实现原理&#xff1b;如果你还未接触过这个产品&#xff0c;那么可以通过本文了解一下。 XXL-JOB的架构图&#xff08;2.0版本&#xff09;如下&#xff1a; 它…

C++中的野指针

一篇非常全面的介绍指针的博客: C/C 中的指针[非常全面] 一&#xff1a;维基百科的定义 在计算机编程领域中&#xff0c;迷途指针&#xff0c;或称悬空指针、野指针&#xff0c;指的是不指向任何合法的对象的指针。 当所指向的对象被释放或者收回&#xff0c;但是对该指针没有…

内存可见性问题

目录 1.什么是内存可见性问题 2.内存可见性问题是怎么发生的 3.解决方法&#xff1a;volatile 4.volatile使用的注意事项 5.内存可见性问题的延伸 缓存&#xff08;cache&#xff09; 1.什么是内存可见性问题 首先来看一段代码 class Counter{public int flag 0; } pu…

免费分享20套微信小程序源码 源码免费下载【强烈推荐】

淘源码&#xff1a;国内知名的源码免费下载平台 微信小程序源码包括&#xff1a;商城系统、点餐外卖、垃圾分类、预约洗车、物业管理、校园跑腿、驾考学习、会议预约、图书管理、智能停车、在线答题等小程序源码。 源码分享&#xff0c;文末获取源码&#xff01; 1、JAVA微信…

并查集介绍

文章目录&#xff1a;并查集原理并查集实现并查集的类结构并查集的合并统计集合数量并查集原理 在一些应用问题中&#xff0c;需要将 n 个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按照一定的规律将归于同一组元素的集…

ASP.NET Core 3.1系列(18)——EFCore中执行原生SQL语句

1、前言 前一篇博客介绍了EFCore中常见的一些查询操作&#xff0c;使用Linq或Lambda结合实体类的操作相当方便。但在某些特殊情况下&#xff0c;我们仍旧需要使用原生SQL来获取数据。好在EFCore中提供了完整的方法支持原生SQL&#xff0c;下面开始介绍。 2、构建测试数据库 …

【Opencv实战】高手勿入,Python使用Opencv+Canny实现边缘检测以及轮廓检测(详细步骤+源码分享)

前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 在这次的案例实战中&#xff0c;我们将使用Python 3和OpenCV。我们将使用OpenCV&#xff0c;因为它是…

C# 11 中的新增功能

我们很高兴地宣布 C# 11 已经发布&#xff01;与往常一样&#xff0c;C# 开辟了一些全新的领域&#xff0c;同时推进了过去版本中一直在运行的几个主题。我们的文档页面上的 C# 11 的新增功能下有许多功能和详细信息&#xff0c;这些内容都得到了很好的介绍。 随着每个版本的发…