引言
集成电路在开发过程中,除了需要使用很多EDA工具,工程师还需要写大量的脚本来处理一些重复性的工作,或者那些费时费力但又很有规律的工作,以提高效率;所以作为一名IC工程师,掌握并熟练使用一门脚本语言如:Perl, Python, tcl, shell, Makefile等是基本技能;对于一些复杂的任务,更需要编写上千行甚至上万行程序来处理,为了方便使用,可能还会加上图形界面,命令行交互,多文件格式支持,配置文件等等一系列EDA工具惯用的一些方法。
笔者作为在集成电路设计行业混迹二十余年的行业从业人员,工作期间学会了十几种编程语言,写过大量的脚本程序,也开发出了一些颇受欢迎,至今都还在大量使用的自动化工具;对于集成电路开发中涉及的自动化工具这个话题,略有一些领悟,因此开此专栏,与行业内的同仁分享一些心得体会,抛砖引玉,希望和志同道合的朋友们在这条路上越走越远,用我们自己的一点努力为集成电路行业发出微弱的光。
集成电路开发流程
集成电路产品在经过早期的市场需求调研和产品定义之后 ,就开始进入实施阶段,也就是开发阶段;开发阶段主要包含以下几个流程步骤:
开发阶段完成后就会交给Foundry进行生产制造,然后是封装测试;全部完成后就是成品了,也可能只是测试产品,从测试产品到最终批量生产的成品,后面几个步骤可能需要重复2~3遍;
各个流程步骤还可以进一步细分;
架构定义可以分为整体架构定义和微架构定义;
设计则包含了IP设计,模块/子系统设计,集成设计,DFT设计;
验证包含了前端验证,FPGA原型验证,Palladium/HAPS加速验证;
物理设计包含了低功耗设计,物理综合,静态时序分析,布局布线;
流程中的自动化工具
开发阶段除了需要使用EDA工具,自动化工具也是必不可少的,尤其是规模庞大的产品;自动化工具主要帮助完成一些重复性的步骤和文本代码和报表的生成,通常是将通用的部分进行逻辑抽象后建模,并利用多途径进行数据输入,比如文本文件、Excel表格、图形界面等,然后将输入数据对象化并形成关联,再经过计算加工,最后通过模板机制展开成我们想要的各种文本格式和报表格式;这些文本可以是源代码,如VHDL/Verilog/SV,也可以是网页文本,SVG图形描述文本,还可以是格式化的数据文本,如CSV/XML/JSON/YAML等等,甚至还可以是其它编程语言的程序文本;当然也可以利用扩展工具生成其它文件格式,如Excel/Word/PDF/图形/声音/视频等等;架构定义中需要书写大量的文档,其中包含大量的手绘图和表格,如结构图,架构图,流程图,信号时序图等等;这些文档和图表,有相当一部分是制式的,风格相对稳定统一,可以由自动化工具来生成,生成后合并到主文档中;如下场景可以自动化:设计的工作主要是写代码,工作量不仅体现在代码量上,更是在逻辑的复杂性和正确性上;另外,在代码复查工作中,自动化后的代码也相对容易,在保证自动化工具正常工作的前提下,只需要对填入的关键数据进行复查即可,相较于在海量的生成代码中寻找设计的正确性,只对关键数据的复查既省力,又能保证复查的有效性,最终保证的是设计的质量;寄存器代码自动化
复位和时钟代码自动化
PinMux代码自动化
集成代码自动化(连线工具)
物理存储器定制及Wrapper代码自动化
以上场景适合自动化的理由,一方面是代码大,另一方面是代码里的逻辑结构相对统一,代码形态数量可控;验证需要做的工作是:写验证计划,搭建测试台,写测试用例并跑仿真调试,跑测试回归并收集覆盖率,写回归结果报告;上面的步骤除了写计划和测试用例,其它步骤都可以实现自动化:测试平台搭建自动化
测试输入数据格式自动化
测试回归及报表自动化
物理设计基本上靠EDA工具,但需要写很多tcl命令作为EDA工具的输入,在不断的迭代中需要查看EDA工具的海量输出来了解最终结果是否满足要求;下面的场景可以使用自动化来完成:集成电路开发参与人员众多,项目数据和项目进度管理,以及人员协调和信息流通都是项目管理的重要因素,清晰并有效管理这些因素是成功的基础;总结
自动化工具帮助工程师从繁重的重复工作中解脱出来,将精力着重放在设计的正确性上,整体上提高了工作效率和减少了产品缺陷;目前国内集成电路设计企业正蓬勃发展,多数为初创企业,工作流程不成熟,自动化工具缺失,还处于手搓代码的局面;随着产品线逐渐丰富,并行项目增多,作坊式的手搓模式将会阻碍公司进一步发展壮大;为实现设计工业化,自动化工具和流程的作用将突显出来,成为一个绕不开的话题。*免责声明:文章来源于知乎,版权归原作者Quickor所有。如有侵权,请联系路科验证删稿。文章内容系作者个人观点,路科验证转载仅为了传达一种不同的观点,不代表路科验证对该观点赞同或支持,欢迎评论区留言交流。原文官网链接:http://www.quickor.cn/doc/index.html