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

目录

CPR%E6%A6%82%E5%BF%B5-toc" style="margin-left:0px;">一、CPR概念

CPR%E7%9A%84%E8%AE%A1%E7%AE%97-toc" style="margin-left:0px;">二、CPR的计算

CPR%E7%9A%84%E5%BC%80%E5%90%AF%E5%85%B3%E9%97%AD-toc" style="margin-left:0px;">三、CPR的开启关闭

CPR%E4%B8%BA0-toc" style="margin-left:0px;">四、CPR为0

​五、参考资料


CPR%E6%A6%82%E5%BF%B5">一、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%E7%9A%84%E8%AE%A1%E7%AE%97">二、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%E7%9A%84%E5%BC%80%E5%90%AF%E5%85%B3%E9%97%AD">三、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%E4%B8%BA0">四、CPR为0

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

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

​五、参考资料

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


http://www.ppmy.cn/embedded/2414.html

相关文章

华为海思数字芯片设计笔试第五套

声明 下面的题目作答都是自己认为正确的答案,并非官方答案,如果有不同的意见,可以评论区交流。 这些题目也是笔者从各个地方收集的,感觉有些题目答案并不正确,所以在个别题目会给出自己的见解,欢迎大家讨论…

【技巧】PPT文件如何添加公司LOGO?

在工作上,我们经常要给PPT文件添加上公司的logo,如果一页一页添加不但耗时耗力,还容易有遗漏。那怎样快速给PPT添加logo呢?不清楚的小伙伴一起来看看如何吧! 操作步骤: 1.打开PPT文件,点击菜单…

【Jenkins】Jenkins自动化工具介绍

目录 技术背景常规的手动打包步骤 Jenkins简介起源与发展Jenkins的核心价值1.自动化1.1代码构建1.2测试自动化1.3自动部署 2.持续集成与持续部署CI/CD的概念如何减少集成问题更快速地发布软件版本 Jenkins优势Jenkins的主要竞争对手Travis CI:CircleCI:GitLab CI: Jenkins与其他…

Spring Boot 定时任务实现教程

前言 在实际开发过程中,我们经常需要处理一些周期性或定时执行的任务,如数据备份、报表生成、邮件发送等。Spring Boot通过集成Quartz或使用Spring自带的Scheduled注解可以方便地实现定时任务功能。本文将详细介绍如何在Spring Boot项目中使用Scheduled…

鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙

鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙 来自 HarmonyOS 微博13日消息,碧蓝航线 将启动鸿蒙原生应用开发,双方将基于HarmonyOS NEXT鸿蒙星河版的原生流畅等特性,进一步提升游戏流畅度和画面精美度,为用户提供更…

鸢尾花数据集的KNN探索与乳腺癌决策树洞察

鸢尾花数据集的KNN探索与乳腺癌决策树洞察 今天博主做了这个KNN和决策树的实验。 一.数据集介绍 介绍一下数据集: 威斯康星州乳腺癌数据集: 威斯康星州乳腺癌数据集(Wisconsin Breast Cancer Dataset)是一个经典的机器学习数…

MyBatis 面试题(四)

1. MyBatis 中 Mapper 接口的实现原理是? MyBatis 中 Mapper 接口的实现原理主要基于 Java 的动态代理和反射机制。以下是 Mapper 接口实现原理的详细解释: Mapper 接口定义:首先,开发者需要定义一个 Mapper 接口,该接口中声明了…

基于LNMP部署wordpress

目录 一.环境准备 二.配置源并安装 三.配置Nginx 四.配置数据库 五.上传源码并替换 六.打开浏览器,输入虚拟机ip访问安装部署 七.扩展增加主题 一.环境准备 centos7虚拟机 关闭防火墙和seliunx stop firewalld #关闭防火墙 setenforce 0 …

leetcode:739.每日温度/496.下一个更大元素

单调栈的应用: 求解当前元素右边比该元素大的第一个元素(左右、大小都可以)。 单调栈的构成: 单调栈里存储数组的下标; 单调栈里的元素递增,求解当前元素右边比该元素大的第一个元素;元素递…

MySQL-使用CPP接入到MySQL

📟作者主页:慢热的陕西人 🌴专栏链接:MySQL 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容介绍如何在c/cpp代码连接和管理数据库 文章目录 MySQL-…

自动化运维(二十二)Ansible实战 之Jenkins模块

Ansible提供了一些模块,可以用来与Jenkins进行交互,执行各种操作,如创建任务、触发构建、获取构建结果等。通过使用这些模块,我们可以将Jenkins的配置和管理集成到Ansible的自动化流程中。 以下是一些常用的Ansible Jenkins模块: 1、jenkins_job模块 jenkins_job模块用于创建…

Rust 语言 GUI 用户界面框架汇总(持续更新)

拜登:“一切非 Rust 项目均为非法”😎 什么是 GUI 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 现在的应用开发,是既要功…

excel 无法正确处理 1900-03-01 前的日期

问题由来:excel 用公式 TEXT(A1,"yyyy-mm-dd") 转日期时,当A1 的值等于59 的时候,返回值是1900-02-28;当A1 的值等于61 的时候,返回值是1900-03-01;那么当 A1的值为 60 的时候,返回值…

超低功耗Sub-1G收发芯片DP32RF002 M0内核(G)FSK/OOK 无线收发机的32位SoC芯片

产品概述 DP32RF002是深圳市动能世纪科技有限公司研制的基于ARMCortex-MO内核的超低功耗 高性能的、单片集成(G)FSK/OOK 无线收发机的32位SoC芯片。工作于200 ~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频…

详解Qt中的时间——QDateTime、QDate、QTime、QTimeZone

在软件开发中,准确、高效地处理时间信息是许多应用程序的核心需求。Qt框架作为一个功能强大的跨平台应用开发工具包,为开发者提供了丰富的类和函数来处理各种时间相关的任务。本文将深入探讨Qt中关于时间管理的关键类和方法,并通过详细的C代码…

【刷题】图论——最小生成树:Prim、Kruskal【模板】

假设有n个点m条边。 Prim适用于邻接矩阵存的稠密图,时间复杂度是 O ( n 2 ) O(n^2) O(n2),可用堆优化成 O ( n l o g n ) O(nlogn) O(nlogn)。 Kruskal适用于稀疏图,n个点m条边,时间复杂度是 m l o g ( m ) mlog(m) mlog(m)。 Pr…

服务限流--一起学习吧之架构

一、主要算法: 计数器算法:该算法定义了一个单位时间(如1秒)的阈值,每收到一次请求,计数就增加一次。如果请求总数超过当前单位时间内的阈值,就触发限流处理。这种算法简单直观,但存…

【Linux】进程和计划任务

目录 一、进程介绍 1.1 进程与线程的定义 1.1.1 进程(Process)** 1.1.2 线程(Thread)** 1.1.3 进程与线程的区别 1.2 进程的特征 1.3 进程状态 1.3.1 进程的基本状态 1.3.2 进程更多的状态 1.4 进程的优先级 1.5 进程间通信 1.6 进程的分类* 二、进程管理 2.1 查看…

【最全解析】2024百度Spring与Maven面试题大全,看完这篇你就够了!99%的候选人都推荐!

随着技术的不断进步和企业需求的日益复杂化,掌握当前最前沿的开发工具和框架变得尤为重要。Spring和Maven作为现代软件开发中不可或缺的组件,对于任何希望在技术行业特别是在像百度这样的领先科技公司工作的软件工程师来说,都是必须精通的技能…

【NTN 卫星通信】NTN的信关站应该建在哪些地方

1 概述 3GPP的卫星通信讨论了透传星和再生星两种方式。透传星方式,卫星主要是做为中继存在,基本上不做通信协议的处理。再生星方式,gNodeB的主要功能在卫星上,完成通信协议的主要内容。无论是透传星还是再生星,都需要通…