当前位置: 首页 > news >正文

如何写出更牛的验证激励

前言

芯片验证是为了发现芯片中的错误而执行的过程,它是一个破坏性的过程。完备的验证激励可以更有效地发现芯片错误,进而缩短验证周期。合格的验证激励必须能产生所有可能的验证场景(完备性),包括合法和非法的场景,并保持最大的可扩展性和可控性。

激励构造一直都是芯片验证的一大难点。本文将从完备性可拓展性可控性三方面展开阐述如何系统地思考和构建验证激励。

  1. 完备性

完备性可以从接口类型、内部结构和激励审查三方面分析。分析接口类型是为了从待测模块与其它模块的交互信号上提取出验证场景。分析内部结构是为了从待测模块内部实现细节上来调整激励,使激励多产生可能发现错误的场景。激励审查用于查缺补漏,从自己、他人以及项目等各个环节上对激励进行完善。

    1. 接口类型

对于待测设计的输入输出接口,可以通过接口类型进行划分,根据接口类型的特性构造对应的验证组件来产生激励。常见接口类型有:

  • 系统控制接口:主要是时钟、复位、电源开关、时钟门控、时钟分频等,这类信号行为都会有详细的规定,遵循实际集成关系做控制即可。例如:时钟和复位的时序,多个时钟是不是同步关系,多个复位信号是否可以单独控制等。
  • 标准总线接口:行业公开的标准总线协议,例如AMBA系列协议。这类协议通常有现成的验证IP,只需配置它们来产生预期的场景。
  • 非标准总线接口:公司内部定义的接口,或者根据模块功能需求定义的接口。这类接口需要从相邻设计了解各信号的准确信息。
  • 其它接口:DFT等。通常来说,这类接口与验证关系不是很大,只需要把它们接固定值即可。

在对接口类型进行分析要产生的激励时,可以先从单一接口类型进行分析,然后再看多个接口交互上有什么需要重点关注。关于如何进行测试点分解,可以看这个系列视频《芯片验证分享系列总结及PPT分享》。

      1. 单一接口类型

单一接口类型分析可以按基本颗粒、高级颗粒和非法行为顺序进行。

  • 基本颗粒:基本颗粒面向信号层,提供基本颗粒生成方法。
    • 每根信号:信号来源和功能、使能极性、脉冲有效或电平有效、时序、信号的取值范围和格式等。
    • 信号之间:不同信号之间的关系,是否存在握手和时序关系,无关信号是否处理成随机值还是固定值等。
  • 高级颗粒:高级颗粒面向场景层,它封装了多个基本颗粒,较少考虑底层信号。
    • 序列:传输包的序列有哪些。
    • 密度:传输包的密度分布有哪些。
  • 非法行为:用于验证待测设计的鲁棒性,出现非法行为,待测设计是否可以正常处理。
    • 数值:信号值可能出现哪些非预期的值。
    • 行为:信号时序、协议等行为可能出现哪些异常行为。

      1. 多个接口交互

对于具有多个接口的待测设计,我们也需要考虑接口之间可能存在的交互或同步,以及接口之间是否使用共同资源。比如,为了测试两个接口相同地址hazard,可以让这两个接口共享一个地址产生器。

不同接口对应不同的验证组件,组件之间的协调有用多种方式:

  • 中心统筹式:通过集中式控制、分配和协调,在上层将任务分解成每个接口组件的任务,并统一分派给各个接口组件去执行,进而产生不同的激励组合场景。比如UVM中的virtual sequence角色。
  • 分布事件驱动式:每个接口组件有自己的控制权,各个组件直接进行交互。比如使用SystemVerilog中的event、mailbox、semaphore和全部变量等方式实现通信交互。
  • 混合式:上述两种方式并存。这需要根据具体场景来使用。

    1. 内部结构

激励设计除了看接口信号外,还需要结合待测设计的内部结构和功能去分析,调整激励约束,从而有更大的概率产生有效场景。

可以沿着控制流(control flow)方向去分析待测设计的内部结构和功能,具体以下几个地方需要重点关注:

  • 触发功能点:触发内部某个功能的激励序列有哪些,比如Prefetch、flow-control、address hazard等。触发内部某个功能的敏感值有哪些,比如ALU、内部错误(cache ecc error, slave error, etc)、barrier、exclusive monitor、address hazard等。
  • 触发资源瓶颈和争抢:如何触发内部资源瓶颈和争抢。比如FIFO空满、Buffer空满、多请求源仲裁、数字运算上下溢等。

    1. 激励审查

审查(Review)环节对完善激励起着至关重要的作用,可以提高激励质量,并减少漏验特性、无效激励的概率,对个人成长也有很大帮助。

建议以下这些审查方式都要进行:

  • 个人审查:由自己进行,对照历史错误清单进行,举一反三,避免犯类似错误。
  • 同组审查:由组内更有经验的人进行,对激励完备性、设计结构、假设、代码实现进行检查。
  • 跨组审查:由待测模块的设计人员进行,对激励完备性、设计顾虑、易错特性、局限性和各种激励假设进行检查。

  1. 可扩展性

可扩展性也包括可复用性。为了处理验证周期缩短、待测RTL规格频繁变动等各种情况,我们需要在设计激励时提前构思如何让激励更容易扩展。基于此,我们可以从模块化和层次化方面去思考。

    1. 模块化

模块化需要将设计输入输出信号划分为不同的接口类型,并创建出对应的接口验证组件,确保各个组件之间的独立性,各个组件才会最大程度地不受其它组件的制约。并定义好模块之间的交互方式,这样一个模块的改动对其它模块的影响就很小,而且模块也更容易的复用到其它地方。例如,如果有两组相同接口,则应该引入两个组件分别控制,而非建立一个组件却拥有两套接口,这样后期维护起来会很麻烦的。

另外把常见的功能封装成公共库,这样在多个地方都可以直接使用,如果功能需要改动,只需要改动一处代码即可。在写代码时,多留一些后门(callback),方便实现多样化的激励和后期增加新功能。

    1. 层次化

层次化需要将激励抽象出各个层次,越高的抽象层次越不关注底层的时序,而是更重视验证场景构造。这样底层信号时序或功能的改动也不容易影响到上层的激励,而且上层的激励说不定也可以复用到其它地方。

以UVM为例,uvm_driver应只关心接口驱动,负责把收到的uvm_sequence_item内容直接驱动到接口信号;uvm_sequence负责场景的构造,当然uvm_sequence也可以继续分层,更上层的uvm_sequence产生更宏观的验证场景,然后逐层分解成小的场景。

  1. 可控性

可控性用于表征是否容易控制激励产生预期的验证场景。比如验证ECC模块功能时,在最开始时,我们需要不注入任何ECC错误的激励,侧重于验证ECC模块功能是否正常。随后才会打开ECC注错激励,验证ECC模块是否可以检查出来。这需要提供一些方式可以控制是否打开ECC注错激励。基于此,我们可以从局部和全局方面去思考。

    1. 局部

可控性局部的意思是验证激励可以单独控制局部激励的行为,通常来说面向单个接口验证组件。这层控制的特点是偏向于接口,可以细致到控制接口每根信号的行为。

比如,待测对象有两个ECC模块,我们可以控制其中一个有ECC注错,另一个没有。

    1. 全局

可控性全局的意思是验证激励可以一同控制所有激励的行为,通常来说面向一个验证环境中的所有接口验证组件。这层控制的特点是偏向于特性,是把所有局部控制参数整合起来,提供和验证特性相关的控制参数。

比如,待测对象有两个ECC模块,我们可以同时控制两个都有ECC注错,或都没有等。又或者待测对象的某个特性还未开发完成,我们可以控制不让所有激励发出与未完成特性相关的场景。

总结

综上所述,激励设计可以按照“完备性->可拓展性->可控性”方向去分析。在完备性中,可以按照“接口类型->内部结构->激励审查”方向去分析。在可拓展性中,可以按照“模块化->层次化”方向去分析。在可控性中,可以按照“局部->全局”方向去分析。

另外很重要的一点是:要经常对验证结果进行复盘分析,并优化激励。

总得思维导图如下:

相关文章:

如何写出更牛的验证激励

前言 芯片验证是为了发现芯片中的错误而执行的过程,它是一个破坏性的过程。完备的验证激励可以更有效地发现芯片错误,进而缩短验证周期。合格的验证激励必须能产生所有可能的验证场景(完备性),包括合法和非法的场景,并保持最大的…...

EasyCVR视频汇聚平台:解锁视频监控核心功能,打造高效安全监管体系

随着科技的飞速发展,视频监控技术已成为现代社会安全、企业管理、智慧城市构建等领域不可或缺的一部分。EasyCVR视频汇聚平台作为一款高性能的视频综合管理平台,凭借其强大的视频处理、汇聚与融合能力,在构建智慧安防/视频监控系统中展现出了…...

面对大文件(300G以上)如何加速上传速度

解题思路 采用分片上传,同时每个分片多线程上传可以加速上传速度,上传速度提升10倍左右 在阿里云OSS Go SDK中,bucket.UploadStream 函数并没有直接提供,而是通过 bucket.UploadFile 或者 bucket.PutObject 等函数来实现文件上传…...

基于 Redis 实现消息队列的深入解析

目录 Redis 消息队列简介Redis 消息队列的实现方式 2.1 使用 List 实现简单队列2.2 使用 Pub/Sub 模式实现消息发布与订阅2.3 使用 Stream 实现高级队列 Redis 消息队列的特点与优势Redis 消息队列的应用场景Redis 消息队列的局限性及应对方案总结 Redis 消息队列简介 Redis…...

C++(string类的实现)

1. 迭代器、返回capacity、返回size、判空、c_str、重载[]和clear的实现 string类的迭代器的功能就类似于一个指针,所以我们可以直接使用一个指针来实现迭代器,但如下图可见迭代器有两个,一个是指向的内容可以被修改,另一个则是指…...

nrf 24l01使用方法

1、frequency 频率基础频率2.400G HZ RF_CH RF_CH10 CH2.4G0.01G2.41G 2、逻辑通道6个 pipe 时间片不同,占用同一个频率 发送时,只有一个pipe 接受时可以有6个pipe 3、通讯速率 air data rate rf_dr 寄存器设置 有两种速率 2M 1M RF_DR0 1M ,…...

C语言普及难度三题

先热个身&#xff0c;一个长度为10的整型数组&#xff0c;输出元素的差的max和min。 #include<stdio.h> int main() {int m[10],i0,max,min;for(i0;i<10;i){scanf("%d",&m[i]);}minm[0];maxm[0];for (i 0; i <10; i){if(min>m[i]) min m[i];i…...

10.4每日作业

C1 C2 C1 C2...

日常工作记录:服务器被攻击导致chattr: command not found

在深夜的寂静中&#xff0c;公司的服务器突然遭遇了一场突如其来的攻击。特别是nginx配置文件无法修改&#xff0c;仿佛预示着不祥的预兆&#xff0c;面对这突如其来的灾难&#xff0c;技术人员迅速响应。 这时候需要chattr&#xff0c;但是执行的chattr -i xxx的时候&#xf…...

多线程-初阶(1)

本节⽬标 • 认识多线程 • 掌握多线程程序的编写 • 掌握多线程的状态 • 掌握什么是线程不安全及解决思路 • 掌握 synchronized、volatile 关键字 1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1) 线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线…...

Spring Boot集成encache快速入门Demo

1.什么是encache EhCache 是一个纯 Java 的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是 Hibernate 中默认的 CacheProvider。 Ehcache 特性 优点 快速、简单支持多种缓存策略&#xff1a;LRU、LFU、FIFO 淘汰算法缓存数据有两级&#xff1a;内存和磁盘&a…...

【C语言】数组练习

【C语言】数组练习 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚练习2、二分查找 练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 练习2、二分查找 在⼀个升序的数组中查找指…...

微服务实战——ElasticSearch(保存)

商品上架——ElasticSearch&#xff08;保存&#xff09; 0.商城架构图 1.商品Mapping 分析&#xff1a;商品上架在 es 中是存 sku 还是 spu &#xff1f; 检索的时候输入名字&#xff0c;是需要按照 sku 的 title 进行全文检索的检索使用商品规格&#xff0c;规格是 spu 的…...

leetcode练习 路径总和II

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…...

使用Three.js库创建的简单WebGL应用程序,主要用于展示具有不同透明度和缩放比例的圆环列

上述HTML文档是一个使用Three.js库创建的简单WebGL应用程序&#xff0c;主要用于展示具有不同透明度和缩放比例的圆环列。以下是代码的详细解释&#xff1a; HTML结构: 文档类型声明为HTML5。<html>标签设置了语言属性为英语&#xff08;lang"en"&#xff09;…...

Redis: 集群架构,优缺点和数据分区方式和算法

集群 集群指的就是一组计算机作为一个整体向用户提供一组网络资源 我就举一个简单的例子&#xff0c;比如百度&#xff0c;在北京和你在上海访问的百度是同一个服务器吗&#xff1f;答案肯定是不是的&#xff0c;每一个应用可以部署在不同的地方&#xff0c;但是我们提供的服务…...

负载均衡可以在网络模型的哪一层?

一、网络模型概述 网络模型是用于描述网络通信过程和网络服务的抽象框架。最常见的网络模型有两种&#xff1a;OSI&#xff08;开放式系统互联&#xff09;模型和TCP/IP模型。 OSI模型 OSI&#xff08;Open Systems Interconnection&#xff09;模型是由国际标准化组织&…...

YOLOv11改进 | 上采样篇 | YOLOv11引入CARAFE上采样

1. DySample介绍 1.1 摘要:特征上采样是许多现代卷积网络体系结构(如特征金字塔)中的关键操作。它的设计对于密集预测任务(如对象检测和语义/实例分割)至关重要。在本文中,我们提出了一个通用、轻量级、高效的特征重组算子CARAFE来实现这一目标.CARAFE有几个吸引人的特性…...

【Linux运维】grep命令粗浅学习

文章目录 1 背景介绍1.1 为什么要学习grep&#xff1f;1.2 grep是什么&#xff1f;1.3 grep可以做什么&#xff1f; 2 grep基本语法2.1 命令格式2.2 “PATTERN”部分中的正则表达式语法学习2.3 grep命令参数学习 3 典型案例3.1 匹配非空行&#xff0c;过滤纯空行3.2 匹配IPv4地…...

【Godot4.3】匀速和匀变速直线运动粒子

概述 本篇论述&#xff0c;如何用加速度在Godot中控制粒子运动。 匀速和匀变速直线运动的统一 以下是匀变速运动的速度和位移公式&#xff1a; v t v 0 a t x t v 0 t 1 2 a t 2 v_tv_0 at \\ x_tv_0t \frac{1}{2}at^2 vt​v0​atxt​v0​t21​at2 当a 0 时&#xf…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...