首先我们来看自学的路径:
首先你需要有基本的数电基础,明白数字电路运行的原理和一些基本的常识,这个时候推荐你看《数字电路基础》
在懂得了基础的数字电路原理和常识之后,你需要将该数字电路转换成实际的硬件,即需要用硬件描述语言去把这个电路给实现出来,市面上用的最多的还是Verilog,此时需要学习如何用Verilog硬件描述语言与一个具体的数字电路联系起来,需要建立硬件设计的思维和概念,学习基础的语法,并试着要用Verilog写一个简单的设计,如一个二分频电路,简单的加减法器等,并且用Verilog语言搭建一个简单的对自己编写的设计(DUT)的验证环境。
或者以下这本:
以上两本都可以,时间充裕的话都看一看,把书上的理论和例子看明白,但是光看还不行,还需要动手实际编写代码,仿真跑一跑才能加深对硬件设计的理解。所以啊,你还需要学会使用使用EDA工具,而一般EDA工具都在Linux环境下,因此你还需要熟悉Linux环境的基础操作命令,那么你还需要编写代码,那么你还需要熟悉在linux环境下使用vim编辑器来编写代码,总之你还需要学习:
基本整个芯片行业所需要使用的EDA软件都运行在Linux环境下,设计和验证更是如此,因此首先需要熟悉Linux环境和一些基础命令。
一般情况下大家的电脑要么是微软的Windows要么是苹果的MAC OS,如果你要学习使用Linux的话,你需要首先安装一个虚拟机,一般是VMware,然后再安装一个系统,一般是Ubuntu。
说实话,光摸索准备这些环境和系统,对于新手来说就比较费劲了。
当然也可以使用别的代码编辑器,但是vim是最推荐的,可以说它是文本编辑器之神也不为过。
但是新手一般不喜欢使用vim,因为它的编辑方式,不像大家习惯的word或txt文本编辑,它完全是通过命令指令的,简单说要求你基本放弃使用鼠标来完成文本的编辑。很多人觉得很不习惯,很不方便使用,但是如果你用习惯了的话,你会发现vim简直是程序员最好的编辑器。
学习Synopsys的VCS或者Cadence的NC-Verilog,这两个都可以,但是业界使用VCS相对较多,因此比较推荐大家先学习VCS。至于NC-Verilog,功能类似,如果以后就职的公司使用的是NC-Verilog而不是VCS的话,如果你已经学会VCS的话,NC-Verilog会很快上手。
关于VCS的学习,对于新手来说,基本只能看官方的文档手册,首先全英文,然后又缺乏实际的演示和脚本示例,所以自学起来相对比较费劲的。
对于第一阶段和第二阶段的学习和环境准备,如果你是在读研究生,跟着师兄师姐那学习,又有现成的Linux仿真环境和EDA仿真工具,那么会让你省很多事,否则还是比较麻烦的。
当你搞定了上面两个阶段,那么你就该进入第三阶段的学习了。
通过前面的第一和第二阶段,你已经可以很熟练的使用硬件描述语言Verilog写一个简单的设计并搭建一个简单的验证环境了,但是还不够深入,或者说不符合业界对于设计和验证流程的基础规范和要求,此时你需要学习更高级的语言和工具,来进一步加深你对数字芯片设计和验证的理解了。
那么你可以开始学习SystemVerilog这门兼顾硬件设计和验证的语言,它非常强大,吸收了面向对象的编程思想,提供了与C程序的DPI接口,而且提供了断言Assertions。如果有时间,你应该仔细学习一下里面的各个语法和使用方式,但是不建议大家一开始就扎入到很多细节中去,你应该抓大放小,即抓住主要的先放弃此次要的,先有一个全局的认识,掌握最重要的内容部分,然后再在实际的工作中,遇到问题解决问题,在这个过程中不断去精进一些细节,这样才是效率最高的方式,或者说这才是做工程的方式,因为我们最终的目的是应用知识技能工具去解决问题,而不是为了学习而学习,最终细节过多却什么也没记住。自己看上去很努力,感动了自己,却收获甚微,这也是自学中最容易犯的一个问题。
所以建议在这一阶段,如果有时间粗略翻读一下SystemVerilog的语法书,遇到不懂的地方暂且记下然后跳过,后面再去解决,推荐的书有:
当然如果英文不错,建议直接看英文(第三版),上面中文是第二版,虽然差别不大,但是个人觉得英文更地道,毕竟翻译有一些细微的理解性偏差的部分。
如果还有余力,可以再阅读讲解SystemVerilog来做设计的书籍作为一个补充:
在这一阶段,你需要了解SystemVerilog的基础语法和使用,需要做到能够将之前第一和第二阶段使用Verilog语言编写的简单的设计和验证环境用SystemVerilog语言去改写,建议只改写验证部分就可以了。因为业界一般还是用Verilog语言来做设计,毕竟Verilog更贴近底层,而SystemVerilog是更高阶的语言,更适合抽象层面来做验证,当然也可以做设计,只是用的少而已,说到底一般使用Verilog而不使用SystemVerilog的原因主要是为了确保后面综合和后端尽量不出错。
第四阶段,你需要学习使用验证方法学UVM来向业界标准看齐,因为如果以后要做数字芯片验证岗位,这是一项基础的技能。其实如果做设计的话,也应该了解,因为一般一个项目设计和验证是需要紧密配合的。
而学习UVM基本两个途径,一个还是看书自学,另个则是报培训班上网课。
首先我们来讲看书自学的方式。
市面上讲UVM的书籍,基本有如下一些,下面来分析一下内容特点及其不足的地方:
优势:
劣势:
没有提供仿真环境
部分内容陈旧(UVM1.1)或不推荐使用
部分内容不全
DUT过于简单,不太适合教学
虽然已经较为通俗易懂了,但是还不够
缺乏一步一步从SystemVerilog切换到面向对象到UVM的手把手教学过程
mentor学院的《uvm-cookbook》
优势:
劣势:
英文,对英文专业水平一般的人群增加了学习难度
没有提供仿真环境
部分内容重复啰嗦
部分代码交代的不够细致,且没有提供检索路径,即虽然提供了一些实例代码,但你基本找不到
讲解不够通俗易懂,对于新手不够友好
没有一个系统的DUT例子,导致整篇实例代码不够连贯
优势:
劣势:
优势:
劣势:
自学书籍不是不可以,就是效率较低,而且每个人基础不一样,时间成本很高,学习曲线陡峭。
那么还可以选择培训班网课来学习,就是要付出一定的费用成本,但相比应届硕士年薪20W起步,就职3-5年30~50W来说,基本说性价比还是很高的,因此如果预算足够的话,报班也是个不错的选择。
市面上主要的培训班有:
直通链接如下:E课网数字验证就业课程链接
网络上褒贬不一,自己评断哈。不过现在直接培训班出来的越来越难就业了,还是基本要求你是相关行业硕士学历+扎实的基础才比较容易拿到offser。
直通链接如下:路科验证V2Pro课程
里面有详细的介绍视频,大家可以自行参考。
对于路科V2pro的课程的内容以及观点参考:
V2.1 验证系统理论和SV验证
V2.2 UVM入门与进阶
V2.3 UVM项目实战
V2.4 验证流程管理
V2.5 虚拟项目
直通链接如下:《芯片验证-UVM理论与实战课程》
还在连载更新中,视频+笔记,总课时预计不少于530节,并且提供了实战所需的仿真环境和实例代码,包括了所有需要的EDA软件以及每个章节都可以直接仿真运行的代码,讲解内容非常详细。
该课程根据内容需要,借鉴吸收了市面上UVM相关手册文档,结合实际的工作经验,同时考虑让新手更容易学习接受,补充了大量UVM精华内容和使用技巧,可以基本满足芯片验证的工作需要。
综上,其实前俩个课程都还不错,内容蛮全的,但是个人觉得最大的问题是啰嗦,简单的问题说了那么久,一个视频就大几十分钟,简单的问题很容易被复杂化,对于新手比较难以接收,这种感觉似乎回到了以前老师在课堂上讲课,学生想在下面睡觉的感觉。
最后来给几个课程做一个简单的比较:
课程名称 | 内容 | 价格 |
---|---|---|
E课网数字IC验证就业课 | 比较全,效果自己评断 | 25800 |
路科验证V2pro验证课程 | 比较全,对比参考上文 | 9580 |
M学院的《芯片验证-UVM理论与实战》 | 内容较全且有侧重,通俗易懂,自学可操作性强 | 性价比高很多 |
总的来说,如果预算充足,建议报班学习,省去了很多自己摸索的时间。
以上提到的教材,可以关注公众号,回复【教材】获取,仅供学习使用。
公众号:程序员Marshall