石小轩 路科验证
如今,验证工程师往往面临的是越来越复杂的设计,因此验证项目的管理工作就显得更为重要了。从确定构建DUT和测试平台所需的文件,到了解需要收集和跟踪哪些验证指标,有效的项目管理都是很有意义的。本文源于Cypress公司的管理经验,从Cypress创建的基础设施,介绍通过提供统一的前端shell和后端数据库来提取文件列表和指标收集。此外,还将介绍使用Mentor的验证运行管理器(VRM)工具快速有效地获取覆盖率目标。
验证管理系统基础设施
A.系统管理工具简介
VMS( Verification Management System)通过Ruby脚本收集有关设计和测试平台的信息,通过Questa VRM(Verification Run Manager)启动任务。 Ruby脚本通过用户创建的文件处理所有前端任务和解析,包括设计配置文件、测试平台文件、tests、编译和仿真参数。这些用户创建的文件名为dut.files、tb.files和vms.cfg等。配置信息也可以根据需要通过test列表和命令行参数传递。一旦配置数据收集完毕,会被编译并放入中间文件,由Questa VRM读取。之所以选择通过Questa VRM启动任务,主要是Questa VRM在其工作管理能力以及其自动化功能等方面的优势。
B.设计树和文件列表收集
在每个设计中,会用简单的嵌入文件列表来描述设计网络或路径,设计树和文件列表用于收集设计网络或路径,定义其所需的内容。这里的“设计”是指一些组件或IP的集合,这些组件和IP的集合最终构建了子系统或芯片。 VMS使用名为dut.files的文件对设计描述进行标准化。VMS将解析dut.files中的命令,并分层使用,以构建设计树,将其平展以创建用于验证的设计编译列表。另一个对VMS的要求是确保DUT可以被合成。因此,VMS也用于合成列表生成。要分层启用VMS,所有IP必须有一个dut.files。一旦它们设置到位,为给定的IP收集必要的文件就像通过名称引用设计一样简单。如下图:
在此示例中,Subsystem具有三个先决设计。它们是Design1,Design2和Design3。请注意,Design1和Design2都具有前提设计Design4。当为Subsystem创建dut.files时,它只需要列出Design1,Design2和Design3作为依赖项。如果有子系统独有的HDL文件,那么也将列出这些文件。子系统的dut.files的内容如下:
ddc Design1
ddc Design2
ddc Design3rtl subsystem.v
这里的Subsystem中的dut.files通过命令“ddc”声明Design1,Design2和Design3是包含要解析的dut.files的先决条件。 此外,使用命令“rtl”声明了HDL文件subsystem.v。 再举一个例子,Design1有自己的dut.files,内容如下:
ddc Design4
rtl something.vrtl design1_top.v
这里dut.files在声明Design4是一个先决设计,something.v和design1_top.v是design1所需的HDL文件。 虽然这是一个简单的例子,但可以此为参考,创建更复杂的系统。VMS支持多个命令。 引入了“ddc”和“rtl”。 命令“ddc”代表设计数据容器,并告诉VMS在指定设计的rtl文件夹中查找另一个dut.files。 命令“rtl”告诉VMS基于相对位置以定位HDL文件。 例如,如果给出了“rtl design1_top.v”,则VMS将在当前文件夹中查找design1_top.v。此命令比仅识别HDL文件具有更重要的意义,它还告诉VMS指定的文件将用于合成,这是很有必要的。当然这里只是最简单的示例,有关dut.files支持的命令的完整列表,可参见原文。
C.测试平台树和文件列表收集
测试平台网络或树也是使用简单的嵌入文件列表来描述的,如上文的dut.files一样。对于测试平台,文件列表名为tb.files,保存于每个设计的活动文件夹tb下的功能验证文件夹fnv中。复杂的测试平台是多个简单的测试平台组件编译生成的。再次参考图1,那么Subsystem的tb.files如下所示:
ddc Design1
ddc Design2
ddc Design3
在VMS中,使用tb.files中的一组命令来描述测试平台,这些命令很多与用于设计的那些命令类似。此外,由于测试平台有时使用C/C ++文件,所以这里还提供了命令“c”以标识用于C编译的C文件。 将基于vms.cfg提供的VMS配置,进一步设置确定是什么类型的C编译(ARM,g ++或gcc)。有关tb.files命令的完整列表,请参见原文。
D.验证管理配置
vms.cfg文件用于为设计和测试平台文件提供编译参数以及test的仿真参数。 此文件默认存放于给定设计的tb/fnv/tests路径下。编译和模拟参数附加有模式选项,仿真模式信息也可以在vms.cfg中找到。此外,在测试平台的test树中可以有多个vms.cfg文件。
E.test树基础结构和test列表
VMS旨在自动确定,当不提供test列表的情况下,要执行哪些test。 也就是说,如果配置正确,VMS可以找出要执行的test。当然,这需使用VMS理解的格式构建test树才能实现。 创建test树,通过分支和叶子的信息继承,以完全描述每个test唯一的test参数。 每个分支或叶将具有带有特定于分支或叶的信息的vms.cfg文件。信息通过分支继承到其他分支或叶子。考虑下面的图2:
这里显示的是Subsystem在文件夹“tests”下有一个简单的test树。这里有三个test。 Test1和test2分组在group1下。它们都将从“tests”和“group1”上的vms.cfg文件继承参数以进行仿真和编译。此外,test1和test2还可以独立使用文件夹test1和test2下的vms.cfg定义的唯一参数。Test3不共享group1参数,但继承了“tests”vms.cfg参数。 在执行时,VMS将搜索test树并将test1,test2和test3标识为可用test,正确构建参数并将其启动。
F.启动VMS
在Unix提示符下,通过名为vms_run的Ruby函数启用VMS执行。VMS是Cypress CAD流程的一部分,可以在整个公司的任何地方访问任何给定项目。如果test树正确配置了一组test,则用户可以简单地键入vms_run,VMS将自动从test树构建test列表并开始执行。如果需要,用户提供带有-tl test_list的test列表,然后用命令行执行。
指标收集,输出生成
仿真期间,每个test会收集多个覆盖率指标。此信息存储在UCDB(Unified Coverage Database)中。
A. 指标
VMS在test完成后捕获多个指标,并将它们存储在test UCDB中。在下表中给出了指标列表及其简短的描述。虽然这些指标不会自动出现在Questa生成的报告中,但可以随时通过UCDB通过Questa命令或API访问这些指标。 VMS的进一步工作是将回归收集的指标合并到一个集中式数据库中,使回归数据可以根据需要访问。
B.test级输出和报告
在上一节中,讨论了VMS test树。VMS使用此树收集有关test的信息,并确定要启动哪些test。 VMS默认始终从tb/fnv/run启动。 在运行文件夹下,VMS将复制“tests”下的test树。 所有test将从复制的test树执行,并且每个test的所有输出和报告信息可以在其树分支中找到。 对于每个仿真,生成仿真日志文件,UCDB文件,波形文件(.wlf),调试文件(.dbg)和HTML报告。也可以可选择地启用波形,调试文件和HTML。 HTML报告列有仿真期间收集的给定test的所有覆盖率信息。 下面的图5显示了Questa在完成test后生成的test级HTML报告。
出于调试的目的,会在每个test文件夹中创建一个名为rerun的文件。 这个rerun文件可确切了解启动test的使用了什么命令。有必要的话,它可用于重新运行test而不使用VMS。
通过排序提高高覆盖率
A. 自动种子生成
VMS提供了自动生成随机种子的功能,也具有多个用于单独test的选项。如前所述,VMS使用一个test树,其中可以存储有关各个test的特定信息。例如,可以根据需要存储test参数(如sv_seed)。在vms.cfg中VMS提供了一个名为SEED的参数。SEED有以“,”或“;”分隔的数字或数字对的列表。如果给定单个数字,那么它将在仿真命令行参数中作为sv_seed应用。如果给出了数字对,则第一个数将用于随机数生成器,并且第二个数将指示从随机数生成器生成多少数。每个随机数将作为仿真命令行参数中的sv_seed应用。
B.test排序
验证的最终目标是捕获所有设计问题。我们期望在最短的时间内实现尽可能多地覆盖,有效地利用有限的资源。带约束的随机验证是一种有效的方式。VMS提供自动化生成种子以解决随机问题,但是我们还需要一种方法确定哪些随机生成的种子是更有价值的。 Mentor的Questa验证管理工具套件满足了这一需求,test排序是Questa验证管理套件的一部分,对于挑选有助于提高覆盖率的test中非常有用。这个工具在生成随机种子时,通过第覆盖率的贡献,识别重要种子,通过VMS自动化存储,以快速有效地实现覆盖目标。在下表,可以明看到我们提高了效率,节省了时间。
总结
面对越来越复杂的项目,维护环境成了项目有效进行的紧要工作,本文提供了一种管理验证的标准方法示例,为用户提供统一的接口并促进IP重用。随着时间的推移,每个项目可以更好的收集指标、跟踪进度、更新报告,长而久之,整个公司都能受益匪浅。