当前位置: 首页 > news >正文

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 选项来实现的。

七、虚拟路径的问题

        在指定虚拟路径时,设计人员需要注意以下事项:

  1. 很多工具允许用户在虚拟路径的规格中使用通配符。这可能是是非常危险的,并且可能导致实际路径不能定时,从而可能引起硅片上的时序故障。
  2. 许多时候,虚拟路径是在起始点和终点之间设置的,它们之间没有物理连接。虽然它们是无害的,但在实现工具中它们会导致更长的和不必要的运行时间。
  3. 在指定-through的时候,设计人员必须确保through不是冗余的。当指定-through时,将不会优化该列表上的设计对象,即使它是一个很好的候选者,这可能导致实现未达到最佳标准。
  4. 很多时候,会在同一路径或者路径线路上设置不同种类的异常(虚拟路径和多周期路径)。这种重叠导致实现工具可能做出不一致的假设。

相关文章:

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、 皮肤设定&#xff1a; 项目右键&#xff0c;建立皮肤 app_themes 文件夹&#xff0c;右键 建立 web from 皮肤文件&#xff0c; 设定皮肤样式。全局使用皮肤 web.config 增加 <pages styleSheetTheme"Skin1" /> &#xff0c;或在 具体页面 头 增加 sty…...

企业微信H5开发遇到的坑

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

mysql使用--分组查询

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

Android网络模块基本实现步骤

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

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套航运管理系统

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

Canal+Kafka实现MySQL与Redis数据同步(一)

CanalKafka实现MySQL与Redis数据同步&#xff08;一&#xff09; 前言 在很多业务情况下&#xff0c;我们都会在系统中加入redis缓存做查询优化。 如果数据库数据发生更新&#xff0c;这时候就需要在业务代码中写一段同步更新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数据库&#xff0c;按每5分钟分组获取3个小时内的电量数据&#xff0c;参考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"代表“人工智能生成内容”&#xff08;Artificial Intelligence Generated Content&#xff09;&#xff0c;它指的是使用人工智能&#xff08;AI&#xff09;技术自动生成的内容&#xff0c;这些内容可以包括文本、图像、音乐、视频或其他多媒体形式。…...

〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

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

数据结构:红黑树的插入实现(C++)

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

飞天使-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…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...