本篇文章介绍命令层主动事务处理器的编写方法。命令层事务处理器就是一个一端是事务级接口,一端连接物理信号,也称为BFM。如图所示:
第一步:
第二步:
第三步:事务描述符(同命令层监视器)
第四步:主动事务处理器
现在开始写主动性事务处理器,它是由vmm_xactor基类扩展来的类。
实现读和写周期的任务在类中实现。它们定义为virtual,这样就可以在事务处理器的扩展类中修改它们的行为。它们定义为protected,以防止他们在类外被调用和出现同时访问总线的问题。
`ifndef APB_MASTER__SV
`define APB_MASTER__SV
`include “apb_if.sv”
`include “apb_rw.sv”
...
class apb_master extends vmm_xactor;
...
virtual protected task read(input bit [31:0] addr,
output logic [31:0] data);
...
endtask: read
virtual protected task write(input bit [31:0] addr,
input bit [31:0] data);
...
endtask: write
...
endclass: apb_master
本事务处理器需要一个事务级接口来接收事务和一个物理级接口。前者用vmm_channel实例,后者用虚拟端口virtual modport。它们都通过构造函数传递给事务处理器,都保存在公共类属性中。
`ifndef APB_MASTER__SV
`define APB_MASTER__SV
`include “apb_if.sv”
`include “apb_rw.sv”
...
class apb_master extends vmm_xactor;
apb_rw_channel in_chan;
virtual apb_if.master sigs;
function new(string name,
int unsigned stream_id,
virtual apb_if.master sigs,
apb_rw_channel in_chan = null);
super.new(“APB Master”, name, strea