赞
踩
在拿到产品需求书之后,要做芯片的需求评估,确定体系结构和基本组件后,要做其整合做架构评估,以确认设计的体系结构是否恰当、总线是否能满足吞吐量和实现性要求以及存储器是否满足需求等。
芯片整体系统以及细分模块都需要功能详述文档,包含信息:
ESL(Electronic System Level)设计方法学的目的在于提供让设计人员能够在一种抽象层次上对芯片进行描述和分析的工具和方法。
文献1解释了ESL设计没有大规模应用的原因,提出只有大厂才有能力支撑ESL模型的开发。
本人预测,未来的20年里,只要以LLM为代表的人工智能大模型持续火热,对DSA开发的需求就会一直存在,而掌握了用户群的大厂经过财务的成本评估,也一定会跟进DSA的开发,那么为了追求DSA芯片的性能和投入成本,系统级建模一定必不可少。
整体上分为系统设计到电路/逻辑设计,最后得到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代码的等价性
为了便于拆解功能模块,方便分工协同,通常会把进行分层次验证,以手机通信芯片为例:
通过测试序列和激励生成器给入待测设计适当的激励,跟随仿真进程的推进,判断输出是否符合预期。
本身不需要仿真、波形激励,可通过工具的辅助发现设计中存在的问题。在设计早期发现功能实现意外的设计问题,完善设计代码。检查方法包括:
验证环境由Testbench、测试用例、运行脚本等要素组成。包含了验证结构中的各组件,组件间的连接关系,测试平台的配置和控制,编译仿真流程,结果分析报告和覆盖率检查。
1)testbench
平台包括时钟/重置,激励发生器,DUT,比较器,监测器五个组件
覆盖率是检测验证效果的基本指标。
语句覆盖率:
也叫做块覆盖率,检查HDL的每一行代码是否被执行过
一些好的具有保护性的代码语句没有运行是正常的(检查代码覆盖率时应把保护性语句排除在代码覆盖统计之外。)
表达式覆盖率:
相比语句覆盖,粒度更细。
条件覆盖率:
每个条件中的逻辑操作数被覆盖情况
分支覆盖率:
指在if, case, while, repeat, forever, for, loop语句中各个分支执行的情况
事件覆盖率
记录某一个事件被触发的次数
翻转覆盖率
记录某个边界信号数据位的0/1跳转情况
状态机覆盖率
记录状态被进入的次数,以及状态间的跳转情况。
记录断言的先决条件是否被触发,以及判断语句成功或失败。基本可分为基于动态仿真或者硬件加速的断言覆盖率和形式验证的静态断言覆盖率。
主要关注设计的输入,输出和内部状态,衡量是否实现设计的各项功能,且是否按预想的行为执行。主要检测代码覆盖未检测到的错误。
功能覆盖属于黑盒测试,只关心功能,不依赖于实际的代码,功能覆盖涉及到测量一些相关值,不能从RTL级设计代码中自动提取,必须进行人工操作。
验证环境的构建
Verilog TB构建参见链接:
IC验证——testbench编写_KGback的博客-CSDN博客_ic验证
SystemVerilog TB构建参见链接:
IC验证——SystemVerilog学习_ic验证必须要用system verilog语言吗-CSDN博客
UVM见链接:
动态仿真工具的使用:
IC设计——EDA软件篇——VCS使用_vcs 显示多维数组-CSDN博客
便携式测试用例:
数字IC验证——PSS可移植测试用例_pss验证-CSDN博客
验证代码生成和规范检查类工具开发,比如AutoTB:
参考链接:IC后端设计——后端设计过程_KGback的博客-CSDN博客
SoC
CPU
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。