目录
验证的方法主要分为六种:
※ 动态仿真(dynamic simulation)
※ 静态检查(formal check)
※ 虚拟模型(virtual prototype)
※ 硬件加速(hardware acceleration)
※ 电源功耗(power consumption)
※ 性能评估(performance evaluation)
动态仿真
该方式是通过测试序列和激励生成器给入待测设计适当的激励,伴随着仿真时间,进而判断输出是否符合预期,验证人员需要比较结果和波形来判断测试用例是否通过。
如果按照激励生成和检查方式,我们可以将动态仿真进一步划分为:
--定向测试(directed test)
--随机测试(random test)
--参考模型检查(reference model check)
--断言检查(assertion check)
静态检查
与动态仿真相对的是静态检查,它不需要仿真、波形激励,通过工具的辅助,验证人员即可以发现设计中存在的问题。
静态检查可以细分更多种类,它们关注的领域也不同,我们将这些方法概括为:
--语法检查(syntax check)
--语义检查(linting check)
--跨时钟域检查(CDC , Cross-clock Domain Check)
--形式验证(formal verification)
语义检查和语法检查的区别在于,语法检查主要检查语法是否出现错误,比如例化错误、关键词使用错误等,语义检查是在设计可行性上做深入检查的,前提是通过了语法检查。语义检查的工具如Spyglass,可以检查常见的设计错误、影响覆盖率收敛的问题、可能会产生X值以及受其影响的设计部分。
对于跨时钟域的检查,设计中不同的功能模块如果被不同的时钟驱动,那么就会形成不同的时钟域,即如果数据从一个时钟域到另一个时钟域没有做数据同步,那么就可能出现建立时间或保持时间违例而导致逻辑错误。这种跨时钟域问题没法被STA分析到。 通过该方法可以在早期的RTL阶段来识别出跨时钟域的通信电路上面是否有合适的同步处理,所以跨时钟域检查是为了保证所有的CDC信号都能够得到正确的同步,Spyglass就可以支持CDC检查。
形式验证分为两种:
等价检查(EC,Equivalence check):用来保证两个电路的行为是等价的,可以用来检查不同抽象级的电路是否一致,例如RTL级和网表。
属性检查(PC,Property check,又称为模型检查):电路的行为通过验证语言来描述其属性,随后通过静态方式来证明所有状态空间下都满足该条件,否则举出反例来证明设计行为不符合属性描述。
虚拟模型
虚拟模型即高抽象的硬件模型,软件模型可依赖虚拟模型在早期开发,并且将反馈交给硬件设计。
通过虚拟模型,硬件可以更早地获得软件反馈而对设计进行修改。这种软硬件紧密协作的方式有很多优势,比如利用虚拟模型获取的性能数据(带宽等)可以对硬件早期结构提供参考意见,或者判断硬件软件的协同任务是否满足功耗目标。
目前我们通过多项虚拟建模的技术例如协同设计、协同仿真和验证,试图在早期就可以发现设计缺陷,使得修改这些缺陷可以在相对容易实施的阶段完成。
建模准备:1.芯片定义 2.高级别结构 3.用户用例 4.RTL模块
虚拟模型:1.建模策略 2.将功能描述转化为System C模型 3.将RTL转换为System C模型 4.结构和性能分析。
平台开发:1.虚拟平台 2.结构、性能及功耗报告 3.驱动和固件开发 4.OS、中间件和应用层开发 5.反馈给硬件设计。
硬件加速
由于仿真速度的限制,一些真实的用例也无法在RTL级仿真很快地呈现结果,这种困难在硅后测试发现问题反馈给硬件团队时更加明显。这意味着硬件团队需要耗时很长的软件进行分析,找到可能的问题,拆分软件场景,进而在硬件仿真上重现。仿真速度的限制使得无法通过仿真在早期测试软件,而这一任务一般交给虚拟模拟型平台或者硬件加速。
目前业界主要的硬件加速方式分为两种:FPGA和专用的模拟器。模拟器的速度在仿真和FPGA之间,它的特点就是速度比仿真器快的同时还具备软件的特性,可以设置断点查看信号等,更方便debug。
效能验证
主要针对硅前设计阶段进行效能验证,涉及的流程可分为两个部分
--功能验证:主要采用PA(Power Aware)主要包括UPF(unified power format)或者CPF(comment power format)方式,通过与仿真器结合,模拟电源域的开关进行设计检查。
--功耗预测与优化:通过第三方功耗分析工具,结合仿真数据(FSDB/VCD/SAIF)进行功耗预测,并给出分析结果。
功耗节约技术:
UVM简介
UVM(Universal Verification Methodology)的验证方法学通过吸取eRM,AVM,OVM,VVM等之前不同的方法学的优点,集众家之所长。
所有的验证方法学服务目的都在于提供一些可以重用的类来减轻在项目之间水平复用和垂直复用的工作量。
就验证语言System verilog而言,它的面向对象、随机约束、线程通信管理等核心特性,同时这些特性也为建立一个验证环境提供了足够多的便利。
UVM面向所有数字设计,涵盖了从模块级到芯片级,ASIC到FPGA,以及控制逻辑、数据通路到处理器验证的全部场景。
UVM的类大致可以分为以下几类:
工厂(factory)类、事务(transaction)和序列(sequence)类、结构创建(structure creation)类、环境组件(environment component)类、通信管道(channel)类、信息报告(message report)类、寄存器模型(register model)类、线程同步(thread synchronization)类、事务接口(transaction interface)类。