文章目录

  • 前言
  • mcdf模块简介
  • mcdf验证结构布局
  • 测试用例
  • 覆盖率收集
  • 分析覆盖率收集情况
  • 添加新的测试用例
  • 异常激励测试

前言

本文仅个人学习过程笔记,如有疏漏,望指正或补充。

mcdf模块简介

多通道数据整形器(MDCF,multi-channel data formatter),可以将上行(upline)多个通道数据经过内部fifo,最终以数据包(data packet)的形式送出。模块内部框图结构如下:

该模块采用自定义接口,且上行数据和下行数据的接口协议不同:
通道从端接口时序如下:

控制寄存器接口时序如下:

整形器接口时序如下:

mcdf验证结构布局

利用UVM验证方法搭建验证环境如下:

测试用例


(1)base_test主要工作:通过config_db#(virtual intf)::get()获得虚接口句柄,并创建了env实例,并向下传递了接口;
(2)base_virt_seq主要工作:通过p_sqr得到rgm的实例句柄,并实现reg、fmt、data配置虚方法;
(3)其余test则继承于base_test,但在其run_phase中例化了不同的seq,且将其挂载至顶层virt_sqr,同时通过objection机制控制仿真的运行。
(4)data_consistence_virt_seq和full_random分别针对固定和随机reg、fmt、data配置情况下的MCDF验证;
reg_builtin_virt_seq则利用UVM内建的三个seq(检查rgm复位值与硬件复位值是否一致;检查所有寄存器域属性的有效性;检查寄存器映射的有效性)对MCDF进行验证;reg_wrtie_read_virt_seq、reg_stability_virt_seq分别对寄存器做读写测试和稳定性测试;down_stream_low_bandwith_virt_seq模拟了MCDF下行数据接收端设置为小存储量、低带宽的类型的情况。

覆盖率收集

定义了如下6个覆盖组:




使用固定种子seed_1和随机种子分别跑以上测试,可以得到合并后的代码覆盖率情况如下:

功能覆盖率情况如下:

分析覆盖率收集情况


代码覆盖率中翻转覆盖率最低,且data、addr、rstn等很多位翻转未被覆盖到。

控制寄存器的打包长度pkt_len部分值未覆盖到,状态寄存器FIFO余量域大部分值未覆盖到。

添加新的测试用例

(1)针对data、addr、rstn等bit位的翻转,改变约束条件或给定向激励去覆盖,同时增加跑随机种子test的次数:



(2)针对控制寄存器的打包长度pkt_len的覆盖,增加定向激励:

对于状态寄存器FIFO余量域的覆盖,采用发送数据过程中读状态寄存器的方式:

同时对控制寄存器和状态寄存器的保留域,由于该部分无法写入,做exclude后,得到代码覆盖率和功能覆盖率的情况如下:

异常激励测试

注意:本异常激励测试板块是自己琢磨的,暂未清楚何为异常测试及意图,有待研究。大佬有缘看到欢迎补充~
由于MCDF中只有控制寄存器和状态寄存器,且地址分别为0x00,0x04,0x08;0x10,0x14,0x18.考虑对MCDF中不存在的寄存器地址0xFF及0x28进行写入、读出作为异常激励:

备注:对现有寄存器的保留域写,由于intf.cmd_data_m2s=t.data,两边位数不一致,从低位截断写入数据,因此seq中比较读写值时不会报错。
得到如下DUT行为(此处关闭了seq中检查写入数据和读出数据比较):

MCDF验证学习笔记相关推荐

  1. MATLAB simulink 模型验证学习笔记

    MATLAB simulink 模型验证学习笔记 一.静态验证 1.Model Advisor 模型验证意思是用matlab自带的规范检查工具来检查自己画的模型是否符合规范. 进行模型验证需要用到的模 ...

  2. [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation

    文章目录 仿真测试 Test Harness 创建Test Harness 导入测试用例 构建Test Harness模型 执行测试.分析结果 利用SDI进行结果的验证 Model Verficati ...

  3. [Simulink] 基于模型的测试与验证学习笔记_Step 3: Detecting Desig Errors

    文章目录 Simulink Design Verifier 对模型做死逻辑检测 问题分析 模型除以零的检测 自动设计错误检测 总结 [注] 本文为2018 Mathworks 年会上机教程学习笔记, ...

  4. IC验证学习笔记(MCDF)实验0-MCDT

    实验0:目标是写出MCDT的程序,也就是slave+fifo+arbiter的部分 最终目标是实现MCDF:MCDF为多通道数据整形器(multi-channel data formatter),它可 ...

  5. [zz]ASP.NET MVC2框架验证学习笔记

    ASP.NET中的框架验证方法1: 1.模型定义 public class User { [Required(ErrorMessage="用户名不能为空!!")]        [ ...

  6. 仿真验证学习笔记-timeslot及detacycle的理解

    前言 RTL(寄存器传输级)仿真时,肉眼可见在同一点发生同时变化的信号,其实发生的顺序是有先后次序的,我们将仿真进程这一点变化的时间抽象概括并定义为timeslot(时间片).delta-cyle是仿 ...

  7. 转载学习笔记:c++atoi

    c++中的atoi()和stoi()函数的用法和区别 鸡啄米的时光机 2018-08-27 20:58:41 28304 收藏 28 最后发布:2018-08-27 20:58:41首发:2018-0 ...

  8. 学习笔记:带你十天轻松完成 Go 微服务系列(二)- 服务拆分

    学习笔记:带你十天轻松搞定 Go 微服务系列(二) 1.学习课程 2.服务拆分 2.1 按业务服务拆分 2.2 按调用方式拆分 3.创建项目目录 3.1 在 code 中新建项目 3.2 创建 mal ...

  9. Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...

最新文章

  1. android 新浪微博的点赞功能实现,Android PraiseTextView实现朋友圈点赞功能
  2. boost::mpl模块实现list_c相关的测试程序
  3. windows的定时任务设置
  4. linux集群搭建coolrainbow,Rainbow°110408_教程▍KBFS听歌学韩语—So Cool[Rainbow]
  5. PMP读书笔记(第4章)
  6. 微信小程序 - 非Form数据怎么发送到后端?
  7. Pig、Hive、MapReduce 解决分组 Top K 问题
  8. 从CUBIC/BBR的TCP ACK失速说起
  9. 云计算时代,观测产品Sunfire的成长史
  10. SQL5.5安装教程
  11. 【MATLAB中UIGETFILE函数的用法】
  12. VMWare共享文件夹的使用
  13. 关于Raster的理解
  14. Spring注入Bean的几种方法
  15. win10启动虚拟机蓝屏的一种解决方法
  16. 初学c语言试写的答题系统
  17. 色相、色彩、色度和色调
  18. 纳斯达克的区块链野望
  19. 通过颜色来生成一个纯色图片
  20. 【产品体验】明星衣橱

热门文章

  1. 防火墙工作原理(工作方式)
  2. 对学校的希望和寄语_写一段对学校的寄语
  3. Activiti工作流引擎使用(Activiti的乱码问题)
  4. Excalidraw - 免费的手绘风格白板应用,能够画各种流程图、示意图、架构图
  5. 局域网内抢网速_濮阳联通案例分享:某单位网速慢的处理分享
  6. arcpy将多个dbf合并到excel中
  7. 视频点播服务器性能,基于排队论的视频点播系统性能分析
  8. vista下安装mysql
  9. 安利一个好玩的JS编程游戏—warriorjs
  10. java label 标签_Java标签(Label)