UVM代码中的反对意见处理与同步技巧
11/18/2024, 06:00 PM UTC
在UVM代码中处理反对意见Handling Objections in UVM Code
➀ 本文讨论了在UVM代码中使用反对意见进行同步。 ➁ 提供了使用uvm_objection的效率示例和替代方法。 ➂ 强调了避免过度使用反对意见以避免减慢仿真速度的重要性。➀ This blog discusses the use of objections in UVM code for synchronization. ➁ It provides examples and alternative approaches to using uvm_objection efficiently. ➂ The importance of not overusing objections to avoid slowing down simulations is emphasized.在编写UVM代码时,我们常常会遇到需要同步不同部分的代码的情况。使用uvm_objection是其中一种常见的方法。本文将深入探讨如何有效地使用uvm_objection,并提供一些替代同步方法。
UVM(Universal Verification Methodology)是一种广泛使用的验证方法,它基于过程,这些过程可以在阶段内自动或设计同步。通常,我们会在某个阶段提出反对意见,然后在另一个阶段取消这些反对意见。
以下是一个使用uvm_objection确保仿真在取消异常发生之前不退出的UVM示例:
虽然完整的源代码超过1000行,但建议每个测试中只使用一次uvm_objection。以下是一个包含四个序列的UVM测试示例,使用raise_objection和drop_objection:
每个四个环境(e1 – e4)都调用raise_objection和drop_objection,这并不高效。一种更简单的UVM反对方法是使用uvm_barrier.svh,它只有240行,但我们可以用更少的行定义自己的屏障函数,如下所示:
这个屏障代码使用计数来通过屏障。当计数在取消后达到0时,它将退出。
另一种同步方法是使用如start、middle和end这样的名称。
这个包装器在需要时创建屏障类,并使用三个名称:raise、drop和get。
以下是一个类和模块的示例,其中有两个类实例和三个Verilog模块。模块和类实例之间有三个阶段的同步:开始、中间和结束。对象在每个阶段模拟一段时间,然后取消反对。当所有对象都取消反对后,处理继续。
运行此示例将显示每个对象在“取消”返回后报告,然后每个对象继续前进。
以下是一些可视化:中间阶段和每个对象的负载。每个阶段——这里的中间阶段——按顺序显示每个对象:“class1”、“B”、“A”、“class2”和“C”,以及每个对象的负载。
这个视图显示了多个阶段的开始和结束,所有这些都是同步的。
扩展视图提供了每个阶段中对象和负载的详细信息。
反对意见和阶段是相关联的,因此在使用反对意见时,应结合使用阶段,同时限制其使用以提高效率。创建阶段的一种方法是通过像uvm_barrier这样的屏障,或使用本文中提供的示例。您可以使用自己的代码解决同步问题。在代码中添加过多的raise_objection和drop_objection对只会减慢仿真时间。
---
本文由大语言模型(LLM)生成,旨在为读者提供半导体新闻内容的知识扩展(Beta)。