购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.7 选择设计还是验证

设计和验证是两个不同的岗位,各自有其特点,以及相关的技能树。设计的重点在于对电路的把握,技能树集中在如何用最小的面积/功耗做出特定功能的电路,因而更注重设计思路,对语法的要求较少,很多有经验的工程师用简单规范的语法就能清晰地描述一个功能较为复杂的电路。验证的重点在于找错误,不要求会设计电路,却需要有敏锐的洞察力,善于“顺藤摸瓜”,善于从一个不起眼的异常中发现设计中的问题。好的验证对客户的实际应用场景有深入理解,可以在搭建验证平台时把客户的需求和注意点都囊括进去。为了做到这一点,验证需要使用较为复杂的语法搭建验证环境。

在设计语言方面,IC设计最常用的是Verilog描述语言,而验证常用System Verilog。Verilog是System Verilog的子集,即两者有公共的语法部分,但Verilog语法条目少,System Verilog语法条目多,而且System Verilog中融合了一些面向对象的语法成分,更类似于C++。验证为了达到验证目的,除了System Verilog,验证还可能用到C语言、扩展的System C语言,以及C++语言等。

在应知应会的工具方面,IC设计需要学习掌握的工具较多,如VCS、Spyglass、DC、PT、Formality、lc_shell等,而验证基本上一个VCS或Incisive就能满足其大部分的工作要求。对于脚本语言,如Perl和Python,在设计和验证中都有应用。

在主要工作内容方面,IC设计初期的一两年内其主要工作不是设计,而是熟悉各种工具的使用,在项目中扮演一个语法检查者、规范监督者的角色,俗称“打杂”。以后将逐渐接触模块设计,进而发展到整体架构的设计。验证初期的主要工作是一些简单模块的验证,例如检查设计中寄存器是否能够读写正确,地址和初值是否正确等,这些工作一方面需要细心,另一方面也能加强新人的验证能力和语法技巧。有一定经验的验证工程师可以进行验证案例的编写、设置并调整验收标准、搭建较复杂的验证环境,以及编写较复杂的验证参考模型等。

在学习重点方面,IC设计初期的学习重点是设计方法论和小型功能模块的设计,例如,简单计数器、同步/异步FIFO、各种SoC总线协议、跨时钟异步处理等,而验证工程师初期的重点学习内容是验证流程,熟悉验证平台结构,记忆并熟练运用System Verilog及UVM验证语法等。

读者应注意上文中工作内容和学习重点的区别。前者指工作时被分配的任务,而后者是作为学习者应该关注的重点。本书之所以分开列举,是因为工作内容往往不是学习的重点,例如,IC设计如果在前期只关注了分配给自己的任务,熟悉了各种工具并能很好地支持项目进度,但从未自己动手写一些小的设计,那么其进步仍然是比较缓慢的。同样道理,如果验证新手每天只专心扫描寄存器,而对验证平台上的模块分工、芯片功能没有深入的认识,他也将长期停留在这一阶段,只能被动地接受指令并按照他人的指示寻找可能的错误,而不是自己设法发现错误,而好的验证工程师都是主动验证,即自己根据DUT功能制定验证案例,自由调整验证观察项和预期结果,并对验证的最终结果负责。

在入门的难易程度方面,设计和验证在初期的学习阶段都比较枯燥乏味。验证在学习知识、经验成长速度方面要快于设计。设计中的一些电路理论较为抽象,要实践这些抽象的概念也需要常年的工作和流片积累,而验证是一种面向计算机和服务器的编程工作,平时的工作就是主要的经验来源。

验证的工作更为辛苦,因为其工作伴随芯片从策划到最终流片的全过程。初期要和设计一起了解需求和应用环境,并筹划搭建验证平台。中期要了解设计接口和模块连接,进行模块验证。后期要进行整体验证、回归测试、覆盖率收集、后仿等工作。往往设计只花了很少时间改一个问题,而验证要将所有的测试案例都重新执行一遍,以确定修改无误,但这里的“辛苦”指的是验证工作量比设计工作量多,并非验证岗位一定比设计岗位忙。例如验证工作量是设计工作量的2倍,而人员招聘也是2倍,平均到每个人,设计与验证的工作强度就基本相同了。这也是验证人力缺口大、工作比较容易找的原因。

设计与验证对于数字IC的开发都十分重要,因而对于同等熟练程度的设计和验证,其薪资水平相差无几。在国内,设计往往在工作中占主导,因为他们毕竟是芯片的设计者,验证相对弱势,而在国外,验证更为强势,因为验证相当于设计的客户,验证提出需求,设计满足之,但这种强势是建立在验证充分了解用户需求和应用环境的基础之上的,其精力大部分放在这一方面,而将较为底层的功能交由UVM平台自动处理。 oUUp5obgwWtMEEOeD505iCtG0hqxOu2AgiBo/UpcOOBBYWoewbr3FALGGmq2Vuq6

点击中间区域
呼出菜单
上一章
目录
下一章
×