System verilog 在从模式下实现UVM代理

System verilog 在从模式下实现UVM代理,system-verilog,uvm,System Verilog,Uvm,我在uvm\u agent中实现了一个从机模型。我所说的“从”是指它不能自己启动事务。事务始终由另一方(主DUT)发起。因此,它是一种被动代理(尽管它仍然能够传输回复数据包)。 当从机检测到来自DUT的数据包时,它将自动响应/回复(基于其协议)另一个数据包。 从机代理有一个监听DUT发起传输的监视器。由于它能够传输数据包,从属代理也有一个驱动程序来发送应答数据包 +------------+ master initiate transfer +------------------------

我在
uvm\u agent
中实现了一个从机模型。我所说的“从”是指它不能自己启动事务。事务始终由另一方(主DUT)发起。因此,它是一种被动代理(尽管它仍然能够传输回复数据包)。
当从机检测到来自DUT的数据包时,它将自动响应/回复(基于其协议)另一个数据包。 从机代理有一个监听DUT发起传输的监视器。由于它能够传输数据包,从属代理也有一个驱动程序来发送应答数据包

+------------+  master initiate transfer  +------------------------+
| Master DUT |  ------------------------> | UVM Agent - slave mode |
|            |                            | Monitor                |
|            |                            | Driver     Sequencer   |
+------------+                            +------------------------+


+------------+                            +------------------------+
| Master DUT |                            | UVM Agent - slave mode |
|            |   slave auto reply         | Monitor                |
|            | <------------------------- | Driver     Sequencer   |
+------------+                            +------------------------+
+-------------+主机启动传输+------------------------+
|主DUT |-------------------------->| UVM代理-从模式|
|| |监视器|
|| |驱动器定序器|
+------------+                            +------------------------+
+------------+                            +------------------------+
|主DUT | | UVM代理-从模式|
||从机自动应答|监视器|

||您想要的也被称为反应性代理。不要把它与被动代理混淆,被动代理只监视信号,不驱动信号

在这样的代理中,您要做的就是在sequencer上启动一个无止境的循环,以驱动从属项

class slave_sequence extends uvm_sequence;
  task body();
    forever begin
      `uvm_do(slave_item)
    end
  endtask
endclass
驱动程序将等待主机启动一个事务(如何启动取决于协议),当它看到一个事务时,将调用
get\u next\u item(…)
,驱动响应并返回等待另一个事务

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
从属代理使用的序列项主要用于随机化响应延迟和读取数据。您甚至可以创建更奇特的东西,比如从序列(一个简单的数组)中的内存模型。当从某个地址读取数据时,您从内存模型中传递数据,您只需随机化延迟

有关具体示例,请查看以下链接: