在 Talus 中,有两个不同“粗布局”命令——“run place cluster”和“run place global”,这两个命令可基于逻辑组(群)进行粗布局。“run place cluster”可同时完成宏和 STD 单元的布局,而“run place global”则会在考虑拥塞情况的前提下进行 STD 单元布局。就我们所知,“fix_cell”一般是使用“place global”来完成粗布局。根据我们的测试,若宏的位置相同,那么“place global”和“place cluster”布局结果也将十分接近,因此我们可基于“place cluster”结果来预测“fix_cell”粗布局结果。
A 组和 B 组紧密连接在一起,A 组中有个宏。而我们想要将 B 组从芯片左下角移到芯片右边。虽然在 B 组中没有宏,但我们可移动 A 组中的那个宏,到时 A 组就会将 B 组拉到右边。有时我们并不能将所有宏设置于边界周围,如:有大量宏占用了芯片大量面积,或者边界引脚密度非常高且边界附近设置宏可能导致严重拥塞问题。事实上,我们是可将宏散布于整个芯片上,当然要以一种合理方式:
如图 11 所示,我们将 “粉色”组的一些宏放置在组边界,从而尽可能地减少横跨这些宏的飞线,同时不过多地影响“粉色”组及其它组的形状。你可假设每个组都是较低层分区,而且我们只沿着分区边界来放置宏。
就我们所知,如果我们将一个宏设置在逻辑组中心位置,那么这组中会有许多横跨这个宏的飞线,如左图所示,有垂直的也有水平的。甚至更糟糕的是,这个宏将占用“好”位置,使得这个逻辑组中 STD 单元的布局不仅不紧凑,而且还添加了额外的绕障路径延时(detour path delay)。当我们将这个宏设置在组边界时,如右图所示,由于很少有横跨不同组的飞线,因此将只在垂直方向会有横跨这个宏的飞线,水平方向则没有;而且它对 B 组中 STD 单元布局影响更小;当然所付出的代价就是 B 组的那个宏会入侵到 A 组空间中。因此你应先做出选择,选择哪个组有较高优先权。