物理设计

布线(routing)

布局(placement)把每个单元都停放到硅片上各自的位置之后,布线就是真正把它们连起来、画出金属导线的那一步——这些物理互连负责把每个信号从驱动它的引脚送到它要喂给的那些引脚。你可以想象一座城市,所有楼都已经盖好了,现在你得把连接它们的每一条路、每一根管子都铺出来,只不过你不能光在地面这一层铺:一块芯片把许多层金属一层层叠在一起(往往十几层起步),为了不让导线互相撞车,相邻的两层走的是交替的优先方向——这一层基本横着走,上一层基本竖着走,就像一座多层立交,每一层只准朝一个方向开。最底下、最薄的那几层负责又短又密的本地短跳;越往上、越厚的层则承担横贯整颗芯片的长途运输和供电。

布线之所以分两趟来做,是因为想一口气全解出来根本没指望。第一趟是全局布线(global routing):它把整块裸片切成一张由矩形小格子组成的粗网格,为每条线网大致决定它该穿过哪些格子、以及有多少根导线想要跨过每一道格子边界——这是一份容量规划的草图,在还没画出任何一根真导线之前,就先标出哪里挤了太多导线、抢着用太小的空间(也就是拥塞 congestion)。第二趟是详细布线(detailed routing):它落实到精确的几何形状,把每条线网吸附到每一层上具体的布线轨道和合法的线段上,遵守晶圆厂的线宽和间距规则,好让结果能通过 DRC。每当一根导线需要从一层换到另一层——比如从一个横向层往上换到一个纵向层——布线器就会落下一个过孔(via),那是一个穿过绝缘层的小小导电塞子,把上下两层缝在一起;一个长信号在它的旅途中可能要爬上好几层再下来,途中穿过一整摞过孔。

过孔和金属本身都不是免费的:每一个都会带来电阻和电容,所以一条被逼到薄薄的下层、或者被塞着穿过许多过孔的路径就会变慢,这正是为什么布线能成就、也能毁掉布局和时钟树综合(clock-tree synthesis)早先搭好的时序。布线完成之后,工具会把这些画出来的导线的真实电阻和电容(RC)抽取出来,并基于实际几何形状重新跑一遍静态时序分析(STA)——这是你的时序第一次反映的是物理导线、而不再是估算值——随后再做 DRC 和 LVS 检查,然后版图才一路走向流片(tapeout)。

horizontal-track capacity per g-cell ≈ tile_width / wire_pitch

全局布线会拿每条线网的需求去比对这个每格子的轨道预算,从而在画出任何真导线之前就预测出拥塞。

一条实战经验:如果一个设计在全局布线时干干净净,到了详细布线却在几个热点处留下顽固的短路或间距违例,真正的修法通常在上游——把那里的布局密度放松一点,或者在那里加上布线阻挡(routing blockage)——因为硬逼详细布线器把导线挤进一个拥塞的区域,几乎总会让你赔上时序,要么留下没法修的 DRC。

又称
detailed routingglobal routingwire routinginterconnect routing详细布线全局布线繞線