Verilog 工厂是如何在UVM中实现的?

Verilog 工厂是如何在UVM中实现的?,verilog,system-verilog,uvm,Verilog,System Verilog,Uvm,在UVM中,工厂是最重要的。那么它是如何在内部实现的。表示它如何存储各种对象和创建通用数据库 我知道它有一些关联数组,一个以key作为对象名,另一个以key作为对象类型。但我不知道这两个阵列如何构建数据库?甚至我也不知道我的信息是否正确 还请列出一些相关的类,以便工厂实施和修改。(就像umv_资源是一种可能。)这篇DVcon论文在公开发布之前就考虑到了UVM工厂。所有原则都适用。谢谢@dave_59。还有一个问题,这个工厂数据库、uvm_config_db数据库、uvm_resource_poo

在UVM中,工厂是最重要的。那么它是如何在内部实现的。表示它如何存储各种对象和创建通用数据库

我知道它有一些关联数组,一个以key作为对象名,另一个以key作为对象类型。但我不知道这两个阵列如何构建数据库?甚至我也不知道我的信息是否正确


还请列出一些相关的类,以便工厂实施和修改。(就像umv_资源是一种可能。)

这篇DVcon论文在公开发布之前就考虑到了UVM工厂。所有原则都适用。

谢谢@dave_59。还有一个问题,这个工厂数据库、uvm_config_db数据库、uvm_resource_pool数据库是否都是同一个数据库?非常感谢那篇论文,它对工厂有了一个很好的了解,但我不明白工厂类能做什么(根据论文),也可以通过分层访问来完成。就像我们想在sequencer中更改事务一样,我们可以创建一个派生事务的对象,并在sequencer类(env.agent.sequencer.trans=new_trans_object)中分层替换它。那么factory的具体用途是什么???@dave_59,请在回答中添加要点。只有链接的答案被认为是低质量的,并且有被标记的风险。链接应该添加到答案中(支持文档、引用、进一步阅读等),而不是答案。工厂的关键功能是,它允许您更改代码的行为,而无需更改代码。在UVM中,可以在顶级测试中进行覆盖,甚至可以从命令行动态地进行覆盖。通过分层访问进行修改并不总是可能的,因为您不知道较低级别的代码何时将构造新对象。工厂设计模式在面向对象编程中非常常见。