先声明几件事,我在大学做科研工作,这次流片主要工作是在 13 年,做的是可自我修复软硬错误的 FPGA 芯片,TSMC 65nm 制程,最终结果是成功的。写这篇回答一想记录下这段经历,若能对同学们有一点点价值,幸甚至哉。我们只做架构、前端设计和配套的 CAD 开发,后端外包给了专业的公司。由于是学生团队,望专家轻拍多赐教。出于保密原因,本文不能涉及敏感信息,以故事、经验和感触为主。
 
【背景】
 
话说我们当时在做一个为期三年的容错性 FPGA 研究。这个研究方向有价值,做的人少,我们又有积累,相对容易出成果。我之前的博士,用了两年时间提出了一种可以自我规避软硬错误的 FPGA 架构,顶会发表了成果,然后顺利毕业。欢送完师兄,才意识到可能我要为他背一个很大的锅 -- 流片。
 
13 年是该项目最后一年,按计划要将之前的成果流片验证,并且必须在 14 年四月前拿到芯片数据结束项目。学术界,不是自己的课题,流片是出力不讨好的。前期成果师兄经发表了,最终总结性成果是 boss 的。耗时耗力,成功了皆大欢喜,一旦搞砸还要背锅。而且这一年也是我博士最后一年,实验论文会议各种焦头烂额。
 
但处于一个技术人员对技术的本能渴望,终于 boss 找我谈流片计划时,欣然接受了。失败也没什么可怕的,我觉得作为一名技术人员,除了自己的无能,不应该恐惧任何事情。从四月学期伊始,带上三个师弟和一匹白马 -- 不好意思没有马 -- 开始了地狱般的流片之旅。
 
【故事正文】
 
所有项目的前期都是阳光明媚,四五月我时常和师弟们在校园的树荫下手握可乐,一边谈风和日丽,一边目光保护文学科的学妹们来来往往。研究室里也欢声笑语常在,我问学弟们 Verilog 写到哪了,他们问我架构定下了吗,我问助教什么制程 die size 多大,然而大家都不知道,互道还早还早,相视一笑哈哈哈。
 
转眼六月,boss 已经决定将后端外包,我们大松了口气。之前有过两次自己 layout 失败的经验。第一次,我们画了几个月手动 layout 了自己的 logic cell,包装成 cell 导入自动 layout 流程,结果到了 deadline 整体 DRC 也没通过,最后只装了几个简单的测试电路,但好在关键数据都顺利测得。另一次和一家知名日企合作,使用了他们实验性的 FeRAM 替代 FPGA 的 SRAM,芯片回来,一个学生测试了半年也没有任何反应。现在回想起那个学生的无数个日夜,在灯光下独自一人尝试和一块石头交谈,依然感慨。学校里自己手动 layout,多是模拟的同学。学校和企业不同,学生来去太快,很难沉淀下 layout 这种要求多年经验的手工艺。所以研究大规模数字电路的学术机构,还是要有自知之明,让专业的人做专业的事。
 
然而此时却发生了个意外,常年为日本学术界鞠躬尽瘁的老朋友富士通半导体,由于不景气和松下半导体部门合并,我们一直使用的 e-Shuttle 制程不能再用了。这让我们震惊又难过,富士通半导体一直通过 VDEC,以很低的价格为学术界提供 MPW 流片服务。我们一度觉得那年的流片计划要取消了。然而平时憨态可掬啥事不管的大 boss 罕见地展示了他的力量,火速联系、谈妥了后端设计公司,通过后端公司搞定了 TSMC 的合作合同。这个过程异常艰难,预算资金、跨国合作、各种合同条款保密协议、多方斡旋,说短也差不多用了两个多月的时间。而 TSMC 的 standard library 到我们手,已经是八月。
 
这时重要的时间点就定下来了,研究期间限制 14 年三月必须拿到芯片,后端公司推荐了 14 年 1 月的 TSMC 流片计划,后端要求三个月设计时间,我们必须 10 月初交付前端设计文件,留给我们的只有仅仅两个月了。
 
好在三个学弟基础模块的 Verilog 已写好大半,两人负责 FPGA Array,一人负责 Controller。只要我用 TSMC 的 standard library 重新跑一边架构探索,再估算出预定的 die size 下 FPGA 的大小,就可以一气呵成完成代码。这个过程非常顺利,用我博士课题中开发的面向 ASIC 的 FPGA IP CAD Flow,在十几台服务器中跑了一周 Benchmark,在几十种自制 FPGA Architecture 找到了性能最佳的架构和尺寸。Flow 的执行和数据回收、分析全程自动化,一切按设计运行,完美,心里给自己点了个赞。然而,我并不知道下面等待我的九月和十月将是我人生中最黑暗的两个月。
 
八月末,师弟们的 FPGA 整体组装已经初步完成,进入测试期。九月初我还参加了 FPL2013,领域顶级会议,学术精英,在波尔图的酒庄品着红酒吹着牛。然而回来后各种问题在测试期爆发了,一片混沌。
 
下层模块的测试都还顺利,但我们必须要在交付后端前,做整片 cover 所有功能的完整的仿真。这就需要我尽快完成 CAD 的最后一个功能,为这次的 FPGA 编写 bitstream 生成器。FPGA 部、I/O 部,所有都是可编程的,20 多万比特,要根据 LUT 的逻辑和 FPGA Routing 的结果,自动生成,一个都不可以差。并且,我们这款 FPGA 有自动纠错功能,指令模式多达十几种,针对每个命令都要有相应的 bitstream。这部分工作量正常少说也要两三个月,但我们总共也没那么多时间了。
 
这时候还开始增加需求了!因为预计到样片很有可能因为各种原因无法工作,为了把风险降到最低,boss 要求利用多余引脚插入信号后门。一要可以随时查看内部寄存器的状态,二要可以通过多个点注入 FPGA 的 configuration bit,保证即使一部分出了问题,依然有办法让剩下的部分工作。于是师弟们开始无日无夜的加电路代码,我无日无夜地搞这 20 多万个 configuration bit,仿真。
 
仿真是噩梦,一次快速优化仿真要一个小时,但只能观测到提前指定的信号。一次完整的慢仿真要三个多小时。软件开发出身的我,习惯了一边 debug 一边改程序,按下 run 马上就可以定位问题所在。而我们的 FPGA 仿真一次三小时,如果我没算错一天不睡觉也只有八次机会而已。所以想想开发成本是和测试周期长度成正比的,高成本的医学生物研究一个周期几周到几个月,更高成本的农业更是要几个月到几年。面对这种困难,我采取的策略是执行前更认真地审查代码,尽量靠 code review 排除 bug。出错了也不是急于翻代码,而是根据现象在脑中思索产生 bug 的所有可能性。再就是同时跑多组测试节省时间。那时候时间比什么都宝贵,不分昼夜每三个小时看一次仿真结果,分析,改程序,再跑。时间管理和硬件设计一样,并行、流水线、达芬奇睡眠法。
 
还有一个噩梦是 data sheet。因为之前忙于开发,大家并没有准备 data sheet。然而这次是外包后端,除了 Verilog 代码、约束,自然需要详细的 data sheet 给人查阅。我们在九月底忙得不可开交的时候,还同时写了大概有 1000 页纸的各部分电路说明、功能说明、约束说明。
 
一个九月基本没休息,好在最后大家拼命把该做的事都完成了。第一次仿真成功的时候,大家感动得不轻。一个 Verilog 测试电路,通过 ODIN II 综合、我们修改过的 ABC mapping、TV-Pack 打包、VPR 布局,最后用我开发的 EasyRouter 布线并生成 bitstream,下载到自己的 FPGA 中成功仿真出结果。我只想谢谢开源社区,谢谢师弟们,你们的工作太了不起了。
 
十月,如期和后端公司派来的工程师见面了。对方相当专业、谈吐干练,在我们眼里就像从天而降前来营救的海豹突击队员。当我们搬出 1000 多页的说明书,他们也惊呆了说没见过这仗势。我猜他们心里应该是万马奔腾的,你们给 RTL 和 constrain 就好了,谁要管这些。实际上专家们也有些轻敌了,他们并没预想到 layout FPGA 的困难。
 
大家知道 timing 是数字设计的一切,每个时钟的 setup、hold time,关键 path 的 propagation delay 都要准确约束。然而 FPGA 在 configuration 之前,逻辑是不确定的,里面大量存在的 timing loop 足以让任何一个 ASIC CAD 工具报错甚至 crash。加之我们还要求一些主要的 routing channel 和 logic path 尽量延迟一致。这都是其他类型芯片的 Layout 不存在的困难。通常我们自己仿真,会先加载 benchmark 的 bitstream,自然就不会存在 timing loop 了。而做后端不能只为一个 benchmark 做约束,不能使用这一方式。最后我和对方的工程师用了大量精力,一起编写了几十个场景的约束,他们只要满足这些约束就可以。如果存在我们没考虑到的约束而导致流片失败,对方是不用负责任的。其实后端外包公司通常都不需要担心负什么责任,因为一旦失败,大多学术机构是没能力去追查责任在谁的。
 
中间还有一个插曲很惊险。后端公司起初告知我们可以使用的 die size,忘了减掉 I/O Pad 的面积,而这些 Pad 几乎占了五分之一的可用面积。当他们发现这一问题,也有点慌张了,发邮件来问可不可以改设计,让 FPGA Array 小一点。我们也不可能有精力重做,很坚决的否定了。后来对方还是展现了强悍的专业风范,使用了 CUP(circuit under pad),在模块缝隙中手动 layout 等绝技,把我们的 FPGA 塞了进去。后端公司的工程师们给我印象非常深刻,不知道他们会不会吐槽后悔接了这个苦差,也不知道他们是不是熬了很多个日夜。专业人士就是这样,接活,做完。看起来轻松,他们只是不会让你看见他们的辛苦。这世界不存在举手之劳这回事。
 
完全交付后端到 14 年三月收样片,封装,我们还设计了样片和 VLSI 测试平台中间的一块 adapter board。我抽空完成了博士论文和答辩。和几乎所有答主提到的一样,紧张感肯定有的。但我看的比较开,从技术角度,我已经学到了很多。但最重要的,是我三月就能拿到学位,东窗事发可以随时跑路。好在一切顺利,我们的芯片最终正常工作。测试数据成功返回的瞬间,我是整个人瘫软在了椅子上,灵魂出窍,想起了 NHK 纪录片《电子立国自述转》中一位半导体前辈说的一段话:
 
“每次芯片 tapeout 的两三个月,心里是非常不安的,睡不好。随时都在想会不会有问题,哪里哪里对不对。芯片回来,第一次按 RESET,心里的紧张到了极点,RESET 松开,就是区别天堂和地狱的一瞬间。逻辑分析仪数字混乱,心情瞬间落入地狱,没人愿意说话。如果一切正常,人就像到了天堂,就像整个世界都在围绕自己旋转,就像我就是世界之王。”