SystemVerilog学习-01-系统验证概述(一)

简介: SystemVerilog学习-01-系统验证概述

什么是验证


无论是我们日常进行求解问题还是进行开发工程,都需要进行测试得到的结果的准确性。用来证明设计的功能正确性,确保设计符合功能描述的过程就是验证。

通常情况下,验证的工作量会大于设计的工作量,通常是占(前端设计+验证)总工作量的70%。举个例子,一双鞋子,工厂制作(使用流水线的机器)可能只需要几分钟,而对于消费者来说,首先需要确定鞋子是否合脚(确定鞋子的大小尺寸),然后要确定鞋子的薄厚,款式、样式、颜色、材质等等。把这些都确认好进行购买后,这时,可以说你完成了鞋子的验证工作。这样的一个流程也可以称为是一种 “验证的过程” 。日常生活是如此,芯片制造中更是如此。

验证中使用的硬件验证语言(HVL)和硬件描述语言(HDL)相比会有一些典型的性质:

  1. 受约束的随机激励生成;
  2. 功能覆盖率;
  3. 更高层次的结构(面向对象编程);
  4. 多线程以及线程间的通信;
  5. 支持HDL数据类型;
  1. 集成事件仿真器,便于对设计实施控制。

测试平台


测试平台的概念对于使用过FPGA进行开发设计的人来说并不陌生,在平时编写FPGA的一些小工程时,都会编写testbench进行模块的验证和测试。通常一个简单的TB包括时钟,激励,测试模块,验证模块功能的方式通常进行使用display在窗口打印输出或者观察波形。

对于验证来说,测试平台也包含上述这些部分,还进一步将这些进行细化,如下图所示:

image.png

验证测试平台包括时钟和复位,用于驱动测试平台正常运行;DUT(device under test)为待测的模块;激励用于提供给待测模块输入,对DUT创建测试序列,使得DUT正常工作;监视器部分负责监视模块的数据结果的变化,观察DUT的输入输出,然后将监视结果反馈给核查部分;核查部分对来自监视器和DUT的输出进行比对,进行报告检查结果,如

  1. 产生激励(Generate stimulus);
  2. 把激励输入到待测设计上(DUV,Design Under Verification);
  3. 产生预期(Generate Expectation);
  4. 捕捉响应(Capture response);
  5. 检验响应的正确性(Check the response for correctness);
  1. 根据验证目标评估验证进度(Measure the progress against the overall verification goals);

芯片开发流程


随着芯片的规模越来越大,开发的复杂度和集成度越来越高,从而需要越来越多的人专门去做验证的工作,下图是一个芯片开发的整体流程。

image.png

首先需要市场人员与客户沟通;然后由系统设计人员按照功能划分为各个子系统;子系统被进—步划分为功能模块,并由设计团队实现;验证人员对设计功能展开验证,发现设计缺陷,交由设计人员修正;验证没有出现漏洞后,交由后端人员进行综合、布局、布线;后端人员将核心数据交由FAB进行流片。

在一个芯片开发的流程设计中,验证是硅前的比较重要的一环。验证阶段每多发现一个bug,在后期会更小的概率出现灾难级别的系统漏洞。

验证和设计


硬件设计的目的在于创建一个基于设计规范并能完成特定任务的设备。作为验证工程师,主要目的就是确保该设备能够完成预期的目标任务,达到预期的效果。验证的流程可以并行于设计的流程。对于主流的验证流程,一般是不同的人承担验证和设计的工作,当一个设计者拿到功能描述文档后,开始进行功能的RTL设计,一般在晚于设计者的一到两周验证工程师也需要进行阅读功能描述文档,并且进行验证环境的搭建设计。

设计和验证都需要围绕功能描述文档,验证发现结果不符合预期时,如果漏洞明显可交由设计修正,待返回再测试;如果功能实现与设计存在分歧,则需共同回顾功能描述,决定哪一方理解正确,统—对功能的理解。

image.png

所以验证和设计都需要认真阅读功能描述文档,设计负责实现功能模块,将其翻译为RTL模型,验证会按照其功能发送激励和比较结果,从而达到功能描述的要求。

验证的工作


所以对于验证部分来说,在开始构建验证环境前,要进行编写验证计划,一般包括需要验证什么样的特性,采用那些技术等等。编写完成验证计划后,围绕项目的需求,进行检查核实设计文件是否正确地按照功能描述文档去实施;设计人员是否有遗漏边界情况(corner case) ;硬件设计是否足够稳定来处理一些错误情况(error response) 。

对于验证部分来说,他的工作就是完成分配给他的模块级(module level) 、子系统级(subsystem level)或者系统级(chip level)的任务。并且期望要求"按时保质低耗"完成目标硬件设计的验证工作。对于成本而言,在硅前验证付出的额外成本,相对是最低的。

image.png

缺陷增长曲线


image.png

通过缺陷数量在时间线上的记录,我们可以绘制出缺陷数量的增长曲线。一般来讲,缺陷数量的增长曲线是逐渐逼近趋于缓慢的。功能验证需要保证的就是将缺陷数量的增值(至少是致命缺陷数量)保证在硅前阶段,不应该让其发生在硅后测试阶段。针对缺陷的类型,一般会遵循先易后难的验证方法。我们给出的激励向量应该是先易后难,我们发现出的缺陷也应该是先基本后高级。缺陷率的曲线是否在收敛,或者说斜率是否在变小,这一定程度上可以说明验证的状态是否在收敛和趋于完备。

目录
相关文章
|
芯片 异构计算 内存技术
关于SPI协议,看这一篇文章就够了!
关于SPI协议,看这一篇文章就够了!
2632 0
关于SPI协议,看这一篇文章就够了!
|
API Windows
NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版
原文:NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版 nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序。
5043 0
|
10月前
|
缓存 监控 Ubuntu
Ubuntu操作系统下清除系统缓存与无用文件的方法
通过上述步骤断行综合性地对Ubuntu进行优化与整洁可显著改善其性能表现及响应速度。然而,请注意在执行某些操作前确保充分了解其潜在影响;例如,在移除旧内核之前确认新内核稳定运行无问题;而对于关键配置更改则需确保备份好相关设置以便恢复原状态。
2504 0
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
688 2
|
IDE 测试技术 API
使用京东API接口适用于的环境及验证调用合法性的方法
在电商领域,京东API接口支持商品信息查询、订单处理等功能。开发者需确保在稳定服务器端环境使用,选择合适编程语言及框架,并具备足够网络带宽处理能力。开发环境应配备IDE或代码编辑器及所需库。测试环境需充分验证API稳定性与可靠性。合法性验证包括:正确使用App Key和App Secret进行鉴权;掌握签名规则并在请求中添加签名;遵守请求频率限制;理解并遵循数据使用协议。遵循这些指导原则可保证API调用的合法性和稳定性。
|
存储 JavaScript API
从 Vuex 到 Pinia:解决 Pinia 缺失的三个基本功能
从 Vuex 到 Pinia:解决 Pinia 缺失的三个基本功能
|
存储 算法
有向图和无向图的表示方式(邻接矩阵,邻接表)
有向图和无向图的表示方式(邻接矩阵,邻接表)
3190 1
|
存储 监控 Serverless
函数计算产品使用问题之T4和A10 GPU实例的区别有哪些
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
586 0
|
消息中间件 存储 网络协议
Linux IPC 进程间通讯方式的深入对比与分析和权衡
Linux IPC 进程间通讯方式的深入对比与分析和权衡
1396 1
|
移动开发 小程序 API
微信小程序的一些开发限制
微信小程序的一些开发限制
882 1