技术标签: 数字IC # 数字IC验证 1024程序员节 # 数字IC设计
芯片整体系统以及细分模块都需要功能详述文档,包含信息:
整体上分为系统设计到电路/逻辑设计,最后得到GDSII文件后交由Fountry生产
(1)系统设计
根据产品Spec,制定编码规范,设计实现算法,然后开展架构设计。例如可以用SystemC进行性能估算和仿真,确定设计中采用的数据通路结构。如设计中需要多大乘法器,采用何种滤波器,采用并行还是串行方式,是否需要流水线等;在该过程中,需考虑那些模块用IP完成,哪些自己实现。
(2)电路/逻辑设计
数字IC设计一般分为前端设计和后端设计,前端完成硬件逻辑的编码设计验证工作,后端完成逻辑综合、时钟树综合、物理版图设计、等价性检查、静态时序分析、功耗分析等过程
芯片出厂后运用一种算法检测芯片错误,这种算法(差异算法)实际上是一种固定输入对应唯一输出的逻辑,这种逻辑可在芯片设计过程中确定
功耗分为静态功耗和动态功耗。
动态功耗分析事关芯片功能和性能,设计过程中就可以根据动态功耗情况对设计进行反馈。
参考链接:安全验证 - 知乎
验证贯穿了设计的每个阶段,验证是为了穷尽所有的可能的情况给设计产生激励,在各种激励情况下监测出不符合硬件描述的行为并提交到前端设计解决。
绝对好文,验证新手入门,老手总结:IC验证的一种最佳实践:pandora-v0.5
http://www.ee1024.com/thread-176665-1-1.html
软硬件同时工作,协同仿真的概念:如何验证复杂的RISC-V设计-电子工程专辑
开发验证环境
是使验证工程师可以发现设计缺陷的一系列软件代码和工具的集合。包括基于模拟验证的测试激励生成和检查机制;形式验证环境的规则生成等,具体可有:
1)搭建测试平台(testbench)
2)编写测试用例
3)参考模型
调试硬件设计和环境
将验证环境和HDL设计集成起来,运行测试集来调试硬件及环境
回归测试
是验证计划中定义的测试集的完整运行,当在某个缺陷修复或功能修改后,按照以前所有的测试用例(testcase)和可能添加的新的测试用例进行测试。
测试要求:
1)确保本次改动修复以前的漏洞,没有引入新的缺陷,实现了新功能。
2)递交不同的随机种子(random seed)进行随机测试,确保每次测试都能提高功能覆盖率
硬件制造
流片,将芯片设计交给Fountry(Tape-out),流片前需有一个检查列表来追踪所有的项目(物理的和逻辑的),此前回归测试的错误发现率应接近0
流片期间验证仍在进行
可划分为前端仿真和后端仿真。前端主要为了检测功能逻辑的缺陷,RTL、门级仿真都是不带时序的仿真,主要用于功能验证。后端是为了检测问及电路由延迟导致采样失败所产生的功能缺陷。
前端验证包括
RTL功能验证:行为级功能验证,无延时的理想情况
门级仿真:验证综合后网表的功能是否与期望相符
形式化验证:保证门级网表与RTL代码的等价性
SDF(Standard delay file)文件是后端在布局布线过程中将器件延时和线延时的信息保留下来的文件,后仿将其加载到验证环境中计算DUT的整体延时和时序。
为了便于拆解功能模块,方便分工协同,通常会把进行分层次验证,以手机通信芯片为例:
通过测试序列和激励生成器给入待测设计适当的激励,跟随仿真进程的推进,判断输出是否符合预期。
本身不需要仿真、波形激励,可通过工具的辅助发现设计中存在的问题。在设计早期发现功能实现意外的设计问题,完善设计代码。检查方法包括:
验证环境由Testbench、测试用例、运行脚本等要素组成。包含了验证结构中的各组件,组件间的连接关系,测试平台的配置和控制,编译仿真流程,结果分析报告和覆盖率检查。
1)testbench
平台包括时钟/重置,激励发生器,DUT,比较器,监测器五个组件
覆盖率是检测验证效果的基本指标。
语句覆盖率:
也叫做块覆盖率,检查HDL的每一行代码是否被执行过
一些好的具有保护性的代码语句没有运行是正常的(检查代码覆盖率时应把保护性语句排除在代码覆盖统计之外。)
表达式覆盖率:
相比语句覆盖,粒度更细。
条件覆盖率:
每个条件中的逻辑操作数被覆盖情况
分支覆盖率:
指在if, case, while, repeat, forever, for, loop语句中各个分支执行的情况
事件覆盖率
记录某一个事件被触发的次数
翻转覆盖率
记录某个边界信号数据位的0/1跳转情况
状态机覆盖率
记录状态被进入的次数,以及状态间的跳转情况。
记录断言的先决条件是否被触发,以及判断语句成功或失败。基本可分为基于动态仿真或者硬件加速的断言覆盖率和形式验证的静态断言覆盖率。
主要关注设计的输入,输出和内部状态,衡量是否实现设计的各项功能,且是否按预想的行为执行。主要检测代码覆盖未检测到的错误。
功能覆盖属于黑盒测试,只关心功能,不依赖于实际的代码,功能覆盖涉及到测量一些相关值,不能从RTL级设计代码中自动提取,必须进行人工操作。
验证环境的构建
Verilog TB构建参见链接:
IC验证——testbench编写_KGback的博客-程序员宅基地_ic验证
SystemVerilog TB构建参见链接:
IC验证——SystemVerilog学习_ic验证必须要用system verilog语言吗-程序员宅基地
UVM见链接:
动态仿真工具的使用:
IC设计——EDA软件篇——VCS使用_vcs 显示多维数组-程序员宅基地
便携式测试用例:
数字IC验证——PSS可移植测试用例_pss验证-程序员宅基地
验证代码生成和规范检查类工具开发,比如AutoTB:
文章浏览阅读1.1w次,点赞18次,收藏61次。https://www.arduino.cn/thread-13186-1-1.html到底啥是上拉(pull-up)電阻和下拉(pull-down)電阻 ?在用 Arduino 做實驗時, 按鈕開關(Button/Switch)是很常見的應用,然後你常常看到文件說要接個電阻, 又看到"上拉電阻"或"下拉電阻"!電阻(resistor)應該大家多多少少都知道(大家都聽過歐姆定律),可是到..._开关需要上拉吗
文章浏览阅读3k次,点赞2次,收藏3次。如何快速有效的学习新领域知识 工作以后,对于一些领域的知识,之前我们没并不熟悉或知之甚少,比如想学习做产品,学编程,学习炒股票,学习练瑜伽,这个时候想要去学习,那如何在比较短的时间内学会自己所需要的知识呢?方法无外乎两种:一是自学,二是参加培训班 参加培训班,优点是有学校帮你安排课程,有老师教,有同学可以交流,这样当然会学的快一点,但缺点就是费用高,培训班质量鱼龙混杂,自己也没有那么多时间去上课。..._新领域学习新知识
文章浏览阅读681次。一、后台管理1)本地化:到项目下面的settings.py配置后台管理的语言和时区LANGUGE_CODE = ‘zh-hans’ #表示使用中文TIME_ZONE = ‘Asia/Shanghai’ #表示中国时间2)创建管理员命令:python manage.py createsuperuser根据提示输入后面前台管理界面需要用到的账号名跟密码。3)注册模型类在应用下的a..._django html博客后台数据管理模板
文章浏览阅读128次。1.setting.xml文件设置项指定maven仓库位置<localRepository>D:\repository\maven</localRepository>阿里云镜像加速<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirror..._镜像地址和依赖怎么删除
文章浏览阅读1k次。<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> /* 盒子模型分为三个部分:从内至外分别是:盒子内容、盒子内边距padding、盒子边框border、盒子外边距margin 每个属性都有四个方向:上top、右right、下bottom、左left*/ ._给一个宽高200px的盒模型添加padding:50px 为了保证盒模型不被撑大 共有几种
文章浏览阅读674次。最近找到了一个很好的练习盲打的网站:https://www.typingclub.com/转载于:https://www.cnblogs.com/qiuchengrui/p/10234360.html_电脑闭眼打字练习网站
文章浏览阅读796次。用zypper dup升级suse11.1到11.3后,重启发现bond1和bond2不见了,因为“could not enslave interface eth0”和eth1,eth2,eth3。经查找,发现/lib/firmware/下,少很多东西(bnx2),需要安装kernel-firmware。昨天再装的过程中,卡住了,未退出。今天接着看看。_kernel firmware
文章浏览阅读240次。仅适用于X86_64的黑群晖7.0-7.2机型,目前测试识别正常,索引期间CPU占用率也不高。原理修改为不调用GPU显卡,只用CPU,所以不算完美!仅测试了DS918+、DS920+,其它机型自行研究!像万由NS202直接支持face识别,不需要修复,BIOS里面关闭vt-d即可!所以建议先研究下实在不行再搞补丁。如果CPU不带核显但安装机型支持核显,肯定要搞这个补丁了!安装机型原版CPU不带核显也不需要折腾补丁。操作步骤1、先停用Synology Photos套件。_synology photos黑群相册视频不显示缩略图咋整
文章浏览阅读100次。前言在平时我们对锁的使用,在针对单个服务,我们可以用 Java 自带的一些锁来实现,资源的顺序访问,但是随着业务的发展,现在基本上公司的服务都是多个,单纯的 Lock或者Synchronize 只能解决单个JVM线程的问题,那么针对于单个服务的 Java 的锁是无法满足我们业务的需要的,为了解决多个服务跨服务访问共享资源,于是就有了分布锁,分布式锁产生的原因就是集群。正文实现分布式锁的方式有哪些呢?分布式锁的实现方式主要以(ZooKeeper、Reids、Mysql)这三种为主今天我们主要讲_zookeeper 分布式锁 尚硅谷代码
文章浏览阅读4.4k次。问题描述:Session ‘app’: Installation did not succeed. The application could not be installed: INSTALL_FAILED_ABORTED华为手机无法运行apk,android studio 连接真机运行时报错解决一:是否是由于手机上的app与我们现在安装的版本冲突 卸载手机上app重新安装解决...
文章浏览阅读484次。try: 理解它是扫描器,将可能出现异常的代码放入其中; 如果在执行过程中出现异常对象了,扫描器会立即察觉到此异常对象, 但是它没有处理它的能力,所以会将异常对象给到except(捕获器)进行解决except: 理解它是捕获器,后面可以定义异常类型,并且和as关键字配合使用; 定义多个except也是合法的,但是它的执行顺序,由上往下,一旦匹配上就执行e..._except pytheon
文章浏览阅读2.6k次。程序可以运行在模拟器中,但是签名后不能运行在真机上--报错Error starting DemoApp: 'DemoApp' may not contain classes in com.rim, net.rim, net.blackberry, java or javax packages. 解决办法:把项目DemoApp中的com.rim, net.rim, net.blackberry, java or javax 开头的包改名即可。