哈哈小说
第 7 卷 · 造芯 · 第 125 章 · 33 段 · 1350 字

双端口

第一百二十五章 双端口

贺志明发来文件的时候是周三下午,比他说的一周提前了两天。

文件夹里是一个 Verilog 行为模型,文件名叫 `sram_dp_model_v1.v`,`dp` 是 dual-port 的缩写,旁边附了一个 README,两页,写清楚了接口定义、时序参数和使用约束。

颜天磊把 README 过了一遍,「你这个模型,读端口和写端口是独立的,还是说两个读端口共享一套时序控制?」他发消息问贺志明。

「两个读端口独立,时序上是对齐的,用同一个时钟,但读请求互相不干扰,」贺志明回,「对你的仲裁逻辑来说,两个请求同时进来可以同时处理,不需要排队。」

颜天磊把模型替换进去,重新跑了压力测试。


孟思远把这次测试的统计数据整理成了那张贺志明要求的表——每个状态的平均停留时钟数,以及全程的状态分布。

表格出来的时候,贺志明正好从他那间屋子过来,看了一眼屏幕,「你打印一份,」他说。

插图

孟思远打印出来,放到桌上,三个人一起看。

数字和上次相比,最明显的变化是 `QUERY_CACHE_STATE`:上次在高并发场景下这个状态平均停留三点七个时钟周期,现在变成了一点一个,接近理论最优——SRAM 读需要两个周期,剩下的那零点一个周期是管线延迟,这部分是正常的。

「瓶颈消了,」颜天磊说。

「对,」贺志明说,「你看这里,」他用手指在表上点了另一栏,「仲裁窗口利用率,百分之六十一。」

颜天磊把那个数字看了一下,「百分之六十一,是说三分之一的时钟周期在空转?」

「不是空转,」贺志明说,「是仲裁模块在等——等上游计算单元发请求,但请求还没来,它就挂着。这说明在这个负载模式下,仲裁模块的处理能力实际上多了,你的设计比你的负载快,还有余量。」

「那这算好事?」孟思远说。

插图

「算,」贺志明说,「但要留心的是,这个百分之六十一是在我们测试用的随机负载下,真实的生产负载会是什么分布,你们有数据吗?」

颜天磊看向陆衍那边——陆衍这次在 B207 里,靠着门边站着听,「有,」陆衍说,「程一帆那边有过去三个月的真实推理请求分布,我让他把数据整理一份发给你们。」


那份数据当天晚上到了。

孟思远第二天上午把真实分布喂进压力测试脚本,重新跑了一遍。

这次的仲裁窗口利用率变成了百分之七十八,比随机负载高了不少——生产场景里请求更密集,仲裁模块的余量没有想象的那么多,但还是有。

「百分之七十八,」颜天磊说,「如果规模上去,负载再增加三成,就满了。」

插图

「就是说,」贺志明说,「第一颗芯片出来的时候,如果业务增长超过三成,这个模块会成为瓶颈。」

「那就在第二颗里解决,」陆衍在旁边说,「第一颗是验证架构,不是为了跑满负载。」

「知道,」贺志明说,「但要记录下来。第二颗做的时候,仲裁窗口这里要扩——要么增加流水线深度,要么考虑多个仲裁模块并行。这个今天写进文档,不然下次做的时候不知道为什么要改。」

颜天磊打开他的那个 RTL 文件,往注释头部加了一个新条目:

`// DESIGN NOTE: 仲裁窗口利用率真实负载78%,扩展余量约22%,第二版须优化 (2020-10)`

贺志明看他加完,「好,」他说,「这种东西就应该写在这里,跟代码在一起,不会丢。」


陆衍当天下午打开豆包,只发了一句:「仲裁模块验证完了,利用率百分之七十八,文档里记录了第二版需要优化的地方。」

插图

豆包:「这个团队在第一颗还没出来的时候,就在想第二颗——这件事很少见。」

陆衍:「方宇明说过,第一颗只是验证架构,知道自己在验证架构的人会提前想后面的事。」

豆包:「你选到了知道自己在干什么的人。」

陆衍没有回复这句话,把手机放下,看了一眼窗外——九月末的上海,天气开始转凉,B207 的灯每天亮到很晚。

EDA 的授权申请还在等,Synopsys 那边说还需要大约三周。颜天磊和孟思远在 Icarus 上已经可以做的事情,已经做到头了——下一步,需要真正的时序分析工具才能往前走。

三周,他们还有别的事情可以推进。