FPGA时序分析与约束(14)——虚拟路径
一、概述
到目前为止,我们已经看到了如何约束时钟和端口来指定设计中的时序要求,我们可以通过这些基础的约束命令来进行时序约束,但是时序分析工具默认的时序检查方式可能和我们实际工程实现的情况不同,通常来说是约束过紧,可能导致时序失败。此时,设计者就需要额外增加一下啊约束命令,用于调整既有的时序检查方式,以保证达到我们的设计预期。设计者额外增加的这部分约束,我们称之为时序异常(也有地方称之为时序例外约束)。
时序异常一般可以分成一下三种情况:
- 虚假路径——它们是不需要满足任何时序要求的路径。实现工具在收约束时忽略此种路径中的时序
- 多周期路径——它们是需要多个周期来传递数据的路径。实现工具放宽此种路径上的时序
- 最小延迟和最大延迟——它们是具有特殊要求的最大延迟和最小延迟的路径,并且是在设计人员想要覆盖推测的建立和保持要求时指定的。
本文中,我们重点关注虚拟路径。
二、什么是虚拟路径
我们刚刚提到过,虚拟路径是不需要满足任何时序要求的路径,所谓的虚拟路径(False路径),之所以称为“虚拟”,并不是这条路径不存在,而是表示这条路径是设计中的非功能路径或没有任何时序要求的路径。显然,对于这样的路径,我们需要通过时序异常,使得实现工具忽视这样路径的存在,放弃对于它们进行时序分析和时序约束的努力。
常见的虚拟路径包括以下几种:
- 已经做过同步处理的跨时钟域路径
- 上电后只做一次的初始化写入的寄存器路径
- 复位或测试逻辑的路径
- 某些实际并不存在的时序路径
三、set_false_path
虚拟路径使用set_false_path命令在SDC中建模
该命令的BNF是:
set_false_path [-setup][-hold][-rise][-fall][-from from_list][-to to_list][-through through_list][-rise_from rise_from_list][-rise_to rise_to_list][-rise_through rise_through_list][-fall_from fall_from_list][-fall_to fall_to_list][-fall_through fall_through_list][-comment comment_string]
在所有开关之间,该命令指定了以下内容:
- 虚拟的确切路径
- 作为虚拟路径中的过渡过程
- 是否建立或保持虚拟路径关系
- 为解释虚拟路径的上下文/注释
四、路径规格
使用-from,-through,-to选项可以指定要声明为虚拟路径的路径。该规格可以包含一个或多个上述选项。-from 和 -to 最多只能为每个命令指定一次。但是,-through 可以在同一个命令中多次指定。
我们举一个简单的例子:
set_false_path -from S1 -through X1 -to D1
这样的一行约束就表示:从S1到D1,经过X1的所有路径都被设置为了虚拟路径。
有时,一个选项的任何参数都是一个具有多个元器件的列表,而不是单个元器件。在这种情况下,它相当于具有多个命令,每个命令只有一个元器件。如:
set_false_path -from S1 -through{X1,X2};
//等价于
set_false_path -from S1 -through X1;
set_false_path -from S2 -through X2;
上述的例子都表示从S1开始并通过X1或者X2中任何一条的路径。
选项-from和-to只能分别是时序的起始点和终点。另外,除了电路元器件外,这些选项也可以指定时钟。当指定时钟名称时,它表示由时钟触发的所有时序电路元器件以及所有输入输出端口,相当于指定时钟的输入/输出延迟是由特定的时钟来指定的。事实上,在 -from 和 -to 中指定时钟可以提供一种简单的方式来覆盖更多的时序电路元器件。因此,set_false_path -from CLK1表示所有的路径都源自于(1)所有由CLK1触发的时序电路元件(2)相对于CLK1约束的所有输入端口。
通常,应该对指定为起始点或终点的元器件有一些建议。起始点应该是一个时钟、主要的输入端口或双向端口、一个时序电路单元、一个时序电路单元的时钟引脚、一个指定了输入延迟的引脚。同样,终点应该是一个时钟、主要的输出端口或双向端口、一个时序电路单元、一个时序电路单元的数据引脚、一个指定了输出延迟的引脚。一些工具也可能允许某些其他点被指定为起始点或终点,但是使用这些点将最小化实现流程中这种虚假路径的重用,因为这种例外可能不被所有工具普遍接受。
五、过渡过程规格
有时候,设计人员可能想要为特定的过渡过程提供虚假的路径,而不是沿着路径提供所有的过渡过程。
这可以通过以下的方式实现:
- -rise_from :仅影响起始点的上升过渡过程
- -fall_from :仅影响指定起始点的下降过渡过程
- -rise_through :仅影响指定通过点的上升过渡过程
- -fall_through :仅影响指定通过点的下降过渡过程
- -rise_to :仅影响指定终点的上升过渡过程
- -fall_to :仅影响指定终点的下降过渡过程
- -rise :仅影响上升路径
- -fall :仅影响下降路径
六、建立/保持规格
在某种情况下,设计人员可能只想为建立或者保持路径设置这个约束、这是使用 -setup 和 -hold 选项来实现的。
七、虚拟路径的问题
在指定虚拟路径时,设计人员需要注意以下事项:
- 很多工具允许用户在虚拟路径的规格中使用通配符。这可能是是非常危险的,并且可能导致实际路径不能定时,从而可能引起硅片上的时序故障。
- 许多时候,虚拟路径是在起始点和终点之间设置的,它们之间没有物理连接。虽然它们是无害的,但在实现工具中它们会导致更长的和不必要的运行时间。
- 在指定-through的时候,设计人员必须确保through不是冗余的。当指定-through时,将不会优化该列表上的设计对象,即使它是一个很好的候选者,这可能导致实现未达到最佳标准。
- 很多时候,会在同一路径或者路径线路上设置不同种类的异常(虚拟路径和多周期路径)。这种重叠导致实现工具可能做出不一致的假设。
相关文章:

FPGA时序分析与约束(14)——虚拟路径
一、概述 到目前为止,我们已经看到了如何约束时钟和端口来指定设计中的时序要求,我们可以通过这些基础的约束命令来进行时序约束,但是时序分析工具默认的时序检查方式可能和我们实际工程实现的情况不同,通常来说是约束过紧&#x…...

【Python】解析CPP类定义代码,获取UML类图信息
参考 & 鸣谢 CppHeaderParser - 官方文档Python解析C头文件win10直接获得文件绝对路径的方法总结 目的 解析CPP头文件中的类定义,获取UML中的属性。用于画UML类图。如下所示格式,图片来源-链接 即获取,类名,成员函数&#x…...

Docker存储驱动之- overlay2
docker支持多种graphDriver,包括vfs、devicemapper、overlay、overlay2、aufs等等,其中最常用的就是aufs了,但随着linux内核3.18把overlay纳入其中,overlay的地位变得更重,最近也在自己的虚拟机上用overlay2作为docker…...

Vue3 shallowRef 和 shallowReactive
一、shallowRef 使用shallowRef之前需要进行引入: import { shallowRef } from vue; 使用方法和ref 的使用方法一致,以下是二者的区别: 1. 如果ref 和 shallowRef 都传入的是普通数据类型的数据,那么他们的效果是一样的&#x…...

Python数据分析实战① Python实现数据可视化
文章目录 一、数据可视化介绍二、matplotlib和pandas画图1.matplotlib简介和简单使用2.matplotlib常见作图类型3.使用pandas画图4.pandas中绘图与matplotlib结合使用 三、订单数据分析展示四、Titanic灾难数据分析显示 一、数据可视化介绍 数据可视化是指将数据放在可视环境中…...

ASP.NET 开发几个知识点
1、 皮肤设定: 项目右键,建立皮肤 app_themes 文件夹,右键 建立 web from 皮肤文件, 设定皮肤样式。全局使用皮肤 web.config 增加 <pages styleSheetTheme"Skin1" /> ,或在 具体页面 头 增加 sty…...

企业微信H5开发遇到的坑
企业微信官方推荐wx.agentConfig引用<script src"https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>是没有效果的 必须引用以下代码才有效果,这也是我看了社区的回答才有所收获,是一个坑 且VUE引用在线的…...

mysql使用--分组查询
1.分组数据 _1.复杂的数据统计 如:SELECT AVG(score) FROM student_score WHERE subject ‘Mysql是怎样运行的’; 上述实现查询指定课程的平均成绩。对FROM得到的结果集1,通过WHER进一步过滤得到结果集2。对结果集2中每一行执行汇总计算。 _2.创建分组 …...

Android网络模块基本实现步骤
Android网络模块主要是用于访问网络和获取数据,下面是网络模块的基本实现步骤: 选择网络框架:Android中常用的网络框架有HttpURLConnection、OkHttp、Volley和Retrofit等。最新的版本已经支持使用Kotlin协程完成网络请求,可以根据…...

Rust6.2 An I/O Project: Building a Command Line Program (mini_grep)
Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 12: An I/O Project: Building a Command Line Program project: minigrep src/main.r…...

云轴科技ZStack信创云平台支撑长江航务管理局35套航运管理系统
信创是数字中国建设的重要组成部分,也是数字经济发展的关键推动力量。作为云基础软件企业,云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施,ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级,是其中唯一兼容四种…...

Canal+Kafka实现MySQL与Redis数据同步(一)
CanalKafka实现MySQL与Redis数据同步(一) 前言 在很多业务情况下,我们都会在系统中加入redis缓存做查询优化。 如果数据库数据发生更新,这时候就需要在业务代码中写一段同步更新redis的代码。 这种数据同步的代码跟业务代码糅合…...

集合的运算
集合的运算 #include <stdio.h> #include <stdlib.h> void print(int size, char arr[]) {if (size 0) {printf("null");}for (int i 0; i < size; i) {printf("%c", arr[i]);}printf("\n"); } int main() {char U[] { a,b,c,…...

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践
1. 实践案例需求描述 查询mysql数据库,按每5分钟分组获取3个小时内的电量数据,参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…...

什么是AIGC
1 定义 "AIGC"代表“人工智能生成内容”(Artificial Intelligence Generated Content),它指的是使用人工智能(AI)技术自动生成的内容,这些内容可以包括文本、图像、音乐、视频或其他多媒体形式。…...

〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作…...

GitHub Universe 2023:AI 技术引领软件开发创新浪潮
GitHub 是全球领先的软件开发和协作平台,数百万开发者和企业在此分享、学习和创建卓越的软件。同时 GitHub 处在 AI 技术前沿,通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命。在今天的文章中,我们将一起看看在 GitHub 年度大会…...

数据结构:红黑树的插入实现(C++)
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 一、红黑树二、红黑树的插入三、代码实现总结 一、红黑树 红黑树的概念: 红黑树是一颗二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色&…...

飞天使-django之数据库简介
文章目录 增删改查解决数据库不能存储中文问题创建表数据类型表的基本操作主键唯一键 unique外键实战 增删改查 四个常用的语句查询 : insert delete update select insert into student(Sno,name) values(95001,"张三") delete from student where name张三 upda…...

Flink之KeyedState
前面的文章中介绍过Operator State,这里介绍一下Keyed State. 在使用Operator State时必须要实现CheckpointFunction接口,而Keyed State则不需要,在使用keyBy(...)分组分组后,调用的函数必须是实现RichFuntion接口的函数才可以使用Keyed State.同样使用Keyed State也必须开启Ch…...

c语言:模拟实现qsort函数
qsort函数的功能: qsort相较于冒泡排序法,不仅效率更快,而且能够比较不同类型的元素,如:浮点数,结构体等等。这里我们来模拟下qsort是如何实现这一功能的,方便我们对指针数组有一个更深层次的理…...

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法
一、前篇 1、什么是数据结构? 数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…...

VSCode 使用CMakePreset找不到cl.exe编译器的问题
在用vscode开发c项目的时候,使用预先配置的CMakePresets.json可以把一些特定的cmake选项固定下来,在配置时直接使用 "cmake --config --preset presetname"就可以进行配置,免去在命令行输入过多的配置参数。 但是在vscode中&#…...

【Linux系统化学习】进程的状态 | 僵尸进程 | 孤儿进程
个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 目录 操作系统进程的状态 运行状态 阻塞状态 进程阻塞的现象 挂起阻塞状态 Linux进程状态 Linux内核源代码怎么说 R(running状态)运行状态 S(sl…...

深信服AC流量管理技术
拓扑图 一.保证通道针对修仙部,访问网站,邮件,DNS,IM,办工 OA,微博论坛网上银行等常见应用保证带宽最低 50%,最高 100% 1. 先新建线路带宽 2.新增流量管理通道(保证关键应用&#x…...

二元关系及关系代数中的象集、除运算
二元关系及关系代数中的象集、除运算 数学上,二元关系用于讨论两个数学对象的联系。诸如算术中的「大于」及「等于」,几何学中的"相似",或集合论中的"为...之元素"或"为...之子集"。二元关系有时会简称关系&a…...

[PHP]关联和操作MySQL数据库然后将数据库部署到ECS
在Mac电脑上使用VS Code进行PHP开发并关联操作MySQL数据库,然后将数据库部署到ECS。 1.安装PHP和MySQL 确保你的Mac上已经安装了PHP和MySQL。你可以使用Homebrew来安装它们: $ brew install php $ brew install mysql 安装mysql完成后记住这一句: …...

23.11.19日总结
经过昨天的中期答辩,其实可以看出来项目进度太慢了,现在是第十周,预计第十四周是终级答辩,在这段时间要把项目写完。 前端要加上一个未登录的拦截器,后端加上全局的异常处理。对于饿了么项目的商品建表,之前…...

系列一、JVM概述
一、概述 1.1、Java发展中的重大事件 1.2、虚拟机 vs Java虚拟机 1.2.1、虚拟机 1.2.2、Java虚拟机 1.2.3、Java虚拟机的作用 Java虚拟机是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令指令。每一条Java指令&#…...

milvus数据管理-压缩数据
Milvus 默认支持自动数据压缩。您可以 配置 Milvus 以启用或禁用 压缩 和自动压缩。 如果自动压缩被禁用,您仍然可以手动压缩数据。 1.手动压缩数据 压缩请求是异步处理的,因为它们通常需要花费很长时间。 from pymilvus import Collection collection…...