文档章节

IC-CAD Methodology知识图谱

李艳青1987
 李艳青1987
发布于 2018/12/16 00:53
字数 3824
阅读 73
收藏 0

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

    早期IC公司的CAD岗位最初主要致力于公司内部EDA工具开发,自从上 个世纪八十年代EDA公司崛起,各大IC公司的EDA工具研发人才逐渐剥离进入几大主流vendor厂商(synopsys,cadence,mentor等),IC公司的CAD岗位职责逐渐演变为EDA工具更上一层的集成电路设计流程自动化,也就是在成熟商用EDA工具的基础上做基础环境建设,IC设计流程控制及不同设计流程间的自动化衔接,以针对每个公司不同的个性化设计需求做流程优化来达到更高的设计自动化。此外,也会做一些类EDA工具inhouse-tool开发,在自研工具中加入特性化功能以弥补商用EDA工具过度普适性的缺陷。

    可以说,CAD以计算机编程为基本手段,以自研工具为核心生产力,通过计算机辅助极大地促进了集成电路设计流程自动化。由于可以将IC工程师从许多繁琐的手工操作中解放出来,并通过更自动化的流程控制减少IC工程师在非核心设计环节的精力支出,CAD在节省企业人力资源、提高设计效率,间接地优化企业成本方面起了重要的作用。

    近年来中国集成电路行业突飞猛进,2018年中国的集成电路企业新增318家达到1698家,但是多数IC企业中计算机辅助设计的现状堪忧。据了解,绝大多数国内的IC企业,尤其是初创企业以及中小型企业,还是比较原始的作坊式开发方式(甚至有的公司竟然连服务器都没有,一人一台台式机,每个人在自己的台式机上跑仿真!),略微有些流程自动化概念的公司,也常常把这种CAD的工作强加到IC工程师身上,往往事倍功半。国内只有华为海思,展讯等寥寥数家大型IC公司构建有相对完整的CAD体系。

        由于国内IC企业的特殊发展经历,一般IC企业的CAD部门大多脱身于IT部门,CAD和IT之间有着千丝万缕的关系,CAD岗位不再是较为单纯的偏向于编程的流程自动化公司。那么中国IC公司本地化视角之中的CAD在公司中处于一个怎么样的角色和位置,主要职责有哪些?下面引用摩尔精英IT事业部经理王汉杰先生的两页PPT做简单说明。

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

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

图2 IC公司CAD的岗位的主要职责

 

    由于脱胎于IT岗位,中国的IC公司CAD岗位天然低承接了“涉及数据管理”、“许可证管理”、“计算平台管理”,甚至于“EDA工具安装”这样偏向于基础运维平台的IT的工作,但是大家也承认它着重承载着“设计流程管理”、“工具管理(偏向于EDA工具是使用方面,而非安装和维护)”以及“设计环境管理”这些更加贴近于IC设计流程的本职工作。    

    尽管每个公司CAD的工作内容和工作职责各不相同,但是简要地归纳,国内大多数IC企业的CAD部门工作可以区分为偏IT和偏Methodology两部分。偏IT的工作(比如服务器、网络、数据,存储、权限管理,EDA工具安装,license管理)脱胎于IT,在此暂且不做讨论。偏Methodology的工作较为契合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功能较弱,不适用于功能性脚本开发,所以不建议深入学习。

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

 

1.3 Perl

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

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

    个人不建议深入学习Perl,能够读懂代码即可。

 

1.4 Python

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

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

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

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

    * 自动化regression系统。代码更改自动触发regression自动运行,自动检查结果,自动分析错误,自动定位代码改动,自动汇报bug。

    * 自动流程控制系统。synthesis/DFT/clp/fv/sta的自动流程控制系统,包括自动创建design block的运行环境,自动调配openlava资源运行任务(中间状态展示),运行结果自动检查分析,运行结果自动汇总和展示。(应该类似于论文中的自动化流程控制系统 https://www.xzbu.com/8/view-1058286.htm

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

 

2. EDA

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

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

 

3. lsf

    对于稍微有些规模的IC企业而言,由于仿真运算资源消耗量大,用于进行仿真运算的硬件资源较多,服务器集群管理系统是必不可少的。现在国内IC业界使用的主流的服务器集群管理系统主要为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端。

    如果是在Linux端,且主要以Python为开发语言的CAD team,可以选用django或者flask等python开发框架。

 

各个知识点的细节,以及一些CAD企业实战应用的博文,稍后更新,后面会附上链接。

IC-CAD Methodology企业实战之openlava

© 著作权归作者所有

共有 人打赏支持
李艳青1987
粉丝 11
博文 19
码字总数 37873
作品 0
通州
高级程序员
私信 提问
IC-CAD Methodology企业实战之openlava

在云计算解决安全隐忧并成为IC界主流运算平台之前,私有的服务器集群系统仍然是各大IC公司的计算资源平台首选。 现在主流的服务器集群管理系统包括lsf,openlava,SkyForm,三者都属于lsf一系...

李艳青1987
2018/12/16
0
0
6 款高品质的免费 Linux CAD 应用程序

在 Windows 的 CAD 世界一直占主导地位的是非常强大的 AutoCAD 软件。不幸的是,Unix 系统的支持早在 1994 年就停止了,它的作者 Autodesk,目前也没有计划把它推向 Linux。在此我们编制了一...

红薯
2009/06/08
6.7K
0
IC-CAD Methodology企业实战之inhouse-tool开发示例

Inhouse-tool开发是IC-CAD工作的一个重要内容之一。在大型IC公司,由于设计工艺的先进性和设计逻辑的复杂性,IC设计流程中具有更多special的需求是通用EDA工具所不能覆盖的,这种情况下Inhou...

李艳青1987
01/09
0
0
pcb设计流程详细

整个PCB设计的流程可分为5大部分,即原理图sch、布局layout、走线router、覆铜和验证、生产文件输出cam,每一部分又包含很多细节。需要指出的是 原理图和pcb布局布线一般意义上两个不同的工种...

心翔
2016/01/25
83
0
知识图谱:知识图谱赋能企业数字化转型 | AI 研习社职播间第 3 期

现在的市场环境下,企业正面临着竞争逐渐加剧、人力成本增加、人员流动率加快等挑战。而随着企业经历了信息化的成熟阶段,沉淀了大量的数据,大型的企业都开始了数字化转型,它们利用前沿的技...

丛末
2018/10/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

嵌入式应用选择合适的微控制器

准备所需硬件接口列表 使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微控制器中有两种常见的接口类型需要列出。第一种是通信接口,这些是外围设备,如USB,S...

linuxCool
11分钟前
1
0
Group by使用

概述 GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。 GROUP BY必须得配合...

小橙子的曼曼
22分钟前
1
0
机械臂写中文

Make Me a Hanzi https://www.skishore.me/makemeahanzi/ 使用uArm Swift Pro机械臂写中文-毛笔字 https://github.com/makelove/Robot_Arm_Write_Chinese...

itfanr
33分钟前
0
0
OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 逃跑计划《一万次悲伤 (Live)》 《一万次悲伤 (Live)》- 逃跑计划 手机党少年们想听歌,请使劲儿戳(这里) 现在...

小小编辑
今天
979
13
test

//// main.c// Test//// Created by 吕颖 on 2019/1/16.// Copyright © 2019年 carmen. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <t......

carmen-ly
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部