当前位置: 首页 > 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. 很多时候,会在同一路径或者路径线路上设置不同种类的异常(虚拟路径和多周期路径)。这种重叠导致实现工具可能做出不一致的假设。

http://www.lryc.cn/news/236008.html

相关文章:

  • 【Python】解析CPP类定义代码,获取UML类图信息
  • Docker存储驱动之- overlay2
  • Vue3 shallowRef 和 shallowReactive
  • Python数据分析实战① Python实现数据可视化
  • ASP.NET 开发几个知识点
  • 企业微信H5开发遇到的坑
  • mysql使用--分组查询
  • Android网络模块基本实现步骤
  • Rust6.2 An I/O Project: Building a Command Line Program (mini_grep)
  • 云轴科技ZStack信创云平台支撑长江航务管理局35套航运管理系统
  • Canal+Kafka实现MySQL与Redis数据同步(一)
  • 集合的运算
  • 在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践
  • 什么是AIGC
  • 〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点
  • GitHub Universe 2023:AI 技术引领软件开发创新浪潮
  • 数据结构:红黑树的插入实现(C++)
  • 飞天使-django之数据库简介
  • Flink之KeyedState
  • c语言:模拟实现qsort函数
  • 从0开始学习数据结构 C语言实现 1.前篇及二分查找算法
  • VSCode 使用CMakePreset找不到cl.exe编译器的问题
  • 【Linux系统化学习】进程的状态 | 僵尸进程 | 孤儿进程
  • 深信服AC流量管理技术
  • 二元关系及关系代数中的象集、除运算
  • [PHP]关联和操作MySQL数据库然后将数据库部署到ECS
  • 23.11.19日总结
  • 系列一、JVM概述
  • milvus数据管理-压缩数据
  • SpringBoot项目连接linux服务器数据库两种解决方法(linux直接开放端口访问本机通过SSH协议访问,以mysql为例)