【UVM基础】Master Agent中(DUT输入端)设置一个monitor必要性解释

25 篇文章 ¥49.90 ¥99.00
在UVM验证环境中,虽然不是必须,但在DUT输入口设置monitor是推荐的做法。这有助于在大型项目中减少协议理解错误,实现代码重用,并确保reference model和DUT的数据一致性,防止因数据转化过程中的错误导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

:是否有必要在DUT的输入口设置一个monitor?
:有必要,但不强制。

详细原因:由于transaction是由driver产生并输出到DUT的端口上, 所以driver可以直接将其交给后面的reference model,如下图所示框图。

图2-1 简单验证平台框图

但是还是推荐使用monitor, 框图如下:

图2-2 典型UVM验证平台框图

原因如下:

  • 第一, 在一个大型的项目中, driver根据某一协议发送数据, 而monitor根据这种协议收集数据, 如果driver和monitor由不同人员实现, 那么可以大大减少其中任何一方对协议理解的错误
  • 第二, 在实现代码重用时, 使用monitor是非常有必要的。
  • 第三,让reference model和DUT都从interface上取数据,保证数据来源一致,没有经过中间组件的转化。如果driver直接给reference model,那么DUT和reference model的
UVM中,跨agent的数据通信可以通过多种机制实现,例如使用TLM(Transaction-Level Modeling)口、数据共享或者队列等。对于AHB agent读取出的数据要传递到另一个agent中的情况,这里给出一种使用TLM口的方法: 1. 定义一个TLM口在需要接收数据的agent中。这通常是一个export,因为你需要将这个口连接到另一个agent的export或者imp(implementation)。 2. 在产生数据的AHB agent中,当读取操作完成后,将数据封装成一个uvm_transaction或者自定义的事务类,并通过TLM口发送出去。 3. 在接收数据的agent中,你将定义一个分析器(analyzer)或者一个处理事务的组件,它将连接到前面定义的export,用于接收数据并进行后续处理。 一个简单的示例代码如下: ```verilog // 在接收数据的agent中 class ReceiverAgent extends uvm_agent; uvm_analysis_export #(YourTransactionClass) data_export; function new(string name, uvm_component parent); super.new(name, parent); endfunction virtual function void build_phase(uvm_phase phase); data_export = new("data_export", this); endfunction // ... 其他组件和代码 endclass // 在AHB agent中,完成读操作后 class AHBAgent extends uvm_agent; // ... uvm_analysis_port #(YourTransactionClass) read_data_port; function new(string name, uvm_component parent); super.new(name, parent); read_data_port = new("read_data_port", this); endfunction // ... 读操作完成后的回调函数或任务 virtual task process_read_data(YourTransactionClass tr); read_data_port.write(tr); // 将读取的数据发送到port endtask endclass ``` 请注意,上述代码仅为示例,实际使用时需要根据你的具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值