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…...
Magic VLSI:开启你的芯片设计之旅,从零到一轻松掌握
Magic VLSI:开启你的芯片设计之旅,从零到一轻松掌握 【免费下载链接】magic Magic VLSI Layout Tool 项目地址: https://gitcode.com/gh_mirrors/magi/magic 你是否曾梦想亲手设计自己的芯片?是否对集成电路设计充满好奇却不知从何入手…...
VMware升级后Ubuntu 22.04虚拟机网卡‘消失’?别慌,这6个命令帮你一键找回(附排查思路)
VMware升级后Ubuntu 22.04虚拟机网卡异常修复指南当你满怀期待地将VMware Workstation从15版升级到17版,准备体验新功能时,突然发现原本运行良好的Ubuntu 22.04虚拟机无法联网了——ifconfig只显示lo回环接口,网络设置里空空如也。这种"…...
从塔防到RPG:在Unity里用A*算法实现不同游戏类型的敌人AI(实战案例)
从塔防到RPG:在Unity里用A*算法实现不同游戏类型的敌人AI(实战案例)当你在玩一款塔防游戏时,是否好奇那些怪物为何总能找到通往终点的最优路径?或者在RPG游戏中,NPC为何能绕过复杂地形精准追踪玩家…...
DeepSeek R1模型本地化部署全链路实践(从Docker镜像构建到API服务高可用上线)
更多请点击: https://codechina.net 第一章:DeepSeek R1模型本地化部署全链路实践(从Docker镜像构建到API服务高可用上线) DeepSeek R1 是一款高性能开源大语言模型,其本地化部署需兼顾推理效率、资源隔离与服务稳定性…...
避坑指南:用SARIMA做时间序列预测时,这5个参数调优错误千万别犯(Python实战)
SARIMA模型调优实战:避开时间序列预测中的五大陷阱引言在数据分析领域,时间序列预测一直是个既迷人又充满挑战的课题。每当我看到那些起伏的曲线,总能感受到数据背后隐藏的故事和规律。SARIMA模型作为时间序列分析的重要工具,因其…...
如何用TestDisk和PhotoRec拯救丢失数据:3分钟快速诊断与完整恢复指南
如何用TestDisk和PhotoRec拯救丢失数据:3分钟快速诊断与完整恢复指南 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 数据丢失是每个计算机用户都可能遇到的噩梦场景,但幸运的是&…...
自适应能量对齐:提升电子态密度机器学习预测精度的关键技术
1. 项目概述:为什么电子态密度的机器学习预测需要“自适应对齐”?在计算材料科学领域,电子态密度(DOS)是一个核心的物理量。它描绘了材料中电子能级随能量的分布情况,就像一张材料的“电子身份证”。通过这…...
3个场景告诉你:为什么你需要PowerToys Text Extractor
3个场景告诉你:为什么你需要PowerToys Text Extractor 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys…...
2026告别水印烦恼!免费图片去水印保姆级教程,从微信小程序到手机App一看就会
你是不是也遇到过这种抓狂的时刻?好不容易在小红书、抖音上看到一张绝美的壁纸、一个笑到岔气的表情包,兴致勃勃地保存下来,结果发现画面正中间或角落上,总趴着一个破坏美感的水印。想用来做PPT配图,水印太显眼&#x…...
在多地域部署服务中体验Taotoken路由能力对API延迟的优化
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多地域部署服务中体验Taotoken路由能力对API延迟的优化 1. 场景与挑战 在构建面向全球用户的服务时,一个常见的架构…...
