首先我们来看自学的路径:

第一阶段

首先你需要有基本的数电基础,明白数字电路运行的原理和一些基本的常识,这个时候推荐你看《数字电路基础》

第二阶段

在懂得了基础的数字电路原理和常识之后,你需要将该数字电路转换成实际的硬件,即需要用硬件描述语言去把这个电路给实现出来,市面上用的最多的还是Verilog,此时需要学习如何用Verilog硬件描述语言与一个具体的数字电路联系起来,需要建立硬件设计的思维和概念,学习基础的语法,并试着要用Verilog写一个简单的设计,如一个二分频电路,简单的加减法器等,并且用Verilog语言搭建一个简单的对自己编写的设计(DUT)的验证环境。

那么这个时候推荐你看夏宇闻老师编写和翻译的书籍:

或者以下这本:

以上两本都可以,时间充裕的话都看一看,把书上的理论和例子看明白,但是光看还不行,还需要动手实际编写代码,仿真跑一跑才能加深对硬件设计的理解。所以啊,你还需要学会使用使用EDA工具,而一般EDA工具都在Linux环境下,因此你还需要熟悉Linux环境的基础操作命令,那么你还需要编写代码,那么你还需要熟悉在linux环境下使用vim编辑器来编写代码,总之你还需要学习:

  • 熟悉Linux环境及其基础操作命令

基本整个芯片行业所需要使用的EDA软件都运行在Linux环境下,设计和验证更是如此,因此首先需要熟悉Linux环境和一些基础命令。

一般情况下大家的电脑要么是微软的Windows要么是苹果的MAC OS,如果你要学习使用Linux的话,你需要首先安装一个虚拟机,一般是VMware,然后再安装一个系统,一般是Ubuntu。

说实话,光摸索准备这些环境和系统,对于新手来说就比较费劲了。

  • 学习vim编辑器来编写代码

当然也可以使用别的代码编辑器,但是vim是最推荐的,可以说它是文本编辑器之神也不为过。

但是新手一般不喜欢使用vim,因为它的编辑方式,不像大家习惯的word或txt文本编辑,它完全是通过命令指令的,简单说要求你基本放弃使用鼠标来完成文本的编辑。很多人觉得很不习惯,很不方便使用,但是如果你用习惯了的话,你会发现vim简直是程序员最好的编辑器。

  • 学习主要的前端设计验证EDA软件

学习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的书籍,基本有如下一些,下面来分析一下内容特点及其不足的地方:

  • 张强的《UVM实战》

  • 优势:

    • 中文
    • 对于新手比较友好,即比较通俗易懂
    • 提供了实例代码
  • 劣势:

    • 没有提供仿真环境

    • 部分内容陈旧(UVM1.1)或不推荐使用

    • 部分内容不全

    • DUT过于简单,不太适合教学

    • 虽然已经较为通俗易懂了,但是还不够

    • 缺乏一步一步从SystemVerilog切换到面向对象到UVM的手把手教学过程

  • mentor学院的《uvm-cookbook》

  • 优势:

    • 内容较新,符合最新的UVM1.2(业界使用最多)和UVM1800.2库文件
    • 有一些较为高阶的用法和实际工作中的使用参考
    • 提供了部分实例代码
  • 劣势:

    • 英文,对英文专业水平一般的人群增加了学习难度

    • 没有提供仿真环境

    • 部分内容重复啰嗦

    • 部分代码交代的不够细致,且没有提供检索路径,即虽然提供了一些实例代码,但你基本找不到

    • 讲解不够通俗易懂,对于新手不够友好

    • 没有一个系统的DUT例子,导致整篇实例代码不够连贯

  • 《The UVM Primer》

  • 优势:

    • 内容较为连贯,DUT示例难度适中,具有代表性
    • 提供了示例代码
  • 劣势:

    • 英文,对英文专业水平一般的人群增加了学习难度
    • 没有提供仿真环境
    • 部分内容较为啰嗦
    • 部分章节顺序不合理,显得有些混乱,调整后教学效果会更好
    • 2013年的书籍,内容陈旧
    • 很多UVM的机制讲解不清,不够系统,比如TLM通信,phase机制,消息动作等
    • 存在部分bug,导致给的DUT代码和其时序波形不符
  • UVM官方用户手册

  • 优势:

    • 内容非常详细
    • 提供了示例代码
  • 劣势:

    • 英文,对英文专业水平一般的人群增加了学习难度
    • 没有提供仿真环境
    • 内容过于详细,以至于只能当作字典来查询,而不适合学习
    • 对于新手不够友好,阅读难度较大,甚至无从下手

自学书籍不是不可以,就是效率较低,而且每个人基础不一样,时间成本很高,学习曲线陡峭。

那么还可以选择培训班网课来学习,就是要付出一定的费用成本,但相比应届硕士年薪20W起步,就职3-5年30~50W来说,基本说性价比还是很高的,因此如果预算足够的话,报班也是个不错的选择。

市面上主要的培训班有:

  • E课网

直通链接如下:E课网数字验证就业课程链接

网络上褒贬不一,自己评断哈。不过现在直接培训班出来的越来越难就业了,还是基本要求你是相关行业硕士学历+扎实的基础才比较容易拿到offser。

  • 路科验证的V2 Pro验证课程

直通链接如下:路科验证V2Pro课程

里面有详细的介绍视频,大家可以自行参考。

对于路科V2pro的课程的内容以及观点参考:

  • V2.1 验证系统理论和SV验证

    • 有基础的概念就好,其他的应该在项目中体会,否则就显得过于啰嗦了;
    • SV语法,相对简单基础,且有很好的书籍可以参考,建议自学了解,应该把重心放在UVM上;
    • 事实上并不需要过于精通SV或者说不要一开始花费大量时间限于细节却忽略了实际的应用,这样很容易得不偿失,而且UVM已经把底层的东西用SV封装好了。
  • V2.2 UVM入门与进阶

    • 很重要,建议重点学习。
  • V2.3 UVM项目实战

    • 很重要,建议重点学习;
    • 项目不宜过多,应该以说明问题帮助理解掌握为目标。
  • V2.4 验证流程管理

    • 对于新手来说,进去就是干活,项目的管理应该在实际项目中学习;
    • 因此,获得进入一个不错企业平台的敲门砖比学这些“管理”既实在又重要得多;
    • 而获得敲门砖的重点不在这,重点在于不错的学历背景+扎实的基础+认真完成的项目或积极认真的工作态度。
  • V2.5 虚拟项目

    • 最好是你的毕设,否则不值得投入过多时间。
    • 因为你的最终目标是拿到敲门砖,而不是在此之前就傻乎乎的自己蒙头搬砖,因为当你进入一个不错的平台之后,会有质量高得多的真实项目来帮你锻炼提高,而不应该是大量的虚拟项目,而此时你在提高技能的同时也可以获得一份不错的薪水,这才是明智的效率最高的精进方式。
  • M学院的《芯片验证-UVM理论与实战》

直通链接如下:《芯片验证-UVM理论与实战课程》

还在连载更新中,视频+笔记,总课时预计不少于530节,并且提供了实战所需的仿真环境和实例代码,包括了所有需要的EDA软件以及每个章节都可以直接仿真运行的代码,讲解内容非常详细。

该课程根据内容需要,借鉴吸收了市面上UVM相关手册文档,结合实际的工作经验,同时考虑让新手更容易学习接受,补充了大量UVM精华内容和使用技巧,可以基本满足芯片验证的工作需要。

综上,其实前俩个课程都还不错,内容蛮全的,但是个人觉得最大的问题是啰嗦,简单的问题说了那么久,一个视频就大几十分钟,简单的问题很容易被复杂化,对于新手比较难以接收,这种感觉似乎回到了以前老师在课堂上讲课,学生想在下面睡觉的感觉。

最后来给几个课程做一个简单的比较:

课程名称内容价格
E课网数字IC验证就业课比较全,效果自己评断25800
路科验证V2pro验证课程比较全,对比参考上文9580
M学院的《芯片验证-UVM理论与实战》内容较全且有侧重,通俗易懂,自学可操作性强性价比高很多

总的来说,如果预算充足,建议报班学习,省去了很多自己摸索的时间。

以上提到的教材,可以关注公众号,回复【教材】获取,仅供学习使用。

公众号:程序员Marshall

更多推荐

关于如何自学数字验证+SystemVerilog+UVM,该怎么进行?