您多久有一次déjàvu?就像您以前看到过已经调试过的问题一样,当您在浏览电子邮件几个小时后仍无法回忆时,您最终会调试相同的问题,从而再次投入了相同的时间。

以下是一些要考虑的事实:

  1. 修复错误所花的时间比编写一行代码要花费30倍的时间。
  2. 开发人员有75%的时间用于调试;一年总计1,500小时。

已知问题和解决方案或“ KIAS”是作者创造的一个术语,它是笔记本的缩写形式,包括所面临的所有问题,从项目中的问题到gvim等编辑器到编程语言再到Linux和Windows相关的OS问题。

随着时间的流逝,笔记本变成了Word文件并移到了云中。然后,让其他人参与系统变得越来越困难,因为没有人真正想要记录这些东西。在此预先注册的页面/文档中搜索问题的额外步骤太麻烦了,因此人们放弃了这个主意。

即使人们时不时地记录有关问题的信息,一旦在调试周期中发现问题,也没有人真正地继续搜索,从而使所有记录的信息都没有用。因此,我们想到了可执行KIAS的想法。

但是,在我们深入研究之前,主要动机是什么?答案是一个反问。我们是否真的想增加我们已经花费在调试问题上的时间?因此,该解决方案旨在删除两个依赖项:

  1. 通过消除对首先调试问题的人员的依赖性,从而对“谁”具有依赖性。
  2. 对“何时”和“如何”的依赖,消除了对自我记忆的依赖,从而记住了调试问题的时间和方式。

该解决方案旨在为开发人员以前遇到的错误增加两个方面:

  1. 向用户提供根本原因分析(RCA)信息。
  2. 向用户提供可能的解决方案的列表。

在这里,值得一提的是JIRA和其他错误跟踪工具都有局限性。这些工具不会主动告诉用户此问题以前已经发生,并且可能不会记录这些不是真正的bug的常见问题。

执行KIAS

这是如何实现可执行KIAS的想法:

  • 通过将KIAS信息记录在YAML文件中(实际上可以是任何格式,包括XML,JSON,TXT),以及用于解析预注册错误并将脚本信息附加到在编译/模拟日志文件中看到的错误的脚本。
  • 通过使用系统Verilog回调来拦截UVM_ERROR / UVM_FATAL消息,并在将信息打印到日志之前对其进行分析和附加。

现在,让我们探索两个选项。

1. 使用系统Verilog回调

对于只希望登录KIAS来查看运行时问题和uvm错误的用户,这是理想的解决方案。它使用uvm_report_catcher类中的catch和throw机制。这就像我们要为某些测试降级TB中的某些错误时实施异常处理。

但是,在这种情况下,我们真正要做的是通过将KIAS信息附加到错误字符串本身来修改错误消息,从而自动打印有关错误/问题的以前记录的调试信息。

uvm_report_catcher用于捕获uvm报告服务器发出的消息。捕手是uvm_callbacks#(uvm_report_object,uvm_report_catcher)对象,因此uvm_callback和uvm_callbacks#(T,CB)类中的所有功能均可用于注册捕手和控制捕手状态。

uvm_callbacks#(uvm_report_object,uvm_report_catcher)类被别名为uvm_report_cb以使其更易于使用。可以向一个报告对象注册多个报告捕获器。可以将捕获器注册为默认捕获器,以捕获所有uvm_report_object报告器上的所有报告,或者可以将捕获器附加到特定的报告对象(即组件)。

uvm_report_catcher的用户扩展名必须实现catch方法,在该方法中指定了在捕获报告时要采取的措施。 catch方法可以返回CAUGHT(在这种情况下将立即停止对报告的进一步处理),或者返回THROW(在这种情况下,将(可能已修改的)报告传递给其他已注册的捕获器)。捕获器按照注册的顺序进行处理。

在捕获报告时,catch方法可以在报告服务器最终发布报告之前修改严重性,ID,操作,详细程度或报告字符串本身。在这种情况下,我们打算更改报告字符串。


图1.我们定义了一些宏来帮助我们提供基于字符串的消息,无论何时记录错误,我们都希望看到它们。

这是回调的实现。


图2.实现使用系统回调。

2. KIAS Python脚本

KIAS Python脚本可以捕获任何形式的错误字符串(编译或模拟),并在给定的日志文件中进行搜索以提供有关该错误字符串的KIAS信息。该脚本可以解析与语言,EDA工具或过程无关的日志文件,从而帮助验证工程师和设计工程师。

它具有以YAML文件格式存储的KIAS的查找列表。用户可以使用GUI模式将信息保存在YAML文件中,该信息将在随后的所有KIAS脚本执行中分析日志文件中的错误字符串,并为其提供记录的可能原因和可能的解决方案。

KIAS脚本主要具有三个功能。第一个方法是为用户提供一种使用GUI平台(图3所示的输入形式)或交互模式轻松地将新KIAS添加到YAML文件的方法。它可以帮助用户创建KIAS数据库,以供下一个功能使用。

第二个函数加载YAML文件,并将其内容提取为Python字典(dict)数据类型。此功能的一部分还可以区分编译错误和仿真错误KIAS,以便可以将两者分为两个不同的数组或列表。

第三个功能使用第二个功能创建的列表来搜索和处理日志文件中的错误消息,并附加从YAML文件中提取的KIAS信息。


图3.这是KIAS输入表单的外观;用户可以将新的KIAS添加到YAML,还可以在错误字符串中使用正则表达式来相应地执行字符串匹配。

这是示例用法和YAML格式的外观:

样品用法

./kias_exec.py –infile kias.yaml –log调试–comp compile.log –sim sim.log

YAML格式

孩子: 001

自己的: Ronak

典型值: COM

呃: RO period mismatch

RCA: RO期间不匹配,因为测试用例中提供的clk期间不正确

SOL: |

根据RTL /波形提供适当的测试周期。

检查RTL以获取正确的时钟频率。 -


罗纳克 Dham和Sourabh Goyal在Xilinx上进行FPGA验证。

>>本文最初发布在我们的姊妹网站上, EDN.


相关内容:

要获得更多嵌入式产品, 订阅嵌入式’的每周电子邮件通讯.

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.