前言
之前自己做了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框架方案
后记
加油,逐梦人!