第一百二十三章 工具
贺志明的第一个要求,在他正式入职的第二天早上就提出来了。
他在 B207 里把 U 盘插进台式机,打开一个 PDF 文档,推到陆衍面前。
「EDA 工具,」他说,「这是清单,你们现在没有这些就没办法做 RTL 实现——或者能做,但没有办法验证,等于做了白费。」
那份清单不长,三个工具:Synopsys VCS 用于仿真验证,Synopsys Design Compiler 用于逻辑综合,Cadence Virtuoso 用于定制 SRAM 单元设计。
「全套商业 EDA?」陆衍说。
「全套,」贺志明说,「我在台积电用了十年,知道哪里能省、哪里不能省。仿真这段省不了,Virtuoso 做 SRAM 单元也省不了,如果用开源的工具凑,时序分析不准,后面流片出来的结果就没有说服力。」
陆衍把那份 PDF 发给方宇明,问了一个问题:「多长时间能拿到。」
方宇明去查了,回来说:「Synopsys 对大陆企业有额外的审查流程,出口合规部门要走一套文件,时间大概是六到八周。Cadence 类似。」

「贺志明提的那个账号经理,」陆衍说,「他还联系得上吗?」
「联系得上,」方宇明说,「但账号经理能做的是帮跑内部流程,时间线压不了,顶多不出错。」
「那就跑,」陆衍说,「今天开始申请,Synopsys 和 Cadence 同时提交,资料准备好,每周跟进一次。」
问题是中间的八周。
颜天磊在黑板上写了三个选项,方宇明和孟思远在旁边看着:
第一,等八周,什么都不做,等工具到位了再开始 RTL 实现。
第二,用开源工具做——Icarus Verilog 做仿真,Yosys 做综合,先推进,等商业工具来了再迁移和校验。

第三,租云端 EDA 服务——有几家云平台提供按时计费的 EDA 工具实例,但数据不能出本地网络,这条路有合规问题,暂时排除。
「第一条,」方宇明说,「等不了。从现在到流片出门,时间窗口本来就紧,八周空在这里不合算。」
「第二条,」贺志明说,「我用过 Icarus 和 Yosys,跑功能仿真够用,但是做时序分析不行——这两个工具不知道时序,只知道逻辑,等于你做的所有工作在工具切换之后都要重新在商业工具里跑一遍,double 了工作量。」
颜天磊把第一条和第三条划掉,「那就第二条,」他说,「功能仿真能跑就先跑,把状态机的逻辑层面搞清楚,等 Synopsys 来了,我自己把仿真迁移一遍。」
他看向贺志明,「时序那段,等工具来了你告诉我哪里要重点过,我到时候不等你,你到时候来查就行。」
贺志明想了一下,「这样做,」他说,「但有一个条件——你写 RTL 的时候,注释里要把每一个状态转换的假设写清楚,包括时序约束你自己的猜测,这样工具来了之后,我看你的注释就知道哪里的验证优先级最高。」
颜天磊拿起笔,在黑板上第二条边上加了一行字:注释优先。
孟思远那天下午就把 Icarus 和 Yosys 的环境搭好了,配在一台专用机器上,文件夹结构按照方宇明定的规范来,RTL 代码放 `rtl/`,仿真测试放 `sim/`,综合脚本放 `syn/`。

颜天磊当天晚上开始写第一份 RTL。
写的是 cache-state-aware 仲裁模块的顶层状态机——这是整个 KV-cache 加速路径里最关键的调度逻辑,贺志明在上周的讨论里已经把架构思路给出来了,现在颜天磊要把那个思路变成能跑的代码。
第一版很短,不到两百行,状态只有四个:`IDLE`,`QUERY_CACHE_STATE`,`DISPATCH_HIT`,`DISPATCH_MISS`。逻辑不复杂,注释比代码还多,每个状态转换旁边都写了一行括号注释,解释当前假设的时序预估。
孟思远在旁边跑了第一次仿真,没有语法错误,波形图出来了,状态转换符合预期。
「没问题,」孟思远说。
「先这一层,」颜天磊说,「DISPATCH_MISS 那个分支还没完,明天再写。」
陆衍那天下午在 B207 外面停了一下,没有进去。

里面,孟思远盯着仿真波形图,贺志明在他旁边看,颜天磊在自己的屏幕前敲代码,方宇明坐在角落,手里拿着昨天打印出来的时序约束文档,在上面做标注。
四个人,各自做各自的事,不用协调,也不用等。
陆衍想了一下,发了一条消息给豆包:「第一份 RTL 在 Icarus 上跑起来了,还没有商业工具,用开源工具先跑。」
豆包回:「进度没有停下来。」
「对,」陆衍说,「进度没有停下来。」
他把手机放进口袋,往走廊另一头走了。EDA 授权的申请已经提交,Synopsys 那边说六到八周,那就等六到八周,中间颜天磊和孟思远不会空着。
这件事他能控制的,已经做了。等待是等待,不是停下来。