仿真验证方法(1)——动态验证

一、概述

1.1 验证的目的和方法

        在现代集成电路设计中,验证所占工作量超过70%。验证要求真实而完备,它决定了设计的成败与成本。
验证的目的
  • 原始描述是否正确?(代码)
  • 逻辑功能是否正确?(功能)
  • 时序及其相关性能指标是否正确?(时序、速度、噪声)
  • 是否完全符合物理设计规则?(工艺)
  • 功耗、可测性、可靠性、可制造性是否满足要求?(其他)
验证的方法
  • 软件验证:也叫软件模拟(simulation),基于EDA工具,易行,有效性取决于EDA工具和设计师的经验
  • 硬件验证:也叫硬件仿真(emulation),基于FPGA或其他硬件仿真器,速度比软件仿真快,有效性介于软件验证和流片验证之间
  • 流片验证:基于样片及测试,最真实,代价高昂

1.2 验证的要求

所有设计层次都要进行仿真验证
  • 不同的设计层次或设计阶段,采用不同的仿真验证工具(管、门、RTL、逻辑、系统,数字、模拟、混合,时序、逻辑、功耗等)
  • 所有功能与性能指标都要通过仿真验证
  • 仿真验证必须考虑最差情况(Worst、Typical、Best)
  • 验证必须考虑仿真精度与计算效率的折衷  

1.3 验证的分类

  • 功能验证(动态验证或功能仿真)
  1. 方法:施加外部输入激励到所设计的电路模型,判断它所产生的输出响应是否符合预期功能,主要用于验证电路功能
  2. 特点:最接近电路实际工作场景,但难以找到完全的激励来覆盖电路的所有功能,而且耗费时间,对于规模大的电路尤其如此
  3. 类型:电路仿真,逻辑仿真
  • 时序验证(静态验证)
  1. 方法:分析电路所有路径的时序,或者将待验证的电路与参考电路进行对照比较,主要用于验证电路性能指标,限于数字逻辑电路
  2. 特点:无需输入激励信号,速度快,但无法验证电路功能,准确性较低
  3. 类型:静态时序分析,形式验证(等效性检查)
  • 物理验证
  1. 方法:检查版图是否符合预定的设计规则,是否与电路一致
  2. 特点:同时需要版图和电路数据,物理设计完成后进行
  3. 类型:DRC,ERC,LVS

1.4 FPGA设计验证流程

二、动态仿真

2.1 动态仿真流程

        在进行动态仿真时,我们需要像仿真工具输入激励描述电路描述,并给出相应的控制命令。其中,激励描述指的是根据电路功能要求设计尽可能全面或有充分代表性的激励信号,电路描述指的是将用户对电路的描述转换成EDA工具可识别的形式(如逻辑表达式、网表、等效电路)。控制命令表示设置初始值、仿真时间、过程控制、中断、观察仿真状态等。

2.2 电路仿真与逻辑仿真

2.2.1 电路仿真

电路级仿真(多用于模拟电路)
  • 用于仿真晶体管级的电路,精确性高,功能全面
  • SPICE:电路模拟的事实标准,已衍生出Spectre、HSPICE、PSPICE、OrCAD、Workbench等多种版本
  • NanoSim:Synopsys公司开发,可用于几百万门、0.13μm以下节点、模拟/数字/混合信号电路设计验证

        这里我们选取一种有代表性的电路仿真进行介绍:SPICE仿真。

        SPICE仿真程序由美国加利福尼亚大学伯克利分校于1972年起开发,基于电路网表和器件模型对电路各个节点进行包括直流、交流和瞬态分析在内的仿真,精确度高,但对大规模电路仿真耗时大。

2.2.2 逻辑仿真

逻辑级仿真(只用于数字电路)
  • 行为级仿真:验证模型、算法和行为等抽象程度较高的内容,一般不考虑具体的实现方式,仿真语言可以是HDL或C等高级语言,仿真环境可以使用MATLAB、SPW、COSSAP等
  • RTL级仿真:验证RTL级代码,一般不考虑实际器件的延时,用HDL编写仿真激励,仿真工具有Synopsys的VSS、Cadence的NC-Sim等
  • 门级仿真:pre-layout前仿真经过综合的门级网表,post-layout后仿真布局布线后的网表,都需使用器件与互连的延时信息(包含在SDF文件中)

        同样,我们选取一个有代表性的例子:四位数值比较器

2.3 基于事件&基于周期的仿真

基于事件的仿真(Event-based simulation)
  • 输入状态一旦发生变化(事件发生)就会计算得到输出响应,看是否满足要求
  • 既能验证逻辑,也能验证时序
  • 既可用于同步系统,也可用于异步系统
  • 电路规模和输入向量复杂(可仿4~28种输入状态)时,仿真时间很长
  • 适合对功能块和关键局部进行仿真,目前多数动态仿真工具基于这种方法
基于周期的仿真(Cycle-based simulation)
  • 每个时钟周期结束时计算电路的输入-输出稳态响应,看是否满足要求
  • 只能验证逻辑,不能验证时序,故必须与静态验证工具配合应用
  • 只能验证同步系统,不能验证异步系统
  • 仿真速度远高于基于事件的仿真(快10~100倍)
  • 适合对超大规模复杂数字电路(如微处理器、浮点处理器、系统芯片等)进行仿真,以及作了少量修改后的验证

2.4 激励生成&响应分析

如何生成激励?
  • 编制测试向量:对大规模芯片而言编制工作量巨大,要穷尽所有情况的话仿真时间很长(16位以上的微处理器已不可能实现穷尽测试)。测试向量可采用HDL、波形、事务和设计约束等方法建立。
  • 随机测试或最坏情况测试:若设计规模过大使得激励无法覆盖所有的边界条件,可采用随机化的激励数据来验证,可在有限的时间和人力条件下覆盖到更多的边界条件。也可采用最坏情况下的测试,但会增大设计难度和实现成本。
  • 借鉴已有数据:借鉴类似芯片的测试向量,如1GHz主频CPU的验证可借鉴500MHz主频CPU的历史数据。
如何分析响应?
  • 肉眼观察(Eyeballing):靠人工判断验证结果的准确性,对大规模芯片而言工作量巨大,待观测信号数较多时难以分析它们之间的交互过程。
  • 与基准(Golden)文件比较:必须有基准文件,可以是前次仿真的结果,也可以是不同抽象层次(行为级、RTL级、门级)的仿真结果。
  • 协议检查(Protocol monitors):对必须满足标准协议的接口(如PCI、AMBA总线接口等)进行协议符合性测试,协议常需使用抽象程度更高的验证语言来表征。

2.5 基于事务与基于断言

        事务(Transaction):也称交易,是针对设计对象所作的一次数据或控制的传输,例如对存储器的一次读取或者改写,不同单元之间通过总线进行的一次报文数据发送。

        基于事务的验证(Transaction-based Verification):将复杂的激励单元或向量组合抽象成事务模型(也叫事务器(transactor)或事务验证模块),如将对存储器或总线的读/写操作转换为寻址和数据信号。事务模型可以用抽象程度更高的硬件验证语言(如行为级HDL、C++、System C)来编写,从而大大提高了激励产生以及整个验证的效率。

        断言(Assertions):电路必须永远满足的某种行为或状态,只有真或假两种结果。例如:存储器不可能同时读和写;FSM状态机中表示状态的独热码不可能各位全为0。
        基于断言的验证(Assertion-based verification):用布尔表达式的语句来描述断言,插入设计的关键点进行观测,如发现错误可快速定位其源头。
  • 可插入电路内部的任何关键点,需要内部结构信息(属于白盒验证)。
  • 插入断言不应影响设计结构与行为。在RTL代码中插入断言不应影响综合结果,可将插入断言看成是综合的注释。
  • 与需全芯片、全时测试的动态仿真相比,断言验证显著提高了可观察性和验证效率,缩短了验证时间。

2.6 如何评估仿真验证质量

  • 代码覆盖率(Code Coverage):验证过程中执行过的代码在所有代码中占有的比例。100%的代码覆盖率只代表每一行代码都在仿真中执行过,并不意味着功能没有错误代码覆盖率的范围:RTL编码的模块、路径、语句、条件分支、条件表达式的覆盖率,寄存器的触发覆盖率,每位信号的翻转覆盖率,状态机的状态受访、状态跳变、状态互访的覆盖率等。
  • 功能覆盖率(Functional Coverage):仿真测试到的功能在设计实现所有功能中所占的比例。100%的功能覆盖率只能确保对设计者事先列出的所有功能(可能有缺项)都进行了验证。
  • 插入缺陷覆盖率(Fault Insertion Coverage:有意识地在设计中插入缺项(Bug),然后检查该Bug是否能在验证过程中检测到,从而可有效地衡量测试用例的质量。显然,我们不可能在设计中插入所有可能发生的Bug,而只能随机地插入有限个Bug。

三、小结

        在现代集成电路设计中,验证所占工作量超过70%。验证要求真实而完备,它决定了设计的成败与成本。本文主要介绍了什么是验证,为什么我们需要验证,芯片验证大体上可以分成动态验证、静态验证和物理验证,本文又着重介绍了动态验证的内容。

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

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

相关文章

MATLAB--pie函数绘制分类饼图(1)--附案例代码

MATLAB–pie函数绘制分类饼图(1) 目录 MATLAB--pie函数绘制分类饼图(1)摘要1. pie函数概述2. 使用pie函数绘制分类图的步骤步骤1:准备数据步骤2:调用pie函数步骤3:定制图形(可选&…

从事铁路工作保护足部,穿什么劳保鞋更安全

铁路运输在我国交通运输业中起着骨干作用,为国民经济的可持续发展和人口流动做出了巨大贡献。安全是铁路运输不可忽视的问题,在作业场地随处能见到“安全就是生命,责任重于泰山”的安全标语,由此可见安全问题是放在首位的。 铁路施…

2023年全球软件质量效能大会(QECon上海站):核心内容与学习收获(附大会核心PPT下载)

会议聚焦于软件质量和效能的提升。在智能时代,随着数字化的深入人心,软件正在随着云计算、移动互联网、物联网等的发展而不断进化,软件对企业的发展愈加重要,大家对软件的质量要求也在从传统功能、性能、安全这些基础层面向着用户…

GVM垃圾收集器

Serial收集器(新生代) Serial(串行)收集器是最基本、历史最悠久的垃圾收集器,采用“标记-复制”算法负责新生代的垃圾收集。它是Hotspot虚拟机运行在客户端模式下的默认新生代收集器。 它是一个单线程收集器。它会使用…

C桑(Cython)从入门到入土(2): np数组操作对比

C桑(Cython)从入门到入土 2. np数组操作对比 Node sc518 Copy has image data of type unsigned long long实际上, 👆🏻这个错误是我探索Cython的缘起… code1: Form: 更现代的方法是使用内存视图而不是指针: cdef np.uint32_t[:,:,::1] …

大模型学习产品,一个月顶一年 | 对话网易有道周枫

OpenAI CEO奥特曼曾表示:“AI女友只不过是一个美丽的陷阱,AI教育才是最应该去发力的一个领域。” 场景的确定性,是OpenAI等一众公司尤为重视教育领域的原因所在。教与学是教育场景中的核心,但再将两个字进行拆解,教学…

展望2024:9大要点把握PLM软件趋势,云PLM领导者Arena

2023年《质量强国建设纲要》(以下简称《纲要》)的推出,再次确定了中国要走上制造业高质量发展之路的决心。《纲要》指出要深入实施质量强国战略,加快传统制造业技术迭代和质量升级,推动工业品质量迈向中高端。当前&…

蓝桥杯基础知识3 memset()

蓝桥杯基础知识3 memset() #include <bits/stdc.h> using namespace std;int main(){int a[5]; //随机数for(int i 0;i < 5; i)cout << a[i] << \n;cout << \n;memset(a, 0, sizeof a); //0for(int i 0;i < 5; i)cout << a[i] << …

高德打车引入“红绿灯倒计时”能力,算力技术升级打车体验

打到的车还有多久能到&#xff1f;接驾车辆原地不动是什么原因&#xff1f;乘客在打车时&#xff0c;常常因为无法了解实时接驾路况&#xff0c;容易出现“等车焦虑”。 如今&#xff0c;高德打车已全面应用“红绿灯倒计时”能力&#xff0c;让乘客在等车时就能掌握接驾路况&am…

Qt QTableWidget表格控件

文章目录 1 属性和方法1.1 行列数目和行表头和列表头1.2 单元格1.3 隔行交替背景色1.4 选择模式和选择行为1.5 设置样式表 2 实例2.1 布局2.2 代码实现 QTableWidget是Qt中的表格控件。 1 属性和方法 QTableWidget有很多属性和方法&#xff0c;完整的可查看帮助文档。 在窗口…

时间序列预测 — VMD-LSTM实现单变量多步光伏预测(Tensorflow):单变量转为多变量预测多变量

专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 所有文章提供源代码、数据集、效果可视化 文章多次上领域内容榜、每日必看榜单、全站综合热榜 时间序列预测存在的问题 现有的大量方法没有真正的预测未来值&#xff0c;只是用历史数据…

STM32L051使用HAL库操作实例(14)- ADC采集电压

目录 一、前言 二、ADC外设简要说明 三、STM32CubeMX配置&#xff08;本文使用的STM32CubeMX版本为6.1.2&#xff09; 1.MCU选型 2.时钟使能 3.外部时钟配置 4.串口配置 5.ADC引脚配置 6.配置STM32CubeMX生成工程文件 7.点击GENERATE CODE生成工程文件 四、工程源码 …

20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】

20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】 2024/1/12 16:20 https://blog.csdn.net/u010164190/article/details/79096345 [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录 https://blog.csdn.net/hnjztyx/artic…

vue3+ts+vite+elementPlus后台管理系统学习总结01

vue3tsviteelementPlus后台管理系统学习总结01 一&#xff1a;运行源代码一&#xff1a;按照博客一步步操作1.ts中引入path模块出错&#xff1a;Cannot find module path or its corresponding type declarations.2.安装最新版本的pnpm:3.配置自动导入时&#xff0c;遇到.eslin…

web网页首页布局

效果展示&#xff1a; html代码&#xff1a; <!doctype html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"> <meta name"viewport" content&qu…

CSS3简单运用过渡元素(transition)

CSS3过渡 概念&#xff1a;在CSS3中&#xff0c;我们可以使用transition属性将元素的某一个属性从“一个属性值”在指定的时间内平滑地过渡到“另一个属性值”&#xff0c;从而实现动画效果。 CSS3变形&#xff08;transform)呈现的仅仅是一个结果&#xff0c;而CSS过渡&…

AdaM: An Adaptive Fine-Grained Scheme for Distributed Metadata Management——泛读论文

ICPP 2019 Paper 分布式元数据论文汇总 问题 为了同时解决元数据局部性和元数据服务器的负载均衡。 现有方法缺陷 基于哈希的方法&#xff1a;zFS [16]&#xff0c;CalvinFS [21]&#xff0c;DROP [24]&#xff0c;AngleCut [8] 静态子树划分&#xff1a;HDFS [6], NFS [14…

2024年【电工(初级)】最新解析及电工(初级)模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电工&#xff08;初级&#xff09;最新解析根据新电工&#xff08;初级&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将电工&#xff08;初级&#xff09;模拟考试试题进行汇编&#xff0c;组成一套电…

Java十大经典算法——贪心算法

算法概念&#xff1a; 贪婪算法(贪心算法)是指在对问题进行求解时&#xff0c;在每一步选择中都采取最好或者最优(即最有利)的选择&#xff0c;从而希望能够导致结果是最好或者最优的算法&#xff1b;贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解)&#xff0c;但…

世微AP5125 输入14-80V 输出12V5A LED灯降压恒流电源驱动方案 SOT23-6

这是一款60WLED驱动方案,线路图BOM表如下 ​ 祥单表&#xff1a; 实物图&#xff1a; 产品描述 AP5125 是一款外围电路简单的 Buck 型平均电流检测模式的 LED 恒流驱动器&#xff0c;适用于 8-100V 电压范围的非隔离式大功率恒流 LED 驱动领域。芯片采用固定频率 140kHz 的 …