【芯片验证方法】

术语——中文术语

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

验证常用的英语术语:

在这里插入图片描述
验证:尽量模拟实际应用场景,比对芯片的所需要的目标功能和实现的功能
影响验证的要素:应用场景、目标功能、比对应用场景、目标功能:来源于产品需求、系统方案、设计实现;准确、完备、清晰、异常。
比对:设计与验证的隔离、独立性;比对效率
验证与测试:关注点的区别
验证类型: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的优点
内容:验证方法学+验证平台模版+验证代码库
举例:盖房子
很早很早以前没有建筑学,大家的房子也是千奇百怪,各不相同,有在树上,有在地下,也有在树上。后来,慢慢开始有人归纳这些房子的特点,发现:大部分都有“门”、“窗户”,“房间”,“屋顶”等。所以,慢慢开始把房子分成这几个部分来研究,逐渐就形成一套房子的方法学。后来再总结各个部分优秀的建造方法,提供给大家做参考,或者直接做好各个部分,给大家用,就形成组件、模版。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存泄露和内存溢出有什么不同

内存泄露和内存溢出是两个常见的内存问题,它们在程序运行过程中可能导致性能下降、系统不稳定甚至应用崩溃。虽然这两个术语经常被混用,但它们描述的是两种不同的问题: 内存泄露(Memory Leak) 内存泄露是指程序在分配…

华发股份:加强业务协同 新政下项目热销

“5.17”楼市政策出台后,各地密集落地执行。5月27—28日,上海、广州、深圳三个一线城市跟进落地“517”新政。上海发布《关于优化本市房地产市场平稳健康发展政策措施的通知》,共计9条调整政策,涵盖外地户籍、人才、单身、婚否、企…

一个生动的例子——通过ERC20接口访问Tether合约

生动的例子 USDT:符合ERC20标准的美元稳定币,Tether合约获得测试网上Tether合约地址通过自己写的ERC20接口访问这个合约 Tether合约地址:0xdAC17F958D2ee523a2206206994597C13D831ec7 IERC20.sol // SPDX-License-Identifier: GPL-3.0pra…

今日分享站

同志们,字符函数和字符串函数已经全部学习完啦,笔记也已经上传完毕,大家可以去看啦。字符函数和字符串函数and模拟函数 加油!!!!!

Unix环境高级编程--7-进程环境--7.1-7.2main函数-7.3进程退出

1、几个问题 ①main函数如何被调用? ②命令行参数如何传递给新程序?; ③典型储存空间布局是什么样的?; ④进程如何使用环境变量 ?; ⑤进程的各种终止方式? 2、main函数 当内核…

列表推导式(解析式)python

Python中的列表推导式(list comprehension)是一种简洁且强大的语法,用于创建新的列表。它允许你通过对现有列表中的元素进行操作或筛选来快速生成新列表。以下是列表推导式的基本语法和一些示例: 基本语法: new_list…

vue3的组件通信v-model使用

一、组件通信 1.props 》 父向子传值 props 主要用于父组件向子组件通信。再父组件中通过使用:msgmsg绑定需要传给子组件的属性值&#xff0c;然后再在子组件中用props接收该属性值 方法一 普通方式:// 父组件 传值<child :msg1"msg1" :list"list">…

Dinky MySQLCDC 整库同步到 Doris

资源&#xff1a;flink 1.17.0、dinky 1.0.2、doris-2.0.1-rc04 问题&#xff1a;Cannot deserialize value of type int from String &#xff0c;detailMessageunknowndatabases &#xff0c;not a valid int value 2024-05-29 16:52:20.136 ERROR org.apache.doris.flink.…

最长公共子序列问题的求解

假设有两个字符串A和B&#xff0c;A字符串的组成为 A A 0 A 1 A 2 . . . . . . A n − 1 A A_0A_1A_2......A_{n-1} AA0​A1​A2​......An−1​ B B 0 B 1 B 2 . . . . . . B m − 1 BB_0B_1B_2......B_{m-1} BB0​B1​B2​......Bm−1​ 要寻找这两个字符串的公共子序列还…

MS Excel: 高亮当前行列 - 保持原有格式不被改变

本文使用条件格式VBA的方法实现高亮当前行列&#xff0c;因为纯VBA似乎会清除原有的高亮格式。效果如下&#xff1a;本文图省事就使用同一种颜色了。 首先最重要的&#xff0c;【选中你期望高亮的单元格区域】&#xff0c;比如可以全选当前sheet的全部区域 然后点击【开始】-【…

06.深入学习Java 线程

1 线程的状态/生命周期 Java 的 Thread 类对线程状态进行了枚举&#xff1a; public class Thread implements Runnable {public enum State {NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED;} } 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用…

数据库学习笔记1-数据库实验1

文章目录 创建表格的时候出现的一些错误查询所有的表格实验一查询单个表格分块修改大学数据库表格创建大学数据库表格系课程教师课程段授课学生选课注意吐槽 修改大学数据库表格2&#xff08;英文版本&#xff09;abcde 自建项目-在线书店数据库 创建表格的时候出现的一些错误 …

子集和问题(回溯法)

目录 ​​​​ 前言 一、算法思路 二、分析过程 三、代码实现 伪代码&#xff1a; C&#xff1a; 总结 前言 【问题描述】考虑定义如下的PARTITION问题中的一个变型。给定一个n个整数的集合X{x1,x2,…,xn}和整数y&#xff0c;找出和等于y的X的子集Y。 一、算法思路 基本思想&am…

【STL】C++ stack(栈) 基本使用

目录 一 stack常见构造 1 空容器构造函数&#xff08;默认构造函数&#xff09; 2. 使用指定容器构造 3 拷贝构造函数 二 其他操作 1 empty 2 size 3 top 4 push && pop 5 emplace 6 swap 三 总结 一 stack常见构造 1 空容器构造函数&#xff08;默认构造…

云计算OpenStack基础

1.什么是虚拟化&#xff1f; •虚拟化是云计算的基础。 •虚拟化是指计算元件在虚拟的而不是真实的硬件基础上运行。 •虚拟化将物理资源转变为具有可管理性的逻辑资源&#xff0c;以消除物理结构之间的隔离&#xff0c;将物理资源融为一个整体。虚拟化是一种简化管理和优化…

探秘AI艺术:揭开Midjourney绘画的神秘面纱

在当今这个数字化迅速发展的时代&#xff0c;AI技术已经深入到我们生活的方方面面&#xff0c;而最令人着迷的莫过于它在艺术创作领域的应用。“Midjourney绘画”就是这样一个令人惊叹的例子&#xff0c;它通过高级AI技术&#xff0c;能够帮助用户生成独一无二的艺术作品。但是…

如何知道自己电脑的 Shell类型是什么?

在macOS中&#xff0c;你可以通过以下几种方法来确定当前正在使用的shell类型&#xff0c;并了解相关的配置文件&#xff1a; 1. 使用终端命令确定shell类型 打开终端应用程序&#xff08;Terminal&#xff09;。输入以下命令并按回车键&#xff1a;echo $SHELL。该命令会输出…

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

第一题&#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]…

[日常开发] 数据库主从延迟问题

MySQL数据库主从延迟问题 无论是学习还是工作中&#xff0c;MySQL数据库的使用都十分地广泛。在业务中&#xff0c;数据库也会以集群的形式使用&#xff0c;所以会涉及到主从问题。 问题描述 在使用MySQL数据库的时候&#xff0c;在service的方法中首先向A数据表批量插入了数…

Spring-注解

Spring 注解分类 Spring 注解驱动模型 Spring 元注解 Documented Retention() Target() // 可以继承相关的属性 Inherited Repeatable()Spirng 模式注解 ComponentScan 原理 ClassPathScanningCandidateComponentProvider#findCandidateComponents public Set<BeanDefin…