我看过的每一本教科书都强调测试和验证是两个不同的概念。然而,它们都没有提供清晰的(或对我来说足够清晰的)区别。
为了提供一些背景信息,我对使用硬件设计语言 (HDL) 验证数字硬件设计感兴趣。
我见过一些诉诸“物理”或“有形”差异的解释:如果它是关于制造设备的,那么它就是测试。这是整个故事吗?如果是这样,为什么“测试”这个词在验证中经常出现(特别是在功能验证中,我们谈论测试用例、测试台、DUT(被测设备)、定向测试、随机测试等......)
我看过的每一本教科书都强调测试和验证是两个不同的概念。然而,它们都没有提供清晰的(或对我来说足够清晰的)区别。
为了提供一些背景信息,我对使用硬件设计语言 (HDL) 验证数字硬件设计感兴趣。
我见过一些诉诸“物理”或“有形”差异的解释:如果它是关于制造设备的,那么它就是测试。这是整个故事吗?如果是这样,为什么“测试”这个词在验证中经常出现(特别是在功能验证中,我们谈论测试用例、测试台、DUT(被测设备)、定向测试、随机测试等......)
曾在高通公司担任 ASIC 设计验证工程师。我可以用最简单的方式解释它:
测试:在您创建产品后确保产品正常工作(想想 QA)。
验证:确保产品在您创建之前有效。
他们都在测试,只是验证更复杂,因为您必须想办法在产品存在之前对其进行测试,并且您必须能够确保它按设计工作并在实际推出时进行规范。
例如,英特尔正在设计他们的下一个处理器,他们有规格、原理图和模拟。他们花费 10 亿美元进行制造和制造。然后芯片回来,他们测试它,发现它不起作用。他们只是把很多钱扔到窗外。
加入验证。验证工程师创建模拟芯片行为的模型,他们创建将测试这些特定模型的测试平台。他们得到这些模型的结果,然后将其与 RTL(以硬件设计语言编写的电路模型)结果进行比较。如果它们匹配,则(通常)一切正常。
验证过程有多种不同的方法,一种流行的方法是通用验证方法 (UVM)。
该领域有很多深度,人们可以将整个职业生涯都投入其中。
另一个随机的信息:通常你需要 3 个验证工程师来换 1 个设计工程师。无论如何,这就是该领域的每个人所说的。
编辑:很多人认为验证是一个测试角色,但事实并非如此;它本身就是一个设计角色,因为您必须像设计师一样了解 IC 的所有复杂性,然后您必须知道如何设计模型、测试平台以及涵盖 IC 的所有特性功能的所有测试用例,以及尝试为所有可能的位组合命中每一行 RTL 代码。请记住,由于制造工艺允许越来越小(现在是 14nm),现在的处理器有数十亿个晶体管。
此外,在英特尔、AMD、高通等大公司中,设计师实际上并不设计芯片。通常架构师会定义所有的规范,对需要组合在一起的部分类型进行布局,以获得具有特定要求(即速度、分辨率等)的特定功能,然后设计人员将其编码到 RTL 中。这绝不是一件容易的工作,只是不像许多从学校毕业的工程师所认为的那样进行设计。每个人都想成为一名建筑师,但要达到这一点需要大量的教育和经验。许多建筑师拥有博士学位,并且在该领域拥有 15-20 年的设计师经验。这些都是聪明的人(有时是疯狂的),他们应该做他们正在做的事情,而且他们很擅长。我开发的第一个芯片的架构师有点尴尬,并没有真正遵循一些社会规范,但他可以解决你对芯片的任何困扰,有时他会在脑海中解决它并告诉你看一个信号,你会想,“他到底是怎么做到的?”。然后你让他解释,他解释了,这超出了你的想象。尽管我已经毕业了,但实际上启发了我阅读教科书。
在我的书中,验证是确保你设计的东西“能完成工作”——也就是说,你有一套“设备”需要执行的事情,并且验证会在列表中勾选这些内容。
但是,测试是确保“设备”所做的事情是正确的。您有一组函数,并测试每个函数以确保该函数正确执行。
简而言之,验证是检查设计,测试是检查产品。
来自 ASIC(硬件)设计背景,有三个重要术语:validation、verification和test。较早的答案通常谈论其中的一两个术语,但并没有像我那样清楚地对比所有三个术语。这是我理解它们的方式:
测试旨在查看是否满足规范。验证是查看设备是否符合设计输入——即所有规格。我想还有更多的解释,但这是我在 FIA 指导文件中看到的。