IC设计职位详解之“数字验证工程师”就业必学课程

数字验证处于数字IC设计流程的前端,属于数字IC设计类岗位的一种。在IC设计中,数字验证所占的人数比重是非常多的,很多大公司,数字前端设计工程师与验证工程师的比例已经达到1:3。
  数字验证主要分成几种层次的验证:IP level, unitlevel,fullchip/SoC level, gatelevellevel,硬件加速仿真等。

一、数字验证工程师主要干什么?

1. 阅读各种SPEC
  最重要的一份spec是design spec,就是和你一起合作的好基友设计工程师写的设计文档,比如下面这种:UART IP Core Specification
  其中需要重点了解的是:
  fetures:这个模块需要支持的性能列表。
  IO ports:这个模块对外的IO端口。
  operation mode:这个模块的主要工作模式。
  除了这份详细的设计文档之外,如果这个IP需要用到很多协议,那你自然还要去阅读一些协议文档咯,比如AMBA总线协议,MIPI协议,DDR协议等。
  2. 撰写verification spec
  公司里面,工程师做事情之前都需要出一份详细的文档,验证工程师也不例外,你要出的文档叫做verification spec,其中主要的内容包括:
  验证平台架构:以UVM验证平台为例。
  现在IC行业内,很多公司的验证环境都不尽相同,比如有纯C/C++的环境,有纯UVM的环境,有UVM+C++的环境,甚至还有systemc的环境。总的来说,现在的趋势都是在往UVM的验证环境上转。
  测试用例(test plan)
  test plan的出炉是一个高质量的工作,因为它决定了你验证的工作量,最重要是它决定了你验证的完整度。验证工程师的终极目标就是:覆盖所有的情况,不放过任何一个bug。
  这份东西需要你和designer反复的详细讨论,在后面的过程中,还需要进一步的优化补充这份文档。
  3. 码代码,搭建验证环境
  verification spec完成之后,接下来就要开始码代码了,使用各种验证语言去搭建验证环境,常用的验证语言有C/C++,systemC,systemverilog。
  4. 创建test cases
  根据前面完成的详细test plan去创建验证需要用的test cases,每家公司对test cases的命名有一定规则,比如长这样的:
  在这里插入图片描述

有些公司就直接用数字来给test cases命名。
  还有些公司,直接用脚本来生成test cases,只要把关键的一些设置调好,用脚本一刷,case就全部生成了。
  当然每种创建cases的方法各有优缺点,你进去公司之后,也只能入乡随俗。
  5. debug
  验证环境和测试用例都搭建好了,下一步重点就是仿真和debug了。前面搭环境的时间其实大概只占20%,debug才是最花时间的。
  仿真所用到的工具主要有:
  mentor:questasim
  cadence:NC-sim
  synopsys:VCS
  几款工具一个比一个好,当然价格也是一个比一个贵。工欲善其事必先利其器,要想提高你的仿真和debug效率,工具里面好的功能也要好好研究下的。
  debug主要目的是寻找RTL的bug,当然前面搭建的验证平台也会存在很多bug,最终的目标就是所有的test cases都能完全仿真通过。
  最主要的debug手段有:
  查看log文件:仿真结束会生成很多结果文件。
  看波形:最常用工具就是verdi了。
  每家公司对于验证工程师debug的要求不尽相同,比如AMD,就要求验证工程师能找到最终的root cause,而大多数公司只要求验证工程师能基本定位,然后designer去详细debug。
  6. regression和coverage
  到了项目的后期,所有的case都pass过了,并且比较稳定了,下一步就要开始跑regression和coverage了。
  所谓regression就是把所有的case同时跑一遍,因为大多数case里面会有很多random的机制,所以在不断重跑的过程中,会随机性的出现case fail。这也是regression的主要目的,就是抓出那些极端情况下出现的debug。
  coverage主要包括code coverage和function coverage等,每家公司的要求都不尽相同。
  每家公司跑regression和coverage都会使用脚本来完成,怎么高效顺利跑完,是最关键的问题,最终的结果一般会以网页的形式呈现,直观明了。
  7. support
  前面属于验证工程师的常规任务差不多就完成了,support属于进阶版的。比如项目用的database出问题了,跑仿真用的flow碰到问题了,经常就会叫验证工程师去support,帮忙解决问题。
  当然搞不定也无所谓,但是如果你经常能帮同事搞定这些问题,那你在公司的地位就能与日俱增,升职加薪就更有筹码了。
  8. meeting
  作为验证工程师,和其他工程师一样,经常还有无穷无尽的会议要开,各种review,各种讨论。
  如果你作为会议组织者,请记得事先做好充分的准备噢,不然很容易被人鄙视的。
  所以总结来说,最主要做的两件重要的事情是:编程、debug

二、数字验证主要打交道的人有哪些?

1.验证工程师打交道最多的就是前端设计工程师(RTL设计工程师),一起讨论问题,经常一起debugcase,目的就是让写的verilog代码没有bug。
  2.还经常需要和架构工程师打交道,去了解更多芯片的整体架构和features;
  3.如果你也负责后仿gatelevelsimulation的话,那还经常需要和后端工程师打交道,因为后仿的网表是他提供给你的;
  4.DFT工程师经常也会来找你,因为他也需要做测试和验证,很多时候他的验证平台经常就是从你的验证平台移植过去的;
  5.FPGA工程师也经常会打交道,因为FPGA验证也是数字验证的一种,你们会复用很多的测试用例,他也会经常来找你复现一些错误现场。
  当然,如果你是在一家大公司的话,分工就非常明确,你也就不需要和这么多人打交道了,比如如果你只负责IP level的验证,那基本只要和前端设计工程师打交道就可以了。

三、数字验证需要掌握的技能和条件。

现阶段由于数字验证的平台有很多种,主要的平台有:
  纯verilog平台、SystemC、纯C/C++(CPU验证)、纯UVM平台、UVM+C/C++平台、其他语言混合平台(Matlab等)
  每种平台需要你掌握的技能不大一样,但比较主流的平台是3、4、5三种。一个初级工程师想全部掌握这些技能也很难,如果这些平台你都搭过,就变成老司机了。
  由于验证工程师需要编程,所以掌握编程语言也是必须的,比如掌握下面知识就显得比较重要:
  Verilog、 C/C++、 Systemverilog、 UVM
  另外,验证工程师经常需要流程的自动化,所以一些脚本语言也是必须的:
  Shell、 Makefile、 Perl、 Python
  除了这些外,熟悉一些协议和架构,也是有很大帮助的,比如:
  ARM架构、 AXI/AHB协议、 MIPI协议、 DDR协议等等
  所有的技术类岗位,主要看的两点就是:专业技能(skills)和项目经验(experience)。
  所以除了上面列的这些技能,你能实际做过一两个项目,哪怕是IP级别的验证项目,也是很重要的,尤其是做项目过程中积攒的debug经验。
  如果你是在校学生,早几年懂验证的人极少,所以基本上你只要会verilog,可能就可以找到验证工程师的职位了。现在在校学生通过各种渠道(比如:ic修真院)学习,掌握了上面的这些技能,甚至积累了一两个项目经验。

四、数字验证谁可以学习?

现阶段,数字验证工程师主要以招聘本科以上学历,对专业的要求并不是很苛刻,非集成电路方向也可以,只要你掌握了上面的这些技能,哪怕不相关专业,比如材料、物理、自动化、机械等专业,也是可以成功应聘。

五、数字验证发展方向?

未来的发展,一些人会一直做技术,成为一名资深验证工程师,有些人会成为验证经理,做一些管理类的工作。好消息是大部分人只要一直做下去都能成为一名资深工程师(STAFF级别)或者经理。
  有少数人也可以转,比如转去做架构工程师,去EDA公司做应用工程师(AE),要么就索性创业。总的来说,绝大多数验证工程师还是会一直做下去,毕竟这个岗位还算一个天花板不低的岗位。
  在这里插入图片描述
在这里插入图片描述

关于《数字验证》就介绍到这里!!!
  你唯一需要保障的只是时间和坚持!
  了解→
  就业、面试、课程、未来职业规划@小编
  喜欢你就分享,有想法、有疑问你就@私信我,实在不行还可以在评论区哔哔…

  • 3
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
串行通信IP核 用于FPGA -- File Name: Baud_rate_generator.vhd -- Function: Baud rate generator for uart communication -- System clock:32MHz -- ************************************************************ -- 7.2 Build 11/02/2009 Full Version 1.0 -- Copyright for limang -- ************************************************************ library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; -- ************************************************************ -- Port Description -- clk: System clock -- data: Decision the Baud rate -- uart_clk: Clock output for uart -- ************************************************************ entity Baud_rate_generator is port ( clk:in std_logic; data:in std_logic_vector (3 downto 0); uart_clk:out std_logic ); end entity Baud_rate_generator; --*********************** -- Baud_rate for input --*********************** --| data | Baud_rate | --| 0000 | 1200 | --| 0001 | 2400 | --| 0010 | 4800 | --| 0011 | 9600 | --| 0100 | 14400 | --| 0101 | 19200 | --| 0110 | 28800 | --| 0111 | 38400 | --| 1000 | 57600 | --| 1001 | 115200 | --|others| for updata | --*********************** architecture behave of Baud_rate_generator is constant system_clock:integer:=32e6; signal divisor:integer range 4444 downto 46; signal cnt:integer range 4444 downto 0:=0; signal clk_tmp:std_logic; begin process(data) begin case data is when "0000" => divisor divisor divisor divisor divisor divisor divisor divisor divisor divisor null; end case; end process; process(clk) begin if clk'event and clk='1' then cnt<=cnt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值