前言

之前自己做了AHB_APB和APB_UART,深刻认识到agents,就是根据AMBA协议写的,称为VIP。
这篇文章就简单列出APB_VIP的相关介绍。

介绍

APB VIP支持验证SoC设计,其中包括实现APB规范的接口,该VIP可在UVM测试平台中的使用,且可提供:

  • 协议功能和抽象
  • 受约束的随机验证
  • 功能覆盖
  • 可快速创建复杂的测试
  • 模块化测试平台架构,可提供最大的重用性可扩展性和模块化
  • 经过验证的验证方法和方法
  • 事务级模型
  • 自检测试
  • 面向对象接口

协议特性

APB VIP当前支持以下协议功能:

  • APB2功能
    APB Master通过外围总线启动传输
    APB Master支持写,读和空闲事务
    APB Master最多支持16个从端设备
    APB Slave存储器响应可通过序列建模
  • APB3功能
    APB Slave支持使用 PREADY信号的等待状态
    APB Slave支持使用 PSLVERR信号进行错误响应
  • APB4功能
    APB Master支持使用 STRB信号进行写选通
    APB Master支持 PPROT信号

验证特性

APB VIP当前支持以下验证功能:

  • 默认功能覆盖范围(事务、状态和跳转)
  • 基本协议检查
  • 对延迟和超时的控制
  • 支持协议分析

方法学特性

APB VIP当前支持以下方法功能:

  • VIP被组织为一个 system env,其中包含一组 master agent和 slave agent。master agent和 stave agent也可以在独立模式下使用。
  • analysis port,用于将 master/ slave agent连接到 scoreboard或任何其他组件
  • master/ slave agente的回调函数
  • 表示事务( transaction)开始和结束的事件

VIP安装

  • 按照用户手册即可以在系统安装VIP
  • 安装时需要设置必要的环境变量$ DESIGNWARE_HOME,该环境变量即指向 Synopsys VIP安装源,其包括各类可用来安装和集成的VIP

集成过程

Master Agent

  • master agent封装了 master sequencer, master driver和system monitor
  • 可被配置为 active mode或者 passive mode
  • 可通过 system configuration配置,该配置应该在build phase完成传递
  • 在执行 APB transaction过程中, master driver和 system monitors会调用预定义好的回调方法
  • APB transaction在总线执行结束时,完整的 sequence item将由 system monitor通过 analysis port完成传播,送往scoreboards等验证环境组件。

Slave Agent

  • 封装了 slave sequencer, slave driver和 slave monitor
  • 可被配置为 active mode或者 passive mode
  • 用户应该在 slave active模式时,设置 APB response sequence控制 APB slave的总线反馈方式
  • 通过 slave configuration配置,该配置由 system configuration生成,并应在 build phase完成传递
  • slave monitor采样APB总线信号,并在发现新的 transaction时,将 response request sequence发往 slave sequencer
  • slave response sequencer可控制恰当的 slave反馈行为,由slave sequencer送往 slave driver,再由其在总线驱动
  • slave driver和 slave monitor也会在 APB transaction执行的多个阶段调用对应的回调函数
  • 在 APB transaction:结束时, slave monitor?会将监测到的sequence iten通过 analysis port送往 scoreboard等验证环境组件

System Env

  • 封装了1个 master agents,若干个 slave agents,1个system sequencer和1个 system configuration
  • slave agents的数目可由用户在 system configuration配置对象中设定
  • 在 build phase, system env会创建对应的 master agent和Slave agents
  • 在对其创建以后, system env会继续对其利用 system configuration对象中的配置信息对 master& slave agents进行配置

System Sequencer

  • virtual sequencer
  • 包含了 master sequencer和 slave sequencers的句柄
  • 在 system Env的 build phasei中创建
  • 需要 system configuration
  • 用来同步 master和 slave agents

Function Coverage

  • toggle coverage:提供信息显示是否连线正确
  • state coverage:某些控制信号的状态切換
  • delay coverage: PREADY和 PENABLE的延退
  • transaction coverage: APB transaction类型和 transaction之间的交叉组合

Coverage使能

  • 可通过在 port configuration中使能以下变量(默认为0):
    toggle_coverage_enable
    state coverage enable
    transaction coverage enable

配置对象( configuration object)

  • configuration对象可以分为系统级别( system level)和端口级别( port level)
  • 在 build phase之后如果还需要修改,可通过master/ slave/env的 reconfigure()方法实现
  • 按照其成员属性可分为两种:
    静态配置成员:不能在 build之后修改参数,例如 agent数目、总线宽度等
    动态配置成员:可在任何时间修改,无论系统是否在运行,例如 timeout参数
  • 包含随机成员变量,以及对应的约東
  • 系统配置类 svt_apb_ system_ configuration
    system Env需要该配置
    可指定 slave agents数目
    自动创建 master和 slave agents的子一级配置对象
    virtual system APB sequencer
    地址映射表
    timeout参数
  • slave配置 svt_apb_save_configuration
    该配置用于 slave agent
    可指定 slave agent的 Active/ Passive模式
    可使能或者禁止协议检査功能
    可使能或者禁止覆盖率收集

事务对象( transaction object)

  • 是APB协议的信息单元
  • 其成员变量是公共的、可配置和可访问的
  • 大多数成员变量是可随机化的
  • 其成员变量用来承载用来在总线驱动的数据或者在总线监测到的数据
  • APB transaction数据对象可用来:
    产生随机激励
    报告监测到的总线事务
    对总线事务请求发起随机
    收集功能覆盖率数据
    支持错误插入
  • 包含两种约束
    valid_ ranges:限制被 driver接受的所产生的数值,可保证基本的VIP操作,决不能被禁止
    reasonable_* constraints:可单独被禁止,用来控制协议和设置仿真边界
  • 可以扩展 transaction类( svt apb_ transaction),禁止或者替代某些 reasonable_* constraints
  • transaction类包含 configuration句柄,在随机化该transaction对象时需要利用 configuration信息,如果在随机化时该 configuration对象句柄为null,则会出现仿真严重错误(fatal)

analysis port

  • 在 master和 slave agents中的 monitor提供 analysis port,名为"item_observed_port"
  • 在总线事务传输结束时, master和 slave agents会将svt_apb_ transaction通过 analysis ports分别写出
  • master/ slave agent无论在 active mode或者 passive mode,都会监测并且写出这些 observed items
  • 用户可通过在 analysis port监听(连接至其它组件例如scoreboard)进行数据事务处理

回调方法( callbacks)

  • 回调方法(SV或者UVM)是一种用来将用户实现的代码植入到预定义入口位置的机制
  • 每个 master/ slave的 driver/ monitori都有一些列的关联 callback方法
  • 这些 callback一般都是预定义好的虚方法,但没有初始代码,除非用户需要
  • 用户可以通过 callback类进行扩展,植入所需代码
  • callback类会按照其植入的位置顺序执行
  • 如果某些 callback方法没有被扩展,那么在原有代码位置的 callback不会被执行
  • VIP代码中的 callback都是uvm_ callback类,其使用方法可参考红宝书12.5.3 uvm_callback应用
  • 在 master/ slave agent中分別存在下列 callback方法(类
    svt_apb_master_callback
    svt_apb_master_monitor callback
    svt_apb_slave_callback
    svt_apb_slave_ monitor_callback

接口( interfaces& modports)

  • 顶层接口 svt_apb_if,与 system env对应
  • 其包含 slave接口( svt_ apb_ slave_if)数组
  • 其需要被传递到 system configuration对象,通过svt_apb_system_configuration:set_if()完成
  • 该接口也会被 master agent使用
  • 下列 modport可将VIP与DUT进行连接(也可以直接连接不通过modport)
    svt_apb_master_modport
    svt_apb slave_modport
    svt_apb_debug
    -modport

事件( events)

  • master/ slave agent会触发
    svt apb_ transaction::{ STARTED, ENDED}事件用来指示transaction发起或结束的事件:
    对于 WRITE事务,在时钟上升沿(且psel1&& pwrite1)发起STARTED
    对于READ事务,在时钟上升沿(且psel1&& pwrite0)发起STARTED
    对于 WRITE事务,在 PENABLE下降沿之后的时钟上升沿,发起 ENDED
    对于READ事务,在 PENABLE下降沿之后的时钟上升沿,发起 ENDED

修改系统常量( system constants)

  • VIP使用一些包含系统常量的文件,你也可以覆盖其中某些常量
    svt_apb_defines.svi
    svt_apb_common_defines.svi
    svt_apb_port_defines.svi
  • 可以在 svt apb_user_ defines.svi中重定义某些宏`define_SVT_APB_MAX_ID_WIDTH 12
    并且在编译时添加编译选项重定义某些宏+define+SVT_APB_INCLUDE_USER_DEFINES

集成Master DUT和Slave VIP

  • 场景:DUT是 APB master,VIP用来验证 APB master DUT
  • TB构建:将 APB system configuration配置为1 active slave agent
    sys_cfg.num_slaves=1,
    sys_cfg.is_active=0
    sys_cfg.slave_cfg[0].is_active =1

  • 也可以选择使用独立的 Slave agent进行连接
  • 采取单独 slave agent!集成方式有自己的优缺点
    优点是其验证环境更加轻量化,不需要额外的系统环境组件
    缺点是验证环境不便于扩展,如果 APB slave数量增加,那么 slave agent需要例化多次或者由 system env替代

集成 Slave DUT和 Master VIP

  • 场景:DUT是 APB slave,VIP用来验证 APB slave DUT
  • TB构建:将 APB system configuration配置为1 active master agent
    sys_cfg.num_slaves=0,
    sys_cfg.is_active=1
  • 也有另外采取独立 master agent与DUT连接的TB框架方案

后记

加油,逐梦人!

SVT APB VIP相关推荐

  1. APB总线总结和VIP使用

    APB总线总结和VIP使用 一.简介 二.APB信号 三.APB传输 3.1 传输状态图 3.2 写传输 3.2.1 无等待状态 3.2.2 等待状态 3.2.3 写数据字节选择 3.3 读传输 3. ...

  2. 4-AMBA VIP 编程接口

    关于我:2020届双非学校材料专业毕业,现在已转行芯片验证,入职两个月. 最近MCU项目在用Synopsys公司的VIP,正好自己在看AMBA的VIP,就整理一下: 4-介绍AMBA System E ...

  3. uvm_agent,uvm_scoreboard,reference model

    昨天组会时,老师说研二的同学把工作交接一下开始准备找工作.初听时还是很开心的,至少可以光明正大的看点儿uvm.但是细想,每天还得去公司挂机,也得去费尽心思去搞毕设,但是心理上更能接受而已.不过不管怎么 ...

  4. (数字ic验证)从零开始的apb_watchdog验证模块搭建(二、apb直接发送激励与寄存器模型加入)

    apb_watchdog验证模块搭建(二.apb直接发送激励与寄存器模型加入)文章目录 文章目录 apb_watchdog验证模块搭建(二.apb直接发送激励与寄存器模型加入)文章目录 前言 一.ap ...

  5. AHB总线和VIP介绍总结

    AHB总线和VIP总结介绍 一.AHB总线介绍 1.1 总线概述 1.2 总线特性 1.3 总线信号 1.4 burst地址计算 1.5 总线传输 1.5.1 单次传输 1.5.2 burst传输 1 ...

  6. 创建 Pool VIP - 每天5分钟玩转 OpenStack(122)

    上节完成了 LBaaS 配置,今天我们开始实现如下 LBaaS 环境. 环境描述如下: 1. 创建一个 Pool "web servers". 2. 两个 pool member ...

  7. oracle RAC的VIP和scan

    我们都知道Oracle RAC中每个节点都有一个虚拟IP,简称VIP,与公网IP在同一个网段. 没有VIP时,Oracle客户端是靠"TCP/IP协议栈超时"来判断服务器故障.而T ...

  8. lvs后端realserver的vip管理脚本lvs-realsvr.sh

    lvs后端realserver的vip管理脚本lvs-realsvr.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...

  9. 首次成功实施 XSS 攻击,盗取目标网站大量 VIP 帐号

    前言 之前做网站时有做代码防御 XSS(Cross Site Script) 攻击,但是却只处于了解的阶段,并不知道其中具体的原理,更别说使用了.最近有朋友要求我帮助他 Hack 一个网站,达到一定的 ...

最新文章

  1. Spartan-6系列内部模块介绍之可配置逻辑模块(CLB)
  2. 解决maven3.6版本不兼容idea2017问题
  3. 基本算法个人PHP 实现(四)
  4. 40个很棒的由html5开发的网络游戏案例
  5. 车智汇模式系统技术开发数据
  6. 深度区分LoRa和LoRaWAN的区别
  7. (libgdx学习)Polling
  8. PostScript —— 一种编程语言
  9. mysql ibd文件还原_MySQL
  10. 换一种途径看信息,享受快捷 RSS阅读----willack.liu[原创]
  11. jquery 同胞 siblings next nextAll nextUtil pre preAll preUtil
  12. MIKE水动力笔记8_冷启动与热启动
  13. 锂电池技术关键突破:水淹火烧重击短路都不炸!三星看了会沉默,特斯拉蔚来听了要流泪...
  14. Ubuntu安装Todo
  15. 关于TP3.2.3的反序列化学习
  16. Arduino 多LED灯控制
  17. 将Ubuntu 用户目录下的中文目录修改为英文
  18. 零基础学HTML5的学习路线完整版
  19. 博弈论(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
  20. 如何制定客户留存策略_14个成功的客户留存策略举例

热门文章

  1. 年终盘点(三)丨2022计讯物联团队不负韶华,奋力前行
  2. 计算机辅助教育的阶段,第一章计算机辅助教育概述.ppt
  3. k8s安装kuboard面板
  4. 骨传导蓝牙耳机哪个品牌好,骨传导蓝牙耳机品牌推荐
  5. 微信小程序wx.showModal中content换行
  6. Vivado ILA IP的使用
  7. python如何使用gpu_如何使用GPU加速numpy运算
  8. 详细介绍别人电脑访问到自己电脑运行的项目
  9. matlab用游程编码压缩图像,matlab游程编码
  10. VM安装Windows虚拟机