哈哈小说
第 7 卷 · 造芯 · 第 128 章 · 52 段 · 1640 字

单元

第一百二十八章 单元

Cadence 的授权比预计晚了三天,但最终还是到了。

方宇明把授权邮件转发给贺志明,附了一句话:「可以开了。」

贺志明那天下午没有说什么,把工作站上的 Virtuoso 环境配好,测了几个基本操作,确认工具可以运行,然后发给方宇明一条消息:「正常。明天开始做单元。」


孟思远第二天早上来得最早,贺志明已经在了。

屏幕上是 Cadence Virtuoso 的界面,和 Design Compiler 很不一样——DC 的界面是纯文字的,综合脚本跑完出一份报告;Virtuoso 是图形化的,屏幕上有真实的晶体管符号,有连线,像是在画一张真实的电路图,但每一条线都有精确的物理坐标。

「这就是 SRAM 的单元,」贺志明看了孟思远一眼,「你见过没有?」

「学校里讲过六管单元,」孟思远说,「六个 MOS 管,两个反相器交叉耦合,两边各一个访问管。」

「对,」贺志明说,「这就是所谓的 6T。」

他在屏幕上打开了一个已经画好的示意图——六个晶体管,标注了各自的功能,连线清晰。

「但我们不用 6T,」贺志明说。

「为什么?」孟思远问。

插图

贺志明从椅子上转过来,「你知道 SRAM 读操作最大的问题是什么吗?」

孟思远想了一下,「扰动,」他说,「读操作会把存储节点的电位往下拉。」

「对,」贺志明说,「6T 的存储单元,读和写共用同一对位线——读的时候访问管打开,存储节点直接连到位线,存储节点的电压会被拉低,这就是读扰动。如果工艺角不好,温度偏高,这个扰动可能直接把原来存的值翻掉。」

「那 8T 是怎么解决的?」

「8T 单元加了一个独立的读端口,」贺志明说,「专门为读操作设计了一对读字线和读位线,存储节点在读的时候不会直接暴露——读路径走的是一个专门的读缓冲管,和存储节点之间有隔离。」

他在纸上画了两个简图,一个六管,一个八管,「代价是面积,8T 单元比 6T 大百分之二十五到三十,」他说,「但我们的场景对读稳定性要求很高——KV-cache 命中的时候每次推理都要读同一批数据,读操作比写操作多几十倍,这时候用 8T 是合理的选择。」

孟思远把贺志明的草图拍了一张,「那写路径呢?」

「写路径还是走原来的位线,」贺志明说,「写操作本来就是要改存储节点的,不需要隔离。8T 只在读端口上做了隔离,写操作的逻辑和 6T 是一样的。」


颜天磊上午十点才到,看到贺志明已经在 Virtuoso 里开始画具体的晶体管版图了。

他站在贺志明身后看了一会儿,「你从哪里开始?」

插图

「先定位单元的核心参数,」贺志明说,「目标工艺是 28nm,SRAM 位单元的目标面积我先估一下——一般来说 28nm 节点的 6T SRAM 位单元面积大概在零点一到零点一五平方微米,我们用 8T,加上读端口的面积,估计是零点一八到零点二二平方微米。」

「这个数字有什么用?」颜天磊问。

「有这个数字,才能算整块 SRAM 的总面积,」贺志明说,「我们的 KV-cache 缓存目标是存储容量多少,每个位单元多大,就知道整块 SRAM 需要多少面积,从而判断在芯片上能不能放下。」

颜天磊在旁边的椅子上坐下来,「那你现在在画什么?」

「在做位单元的晶体管尺寸设计,」贺志明说,「8T 里的每个 MOS 管,宽度和长度不是随便选的,要根据目标的稳定噪声裕量(SNM)来设计——SNM 越大,读操作越不容易出错。」

他指着屏幕上的一个晶体管参数,「这里是驱动管,宽度我设定的是 0.09 微米,就是 90nm,是工艺最小线宽 28nm 的三倍多,」他说,「如果做得太小,驱动电流不够,读操作的速度就慢;如果做得太大,面积就浪费了——找这个平衡点是设计的核心。」

颜天磊听着,没有插话。

他意识到,贺志明在做的事情和他做的 RTL 是完全不同的层级。颜天磊写的是 Verilog,描述的是逻辑行为,是「如果这个信号是高,那个寄存器就更新」;贺志明画的是每一个晶体管,考虑的是电流、电压、面积、热量,是物理世界里的东西。

同一块芯片,两个人在两个不同的世界里工作,最后需要对接在一起。


下午,贺志明把第一个 8T 位单元的草图发给了整个团队。

「这是初始版本,」他在消息里写,「参数还没有最优化,但基本结构定了:8T,分离读端口,驱动管宽 90nm,负载管宽 45nm,访问管宽 60nm。接下来要做仿真验证 SNM,然后根据结果调整参数。」

插图

方宇明的回复只有一句话:「好,进度合理。」

颜天磊的回复是:「那个负载管是什么?」

贺志明回了一张手写草图的照片,上面标注了每个管的功能——存储节点两侧的两个 PMOS 叫负载管,两个 NMOS 叫驱动管,各有一个访问管连接到位线。

颜天磊看了一会儿,「我去把设计文档的 SRAM 章节更新了,」他说,「你这个基本结构写进去。」

「写进去,」贺志明说,「用自己的语言写,不要复制我的参数表,」他停了一下,「你理解这些参数为什么是这些数字,然后用自己的话写,这样下次你碰到类似的问题,才知道从哪里想。」

颜天磊坐下来,打开文档,在 SRAM 那一章新建了一个节:「位单元设计(8T)」。

他写了大概一个小时,写完之后把文档发给贺志明,「你看一下,有没有写错的。」

贺志明大概十分钟后回复:「有一处。负载管不是用来限制电流的,是用来恢复存储节点电位的——读操作结束之后,负载管把节点拉回高电平,这是它的功能。改一下。」

颜天磊改了,重新发过去。

「对了,」贺志明回,「就这么理解。」

插图

那天晚上,陆衍走过 B207,看到贺志明还在,屏幕上是 Virtuoso 的界面,密密麻麻的晶体管符号和连线。

他敲了敲门,「还在?」

「SRAM 单元的参数扫描,」贺志明说,「把驱动管的宽度从 80nm 扫到 120nm,看 SNM 的变化曲线,找最优点,」他说,「大概还要一个小时。」

「明天有事找你,」陆衍说,「现在不打扰。」

贺志明点了一下头,把目光转回屏幕。

陆衍走的时候,B207 里只有一台显示器的光,贺志明的背影在光里面是深色的,很静。

陆衍发了一条消息给豆包:「贺志明在做 SRAM 单元设计,今天开始。」

豆包回:「物理设计的节奏和 RTL 不一样——它不是一次改完的,是反复扫参数的。这个可能要几周。」

陆衍:「他说自己知道。」

豆包:「那就好。」