【systemverilog项目】AHB-SRAMC(AHB总线)个人学习笔记

AHB-SRAMC项目中,应用的总线正是AMBA总线中的AHB总线。
1.AMBA总线的简要概述(关于AMBA总线的详细内容参见《AMBA总线》pdf):
AMBA总线结构
AMBA总线中,有三种总线:AHB(高速)、ASB和APB(低速),高低速总线之间,通过bridge进行连接。
在总线上,挂有主设备master和其他子设备slave。在总线上传输的每一次动作(读数据写数据均是),都是由主设备master发起的,slave进行响应。因为总线上挂有多个master和slave,因此需要arbiter(仲裁器)来决定当前总线应该由哪一个master来控制使用权。decoder(解码器)用来选择传输slave的读出数据。
在这里插入图片描述
AMBA总线的具体应用步骤:
1)master向arbiter发送一个请求信号,arbiter决定是否让该master使用AMBA总线,若允许,则该master控制AMBA总线的使用权。
2)master开始在AMBA总线上传输地址和控制信号。具体信号包括:方向、传输宽度和传输类型,后传输数据信号。
3)slave接受以上信号并作出读、写操作,并在AMBA总线上发送数据信号和ready信号。
PS:AHB总线传输分为两步,地址周期和数据周期。首先是地址周期,总线传输addr、contral信号;数据周期总线传输wdata、rdata、ready信号。
下表详细介绍了AMAB总线中的AHB总线上各个信号的定义以及信号的产生与传输方向。
在这里插入图片描述
在这里插入图片描述
依照上述信号描述,基础的传输波形图为
在这里插入图片描述
传输过程分为address phase和data phase两个阶段,第一个阶段master发送地址和控制信号,第二个阶段master或slave发送data信号和ready信号。
2.AHB设备接口
master接口
在这里插入图片描述
slave接口
在这里插入图片描述
arbiter接口
在这里插入图片描述
decoder接口
在这里插入图片描述
3.AHB-SRAMC项目(AHB总线)
1)RAM内部构架(slave,也是该验证项目的DUT):
在这里插入图片描述
2)AHB-SRAMC验证构架
在这里插入图片描述
根据参考代码,我自己绘出的AHB-SRAMC验证构架图实际是
在这里插入图片描述
代码编写思路:
1.由AHB-Slave接口信号编写ahb-slave-interface代码

`ifndef AHB_SLV_IF_SV      //预编译
`define AHB_SLV_IF_SV

interface ahb_slv_if(input hclk);        
  logic           hresetn;     //接口信号列表,和下面drv_cb与mon_cb接口列表所包含的信号相同         
  logic           hsel;                
  logic           hwrite;                
  logic           hready;               
  logic  [1:0]    htrans;               
  logic  [2:0]    hsize;                 
  logic  [2:0]    hburst;                
  logic  [31:0]   haddr;             
  logic  [31:0]   hwdata;              
  logic           hready_resp;           
  logic  [1:0]    hresp;                
  logic  [31:0]   hrdata;               

  clocking  drv_cb@(posedge hclk);    
    output      hsel;        //drive按照DUT,区分其中的output和input接口信号   
    output      hready;        
    output      haddr;      
    output      htrans;      
    output      hsize;       
    output      hwrite;     
    output      hwdata;
    input       hrdata;     
  endclocking

  clocking  mon_cb@(posedge hclk);        
    input      hsel;            //monitor接收接口上的所有信号,均为input,后续通过mailbox传递给scoreboard进行check
    input      hready;
    input      haddr;         
    input      htrans;        
    input      hsize;         
    input      hwrite;        
    input      hwdata;
    input      hrdata;                   
  endclocking

  modport driver(clocking drv_cb);      
  modport monitor(clocking mon_cb);    

endinterface

`endif

2.利用接口信号进行数据建模,数据包transaction代码

`ifndef TRANSACTION_SV
`define TRANSACTION_SV

class transaction;                  
	rand bit  [31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值