【转载】数字IC设计工程师技能树

I. 技能清单

做为一个真正合格的数字IC设计工程师,你永远都须要去不断学习更加先进的知识和技术。所以,这里列出来的技能永远都不会是完整的。我尽可能每一年都对这个列表进行一次更新。若是你以为这个清单不全面,能够在本文下留言,我会尽量把它补充完整。javascript

  • 语言类
    • Verilog-2001/ VHDL
    • SystemVerilog/ SystemC
    • Makefile/ Perl/ Python/ Shell
    • Tcl
  • 工具类
    • NCVerilog/ VCS/ ModelSim
    • SimVision/ DVE/ Verdi
    • Vim/ Emacs
    • SVN/ CVS/ Git
    • Microsoft Office
  • 平台类
    • Windows
    • Linux
    • OS X
  • 其余加分项目
    • MATLAB
    • ISE/ Synplify/ Vivado/ Quartus
    • LEC/Formality
    • VMM/ UVM
    • ESL
    • ZeBu Server
    • JIRA/ Confluence
    • C/ Assembly Language
    • Computer Architecture/ ARM Architecture/ MIPS Architecture

II. 为何 & 怎么办

A) Verilog-2001/ VHDL

这里之因此强调Verilog-2001而不是Verilog-1995,是由于在Verilog-2001中规定了不少新特性,所以能够产生更好的代码风格。我曾经在什么是良好的Verilog代码风格一文中对新版的接口语法进行过详细的举例说明。这种新的接口方式修改起来更加简单,例化模块的时候使用也更加方便,不像旧版的接口语法因为一个接口须要分3次描述,无故端增长了代码行数并且阅读和改动都很困难,尤为是当一个模块的接口数目超过一个屏幕的显示范围时Verilog-2001的这种优点更加突出。css

学习Verilog最大的问题就是,不少国内的书写得都很很差,书中的不少例子都是为了说明语法特征而存在的,没有任何实用价值,甚至不少代码都是错误的(这里错误的意思并非说他语法错误,而是说他是不可综合的,没法用数字电路来对等实现的)。因此,对于学习Verilog,个人建议是,随便找一本相似语法手册的书籍,匆匆把基本语法看过一遍,搞清楚模块定义,接口定义,模块例化,寄存器定义,线定义,always块怎么写这些基本内容后,就开始到OpenCores网站上去下载已经通过FPGA验证的完整开源项目代码进行学习。先作到看懂别人写的代码,而后再尝试本身去模仿,有不懂的问题再有针对性地去网上搜索答案。html

Verilog语言与软件语言最大的区别就是,由于它是用于描述电路的,所以它的写法是很是固定的,由于电路的变化是很是有限的。学习Verilog的时候,不少时候咱们并非在学习这门语言自己,而是学习其对应的电路特征,以及如何对这个电路进行描述。若是心中没有电路,那么你是不可能写好Verilog的。从基础开始,一点点积累相似计时器,译码器这样的小型电路描述方法是很是重要的。Verilog鼓励在电路中进行创新,而不是在描述方法上进行创新。所以,即便是世界上最牛的Verilog高手,他写出来的Verilog代码语法也都是很普通的,而他的创意则在于如何去组合这些基本的小型电路。前端

举个不太恰当的例子,每一个医生都会给你开药打针检查身体,可是高明的医生并不在于他用了多高难度的动做去给你扎针,或者给你开出什么奇奇怪怪的药吃,而是他如何快速准确的诊断出你的病情,用最合适的扎针吃药组合去治疗你。Verilog也是一样,要学会用最规矩保守的语法,写出运行速度最高性能最稳定的电路,而不是在语法上瞎费工夫。凡是你没见到别人写过的语法,都极可能是错误的。java

VHDL虽然我并非太了解,可是目前在欧洲不少国家,VHDL仍是主流的RTL设计语言。VHDL语言的严谨性比Verilog要好,不像Verilog中同样存在大量符合语法却永远没法综合的语句,容易对新人形成误导(仿真经过的代码却在FPGA综合时报错,或者FPGA实现结果与仿真不一致)。而VHDL和Verilog虽然能够相互转化,可是转化过程当中仍然存在不少问题,没法作到彻底的自动化。关于这一点我以前写过一篇专题进行探讨:如何将VHDL转化为Verilog。有兴趣的同窗能够去看看。node

B) SystemVerilog/ SystemC

这两种语言都是为了验证而存在的。做为IC设计工程师,验证知识不是必须的,可是掌握基本的验证方法学有助于提升本身的debug效率和结果。我曾经在如何快速搭建模块验证平台一文中详细介绍过一种我本身总结的验证方法,这种方法就是基于SystemVerilog语法实现的。因为SystemVerilog对Verilog彻底兼容,就像C++对C语言的兼容同样,因此SystemVerilog(或SV)学起来其实并不算难。正则表达式

SystemVerilog是一种面向对象的语言,其设计的本意是用于搭建验证平台,主流的VMM/UVM方法也都是基于SystemVerilog实现的,因此立志成为IC验证工程师的同窗,SystemVerilog的深刻学习和流行方法论的学习都是必不可少的。算法

而对于那些只想作IC设计的同窗而言,SystemVerilog一样也是值得学习的。且不说本文前面提到的用于提升验证效率的debug方法,即便只是为了作好设计,SystemVerilog也是大有用武之地。在欧美不少发达国家,不少世界顶级的IC设计公司内部都已经开始使用SystemVerilog进行RTL设计了。因为在SystemVerilog中加入了不少相似always_ff、always_comb等用于显式代表综合电路意图的新语法,代码的可读性更高,综合过程当中也减小了歧义,尽量地保证了综合结果与设计意图的一致性。从另外一个角度来讲,assertion的加入也极大地提升了代码的debug效率,很是有助于在大规模的数据交互过程当中定位到出错的初始点,没有掌握的同窗能够多花一些时间研究一下。shell

C) Makefile/ Perl/ Python/ Shell

以上四种都是IC设计工程师们经常使用的脚本语言,看起来彷佛它们都跟IC设计的专业能力没有丝毫关系,可是因为本行业的专业工具价格很是昂贵,项目需求差别极大,所以掌握一门驾轻就熟的脚本语言将对你工做效率的提高帮助极大。若是你尚未尝试过编写本身的脚本语言,那么问问你本身,有没有曾经为了完成一批仿真用例熬到深夜?有没有曾经由于要比对几万个数据搞到眼瞎?有没有曾经由于要修改一个全局信号的比特位宽而无比抓狂?要把一个hex类型数据文件转换为memory模型须要的特殊格式怎么办?没错,若是你掌握了脚本语言,以上这些奇奇怪怪的需求都不是事儿,重复而细致的体力劳动就交给计算机来完成吧。我一贯信奉的口号就是:但凡作过一次的事情,就没有必要重复第二次。编程

若是你已经在工做中使用过其它工程师开发的平台或者脚本,那么它极可能是用这4种语言写成的。若是执行脚本的方式是make run,那么极可能你用到的是一个Makefile脚本;若是执行方式是source run,那么这应该是一个Shell语言写成的脚本;若是是其它状况,那么就得看具体这个脚本首行是怎么写的了。Makefile和Shell语言比Perl/Python要更容易上手,写起来也更加简单,比较适合知足一些很是简单的批量任务需求。Perl的强项则在于它强大的文本处理能力和无所不能的CPAN库,随时能够知足你的各类任性需求。Python的优势则是较好的可维护性。

关于脚本语言的重要性,你们能够到这里看看相关讨论:Perl等脚本语言在IC设计中有哪些用处?

D) Tcl

严格来讲,Tcl是一门很是单纯而简单的语言,而它的学习难点在于,只是掌握它的语法是远远不够的。这种状况有点相似javascript,若是你用js来开发网页,那么你必须深刻了解DOM和HTML;若是你用js来开发游戏,那么你必须深刻了解Unity3D引擎的各类知识;若是你用js来开发Web App,那么你必须会用node.js的各类库和常见的服务端框架。

语言永远只是工具,这句话放在Tcl上再合适不过了。在IC设计这个领域中,Tcl是一门很是常见的语言。他能够用于描述时序和管脚约束文件,UPF信息,也能够用来搭建简单的工做平台。它既是不少IC领域EDA工具默认支持的脚本语言,也是这些工具配置和输出的文件格式。所以,可以读懂Tcl,掌握Tcl语言的基本语法,就能够帮助你更好的使用EDA工具,真可谓是Tcl在手,天下我有!

可是,成也萧何败萧何,正如前文一开始提到的,仅仅掌握了Tcl的语法还远远不是所有。不一样的EDA工具对Tcl脚本提供的命令和参数支持都是不同的,每当你须要为一种新工具编写Tcl脚本时,都必需要熟读官方给出的用户手册,了解这种工具支持的Tcl命令结构,才能确保写出的脚本是能够被正确执行的。

E) NCVerilog/ VCS/ ModelSim/ iVerilog

以上三种都是比较业界比较主流的仿真工具,其中NCVerilog和VCS都只支持Linux平台,而ModelSim貌似是同时支持Linux平台和Windows平台的。可是无论哪种,我都但愿你们能意识到两件事:第一,仿真器和波形查看器是两回事,本条目介绍的只是仿真器,仿真器的工做原理跟波形查看器是有天差地别的,同时因为IEEE对标准波形文件*.vcd格式的规范,任意仿真器都是能够和任意波形查看器组合使用的。第二,仿真器一般是没有图形界面的,为了更好地使用仿真器,你要熟读本身经常使用仿真器的用户手册,了解一些常见需求的命令行参数,至少要作到了解以下内容:如何指定编译的文件类型,如何指定编译文件清单,如何指定索引目录,如何指定仿真精度,如何指定临时的宏变量,如何指定语法检查的严苛等级,如何混合编译由多种语言写成的工程,如何调用不一样波形生成工具的pli接口,如何配合SDF反标进行后仿等等。

不一样仿真器的功能其实都大同小异,可是是否是只掌握一种仿真器就能够打遍天下无敌手了呢?固然不是。在实际的工程中,咱们常常用到第三方IP核,有时候出于保密的须要,第三方IP核会以加密二进制文件的方式提供,加密二进制文件长啥样呢?它们通常以“*.vp”格式命名,文件的开头部分就是标准的Verilog语法,可是在一行注释以后就所有变成了乱码。一般乱码以前的那行注释会指定该加密二进制文件支持的仿真器类型。因此你看,若是你是一个重度VCS使用者,而有一天项目经理忽然塞给你一个只支持NCVerilog的加密文件,你心里必定会有千万只草泥马呼啸而过。

若是你是一个开源工具的死忠粉,那么你能够考虑使用Icarus Verilog (iVerilog)进行仿真编译。iVerilog编译器和其自带的vpp仿真器是基于C++开发的,支持Verilog全系列的IEEE标准,但遗憾的是,iVerilog目前对System Verilog的支持还至关有限。iVerilog是跨平台的,不管你喜欢用Windows, Linux仍是OS X, iVerilog都提供了很是便捷的安装方式。

F) SimVision/ DVE/ Verdi/ ModelSim/ gtkWave

与上面的仿真器相对应,以上三种也是业界比较主流的波形查看工具。全部的波形查看器都必须支持标准波形文件*.vcd格式,可是因为*.vcd格式的存储性能并很差,冗余信息过多,因此各家波形查看工具都纷纷推出了本身独家支持的波形文件格式,如DVE的*.vpd,Verdi的*.fsdb,ModelSim的*.wlf, SimVision的*.shm等。一般波形查看工具独家支持的文件格式都具备较高的压缩率,举例来讲的话,一般1G左右的*.vcd格式波形转换为*.vpd格式后只有40MB左右,而转换为*.fsdb后一般会更小,所以将标准波形文件*.vcd转换为其余压缩格式更加有利于数据备份。

若是但愿在仿真过程当中不生产*.vcd,而是直接生成压缩率更高的其余波形查看器专用格式,则须要调用对应工具提供的pli接口,同时配合测试平台代码中的系统函数调用(如$fsdbDumpOn等)来完成。

说了这么多,不要觉得*.vcd格式就一无可取了,再怎么说这也是IEEE规定的标准格式,其余不一样压缩格式的波形文件之间若是须要相互转换,通常都是要先转换为*.vcd后再转到目标压缩格式去的。另外,在芯片的量产标准化测试环节中,通常规定采用的激励文件格式也必须是*.vcd,因此无论你平时习惯使用什么波形文件格式,*.vcd的产生方法都是必需要熟练掌握的。

对不起,上一段最后一句是错的,近期负责量产方面的事情,对这一块终于加深了了解,实际量产测试环节中ATE环境目前主要使用的激励文件格式主要有两种,分别是*.wgl和*.stil。这两种文件格式与*.vcd及*.fsdb等是有本质不一样的。*.wgl和*.stil格式是基于周期数和电平向量的波形文件,而*.vcd和*.fsdb是基于时间和变化的。换句话说,在*.wgl和*.stil里,你会看到相似“0101010100”这样的信号描述,他完整记载了全部信号随时钟周期数(而非时间刻度)的变化过程,若是你以10MHz的时钟频率来播放这个波形,那么他产生的信号长度就是10个100ns,若是你以100MHz来播放则长度为10个10ns,这就是基于周期数记录波形的含义。同时,在*.wgl和*.stil波形里,信号是以向量的形式完整记录的,假如波形里有2个信号,“11”,“10”,“00”这三个向量就表示第一个信号在连续的三个周期里分别是“高高低”,而第二个信号则是“高低低”,这就是基于周期数和电平向量的完整含义。与此相对的,在相似*.vcd这样的波形文件里,常常能够看到#1000 1signal这样的表述(此处的signal一般会用相似#这样的字符表明它的id号),它表示过了1000ns后signal变成了高电平。因而可知,*.vcd文件本质上是经过记录时间增量和信号的变化沿来表示波形的。

那么问题来了,平时咱们的仿真结果都是基于时间的类*.vcd格式,若是量产测试的激励必须是基于周期数的类*.wgl格式,要怎么办呢?目前市面上有一些能够将*.vcd转换为*.wgl格式的软件工具,可是受权收费不菲,建议有可能的话,设计人员最好在设计测试激励时就考虑到这一点,经过脚本或者其它方式直接生成*.wgl文件进行交付,若是只能提供*.vcd格式,请确保激励波形能够按统一的固定周期长度进行切割转换,不然在进行波形格式转换过程当中可能会存在大量反复工做和沟通问题。

一样的,若是你但愿使用开源的波形查看器的话,gtkWave将是你的不二选择。和iVerilog相似,gtkWave也是跨平台的,并且简单易用,支持*.vcd标准格式,同时独家支持高性能压缩格式*.lxt和*.fst(gtkWave自带vcd转fst的转换器,只需在运行过程当中加入参数调用便可)。

G) Vim/ Emacs

常常看到一些Verilog新人提出这样一个让人哭笑不得的问题:“请问通常Verilog编程用什么样的软件?

首先,Verilog是一种电路描述语言,它本质上可能跟电路图的血缘还更近一些,至少不该该把这个描述过程说成是“编程”。其次,写Verilog其实并无什么专门的软件,大部分业界的工程师都是用Vim或Emacs这样原始粗犷的文本编辑器来写Verilog代码的,若是你愿意的话用Notepad或Texteditor来写也何尝不可,只是若是你有深刻了解过Vim或Emacs的话,天然就会明白这么多人选择它们的缘由所在——提升效率。

你去问Vim或Emacs的使用者,为何说这玩意能提升效率,多半对方回你的第一句就是:由于能够丢掉鼠标啊。显然这样一个结论并不能让人信服,而实际上这也只是它们众多优势中的一个而已。那么究竟为何能够提升编程效率呢?核心缘由固然是,由于借助它们,你能够用编程的方式来编程!听起来优势拗口对不对,不要紧,请听我解释。

举个例子:若是你设计的模块须要对外输出100个寄存器,每一个寄存器的位宽等于他的编号,若是使用普通的文本编辑器,你须要手工写下output reg reg_0到output reg[99:0] reg_99这100行代码,即便用上复制粘贴,你也须要逐行手工修改每行代码里的信号位宽和编号。可是,若是借助Vim编辑器的命令功能的话,你只须要写下for ($i=0;$i<100;$i++) { print("output reg[$i:0] reg_$i\n");},而后在同一行按shift+v,输入:!perl回车,而后就你能看到前面输入的那些代码被替换成了你原本想输入的100行内容。 以上是一个稍微复杂的例子,可能你们平时不必定会遇到这种需求,可是如下状况呢? > 你是否曾经忘记在每行代码末尾加上”,”或”;”符号,编译失败后才发现须要逐行补上?若是使用Vim编辑器的话,只须要用shift+v选中须要修改的行,按下:’<,'>s%$%;%g就能够了,熟练以后整个过程不超过5秒钟。
> 你是否曾经在代码写完以后被老大臭骂一顿缘由是你没有把全部的reg和wire定义都放到文件的统一位置(如第38行)?若是使用Vim编辑器的话,只须要使用:g%^\s*reg\s*%m 38加上:g%^\s*wire\s*%m 38就能够了。
> 你是否曾经被要求删除某个文件中全部的注释?只须要:%s%//.*$%%g就能够了。
> 你是否曾经须要把一个模块例化256次,而后由于每次例化的一点微小不一样致使你不能直接使用for循环?不要紧,用qq录像功能,你只须要操做一次,而后使用256@q就能够把你的动做自动重复256次啦。
> 你是否曾经遇到键盘坏掉了,“a”键常常失灵甚至没有反应?不要紧,用:inoremap ‘ a把‘键从新映射为a键吧。

相似的例子简直数都数不完,更多内容参见与Verilog有关的Vim实用技巧

因此说,使用Vim或Emacs最大的好处就是,你会感受到你的大脑比手更忙,由于从你想清楚到代码写好只须要花费极短的时间。你能够把所有精力投入到代码的内容上,而不是代码输入这个机械的过程当中,就好像用打字机代替毛笔的感受同样。只要是你能用编程描述清楚的事情,Vim就能够代替你快速完成,而前提就是你要先学会大量的Vim命令和正则表达式,以保证你的表述能被编辑器正确理解。

G) SVN/ CVS/ Git

以上三种都是目前比较主流的“版本管理”工具。什么是版本管理?简而言之,就是一种用于记录和查询文件版本改动的工具,一般都会被部署在公共服务器上,以保证数据的安全和可恢复。在项目的开始阶段,首先须要建立好版本管理的根目录,而后由不一样的工程师逐一把本身的设计文件首次加入到版本管理的各级子目录下。在项目执行的过程当中,每当有人修改一个文件,都须要经过版本管理工具上传代码并注释改动内容,版本管理工具会自动检查改动内容与服务器上的最新版本是否冲突(冲突的意思便是说,在该工程师改动这个文件的过程当中,有其它人也对该文件的同一行代码进行了改动并上传了新版本),若是没有冲突,则会自动将新上传的改动合并到当前最新版本,反之,则将冲突部分进行对比显示,让工程师手工判断应当如何合并冲突行的内容,解决冲突后能够再次从新上传。

SVN和Git都是跨平台的版本管理工具,其中SVN是必须在线工做的,而Git是能够离线工做的。当你须要上传代码的时候,若是你使用的是SVN,则你必须保证从你的计算机到服务器端的通讯是畅通的,而若是你使用的是Git的话,因为Git有本机仓库的概念,在你没有主动与服务器端同步以前,全部版本管理都是在本机仓库上完成而不须要与服务器通讯的,这样即便是在离线环境下也能够最大限度地保证代码版本的可恢复性,同时也节省了在移动环境下工做时的传输流量。Git是开源的,最先兴起于互联网行业,目前也有逐渐在其余行业里普遍使用的趋势,以之为基础的开源社区GitHub更是为它的繁荣起到了重要的推进做用。

CVS是一款比较老的版本管理工具,只能在Linux平台下运行,不支持目录的递归添加和重命名,用起来略有些麻烦,不过由于目前还有不少公司在用,因此这里也顺带介绍一下,并不推荐。CVS和SVN的最大区别仍是版本号的命名思想,在SVN中,任何一个文件的修改都会致使整个工程版本号的更新,而在CVS中,版本号是跟随文件的。所以,在系统的某个时刻,SVN工程中全部文件的版本号都是相同的,而CVS工程下的每一个文件都有一个本身的版本号。CVS的这种版本号设定会给工程管理带来不少麻烦,主要是若是有一天你想把整个工程恢复到以前的某个状态的话,要么是你曾经记录下了当时全部文件各自对应的版本号,要么是你记下了当时的准确时间,要么是你当时给全部的文件打上了标签,不然几乎是不可能的。而对SVN来讲,你只须要记住当时整个工程的版本号便可。

H) ISE/ Synplify/ Vivado/ Quartus

ISE和Vivado都是Xilinx旗下的FPGA工具,其中ISE比较老,官方已经中止更新了,目前最新的版本是14.7,而Vivado做为新一代的FPGA工具一直在继续更新。Quartus则是Altera旗下的FPGA工具,功能和ISE/ Vivado大同小异。笔者平日里对FPGA工具的接触并很少,但从有限的接触体会而言,Quartus比ISE/ Vivado更适合用于学习,入门的门槛更低一些,操做界面也更加简单易学(但千万不要使用6.2版本如下Quartus中自带的波形仿真工具,那是垃圾)。

学习FPGA有助于帮助你们理解“正确的设计 != 正确的RTL”,而是“正确的设计 == 正确的RTL + 正确的时序约束”这一重要理念(不少同窗一直没法从软件编程的思惟中跳出来,也是由于一直没能理解好这个理念)。正确的时序约束一般包括管脚约束和时钟约束,任何一项约束出错都会致使综合出来的电路没法按照预设的频率和时序进行工做。Quartus支持的约束文件格式是*.sdc。ISE和Vivado支持的约束文件格式有所不一样,ISE支持的是*.ucf,Vivado支持的是*.xdc,但因为Xilinx家的工具中内置了约束文件互相转换的脚本,所以只需一个命令就能够在两个软件的工程之间无缝切换。从时序约束的思想上来讲,Quartus与ISE/ Vivado在不少细节上都有所不一样,因此从一个平台迁移到另外一个平台的过程当中依然会有一个学习过程,例如说:Quartus在时钟定义上不太区分管脚输入时钟和内部时钟,但在ISE中则不容许使用管脚输入时钟直接驱动寄存器,而是必须首先通过BUFG/ PLL/ DCM等时钟IP处理后输出方可使用。Quartus对于输入输出的同步数据信号偏移offset in/out和ISE的定义也正好相反,使用过程当中须要尤为注意。最后一句话送给FPGA新手们,千万记住,若是你在设计FPGA工程的时候没有添加任什么时候序约束或时钟约束,请不要问我为何电路工做不正确,本段话的第一句已经回答大家了。

在学习FPGA的过程当中,掌握信号探针工具(signal probe)的使用是很是必要的,有了它们,你们就能够像在仿真软件里那样,把真实FPGA硬件里的物理信号采样抓取到波形查看工具中去进行debug。Xilinx家的信号探针工具叫ChipScope,而Quartus家的叫SignalTap。相对来讲,SignalTap比ChipScope要好用不少,例如说,SignalTap抓取波形的时候,信号名称能够自动识别,而ChipScope会把信号名称自动命名为序号,须要用户手动使用别名进行修改,而其中一旦有一个信号名称写错,就得把该信号之后的所有信号名称从新输入一次。

I) Windows/ Linux/ OS X

相信大多数人的我的计算机使用的都是以上系统或相似以上系统的其余系统吧。以上3个系统,对于专业的数字IC前端设计人员而言,工做的方便程度(注意,是专业人员的方便程度,而非学习曲线的陡峭程度,这里是指均已达到熟练掌握的前提下对于工做效率的帮助)由方便到困难分别是:Linux > Windows > OS X。在Windows下,你可能须要的工具备Cygwin(模拟Linux shell,带有大部分GNU工具),Modelsim,Debussy(改名Verdi后的版本没有对应的Windows版本), Quartus, ISE等。在Linux下,你可能须要的工具包括Bash/Csh/Tcsh,Modelsim,Quartus,ISE,VCS,Simvision,DVE,NCVerilog,Formality,LEC,Synplify等。而在OS X下(笔者不幸就位于该平台下),你可使用的工具就只剩下Bash/Csh/Zsh,iVerilog,gtkWave这些选择了。

从以上内容不难看出,在工具的多样性角度而言,Linux完爆其它平台,这也是为何绝大多数IC开发公司的服务器都选择部署在Linux下的主要缘由之一。对于我的电脑而言,大部分同窗会选择使用虚拟机来兼顾不一样平台的工具选择,我的建议你们最好在熟练掌握Linux平台及其工具的前提下,同时也了解一下其它平台的解决方案(若是你有在MAC OS X平台IC开发工具的使用建议或者问题,欢迎来稿)

附:数字IC工程师的技能树

今天与同事聊起了IC工程师的修养等问题,结合不久前的一个想法,总结成文,抛砖引玉,欢迎讨论和补充,转载请注明。

RTL语言仅仅就是Diablo里面女巫的火球。。。是首个技能,但你升到20级也就是个火球。。。固然对别的技能是有加成的哦

其余主要技能是,

算法逻辑设计与IP集成评估:

设计的要求基本要看得懂算法文档作实现,定点化和一些数学基础。特定模块的集成要求通常有相应知识背景,遇到问题可以debug进去。

SoC逻辑设计与IP集成评估:

总线,DMA,或者一些挂在总线上的内部设备

接口模块逻辑设计与IP集成评估:

DDR,HDMITunner,AFE,一些非数字信号或者Phy的接口,一般都会从I2C入手,不要光盯着逻辑哦,也能够看看上拉电阻的阻值是怎么算的么,这块上板调试的时间会比coding时间长的多。。。

Chip Level模块设计:

这个基本每颗芯片都是独特的,也是关键的,涉及到clock gen, pad 复用,power domain控制,测试模式等等一堆很杂但很关键又没有方法学保证的问题

脚本初步:

perl TCl 至少可以翻着骆驼书写个自动比对脚本啊什么的吧

验证初步:

模块级别的验证仍是须要作到的,SVassertion等等

ASIC前端流程:

Synthesis STA DFT MBIST FM CDC 作到可以从RTL到交付Netlist算是本级别升满

板级调试能力:

LA 示波器等等基础的仪器,和你所设计模块的周边电路,FPGA的流程

软硬件协同调试:

这个技能我尚未加过点。。。但以为应该是属于火墙这种关键性的能力。。。

C语言初步:

有想法改算法吗?matlab比较灵活,C的效率比较高

文档阅读写做与Presentation能力:

怎么迅速理解别人的思想和表达本身是很是重要的,在大项目大公司中尤为重要

背景知识基础:

这个算是被动掌握型的技能,每提升一级,各个技能都相应5%的提升。。。包括数字集成电路设计自己,Rabaey那本书能够不时的看看,是否有时会有恍然大悟的感受

关于背景知识基础,数据通讯,移动通讯,多媒体,和消费类电子相关的几大方向均可以做为一门单独的背景知识树,这个技能树每每算法工程师加的点数比较高,设计工程师多看看相应的知识对于融会贯通和进一步提升也是有很大帮助的。数学分析和统计学是这个技能的基础。

写着写着就发现其实IC设计和Diablo仍是有很多相通之处的 -_-b

体力就是体力。。。没体力就挂了。。。

法力是勤奋,一遍遍的施放技能对项目进行攻击,要求你有足够的法力。

敏捷是悟性,没有悟性,脑子转的不快,你的攻击每每miss。。。

力量是沟通,这个单独看有点牵强,和我想把公司的制度文化比做装备有关系。。。至少要拿的动装备么(融入公司)

你们作项目就是打怪,杀怪涨经验升级加技能,捡钱。。。

好的公司文化和制度就是好的装备,虽然我的很重要,但装备也是刷怪的关键。

你们要配合刷怪,设计是女巫,单人的力量刷个普通还行,恶梦和地狱赶上魔免的,就挂吧。

验证是死灵。。。好的验证环境和结构(毒和诅咒)能把打怪的难度下降

项目经理是野蛮人。。。会吼你们。。。可是也是肉盾,直面项目压力。。。

每一代 Diablo 都有新的职业兴起, 2 加入了死灵,如数字时代崛起了验证同样, Diablo3  也多出来猎人等职业 (MEMS? 呵呵 ) ,但这不影响每一个职业都去努力提升本身的技能,为刷怪贡献出力量,衷心的但愿你们都可以乐在其中。

原文地址:http://kellen.wang/zh/the-knowledge-base-of-a-qualified-ic-design-engineer/

相关文章
相关标签/搜索