DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1356|回复: 0
打印 上一主题 下一主题

[待整理] 基于逻辑组的快速宏布局方法

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 17:31:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. 介绍

一般来说,逻辑块级设计平面布局的主要工作就是宏布局。传统上,我们初始宏布局可以之前平面布局模式为基础;布局时我们应考虑到 IO 连接,需要先了解宏与 IO 间逻辑关系,然后再将宏设置于相关 IO 的旁边;我们倾向于将宏设置于边界周围;我们想要将名称模式相似的宏设置在一起;我们会先运行布局(fix_cell)功能,然后再基于关键时序路径或拥塞来调整宏布局,而且我们还可以通过显示往返宏的飞线来观察宏和 STD(标准)单元的布局是否合理。

对于传统平面布局方法,我们可能要花很长时间来了解我们的设计,可能要与前端设计师进行探讨,可能要通过多次物理布局迭代来完成时序收敛。对于宏数量巨大的设计来说,这可是项非常恐怖的工作。现在我们有了一种基于逻辑组的新平面布局方法,它可更快速有效地完成平面布局工作。这个流程共分为 3 个步骤:

1) 同时进行宏和 STD 单元布局(粗布局,“run place cluster”);
2) 划分逻辑组(针对宏和 STD 单元同时进行);
3) 增量布局,调整逻辑组形状和位置。

2. 粗布局(Coarse placement)

我们可将整个布局工作(fix_cell)分为 2 个步骤:

1) 粗布局:执行设计的初始布局;
2) 基于粗布局的增量优化。

步骤 1)是取得好布局结果的关键点,我们的一切讨论都将围绕“粗布局”展开。

在 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”粗布局结果。

下图显示了设计案例 D1 的“place cluster”结果(图 1):

我们推荐的完整命令为:“run place cluster $m –effort high –macro_style overlapping”。由于允许宏重叠,因此我们可更轻松地划分宏组;若未加入选项“-ignore_io”,那么系统会默认为考虑 IO 连接;D1 运行时间为 5~10 分钟(60 万个单元级电路,“place global”所需时间约为它的 2~4 倍)。

粗布局的最重要考量点不是时序和拥塞,而是线长(图 2)。

对于左边布局模式,它是先分组为 (A, B, C, D)和(E, F, G),然后再进行布局;对于右边布局模式(基于布局的线长),布局器会将相互间连接多的单元设置在一起((A, B, C, E)和(D, F, G)),这样所得总线长最短。我们不难看出右边布局模式中横跨这两组的飞线要少于左边布局模式,这种模式用于解决拥塞问题也很不错。因此我们应像布局器一样划分逻辑组以取得可预测的布局结果。

3. 划分逻辑组

划分逻辑组原理有:

1) 同时对宏以及与其连接的逻辑进行分组。就我们所知,一个宏可能有许多输入/输出(I/O)引脚,与其所连接的逻辑间交流也很频繁,宏的位置对逻辑的布局有很大影响,因此我们应将宏和逻辑分在一组里,同时不应有直接连接宏的飞线横跨不同的逻辑组

2) 跨不同组的飞线应尽可能少。换句话来说,如果你看到许多跨两个组的飞线,那么这两个组应分在一组里。
如图 3 所示,多数飞线是位于“暗绿色”组旁边。

对于那些已在 RTL 中进行了很好层次化划分的简单设计,我们可利用 Talus 层次浏览器来划分逻辑组。
以 D1 为例,层次命名模式为“AAA/BBB/CCC_1/…”。我们可轻松地将 D1 分为 3 个逻辑组,然后再进行宏布局。具体实现过程如下(图 4):

我们可进行更深层的层次树(hierarchy tree)合并以取得更详细的组划分(图 5):

对于一些名称模式不如此友好的设计,我们不能从层次浏览器中获得清晰的组信息。那么我们应采用下列额外选项来改善我们的“粗布局”:“run place cluster $m –effort high –macro_style overlapping –max_util 1”。
max_util 默认值为 0.6。由于 max_util 值越低,分散于可用区域上组群就越分散;因此我们将“max_util”值设为“1”,如此一来这个组群将更为集中,逻辑组的划分也更容易得多。
以另一项设计 D2 为例。

图 6 显示了“max_util”= 0.6(默认值)的结果。我们不难发现它将所有 STD 单元散布于整个芯片上。

  
当我们设置 max_util = 1(图 7)时,这个组群的布局将更为集中。芯片中有许多空白区,布局器可更灵活地完成这个组群的布局。同时,我们不难看出这个“黄色”组和“粉色”组的形状比之前好多了。不过,我们发现“绿色”组和“红色”组仍被一些宏给分隔开。我们应使用更积极方法来解决这个问题:我们可将这些宏堆栈在一起并固定,然后再进行“run place cluster“(它不会触及已固定单元)(图 8)。

[url=http://www.diybcq.com/data/11-04/20755214100437/1302776356_80c42be9.jpg][/url]
现在“绿色”组和“红色”组形状看起来好多了,这证明了它们是真正的逻辑组,应被设置在一起。

4. 调整逻辑组形状和位置

当我们有了清楚的逻辑组划分时,我们可先将宏设置于“粗布局”初始位置的旁边;然后再固定那些宏并运行“place cluster”。布局器将只进行这一次的 STD 单元布局。根据布局结果,我们将尝试通过更改宏位置来调整逻辑组形状和位置,特别是对于时序关键逻辑组来说更是如此。判断好的逻辑组形状的标准有:

1) 类似“馅饼 (pie)”的布局;
2) 没有其它逻辑组 STD 单元逻辑侵入馅饼型布局中;
3) 在馅饼型布局旁边没有大型宏。

“时序关键组”是指有大量时序违规端点(触发器)占绝大部分总时序违规的组,而不是指有几个时序违规端点且可能具有最差负余量(worst negative slack)的组。一般来说,这些路径的起点也在这组中;它们有很深的逻辑层,且这个起点还可能有高扇出终点(FFS)。据我们的组划分原理,要想最大程度降低跨组的飞线数量,这些起点和终点也应分在一组里。然后我们应将这组布局为类似“馅饼”的形状,这样才可使得旁边逻辑单元位置更紧凑,还可最大程度地降低路径延时(插入的缓冲区越少,占用面积也就越小)。

以另一项设计 D3 为例(图 9)。

“暗绿色”组是时序关键组,在左边平面布局图中被布局为“倒 T 字型”形状。在右边平面布局图中,我们调整宏布局将这个组布局调整为“馅饼型”形状,这样的时序将会好得多。

有时为了清理出些空间以取得好的关键组形状,我们可能需要将其它非关键组移出相关区域。对此我们能做的一件事就是调整宏位置。当你将宏移出时,与这个宏相连接的逻辑也将紧随其后移出。事实上,它们是同一组,因此我们可通过移动宏来调整逻辑组的位置和形状。

以下是一个先进的应用例子(图 10)。

A 组和 B 组紧密连接在一起,A 组中有个宏。而我们想要将 B 组从芯片左下角移到芯片右边。虽然在 B 组中没有宏,但我们可移动 A 组中的那个宏,到时 A 组就会将 B 组拉到右边。有时我们并不能将所有宏设置于边界周围,如:有大量宏占用了芯片大量面积,或者边界引脚密度非常高且边界附近设置宏可能导致严重拥塞问题。事实上,我们是可将宏散布于整个芯片上,当然要以一种合理方式:
如图 11 所示,我们将 “粉色”组的一些宏放置在组边界,从而尽可能地减少横跨这些宏的飞线,同时不过多地影响“粉色”组及其它组的形状。你可假设每个组都是较低层分区,而且我们只沿着分区边界来放置宏。

就我们所知,如果我们将一个宏设置在逻辑组中心位置,那么这组中会有许多横跨这个宏的飞线,如左图所示,有垂直的也有水平的。甚至更糟糕的是,这个宏将占用“好”位置,使得这个逻辑组中 STD 单元的布局不仅不紧凑,而且还添加了额外的绕障路径延时(detour path delay)。当我们将这个宏设置在组边界时,如右图所示,由于很少有横跨不同组的飞线,因此将只在垂直方向会有横跨这个宏的飞线,水平方向则没有;而且它对 B 组中 STD 单元布局影响更小;当然所付出的代价就是 B 组的那个宏会入侵到 A 组空间中。因此你应先做出选择,选择哪个组有较高优先权。


所有这些调整试验均可通过“place cluster”命来快速轻松地得以应用。你可以先移动并固定一些宏(“place cluster”并不触及已固定单元),然后再运行粗布局来观察这个组的形状和位置是如何变化的、哪些看起来像“大陆漂移”。由于无需运行完整 fix_cell 试验,它将节省大量时间。

5. 总结

通过“run place cluster”快速实现的基于逻辑组的宏布局是处理我们常规平面布局工作的一种快速有效方法。总线长、布线拥塞、面积和时序(WNS/TNS)这些目标与好的宏布局不再存在冲突。

我们可在开始时使用“place cluster”来进行大部分试验,在结尾时使用“place global”来取得更精确布局结果。
就我们看来,一个设计就像是一座房子:逻辑组是不同房间(卧室、厨房、客厅…),我们希望这些房间能拥有很好的格局划分和规则的形状;每个房间都有其单独功能,当我们在客厅招待大量客人时,客人不能太经常地走到我们的卧室或厨房(最大程度降低十字切割);宏是房间里的家具,我们通常应将家具靠墙放置,这样我们就不会妨碍我们走动;我们不应将它们放置在靠窗户位置(高引脚密度),因为这样的话阳光就被它们给挡住了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-29 10:07 , 耗时 0.093299 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表