概述
1. spec文档
芯片整体系统以及细分模块都需要功能详述文档,包含信息:
- 接口信息
接口版本,标准,若是标准接口,则不需要时序信息,命令,数据传输信息等,只需要时钟,复位,接口信号名;若是自定义接口,则需要详细描述。 - 结构信息
模块细分为各个功能组件,以及逻辑关系; - 交互信息
模块和外界模块交互示意图,时序信息
2. IC设计流程
1 设计过程
整体上分为系统设计——电路/逻辑设计——物理设计流程,得到GDSII文件后交由工厂生产
(1)系统设计
a. 制定规范
b. 算法设计:用C或MATLAB来研究制定一个IC系统的可执行规范
c. 架构设计:用SystemC进行性能估算和仿真,确定设计中采用的数据通路结构。如设计中需要多大乘法器,采用何种滤波器,采用并行还是串行方式,是否需要流水线等;在该过程中,需考虑那些模块用IP完成,哪些自己实现。
(2)电路/逻辑设计
数字IC设计一般采用synopsys公司的Galaxy平台,里面包括以下软件:
前端:
a. 用VCS编写编译RTL,Verdi看波形,然后 Design compiler添加约束,对设计进行综合,得到满足条件的门级网表。在该过程中,可进行可测性设计(DFT)。
b.同时用primetime进行STA;
后端:
c. 将门级网表输入到JupiterXT 平台进行版图规划
d. 将版图规划和门级网表输入到 Physical Compiler 进行物理综合和优化,可对时序,功耗,面积等进行优化
e. 在物理综合的基础上,用Astro再进行优化布局,以及时钟树的综合和布线
f. 有了设计好的版图后,用 Star-RCXT 对版图进行寄生参数提取,以便进行时序和功耗分析,建立工艺库模型
g. 用Primetime 进行功耗和时序分析(STA)。
h. 将最终版图输入到Hercules 进行层次化的物理验证,保证版图和线路图的一致性。
2 DFT
芯片出厂后运用一种算法检测芯片错误,这种算法(差异算法)实际上是一种固定输入对应唯一输出的逻辑,这种逻辑可在芯片设计过程中确定
3 UPF设计
4 CDC问题
在异步时序逻辑电路中,会存在多个时钟域交叉的问题
- 带来的问题和解决办法
- Glitch
在A->B两个时钟域交叉的部分若存在组合逻辑电路,B在不同时钟的驱动下可能会检测出不应被检测的A信号边沿变化。
解决办法:在A、B输入和输出侧添加触发器 - 亚稳态
在B端信号发生变化式,B端输出电压尚未稳定,若扇出多个信号,对应器件接收可能会翻译成不同的逻辑值。
解决办法:B端使用两级Flip Flop - convergence
由上述亚稳态问题而使用的两级FF输出时有可能会存在1个cycle的延迟
解决办法:使用一些逻辑电路来识别这个延迟,并根据延迟的影响判断是否需要做修改 - reset
- CDC检查的步骤
- 结构检查
电路结构的检查 - 检查信号的协议
- jitter检查
动态的插入jitter,检查后续电路的稳定性
5. 动态功耗分析
动态功耗分析事关芯片功能和性能,设计过程中就可以根据动态功耗情况对设计进行反馈。
参考链接:安全验证 - 知乎
3. IC验证
验证贯穿了设计的每个阶段,可划分为前端仿真和后端仿真。前端主要为了检测功能逻辑的缺陷,后端是为了检测问及电路由延迟导致采样失败所产生的功能缺陷。
a.系统设计时,采用仿真进行性能分析和协议分析
b.电路/逻辑设计时,采用软硬协同验证:FPGA验证;静态时序分析工具验证时序;用形式验证检查综合过程及ECO是否正确。
c.物理设计时,采用物理验证(LVS,DRC):用静态时序工具验证最终时序;用形式验证检查布局布线过程及ECO
绝对好文,验证新手入门,老手总结:IC验证的一种最佳实践:pandora-v0.5
http://www.ee1024.com/thread-176665-1-1.html
软硬件同时工作,协同仿真的概念:如何验证复杂的RISC-V设计-电子工程专辑
1 验证理论知识
- 验证流程
- 编写验证计划
验证计划要解决的是what的问题,即要验证的内容 - 确定验证策略
验证策略要解决的是how的问题,即针对验证内容如何搭验证框架,功能点如何验证等。
- 验证解决的问题:
- 穷尽所有的可能的情况给设计产生激励(一般会给出随机约束激励)
- 在各种激励情况下判断处不符合硬件描述的行为并报告出来
- 回归测试
在某个缺陷修复或功能修改后,按照以前所有的测试用例(testcase)和可能添加的新的测试用例进行测试。测试要求:
- 确保本次改动修复以前的漏洞,没有引入新的缺陷,实现了新功能。
- 递交不同的随机种子(random seed)进行随机测试,确保每次测试都能提高功能覆盖率
- 验证层次
为了便于拆解功能模块,方便分工协同,通常会把进行分层次验证,以手机通信芯片为例:
- 芯片系统级(手机通信芯片)
系统级验证主要确认芯片体系结构满足所赋予的功能/性能要求。系统级设计阶段将用户需求转换成功能/性能要求,并实现行为/功能设计,然后映射到相应的体系结构上(设计输入、硬IP核、软IP核、软/硬件划分、性能分析、总体优化、性价比评估等反复叠代),最后进行系统级验证。也就是说系统级验证侧重于验证芯片的输入输出;从寄存器检查和数据检查入手,实现定向测试子系统间的交互协作。
在系统级验证中,往往要构建虚拟目标系统,如中科SoC芯片在实施验证时,将其所有对外接口挂接许多虚拟 IP核,同时编制了BIOS、RTOS及应用测试程序(包括驱动程序)。首先做功能验证,验证是否满足要求; 其次做软硬件性能验证; 第三做系统级基准测试(自顶向下验证策略),抽取特定功能,编制测试向量/程序,定义对错条件,覆盖所有功能,形成基准测试程序(反复迭代),用于模拟仿真。
功能仿真: 主要关注模块-模块(IP核-IP核)间互连验证、系统总线协调性验证和标准规范兼容性验证等,由于复杂度高,可通过事件驱动和加速技术,如硬件加速器、模拟发生器和快速建模试验等来加速和简化仿真工作。
对于一款裸机CPU来说,系统级验证的激励输入是一段段C代码程序或者汇编程序,而针对目标CPU所采用的指令集,需要相应的该指令级工具链将 .c 或 .asm转换成 .bin文件,并输入到CPU的指令存储器中;同时,转换时还需要考虑到该款CPU的寄存器初始化,整个系统初始化等,需要将boot初始化代码、syscall代码、crt代码一同链接到bin文件中,使CPU在从系统、寄存器初始化等指令处开始执行。
对于内含操作系统的CPU来说,初始化和系统调用则更加复杂。 - 子系统级(数据接口 I/O)
需完成设计包;验证包;回归测试表;覆盖率收集脚本和数据;完整的文档(设计,验证,集成,后端) - 模块级(USB3.0 PCIe I2C )
考虑的因素:内部功能(状态机等);内部数据存储;数据打包,编解码;指令执行;寄存器配置;与其他模块,子系统,芯片系统以及电源开关的互动情况 - 硅后系统级
功能验证,与硅前随机测试互补
- 验证透明度
- 黑盒测试
应用场合:对设计细节缺乏认识。
该部分测试只需要将激励给入设计的外部接口,检查设计输出,建立参考模型,无需关心设计本身。但是该测试透明度较低,导致无法深层次地定位问题,从而解决一些较深的缺陷。 - 白盒测试
应用场合:了解内部工作逻辑、层次,信号等。
无需参考模型,只需要植入监视器和断言来检查各个内部逻辑,从而对底层的设计细节进行测试。但是该测试专注于设计内部逻辑检查而忽视整体功能测试,且一旦设计更新,验证文件的可复用性很差。 - 灰盒测试
实际应用场合中通常将黑百盒两种测试方法结合。其特点是前两种测试折中。
- 动态仿真
通过测试序列和激励生成器给入待测设计适当的激励,跟随仿真进程的推进,判断输出是否符合预期。
- 定向测试
激励内容在仿真前确定下来,测试用例给出的激励序列不会在下一次提交任务时改变。一般应用在模块测试早期或这系统级芯片测试场景中,它适合于测试设计的基本功能 - 随机序列测试
通过预先定义的约束,每次随机产生合理的数值,通过激励产生器给出测试序列。使用随机激励时,需要用功能覆盖率来评估验证的进展情况
随机序列数要尽可能多一些,否则很有可能error检测不出来。 - 参考模型测试
- 断言检查
针对某特定的逻辑或时序进行预设,一旦设计的实际行为不符合断言的描述,则给出检查报告。
- 静态检查
本身不需要仿真、波形激励,可通过工具的辅助发现设计中存在的问题。在设计早期发现功能实现意外的设计问题,完善设计代码。检查方法包括:
- 语法检查
- 语义检查
在语法检查的基础上做深入检查,检查范围包括设计错误,影响覆盖率收敛的问题,可能会产生X值以及受其影响的设计部分 - 跨时钟域检查(CDC)
跨时钟通信要考虑同步问题,由此导致的随机性可能会导致建立时间和保持时间无法满足,导致功能失败。 - 形式验证
形式验证可以通过数学方法遍历状态空间,进而证明设计行为符合属性描述。
等价检查:用来保证两个电路的行为是等价的,检查不同抽象级的电路是否一致。
属性检查:电路的行为通过验证语言来描述其属性,随后通过静态方式证明在所有状态空间都满足该条件,否则举出反例。
关于形式验证的11个误区 - 半导体/EDA - -EETOP-创芯网
- 覆盖率
- 代码覆盖率
语句覆盖率:程序的每一行代码是否被执行过
条件覆盖率:每个条件中的逻辑操作数被覆盖情况
决策覆盖率:指在if, case, while, repeat, forever, for, loop语句中各个分支执行的情况
事件覆盖率:记录某一个事件被触发的次数
跳转覆盖率:记录某个边界信号数据位的0/1跳转情况
状态机覆盖率:记录状态被进入的次数,以及状态间的跳转情况。 - 断言覆盖率
记录断言的先决条件是否被触发,以及判断语句成功或失败。基本可分为基于动态仿真或者硬件加速的断言覆盖率和形式验证的静态断言覆盖率。 - 功能覆盖率
主要关注设计的输入,输出和内部状态,衡量是否实现设计的各项功能,且是否按预想的行为执行
- 测试平台(testbench)
整个验证系统的总称,包括验证结构中的各组件,组件间的连接关系,测试平台的配置和控制,编译仿真流程,结果分析报告和覆盖率检查。
平台包括时钟/重置,激励发生器,DUT,比较器,监测器五个组件
参见链接:IC验证——testbench编写_KGback的博客-CSDN博客_ic验证
2 验证技能
验证代码生成和规范检查类工具开发,比如Testbench Generation
3 RTL仿真
4 前仿
RTL仿真和前仿都是不带时序的仿真,主要用于功能验证。
5 后仿
- SDF文件
SDF(Standard delay file)文件是后端在布局布线过程中将器件延时和线延时的信息保留下来的文件,后仿将其加载到验证环境中计算DUT的整体延时和时序。
- 时序反标
芯片后仿及SDF反标 - 知乎
7 UVM
见链接:IC验证——UVM学习_KGback的博客-CSDN博客
最后
以上就是笑点低项链为你收集整理的数字IC设计和验证理论1. spec文档2. IC设计流程3. IC验证的全部内容,希望文章能够帮你解决数字IC设计和验证理论1. spec文档2. IC设计流程3. IC验证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复