工作五年了 从刚毕业的小菜鸟 到现在也经历了不少Project
发现版上对于IC验证工程师的资料很少
来分享一下自己的工作经验
希望能让更多人知道IC验证工程师的工作内容
如果各位有任何问题欢迎指教及讨论
以下 Digital Designer(简称DE)
指称主要工作是用HDL(台湾多用Verilog)设计数位IC电路的工程师
Digital Verification Engineer(简称DV)
工作相关技能:
1. Linux + shell script
2. scipt language (Perl, Python, Tcl, ...)
3. simulator (IUS, VCS, ModelSim)
4. debugger (通常是Verdi)
5. SystemVerilog/VMM/UVM
6. FPGA
7. 各种Protocal(AMBA, SPI, I2C, SDIO, ...)
IC验证工程师的工作内容说白了很单纯
怎么确定RTL设计是对的?
这也是很多公司不重视DV的原因
验证是种概念
DE把RTL写出来当然会想办法验证自己写的东西是否正确
为什么还需要DV呢?
我们分两个层面来看 IP level和system level
以IP level来说 例如32bit加法器(a+b=c含overflow bit)
这个design超简单的吧
但是要测试完所有的组合是不太可能的
a, b 各有 32bits 组合接近 2^64 种
每秒跑一百万组测资要跑超过50万年......
基本上很多DE就是随便写几组测资试试看
那要跑多少测试资料才算够呢?跑一百万组应该很多了吧
以DV的角度来看这题 重点不是测资数量的多寡
而是用coverage的数据来说话
包含 code coverage, toggle coverage, branch coverage, functional coverage
例如就算跑了一百万组测资 如果有几个bit一直都是0
有可能 input 1 时会发生错误但是没有发现
我的经验是DV的价值在于“如何制订计画,在有限时间内提高IC设计的可靠度”
执行的技能是其次 就算DE自己写verilog testbench验证
只要观念正确也可以有很好的效果
DV可以协助DE突破盲点 也可以提供技术让验证更有效率
从system level来看 验证的复杂度就更高了
通常每个IP都有自己的owner 系统又会由另外一个人整合
有做过design的都知道 就算每个IP测试都是正确的 整合完还是常常发生问题
就算系统运作正常 还可能有效能不足的问题
这通常是因为各个IP间该如何沟通 定义不清楚或是不完整
所以做系统验证必须要对整个系统架构有足够了解
当然 有人会认为做系统整合的工程师也可以做到这件事
某种程度上来说没错 只要系统整合的工程师是超人
以上工作内容都能吃下来的话
为了效率 另外找DV来做这件事
除了平行展开做事会比较快 专业分工也可以做得更深入
总结来说 DV的工作内容大概就是
1. 了解数位设计内容
2. 制订验证计画
3. 建立自动化验证环境并执行
以上是个人经验分享
如果对验证有兴趣的话
可以找《SystemVerilog for Verification》这本书来参考看看
希望台湾的IC设计公司能多重视验证一点...