数字ic验证|SoC的功能验证

news2025/7/7 17:22:17

随着设计的进行,越接近最后的产品,修正一个设计缺陷的成本就会越高。
在这里插入图片描述

1.功能验证概述

在IC设计与制造领域,通常所说的验证(Verification)和测试(Test)是两种不同的事

验证

  • 在设计过程中确认所设计的正确性
  • 通过软件仿真、硬件模拟和形式验证等方法进行
  • 在流片之前要做的。

测试

  • 检测芯片是否存在制造或封装过程中产生的缺陷。
  • 采用测试设备进行检查

功能验证
功能验证一般是指设计者通过各种方法比较设计完成的电路和设计文档规定的功能是否一致,保证逻辑设计的正确性。

通常不包括面积、功耗等硬件实现的性能检测。

SoC功能验证的挑战

  • 系统复杂性提高增加验证难度
  • 设计层次提高增加了验证工作量
    在这里插入图片描述发展趋势

2.功能验证方法与验证规划
在这里插入图片描述

仿真为基本出发点的功能验证方法
功能验证开发流程制订验证计划

  • 功能验证需求
  • 激励产生策略
  • 结果检测策略

验证开发

提高验证的效率
在这里插入图片描述

功能验证开发流程

更多SoC功能验证的知识查看IC修真院

3.系统级功能验证

行为级功能验证

测试数据控制流,包括初始化和关闭I/O设备、验证软件功能、与外界的通信,等等

性能验证

通过性能验证可以使设计者清楚地知道整个系统的工作速度、功耗等性能方面的指标。

协议验证

根据总线协议对各个模块的接口部分进行验证

系统级的测试平台

边界条件
设计的不连续处
出错的条件
极限情况
系统级的测试平台标准

性能指标
覆盖率指标
在这里插入图片描述

4.仿真验证自动化

图片
激励的生成

  • 直接测试激励:检测到测试者所希望检测到的系统缺陷

可以快速、准确地产生大量的与实际应用一致的输入向量

  • 随机测试激励:

检测到测试者没有想到的一些系统缺陷带约束的随机测试激励是指在产生随机测试向量时施加一定的约束,使所产生的随机测试向量满足一定的设计规则。

带约束的随机激励生成的例子

x1和x2为系统的两个输入,它们经过独热码编码器编码之后产生与被验证设计(DUV)直接相连的输入

输入约束:in[0] + in[1] + in[2] <= 1

图片

这样产生的随机向量就可以保证它们的合法性。

用SystemVerilog语言写的带约束随机激励生成例子

输入data的数量限制在1~1000

program automatic test;

// define constraint
class Transaction;
rand bit [31:0] src, dst, data[]; // Dynamic array
randc bit [2:0] kind; // Cycle through all kinds
constraint c_len
{ data.size inside {[1:1000]}; } // Limit array size
Endclass

// instantiation
Transaction tr;

// start random vector generation
initial begin
tr = new();
if(!tr.randomize()) $finish;
transmit(tr);
end
endprogram
响应的检查

可视化的波形检查:直观,但不适用于复杂系统设计
自动比对检查:通过相应的检测模型或验证模型来自动完成输出结果的比对
图片
覆盖率的检测

覆盖率数据通常是在多个仿真中收集的.
覆盖率的模型由针对结构覆盖率(Structural Coverage)和功能覆盖率(Functional Coverage)两种目标而定义的模型所组成。
可细化为:

限状态机覆盖率(FSM Coverage)
表达式覆盖率(Expression Coverage)
交叉覆盖率(Cross Coverage)
断言覆盖率(Assertion Coverage)

用SystemVerilog语言写的覆盖率检测的例子

program automatic test(busifc.TB ifc);
class Transaction;
rand bit [31:0] src, dst, data;
rand enum {MemRd, MemWr, CsrRd, CsrWr, I
oRd, IoWr, Intr, Nop} kind;
endclass

covergroup CovKind;
coverpoint tr.kind; // Measure coverage
endgroup

Transaction tr = new(); // Instantiate transaction
CovKind ck = new(); // Instantiate group

initial begin
repeat (32) begin // Run a few cycles
if(!tr.randomize()) $finish;
ifc.cb.kind <= tr.kind; // transmit transaction
ifc.cb.data <= tr.data; // into interface
ck.sample(); // Gather coverage
@ifc.cb; // Wait a cycle
end
end
endprogram

5.形式验证

形式验证(Formal Verification)

静态形式验证(Static Formal Verification)和半形式验证(Semi-Formal Verification)

静态形式验证不需要施加激励,也不需要通过仿真来验证。目前,SoC设计中常用的静态形式验证方法是相等性检查。
半形式验证是一种混合了仿真技术与形式验证技术的方法。常用的半形式验证是混合属性检查或模型检查,它将形式验证的完整性与仿真的速度、灵活性相结合。
相等性检查(Equivalent Check)

对设计进行覆盖率100%的快速验证
主要是检查组合逻辑的功能相等性
不需要测试平台和测试矢量,不需要进行仿真
可用于比较RTL与RTL、RTL与门级、门级与门级的功能相等性,被广泛应用于版图提取的网表与RTL代码比较,特别是做完ECO后要进行网表和修改后的RTL的相等性检查。
半形式验证(Semi-Formal Verification)

仿真和形式验证形结合,如混合模型检查(Model Checking)或属性检查(Property Checking)的方法。

图片

6.基于断言的验证

仿真验证面临的问题:可观测性和可控制性

  • 合适的输入矢量能够激活错误
  • 错误要能够以某种预期的形式输出

采用断言描述设计的行为,在仿真时起到监控作用,当监控的属性出现错误时,立刻触发错误的产生,增加了设计在仿真时的可观测性问题。

也可以用在形式属性检查中作为要验证的属性。属性检查(Property Check)时,是对整个状态空间进行搜索,能够控制到每一个信号并能指出错误的具体位置,解决了设计验证时的可控制性和可观察性问题。

图片

验证实现所花费的时间与验证的质量
断言的作用
在这里插入图片描述

断言语言及工具的使用

断言语言

C or SystemC
SystemVerilog Assertion (SVA)
Property Specification Language (PSL) (IBM, based on Sugar)
Open Verification Library (OVL)
Verilog, VHDL

SVA(SystemVerilog Assertion)例子

用Verilog实现的检查器:

always @ (posedge A)
begin repeat (1) @ (posedge clk);
fork: A_to_B
begin @ (posedge B)
$display (“SUCCESS: B arrived in time\n”, $time);
disable A_to_B;
end
begin
repeat (1) @ (posedge clk)
@ (posedge B)
display (“SUCCESS: B arrived in time\n”, $time);
disable A_to_B;
end
begin
repeat (2) @ (posedge clk)
display (“ERROR: B didn’t arrive in time\n”, $time);
disable A_to_B;
end
end
用SVA实现的检查器:

assert property
( @(posedge clk )A|->##[1:2]B);
基于断言的验证

在属性检查中使用断言

在属性检查中,最重要的就是属性描述。
在这里插入图片描述

在仿真中使用断言
在这里插入图片描述

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

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

相关文章

PHP 实现PDF转图片

目录 1.环境配置&#xff1a; 2.实现原理&#xff1a; 3.安装php扩展imagick 4.安装ghostscript 5.pdf转图片 1.环境配置&#xff1a; 2.实现原理&#xff1a; Php使用扩展插件imagick进行图片处理&#xff0c;处理pdf时使用imagick去调用ghostscript 3.安装php扩展imag…

spring-boot如何自行写一个starter并且使用

这里说的starter是pom中引入的一系列starter包&#xff0c;比如spring-boot-starter-web、mybatis-plus-boot-starter等。本文先已mybatis-spring-boot-starter的使用进行说明&#xff0c;然后得到使用的流程&#xff08;套路&#xff09;&#xff0c;然后根据该流程&#xff0…

ddim原理及代码(Denoising diffusion implicit models)

前言 之前学习了 DDPM(DDPM原理与代码剖析)和 IDDPM(IDDPM原理和代码剖析)&#xff0c; 这次又来学习另一种重要的扩散模型。它的采样速度比DDPM快很多(respacing)&#xff0c;扩散过程不依赖马尔科夫链。 Denoising diffusion implicit models, ICLR 2021 理论 Astract和Int…

百果园通过港交所上市聆讯:八成营收来自加盟店,余惠勇为董事长

撰稿|汤汤 来源|贝多财经 近日&#xff0c;深圳百果园实业&#xff08;集团&#xff09;股份有限公司&#xff08;下称“百果园”&#xff09;通过港交所上市聆讯&#xff0c;并披露了聆讯后招股书。 根据招股书介绍&#xff0c;百果园是中国最大的水果零售经营商。根据弗若斯…

数据库实验6 存储过程实验

前言&#xff1a;游标的mysql代码不懂写&#xff0c;所以没有运行结果 实验6 存储过程实验 实验6.1 存储过程实验 1.实验目的 掌握数据库 PL/SQL 编程语言&#xff0c;以及数据库存储过程的设计和使用方法。 2.实验内容和要求 存储过程定义,存储过程运行,存储过程更名,存…

股票价、量走势图绘制

在证券投资分析领域中价、量走势分布图是投资者常用的一个参考方面。本案例主要介绍股票每日收盘价格、成交量的走势图以及月交易量分布饼图的绘制技能&#xff0c;并进一步介绍了子图的绘制方法。今有股票代码600000行情交易数据表&#xff08;trd.xlsx&#xff09;&#xff0…

SPDK线程模型

一、reactor线程 与传统的reactor线程模型相比&#xff0c;SPDK的reactor在功能实现上还是有很大区别的&#xff0c;线程不在基于流水线形式进行作业&#xff0c;而是采用Run-To-Complete来做运行处理。 如图所示&#xff0c;每个reactor线程会绑定一个cpu core&#xff0c;线…

力扣刷题笔记day7(数组中重复的数字+在排序数组中查找数字+0~n-1中缺失的数字)

文章目录数组中重复的数字题目思路代码在排序数组中查找数据题目思路代码0&#xff5e;n-1中缺失的数字题目思路代码数组中重复的数字 题目 思路 创建一个哈希表&#xff0c;将数组遍历&#xff0c;如果不存在则添加到哈希表中&#xff0c;如果存在则直接返回 代码 var fin…

电磁功率流和坡印廷矢量

回顾&#xff1a; 场源的影响周围的快慢取决于距离和传播速度 场源变化引起电磁波&#xff0c;电磁波传输能量 电磁能量的流动满足能量守恒定律 我们关心的是 体积V里面和体积外怎么交换能量&#xff0c;S是包围的闭合面 大家想一想&#xff0c;体积里面有场源 随着能量的…

Spring 中使用Nacos服务发现

引入依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>${latest.version}</version> </dependency>本文使用的版本为&#xff1a;1.1.1&#xff08;与Spring 中…

微服务(二)——注册中心(Eureka、Nacos)

目录1. 概念2. Eureka1. 服务搭建1. 依赖导入2. 配置文件3. 启动项目2. 服务注册1. 依赖导入2. 配置文件3. 启动多个实例3. 服务发现1. 依赖导入2. 配置文件3. 服务拉取和负载均衡4. 小结3. Ribbon1. 负载均衡流程2. 负载均衡策略3. 加载策略4. Nacos1. 下载安装2. 注册中心1. …

css:隐藏input file标签并触发点击上传文件事件

目录方式一&#xff1a;将input标签覆盖到按钮的最上层方式二&#xff1a;通过label标签触发点击事件方式三&#xff1a;js触发文件上传的点击事件总结通用的按钮样式 /* button样式来自element-ui */ .button {color: #fff;background-color: #409eff;display: inline-block;…

【MQTT】mqtt + go + M5Stack + SSR 远程灯控程序

1. mqtt服务搭建 参考上一篇文章【MQTT】mqtt 服务器部署--go 生产和消费demo_平静不绝望的博客-CSDN博客 2. M5stack 烧录和编程 详细文档&#xff1a;m5-docs mac 需要安装USB驱动 和 m5burner 如下图 3. flow ui 编程 SSR 4. go web远程代码 s.Router.HandleFunc(&…

UE中的FString操作

此篇是指单纯记录&#xff0c;方便之后查阅。 目录 创建 转型到FString FString转型到其他类型 字符串中是否包含指定串 查找给定串在其中是什么位置 字符串比较 读文件 裁剪字符串 编码解决的是文字问题 稍微细致一些的可以看&#xff1a; UE4随笔&#xff1a;FStri…

TI 2640 Quick start

&#xff08;1&#xff09;下载ccs 并且安装 &#xff08;2&#xff09;下载对应版本的SDK&#xff0c;并且安装 SDK对应版本下载可以通过搜索的方式&#xff1a;simplelink_cc2640r2_sdk_5_30_00_03 &#xff08;3&#xff09;导入对应的工程文件 此篇文档可以作为参考&#x…

喜讯丨计讯物联荣获厦门软件园党群服务中心篮球赛亚军

蓄势待发迎“篮”上&#xff0c;齐心协力谱新篇。12月17日&#xff0c;厦门软件园党群服务中心篮球赛完美落幕。计讯物联一路过关斩将&#xff0c;荣获厦门软件园党群服务中心篮球赛亚军。 决胜雅马哈&#xff0c;强势晋级半决赛 随着一声哨响&#xff0c;比赛正式拉开帷幕&…

2个月备考通过系统架构设计师考试,把经验分享给孤军奋战的你

一、前言 本来于2022-08-29报考系统架构设计师&#xff0c;报考完成以后才开始了正式的学习&#xff0c;也就是9月初才开始系统学习&#xff0c;2022-11-05开始考试&#xff0c;中间准备了两个月的时间。 当时公司业务受疫情影响严重&#xff0c;领导叫我考一个证书吧&#xf…

Android制作简易的音乐播放器和视频播放器

文章目录制作简易的音乐播放器和视频播放器播放多媒体文件播放音频MediaPlayer的工作流程项目示例播放视频项目示例制作简易的音乐播放器和视频播放器 播放多媒体文件 Android在播放音频和视频方面做了非常不错的支持,它提供了一套非常完整的API,使得开发者可以轻松编写出一个…

JavaEE入门知识

1.为什么要学习框架&#xff1f; 1. 学习框架相当于从“⼩作坊”到“⼯⼚”的升级&#xff0c;⼩作坊什么都要⾃⼰做&#xff0c;⼯⼚是组件式装配&#xff0c;特点就是⾼效。 2. 框架更加易⽤、简单且⾼效。 2.创建一个Servlet项目&#xff08;我使用的是IDEA专业版&#…

USB TO SPI(上海同旺电子)调试器调试MCP6S92

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、MCP6S92 单端轨到轨输入/ 输出低增益PGA; 特性 • 复用输入&#xff1a;1 或2 个通道 • 8 种增益选择&#xff1a; - 1、2、4、5、8、10、16 或32 V/V • 串行外设接口&#xff08;SPI&#xff09; • 轨…