时钟树综合篇(持续更新)

如何Trace时钟结构

我们都知道想要做好时钟树综合,需要事先了解设计的时钟结构,然后才能有时钟树综合的策略,最后写工具认识的约束来guide工具做好时钟树。

那么当你拿到一个design,你应该如何入手呢?

  • 可以从RTL来trace,一般都会有个clock gen的module,直接看这部分即可。

  • 可以利用DC或verdi trace时钟结构。

了解清楚设计的时钟结构后就可以画出整个设计的时钟结构图,这幅图一定要深深刻在脑海里。一方面是它可以帮你理清各种时钟的走向,另外一方面可以高效协助你debug 时钟树质量。

有了时钟结构图后,就可以开始编写时钟约束文件。这个文件主要包含以下内容:

  • create_clock
  • create_generated_clock
  • set_disable_timing_arc
  • set_case_analysis
  • set_clock_sense
  • floating pin (ignore pin,exclude pin,non_stop pin,stop pin等)
  • inter-clock balance

具体命令其实大家不用去背,关键是要搞清楚这些概念,比如每个命令的作用是什么?什么时候用ignore pin?为何要设置clock sense?

那到底是要定义create_clock还是create_generated_clock?它取决于你的timing需要。如果分频点要与后面的reg进行交互,那么generated clock更为恰当。默认情况generated clock会和master clock做balance。

对于使用hierarchical flow的同步设计,做top tree时需要考虑子模块内部的tree。另外对于高频时钟需要格外注意主干时钟路径上的crosstalk,通常需要做shielding处理来最大限度减少其对timing的影响。

对clock做shielding处理,有何利弊?

时钟树综合默认是从时钟树是从root开始长,比如这位星友所说的clock port开始直至该clock domain下的sink。但很多时候由于时钟结构上有很多的mux,即各种时钟切来切去,工具默认做tree可能会把整体的tree做的比较长。

为了让工具做出更好的时钟树质量,往往会采用分段长tree的方法来做,即在mux的输出端定义时钟,而mux的输入端设floating或ignore pin。

但记住cts阶段是不负责做propgated的,这个工作是后续timing优化时要做的。因此,如果CTS阶段将两个原本是同步的分支通过create_clock来做tree,那post-cts后可能会出现比较大的timing violation。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芯动节奏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值