SoC 复杂性的增加会导致验证环境中使用的组件数量增加,这会导致日志文件庞大,因为从这些组件打印了多个信息。必须优化这些日志,因为它们是最常用的调试方法之一。这就需要开发一种定制打印机,以有效地打印有用的信息以进行调试。自定义事务打印机(称为 xaction_custom_printer)是一种自定义打印机,可帮助提高调试效率、减小日志大小、提高可读性,从而提高整体生产力。
随着片上系统(SoC)设计的面积和复杂性不断增加,验证责任和工作量巨大,成为整个SoC设计流程的瓶颈。由于验证就是检查设计的正确性,因此任何验证环境中最关键的部分之一是预期的输出计算。在此类SoC的每个模块上都有许多验证组件,每个设计验证组件通常由一个监视器组成。这些预期和实际输出由监视器观察,监视器直接或间接地在日志中打印此信息。
设计验证工程师花费大量时间进行调试,以确定实际输出与预期输出之间是否存在任何差异。尽管有详细机制,但验证工程师需要最少的消息进行调试,因为通常有特别长的日志具有详尽的事务数据包。为了解决这个问题,制定了xaction_custom_printer。
第 2 节解释了定制过渡打印机如何解决验证工程师面临的问题,从而满足对该组件的需求。第 3 节展示了组件开发的基本思想。第 4 节介绍了使用此自定义事务打印机以及一些代码段以更好地理解的两种方式。第 5 节重点介绍自定义事务打印机相对于使用通用事务数据包的行式、树形和表格式打印机的优势。
为什么我们需要自定义交易打印机?
在验证过程中,特别是在初始阶段,当RTL设计不成熟时,测试过程中可能会出现许多故障。工程师可以通过日志文件确定故障原因。通常情况下,工程师需要查看事务数据包,以查看特定时间戳处某些变量的状态。理想情况下,日志文件中会打印数百个此类数据包以进行测试。
以任何协议的数据包为例,它包含大量信息,如地址、读取地址、写入数据、读取数据、操作(读/写)和模式(单/突发)。数据包中至少有一个变量可以具有数组。对于阵列大小从几十到几百不等的情况,日志文件会变得非常庞大,因为这些数据包打印了几次。除此之外,调试过程还涉及花费大量时间浏览这些日志。在这些日志中,来自组件的转换数据包会非常频繁地打印,并在从组件调用它们时以不同的时间戳显示存储在其中的数据。为了进行调试,当日志在使用uvm_default_table_printer时具有较大的数组大小时,用户需要在日志中来回切换。
SystemVerilog UVM包含一个 uvm_printer 类,它提供了一个用于打印各种格式uvm_objects的接口。uvm_printer子类型实现不同的打印格式或策略。这些亚型包括uvm_printer、uvm_line_printer、uvm_tree_printer uvm_table_printer。我们开发了一种用户定义的打印机,它将致力于消除uvm_table_printer的缺点。
xaction_custom_printer是从uvm_printer扩展而来的,打印机的输出格式看起来像是uvm_table_printer和uvm_line_printer的混合体,因此结合了两者的优点。xaction_custom_printer简明扼要地显示数据包,以分区良好的方式(如表格打印机)显示变量的名称和值,并在一定程度上类似于行式打印机的多行。
该打印机的输出在单行中可用,直到某些预定义字符,之后它会在不同的行中继续。这种输出样式在存在具有巨大大小的数组的地方变得易于阅读。如果以uvm_table_printer打印相同的阵列,工程师将需要多次上下滚动日志。由于它在一条线上,因此不需要多次上下移动。打印机的格式允许清楚地看到变量的名称和值,这是调试所需的全部内容。
这台打印机是如何开发的?
为了开发自定义打印机,所需的打印格式在 emit() 函数中编程,该函数覆盖父类 (uvm_printer) 的相同函数。此处显示了组件开发方式的基本思想的图形表示。
图1.自定义事务打印机如何开发的顶级概念
如何使用这台打印机?
用户只需将文件包含在包或文件列表中即可包含在编译流中,并且需要将其作为函数调用。使用此打印机有两种方法。
默认打印机机制 - 用户可以将此打印机设置为uvm_default_printer,如下面的图 2 所示,因此项目/SoC 中的所有打印都将以这种格式打印。
图2.将自定义事务打印机设置为uvm_default_printer
选择性打印机机制 - 用户只能通过在冲刺 (sprint) 中事务项的 convert2string 中传递打印机来配置此打印机,如下图 3 所示。
图 3:所选块的xaction_custom_printer使用方法
为了使用此打印机打印数据包,可以通过调用此函数来完成,如下图 4 所示。
图 4:使用 convert2string 打印事务项的方法
用户还可以使用自定义事务打印机打印事务数据包,以便将数组打印在单独的行中,并将标量变量保留在同一行中。这种类型的事务数据包打印机制将帮助用户一次性读取数组内容。此事务数据包的外观示例显示在第 5.5 节中
插图
以下示例展示了xaction_custom_printer优于其他三个uvm_printer。在示例中,我们采用了一个通用数据包。使用以下变量来解释此自定义打印机相对于默认打印机的优势。
图5:uvm_sequence_item中的通用数据包(事务项)
1.1 使用行式打印机输出
1.2 使用树形打印机输出
5.3 使用表格打印机输出
5.4使用自定义打印机输出
5.5 使用具有在单独行中打印阵列功能的自定义打印机输出。
定制打印机的优势
显示调试最需要的信息
减小日志大小
提高可读性
通过提高调试效率节省时间
简洁的外观
定制交易打印机是我们在eInfochips开发的组件,为验证工程师面临的问题之一提供解决方案。此自定义打印机相对于内置 uvm 打印机的优势使用通用数据包示例显示。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !