首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

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
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23898090

复制
相关文章

相似问题

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