在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2029|回复: 8

[求助] uvm里,怎么实现slave agent?

[复制链接]
发表于 2023-12-17 23:40:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
书上写的全都是怎么向dut主动发激励,这个很好理解。
可是怎么实现一个agent,是用来等待接受dut的信号,然后简单判断后,构造一个resp sequence再发回给dut的呢。

我理解是用在monitor里去做这个事情,但是感觉又没看到过这样的用法。
所以很好奇,这种场景如此常见,最佳实践是该怎么做呢?
发表于 2023-12-18 09:36:08 | 显示全部楼层
我一直叫它reactive agent。

首先,用sequencer启动一个无限循环的slave sequence。
class slave_sequence extends uvm_sequence;
  task body();
    forever begin
      `uvm_do(slave_item)
    end
  endtask
endclass

driver 跟普通的active driver 就差不多了

class slave_driver extends uvm_driver;
  task run_phase(uvm_phase phase);
    forever begin
      wait @(master_requests);
      seq_item_port.get_next_item(req);
      drive_response(req);
      seq_item_port.item_done();
    end
  endtask
endclass
 楼主| 发表于 2023-12-18 15:01:33 | 显示全部楼层


yuanpin318 发表于 2023-12-18 09:36
我一直叫它reactive agent。

首先,用sequencer启动一个无限循环的slave sequence。


万分感谢!!!
被你肯定强化一下以后,心里舒服多了

这个在sequence在test里start时,一般也是用fork ... join_none在后台运行吧,我看到过这样的用法,当时也很神奇这种写法,可惜也没在书上找到印证
书上不写没关系,这就是门槛吧:),再次感谢大佬

 楼主| 发表于 2023-12-18 17:02:20 | 显示全部楼层


yuanpin318 发表于 2023-12-18 09:36
我一直叫它reactive agent。

首先,用sequencer启动一个无限循环的slave sequence。


谢谢大佬提供的关键字,原来这个是个很大的topic,不是我的错啊,原来确实官方说明就不详,没有什么最佳实践,都靠使用者自由发挥

https://uvmkit.com/reactive_agents.html

 楼主| 发表于 2023-12-18 18:56:58 | 显示全部楼层
本帖最后由 erwang 于 2023-12-18 18:59 编辑


yuanpin318 发表于 2023-12-18 09:36
我一直叫它reactive agent。

首先,用sequencer启动一个无限循环的slave sequence。


仔细看了那个链接里提供的例子,确实是在monitor里监控的request,和我最开始想的差不多,只是TLM这些太绕了,隐藏的看不清
不过可以肯定的是,这玩意没有什么官方推荐做法,开发者随意发挥,想怎么做都可以

                               
登录/注册后可看大图

发表于 2024-2-18 17:11:42 | 显示全部楼层
slave_agent也可以在driver里用一个while(1)的循环一直相应总线的访问,而不需要有sequencer,driver是被动地响应,并不需要sequencer主动发送req过来,因为主动发起包的操作通常是dut,你也不知道dut上什么时候会有req行为,因而不需要模拟出dut发出的req来产生req给sequencer再给到driver,上面有人提到的sequence启动一个while(1)循环发送req给sequencer在给driver完全是多此一举的,对于slave_agent通常就只有driver和monitor就行了, 根本不需要sequencer
发表于 2024-2-22 14:16:28 | 显示全部楼层


meistin 发表于 2024-2-18 17:11
slave_agent也可以在driver里用一个while(1)的循环一直相应总线的访问,而不需要有sequencer,driver是被动 ...


请教一下大佬,之前搞了一个项目,模拟类芯片,内部一个寄存器组,外部一个SPI slave接口,spi VIP master去访问DUT ,读写操作寄存器。这样的sequence怎么写呢?
一直没解决读的问题,最后用了一个task ,集成到interface里勉强交差。但是一直好奇,如果只是SPI master slave收发数据,那sequence 里约束一下item就好了,但是
现在是要item发送一个addr ,需要返回一个 data ,这个data 在test中怎么获取呢?
发表于 2024-2-29 15:21:37 | 显示全部楼层


adan313 发表于 2024-2-22 14:16
请教一下大佬,之前搞了一个项目,模拟类芯片,内部一个寄存器组,外部一个SPI slave接口,spi VIP maste ...


第一种是直接修改driver获取到的item里的data值,这个item跟在sequence发出的transaction是同一个句柄,driver里修改了sequence里也能拿到,这样就可以把读回的值从driver传递到sequence中,第二种方法是通过response的方式,driver中put_response(tr),sequence中get_response(tr)来进行数据传递
发表于 2024-6-18 19:26:32 来自手机 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 19:29 , Processed in 0.025868 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表