首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UVM测试平台--将两个不同的驱动程序连接到同一个接口的"UVM“方法是什么?

UVM测试平台--将两个不同的驱动程序连接到同一个接口的"UVM“方法是什么?
EN

Stack Overflow用户
提问于 2014-05-27 20:13:39
回答 2查看 3.3K关注 0票数 3

在我的Testbench中,我有一个需要驱动的接口。该接口可以在两种不同的模式下驱动,每种模式都有自己的驱动协议和事务类型。

到目前为止,我已经分别设计了两个uvm_agents。现在,我需要一种方法来交换其中一种或另一种,这取决于我正在运行的测试用例。我还想以最符合UVM哲学的方式来做这件事。

我能想到的最好的方法是:在我的uvm_env中,从测试中获取一个uvm_db_config参数,该参数要么是"ModeA“,要么是"ModeB",并在此基础上适当地将代理的is_active设置为"UVM_ACTIVE”和"UVM_PASSIVE“。

我想对这种方法提出意见。

我建议的一种方法是保留一个通用的uvm_agent,并根据配置实例化uvm_driver/uvm_driver。不太确定这种方法,因为它看起来凌乱。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 08:46:15

我也建议,像都铎一样,只使用一种代理人。但是,我将使用继承,声明一个base_driver和一个base_sequencer (可能具有来自ModeA或ModeB驱动程序和/或排序器的通用功能),而ModeA和ModeB单元将扩展这些基本驱动程序。然后,在代理中,并在每个测试的uvm_config_db集中使用一个标志,您可以在实例化其中一个或另一个:

基地司机:

代码语言:javascript
运行
复制
class my_proj_base_driver extends uvm_driver#(my_proj_tr);
[...]

ModeA驱动程序:

代码语言:javascript
运行
复制
class my_proj_ModeA_driver extends my_proj_base_driver;
[...]

ModeB驱动程序:

代码语言:javascript
运行
复制
class my_proj_ModeB_driver extends my_proj_base_driver;
[...]

在代理人中:

代码语言:javascript
运行
复制
[...]

my_proj_base_driver driver;
bit modeAorB // 0 for A, 1 for B

[...]

if (!uvm_config_db#(bit)::get(this,"","modeAorB", modeAorB))
  `uvm_fatal("NOMODE","No mode set for this agent")

if(!modeAorB)
  driver = my_proj_ModeA_driver::type_id::create(.name("driver"), .parent(this));
else
  driver = my_proj_ModeB_driver::type_id::create(.name("driver"), .parent(this));

排序器也是一样。

票数 4
EN

Stack Overflow用户

发布于 2014-05-28 08:09:47

我希望每个模式都有一个公共代理类和一个具体的类,然后根据我正在运行的测试执行类型重写。通过这种方式,很明显只有一个代理处理该接口(而不是2,当它根本不被使用时,其中一个被设置为被动)。一个代理类实例化一组驱动程序/排序器,另一个代理类实例化其他代理。这样,您只需设置一种类型覆盖(代理),而不是2(在驱动程序和排序器)。

如果在这两种模式中都使用相同的监视器,那么最好采用一种代理方法,因为您只需将记分板连接到一个监视器,而不是一个在代理A中,另一个在代理B中,这取决于模式。

您的方法也同样有效,在这种情况下,我不认为有一种标准的UVM方法。我让一位同事为GPIO接口做了类似的事情,而且效果很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23898090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档