哈哈小说
第 7 卷 · 造芯 · 第 134 章 · 48 段 · 1690 字

布线

第一百三十四章 布线

十一月十四日,周五,许静远在白板上写了四个字:第二轮完成。

第二轮布局优化的结果比第一轮好了一些,但改善幅度在缩小——颜天磊问她,「是不是已经到了一个极限?」

「大致是,」许静远说,「布局有一个理论上限,取决于设计本身的结构,到了某一个点之后,继续优化的收益就不大了。现在这个结果,三条临界路径的 slack 分别是 1.03ns、0.82ns、0.79ns,已经可以进入布线了。」

「0.79 那条,」颜天磊说,「还有余量?」

「进布线之前有 0.79,但布线会增加延迟,」许静远说,「这就是接下来的问题——布线完成之后能剩多少,才是真正的答案。」


布线在周一开始。

许静远把布线约束文件整理好,设定层叠结构(8层金属层,1到3层走水平线,4到6层走垂直线,7到8层走电源网络),然后提交给 Innovus 的自动布线引擎。

「需要多久?」孟思远问。

「第一轮大概跑两天,」许静远说,「布线是最费时间的,要处理的连线比布局复杂得多。」

孟思远点了点头,没有多问。B207 里的节奏开始变了——布局优化的时候,许静远和颜天磊之间有大量的对话,需要前端的人不断补充约束信息;但布线开始之后,进入的是一段等待,工具在自己跑,人插不太进去手。

插图

贺志明这几天回到了他的 SRAM 文档里,在整理 8T 单元的性能数据和量产工艺适配性报告。颜天磊把时间用在了更新设计文档和准备物理验证的测试环境。孟思远开始写更多边界测试用例,「布线完了要做后仿真,」他说,「后仿真要用真实的寄生参数,测试用例要比前仿真更全。」


第一轮布线结果在周三下午出来。

许静远把报告打开,扫了一遍,「整体通过,」她说,「但有一个地方有拥塞。」

她打开 Innovus 的拥塞分析视图,芯片平面上出现了一个红色区域——大约在仲裁模块和优先级队列交汇的那个角落,密度图上那块区域是深红色,周围是橙色和黄色。

「拥塞,」颜天磊走过来看,「是什么意思?」

「就是走线太密了,」许静远说,「布线工具在那个区域里放不下这么多连线——两个模块靠得很近,两边的信号都要从那里穿过去,但可用的走线通道数量有限,工具绕不过去,有些线找不到路径。」

「没有找到路径的线,现在怎样?」

「会报 DRC 违例,」许静远说,「设计规则检查会把那些断路标出来——现在一共 23 处。」

「23,」颜天磊说,「这是严重问题吗?」

「23 个断路不能流片,」许静远说,「需要解决。有两种方法。」

插图

她在白板上列了两条:

方法一:调整布局,把仲裁模块或优先级队列其中一个稍微移开,增加拥塞区域的空间,让走线通道够用。

方法二:优化仲裁模块和优先级队列之间的接口逻辑,减少那个区域的连线数量——信号少了,拥塞自然就缓解了。

「方法一,」颜天磊说,「把布局重新改,会不会影响我们之前改善的那几条 slack?」

「可能会,」许静远说,「稍微移动之后需要重跑时序分析,看 slack 有没有变差。但拥塞区域不大,移动幅度不需要很大,估计影响不超过 0.05ns。」

「方法二,减少连线数量,」颜天磊说,「我要改 RTL 代码?」

「需要,」许静远说,「看能不能把仲裁模块读优先级队列的接口简化——如果那个接口信号少几条,拥塞可能就解开了。」

颜天磊想了一会儿,「接口目前是 16 位的状态向量,」他说,「如果压缩到 8 位,信号数量就减半,但需要重新设计编码方案,可能要改一两天。」

「改接口的话,」许静远说,「我要重新布局,重新布线——等于重来一遍。」

插图

「那相当于两个方法都要花时间,」贺志明在旁边说,「但方法一影响范围更小。」

「对,」许静远说,「方法一改的只是布局坐标,不动 RTL,验证起来也简单。」


方宇明下午四点来 B207,许静远把情况讲了一遍,白板上的两条方案还在。

方宇明看了一会儿,「时间上呢?」他说,「两个方法分别要多久?」

「方法一,」许静远说,「两天内可以改好,重新布线再等两天,再出结果——一共四天。」

「方法二,」颜天磊接着说,「改接口一两天,许工重新布局重新布线四天,一共五到六天。」

「结果的风险呢?」

「方法一风险低,」许静远说,「拥塞是布局问题导致的,改布局直接解决,RTL 没有动,逻辑没有变化,再跑一遍仿真验证就行。方法二改了逻辑,需要重跑功能仿真,确认接口改了之后功能没有问题,风险稍微大一些。」

方宇明看了颜天磊一眼,「你怎么看?」

颜天磊想了一下,「我倾向于方法一,」他说,「接口那块我设计的时候考虑过,16 位是有原因的——压缩到 8 位需要重新想编码,如果编码出问题,功能仿真可能没抓到,到后仿真才发现,那才是大问题。」

插图

方宇明点头,「方法一,」他说,「明天开始。」


那天晚上,陆衍在回去的路上发消息给豆包:「布线出结果了,整体通过,但有一块地方走线太密了,23 处断路,需要调整布局来解决。」

豆包回:「路由拥塞(routing congestion)是物理后端很常见的问题——设计工程师在做布局的时候通常会预留走线密度的裕量,但两个模块靠得太近、信号太集中的时候,就会出现局部拥塞。23 处断路不算很多,调整布局能解决就是最稳的方案。」

陆衍:「方宇明选了调整布局,不动逻辑。」

豆包:「颜天磊的判断是对的——接口是功能逻辑的一部分,不到迫不得已不应该为了物理约束去改它,那是在用物理问题倒推逻辑设计,顺序反了。物理约束应该在布局上解决。」

陆衍:「但如果布局解决不了呢?」

豆包:「那才考虑改接口,或者更极端的——重新分割模块。但那是最后手段。先看布局。」

陆衍走进地铁站,把手机收起来,想到一件事:从仲裁模块的 RTL 代码,到 SRAM 单元的晶体管参数,到时钟树的偏斜,到现在走线通道里的路由拥塞,砺火一号的每一层都在把问题往下传,传到物理的最后一层,才能知道某一个早期的设计决定意味着什么。

23 处断路在等待明天的解决方案。