中文 英语

验证的心态

怎样才能成为一名优秀的验证工程师?这并不总是关于技术专长,也很少只是关于验证。

受欢迎程度

半导体核查的做法多年来已经发生了重大变化,并将继续这样做。20年前功能验证所需的技能集在今天很难被识别为验证技能集,随着设计和验证变得更加抽象,同样的技能集也应该被期待向前发展,硬件与固件和软件实现的边界继续移动,以及新技术的采用。向完整的验证谱的移动是对不断增加的复杂性和上市时间压力的持续响应。

这意味着一个好的验证工程师的定义会随着时间的推移而改变。

公司的设计解决方案产品经理Chris Giles指出:“20到30年前,一个优秀的验证工程师了解设计,如何构建简单的功能测试计划检查表,并在模拟器的设计级别粗略地调整线路,构建可以检测功能故障的模型。西门子EDA

十年前,优秀的验证工程师精通面向对象的编码。他们能够构建一个完整的测试平台基础设施,生成受约束的随机刺激、被监视的接口、为正确性而被监视的结果,并针对联合设计/验证定义的测试计划处理覆盖率。

Giles说:“今天优秀的验证工程师了解系统功能、软件/固件功能、硬件/软件接口,并构建可移植的、灵活的面向对象的测试平台,以在各种技术中运行,从模拟到仿真,再到原型设计。”最重要的是,如今优秀的验证工程师也可以使用正式的验证,这样就可以在正确的时间应用正确的工具,以正确的首次构建整个系统。”

其他人也指出了类似的变化。“如今,一名优秀的验证工程师几乎是无所不知的工程师,”华为的硬件部门总经理Zibi Zalewski说Aldec.“拥有设计背景是非常好的,这允许他们构建更好的面向硬件的测试场景。他们需要不同验证方法、HDL语言和库的知识库。编码已经不够了硬件描述语言(VHDL)VerilogUVM或OSVVM提供了新的可能性,但也期望验证工程师学习并有效地使用它。这种技能对核查团队的管理者来说总是有益的。”

这是一项极具挑战性的工作。咨询公司的首席执行官西蒙•大卫曼(Simon Davidmann)表示:“在高端市场进行验证是难以置信的困难。治之软件.“这比开发架构或编写软件要复杂得多。这并不容易。但要真正证明它们有很少的缺陷(如果有的话)就困难得多。因此,软件世界已经构建了正式的检测工具,硬件世界也构建了正式的工具。很难进行验证,很难知道什么时候完成了,也很难知道你做的是正确的。在处理器验证中,这是一种魔法,所以它是专有的。除了英特尔、Arm和Tensilica,人们不知道如何验证处理器。”

选择合适的人
这些人现在供不应求。为一个特定的团队找到正确的验证工程师需要跳出框框思考。

Hagai Arbel,首席执行官Vtool他说,他在验证工程师身上寻找的东西与其他人可能寻找的东西不同。“在寻找工程潜力方面,我站在了极端的一边——理解问题的解决方法,而不是知识。对于掌握一门语言的重要性,我也持极端观点。对我来说,可能是10%的语言知识。我不能告诉你,一个没有任何经验的杰出工程师,比方说,两个月的经验会比一个有10年经验的中等工程师的生产力更高。但从长远来看——这种长远会很快到来——我总是更喜欢方法、能力和心态,这些可能是成为一名优秀验证工程师的个人品质。在适当的环境下,学习曲线可能会非常惊人。我在公司里有几个工程师,我们从一开始就培养他们,经过6到12个月的工作,他们能够做一些在有3年、4年甚至5年经验的人身上很少看到的事情。”

当面试一名潜在的工程师时,Arbel说,一个好的验证工程师最好的指标不是他们给出的答案,而是他们提出的问题和多快。

他说:“真正杰出的验证工程师能立即抓住那些没有定义的不确定性。”“你问他们一个问题,你向他们展示某样东西,他们会立即问你缺少了什么。它可能是故意忽略的,也可能不是故意忽略的,而且可以从几个层次进行解释。有些人能很快看到这一点。把这等同于天赋,就像电脑里的内存。他们有能力在头脑中记住复杂的抽象图像。这是一个非常好的人才。此外,好的验证工程师从定义上来说是视角非常广的人。他们喜欢知道关于很多事情的很多事情。他们想知道周围的一切——也许不一定是晶体管最深处的比特或字节,而是它周围的世界。 This is another characteristic of a good verification engineer. I find good verification engineers more similar in their thinking process to architects than to designers. And of course, the softer quality is they have a very strong sense of responsibility and accountability. They are the type of people who say, ‘Yes, I will do it. Count on me. I’m willing to take the risk and the responsibility that comes with it.’”

其中大部分也不是技术性的。“这在很大程度上是你看待生活的方式,”阿尔贝尔说。“有些人专注于他们的小世界,而验证工程师需要相反。你需要喜欢与人合作。我不认为我能说出一个优秀的验证工程师是自私的,喜欢自己工作,不与他人合作。”

当然,技术基础是至关重要的。

“不仅仅是一份简历,我寻找的人一种DIY,”菲利普·卢克说,验证主管Codasip.“如果他们在玩树莓派,如果他们做了一个工作或大学项目范围之外的项目,我想看看他们天生的创造力和解决问题的能力有多大。我更感兴趣的是那些知道几种不同的计算机语言的人,比如Python、C、c++,而不是那些明确引用UVM和SystemVerilog的人。这说明了他们的精神和知识的广博。对我来说,验证工作不仅仅是设计测试台。它还制作了一个小脚本在云上运行它们,一个小脚本收集所有结果,一个小脚本衡量功能覆盖的结果。严格来说,这不是UVM或SystemVerilog。”

他说,多语言的知识会激发验证工程师以不同方式思考如何解决问题的动力。“这是一种发生在自然语言多语言者身上的事情,这与大脑学习复杂性的能力相吻合。这是一个积极的信号。”

在面试过程中,Luc会考察应聘者是否具备大学的理论知识,以及当场解决复杂问题的能力。“我最喜欢的问题是提出一个RTL/设计块,在那里我提供原理图,一些波形,并询问候选人如何验证这个块。这是一个很大的问题。对于初级员工来说,这是一个相当复杂的问题。对于更有经验的人来说,这是一个更简单的问题。我希望听到候选人说的所有内容。他们会考虑正常情况下的测试吗?他们会检查边角的情况吗?理想情况下,规范中可能会有一些错误,一些缺失的信息。有些求职者会设法找到所有缺失的信息,这对我来说是一个积极的信号,而有些求职者却对此毫不在意。”

在非流感大流行时期,卢克有时会给应聘者提供一个金属脑筋急题。但在现在的网上采访中,他采用了一些创造性的技巧,比如询问国际象棋问题的答案。“我已经测试过这个特别的象棋问题。我花了几个小时也没找到答案,而这个人只用了五分钟就解出来了。首先,它令人印象深刻。其次,这是一个好迹象,表明他没有在简历上作弊,这种情况有时会发生。”

对开源和软件的误解
验证的痛苦以各种形式出现,特别是当涉及到有时也被误解为“免费”的开源时。

Imperas ' Davidmann指出,有些人认为自我测试程序是一种验证。"这是一个简单的程序,它告诉我们,如果3 + 3 = 6,一切都是好的。但这是在检验这些琐碎的东西。类似地,在开源领域,一些人认为,例如,RISC-V遵从性测试,它是足够好的验证。(不是的。)当你让事情变得更开源的时候,一个基本的问题是它会被更多的人使用。我们发现,大量的人对验证处理器或SoC的复杂性一无所知。如果你忽略RISC-V,在开放源码中,这在过去并不是一个真正的问题。任何设计芯片的人都会抬起头说,‘这将花费我3000万美元。我需要一个团队。 I’m going to have to have 50 people in verification. I’ve got to buy a million dollars of Verilog licenses. I’ve got to buy a $5 million emulator. And I need people who understand all that stuff.”

同样,许多软件工程师通过软件的视角来看待硬件和系统验证,反之亦然。Aldec公司的Zalewski说:“基于软件的TLM接口提供了建立高级测试模型或测试台的访问层,甚至连接虚拟平台,模拟系统的一部分与处理器,并驱动测试中的设计。”“具有软件开发经验的硬件背景将是如此复杂的测试平台的完美匹配,这意味着C/ c++ /Python经验是验证工程师的一大优势。”

从高层次来看,优秀的验证工程师具有某些特征。对于Cadence公司产品管理组总监Juergen Jaeger来说,成为一名优秀的验证工程师需要具备以下品质:

  • 组织.在验证过程中,关键在于结构、纪律、准确的文档和对完美的渴望。
  • 好奇心.优秀的验证工程师需要有了解待测试产品的愿望,并了解终端用户将如何使用该产品。
  • 持久性.永远不要放弃寻找难以捉摸的漏洞。
  • 创造力和勇气.寻找做事情的新方法,即使是以前做过的。
  • Non-obsession与完美.知道什么时候适可而止是关键,因为没有什么是100%完美的。

此外,验证并不是工程师们仅能在书中读到的东西。这需要练习。

“是的,阅读书籍,但如果你没有真正做过,这是一个挑战,”大卫曼说。“成为一名优秀的验证工程师是一种心态。这是人的思维方式。他们是好奇的。你要么有,要么没有。有些人被它吸引,因为他们想知道某些东西是有效的。如果你向他们展示某样东西在工作,他们会想把它拆开,然后问:‘为什么它在工作?或“为什么它不起作用?”对这些人来说,一切都是事实,而不是假设。这与政治无关。他们会说出真相因为他们只对真相感兴趣。 It’s a certain type of person who is a good verification engineer. They are precise, they are slow, they really are engineers’ engineers. They don’t believe anything easily. They assume nothing. Everything’s got to be proved. They’re really methodical, and are able to keep track of everything without guessing, jumping steps or assumptions. It’s all detail oriented. And finally, it’s no problem if they’re wrong.”

如果验证工程师有使用不同验证方法的经验,这也很好。Zalewski说:“你需要根据设计架构、复杂性和功能选择合适的验证方法。”“它是更经典的,像位级测试还是需要为硬件验证模式做好准备的高级代码的事务级?”这意味着要对模拟器、模拟器或原型硬件等工具有广泛的了解。每个领域都是一个非常广泛的领域,很难找到一个能够完成所有这些工作的验证工程师。这就是为什么在很大程度上依赖于项目需求和验证团队的适当组织,以便在验证过程的适当阶段使用最好的可用技能。具备硬件和软件技能的经验丰富的验证工程师,以及对整个流程的高级视角和正确使用经验的能力,是验证成功以及整个项目成功的关键。”

结论
今天的验证工程师的技能集不一定包括设计知识,但它应该包括。贾尔斯说:“验证工程师需要了解硬件的顺序特性——对于纯软件背景的人来说,这一点不一定是显而易见的。”

验证还必须不仅仅是验证功能。贾尔斯指出:“除非验证工程师了解硬件故障的潜在特征,否则此类故障通过验证而不被发现的风险总是存在的。”“一个很好的例子是时钟域交叉,在模拟环境中可能无法模拟违反——或者可能是数据完整性硬件,只有在出现软错误时才会激活。推进面向对象编码testbenches 10到20年前创建了一个场景,需要建立团队可以有效地构建constrained-random testbenches导致知识差距,与验证团队专注于软件方面,缺乏硬件和设计原则。”

最终,一个优秀的验证工程师会以一种能够随着时间的推移而迅速适应的方式,利用基础和理论的基础。“除此之外,还有一种不断学习新事物和掌握新技能的求知欲。最后,一个好的验证工程师是经过几年的经验磨练出来的。其结果是一个“复兴工程师”,理解从硬件设计、故障机制和约束,到系统需求和软件/固件开发、面向对象编码、正式方法,以及所使用的各种技术(如模拟、仿真和原型。这种工程师具有不断发展和适应不断变化的学科的基础和好奇心,这解释了为什么很难找到一个好的验证工程师,而且需求很大,”Giles说。



2的评论

斯科特Orangio 说:

好文章,很好地描述了这个学科。

很难找到既符合这些特点又愿意留在这个领域的工程师。似乎有太多的工程师认为验证不是“设计”,我为什么要这样做呢?

你是否有典型的“优秀”验证工程师的具体例子?

阿巴斯 说:

全面而有见地,特别是对像我这样的新手来说。

留下一个回复


(注意:此名称将公开显示)

Baidu