前言
这一篇来介绍电路验证(Design Verification)又俗称DV,实际上System Verilog只是DV的其中一种工具而已,而想要把System Verilog学好就必须要了解到DV在做什么?所以这篇会简单介绍一下DV,以及简单说明一些验证方法。
电路验证的重要性
电路验证的需要源于现代电子电路设计的複杂性和高度集成度,以及对电子产品的可靠性和性能要求不断提高的趋势。在设计过程中发现并解决电路设计中的错误和缺陷可以节省开发成本、缩短上市时间,同时确保最终产品的品质和性能。
以往的电路开发其实没有电路验证工程师(DV),都是採取自己设计自己验证的方式,但是随着设计的複杂度越来越高我们开始需要花费更多的时间在验证上,通常时採取一个电路设计工程师(DD)搭配一个电路验证工程师(DV)的方式。
在做电路开发时通常会先由系统设计工程师(SD)拟定一份系统规格书,之后DD和DV再依照这份规格书下去做开发,DV的工作除了要确认DD设计的正确性以外,也要确保说设计是符合规格书的。因此多了DV的把关,对于设计的品质是有大幅的提升。
特别强调一下,电路验证(DV)是在设计阶段和设计人员(DD)紧密合作,可以及早的发现设计问题,从而避免在后续的生产和测试阶段引入更大的成本和风险。
电路验证的方法
目前验证的方法和工具有非常多,在进行验证工作需要综合使用多种语言/方法/工具,以下是几种主流的验证方法:
动态模拟 (dynamic simulation)静态检查 (formal check)虚拟模型 (virtual prototype)Dynamic Simulation
这是最常见的一种验证方法,是透过Stimulator来给要测试的DUT(Design Under Test)发送信号,判断输出是否符合预期,而按照信号产生的方式以及检查的方法又可以进一步划分为以下几种:
Directed TestRandom TestReference Model CheckAssertion CheckDirected Test
这种方法是我们在模拟之前就把要测试的信号给设定好,就像是人为的去设计题目给DUT作答,但是人为设定的题目总会有漏网之鱼,所以这种方法只适合用来做基本功能的检查
Random Test
与Directed Test相对的是Random Test,这种方法会在模拟时动态的产生随机信号,产生随机信号的方法有很多种,通常我们会需要给它加上一些限制,让产生出来的信号符合设计的协议,除此之外还会去分析覆盖率,来确保有把每个部份有测试到。
Reference Model Check
不论是在进行Directed Test或是Random Test的时候,都需要去检查DUT产生的输出是否符合预期,这时候通常会额外建立一个Reference Model来产出正确答案,Reference Model的目的只是为了让DUT去比对答案,因此通常会用高阶语言来实现。
Assertion Check
上面提到的几个方法都是用来检测DUT产出的结果是否正确,但Assertion Check则是更直接去检验设计本身,它可以检查某一段特定的逻辑,当这段逻辑的行为不符合预期就会回报。
Formal Check
跟Dynamic Simulation不同的是,Formal Check不需要进行模拟,而是直接去检查一段设计代码的语法/语意/跨时钟域...
Syntax CheckLinting CheckCross-cock Domain Check (CDC)Formal VerificationSyntax Check
就像大部分的程式语言一样,设计出来的电路也要经过编译之后才可以去跑模拟,而这时候第一个就会去检查语法是否正确,更高阶一点的编译器还可以帮忙检查这段设计是否可以被合成(synthesis)
Linting Check
与基本的Syntax Check比起来,Linting Check则是更深入的对设计做检查,这个部分会透过专用的工具来帮忙检查,设计人员可以很快速的检查一段设计是否有问题,通常当Syntax/Linting Check通过之后才会交由DV再做进一步的验证。
Cross-clock Domain Check (CDC)
当设计越来越複杂之后,里面通常会不止有一个Clock,而多个Clock之间就会需要考虑到同步的问题,目前同样的有专门的工具可以帮助我们做CDC的检查。
Formal Verification
大致上可以分为EC跟PC
Equivalence Check (EC)可以检查两个设计的行为是不是一致的,通常是检查RTL的设计跟Netlist是否一致Property Check (PC)
又称为Model Check (MC),透过Assertion来描述一段电路的行为,结合形式验证工具来检查所有的状态空间,一旦它发现实际行为跟Assertion描述的不一致就会回报出来
Virtual Prototype
开发虚拟模型的目的是为了提前软体的开发时程,以往的开发模式往往是等到硬体开发完成之后才开始开发软体,但这种模式会导致软体开发的时程会受到硬体开发影响,但有了虚拟模型之后可以提早软体的开发,也可以及早的给予硬体开发回馈,比如说透过虚拟模型去测试性能,可以在硬体开发的早期提供数据。
不过多一个虚拟模型的开发无疑时要增加工作量,需要更庞大的团队来协作完成,因此建立TLM (Transaction Level Model)通常不包含在DV的工作内容。
后记
这一篇的内容大多是蒐集网路上的资料来的,因为我本身也缺乏实务的经验,对于上面的方法及工具仅仅是略懂,因此若内容有误再麻烦留言告诉我。