通过新的配置系统使 UVM 更快 - Semiwiki

通过新的配置系统使 UVM 更快 – Semiwiki

源节点: 3036575

通用验证方法 (UVM) 是一种帮助验证 SystemVerilog 设计的流行方法,它包括 配置系统 不幸的是,它存在一些速度和使用问题。来自西门子 EDA 的 Rich Edelman 撰写了一篇详细的 20 页论文,主题是如何避免这些问题,我已经仔细阅读了该论文,为您总结了其中的亮点。验证工程师使用 UVM 配置数据库来设置值,然后在稍后的 UVM 测试中获取这些值。设置和获取值“T”的一个示例是:

uvm_config#(T)::set(范围、实例路径名称、字段名称、值); uvm_config#(T)::get(范围、实例路径名称、字段名称、值);

将UVM测试台连接到被测设备使用配置数据库来传递虚拟接口。使用UVM配置存在三个问题:

  • 代码量很大,大约 2,600 行代码
  • 需要精确的类型匹配,因此 'int' 和 'bit' 不一样
  • 慢代码

考虑代码缓慢的情况,因为使用带有通配符的名称对 set() 进行数千次调用可能需要长达 30 分钟才能完成“设置”和“获取”阶段。

经过时间 分钟

Rich 提出了一种新的 UVM 配置解决方案,其速度更快,相比之下只需要几秒钟。

新解分钟

如果您的 UVM 代码避免使用通配符并且很少有“设置”命令,那么您的代码将会运行得更快。

UVM 配置问题的可能解决方案包括:

  • 使用全局变量代替
  • 使用一组 UVM 配置()
  • 通过一些 set() 使用 UVM 配置
  • 使用配置树
  • 尝试不同的东西

最后一种尝试不同的方法是新的解决方案,它继续使用 set() 和 get() API,然后通过删除配置的参数化、删除优先级并删除查找算法更改来简化。这种新方法的结果是速度很快。

您的新配置项在“config_item”的派生类中定义,下面的示例显示“int value”作为要设置的属性。出于调试目的,您可以添加漂亮打印功能。

类 my_special_config_item 扩展 config_item;函数新(字符串名称=“my_special_config_item”);超级新(名称); endfunction int 值;虚函数 string Convert2String(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string());结束函数结束类

“config_item”有一个名称属性,并且会查找该名称以及实例名称。配置对象还有一个 get_name() 函数来返回名称。为了查找任何“instance_name.field_name”,配置数据库使用关联数组来实现快速查找和创建速度。
为了可追溯性,您可以找出谁设置了或谁调用了 get,因为文件名和行号是 set() 和 get() 函数调用中的字段。

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

可以在调试期间打印访问器队列,以查看谁调用了 set() 和 get()。

为了支持通配符,需要使用容器添加查找机制。考虑实例名称“top.abcd*_0”。

容器树最小
容器树

实例名称的通配符部分是使用容器树而不是关联数组来处理的。

总结

可以使用 UVM 配置数据库在 UVM 测试平台中的模块/实例和基于类的世界之间共享数据,只需注意速度减慢即可。如果您的方法使用大量配置,那么请考虑使用引入的新方法,该方法的包使用大约 300 行代码,而不是 UVM 配置数据库文件中的 2,600 行代码。

阅读完整的 20 页论文, 避免配置疯狂的简单方法 在西门子 EDA。

相关博客

通过以下方式分享此帖子:

时间戳记:

更多来自 半维基