后端设计流程
- 格式:doc
- 大小:67.00 KB
- 文档页数:12
后端设计流程ASIC/SoC后端设计作业流程剖析Toshiba(美国) 秦晓凌Trident(上海) 潘中平关键词place route DSM megacell clock_tree STA OPT ECO引言众所周知,ASIC产品是从用硬件描述语言(verilog HDL,VHDL)开始进行数字逻辑电路设计的,经过相关的仿真、综合出门级网表、验证直至完成电路布局布线并优化,最终经流片成功形成的芯片产品。
随着中国经济的持续稳定地增长,国内生产厂家对IC需求增长势头强劲与自身设计IC能力薄弱的突出矛盾已经被国家和企业认识。
为了缓解这一矛盾并更多地实现IC自主设计,近两年国内陆续出现了一些著名的传统通信系统厂商设立的IC设计队伍,以及归国留学人员领头创办的创业型IC设计公司,他们大多数有相当强的前端设计能力,但在IC后端设计领域的实践经验还较欠缺。
在完成前端逻辑设计综合出门级网表后,真正能做好后端设计的公司还不多,有的则通过委托设计服务的方式完成后端布局布线及流片。
本文作者有多年从事覆盖前后端IC设计全流程并有每年几次成功流片数百万门级深亚微米SoC的经验,并担任IC设计的项目管理工作,对国外大公司的设计流程十分熟悉,并愿意就积累的经验与国内同行分享交流,以利于国内IC设计水平的提高。
本文着重介绍国内设计公司薄弱的后端设计,介绍其流程并对在设计过程中的关键步骤进行一些讨论。
传统的后端设计流程指的是从门级网表(gate level netlist)开始的,根据设计要求的不同,后端流程可以分为扁平流程(flat flow)和层次化流程(hierarchy flow)两种,在深亚微米DSM(deep sub-micron)领域,又增加了布局加逻辑合成的前后端合二为一的扁平流程(flat flow)和分层流程(hierarchy flow)。
我们首先介绍传统的两种后端流程。
前后端合一的流程将作为另一个专题在以后讨论。
一、扁平流程(Flat flow)介绍最简单的后端设计是扁平(flat)流程,一般四百万门以下的设计均可使用这一流程。
芯片设计的最高境界是设计完成后一次性投片(Tape Out)成功,这一成功必须建立在正确的前端电路逻辑设计和科学合理及高效的后端布局布线上,要想获得最后的成功,设计阶段就来不得带有半点的侥幸心态,否则就算在电路功能上满足设计要求,在参数性能上的任何失误也是导致返工的重要因素。
因此,后端设计阶段很难保证一遍成功,走几个来回是常事,要期望在最终投片时一次成功,就需要在设计阶段多下工夫。
我们不妨给这些大循环起个名字,第一轮叫试验(trial),第二轮叫首次签收(first Sign Off), 第三轮叫最后签收(final Sign Off),每轮包括的前后端设计主要任务和结果如表一所示。
不同的循环应该有不同的侧重点,为了节省时间,这些大循环还应该尽可能安排前后端设计同步进行。
Trial:80%模块设计完成数据库准备,流程确认,流程运行中问题的解决,主要设计数据(芯片大小,总体布局,大体时序)的可行性确认First Sign Off:100%设计,DFT,I/O完成数据库已确定,时序收敛基本完成,没有大的拥塞(congestion)Final Sign Off:最后细小的功能修改,时序收敛所有时序和布局布线问题解决我们在简单介绍每一步工作的同时,着重介绍应该注意的问题,遇到的困难和解决的方法。
A. 质量检查(Quality check)在流程的开始,至少有三样东西需要前端工程师提供:门级网表(gate level netlist),时序约束(timing constraint)和时序分析报告(timing analysis report)。
其中网表文件是最重要的,拿到它之后,先不要急于将它放到后端EDA软件里去,而是要先检查一下它的质量,确认已消除哪怕是细小的错误/瑕疵,比如检查有无以下情况:文法错误,连接短路,无任何连接的net,无驱动的输入引脚(pin),assign语句,wire 类型以外的net,使用了由"\"开始的特别字符,数据总线的写法,名字的长度等,不同的厂家和软件对此都会有一些限制,为了后续工作的方便,建议定义一套比较严格的网表书写规则。
例如:不许有"无任何连接的net"和"无驱动的输入pin",无assign语句,只允许线(wire)型net,所有名字只许使用大小写英文字母,数字和下划线,头一个文字是英文字母,长度小于1024,模块之间的调用一律使用explicit格式。
这些要求看似繁琐,但是只要事先同前端工程师说明,在做逻辑合成之前设定好几个参数就可以了,并不增加他们的工作量。
其次要看设计是否需要DFT(可测试性),ATPG(自动测试格式生成),如果要的话,检查是否符合扫描链(scan chain)和存储器内建自测(memBist:Memory BIST)的设计要求。
然后要仔细阅读拿到的时序约束(timing constrain)文件,检查时序设定是否完整、合理。
最后要流览时序分析报告,如果有setup violation(setup 冲突)存在的话,一般不允许大于时钟周期的10%,hold violation暂时可以不解决,留到布线后再去除。
B. I/O单元布置(I/O Place)按顺序摆放I/O PAD本不是难事,但是如果考虑到内部各模块的位置、电源PAD 的个数和种类时,有时排放I/O PAD也要仔细斟酌才行。
不同种类的信号PAD需要不同种类的电源,有些相同电压的电源也是不能共用的,特别是模拟信号及其电源本身都需要与其它信号隔离,电源PAD的个数计算要兼顾芯片封装的最低要求和芯片内部的功耗。
近两年常用的一种叫倒装片(flip chip)封装,其核心电路的供电不象传统的芯片由四周的电源PAD供电,而是由芯片中部的电源PAD直接从顶部灌到芯片中去,这种设计大大降低了对四周电源PAD的个数要求。
在试验轮(trial)时如果无法确定PAD个数、种类和位置,可以暂时跳过这步,并同时无视与PAD直接相连net的时序。
C. 兆单元布置(Megacell Place)ADC、DAC、PLL、memory这类部件属于兆单元或称巨集(megacell),所有的后端EDA布局软件都有自动放置兆单元(megacell)的功能,但是很少听说厂家建议用户去相信自动放置后的结果,基本上来讲,在有五个以上兆单元(megacell)的设计中,这一步属于手工劳动。
排放前要同前端工程师沟通,了解运算数据的流向、各大模块间的关系和位置,依此来决定兆单元(megacell)的大体位置。
在逐一放置各个兆单元(megacell)时,要考虑其引脚(pin)的位置、方向、数量及相互间的对应关系,因为兆单元(megacell)常常会禁止几层金属布线层的使用,所以要注意给穿过它的信号线留有足够的空间,特别是兆单元(megacell)之间的距离。
如果兆单元(megacell)本身没有电源环(power ring),则要在它四周留下更大的空间以备加环。
环的宽度由厂商提供的公式,依速度、数据变化率求得。
有些软件可以将相邻的几个兆单元(megacell)合在一起做个环以节省空间,此时公共环的宽度应该是各个单独环宽度中最大者。
常见的布局规划(floor plan)方法是兆单元(megacell)放在四周,标准单元(standard cell)放在中间。
留给标准单(standard cell)的空间形状以方形为好,应尽量避免采用预留L形,U形或几个分离的标准单元(standard cell)空间方法。
但是这也不可以一概而言,它和设计本身关系密切,要依据情况分析而定。
兆单元(megacell)的排放极其重要,它可以决定后期工作的难易,建议在此多花工夫,找专家商量一下,力求精益求精。
D. 行通道生成(Row Generation)行通道(Row)是为放标准单元(standard cell)用的,其整体形状已经被兆单元(megacell)的位置大致决定,行通道(row)和兆单元(megacell)之间要留有一定的空间,以利于兆单元(megacell)的信号连线。
在兆单元(megacell)之间做少许行通道(row),以备连线过长,加缓冲器接力,或生成时钟树时使用。
E. 电源布线(Power Routing)电源布线前的功耗估算不是一件简单的事情,过于保守则功耗过大,芯片封装无法承受,过于乐观则有供电不足而影响速度的危险,到底什么才是合适的功耗只有在芯片做成之后才知道。
建议在管脚和面积允许的范围之内多留一些富裕。
电源布线时依各个模块的功耗不同,布线密度并不相同。
布线完了,应该用IR drop 检验整体的供电情况。
在传统的通过四周管脚供电、标准单元(standard cell)放在中央的设计中,标准单元(standard cell)集中的row的四周应该考虑加一圈电源环,环的宽度按如下方法计算:环的宽度= 所有row的电源线宽度之和/ 四周直接供电电源条数之和E. 布局(Placement)布局主要指的是如何合理地放置标准单元(standard cell),我们并不希望软件过多地移动已经放好的兆单元(megacell)。
布局可以简单地根据cell的连接进行,也可以根据时序要求来做,还可以以拥塞程度(congestion)为主进行。
随着芯片速度的提高,越来越多的人首先选择按时序要求来布局,这时,先前入手的时序约束(timing constrain)就派上用场了。
在布局开始之前,有人喜欢做一些分组(group)或分区(region),其好处是可以告诉布局软件一个大致的摆放范围,但是有一点要记住,这种作法会同所给的时序要求发生矛盾,特别是对边界的连接单元(cell)。
所以建议在定义分组(group)或分区(region)时,尽量宽松一些,并允许一定百分比的单元(cell)放在分组(group)或分区(region)之外,这样做的结果同所谓的"变形虫"(amoeba)布局有同样的效果。
如果使用有时序要求的布局,而布局用的时序引擎(timing engine)与布线或计算延迟用的引擎(engine)不一样,则要注意引擎(engine)之间的计算误差,它们有时会有10倍之差。
如何有效地减小误差是一件技术性很强的工作,因为这常常涉及到数据库中最底层参数的变动。
不同的软件多少都会留几个相关的参数用来调整误差。
要谨慎使用两三年前出售的布局软件中的再优化功能,先作个小的验证后再决定是否使用。
如果有扫描链(scan chain),可以考虑在此时按照单元(cell)的物理位置做一次重新排序,以减少不必要的连线长度。