数字后端知识点扫盲——CTS (上)

2023-11-19

       后端和前端一样在IC设计中扮演着非常重要的角色,甚至可以说入门的前端设计工程师对timing的理解远不如一个后端设计工程师,因此想要更好的理解电路的timing在后端P&R之后或者说在大规模的设计中后端如何实现clock对DFF的驱动,就需要学习和了解CTS,而这些对于一个优秀的前端设计人员来说,也是一个必要掌握的技能。

       今天我们就来学习一下clock tree synthesis (CTS),本篇文章学习自知乎博主,原文链接为:数字后端基础技能之:CTS(上篇) - 知乎 (zhihu.com)

        构思了很久应该怎样介绍CTS,最终决定分为几篇文章来一步一步介绍整个流程,尽管如此,由于在大型项目中CTS是一个比较复杂的工作,因此在本文之外可能还要有很多东西需要后端设计工程师去关心,但是我仍然希望对于初学者,通过本专栏接下来的几篇文章,能够对CTS的基本流程和做法有一个大致的思路,从而避免拿到一个design后陷入无从下手的被动。

        言归正传,在P&R整个流程中,有两个对于design的PPA(power performance area)起决定性的步骤:Floorplan和CTS,尽管如此,在实际项目中,很多人可能工作数年也没有机会做一次比较全面的CTS,一方面原因在于,P&R工具尤其是现在的ICC2和innovus对于相对简单的clock tree都能很好的处理,另一方面的原因是,对于大多数无法接触TOP的工程师来说,harden block内部的clock结构大概率是比较简单的,因此就导致一些同学在做过几个项目后面对复杂的clock仍然无从下手。

        针对这个现象,本文希望根据自己的经验把CTS的基本思路和做法介绍给大家,如果大家以后遇到复杂的clock时发现这里的内容对实际工作多有裨益,本文也不胜荣幸。

       clock tree synthesis,顾名思义,就是对design的时钟树进行综合,主要的目的是让每个clock都能够在尽量短的时间内传达到他们驱动的所有DFF(寄存器),对于CTS,我们有三个指标希望能够尽量做到最好。

      每个clock到达其所驱动的sink(DFF)的latency都尽量的短;

      每个clock之内,以及有时序关系的clock之间的skew尽量小;

      每个clock的common path尽量的长;

      对于大多数P&R工具,CTS的flow可以总结为以下形式:

       上图中可能有些名字还不太清楚他的具体含义,但是这些都会在后面的介绍中一一提及,在这里也没有将大部分单词翻译成中文,因此希望大家记住这些名词,方便在读英文的user guide时少一些障碍。

     CTS策略

     这是CTS的第一步,虽然在流程中只是简单的几个字,但是针对复杂的clock,这里可能需要花费大量的时间分析clock的结构,找出潜在可能出现的问题和瓶颈,并针对我们上述提出的三个指标,决定如何去综合时钟树,这一步如此重要又非常容易被忽略,以至于有些同学在遇到复杂的clock出现问题时无从分析,遑论如何改进,下面我将通过一个例子来说明,CTS策略到底是什么?

假设某芯片的clock结构可以简化为如下形式:

 其中fucntion clock从两个PLL和两个IO (一个FCLK1, FCLK2)进来,test clock从两个IO(TCLK1, TCLK2)进来,从图中可以看出,在分频电路之后,进入A和D的clock不与其他模块共享。

       与此同时,我们假设芯片的floorplan可以表示为如下形式(注意clock source 和模块位置与clock结构对应关系)

如果模块间的数据流关系简述为如下形式:

Block B <—> Macro 1

Block C <—> Macro 2

Macro 1 <—> Macro 2

Block A/D 为独立模块

考虑到上述时钟结构,floorplan和时许关系,我们该如何决定CTS策略呢?

在考虑策略之前,我们先回忆一下CTS的三个目标:latency尽量短skew尽量小common path尽量长;

先从最简单的开始:鉴于Block A/D为独立模块,他们不与其他模块产生时序关系,同时从clock结构图可以看到进入A/D的clock在选择之后没有与其他模块有交集。因此,我们只需要把A和D的clock尽量做短即可。

我们也可以把一切都交给EDA工具去做,但是这样做的结果不能保证得到我们想要的结果,最好的办法是把进入到A,D两个Block的clock选择器以及其他clock分频逻辑固定在这两个block附近(下图中的紫色区域),这样不仅能够使clock line尽量以最短的距离到达Block,同时也能够尽可能地增加common path的长度。

接下来考虑Block B/C和Macro1、2,鉴于他们之间的时许关系,我们希望他们之间的skew尽量的短,同时common path要尽量的长,在floorplan上我们可以看到他们被拜访成对称的形式,因此,最简单直接的办法就是将所有与这几个相关的逻辑都固定在两个Macro上方的正中间(假设其clock port在黄色标识的部分),如下图中红色方框所示:

到目前为止我们确定了需要preplace的逻辑以及其放置的区域,接下来我们需要考虑如何实现我们的设想,其中首要的任务就是定义CTS的sdc。

对于CTS工具来说,要进行时钟树综合,有一个必备的前提条件就是clock的定义,而后端设计者是可以根据自己的策略自己调整clock的定义的,让我们再会议一下clock的结构图。

针对上述结构,有两种常用的定义Clock的方法(时间单位ps)

1:直接从所有的clock的源头定义,此方法基本可以从func/test的sdc 中直接复制clock的定义:

creat_clock-period xxx -name PLL_CLK [get_pins PLL1/CLK] ;

2:采用分段CTS的方法,因为大部分clock结构,从选择器开始都比较简单,因此我们可以从选择器的输出端定义一系列的clock并对有时许关系的部分进行balance;之后再从各个clock源头定义并在时钟树综合的时候在选择器的输入停止,此方法的clock定义可以大致分为以下两个部分。

第一段:选择器输出端—> 各个Block

create_clock-period xxx -name MUXCLK1 [get_pins MUX1/Y]

create_clock-period xxx -name MUXCLK1 [get_pins MUX2/Y]

........

第二段:clock source —> 各个选择器

creat_clock-period xxx -name PLL_CLK [get_pins PLL1/CLK] ;

........

至于如何使工具在选择器停止,我们将在接下来的文章中继续讨论,同时我们将会把上述思路和策略通过真是的脚本和命令反映出来,希望大家继续关注。

另外,在本文中设计的design通过上述几幅图可以了解到相对详细的时钟结构,但是在实际设计中我们如何事先得知clock的结构时序关系呢?一般来说对于流程完善的大公司,绘制详细的始终结构是前端设计的工作之一,但是在实际项目中,面对的大部分design的clock结构图可能是十分简单甚至完全没有的情况,这时就需要后端工程师多一些耐心去分析design,并积极与前端的constraint设计者沟通,从而实现对design的时钟结构快速把握。

至此,CTS的策略基本构建完成,在接下来的文章中,我们将继续详细讨论这些策略的实现方法以及如何查看debug clock的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字后端知识点扫盲——CTS (上) 的相关文章

随机推荐

  • Kali搭建DVWA——Web靶场

    博主主站地址 微笑涛声 www cztcms cn 一 DVWA介绍 1 DVWA简介 DVWA是一款基于PHP和MYSQL开发的web靶场练习平台 集成了常见的web漏洞如sql注入 XSS 密码破解等常见漏洞 旨在为安全专业人员测试自己
  • SDL无法打开音频设备的问题:Couldn‘t open audio/video device: No available audio/video device

    解决中标麒麟下SDL无法打开音频设备的问题 root登录 首先就是一定要用root登录 这个可能是权限问题 否则后面实验不能成功 安装ALSA库 首先下载alsa lib https www alsa project org main in
  • [数据结构(C语言)]单链表的定义,实现初始化、创建、插入、增、删、改、查等基本操作

    建议新人收藏使用 首先 让我们回顾一下顺序表的优缺点 1 优点 随机存取 存储空间利用率高 2 缺点 插入 删除效率低 必须按事先估计的最大元素个数分配连续的存储空间 难以临时扩大 采用链式存储结构的线性表称为链表 链表有单链表 循环链表和
  • Stream流将list中对象的属性按照小时进行分组

    需求是这样的 给了一个日期时间区间 一个对象list 要统计这个时间段内每天某个小时段的数据量之和 如图 刚开始思路是把时间区间按每个小时进行拆分 得到这段时间每个小时的开始结束时间跟list对象进行比对后在进行整合计算 发现代码会很臃肿
  • python批量下载csdn文章

    声明 该爬虫只可用于提高自己学习 工作效率 请勿用于非法用途 否则后果自负 功能概述 根据待爬文章url 文章id 批量保存文章到本地 支持将文中图片下载到本地指定文件夹 多线程爬取 1 爬取效果展示 本次示例爬取的链接地址 https b
  • kafka系列——KafkaProducer源码分析

    实例化过程 在KafkaProducer的构造方法中 根据配置项主要完成以下对象或数据结构的实例化 配置项中解析出 clientId 用于跟踪程序运行情况 在有多个KafkProducer时 若没有配置 client id则clientId
  • 通过点击按钮在页面添加图片

    点击添加按钮 在盒子中加入图片 点击图片实现删除图片效果 代码如下
  • ubuntu18安装好没有gcc的真正解决方法

    之前因为一台上同时装了n个系统 导致ubuntu坏了 重装了一下 结果发现没有gcc 奇怪的是本来是有的 百度找了一下 有说用aptitude解决的 我试了一下 使用了第二个推荐方案 结果ubuntu系统完全坏了 想了一下这次安装不正确的过
  • RocketMQ源码(26)—DefaultMQPushConsumer事务消息源码【一万字】

    事务消息是RocketMQ的一大特性 其被用来实现分布式事务 关于RocketMQ的事务消息的相关原理的介绍见这篇博客 RocketMQ的分布式事务机制 事务消息 关于事务消息的基本案例看这里 消息事务样例 本文主要介绍RocketMQ的事
  • 在外远程登录局域网下的象过河ERP管理系统,无需公网IP

    文章目录 概述 1 查看象过河服务端端口 2 内网穿透 3 异地公网连接 4 固定公网地址 4 1 保留一个固定TCP地址 4 2 配置固定TCP地址 5 使用固定地址连接 转发自CSDN远程穿透的文章 公网远程访问公司内网象过河ERP系统
  • R语言读取Excel文件

    因为一个项目需要 原始数据全部是Excel文件 包括 xls和 xlsx格式 并且很多excel数据的格式并不规范 一个个转为csv格式不太现实 所以把所有能了解到的读取excel的方法都试了一遍 做个简单汇总 相关的包 RODBC xls
  • IGBT工作原理及作用

    一 IGBT是什么 IGBT Insulated Gate Bipolar Transistor 绝缘栅双极型晶体管 是由BJT 双极型三极管 和MOS 绝缘栅型场效应管 组成的复合全控型电压驱动式功率半导体器件 兼有MOSFET的高输入阻
  • condition_variable 锁

    std condition variable提供了两种 wait 函数 当前线程调用 wait 后将被阻塞 此时当前线程应该获得了锁 mutex 不妨设获得锁 lck 直到另外某个线程调用 notify 唤醒了当前线程 在线程被阻塞时 该函
  • QML 相互之间通讯 信号 槽

    QML 之间 信号与槽 方式一 对于 QML 中的属性如果其值发生改变 QML 自动会发生相关信号 on
  • 关于nlp-pyltp的基本介绍和使用

    一 下载 ltp 模型 ltp data v3 4 0 pyltp 1 ltp模型下载地址如下 https download csdn net download TFATS 12758993 2 下载pyltp如下 pip install
  • 编译linux内核成vmlinuz,内核编译之vmlinuz vmlinux system.map initrd

    一 vmlinuz vmlinuz是可引导的 压缩的内核 vm 代表 Virtual Memory Linux 支持虚拟内存 不像老的操作系统比如DOS有640KB内存的限制 Linux能够使用硬盘空间作为虚拟内存 因此得名 vm vmli
  • 使用Minitab解决Excel的限制问题

    前两天 当我在做数据转置以期获得更好分析图形的时候 我碰到了传说中excel的限制 如图 在解决这个问题的过程中 我发现了用来做数据分析 比excel更好的工具Minitab 打开minitab 把纪录数据的Excel表以File gt O
  • pageaudit 属性不正确。_浅析script 标签的 async 和 defer 属性

    每日前端夜话 第420篇 正文共 1500 字 预计阅读时间 7 分钟 前端当然要从 HTML 开始 今天来聊聊在 script 标签中加上 async defer 时的功能及差异 都明白的道理 我们都知道 浏览器解析 HTML 是一行一行
  • 【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操

    目录 建立工程 添加顶层 模块1 模块2 添加约束文件 编辑时钟约束 打开布线设计 代码代表的含义 时序报告 进行时序分析 Summary 包含了汇总的信息量 Source Clock Path 这部分是表示Tclk1的延时细节 Data
  • 数字后端知识点扫盲——CTS (上)

    后端和前端一样在IC设计中扮演着非常重要的角色 甚至可以说入门的前端设计工程师对timing的理解远不如一个后端设计工程师 因此想要更好的理解电路的timing在后端P R之后或者说在大规模的设计中后端如何实现clock对DFF的驱动 就需