中文 英语

验证心态

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

受欢迎程度

多年来,半导体验证的实践已经发生了实质性的变化,并将继续如此。20年前功能验证所需的技能在今天很难被识别出来,随着设计和验证变得更加抽象,硬件与固件和软件实现的边界不断变化,以及新技术的采用,同样的技能也应该向前发展。向完整验证范围的转变是对不断增加的复杂性和上市时间压力的持续响应。

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

设计解决方案产品经理Chris Giles指出:“二三十年前,一个优秀的验证工程师懂得设计,懂得如何构建简单的功能测试计划清单,并在模拟器的设计层面上粗略地进行操作,并在构建可以检测功能故障的模型时获得加分。西门子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。”

他说,掌握多种语言会促使验证工程师以不同的方式思考如何处理问题。“这是发生在自然语言多语种的事情,说明了大脑学习复杂性的能力。这是一个积极的迹象。”

就业面试过程本身,吕克·看起来候选人是否有从大学获得理论知识,以及解决复杂问题的能力。“我最喜欢的问题是提出一个RTL/设计块,我提供原理图,一些波形,并询问候选人如何验证这个块。这是一个非常大的问题。对于初级员工来说,这是一个相当复杂的问题。对于经验丰富的人来说,这个问题就简单多了。我想听听候选人的全部发言。他们会考虑正常情况下的测试吗?他们会检查极端情况吗?理想情况下,规范中会有一些错误,一些缺失的信息。有些候选人设法找到所有缺失的信息,这对我来说是一个积极的信号,而有些候选人就是不费劲。”

在non-pandemic时期,吕克·有时为候选人提供一个金属脑筋急转弯。但现在通过在线采访,他采用了一些创造性的技巧,比如询问一个国际象棋问题的解决方案。“我已经测试过这个特定的象棋问题。我花了好几个小时都没找到答案,这家伙五分钟就解出来了。首先,它令人印象深刻。其次,这是一个好迹象,他没有在简历上作弊,这种情况有时会发生。”

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

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认为,优秀的验证工程师应具备以下素质:

  • 组织.在验证中,一切都是关于结构、纪律、准确的文档和对完美的渴望。
  • 好奇心.优秀的验证工程师需要理解要测试的产品,并理解最终用户将如何使用产品。
  • 持久性.永远不要放弃寻找难以捉摸的虫子。
  • 创造力和勇气.寻找新的做事方法,即使是以前做过的。
  • 不追求完美.知道什么时候适可而止是至关重要的,因为没有什么是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说:“你需要能够根据设计架构、复杂性和功能选择合适的验证方法。”“它是更经典的,像位级测试还是事务级的高级代码,需要为硬件内验证模式做好准备?这意味着对模拟器、模拟器或原型硬件等工具有广泛的了解。每一个领域都是一个非常广泛的领域,很难找到一个能够完成所有这些工作的验证工程师。这就是为什么在很大程度上取决于项目需求和验证团队的适当组织,以便在验证过程的适当阶段使用最佳可用技能。具备软硬件技能的经验丰富的核查工程师,以及对整个过程的高水平看法和正确利用经验的能力,是核查成功以及整个项目成功的关键。”

结论
今天的验证工程师的技能集不一定包括设计知识,但它应该包括。“验证工程师需要理解硬件的顺序本质——对于那些从纯软件背景接触该学科的人来说,这并不一定是显而易见的,”Giles说。

验证也不仅仅是验证函数。“除非验证工程师了解硬件故障的潜在特征,否则这种故障通过验证而未被发现的风险总是存在的,”Giles指出。“一个很好的例子是时钟域交叉,其中的违规可能不会在仿真环境中建模,或者数据完整性硬件,只有在发生软错误时才会激活。10到20年前,面向对象的测试平台编码的推动创造了这样一个场景:需要构建能够有效构建约束随机测试平台的团队,这导致了知识缺口,验证团队专注于软件方面,缺乏硬件和设计基础。”

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



2的评论

斯科特Orangio 说:

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

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

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

阿巴斯 说:

全面和深刻的见解..特别是像我这样的新手。

留下回复


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

Baidu