时序深入之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

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的