在历经了前两part的了解和熟悉后,对于SRAM的了解基本已经了然如心了。
小伙伴们在这里就可以使用自己学习的知识,就可以对SRAM的生成和遴选可以建立一套自身的方法学和流程。在这一章节,笔者分享一些浅见,对这个自动化的流程进项一些头脑风暴和讨论。

SRAM 生成方法

基于不同工艺和FAB,都会有相应的memory team对指定工艺进行memory array和peripheral进行构建。这里的构建是指的是构建一些基础组件,然后通过打包的方式进行封装,以自动化命令的方式交付给用户,方便用户进行不同的配置和选型。
不同的SRAM vendor提供的套件往往不尽相同,有的可以支持GUI和batch,有的支持batch。相较而言,batch是一定要支持的,否则在大型项目下这类工作没法批量开展。这里以T家为例,使用batch mode进行SRAM的生成

> tsn7_1prf.exe -NonTsmcName -file $CFG_FILE

各家的SRAM都有自己默认名称,但是用户为了自身数据管理便利,通常需要使用自己的名称来进行规划,所以在T家的mem-gen的时候,建议大家使用自己的$CFG_FILE 进行名称定义,当然,这里的$CFG_FILE需要指定出SRAM具体的位宽、位深以及column MUX的信息。简单示例如下
)
T家的command line还支持其他的一些选项,包括并不限于

  • SRAM datasheet:包含SRAM的各种时序、功耗和物理信息
  • 各种view的生成选择
    • verilog仿真模型
    • DFT view
    • timing view
    • Masis view
    • SPICE view
    • GDS view
    • LEF view
    • VOLTUS view
  • 不同配置的选择(鉴于memory类型的不同,并非每种配置都可生成出来对应的memory,用户需要检查memgen 日志)
    • DualRail:VDD/VDDM 时候使用不同的rail
    • ULVT/SVT:对peripheral 的std-cell VT的选择,
    • BIST: 控制是否支持MBIST模式
    • bit-wise:是否支持bit 写操作
    • etc…

所有的可配置接口都可以通过batch 模式下进行配置。这样的好处是可以支持用户在大面积SRAM遴选生成的时候实现自动化。
类似的SNPS在mem-gen里,会提供batch以及GUI接口,GUI操作相对方便一些,但是在批量生产的时候,还是需要使用batch提高生产效率
)

实际项目中SRAM 遴选维度

有了上述的讲解以及工具的支撑,用户基本已经可以开始进行SRAM的生成了。上述的信息和资源最终都是支持实际项目的工具,项目对于不同SRAM的比较、匹配和选型等操作,才是可以真正作用的实际项目上来的。
现在的大型芯片,SRAM的用量面积有甚者可以占到整个项目将近一半的面积,所以对于SRAM的选型需要从以下几个方面进行考量

  • 基于工艺的SRAM vendor的选择

    • 渠道1:通常FAB在提供工艺的时候,也会提供SRAM vendor的推荐,常规的讲,FAB自己的SRAM一般都是免费的(应该搜是被TO费用所涵盖),譬如T家或者S家都会提供自己对应工艺的SRAM产品
    • 渠道2:一些第三方的SRAM vendor , 他们已经和FAB之间建立了坚实的商业合同,FAB也会分享给用户,让用户自己去选择,用户在流片的时候只需要少量的royalty费用即可。
    • 渠道3:对于某个工艺,有一些商业客户专门去研发了SRAM,并且可以做到比原厂FAB更好的PPA,譬如S家,A家等等,这个时候用户在使用的时候,需要像采购IP一样去额外付费,如果用户对某项PPA确实倚重,可以考量花这笔钱。
  • Rail的考虑:这个由于牵扯整个芯片的rail设计,必须在初期考虑清楚,项目通常采用统一的策略。现在的SRAM都支持SD/DSLP设计,没有外围isolate逻辑的损耗,但是SRAM内部的处理一定是有isolate的代价的。基于项目对于功耗和性能的平衡,在初期选定rail模式是非常必要的。

  • STAM的DFT相关:

    • BIST: 由于SRAM里边有peripheral std-cell,这个MBIST的DFT功能可以支持对这类std-cell的fault定位。代价是由于输入pin脚的急剧增多,可能对于APR是个新的挑战,通常为了节省绕线资源,会跳过这些peripheral std-cell的MBIST 测试,直接对整块memory (包含memory array)进行MBIST测试
    • BISR:为了实现良率,BISR有时也是需要,尤其是column redundancy bit,通过FAB给的数据,1bit的redundancy通常可进行修一检二的操作,性价比还是很高的。
    • 所有的SRAM DFT相关部分,都需要额外的STD-cell支持,此类面积通常是memory 面积的5%~10%上下,对于大型芯片,在架构设计和面积评估的时候,此部分的影响需要全盘考量
  • 形状:由于过多memory (或者memory array)的存在,memory形状对于APR的floorplan和pin access有比较大的影响。具体示例可见:来做一次装修 之版图实现第二步 – Floorplan 。 这里有几点需要注意:

    • 不要因为速度原因将column mux设置过大。导致memory 过度扁平
    • 不要创建过小size的memory,有可能会导致常规的pg strap不能直接落在memory上,降低电源连接性能等等。
  • 时序:这里重点说一下时序。由于memory的分布很广,项目很大的时候,memory的时序问题会成为某些核心组件的性能瓶颈,譬如:L1/L2 etc. 所以在对memory选型的时候,这里需要特注意一下几个要素

    • Tcycle: Minimum CLK cycle time CLK^ CLK^。这个参数描述的是这个memory所能支持的最小周期(最高频率),这个一定是要比项目规划的频率要高,另外由于这个参数也是一个clock input transition的查找表,通常clock-transition一版会定义为50ps左右,所以这里建议,选择memory的时候,Tcycle需要比项目的需求多一个20%的余量。如果项目的主频是1G,那么就要要求SRAM的Tcycle time在 ssg的条件下不能超过:0.8ns

    • Tckh/Tckl Minimum CLK Pulse High/Low。通常各是Tcycle的一半上下,这里需要注意一点,对于级数过多(latency 过长)的时钟网络,必须优先使用clock inverter来构建clock tree,这样才能在leaf(memory clock pin)控制好占空比,也就是尽量可以满足:Tckh/Tckl

    • Tcd/Tacc: CLK to valid Q (data output)。这个是描述从memory 到Q 输出的时间,这个对from-memory的datapath影响比较大。

      由于memory的规模通常比较大,这个访问时间通常都有200ps~朝上,所以对于一个timing path来看的化,这里可能是一个path上data的最大损耗

      可以看到通过就降低Tqd和Tcd或者提高useful skew(Tlat_2 - Tlat_1),可以提高芯片的性能。
      通常对于Tcd,要求不能超过整个period的60%为宜

  • 功耗:不同的选型的memory 功耗也有不同,这时候memory的peripheral的ULVT和LVT的占比会让leakage有明显的区别,在选型的时候,需要辨别这两种的类型对时序的影响,从而采用合适的类型。

实际项目中SRAM 生成简易流程

通过对memory各项属性的理解,这里可以使用下面的简易流程来进行生成和遴选流程

  1. 确定rail和DFT对memory的通用需求
  2. 明确memory的位深和位宽需求,如果过大需要手动或者自动,基于前后端的定义的规律进行拆分
  3. 满足上述要求的memory进行批量生成:位宽、位深,column MUX和LVT/ULVT等配置不同,出来的结果不尽相同,这里需要遍历所有可能,提高选择范围
  4. 对所有的memory进行时序性能分析。需要同时满足上述描述的Tcd和Tcycle带余量的情况,才是可以用的memory
  5. 如果有满足时序要求的memory,再对功耗,高宽比进行再次遴选,选择功耗小,高宽比合理的memory交付实现使用;如果没有满足时序要求的memory,重新进行拆分(通常将位深砍半,时序会比较容易满足),然后再重复步骤3~5,直到选出合适的memory。

要点:

  • memory的生成数据量巨大,一定需要使用脚本化的生成模式,譬如:excel-> perl -> memgen batch run -> analyze datasheet -> release suitable memory。
  • 选型初期,可以只看datasheet,其他view可以先不生成,这样可以提高速度和减少磁盘占用。
  • CM不宜过大来满足timing,可以适当拆分,让memory的形状更为合理。
  • 默认使用LVT进行memory的peripheral规划,如果ECO的阶段有时序障碍,可以考量调换到ULVT进行局部timing pushing,可以牺牲一部分leakage 来换取性能和节省迭代周期。
  • 同等logic memory的对应physical memory,尽量选择同等规格,这样在floorplan布局的时候会容易处理,减少channel,提高利用率。

本章词汇

词汇 解释
Tcycle memory 支持的最小周期(最高频率)
Tcd/Tacc memory 的访问时间 CLK-> Q

【敲黑板划重点】


通过三篇的学习,对于memory的结构,原理,特征参数、批处理生成和项目遴选都有了基本的了解和认识,希望这个系列的文章可以带给大家灵感和启发,在项目中可以更好地理解和应用memory,对项目带来更高效的收益和PPA。

参考资料

TSMC TSMC N7 SRAM Compiler Databook
Synopsys Embed-It! Integrator User Manual

芯片片上SRAM存储概略及生成使用实践 (下)相关推荐

  1. 签名证书无效”-在vCenter Server Appliance 6.5 / 6.7上使用Shell脚本重新生成和替换已过期的STS证书(76719)

    "签名证书无效"-在vCenter Server Appliance 6.5 / 6.7上使用Shell脚本重新生成和替换已过期的STS证书(76719) 上次更新时间:2020/ ...

  2. 联合索引会创建几个索引_联合索引在B+Tree上的存储结构及数据查找方式

    来源:SegmentFault 思否社区作者:木子雷 前言: 本篇文章主要是阐述下 联合索引 在 B+Tree 上的实际存储结构. 本文主要讲解的内容有: 联合索引在B+树上的存储结构 联合索引的查找 ...

  3. 数据库原理及应用(索引为什么快,数据在磁盘上如何存储)

    引子: 1.数据库有三级模式. 2.物理独立性:数据在磁盘上存储. 3.逻辑独立性:表的逻辑设计. 4.两级映射,表的逻辑不会其物理存储逻辑. 5.视图层:dba给用户展示的部分内容. 一  数据模型 ...

  4. 安卓11上的存储权限问题

    这篇文章,想来发布的有些晚了,安卓11已经发布多时了,关于安卓11上的存储权限变更的文章数不胜数,所以这篇文章只做为自己的一个简单的记录吧! 在说11之前,我们先回忆以下10上存储权限的变更:每个应用 ...

  5. 中国技术经济学会区块链分会秘书长贾永政:人工智能与区块链上的存储和计算

    聚英数科|中国技术经济学会区块链分会秘书长贾永政:人工智能与区块链上的存储和计算 8月18日,由链世纪财经.Ever链动主办,聚英国际.PAI Community联合主办,BTRAC全球数字网络高等智 ...

  6. 龙芯平台python答案_在龙芯平台上自己编写原创应用——“动态壁纸”

    原标题:在龙芯平台上自己编写原创应用--"动态壁纸" 一.为何要在龙芯平台上编写"动态壁纸"? 龙芯3A3000桌面电脑的用户越来越多了,人们都想在龙芯电脑上有 ...

  7. 龙芯3A2000上移植NASA WorldWind指南

    http://www.loongson.cn/news/company/467.html 一.初识NASA WORLDWIND NASA World Wind是NASA(美国)国家航空和宇宙航行局联合 ...

  8. android平台上持久化存储3种手段_Android 数据持久化==存储数据的五种方法

    1.使用SharedPreferences存储数据 2.文件存储数据 3.SQLite数据库存储数据 4.使用ContentProvider存储数据 5.网络存储数据 第一种: 使用SharedPre ...

  9. 干货应用迁移|搜狗输入法在龙芯平台上的适配与应用

    技术引领创新,用"芯"构建生态,第一期龙芯生态论坛于2021年3月12日(周五)盛大开讲!龙芯生态论坛作为龙芯生态建设的重要技术交流窗口,将汇聚龙芯资深技术专家及行业生态伙伴精英, ...

最新文章

  1. 基于用户画像 《列变行》 特征打标显示
  2. (三十一)java多线程二
  3. Maven一:maven的下载和环境安装以及创建简单的Maven项目
  4. Windows Phone 执行模型概述
  5. BZOJ 2288: 【POJ Challenge】生日礼物 优先队列+贪心+链表
  6. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...
  7. 通过真实项目截图讲解MDT 2010部署windows 7的具体过程(3)
  8. 魏尔斯特拉斯函数 matlab,函数变换论文,关于《复变函数积分变换》教学相关参考文献资料-免费论文范文...
  9. 2019年8月9日 下午6:06:12 BD5613F5-0BE7-44DF-B231-CCC87
  10. python 水晶报表_VS2010中水晶报表应用及实例
  11. 微信 android应用签名生成工具,GitHub - feinoah/WeChatSignature: 改进版本的微信应用签名生成工具,再也不用输入包名了!...
  12. 23种设计模式学习记录之单例设计模式
  13. Widows Tips
  14. 前嗅ForeSpider数据采集软件使用教程
  15. 拉丁超立方抽样法(LHS)matlab程序,包含正态分布,对数正态分布等
  16. python从入门到实践十二章
  17. Python序列(包括序列类型和常用操作)
  18. 74hc164驱动数码管c语言程序,基于51单片机的74HC164驱动数码管显示程序与仿真
  19. 使用示波器的正确姿势
  20. 吴恩达机器学习系列课程笔记——第十一章:机器学习系统的设计(Machine Learning System Design)

热门文章

  1. 【转】课堂教学中如何实现有效师生互动
  2. swift实战-豆瓣电台
  3. 王者荣耀微信有个服务器叫洛神降临,王者荣耀限定皮肤终于要返场啦 二周年限定居然是洛神降临_游戏吧手游网...
  4. java xsd校验xml文件
  5. 盘点北京周边最适合爬的10座山
  6. 网易企业邮箱搬家步骤
  7. 以太网口差分电平_百兆以太网接口高速PCB布局布线指南
  8. PAT 1025 PAT Ranking题解
  9. 李开复给中国大学生的七封公开信(其三)
  10. 诺贝尔奖得主罗伯特·莫顿—唯有信任,方得科技创新