主动事务处理器编写BFM

本文档详细介绍了如何在VMM(Virtual Memory Manager)框架下编写主动事务处理器APB_Master,该处理器用于APB(Advanced Peripheral Bus)总线。主要内容包括事务描述符、主动事务处理器的构造、读写任务的实现、回调方法的使用以及调试信息的添加。文章通过步骤指导,展示了如何扩展vmm_xactor基类,实现事务处理器的阻塞、非阻塞和乱序处理,并通过回调机制增强其可重用性。
摘要由CSDN通过智能技术生成

本篇文章介绍命令层主动事务处理器的编写方法。命令层事务处理器就是一个一端是事务级接口,一端连接物理信号,也称为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值