IC-CAD Methodology知识图谱

原创
2018/12/16 00:53
阅读数 5.9K

    CAD (Computer Aided Design),计算机辅助设计,本意指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义也可以用来近似类比IC公司CAD工程师这个岗位的工作。

    早期IC公司的CAD岗位主要致力于公司内部EDA工具开发,自从二十世纪八十年代独立的EDA公司崛起,各大IC公司的EDA研发人才逐渐剥离进入几大主流vendor厂,IC公司的CAD岗位职责慢慢演变为EDA工具更上一层的集成电路设计流程自动化通过顶层的流程控制配合底层的EDA工具来进一步提升IC设计交付效率。此外,很多公司内部也会做一些类EDA工具inhouse-tool开发工作,在自研工具中加入特性化功能以弥补商用EDA工具过度普适性的缺陷。

    可以说,CAD岗位以计算机编程为基本手段,以匹配公司产品特性的自动化管理流程和满足自身IC设计special需求的自研工具为核心生产力,通过计算机辅助极大地提高了集成电路设计交付效率。由于可以将IC工程师从许多繁琐的手工操作中解放出来,减少工程师在IC设计核心环节的精力支出,CAD在节省企业人力资源、提高设计效率优化企业成本方面起了重要的作用。

    近年来中国集成电路行业突飞猛进,2018年中国的集成电路企业新增318家达到1698家,但是多数IC企业中计算机辅助设计的现状堪忧。据了解,绝大多数国内的IC企业,尤其是初创企业以及中小型企业,还是比较原始的作坊式开发方式(夸张的是,个别公司竟然连服务器都没有,一人一台台式机跑仿真!),略微有些流程自动化概念的公司,也常常把CAD相关的工作强加到IT工程师或者IC工程师身上,却往往由于缺乏广泛的IC知识和扎实的编程基础而导致事倍功半。据悉,国内只有海思等寥寥数家大型IC公司构建有相对完整的CAD体系。

      由于国内IC企业的特殊发展经历,很多IC企业的CAD部门脱身于IT部门,CAD和IT之间有着千丝万缕的关系,CAD不再仅仅是较为单纯的偏向于编程的流程自动化岗位。那么中国IC公司本地化视角之中CAD在公司中处于一个怎么样的角色和位置,主要职责有哪些?

图1 IC公司中CAD岗位的角色

图1所示为IC公司中CAD岗位的角色,它处于IC设计和IT基础平台之间,向上承接IC设计需求,向下肩负起同IT共同架构IT基础平台的责任。CAD工程师需要能够很好地了解公司IC设计在IT基础平台上的需求,这些需求有效转化为具体的IT实现,然后和公司的IT通力合作来完成平台搭建

图2 IC公司中CAD岗位的职责

     由于脱胎于IT岗位,中国的IC公司CAD岗位天然承接了“EDA license管理”、“计算平台管理”,甚至于“EDA工具安装”这样偏向于基础IT的工作,但是大家也承认它着重承载着“设计流程管理”、“inhourse-tool开发”这些更加贴近于IC设计流程的本职工作。    

    尽管每个公司CAD的工作内容和工作职责各不相同,但是简要地归纳,国内大多数IC企业的CAD部门工作可以区分为偏IT和偏Methodology两部分。偏IT的工作脱胎于IT岗位,在此暂且不做讨论。偏Methodology的工作较为契合IC-CAD的本意,本文主要就IC-CAD Methodology的基础知识体系构建做简要讨论。

    下面是根据一些实际工作经验绘制的IC-CAD Methodolgoy知识图谱,这些基础知识可以用于搭建起IC设计中的计算机辅助设计体系大厦。

图3 IC CAD Methodology 知识图谱

 

    IC-CAD Methodology的最基础的需求在于掌握各种IC相关编程语言,其核心围绕于各种EDA工具的使用、查错、二次开发展开,另外lsf(openlava)也是IC设计中任务运行不可或缺的硬件资源管理平台,而SQL普遍用在IC设计中各种数据的存储,Web则既可以用来做信息展示,也可以用流程控制和项目管理。

1. Language

    IC设计的基本开发环境一般为Linux,常常需要接触到的脚本语言包括shell/Tcl/Perl/Python

1.1 Shell

    IC设计中常用的shell有bash和csh(tcsh是一种类csh语言,归为一种),bash是很多linux的默认shell,csh则由于历史原因被很多ICer偏爱。

    由于shell本身的逻辑编程功能较弱,所以我们主要关注于vim/find/grep/sed/awk这几个知识点即可,这些知识点都很容易在百度/google上搜到大量的优质教程,所以我们只浅论功能。

1.1.1 vim

    vim普遍用于linux中各种普通文本的编辑,一个顺手的vim配置可以让Linux端的工作效率大增。我们可以通过配置“~/.vimrc”文件来配置自己的vim,比如我的工作环境下vim配置只有四条,如下:

syntax on
set ruler
set showmode
set hls

    功能分别为 “自动语法高亮”、“显示当前的行号和列号”、“左下角显示当前vim模式”和“搜索高亮”

    更多配置可以参考 http://www.cnblogs.com/rickyk/p/3839674.html

1.1.2 find

    find命令主要用于在指定目录下查找文件,属于Linux上的常用指令。

    使用说明可以参考 https://www.cnblogs.com/weijiangbao/p/7653588.html。

    分享一个知识点,可以用命令“find ./ -inum fileinum -exec rm '{}' \;”来删除一个奇怪名字的文件(比如“!&@”),其中fileinum就是文件的inode号,可以用ls -i filename来获取。

    范例: 找到当前路径下所有的lib后缀的文件  find . -type f -name "*.lib"

1.1.3 grep

    grep sed awk合Linux三剑客,威力强大,其中grep主要用于文本搜索。

    使用说明可以参考 https://www.cnblogs.com/wangcp-2014/p/5146335.html。

    范例:找出文件“log”中所有的空行,并标识行号  grep -n "^\s*$" log

1.1.4 sed

    sed命令主要用于字符串替换(及删除)。

    使用说明可以参考 https://www.cnblogs.com/ginvip/p/6376049.html。

    范例:直接修改文件“log”,将其中的字符串“synthesis”均改为“DFT”  sed -i 's/synthesis/DFT/g' log

1.1.5 awk

    awk本质是一种编程语言,功能极其强大,一般主要用于字符串(列)提取。

    使用说明可以参考 http://blog.chinaunix.net/uid-25266990-id-100557.html。

    范例:将文件“log”中第二列的内容打印出来  awk '{print $2}' log

 

    前面find, grep, sed, awk的强大之处在于其均支持shell的正则表达式,所以学会Linux的正则表达式也具有重要意义。Perl以其强大的正则表达式系统享誉江湖,但其基本语法和Linux的正则表达式是类似的,学会一即可举一反三。

 

1.2 Tcl

    由于历史原因,Tcl语言广泛应用于EDA工具之中,尤其是作为配置文件使用,所以有必要了解Tclsh的基本语法。但是由于Tcl功能较弱,不适用于复杂的功能性脚本开发,所以作为CAD这个岗位而言不建议过于深入学习会基本的语法即可

    《Tcl/Tk入门经典》是一本经典的Tcl入门教程,不过貌似现在网上已经买不到了中文版了。

 

1.3 Perl

    早些年Perl广泛流行于IC界,用于逻辑功能开发,但是现在大有被Python取代的趋势。

    Perl的核心优势在于强大的正则表达式和文本处理功能,但是这些功能Python能够完美取代。Perl的主要劣势在于语法过于随意,所以可读性差,可维护性低。我工作后写的第一个较为大型的CAD应用使用了Perl,总代码量大概为30000行,主程序有5000行,后来做程序更新的时候,我发现自己已经完全无法读懂自己三个月之前写的Perl代码了,从那时起我就毅然决然地投到了Python阵营。

    个人不建议花太多精力学习Perl,能够了解基本语法,读懂代码可对原有perl脚本做简单维护即可。

 

1.4 Python

    Python是现在非常流行的一门脚本语言,也已经广泛第应用于IC行业。

    Python的主要优势在于语法简洁,扩展库极多,开发效率很高(执行效率比较低,但是现在硬件强大,运行效率足够用)。

    Python入门包括掌握基本的Python语法,包括变量,数据结构,循环,类等,能够写一般逻辑的脚本,比如文本处理程序流程控制程序;Python的进阶包括各种库的使用,能够对简单python工具做二次开发和改进,能够写较复杂逻辑应用,能够写图形界面程序,能够以较为规整的软件架构开发系统性工具。

    Python可以广泛应用于IC设计流程的方方面面,属于CAD开发的基石,我们曾经用它做过如下事情:

    * 自动化regression系统。代码更改自动触发regression运行,收集结果,自动分析错误并定位到具体的check-in,自动汇报bug。

自动流程控制系统。synthesis/DFT/clp/fv/sta的自动流程控制系统,包括自动创建design block的运行环境,自动调配openlava资源运行任务(中间状态展示),运行结果检查分析,运行结果汇总和展示。

openlava的数据采集、数据分析及数据展示系统。开源工具openlavaMonitor(源代码网址https://github.com/liyanqing1987/openlavaMonitor)就是这些应用中的一部分。

* IC inhourse-tool开发。其中library解析及数据展示的开源工具libView(源代码网址https://github.com/liyanqing1987/libView)就是这些应用中的一部分。

 

2. EDA

    在实际工作中,一般一个CAD工程师需要support一个或者多个IC设计的flow,帮助ICer配置EDA工具的基础运行环境,debug EDA工具使用过程中遇到的各种问题(运行缓慢,crash,各种随机错误),搭建良好易用的EDA工具使用平台。

    一个好的CAD工程师需要了解实际的IC设计flow,了解EDA工具的用法,在此基础上进一步研发更高层级的流程自动化平台,或者研发相关inhouse-tool作为商用EDA工具的补充,从而促进IC设计流程更高的交付效率

 

3. lsf

    对于稍微有些规模的IC企业而言,由于仿真运算资源消耗量大,用于进行仿真运算的硬件资源较多,服务器集群管理系统必不可少。现在国内IC业界使用的主流服务器集群管理系统主要为sge和lsf系列,其中sge功能较弱且缺乏技术支持,已逐渐退出市场,lsf系列是主流。lsf系列主要包括lsf、openlava和SkyForm。它们三者在技术上属于同一系列,都脱胎于IBM的商用软件lsf,因而用法基本兼容,区别在于lsf和SkyForm为商用收费软件,支持更好,而openlava是开源软件,没有商业企业支持,但是胜在免费,应该是国内IC公司最为广泛应用的服务器集群管理系统。

    方便起见,下面提到服务器集群管理系统,均用openlava代替。

    由于openlava作为IC设计流程中运算资源管理的核心载体,其优化配置和高效运行对IC设计流程时效性具有重要影响,因此也是IC CAD工作的重要一部分。

    IC CAD需要在openlava的以下方面加以关注。

    * 根据企业服务器资源数量和实际的设计流程运算资源需求,合理配置openlava(尤其是queue的配置),提高运算资源的整体使用率。

    监控硬件资源,及时处理各种硬件异常。(lsf或者SkyForm应该已经自带各种监控,openlava则需要自己开发或者在网上找一下开源应用

    * 采集openlava基础信息,通过大数据分析(openlava的信息采集至少达到百万量级)等技术手段获取queue/host/load/job/user的使用状况和使用习惯,反过来指导ICer正确地使用openlava,从而提高openlava的使用效率,并保证IC设计仿真运算任务高效正确地完成。(lsf/SkyForm自带通用的数据采集和分析功能,但是更多定制化的功能可能还需要企业内部自己开发)

 

4. SQL

    IC中常用的SQL主要包括mysql和sqlit,其中mysql主要用来存储较大量的数据,速度较快,但是需要单独配置和管理,而sqlite可以用来存储中小数量的数据,速度略慢,但是配置简单,无需过多管理。

    IC中许多场景都需要用到数据库,比如:

    * 项目管理系统中数据存储。

    * 网页展示系统中的基础数据存储。

   * 前面提到的openlava数据采集平台,用于openlava基础数据存储。

   各种inhouse-tool,比如企业library管理系统中,需要存储的极大量数据,也需要用数据库来管理。

 

5. Web

    Web可以作为一个信息展示的平台,也可以作为项目管理的工具,甚至Linux端有些图形界面的工具,其图形展示和逻辑功能触发也可以移植到web端。理论上,基于web,我们可以搭建一套完整的IC项目管理平台。

    如果是在Linux端,可以基于bootstrap做快速的web开发,配合合适的模板一般效果都相当不错。如果有更加复杂的定制化需求,可以选用django或者flask等python开发框架来做web开发

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
3 收藏
1
分享
返回顶部
顶部