上期答案
[241] 什么是覆盖率驱动的验证?
在覆盖率驱动的验证方法中,验证计划是通过将每个特性或场景映射到一个覆盖率监视器来实现的,该监视器在仿真期间收集覆盖率信息。
- 覆盖率可以是基于样本的覆盖组和基于属性的覆盖的组合。
- 在基于覆盖率的验证中,测试通常使用约束的随机激励生成器生成,测试正确性由功能检查器确保,并为实现的所有监视器收集覆盖率。
- 通常在设计上对随机生成器的多个测试或多个种子进行回归,并合并从每个测试中收集到的单个覆盖率,从而获得累积覆盖率。有时,在设计的一个角边界情况可能不容易被覆盖,使用约束随机激励和可能更好地完成使用一个有指导的测试。
- 覆盖率信息还为测试的质量和生成器中的约束提供反馈,并帮助对约束进行微调,从而有效地随机生成刺激励。
- 由于在这种方法中,覆盖率定义是跟踪验证执行以获得进展和完成的关键步骤,因此确保根据验证计划和设计规范审查覆盖率定义和实现的完整性和正确性是很重要的。
[243] 功能验证中的测试分级是什么概念?
设计的功能验证是通过创建定向测试以及对激励进行不同控制的约束随机激励生成器来完成的。通过设计验证项目,开发一组测试,该测试套件用于验证设计正确性、发现设计中的bug和收集覆盖率等。
测试分级是一个过程,在这个过程中,单个测试根据不同的标准(如功能覆盖率、发现的bug、仿真运行时、维护的容易程度等)对质量进行分级。
这个过程有助于从测试套件中识别出有效的测试,从而为设计验证开发出最有效的测试套件。
[244] 什么是基于断言的验证方法?
基于断言的验证(ABV)是一种用于捕获特定设计意图的方法。这些断言用于仿真、形式验证,以验证设计实现是否正确。ABV方法可以通过断言的优点来补充其他功能验证方法,从而实现有效的验证。
断言的一些好处如下:
- 断言从源头上检测设计错误,从而提高可观察性和减少调试时间。
- 相同的断言可以用于仿真和形式分析,甚至可以用于仿真。
- 在断言库中有很多通用设计的断言,可以很容易地移植到任何验证环境中。
- 作为属性编写的SystemVerilog断言也可以用于覆盖率(使用覆盖属性),因此有助于基于覆盖率的验证方法。
[245] 2*2的分组交换器的spec如下,你将如何验证设计?如何设计激励和检查器?哪些是你需要验证的case?
「SPEC」:有两个输入和输出端口A和B,如上所示。每个端口可以接收大小在64到1518字节之间的可变数据包。每个包将有一个4字节的源地址(Source Address)和4字节的目标地址(Destination Address),以及跨包计算的数据和一个4字节的CRC,如下所示。数据包将根据目标地址(Destination Address)被切换到一个输出端口。
对于这类有设计说明的问题,第一步是理解设计说明,并向面试官阐述问题。下一步是确定要验证的场景,并提出验证计划和策略文档。这应该列出要验证的特性/场景,可以使用什么方法来验证(定向/约束随机、覆盖、断言,等等),如何检查正确性等等。此外,还应详细说明如何产生激励以及如何进行检查。
另一个方面是考虑所有的设计特性,并确定需要验证的关键case。现在,让我们试着列出如何验证这个简单的路由器设计
- 以下是一些需要验证的场景:
- 根据目的地地址测试数据包从a端口到两个输出端口的正确切换。
- 测试不同的数据包大小-最小尺寸,最大尺寸和之间的随机尺寸。
- 测试源地址和目标地址的所有可能值。
- 测试不同的数据模式。
- 流包测试(背对背无延迟、周期延迟少、周期延迟大)、大小相同的包流或大小不同的包流。
- 测试CRC功能。
- SA/DA或数据甚至CRC的某些位被损坏的测试。
- 你还能想到什么
- 现在,为了验证上述场景,我们需要设计一个约束随机数据包生成器,我们还需要一个计分板/检查器来检查数据包的正确性和正确的交换行为。如果测试是随机的,我们还需要编写一些覆盖率监视器,以确保上面提到的所有重要场景都得到了覆盖。
- 如果面试官想对你进行更多的测试,那么他也可以继续问你一些问题,要求你写一个SystemVerilog数据包生成器代码或一个检查程序或驱动程序等。
本期题目
[246] 对于一个单端口读写RAM,有哪些场景需要进行测试?
[247] 单端口和双端口RAM有什么区别?
[248] 一个简单的带有如下所示的方框图的ALU支持两个4位操作数、一个4位结果总线和进位溢出。ALU支持最多8条指令,使用3位操作码或选择行(S2、S1、S0),解码如下。
解释所有需要验证的场景,以确保ALU按照下面的SPEC工作:
[249] 事件驱动和循环驱动的仿真器有何不同?
[250] 什么是事务(transaction?)?基于事务的验证有什么有点?
正确答案将在下一期公布,或者到下面的文章获取答案