时序深入之CPR(Clock Pessimism Removal)详解

2024-04-13 14:20

本文主要是介绍时序深入之CPR(Clock Pessimism Removal)详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、CPR概念

二、CPR的计算

三、CPR的开启关闭

四、CPR为0

​五、参考资料


一、CPR概念

在时序报告的目标时钟路径中,会有一行数据clock pesssimism,第一次见可能都会对这个概念感到疑惑

同样在每条时序路径的summary中,clock path skew的计算会出现CPR,根据下方的解释大意为CPR是人为从时序路径的起点和终点间的共同时钟路径移除悲观因素,看到这仍旧会满头问号

为了进一步详细的解释,以下面的官网图片来解释。REGA和REGB是由相同的时钟驱动,数据从REGA到REGB,还有下面几个概念需作为前提知识,

1)静态时序分析中,通常主要进行setup分析和hold分析,两种分析本质是比较时钟路径和数据路径的时延,但时钟路径和数据路径在FPGA的时延是一个和工艺,电压,温度有关的概率时延,即同一段路径的时延值不是完全的固定值。

2)通常环境由两种极端环境情况,最好fast和最差slow,每种情况下的信号时延(包括时钟信号和数据信号)又存在最大值和最小值。

3)对于setup最差的情况分析,则采用数据时延最大,时钟时延最小的场景来分析。

回到下图中,时钟路径中,最前面一段加粗的是源时钟路径与目的时钟路径共同的部分,根据上面的第3条,上面的路径(红色)采用最大时延即Max Delay,时钟路径用最小时延(淡蓝色)Min Delay,这时计算REGB上的setup分析时,

数据路径时延Td=Max(Tsource_clk+Tckq+Tdata)

时钟路径时延Tclk=Min(Tdestination_clk)

setup=Tclk-Td=Min(Tdestination_clk)-Max(Tsource_clk)-Max(Tckq+Tdata)

对于Min(Tdestination_clk)-Max(Tsource_clk),仔细看下图中加粗的一段Destination clock和Source clock共同部分可知,同一个时钟同一段路径同一时刻是不可能出现一个最大时延和一个最小时延的,换句话说可以理解,对于共同的部分Min(Tdestination_clk)等于Max(Tsource_clk)。但如果这一段仍按照最大时延和最小时延来计算,则最终计算的setup值非准确值,因为,引入CPR来校正引入的误差,CPR的值为源时钟与目的时钟共同段的Max(Tsource_clk)-Min(Tdestination_clk)

二、CPR的计算

    ​在目标时钟路径中,延时应该加上还是减去CPR值取决于分析的类型,对于最大时延分析,如setup/recovery分析,则是加上CPR,对于最小时延分析,如hold/removal分析,则是减去CPR值。

    ​在每条时序路径的summary中,clock path skew由DCD,SCD和CPR决定,DCD为目的时钟延时,SCD为源时钟延时,CPR的作用如下图。

setup分析

hold分析

    ​在很多设计中,CPR的精度在布线前后是不一样的。例如,假设起点和终点的时钟引脚是由相同的时钟BUFFER驱动,在布线前,共同的部分是时钟网线驱动源,即时钟BUFFER的输出引脚,CPR仅仅补偿从时钟根到时钟BUFFER输出引脚的差异。但在布线后,共同点的分叉位置是源时钟和目的时钟共享的最后一段布线资源,此时,共同的分叉点不能用网表来表现了,因此,CPR不能通过减去共有的时钟电路的延时差异。时序分析工具计算基于器件信息的CPR值也是不会直接呈现给用户。

三、CPR的开启关闭

    ​CPR可以设置打开或关闭,默认打开,不建议关闭,关闭后会导致时序分析不准,如果需要关闭,在tcl console执行命令config_timing_pessimism -disable

   ​查看是否关闭成功,tcl窗口执行命令report_config_timing -name config,其中config为自定义的报告名称,enable pessimism removal的值为no表示关闭

此时,查看时序路径的clock path skew中已经没有CPR

在destination clock path中,在路径的最后也不会计算clock pessimism

要打开则执行config_timing_pessimism -enable后查看信息,值为YES,说明打开成功

四、CPR为0

    ​上面提到CPR是为解决源时钟和目的时钟在计算公共路径段引入的时延误差,但有时会发现时序路径上存在clock pessimism,但值为0的特殊场景。

不难理解,即源时钟和目的时钟的公共路径在setup/hold分析不会有误差,换句话说,就是没有公共部分。此处示例是因为设置了set_input_delay,分析的是输入端口到第一级触发器的时序,因为data path中是没有时钟的,无源时钟。

​五、参考资料

《ug906-vivado-design-analysis-en-us-2023.2.pdf》

这篇关于时序深入之CPR(Clock Pessimism Removal)详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900377

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input