物理设计

布局(placement)

布局就是让每一个标准单元最终都安家落户的步骤。在布局规划(floorplan)划出核心区、铺好一行行单元行(横向的窄带,高度恰好等于一个单元的高度,两侧边缘走着电源和地的供电轨)之后,布局负责决定每个单元具体落在哪个 (x,y) 位置上。你可以把它想象成给几百万名观众在体育场里安排座位:不能随手乱放。那些一直在“说话”的单元(比如一个触发器直接驱动旁边的门)希望坐在相邻的座位上,这样连接它们的导线才够短、够快;要是把它们撒到芯片两头,光是这段线延迟就足以把时序搞垮。所以工具不只是在码箱子,它是在求解一个巨大的优化问题,要在线长、时序以及布线器到场后每个区域会有多拥挤之间反复权衡。

布局分几个阶段进行。全局布局(global placement)是粗略的第一遍:一个解析式引擎(你可以把单元之间的连接想象成一根根弹簧,让整盘棋自然松弛到一种低能量的铺开状态)为每个单元找到一个大致理想的位置,同时避开时序紧张的路径和拥塞的热点。在这个阶段,单元是允许互相重叠、也允许稍微偏离合法网格的——这只是草图,还不是最终的座位表。接下来详细布局(detailed placement)在局部把这张草图打磨干净:交换相邻单元、微调滑动位置、必要时换大尺寸单元或插缓冲器,把最后那几皮秒的时序也抠回来。最后由合法化(legalization)把每个单元都对齐落到合法的布局位点(site)上——也就是行所允许的那些离散网格位置——使任意两个单元都不再重叠,每个单元都整齐地落在行间距上,为接下来的时钟树综合(CTS)和布线做好准备。

密度在这里很关键:布局器会盯着利用率(utilization),也就是你的单元实际占掉了核心区面积的多少。压得太高,就没地方留给布线器还得穿进来的那些导线了,拥塞会瞬间爆发;留得太低,又白白浪费了花钱买来的硅片面积。一个好的布局会悄悄把下游的一切都铺垫到位——而一个潦草的布局,则会把一摊烂账甩给布线和时序收敛,让它们可能再也理不清。

utilization = total cell area / available core area (e.g. 0.70 means 70% full, leaving ~30% for routing)

布局所追求的利用率,要既能放下所有单元,又能留出足够的空白区域,让布线器把导线穿进来而不至于拥塞。

布局只负责摆放逻辑单元,时钟线和信号线都留到后面再处理;尤其是时钟网络,是之后由时钟树综合(CTS)搭建的,而不是在布局阶段建成的。

又称
cell placementglobal placementdetailed placementlegalization单元布局详细布局合法化單元佈局詳細佈局合法化