第一百三十二章 时钟树
十一月二日,周一,许静远第一次把自己的东西带进了 B207。
一台笔记本,一个外接屏幕,一条很长的数据线,一个小风扇。她把外接屏幕架起来,调了一下高度,确认线都接好,在一张椅子上坐下,打开 Cadence Innovus,没有跟任何人多说话。
颜天磊看了一眼,「许工,」他说,「需要什么就说。」
「现在不需要,」许静远说,「等我做完第一轮评估再说。」
物理后端的第一件事是时钟树综合,简称 CTS。
陆衍当时知道这个名字,但不知道里面做的是什么。他后来问了颜天磊,颜天磊给他解释了一遍:
芯片上有几千、几万个触发器,它们都需要一个时钟信号来保持同步——同一个时钟沿来了,所有触发器一起工作。但时钟信号从一个源头出发,要分发到芯片上所有的触发器,这条路要经过导线和缓冲器,不同路径长短不一样,信号到达的时间就会有差异,这个差异就是时钟偏斜。
偏斜越小,前端时序分析的结果越准确,留给逻辑工作的时间余量也越大。CTS 的目标,就是通过设计一个好的时钟分发网络,把偏斜控制在目标范围内。
「我们估算的是 100 皮秒,」颜天磊说,「但估算是估算,实际跑出来的数字要许工做完 CTS 才知道。」
「她在做的就是这件事?」陆衍说。
「她在布时钟树,」颜天磊说,「让时钟信号从源头出发,走到每一个触发器的路径长度尽量接近,这样偏斜就小。」
许静远的第一轮 CTS 在第三天下午跑完了。

她没有主动通知,颜天磊是从她打开报告的动作里看出来的,站起来走过去,「结果出来了?」
「出来了,」许静远说,「你来看一下。」
颜天磊去看她屏幕上的 timing report,找到时钟偏斜那一行:actual skew: 68ps。
「68,」颜天磊说,「比 100 要好。」
「比估算好,」许静远说,「这个设计的触发器分布比较均匀,没有极端的扎堆情况,所以时钟树比较好布。68 皮秒的实际偏斜,意味着你们前端时序的余量实际上比 SDC 里设的 100 皮秒多了 32 皮秒。」
颜天磊把这个换算了一下:「DISPATCH\_MISS 那条路径的 slack 从 0.98 变成 1.01?」
「理论上是,」许静远说,「不过先不要用这个数字做决策,后面还有布线延迟要加进去,整体 slack 可能还会变——现在只是 CTS 完成,还没做布线。」
「但方向是好的,」颜天磊说。
「方向是好的,」许静远说。
但她接着说:「有个问题,」她说,「你来看那三条临界路径的单元分布。」
她打开 Innovus 的 floor plan 视图,把芯片的平面展开,三条临界路径上的单元标成了红色,蓝色是它们之间的连线。

「DISPATCH\_MISS 那条路,」她说,「仲裁模块和 SRAM 接口之间的连线,你看这里。」
陆衍从旁边看过去,屏幕上是一张芯片平面图,红色的小块散落在不同的区域,蓝色的连线连接着它们,有几条明显比较长,横穿了大半个芯片。
「这条线太长了,」许静远说,「仲裁模块在左侧,SRAM 接口在右侧,中间要走很长一段路,连线延迟会很高。」
「这会影响 slack?」颜天磊说。
「连线延迟是布线延迟的主要来源,」许静远说,「一条长连线可以吃掉几百皮秒的 slack,而你们这条路径原本就是临界的。」
「需要把它们挪近?」颜天磊说。
「需要重新规划布局,」许静远说,「仲裁模块和 SRAM 接口在平面上应该靠近,那条连线缩短之后,布线延迟能减少很多。」
她停了一下,「但这是布局优化,不是小事——不是移几个单元这么简单,Innovus 做布局规划的时候有很多约束,你改了这里可能影响别处,需要重新跑一轮 placement,然后再看结果。」
方宇明来 B207 的时候是晚上七点多。
许静远把 CTS 结果和布局问题都跟他说了,他在旁边的椅子上坐下来,听完,「重新规划布局,」他说,「你估计要多久?」
「两周,」许静远说,「第一轮 placement 优化一周,跑结果分析,看哪里还有问题,再做第二轮。」

「两周,」方宇明重复了一下,「现在是十一月,两周是十五号——然后是布线?」
「布线估计三到四周,」许静远说,「然后是 DRC 和 LVS 的物理验证,确认版图没有设计规则违例,才能交给台积电的设计团队做最终验证。」
方宇明在心里算了一下,「如果顺利,」他说,「年底之前可以完成物理后端?」
「如果顺利,」许静远说,「没有大的问题,年底应该可以——但顺利是假设,实际上每轮都可能有问题需要处理。」
「做过两个量产项目,」方宇明说,「你遇到过最大的问题是什么?」
许静远想了一下,「时钟树之后布线发现某条路径的实际延迟远超估算,」她说,「需要重新做 placement,然后重新做 CTS,然后重新布线——返工了一次,多花了三周。」
「那次是什么原因?」
「布局的时候,某个大型组合逻辑块没有被放在合理的区域,,导致周围的连线非常拥挤,绕线绕不过去,只能走远路,」她说,「所以我这次在做 placement 优化之前,先把那三条临界路径的位置理清楚,不要让同样的事情发生。」
方宇明点了点头,「需要我们这边配合什么?」
「有时候我会需要问颜天磊关于具体模块功能的问题,」许静远说,「知道功能逻辑之后,我做布局规划的时候能判断哪些单元之间需要靠近,哪些没那么关键。」
「颜天磊,」方宇明转向颜天磊,「配合许工。」

「明白,」颜天磊说。
那天陆衍发了一条消息给豆包:「许静远说 CTS 跑出来实际偏斜是 68 皮秒,比估算的 100 好,但三条临界路径的布局要优化。」
豆包回:「68 皮秒对 28nm 工艺来说是不错的数字,说明时钟树设计得比较均匀。布局优化是物理后端的核心工作,这部分往往比前端设计更花时间,因为每一条连线的物理路径都要考虑。」
陆衍:「许静远说如果顺利年底能完成物理后端。」
豆包:「物理后端之后还需要交给台积电做流片前的验证——GDS 文件交出去到流片完成,大概还要几个月。」
陆衍:「那芯片真正拿到手要什么时候?」
豆包:「如果一切顺利,28nm 工艺的 MPW(多项目晶圆)批次,从 GDS 交付到芯片回来大约是四到六个月,加上物理后端的时间,差不多是明年年中前后。」
陆衍把手机放下,B207 里许静远的两块屏幕还亮着,她在看 Innovus 里的布局图,那些红色的小块和蓝色的连线在屏幕上安静地等待下一轮的调整。
时钟树的第一轮已经做完了。剩下的是布局,是布线,是验证,是很多还没有遇到的问题。
但实际偏斜是 68 皮秒,比预想的好。