本文是对Janick Bergeron的《Write Testbenched:Functional verification of HDL models》的翻译。在翻译过程中,因为译者水平原因和基础知识所限,会导致部分错误,如发现错误请读者参考原文。译者不理解的部分也会重点标注,并标注出在原书的位置。本篇翻译是第一章第一部分的翻译内容。
目录
验证不是一个testbench,也不是一系列的testbenches。验证时用于证明设计功能正确性的过程。在日常生活中,我们都执行过验证过程:如结算账单,品尝炖菜,将地标与地图上的符号相关联等,都属于验证过程。
在本章中,“我”将介绍验证的基本概念,从其重要性和成本,到确保通过验证核实了你想要的实现。我们研究了各种验证方法之间的差异以及测试和验证之间的差异。我还介绍了验证如何成为设计重用的关键。
什么是Testbench?
在VHDL和Verilog中,术语“testbench”通常是指用于为设计创建预定输入序列的代码,然后可任意地观察输出相应。它通常使用VHDL或Verilog实现,但有时也可能包括一些外部文件或C语言代码片段。
图1-1显示了测试平台是如何与验证下的设计(Design under Verification DUV)(??何为DUV??)相交互的(原书Page 1 Line 19)。测试平台为设计提供输入,并监控设计的所有输出。需要注意的是,这是一个完全封闭的系统:没有其他的输入和输出。就设计而言,测试平台实际上是某种经验体系的模型。验证工作的难点是要确定为设计提供哪些输入模式,以使其能有符合预期的输出。
验证的重要性
如果你看一本关于Verilog或VHDL的经典书籍,你会发现大多数章节都在介绍硬件描述语言的语法和语义,除此之外其他的两三章在介绍哪些编码是可综合的,或是RTL子集。(此处不明白何为RTL Subset 原书Page 2 Line 10).
在大多数情况下,这些书籍只有一章专门用于介绍测试平台(Testbench)。而Testbench的内容,很少可以在一章中充分解释清楚,这些书籍中的解释通常都非常简单。在几乎所有的情况下,这些书中描述的验证技术,都是以较为简单的方式来验证功能的正确性,然后使用波形查看工具验证输出。大多数作者介绍验证的目的是为了介绍验证用的硬件描述语言的文件输入机制,从而将更多内容用于详细的语法和语义。
在我们所阅读的文献书籍中,会发现:如何编写可综合VHDL或Verilog代码相比于编写测试平台以验证其功能正确性有更多的介绍内容。您可能会得出这样的结论:编写可综合的代码相比于编写测试平台是更为艰巨更重要的任务。但所有的硬件设计团队都发现事实并非如此。
今天,硬件设计变得越来越复杂,在数百万门ASIC,可重复使用的IP和片上系统(SoC)设计的时代,验证工作消耗了大约70%的设计工作量。设计团队为解决验证挑战,必须进行适当的人员配置,包括招聘专门致力于验证的工程师。在硬件设计团队中,验证工程师的数量通常是RTL设计工程师数量的两倍。完成设计项目后,测试平台的代码量大约占据总代码量的80%。
鉴于验证工作庞大的工作量,合格的硬件设计和验证工程师的短缺以及必须要设计的庞大的代码数量。所以在所有硬件设计项目中,验证成为被依赖的关键路径也不足为奇了。这也是验证目前是以新工具和方法为目标的原因,这些工具和方法试图通过实现并行工作机制,从更高级别的抽象层次和使用自动化方法来减少总体验证时间。
如果可以并行化工作,则可以有小弟应用其他资源以减少总验证时间。就好比通过提供更多配备铲子的工人,可以并行挖掘地面上的洞。为了并行化验证工作,有必要使工程师能够彼此并行地编写和调试测试平台,以及与设计实现并行。从更高级别的层次进行抽象可以使您更高效地工作而无需担心底层细节。
然而,更高层级的抽象概念通常具有更少的控制量,因此必须做出明智的选择。这些更高层级的抽象概念通常需要额外的培训,练习来理解抽象机制本身,以及如何产生期望达到的效果。
利用挖掘机挖坑也会遇到同样的失控问题(loss of problem?? Page 3 Line 26):工人们不再直接去挖泥土,不和泥土进行相互作用;相反的,工人操作挖掘机。使用挖掘机使效率更快,但是挖坑的精度较低。只有经过培训的挖掘机操作员才能完成精度更高,速度更快的工作。验证过程可以通过在事务或总线周期级别(甚至更高级别)工作使用更高级别的抽象,而不是始终处理低级别的0和1.
自动化允许您在机器自主地,快速地完成任务并具有可预测结果时执行其他操作。自动化要求标准流程具有明确定义的输入和输出。并非所有流程都可以自动化。比如我们必须挖掘各种形状,大小,深度,位置和不同土壤条件下的坑,这使得通用自动化变得不可能。
验证也面临类似的挑战。由于必须要验证的各种不同的功能,接口,协议和转换,因此无法提供通用的自动化解决方案,以便根据当今的技术进行验证。但可以自动执行验证过程的某些部分,尤其是在应用于有限的应用程序域时。例如可以使用挖掘机的自动挖洞功能,用于在较浅的地层铺设导管或电缆。本书将引入自动化验证过程的各个部分的工具,可以在不久的将来实现自动化的新标准验证实践。