MCDF验证学习笔记
文章目录
- 前言
- 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验证学习笔记相关推荐
- MATLAB simulink 模型验证学习笔记
MATLAB simulink 模型验证学习笔记 一.静态验证 1.Model Advisor 模型验证意思是用matlab自带的规范检查工具来检查自己画的模型是否符合规范. 进行模型验证需要用到的模 ...
- [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation
文章目录 仿真测试 Test Harness 创建Test Harness 导入测试用例 构建Test Harness模型 执行测试.分析结果 利用SDI进行结果的验证 Model Verficati ...
- [Simulink] 基于模型的测试与验证学习笔记_Step 3: Detecting Desig Errors
文章目录 Simulink Design Verifier 对模型做死逻辑检测 问题分析 模型除以零的检测 自动设计错误检测 总结 [注] 本文为2018 Mathworks 年会上机教程学习笔记, ...
- IC验证学习笔记(MCDF)实验0-MCDT
实验0:目标是写出MCDT的程序,也就是slave+fifo+arbiter的部分 最终目标是实现MCDF:MCDF为多通道数据整形器(multi-channel data formatter),它可 ...
- [zz]ASP.NET MVC2框架验证学习笔记
ASP.NET中的框架验证方法1: 1.模型定义 public class User { [Required(ErrorMessage="用户名不能为空!!")] [ ...
- 仿真验证学习笔记-timeslot及detacycle的理解
前言 RTL(寄存器传输级)仿真时,肉眼可见在同一点发生同时变化的信号,其实发生的顺序是有先后次序的,我们将仿真进程这一点变化的时间抽象概括并定义为timeslot(时间片).delta-cyle是仿 ...
- 转载学习笔记:c++atoi
c++中的atoi()和stoi()函数的用法和区别 鸡啄米的时光机 2018-08-27 20:58:41 28304 收藏 28 最后发布:2018-08-27 20:58:41首发:2018-0 ...
- 学习笔记:带你十天轻松完成 Go 微服务系列(二)- 服务拆分
学习笔记:带你十天轻松搞定 Go 微服务系列(二) 1.学习课程 2.服务拆分 2.1 按业务服务拆分 2.2 按调用方式拆分 3.创建项目目录 3.1 在 code 中新建项目 3.2 创建 mal ...
- Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...
最新文章
- android 新浪微博的点赞功能实现,Android PraiseTextView实现朋友圈点赞功能
- boost::mpl模块实现list_c相关的测试程序
- windows的定时任务设置
- linux集群搭建coolrainbow,Rainbow°110408_教程▍KBFS听歌学韩语—So Cool[Rainbow]
- PMP读书笔记(第4章)
- 微信小程序 - 非Form数据怎么发送到后端?
- Pig、Hive、MapReduce 解决分组 Top K 问题
- 从CUBIC/BBR的TCP ACK失速说起
- 云计算时代,观测产品Sunfire的成长史
- SQL5.5安装教程
- 【MATLAB中UIGETFILE函数的用法】
- VMWare共享文件夹的使用
- 关于Raster的理解
- Spring注入Bean的几种方法
- win10启动虚拟机蓝屏的一种解决方法
- 初学c语言试写的答题系统
- 色相、色彩、色度和色调
- 纳斯达克的区块链野望
- 通过颜色来生成一个纯色图片
- 【产品体验】明星衣橱