当前位置: 首页 > news >正文

数字后端设计实现之自动化useful skew技术(Concurrent Clock Data)

在数字IC后端设计实现过程中,我们一直强调做时钟树综合要把clock skew做到最小。原因是clock skew的存在对整体设计的timing是不利的。

数字IC后端时序分析clock skew对timing的影响

但是具体到某些timing path,可能它的local clock skew对timing是有帮助的,比如如下图所示。

useful skew技术改善timing时序

第一级FF到第二级FF的setup原来存在-1ns的violation。经过借用后一级的timing margin把第二个FF的tree做长1ns后这条timing path的setup slack变成0ns,即meet了。而且我们发现第二级FF到第三级FF的setup slack虽然从原来的2ns slack变成1ns的slack,但依然还是正的slack。

所以,这个人为引入的clock skew对我们的setup是有利的,所以把这个技术称作usefu skew。

所以EDA工具无论是Synopsys还是Cadence的,在时序优化阶段都支持clock和data的同步优化功能。

在没有这个功能时,我们需要一个个去分析到底哪些点的sink需要做长做短。现在我们可以直接通过模式和选项的设置让工具自己帮助我们来利用好useful skew。

在这里插入图片描述

ICC2:

set_app_options -name clock_opt.flow.enable_ccd_route_clock -value true
set_app_options -name clock_opt.flow.enable_ccd_route_clock_eco -value true
设置useful skew可利用区间
set_app_options -list “ccd.max_postpone 0.06”
set_app_options -list “ccd.max_prepone 0.06”
限制CCD应用在boundary
set ccd.optimize_boundary_timing false
set ccd.optimize_boundary_timing_upstream false

Innovus:

在数字IC后端实现innovus PR过程中一般建议全流程打开useful skew。对于高性能 ARM CPU设计,建议结合early clock flow来使用,效果最佳。

在这里插入图片描述

setOptMode -usefulSkew true
setOptMode -usefulSkewPreCTS true
setOptMode -usefulSkewCCOpt extreme
setOptMode -usefulSkewPostRoute true

setUsefulSkewMode -maxAllowedDelay 0.06

setOptMode -usefulSkew是主开关,它控制optDesign在整个Flow的useful skew。如果设置为false,则无论其他控制开关的设置如何,flow中的任何位置都不会利用Useful skew。该选择在工具里面默认是true。

setDesignMode -flowEffort是一个design level的控制开关,用于根据设计目标来调节优化的力度。
新的setOptMode -usefulSkewCCOpt控制命令替换了早期的参数-usefulSkewCTS和-usefulSkewPostCTS,以及命令set_ccopt_effort。

innovus也支持对某些特殊的sink点施加特殊的约束,告知工具不使用useful skew技术。

setOptMode -skewClockPreserveLatencyTermList $special_clk_pin_name
setOptMode -usefulSkewPreCTSPreserveLatencyTermList $special_clk_pin_name

set_ccopt_property schedule off -pin $special_clk_pin_name

相关文章:

  • Linux - No space left on device
  • 后端程序员开发win小工具(未完待续)
  • JS浏览器的默认行为及阻止行为,阻止右键菜单、阻止超链接跳转、阻止拖拽事件
  • k8s的yaml文件中的kind类型都有哪些?(详述版Part1/2)
  • C#高级 10 Linq操作
  • 记mongodb7.0安装时的常用操作 windows
  • Docker容器进入的4种方式(推荐最后一种)
  • 部署可道云网盘的一个漏洞解决
  • UISegmentedControl控件定制
  • 结构体的含义、表示、规范、运用
  • uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义
  • Python中魔术方法汇总
  • 华为OD机试 - 最小矩阵宽度(Java JS Python C)
  • 【无标题】关于异常处理容易犯的错
  • 控制台项目和ASP.Net Core 1.项目创建 2.一键启动多个服务 3.引入别的库
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【mysql】环境安装、服务启动、密码设置
  • 2017-08-04 前端日报
  • angular2开源库收集
  • Computed property XXX was assigned to but it has no setter
  • golang 发送GET和POST示例
  • Javascript设计模式学习之Observer(观察者)模式
  • k8s如何管理Pod
  • nodejs调试方法
  • sublime配置文件
  • windows-nginx-https-本地配置
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 服务器之间,相同帐号,实现免密钥登录
  • 构建二叉树进行数值数组的去重及优化
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 批量截取pdf文件
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 实现菜单下拉伸展折叠效果demo
  • 通过几道题目学习二叉搜索树
  • 为视图添加丝滑的水波纹
  • 我有几个粽子,和一个故事
  • 中文输入法与React文本输入框的问题与解决方案
  • 回归生活:清理微信公众号
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​MySQL主从复制一致性检测
  • ​马来语翻译中文去哪比较好?
  • #QT(一种朴素的计算器实现方法)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)二分查找 超详细
  • (C语言)逆序输出字符串
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Unity3DUnity3D在android下调试
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 发送邮件
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调