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