APR,全称为auto placement & route。目前已经基本成为芯片后端设计的代名词了,因为在芯片后端设计中,可以说placement and route是至关重要的两步,并且在EDA tool如此发达的今天,靠人工一个个手摆cell,再去绕线是不现实的。因此使用工具可以说是现代芯片设计的必须的事情,所以我们经常说做芯片后端,有的时候就是指代做APR,或者说做芯片物理设计等等。当然需要明确的是,芯片后端所涵盖的内容不仅仅是APR,只是APR是其中一个重要的部分了。
可能在早期,我们还会说P&R,placement&route。但现在,几乎没有谁可以绕过auto,也就是利用tool。所以渐渐的大家的称呼也就变成APR了。那么,它的具体含义是什么呢?从名字就可以看出,中文就是摆放和绕线,实际上,APR大致可以分为4个步骤:布局floorplan、单元摆放placement、时钟树综合CTS(clock tree synthesis)、绕线route。下面我就进行一下简单的介绍。
Floorplan,布局规划。要知道,我们在进行任何项目的时候,都要首先对所要做的工作有一个大致的蓝图规划,比如建高楼需要先想这个楼要在哪建,建几层,建多高等等,芯片的规划也不例外。我们首先要确定芯片的面积,确定core和die的尺寸,io的位置,bump的位置,先把macro ip什么的摆好。Floorplan有的时候也可以说包含了powerplan,我们一般在这一步就要画好PG,确定芯片的电压域,保证PG和macro连接正常。Floorplan是至关重要的一步,它深刻影响了之后的芯片性能会是什么样子。这里介绍的比较简单,以后我可能会专门各个stage都来写一篇。
Placement,单元摆放。这一步我们特指标准单元的摆放,io单元和macro等都是在floorplan阶段摆放完成的。我们在导入netlist和各个cell的物理库文件后,不论是icc2还是innovus,初始状态这些cell全部是叠在一起的,都在一个位置。而placement最重要的任务,就是把这些cell摆好,不能有重叠,不能有legalization的问题,不能有FE DRC。这就很类似于一堆散乱的乐高积木,我们要把它一个个的在地上铺好。在place的时候,并不仅仅要求把cell铺开就行了,这个时候就要考虑cell之间的绕线了,尽量把联系比较紧密的cell放在相近的位置啊,但又不能放的过于密集导致density过高出现congestion的问题啦,power能不能供上电啦等等,需要考虑的因素有很多。而它的核心任务就是摆放这些标准单元。
CTS,时钟树综合。我们的芯片设计中包括组合逻辑和时序逻辑,时序逻辑器件包括flip-flop和latch。所有的时序逻辑器件都需要接时钟信号,时钟信号就像芯片的心脏一样,芯片的运转就在它的跳动中产生。因此,我们的net就可以分为一般的信号线signal net和时钟线clock net,时钟网络上的cell可以成为clock cell。显然,我们要对芯片的timing有约束要求,那么保证一个良好时钟是非常重要的,因此clock net的优先级要比signal net的优先级高,所以我们要在route之前先做CTS。而CTS也不单单指clock net的绕线,它要生成一个clock tree,就需要插入一些buffer、inverter,其最基本的目的,就是想要保证时钟信号到达每个时序逻辑器件的时间都相同,也就是clock skew要等于0。先不深入太多了,总之CTS就是来生成一个时钟网络并且把clock net绕好。
Route,绕线。特指signal net的绕线。这一步需要绕的线就多如牛毛,需要避开前面的PG和时钟线,不能有open、short,不能有drc,在能绕通的情况下要考虑timing、power等。要知道,有的时候可能是绕不通的,可能是从floorplan开始这里的绕线资源就很紧张,或者placement摆了太多cell在附近,这样就必须回到floorplan或者placement重新来过,这样就很费时间。要知道现在的电脑来跑一个芯片,每个stage可能要十几个小时,所以在每个stage跑完适时进行check是很有必要的。有的时候可以绕通,但是会产生很长的detour,这也是我们不愿看到的。现在的芯片越来越复杂,之前的教材可能写的绕线层有五六层,现在的芯片多的绕线可以达到十几层了。如何在这些纷繁复杂的十几层里找到千万根线想要绕的位置,实在是一件非常难的事,更别说要附带考虑那么多其他的优化因素了。而这一切都已经必须由EDA工具帮我们完成,借助现代计算机的强大性能,还有不断优化的算法,我们就可以得到相对比较好的route结果。其实我一直很佩服那些EDA工具,总是想知道他们具体的算法是什么,不过这就属于非常机密的东西了。
Route结束也不代表APR结束了,一般还会做插filler的动作,后面就是交给signoff了。好了,这样就非常非常简略讲了一下APR要做的事,可能文中出现了一些不懂得名词,还有一些概念,以后我也会写文章慢慢一个个讲的。希望对大家有所帮助。
微信公众号D:伟酱的芯片后端之路