IC-CAD Methodology 知识图谱

    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 开发。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值