ET创芯网论坛(EETOP)

找回密码

  登录   注册  

搜帖子
汽车电子资料大全(下载奖励300信元)
楼主: qfliuyang

[原创] 手把手教你独立做出《CMOS集成电路后端设计与实战》里的Lab

[复制链接]
发表于 2015-10-21 22:06:31 | 显示全部楼层
回复 1# qfliuyang
正在做研究综合的部分,感觉脚本框架都挺像的,细节稍稍不同,继续学习ing~多谢好文,持续关注中~!
回复 支持 反对

使用道具 举报

发表于 2015-10-21 23:15:45 | 显示全部楼层
好东西,书已买,就是没时间看,后面仔细研究下!!
回复 支持 反对

使用道具 举报

发表于 2015-10-22 16:59:45 | 显示全部楼层
支持前辈,继续更新
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-22 20:57:21 | 显示全部楼层
1022第六更
今天的东西超简单,placement

首先还是按照我们之前一贯的方式打开pre_PHASE的milkyway cell

24.jpg


不过从placement开始,icc会对设计进行优化,换句话说就是会改变设计,因此正确的指导icc在正确的方向上进行优化就是成功的关键

首先要对工具在优化中的一些行为进行设置

25.jpg


按照synopsys reference methodology的方法,把设置放在一些独立的文件中。这些文件大家都能很轻易的找到,关于里面的设置,自己去man,多实践、看效果。前两个看名字很好理解,至于第三个为什么把cts的setting在placement阶段就读进来,这一点ces的icc student guide上有说明。

光有设置也没有用,我们在优化的时候最关键的控制手段还是sdc。这里虽然大家用的都是0.18um的工艺,但是还是推荐大家用MMMC或者MCMM。相关内容在DC或者ICC的student guide以及user guide中都有详细的讲解。这里很多设置有点绕口令的感觉,想清楚、理解了之后再下手。

下面就是一个简单的只有一个scenario的设置

26.jpg


理解了MCMM之后,对scenario的概念就应该理解了,我们没有做DFT,所以只有一个func mode,placement 阶段我们只重点关注setup(为啥?)

除了这些之外,还有我们之前在综合时用的sdc里面通过clock uncertainty留的margin我们可以逐步的放开。比如这里我们先去掉时钟频率上的margin。

然后就是group path的设置,在sdc比较复杂的设计中,合理设置path group可以大大降低不必要的runtime

27.jpg


然后我们就可以做place opt了

28.jpg


至于后面的psynopt是干嘛的,这里ces的lab里面也有说过。place opt的选项一定要仔细看一遍,关于spg的相关设置help *spg*

place opt完了之后看一下timing。报timing很简单了,现在还没有clock tree,report_timing和report_constraint就能搞定,一定看一下这两个命令的各个选项,关于timing report怎么看synopsys有一个专门的userguide来介绍。还是把sold下下来找一下吧,sold是啥?你们知道该怎么做了吧。

placement完成之后看一下utilization,用什么命令呢?自己去help

然后还有两个任务要完成,一是吧spare cell插好,二是把tie cell连上,help一下能轻松找到命令与使用方法

由于我们的设计约的并不紧,所以placement完之后的timing应该没什么大问题,cell的density和不会太离谱。这里做完placement之后我们可以看一下congestion map和cell density map,怎么看ces的lab guide上都有介绍

除了上面提到的资料,别忘了刘峰老师的书哦

总感觉没什么好写的,因为很多概念、设置、命令、流程很多文档中都讲的很透彻,有了线索以后,用help和man能得到更多更详细的信息,只需要花时间认真消化一下这些内容就行了。这些痛苦的过程将使你受益匪浅
回复 支持 反对

使用道具 举报

发表于 2015-10-22 22:34:35 | 显示全部楼层
哈哈,终于来干货了
回复 支持 反对

使用道具 举报

发表于 2015-10-22 22:35:43 | 显示全部楼层
楼主,请问综合也需要我们自己做吗
回复 支持 反对

使用道具 举报

发表于 2015-10-24 10:20:40 | 显示全部楼层
好文,等更新完毕了,出个pdf文档,经典实战教程!
回复 支持 反对

使用道具 举报

发表于 2015-10-24 13:55:31 | 显示全部楼层
机不可失,来学学
回复 支持 反对

使用道具 举报

发表于 2015-10-24 14:10:41 | 显示全部楼层
我感觉出这个帖子是深深地植根于eetop里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-24 21:43:37 | 显示全部楼层
1024第七更
刚刚写了一个小时,然后找了些suiter听了一会儿,听着听着电脑就死机了,eetop没有个自动保存回帖内容,好蛋疼

重新开始。。。

首先跟大家道个歉,昨天晚上去听一个大牛的讲座,回来的时候很晚了,没时间也没力气更新了,就暂停了一天。

在听讲座的路上还在想,像这样流水账似得记录每个步骤也不是个事,怎么才能在最后做一个有质量的总结和提高呢?想着想着刘峰老师的微信就来了,简直是心电感应啊。。。
反正后面会更精彩的,不过满攻出细活,近期自己这边项目还有其他事业开始忙了,做lab的时间也会越来越少,但是肯定会坚持下去

废话不多说,我们开始今天的话题:CTS

我当年自学到CTS的时候总觉得这个步骤听恐怖的,听着就吓人。确实,CTS是后面timing optimize的基础,CTS做的不好后面肯定一塌糊涂

首先还是按照我们一贯的做法吧design library load进来并打开,顺便把settings apply上

cts1.jpg


然后把之前遗留的scenario和sdc干掉

cts2.jpg


现在我们需要新的scenario和sdc,这里问题就出来了,我们在CTS时要怎么设置scenario呢?

首先我们来看看CTS到底干了些什么

简单的说,CTS就是构建一个高质量的clock tree,但是不能一口气吃个大胖子,CTS也得一步一步来。

synopsys ces中推荐我们做CTS时分三个步骤:CTS、CTO和clock route。这里名字不是很恰当,确切的说是三个命令
clock_opt -only_cts -no_clock_route
clock_opt -only_psyn -no_clock_route
route_zrt_group -all_clock_nets

工具做CTS的步骤大致是这样的
1、compile一个load balance,符合DRC要求(cap、fanout、transition)的clock tree
2、将第一步中的clock根据用户指定的target(skew、insertion delay等)进行optimize
3、基于第二步中的clock tree进行timing optimize
4、针对clock tree进行route

其中,
clock_opt -only_cts -no_clock_route对应1、2;clock_opt -only_psyn -no_clock_route对应3;route_zrt_group -all_clock_nets对应4

那么CTS如何处理MMMC呢?synopsys的solution是MM-CTS和MM-CTO。MM-CTS在compile clock tree时考虑所有的mode,MM-CTO在optimize时考虑所有的mode和corner。而这些mode和corner通过各scenario来指定,每个scenario中的set_scenario_options可以进行更灵活的控制。

所以,我们需要几个scenario?

从timing优化的角度来看,我们只需要在clock_opt -only_psyn -no_clock_route时load进来worst和best两个corner就行了;
从MM-CTS和MM-CTO的角度来看,我们在clock_opt -only_cts -no_clock_route时就应该提供所有的mode和corner信息。注意哦,clock_opt -only_cts -no_clock_route虽然是-only_cts,但是这里不仅仅做了CTS,还做了CTO哦。我猜这里synopsys给的MM-CTS和MM-CTO是想在timing optimize之前未雨绸缪,不过optimize clock tree的时候处理skew、delay无非就是改变一下cell的驱动能力,加一些buffer,各corner下的timing情况应该不用考虑。

那我们是不是在-only_cts的时候只需要一个worst的corner呢?指定两个scenario会不会有更好的效果?这是一个好玩的话题,顺便也可以看一下icc是否真的能未雨绸缪,这里大家可以实验一下。

为了保险,这里我们在一开始就把所有的mode和corner load进来
我们来看一下cts时mmmc的脚本

cts3.jpg


这里我们有一个best一个worst

由于我们使用了ocv,所以还要有derate的设置,我们用两个简单的proc来方便我们后面的设置

cts4.jpg


然后是具体的设置

cts5.jpg


另一半该怎么写应该没问题了吧

不过这里一个小问题,也许会让初学者摸不着头脑,best的scenario里面的CTS corner是max还是min呢?也许有人不假思索的说我best case肯定是min啊!

非也非也,mim、max这一对儿冤家在synopsys的工具中不少出现,但是意义缺不仅相同,大家在用的时候一定擦亮双眼

小伙伴们,别忘了,咱们可是用的ocv,而不是min-max!

使用min-max分析时
max(setup)的分析用的是max(slow)的operating condiction来分析launch和capture path;min(hold)的分析用的是min(fast)的operating condition来分析launch和capture path。不过前提是这两个operating condition都有定义才行,别忘了

使用ocv分析时
worst的corner下,我们设上5%的derate,就是-early 0.95
此时:
setup的分析中,launch path是max,而capture用的是derate min
hold的分析中,launch path用的是derate min,而capture path是max

best的corner下,我们设上10%的derate,就是-late 1.10
此时:
setup的分析中,launch path是derate max,而capture path用的是max
hold的分析中,launch path用的是min,而capture path是derate min


初学者看到这里一定晕掉了,这些min、max都是什么玩意啊
下面做下解释:

worst的corner下,我们设上5%的derate,就是-early 0.95
此时:
setup的分析中,launch path是max,而capture用的是derate min

前面的max是operating condition中的max_library,就是slow的library;后面的min是operating condition中的min_library,由于没有指定min_library,所以这里还是slow的library!derate后乘了0.95的系数,使得setup的要求更难满足

hold的分析中,launch path用的是derate min,而capture path是max

前面的min是operating condition中的min_library,由于没有设置min_library,实际上是max_library,就是slow的library,乘上0.95的系数,使得hold更难满足;后面的max是operating condition中的max_library,就是slow的library。



晕了吧,这应该算是min-max到ocv的历史遗留问题吧。大家在设置derate时要明确一点,快的corner不能更快,只能变慢;慢的corner不能更慢,只能变快;set_operating_condiction中的max library可以是快的corner,也可以是慢的corner。而operating condition我们只设了max library,所以min是max,derate min是derate max


我这样说以后大家可能觉得更晕。这里一定要搞清楚,多花点时间,磨刀不误砍柴工。

后面就简单了

cts6.jpg


先把ideal的clock tree remove掉
然后set propagate的clock(这里有时会有风险,具体参见student guide,有兴趣的可以研究一下)
然后给每个scenario设好path group

cts7.jpg


后面就简单了!等结果吧

然后我们进入下一阶段:clock tree的timing optimize

cts8.jpg


前面都差不多,注意这里sdc可以放一些margin出来,让timing optimize更轻松一点。所谓放margin就是把clock uncertainty调小一点拉
由于我们cts是就做了两个scenario,所以cto时几乎和之前一样了

cts9.jpg


psynopt可以进行一些优化。这个步骤要跑很长的时间,要有耐心哦

继续clock route!

cts10.jpg


注意,从这一步开始,我们开始读入routing的设置了

cts11.jpg


大家一定要用zroute引擎啊,否则会哭死

哎呀真累啊,大家一定要亲手做一下,每一部完了之后看一下timing,以及通过report_clock_tree看一下clock tree长成了什么样子。

明天是route和route opt,再简单介绍一下DFM,一个很基本的ICC流程就差不多搞定了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2019-12-12 07:31 , Processed in 0.067440 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表