注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
本帖最后由 大队管理员 于 2020-2-19 09:23 编辑
(写在最开头)这篇文章针对的是EE专业,VLSI专业,对ASIC就业感兴趣的同学们。. 1point3acres.com
2019年春季入职,到现在大概工作了一年有余了。在找工作的时候发过一篇帖子,说的是关于EE专业ASIC找工作的经验分享。大家有兴趣可以看看: https://www.1point3acres.com/bbs/thread-381865-1-1.html现在工作了这么长的时间,首先也有对这个专业也是有了一些新的感悟,同时算是对自己的工作也做一个回顾吧,想在这里跟大家聊一聊工作一年的萌新回头看找工作的那段岁月有什么可以提升的地方,以及从工作的角度上来说,可能企业会希望找到什么样的EE工程师。同时,也会分享一些硬件行业动态。
1. 到底EE,ASIC在工业界中是一个什么样子的关系,在学校里学习EE,在求职过程中到底有哪些职业选择?这个职业是好还是坏?
在我之前的帖子里面说到了,ASIC是一个硬件设计的流程,对于公司来说很重要,对于个人求职者来说,我们只要知道有这个东西就行了。更重要的可能是在这个ASIC工作流之中,对应的有哪些职位呢?所以在工作的一年之中,我对于ASIC职责有了更深刻的理解。.google и
简单来说有这么一些职责/岗位(各个公司不同):
Architecture engineer:负责计算机架构的设计工作,主要是负责设计pipeline,设计并行系统。大家在大学里面学的计算机组成原理和计算机体系架构和这个职业息息相关(当然,要求最高难度也最大,经验很重要,行业呢大佬很多)
Design engineer:主要负责RTL实现,和一部分简单的验证工作。其实就是按照架构师的要求把RTL写出来。大家在大学里面做的verilog的项目大多数都跟这个有关。需要看波形啊,调bug啊。(要求也很高,难度上比架构师要小一些,同样的,主要是经验丰富的工程师为主。)
Design&Verification engineer:主要负责验证工作,对需要测试的模块提供验证环境,找出相对应的bug,并且保证coverage。我个人的感觉大家在大学里面接触的不算多应该。可能是由于大学项目的复杂度不高,以及对验证的要求没有很严格。验证相对于前两个来说是需求量最多,并且年轻人最多的一个方向了吧。不过,并不是代表这个方向的含金量不高!首先对于验证环境的搭建,其实是非常复杂的一个工程,需要很大的代码量,相对于前两个需要知道所有项目的背景知识来说,这个方向其实并不需要追溯过多的芯片发展历史就可以上手去做,对于新手来说是相对友好的。(不过相对于软件行业来说,还是会有很长时间的培训期。)其次,随着芯片真的是越来越复杂,验证的挑战和难度越来越高。对于效率的需求,对于精度的需求越来越大。并且,AI/ML等方法的兴起,带给了验证这个职位很多的启发,越来越多的算法也被用到了验证的流程之中,算是对传统验证流程的一种革命。(代码能力和电路理解能力两头都要抓,两头都得硬)
Formal verification engineer: 这个可能不是所有公司都有,大概意思就是利用数学模型来验证输出是否符合预期。暂时还没有看到针对应届毕业生的岗位,所以暂且不提。. Waral dи,
同时,如果往下细分还有不同的领域(尤其是比较大的硬件公司),例如,每一个职位下都会专门做function, performance, power, infras等等。 同时能即使是同一个领域也有不同的模块。有人是做unit,有人是做fullchip。这样的排列组合出来,所有的职位和可能性就多了很多。当然如果公司不算大的话,需要掌握的技能就不仅仅是一项了。
综上所述,这个职业听起来并不坏(现在的ASIC并不是非常的硬,更像软件开发了),需求是稳中有升。需求主要来自于两个方向:1)各大厂商对于云服务的需求,有data center的需求,就会有定制化硬件的需求。大家可以去看见AWS、微软、google都在招ASIC工程师 2)物联网,有边缘计算的需求,就会有定制化硬件的需求。(并且在物联网方向,可能国内的需求以及发展速度会超过美国。)
大家在找工作的时候根据自己的个人经历,可以按照这几个方向去准备有针对性的简历。针对性的去找适合的岗位。
2. 工作/面试中,到底哪些能力是被看中的?
下面我说的主要是从DV工程师的角度来说的。(毕竟我是做这个的)做design或者做架构的同学可以选择性的听。
2.1 硬性能力包括但不限于:
a) verilog能力。 verilog其实是一门比较冗余的语言,我个人认为几乎所有的公司都有自己的生成verilog代码的办法。所以对于verilog,不仅仅要熟练的理解、掌握verilog。更要有能力上手一些脚本或者程序来生成verilog代码。当然这一点不需要在学习生活中去实现。可能碰到很冗余的代码的时候多思考怎么简化他们就好。
b) systemverilog能力,即使是做设计,也需要做简单的测试,需要能看懂SV,做验证就更不用说了。即使是利用C++写一些Testbench,也需要用到SV。学习资料我会和UVM一起讲.
c) UVM,这个框架我在研究生毕业了还是似懂非懂,直到自己在工作中真正的开始使用了才知道到底是个人什么东西。我相信很多的同学对于UVM也是一头雾水。看网上的资料都在想,这到底是个啥。我在这里简单的介绍下我浅薄的理解。我们需要用软件的思维去理解UVM。我们可以吧UVM看做成一个搭好了的软件框架。需要开发者在框架内去实现自己到底想如何验证RTL的函数。这个框架里面的规定就像API一样,你遵守这个API就能够保证你可以和DUT之间进行通信,保证你可以看到测试信息和结果,保证你可以得到一个相对完整的测试集。同样的,和API有一个小的共性,你只需要知道如何利用UVM,如何遵守规则,具体为什么是这样的规则在最开始学习UVM的时候并没有那么重要。当然随着学习的深入,也可能需要弄清楚到底为什么UVM是这样设计的。我学习UVM的流程大概还是看源码的出来的。由于UVM和systemverilog联系比较紧密,所以我推荐在mentor上面找到一些实例来看看。我自己学习UVM会利用这个:https://github.com/google/riscv-dv google 的一个开源RSIC-V验证项目。视频简介在这里 https://www.youtube.com/watch?v=9y_4ucNO04U 这个项目里面包含了sv,UVM以及RISC-V的基本知识。慢慢看,对于整个工业界的验证流程会有一个比较系统的认知。
d)要会写脚本语言。为什么要写脚本?因为不管是生成代码,还是生成tests都可能碰到很多需要生成重复代码的情况,需要用到脚本来帮助自己提高效率,或者处理数据。所以熟练的运用脚本是必须的。这里还想说一句,到底是用perl还是python呢?我个人意见,如果你没有学过脚本语言,那就用python(毕竟python更新一点,老是在网上看到一些perl要被淘汰了的论调)。如果你学过一种,那就继续用那一种就行了。. Waral dи,
e) 独立设计的能力,需要能够独立完成系统设计,比如硬件的功能,测试环境的搭建,验证功能的实现等等等等。
工作了一年,大致是这么多的感悟,希望我的分享能够解决你的一些疑惑,能够减少一些你的迷茫,或者让你变得更加坚定。谢谢你的观看。 (这个系列应该是等到明年再更新了!). 1point3acres
. check 1point3acres for more.
补充内容 (2020-7-12 13:33):
. 1point 3acres 回头看了一下大家的回复,感受到了大家对这个行业的热情,思考了一下,觉得对大家最实在的帮助就是内推了。可以到NV官网上找到你感兴趣的JOBID,连同简历和第三人称简介发到:aznv2020refer@gmail.com 感谢大家! |