APB VIP

本文详细介绍了APB总线协议,包括信号列表、状态机和读写操作。重点讨论了读操作的时序,并概述了APB VIP的开发阶段,如定义APB、搭建VIP和覆盖率分析。同时,文章还提到了接口断言检查和覆盖率关注点。
摘要由CSDN通过智能技术生成

APB总线协议详解

APB 信号列表

在这里插入图片描述

由上表可以看出,APB信号主要有系统信号(PCLK、PRESETn)、地址信号(PADDR[31:0])、方向信号(PWRITE)、数据信号(WDATA[31:0]、PRDATA[31:0])和传输阶段控制信号(PSELx、PENABLE)五部分组成。

APB 状态机

image-20210306140707969

@1、系统初始化为IDLE状态,此时没有传输操作,也没有选中任何模块

@2、SETUP状态:准备阶段,当有传输要进行时,PSELx=1,PENABLE=0,维持一个周期,下个clk上升沿来临时系统进入ENABLE状态。

@3、ENABLE状态:维持之前的PADDR、PSEL、PWRITE不变,将PENABLE置1。维持一个周期,非连续传输——进入IDLE;连续传输——进入SETUP

读操作(重要)

在这里插入图片描述

在 T1 时,有限状态机进入预设的 IDLE 状态;
在 T2 时,数据地址、读写控制信号和写入的数据会在频率正沿触发时,开始作写的数据传递准备,这个周期也就是刚才所提及SETUP状态。译码电路在此状态会根据数据地址去译码出所要写入APB Slave,此时所对应到 S 的 PSEL 信号将由 0 变 1;
在 T3 时,有限状态机会进入 ENABLE 状态,PENABLE 信号在此状态会被设成 1;
在 T4 频率正沿触发时,PENABLE 信号将由 1 变 0,而 PSEL 信号在若没有其它数据的写入动作时,也将由 1 变 0。为了减少功率的消耗,APB 的数据地址和读写控制信号在下一笔数据传递前,将不会作任何改变。

读操作(重要)

在这里插入图片描述

由图中可发现除了写信号是倒过来有效外,APB 读操作时序图和写操作时序图非常相似,在这里我们就不再作详细的解释。

特别注意的是,在 T3 后,也就是在进入 ENABLE 周期后,APB 从必须要将 M 所要读取的数据准备好,以便 M 可以在 ENABLE 周期末被 T4 正时钟沿触发时正确的将数据读取。

主要的开发阶段

阶段1——定义APB

1、功能特性提取——APB总线有哪些功能,对这些功能作拆分

    • 单个transaction操作

      • 单个transaction写操作
      • 单个transaction读操作
      • 单个transaction先写后读
    • 多粒度transaction操作——关联数组、队列、动态数组等

      • 对数组进行写操作
      • 对数组进行读操作

2、特性覆盖率创建及映射

covergroup cg_apb_command @(posedge clk iff rstn);
    pwrite: coverpoint pwrite{
   
      type_option.weight = 0;
      bins write = {
   1};
      bins read  = {
   0};

    }
    psel : coverpoint psel{
   
      type_option.weight = 0;
      bins sel   = {
   1};
      bins unsel = {
   0};
    }
    cmd  : cross pwrite, psel{
   
      bins cmd_write = binsof(psel.sel) && binsof(pwrite.write);//有效写,
      bins cmd_read  = binsof(psel.sel) && binsof(pwrite.read);
      bins cmd_idle  = binsof(psel.unsel);
    }
  endgroup

  // APB transaction timing group
  covergroup cg_apb_trans_timing_group @(posedge clk iff rstn);
    psel: coverpoint psel{
   
      bins single   = (0 => 1 => 1  => 0); 
      bins burst_2  = (0 => 1 [*4]  => 0); 
      bins burst_4  = (0 => 1 [*8]  => 0); 
      bins burst_8  = (0 => 1 [*16] => 0); 
      bins burst_16 = (0 => 1 [*32] => 0); 
      bins burst_32 = (0 => 1 [*64] => 0); 
    }
    penable: coverpoint penable {
   
      bins single = (0 => 1 => 0 [*2:10] => 1);
      bins burst  = (0 => 1 => 0         => 1);
    }
  endgroup

  // APB write & read order group
  covergroup cg_apb_write_read_order_group @(posedge clk iff (rstn && penable));
    write_read_order: coverpoint pwrite{
   
      bins write_write = (1 => 1);//连续写
      bins write_read  = (1 => 0);//先写后读
      bins read_write  = (0 => 1);//先读后写
      bins read_read   = (0 => 0);//连续读
    } 
  endgroup

  initial begin
    automatic cg_apb_command cg0 = new();
    automatic cg_apb_trans_timing_group cg1 = new();
    automatic cg_apb_write_read_order_group cg2 = new();
  end

endinterface : apb_if

`endif // APB_IF_SV

阶段2——VIP基本搭建

1、driver,sequencer,monitor

  • mst_drv
task apb_master_driver::get_and_drive();
  forever begin
    seq_item_port.get_next_item(req);
    `uvm_inf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值