深度解析Create_clock与Create_generated_clock的区别

文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点。点击进去后出现任何损失与社区无关。

最近朋友需要几位稍微资深点的数字后端工程师,如果刚好你想换工作,可以联系小编。据说薪资待遇非常丰厚 (据说可以开到年薪 80w),说的小编都有点心动,可惜小编今年已经给自己定了个目标——写公众号,分享数字 IC 后端设计实现方面的技术干货,至少写 100 篇技术类原创文章。So,机会就留给更需要的人吧。小编打算靠各位的打赏来实现年薪百万,是不是又在做白日梦了,呵呵!希望大家多多转发,多多打赏(确实很久没吃上鸡腿了)。好了下面进入今天的主题。

create_generated_clock

在数字 IC 设计中,芯片中各个模块的工作频率可能都不太一样。因此有了时钟产生电路(clock generation)。这个电路含有时钟切换电路,时钟分频,倍频电路以及 clock reset 电路。通常我们通过 create_generated_clock 来定义时钟分频和倍频电路后的时钟。

create_generated_clock 是用来说明 generated clock 与 source clock 的相位(边沿)关系。同时根据 source clock 找到 master clock 以及 source clock 和 master clock 的关系, 最终会确定 generated clock 和 master clock 的相位(边沿)关系。

在 genereated clock 的时候一定要明确 generated clock 与 master clock 的相位关系(rise->rise or rise->fall or fall->rise or fall->fall), 这些关系由桥梁 source clock 嫁接,所以有了 generated clock 和 source clock,以及 source clock 和 master clock 的关系。

如果根据声明找到的 generated clock 和 master clock 的关系和实际的关系不一致,则会造成一些分析错误。 比如静态时序分析 STA 的时候找不到 generated clock 和 source clock 相位关系,会将 generated clock 的 source latency 设置为 0。

如下图为一个简单的数字电路及其波形图。

create_clock -period 10 CLK

create_generated_clock -name CLKdiv2 \

-divide_by 2 \

-source CLK \

[get_pins Udiv/Q]

根据上面定义,generated_clock 是定义在二分频的输出端 Q 上,其 source 为 CLK。但是我们知道 Udiv 这个寄存器的时钟端 CK 与 CLK 是反相的(即相位差 180 度)。

根据声明,generated 和 master clock 的关系如下(工具会根据 source clock 找到 master clock,并确定 source clock 和 master clock 的关系,当前 source clock 即 master clock)。但实际电路是 source clock 和 master clock 是存在 180 相位差的,因此以上定义的 generated_clock 是不正确的。

正确的波形图应该如下图所示:

所以 UFF1 到 UFF2 的 setup 检查为 launch clock edge 为 T=5ns 时刻,capture clock edge 为 T=15ns 时刻 (默认为 single cycle path)。

因此,我们可以通过以下两种方法来定义分频后的时钟

1. 改变 generated clock 的 source,即让 generated clock 和 source clock 的路径唯一且单一(单一是指,声明的相位边沿关系和实际的相位边沿关系一致)。
一般做法就是将 source clock 设置在触发器的 clock 端。如下:

create_generated_clock -name CLKdiv2 \

-divide_by 2 \

-source [get_pins Udiv/CLK] \

[get_pins Udiv/Q]

这样 generated clock 和 source clock 的关系和声明的一致。 工具会根据声明的 source clock 找到它的 master clock,同时确定 source clock 和 master clock 相位相反的关系, 由此就确定了 generated clock 和 master clock 的关系。

2. 直接声明 generated clock 和 master clock 的相位边沿关系。如下:

create_generated_clock

-name CLKdiv2 \

-edges {2 4 6} \

-source CLK \

[get_pins Udiv/Q]

虽然这两种方法都可以用来定义 generated_clock,但是考虑到后期 review constraint 的便利性,强烈建议使用第二种方式来实现(实际项目中都是采用这种方法)。

create_generated_clock 有多个 master_clock 的情况

上文讲到了 create_generated_clock 的作用,提到工具会根据声明找到 generated clock 和 source clock 的相位(边沿)关系,同时根据 source clock 找到 master clock 顺便确定 source clock 和 master clock 的关系,最终确定 generated clock 的关系。但是如果有时候虽然确定了 master clock 和 generated 的相位(边沿)关系,但是 master clock 到 generated clock 的路径有很多的时候,也会导致 STA 分析问题。

create_clock -period 10 CLK

create_generated_clock -name CLKdiv2 -divide_by 2 -source FFdiv2/CLK UMUX/Y -master CLK -add

create_generated_clock -name CLKdiv4 -divide_by 4 -source FFdiv4/CLK UMUX/Y -master CLK -add

set_clock_groups -physically_exclusive -group {CLK} -group {CLKdiv2} -group {CLKdiv4}

此时,PT 时序分析报告如下:

可以知道 source latency 选择了不同路径

所以在声明 generated clock 的时候不仅要保证 generated clock 和 master clock 相位边沿关系和实际的一致,还要保证 generated clock 和 master clock 的路径一。
如下图,列出了可以声明唯一 generated clock 点。

同时考虑到选择器之前各个时钟间有 crosstalk,选择器之后没有 crosstalk,所以声明如下:

Create_clock -period 10 CLK

#####define divide_by_2,divide_by_4 clocks

Create_generated_clock -name CLKdiv2 -divide_by_2 FFdiv2/Q -source FFdiv2/CK

Create_generated_clock -name CLKdiv4 -divide_by_4 FFdiv4/Q -source FFdiv4/CK

#####create clocks arriving at MUX inputs

Create_generated_clock -name CLK_mux -combinational UMUX/A -source UMUX/A

Create_generated_clock -name CLKdiv2_mux -combinational UMUX/B -source UMUX/B

Create_generated_clock -name CLKdiv4_mux -combinational UMUX/C -source UMUX/C

#####define clock at FFdiv3

Create_generated_clock -name CLK_mux_div3 -divide_by 3 -source FFdiv3/CK -master CLK_mux -add

Create_generated_clock -name CLKdiv2_mux_div3 -divide_by 3 -source FFdiv3/CK -master CLKdiv2_mux -add

Create_generated_clock -name CLKdiv4_mux_div3 -divide_by 3 -source FFdiv3/CK -master CLKdiv4_mux -add

####apply physical exclusivity

Set_clock_groups -physically_exclusive

-group {CLK_mux CLK_mux_div3} \

-group {CLKdiv2_mux CLKdiv2_mux_div3} \

-group {CLKdiv4_mux CLKdiv4_mux_div3}

若直接将 CLKmux, clkdiv2_mux, clkdiv4_mux 省略,然后分别在 MUX/Y 端定义三个 generated clock,其 source 设定为 CLK, CLKdiv2, CLKdiv4,也是可以的。

思考题(2018 年某 SOC 公司校园招聘数字后端笔试题)

对于这道题,如果你还不会做,请给自己敲个警钟。

芯片 A 端口 OUT1/OUT2 分别接到芯片 B 的 D/CLK。芯片 A 端口约束如下:

create_clock -name CLK -period 10 -waveform {0 5} [get_pins U1/Y]

create_generate_clock -name GCLK -source [get_pins U1/Y] -edge {1 3 7} -master_clock CLK [get_pins U2/Y]

create_generate_clock -name OUTCLK -source [get_pins U2/Y] -master_clock GCLK -divide_by 1 [get_ports OUT2]

set_output_delay -max 8 -clock OUTCLK [get_ports OUT1]

set_output_delay -min 1 -clock OUTCLK [get_ports OUT1]

Q1: 请问对于芯片 B, D 到 CLK 的 setup/hold check 要求分别是什么?

Q2: 画出 CLK 和 GLCK 的波形?

Q3:如果要求从时钟源到 OUT1/OUT2 delay 等长,请问 constraint 怎么写?

小编知识星球简介:

在这里,目前已经规划并正着手做的事情:

  • ICC/ICC2 lab 的编写

  • 基于 ARM CPU 的后端实现流程

  • 利用 ICC 中 CCD(Concurrent Clock Data)实现高性能模块的设计实现(下周在知识星球上 release

  • 其他内容待定

在这里,各位可以提问(支持匿名提问,提问从此不再害羞),小编会在 24 小时内给予解答(也可以发表你对数字后端设计实现中某个知识点的看法,项目中遇到的难点,困惑或者职业发展规划等)。

反正它是一个缩减版的论坛,增强了大家的互动性。更为重要的是,微信有知识星球的小程序入口。星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有十四位星球成员,感谢这十四位童鞋的支持!欢迎各位铁杆粉丝加入!

相关文章推荐(不看保证后悔)

盘点数字后端设计实现用到的各种文件

clock jitter 是否对 hold time 有影响?(文末有福利)

为什么时钟树上要用 clock inverter(min pulse width check)

LVS 就是这么简单!(数字后端物理验证篇)

揭秘为何 net delay 是负值(数字后端实现时序篇)

PBA(Path Base Analysis)想说爱你不容易(静态时序分析基础篇)

一网打尽时钟树综合 Clock Skew

数字后端设计实现之时钟树综合实践篇

【惊呆了!】你居然还在用 flatten 方式进行 timing signoff

数字后端面试问答 No.16-18

合理的时钟结构能够加速 Timing 收敛(时钟树综合中级篇)

数字后端面试问答 No.13-15(每日三问)

【机密】从此没有难做的 floorplan(数字后端设计实现 floorplan 篇)

数字后端面试问答 No.10-12(每日三问)

数字后端面试问题 No.7-9(每日三问)

听说 Latch 可以高效修 hold 违例(Timing borrowing 及其应用)

15 天零基础入门到精通 python - 最全的视频教程

数字后端面试问答 No.4-6(每日三问)

IR Drop 分析之 Redhawk 分析流程

CRPR 能补偿 crosstalk 吗?

原来电路最高工作频率是这么算出来的(STA 基础篇)

数字后端面试问答 No.1-3(每日三问)

秒杀数字后端实现中 clock gating 使能端 setup violation 问题

教你轻松调 DCT 和 ICC 之间 Timing 与 Congestion 的一致性

数字芯片设计实现中修复 setup 违例的方法汇总

数字 IC 设计中 ECO 的那些事,其实并不是事!

Scan chain reordering 怎么用你知道吗?

如何评价数字后端设计中 floorplan 的好坏?

数字后端实现时 congestion 比较严重,你 hold 得住吗?

数字后端实现 place 过程进阶

Final netlist release 前,你应该做好哪些工作?

基于 Physical Aware 的动态功耗优化实现方案

深入浅出讲透 set_multicycle_path,从此彻底掌握它

【大师必备】最全的数字 IC 设计经典书籍电子版下载

你与数字后端大神的差距在这里,快来瞧瞧!

数字后端实现时 congestion 比较严重,你 hold 得住吗?

时钟树综合(clock tree synthesis)基础篇

【福利】数字 IC 后端各种 Userguide 下载

好了,今天的码字就到这里了,原创不容易,喜欢的可以帮忙转发和赞赏,你的转发和赞赏是我不断更新文章的动力。小编在此先谢过!与此同时,吾爱 IC 社区(52-ic.com)也正式上线了。吾爱 IC 社区(52-ic.com)是一个专业交流和分享数字 IC 设计与实现技术与经验的 IC 社区。如果大家在学习和工作中有碰到技术问题,欢迎在微信公众号给小编留言或者添加以下几种联系方式进行提问交流。

打赏的朋友,请长按下方二维码,识别小程序进行打赏,欢迎砸钱过来!小编晚饭能不能加个鸡腿,全靠它了,呵呵!

作者微信:

https://mp.weixin.qq.com/s/AoEtH7Xplip5lklIUTK4Yw

深度解析Create_clock与Create_generated_clock的区别相关推荐

  1. 万字长文|Hashtable源码深度解析以及与HashMap的区别

    基于JDK1.8对Java中的Hashtable集合的源码进行了深度解析,包括各种方法.扩容机制.哈希算法.遍历方法等方法的底层实现,最后给出了Hashtable和HashMap的详细对比以及使用建议 ...

  2. LoRa 深度解析LoRa和LoRaWAN的区别

    1.总体介绍 查看全文 http://www.taodudu.cc/news/show-6836959.html 相关文章: [五一创作]LoRaWAN简介 我的世界java版怎么用结构方块_结构方块 ...

  3. #深度解析# SSR,MSE,RMSE,MAE、SSR、SST、R-squared、Adjusted R-squared误差的区别

    文章目录 概述 1. SSE 2. MSE 3. RMSE 4. MAE 5. R-squared 6. Adjusted R-squared 7 对比 MAE.MSE.RMSE.R-square.A ...

  4. IO(BIO),NIO,AIO的深度解析和区别

    IO(BIO),NIO,AIO的深度解析和区别    IO    概念: Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  5. [转帖]深度解析区块链POW和POS的区别

    深度解析区块链POW和POS的区别 Proof of Work 还有Proof of Stake之前理解程了 state ... 股权的意思 还有 delegated proof of Stake 能 ...

  6. 深度解析数据分析、大数据工程师和数据科学家的区别

    数据越来越多的影响并塑造着那些我们每天都要交互的系统.不管是你使用Siri,google搜索,还是浏览facebook的好友动态,你都在消费者数据分析的结果.我们赋予了数据如此大的转变的能力,也难怪近 ...

  7. Kafka深度解析(如何在producer中指定partition)(转)

    原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...

  8. 深度解析iPhone Category用法

    深度解析iPhone Category用法是本文要介绍的内容,在开发3.0的iPhone静态库的时候,遇到了一些问题  .尽管我在应用程序链接的选项里头使用-ObjC的选项,我的程序在iPhone上运 ...

  9. 预训练模型:BERT深度解析《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

    目录 1. 背景 2. 什么是 Bert 及原理? 3. 论文内容<BERT: Pre-training of Deep Bidirectional Transformers for Langu ...

最新文章

  1. 上接[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用
  2. 一道暴力枚举题Win32版本示例
  3. 解决FusionCharts联动的中文乱码.
  4. 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换(转载)
  5. 6_python基础—循环
  6. Json字符串转map集合
  7. 高校计算机实验室管理制度,高校计算机实验室管理论文
  8. (转)实现AI中LOD优化技术
  9. C语言 · 图形输出
  10. Python读取PDF文档并翻译
  11. Vmware虚拟机桥接模式设置
  12. ssget 用法详解
  13. oracle索引如何提高效率,ORACLE用索引提高效率
  14. 新手学编程的常见困惑
  15. 计算机散热 测试,散热拷机实测_笔记本评测-中关村在线
  16. 【原创】Kinect for windows SDK 入门学习资源合辑
  17. vue.jsv-html,关于vue.js v-bind 的一些理解和思考,vue.jsv-bind
  18. 机器学习(三):一文读懂线性判别分析(LDA)
  19. Anaconda自带python,在cmd中输入python提示不是内部命令或外部命令
  20. 稀缺物种CP聚会:谁说我们死了?

热门文章

  1. 招生目录自相矛盾?双一流宁波大学计算机学硕改考408
  2. 企业邮箱购买指南:分享如何购买适合企业的企业邮箱
  3. BZOJ1969: [Ahoi2005]LANE 航线规划
  4. STM32】 DMA原理,步骤超细详解,一文看懂DMA
  5. Cisco Packet Tracer思科模拟器中路由器的广域网HDLC封装
  6. c# 彩色图片变为黑白图片
  7. 律师状告百度竞价排名注水 百度首度回应
  8. ZigBee无线传感器的网络协议栈
  9. AWS EFS 吞吐量利用率Throughput utilization (%)达到100%触发报警原因分析
  10. android 帧动画倒播,C4D中动力学动画如何实现倒放