深度解析Create_clock与Create_generated_clock的区别

深度解析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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值