【芯片验证方法】

术语——中文术语

大陆与台湾的一些术语存在差别:
在这里插入图片描述

验证常用的英语术语:

在这里插入图片描述
验证:尽量模拟实际应用场景,比对芯片的所需要的目标功能和实现的功能
影响验证的要素:应用场景、目标功能、比对应用场景、目标功能:来源于产品需求、系统方案、设计实现;准确、完备、清晰、异常。
比对:设计与验证的隔离、独立性;比对效率
验证与测试:关注点的区别
验证类型:EDA验证、FPGA验证、芯片验证、软硬件结合验证

验证流程

在这里插入图片描述
在这里插入图片描述

测试点:

在这里插入图片描述
例如:芯片可以处理包长为64Bytes~1500Bytes的数据包,则验证时则可以划分成哪几个测试区间呢?(假设包长为16Bit位宽)。

在这里插入图片描述

测试点——分解测试点的方法

1,SPEC
文档上所有明确写出的SPEC
2,输入、配置、输出
所有合理的输入
所有合理的配置
所有合理的输出
所有合理的输入、配置的不同组合
3,场景
多个功能在同一时间段内的不同组合
多个功能在前后顺序之间的不同组合
4,异常

验证用例——定向验证

在这里插入图片描述

验证用例——随机验证

在这里插入图片描述

rand bit [15:0] pkt_len;
constraint c_pkt_len {
	pkt_len dist {
		[1:61]	    	:/ 10,
		[62:63]     	:/ 10,
		[64:65]   	:/ 10,
		[66:1498]	    :/ 10,
		[1499:1500]  	:/ 10,
		[1501:1502]  	:/ 10,
		[1502:65535]	:/ 10,
	};
}

利用System Verilog的比例约束,可以灵活地设置每个区间的概率。
通过上述方法,发送同样的包个数,就能覆盖到所有的测试点。

覆盖率——Code Coverage

在这里插入图片描述

发送三个数据包,包长分别为10、100、2000字节,就可以达到100%的
Code Coverage(如:Line Coverage、Conditon Coverage)

在这里插入图片描述
如果RTL不小心写成上面这样,而没有验证到,我们能发现吗?

覆盖率——Function Coverage

通过定义功能覆盖率,就可以发现上述的问题。
在这里插入图片描述
在这里插入图片描述
从需求,到测试点,到用例:总->分->总
测试点要求细而不漏。
测试点的交叉。例如不同类型包文有不同的长度范围和处理。变量越多组合
越多,测试向量就越多。
测试用例:随机为主定向为辅,还是随机为主定向为辅

验证用例——脚本化

传统的用例设计方法:
根据测试点编写大量的TestCase来覆盖所列的测试点
用例脚本化:
设计一个通用用例模版,通过脚本,传递不同的参数配置。
一个TestCase生出大量TestCase,减少大量用例的编写、维护工作。
在这里插入图片描述

验证平台——架构

在这里插入图片描述

验证平台——集成

在这里插入图片描述

验证的模块化、完整性思维

模块化与完整性
结构上的模块化
数据类型上的模块化:配置、数据
流程上的模块化:

在这里插入图片描述

验证自动化——工具

1,Makefile
(1)支持批量仿真;
(2)每个TC单独生成一个LOG,一个波形,一组对应图像信息
(3)自动检查所有TC的LOG,生成所有TC的Pass or Fail的记录
(4)自动本地化
(5)在当前目录下,编辑打开其他目录的文件

2,Excell提取脚本
(1)寄存器信息列表
(2)数模接口连线复位值
(3)数模混仿Vector信息
3,自动连线脚本
(1) 连接各个module的verilog
4,其他Tcl、Perl脚本

验证自动化

1,Regression自动化
2,寄存器测试自动化
3,Log检查自动化
4,数据比对自动化
5,时序比对自动化
6,Co-SIM的Vector自动化
7,数字模拟接口连线检查自动化

服务自己的人机交互:
表格与仿真环境之间自动化
EXCEL+VBA
XML PARSER

验证语言——System Verilog

HDVL:Hardware Description And Verification Language
完全兼容Verilog语言
支持Behaviour Level建模
支持面向对象编程,容易扩展、移植
支持各种随机方式:权重比例等
支持功能覆盖率

在这里插入图片描述

验证语言——SVA

System Verilog Assertions:简称SVA
用途:用来检查Timing的正确性。(区别:Reference Model用来检查Data的正确性)。如果Timing不正确会输出Fail信息。
SVA代码示例:
在这里插入图片描述
以上代码是检测check_en有效的时候, 每次lcd_busy_bfm 的上升沿之后
两个clk,必须有gate_lcd_busy 的上升沿。

UVM

UVM:Universal Verification Methodology
来源:兼容VMM和OVM的优点
内容:验证方法学+验证平台模版+验证代码库
举例:盖房子
很早很早以前没有建筑学,大家的房子也是千奇百怪,各不相同,有在树上,有在地下,也有在树上。后来,慢慢开始有人归纳这些房子的特点,发现:大部分都有“门”、“窗户”,“房间”,“屋顶”等。所以,慢慢开始把房子分成这几个部分来研究,逐渐就形成一套房子的方法学。后来再总结各个部分优秀的建造方法,提供给大家做参考,或者直接做好各个部分,给大家用,就形成组件、模版。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/661356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最长递增子序列,交错字符串

第一题&#xff1a; 代码如下&#xff1a; int lengthOfLIS(vector<int>& nums) {//dp[i]表示以第i个元素为结尾的最长子序列的长度int n nums.size();int res 1;vector<int> dp(n, 1);for (int i 1; i < n; i){for (int j 0; j < i; j){if (nums[i]…

深入解析Web前端三大主流框架:Angular、React和Vue

Web前端三大主流框架分别是Angular、React和Vue。下面我将为您详细介绍这三大框架的特点和使用指南。 Angular 核心概念: 组件(Components): 组件是Angular应用的构建块,每个组件由一个带有装饰器的类、一个HTML模板、一个CSS样式表组成。组件通过输入(@Input)和输出(…

海外社媒账号如何运营安全稳定?

由于设备与网络原因&#xff0c;通常一个海外社媒账号尤其是多账号的稳定性都有一定限制&#xff0c;错误的操作或者网络都可能使得账号被封&#xff0c;前功尽弃。本文将为大家讲解如何通过IP代理来维持账号稳定与安全&#xff0c;助力海外社媒矩阵的搭建。 一、社媒账号关联…

Docker安装nginx详细教程

详细教程如下&#xff1a; 1. 拉取Nginx镜像 docker pull nginx默认拉最新的&#xff08;也可以根据自己的需求指定版本&#xff09; 2. 运行Nginx容器 docker run --name my-nginx -d -p 80:80 nginx--name my-nginx&#xff1a;容器名称&#xff0c;便于管理。-d&#xf…

使用C语言实现学生信息管理系统

前言 在我们实现学生信息管理系统的过程中&#xff0c;我们几乎会使用到C语言最常用最重要的知识&#xff0c;对于刚学习完C语言的同学来说是一次很好的巩固机会&#xff0c;其中还牵扯到数据结果中链表的插入和删除内容。 实现学生信息管理系统 文件的创建与使用 对于要实现…

【国产中颖】SH79F9202U单片机驱动LCD段码液晶学习笔记

1. 引言 因新公司之前液晶数显表产品单片机一直用的是 C51单片机(SH79F9202U9)&#xff0c;本人之前没有接触过这款单片机&#xff0c;为了维护老产品不得不重新研究研究这款单片机。 10位ADC LCD的增强型8051微控制器 SH79F9202是一种高速高效率8051可兼容单片机。在同样振…

TH方程学习(1)

一、背景介绍 根据CW方程的学习&#xff0c;CW方程的限制条件为圆轨道&#xff0c;不考虑摄动&#xff0c;二者距离相对较小。TH方程则可以将物体间的相对运动推广到椭圆轨道的二体运动模型&#xff0c;本部分将结合STK的仿真功能&#xff0c;联合考察TH方程的有用性&#xff…

19 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 冰后回弹(GIA)改正

19 - grace数据处理 - 补充 - 地下水储量计算过程分解 - 冰后回弹(GIA)改正 0 引言1 gia数据处理过程0 引言 由水量平衡方程可以将地下水储量的计算过程分解为3个部分,第一部分计算陆地水储量变化、第二部分计算地表水储量变化、第三部分计算冰后回弹改正、第四部分计算地下…

学习笔记——数据通信基础——数据通信网络(基本概念)

数据通信网络基本概念 网络通信&#xff1a;是指终端设备之间通过计算机网络进行的通信。 数据通信网络(Data Communication Network)&#xff1a;由 路由器、交换机、防火墙、无线控制器、无线接入点&#xff0c;以及个人电脑、网络打印机&#xff0c;服务器等设备构成的通信…

canfd与can2.0关系

canfd是can2.0的升级版&#xff0c; 支持canfd的设备就支持can2.0&#xff0c;但can2.0的设备不支持canfd 参考 是选CAN接口卡还是CANFD接口卡_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hh411K7Zn/?spm_id_from333.999.0.0 哪些STM32有CANFD外设 STM32G0, STM…

Django 做migrations时出错,解决方案

在做migrations的时候&#xff0c;偶尔会出现出错。 在已有数据的表中新增字段时&#xff0c;会弹出下面的信息 运行这个命令时 python manage.py makemigrationsTracking file by folder pattern: migrations It is impossible to add a non-nullable field ‘example’ to …

软件架构设计属性之一:功能性属性浅析

引言 软件架构设计属性中的功能性属性是评估软件架构是否满足其预定功能需求的关键指标。功能性属性确保软件能够执行其设计中的任务&#xff0c;并提供所需的服务。以下是对软件架构设计中功能性属性的浅析&#xff1a; 一、定义 功能性属性是指软件系统所具备的功能特性&a…

flutter开发实战-类似微博帖子列表及下拉刷新上拉加载效果

flutter开发实战-类似微博帖子列表及下拉刷新上拉加载效果 在之前处理类似微博帖子列表及下拉刷新上拉加载效果&#xff0c;刷新使用的是EasyRefresh 一、引入EasyRefresh与likeButton 在工程的pubspec.yaml中引入插件 # 下拉刷新、上拉更多easy_refresh: ^3.3.21pull_to_re…

MySQL建库

删除数据库 新建数据库 右键-新建数据库 字符集选中utf8(支持中文) 修改字符集 右键--数据库的属性 将字符集支持的数量变少可以修改

算法的时间与空间复杂度

算法是指用来操作数据、解决程序问题的一种方法。对于同一问题&#xff0c;使用不同的算法&#xff0c;也许最终结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。 那我们该如何去衡量不同算法之间的优劣呢&#xff1f;主要还是从算法所占用的【时间】和…

最新!2023年台湾10米DEM地形瓦片数据

上次更新谷歌倾斜摄影转换生成OSGB瓦片V1.1版本&#xff0c;使用该版本生产了台北、台中、桃园三个地方的倾斜摄影OSGB数据&#xff0c;在OSGB可视化软件中进行展示&#xff0c;可视化效果和加载效率俱佳。已经很久没更新地形瓦片数据&#xff0c;主要是热点地区的原始数据没有…

6.S081的Lab学习——Lab5: xv6 lazy page allocation

文章目录 前言一、Eliminate allocation from sbrk() (easy)解析&#xff1a; 二、Lazy allocation (moderate)解析&#xff1a; 三、Lazytests and Usertests (moderate)解析&#xff1a; 总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0…

HTTP Digest Access Authentication Schema

HTTP Digest Access Authentication Schema 背景介绍ChallengeResponse摘要计算流程总结参考 背景 本文内容大多基于网上其他参考文章及资料整理后所得&#xff0c;并非原创&#xff0c;目的是为了需要时方便查看。 介绍 HTTP Digest Access Authentication Schema&#xff…

STL库--stack

目录 stack的定义 stack容器内元素的访问 stack常用函数实例解析 stack的常见用途 stack的定义 其定义的写法和其他STL容器相同&#xff0c;typename可以任意基本类型或容器&#xff1a; stack<typename> name; stack容器内元素的访问 由于栈本身就是一种后进先出…

Java Class类简介

一、类图&#xff1a; 二、基本介绍&#xff1a; 1. Class也是类&#xff0c;因此也继承了Object类。 2. Class类的对象不是new出来的&#xff0c;是系统创建的。 类加载器ClassLoader有个方法LoadClass()&#xff0c;将某个类对应的Class对象生成在堆中。 通过调试可以发现&am…