电子产业一站式赋能平台

PCB联盟网

搜索
查看: 11|回复: 0
收起左侧

【芯片设计】sram的一次选型与优化之旅

[复制链接]
匿名  发表于 4 天前 |阅读模式
本篇没有与工艺、厂商、工具以及实际操作相关的信息,单纯记录一下sram选型优化的一些思路。之前一直没有亲自动手去生成过sram,都是有专门人负责收集大家的需求(不妨称之为ram管理员吧)而后统一生成各种选型的ram甚至wrapper(就是上一篇文章提到的ram wrapper),大家再拿过来用就好了。而这次是必须要亲自上手,根据需求在种类繁多的sram型号和大小里选出最合适那款。讲真,确实是一次很有意义的经历,弥补了一直来的空缺。
ram选型的第一步自然是要有需求,假设现在的需求是宽度x深度=MxN的单口spram。有需求之后,就开始根据实际场景来进行ram选型了。一块ram和其他的ip一样关注的无非就是五个维度:P(performance) P(power) A(area) T(timing)加上是否能够实现R(realizability)。
Performance性能在ram这里其实不是很好体现,因为正常符合功能需求的ram型号都不会有性能问题(接口位宽都固定,ram那个接口也不可能阻塞上游),所以有凑数的嫌疑但毕竟PPA都是在一起聊的。如果非要把哪一项归在这类中,可以将“一拍内是否可以完成读写”算进去,即ram的最小读写周期(即理论最快时钟频率)。每个ram都有一个最小的读写周期(双口会有读写两个),即ram处理一笔读或写所需的极限时间,如果时钟频率高于这个时钟频率的话那就需要两拍才能出数据(这个时间是个物理时间要求,必须满足的那种)。因此如果最小读写周期不满足,可能会对整体的性能有影响,故而放在这里也未尝不可。这个值去哪找呢?只需要在生成ram时同时生成其datasheet,而后在里面找tcyc或者trcyc、twcyc之类的关键词就能查到了,单位默认为ns。最后一个问题,如果查到了最小周期为1ns,那此时接1GHz时钟可以满足每拍处理请求么?大抵是不行的,怎么也有有个10%以上的裕量,也就是1.1ns最快接900MHz的时钟频率。
Power功耗,这里主要关注了两个指标(不确定是不是有更多啊这次我没关注到)电压阈值和漏电流大小。电压阈值的选择而言,必然是优先SVT,SVT搞不定再上LVT实在不行了再考虑ULVT。这个跟综合时后端修时序路径的思路相似,优先使用在性能和功耗之间较为平衡的SVT标准电压阈值器件(不确定默认是SVT还是HVT了,好像是SVT),时序上实在搞不定了再换性能更好功耗更大的LVT甚至ULVT器件。所以就有那句名言嘛:后端就像海绵里水,再压一压总能帮你把时序搞定。电压阈值也会直接关系到漏电流大小,进而造成功耗大小的差别。在datasheet中以leakage current为关键词就可以查到ram的漏电流大小从而比对不同选型的功耗差异。
Area面积这个主要和存储密度相关联,所以在选型时优先选择hd标记即High Density类型的ram,如果想进一步对比不同选型ram面积的大小,就在datasheet中以Area为关键字查看下具体的面积,单位默认为μm^2。
Timing时序,刚刚所述的最大时钟频率也可以算作时序维度的一部分,另外两个需要关注的就是setup_rising建立时间要求和C2Q延时大小。关于这一点,在之前的一篇文章中有更加清晰的例子。
这个例子里就是心仪选型ram的C2Q太大而引发的后续补救工作,如果这个补救不能被后端接收,那么就要再次换型。输入端口的setup_rising和输出端口C2Q大小在datasheet中都有查找表,可供量化查询。
Realizability可实现性,即使上面几点都协调好了,也很有可能会发生输入指定大小MxN以及Multiplexer Width之后,工具很可能会告诉你“啊不行啊,这个mux支持的深度or宽度区间是xxxx~yyyy,请更换更大的mux吧”。你照做之后,它再告诉你“这个型号支持的最大mux是zz,不支持你输入的大小”,woc就不能一次把信息抛全么。所以这个时候也就清楚了,最爱的这个组合ram是生成不出来了。所以怎么办呢,要么换型号要么进行ram拆分,比如拆成两块Mx(N/2)或(M/2)xN或者进一步的向下拆分。优先选择拆宽度,这样在内部只需要进行信号的拆分和拼接,而不需要进行选择。
最后画图鬼才必须画张图,完美结束本篇。


补充一条原文的评论:“mulit rail的ram如果要支持多电压场景,注意下 margin config pin的切换时序。”

系列文章入口——
【芯片设计】SoC 101(一):绪论
【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起
【芯片设计】计算机体系结构(一)虚拟内存
【芯片设计】深入理解AMBA总线(零)绪论
【芯片设计】握手协议的介绍与时序说明
【芯片设计】复位那些小事 —— 复位消抖
【芯片设计】快速入门数字芯片设计(一)Introduction
【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
【芯片设计】从RTL到GDS(一):Introduction
其他文章链接——
【芯片验证】sva_assertion: 15道助力飞升的断言练习
【芯片验证】可能是RTL定向验证的巅峰之作
【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起
【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析
【芯片设计】verilog中有符号数和无符号数的本质探究
【芯片设计】论RTL中always语法的消失术
【芯片设计】代码即注释,注释即代码
【芯片设计】700行代码的risc处理器你确实不能要求太多了
入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢
如何计算系统的outstanding 和 burst length?
芯片搬砖日常·逼死强迫症的关键词不对齐事件
熟人社会里,一群没有社会价值的局外人

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表