数字IC芯片设计实现 | 时序Timing Signoff check_timing检查解析

今天分享在数字IC芯片设计实现做timing signoff阶段必须要看的report。check_timing的报告必须是clean的,否则芯片回来大概率是废片!!!实际上一堆公司的芯片败在不看这个report了。

我们知道primetime(简称PT)做时序检查是基于我们给定的signoff sdc时序约束。所以timing结果的准确性就取决于sdc的完备性。如果sdc有漏洞,自然这个timing结果就不可信。但好在PT会报出当前设计sdc可能存在的问题。

所以我们在跑完pt必须带上check_timing检查下sdc的完备性。如果sdc有问题,工具会报出如下图所示的警告!记住每个警告都必须review一遍。如果认为是假的或无关紧要,请签字画押!

如果是用的cadence的tempus工具检查timing,也会报出类型的警告信息。原理是一样的,只不过叫法可能不太一样。
Timing signoff check_timing report

PT check_timing主要检查以下这些item。

● generated_clocks
检查generated_clocks的定义是否合理,有没有源时钟,是否存在相互循环定义的情况。

对于如下所示电路施加下面的sdc约束,在check_timing时就会报generated clock定义问题。

数字IC后端设计实现之时序约束generated clock约束

create_clock -name ck1 -period 10 -waveform { 0 5 } [get_ports {clk1}]

create_clock -name ck2 -period 10 -waveform { 0 1 } [get_ports {clk2}]

#create_clock -name ck3 -period 10 -waveform { 0 5 } [get_ports {clk3}]

create_generated_clock -divide_by 2 -name gclk2 -source clk3 divider/Q

set_propagated_clock [get_clocks {ck1}]

set_input_delay 2 -clock [get_clocks {ck1}] [get_ports {in}]

set_output_delay 2 -clock [get_clocks {ck2}] [get_ports {out}]

set_disable_timing -from A -to Y C3

在这里插入图片描述

generated clock定义典型错误—source latency 0

还有比如下面这样的电路,我们把分频点定义在AND2的输出端。同样也会报这个时钟定义有问题。

create_clock -name clk1 -period 10 [get_port clk1]
create_generated_clock -name genclk -divide_by 2 -source [get_port clk1] [get_pin A3/Y]

在这里插入图片描述

● generic
检查是否存在unmapped的cells,这类generic cell一般是零延时,影响时序检查准确性。这类情况一般比较少见,如果有在逻辑综合或PR阶段就会发现。

● latch_fanout
检查电平触发latch的扇出是不是自身,有没有latch级联的情况

● loops
检查组合逻辑有没有反馈回路,STA对这种反馈回路是不会分析的,需要通过set_disable_timing来打断这种反馈回路

下图所示电路存在timing loops。如果design存在这样的情况,我们必须使用set_disable_timing自己把这个loop断掉,否则工具会自己断,可能会出现工具判断的情况和我们预期不一样的情况。因为工具在分析时序时不支持timing loop!

STA Timing loop issue

● no_clock
检查是否有时序单元的clock pin不在任何时钟网络上。比如某个寄存器的CK是接到某个data逻辑上或者clock被set_clock_sense(case analysis) 截断导致clock传不过去。

在这里插入图片描述

create_clock -name ck -period 10 -waveform { 0 5 } [get_ports {ck}]

create_clock -name ck1 -period 9 -waveform { 0 4.5}

set_input_delay 2 -clock [get_clocks {ck}] [get_ports {in}]

set_input_delay 2 -clock [get_clocks {ck}] [get_ports {in1}]

set_output_delay 2 -clock [get_clocks {ck}] [get_ports {out}]

set_clock_gating_check -setup 0.2 A1

set_clock_gating_check -setup 0.2 O1

set_case_analysis 1 O1/A

在这里插入图片描述

● no_input_delay
检查Input Port是否有关联的时钟,否则相关IN2REG路径是unconstrained的。

● partial_input_delay
检查在set_input_delay时,是否存在只指定-min或者-max其中之一的情况

● unconstrained_endpoints
检查时序单元数据Pins或者Output Ports是否没有max delay约束

create_clock -name ck -period 10 -waveform { 0 5 } [get_ports {ck}]

set_propagated_clock [get_clocks {ck}]

set_input_delay 2 -clock [get_clocks {ck}] [get_ports {in}]

set_clock_sense -stop_propagation C1/Y

在这里插入图片描述

● unexpandable_clocks
检查相关的clocks之间是否可扩展,在跨两个不同频率的时钟路径上计算时序时,往往需要扩展时钟以计算相应的setup timing

● no_driving_cell
检查Input Port是否定义了驱动单元,工具只会在相连的net有寄生参数存在时才会产生Warning信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/303192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NVMe系统内存结构 - 命令格式

NVMe系统内存结构 - 命令格式 1 Submission Queue与Completion Queue定义1.1 空队列1.2 满队列1.3 队列大小1.4 队列标识符1.5 队列优先级 2 Submission Queue - 命令格式2.1 Command Dword 02.2 Command Format – Admin Command Set2.3 Command Format – NVM Command Set2.4…

#define宏定义的初探

前言&#xff1a; 最基本的#define定义方式 #define可以定义宏&#xff0c;这点相信大家并不陌生&#xff0c;其定义的方式十分简单&#xff0c;给大家随便来一个最简单、最基础的定义方式看看&#xff1a; #include<stdio.h> #define a 3 int main() { printf(&quo…

软件测试|SQL中的UNION和UNION ALL详解

简介 在SQL&#xff08;结构化查询语言&#xff09;中&#xff0c;UNION和UNION ALL是用于合并查询结果集的两个关键字。它们在数据库查询中非常常用&#xff0c;但它们之间有一些重要的区别。在本文中&#xff0c;我们将深入探讨UNION和UNION ALL的含义、用法以及它们之间的区…

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上&#xff0c;充分的利用了Redis键值数据库提供的一系列优势&#xff0c;在Java实用工具包中常用接口的基础上&#xff0c;为使用者提供了一系列具有分布式特性的常…

Java LeetCode篇-二叉搜索树经典解法(实现:二叉搜索树的最近公共祖先、根据前序遍历建树等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 判断合法 1.1 使用遍历方式实现验证二叉搜索树 1.2 使用递归方式实现验证二叉搜索树 2.0 求范围和 2.1 使用非递归实现二叉搜索树的范围和 2.2 使用递归方式实现…

软件测试|测试平台开发-Flask 入门:URL组成部分详解

简介 Flask 是一款流行的 Python Web 框架&#xff0c;它简单轻量而灵活&#xff0c;适用于构建各种规模的 Web 应用程序。在 Flask 中&#xff0c;URL&#xff08;Uniform Resource Locator&#xff09;是指定 Web 应用程序中资源的唯一标识符。URL 组成部分是构成一个完整 U…

可在图像中生成任意精准文本,支持中文!阿里开源AnyText

随着Midjourney、Stable Difusion等产品的出现&#xff0c;文生图像领域获得了巨大突破。但是想在图像中生成/嵌入精准的文本却比较困难。 经常会出现模糊、莫名其妙或错误的文本&#xff0c;尤其是对中文支持非常差&#xff0c;例如&#xff0c;生成一张印有“2024龙年吉祥”…

在甲骨文云上用 Ray +Vllm 部署 Mixtral 8*7B 模型

在甲骨文云上用 Ray Vllm 部署 Mixtral 8*7B 模型 0. 背景1. 甲骨文云 GPU 实例2. 配置 VCN 的 Security List3. 安装 Ray 和 Vllm4. 启动 Ray5. 启动 Vllm 0. 背景 根据好几个项目的需求&#xff0c;多次尝试 Mixtral-8x7B-Instruct-v0.1 这个模型&#xff0c;确实性能不错。…

GD32移植FreeRTOS

准备工作 GD32开发板。案例是以梁山派为开发板。Windows系统的电脑。当前是以Win11的电脑来实现案例的。Keil开发工具。并且已经安装好GD32依赖环境。FreeRTOS源码包。下载地址为: Releases FreeRTOS/FreeRTOS GitHub 当前以FreeRTOSv202212.01版本为例。也是目前的最新版本…

SpringMVC-HelloWorld

一、SpringMVC简介 1.1 SpringMVC和三层架构 MVC是一种软件架构思想&#xff0c;将软件按照模型、视图和控制器三个部分划分。 M&#xff1a;model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;用于处理数据。JavaBean分为两类&#xff1a; 实体类Bean&…

网络通信(11)-C#TCP服务端封装帮助类实例

本文使用Socket在C#语言环境下完成TCP服务端封装帮助类的实例。 实例完成的功能: 服务器能够连接多个客户端显示在列表中,实现实时刷新。 服务器接收客户端的字符串数据。 选中列表中的客户端发送字符串数据。 在VS中创建C# Winform项目,编辑界面,如下: UI文件 name…

4030 【例题2】Cashier Employment 出纳员问题(Poj1275Hdu1529)————一本通(提高篇)

今天主要来讲讲差分约束 题目大意&#xff1a; 从0点到23点&#xff0c;给出每个时刻需要的售货员个数&#xff0c;再给出每个时刻应征的售货员个数&#xff0c;然后让你求出满足需求的最小售货员个数 解题思路&#xff1a;差分约束 #include <queue> #include <cs…

Spring 动态数据源事务处理

在一般的 Spring 应用中,如果底层数据库访问采用的是 MyBatis,那么在大多数情况下,只使用一个单独的数据源,Spring 的事务管理在大多数情况下都是有效的。然而,在一些复杂的业务场景下,如需要在某一时刻访问不同的数据库,由于 Spring 对于事务管理实现的方式,可能不能达…

已解决 ValueError: Data cardinality is ambiguous 问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中&#xff0c;一个漂亮的WPF导航界面不仅为用户提供视觉上的享受&#xff0c;更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍&#xff1a; 首先&#xff0c;引人入胜的首页界面是用户与软…

Redis原理篇(Dict的收缩扩容机制和渐进式rehash)

Dict&#xff08;即字典&#xff09; Redis是一种键值型数据库&#xff0c;其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成&#xff1a;哈希表&#xff08;DictHashTable&#xff09;&#xff0c;哈希节点(DictEntry)&#xff0c;字典&#xff08;Dict&#xff09…

【docker】centos7安装harbor

目录 零、前提一、下载离线包二、安装三、访问四、开机自启 零、前提 1.前提是已经安装了docker和docker-compose 一、下载离线包 1. csdn资源&#xff1a;harbor-offline-installer-v2.10.0.tgz 2. 百度云盘&#xff08;提取码&#xff1a;ap3t&#xff09;&#xff1a;harbo…

Nvidia Jetson AGX Orin使用CAN与底盘通信(ROS C++ 驱动)

文章目录 一、Nvidia Jetson AGX Orin使用CAN通信1.1 CAN使能配置修改GPIO口功能1.2 can收发测试 二、通过CAN协议编写CAN的SocketCan ROS1驱动程序2.1 通讯协议2.2 接收数据节点2.3 发送数据节点2.4 功能包配置 三、ROS2驱动程序 一、Nvidia Jetson AGX Orin使用CAN通信 参考…

python股票分析挖掘预测技术指标知识之蜡烛图指标(6)

本人股市多年的老韭菜&#xff0c;各种股票分析书籍&#xff0c;技术指标书籍阅历无数&#xff0c;萌发想法&#xff0c;何不自己开发个股票预测分析软件&#xff0c;选择python因为够强大&#xff0c;它提供了很多高效便捷的数据分析工具包。 我们已经初步的接触与学习其中数…

Java中的String类:深入分析与高级应用

Java中的String类&#xff1a;深入分析与高级应用 1. String类基础1.1 概述1.2 不可变性的好处1.3 字符串常量池 2. 创建String对象3. String类常用方法4. 内存管理4.1 字符串常量池4.2 intern方法 5. String与StringBuilder/StringBuffer6. 性能考虑7. 结论 Java中的String类是…