mervin_li的个人空间 https://blog.eetop.cn/1582944 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

<数字后端项目>clock tree平衡法则3---特殊case

热度 2已有 395 次阅读| 2018-5-31 16:43 |个人分类:后端项目经验|系统分类:芯片设计

许久不更新了,感觉生活少了什么似的。埋头苦干,到头来收获了什么?是变强了也变秃了,还是TO一个又一个片子的成就感?仁者见仁智者见智。这近一年来,在诸多项目中耕耘,也挣扎。struggle这个单词挺有意思,奋斗、挣扎。工作占据了几乎全部的日常,到头来我到底是收获了还是失去了?这是就想到一个词,balance,如何能平衡工作与生活?平衡精神与肉体?大概是需要很长的日子去探索。那么在后端设计中,如何实现时钟树的平衡呢?也是一个值得思考的问题。

不管是做事还是做tree,大抵都要先有个目标。好了,不再啰嗦,记录一下项目中的时钟树的调节操作。


  1. 学习时钟结构,了解同步时钟,异步时钟,生成时钟以及分频时钟的结构分布。

  2. 了解子模块的时钟长度

  3. 了解时钟频率,设置相应的target skew

  4. 用工具生成spec,学习spec,根据需要修改spec



以一个简化的例子来记录时钟树的调节。subsystem的core,里面包含一个hard macro。简化时钟为一个主时钟core_clk, 一路下去,分频为一个div_clk, 之后分别驱动hard macro和一堆flip flop。

第一步,按照sdc生成spec,工具自动做tree。结果,reg2macro的hold violation有 -1ns,debug tree发现macro这一路总长1.5ns,flip flop只有500ps。原来是macro内部的clock没有被考虑在balance中。工具只认到macro的cp端。

第二步,反标macro的tree长,设置1ns的insertion delay,让macro这一路比其他的短了1ns来保持总体的平衡。结果,所有的flip flop都长到了1ns,但是macro这一路还是1.5ns。原因是,原始的ff只能长到500ps,macro没办法比他少1ns,只能拉长所有的tree。但是,由于来自同一个主干,垫的buffer都在common path,macro也相应的别垫长了。问题没有解决。

第三步,干预spec,给macro这一路单独建tree,把macro隔离出来。

在macro ck pin前一级找一个buffer,或者自己插一个ck buffer 叫做my_buffer

create_ccopt_clock_tree -name my_macro_tree -source my_buffer/ck

create_ccopt_skew_group -name my_macro_tree -source my_buffer/ck -exclusive_sinks macro/ck

set_ccopt_property target_insertion_delay 0.010 -skew_group my_macro_tree

这个10ps的insertion delay可以根据需要修改。然后给另一对ff也创建类似的group,设target insertion delay 1ns

这样ccopt_design -cts之后,reg2macro的hold的violation基本在10ps左右,可以根据情况调节。


利用恰饭时间,记录一个调tree的小case。


2

点赞

刚表态过的朋友 (2 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 137

    粉丝
  • 58

    好友
  • 152

    获赞
  • 54

    评论
  • 3166

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-4 10:29 , Processed in 0.013367 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部