System Verilog是什么?

文章探讨了SystemVerilog的发展,它是为应对复杂电路设计和验证需求而生的高级硬件描述语言。SystemVerilog提供了丰富的验证特性,如约束随机验证、事务级建模等,有助于提升设计的可靠性和品质。文章还介绍了电路验证的重要性和方法,包括动态模拟、静态检查和虚拟模型等策略。
摘要由CSDN通过智能技术生成

System Verilog的发展

SystemVerilog 的出现是为了因应日益复杂的数位电路设计和验证需求。虽然Verilog HDL 在早期的数位电路设计中得到了广泛应用,但随着技术的发展和电路复杂度的增加,Verilog HDL 在某些方面已经显得有些不足以满足设计者和验证工程师的需求。因此,有必要引入一种更强大、更灵活、更先进的硬体描述语言,从而诞生了SystemVerilog。

系统 Verilog 与 Verilog

SystemVerilog 不仅是一种用于电路设计的语言,更是为了强调电路验证而生的。相较于传统的Verilog,SystemVerilog的设计目标之一就是提供更多的验证工具和特性,以应对日益复杂的电子系统。 SystemVerilog 加入了许多专为验证工程师量身定制的功能,例如:约束随机验证(Constrained Random Verification)、事务级建模(Transaction-Level Modeling)、覆盖率分析(Coverage Analysis)、介面(Interface)、断言(Assertion)、动态连接(Dynamic Connections)等等。这些功能使得工程师可以更有效地验证设计的功能性、时序性和容错性,从而提高设计的可靠性和品质。

但是必须要注意的是,SystemVerilog新增的语法/特性不仅仅是验证这部分,包括到设计方面也有许多新的语法可以使用,所以在学习的时候要特别注意目前这个特性是应用在设计还是验证,最好要能够连结到实际的应用场景才可以更好的理解它该怎么使用。

电路验证

电路验证是指对数位电路进行测试和验证,以确保其功能正确性和符合设计要求。在电路验证过程中,工程师们通过不同的验证方法和工具来确保电路在各种情况下都能正常工作。这包括对电路的功能、时序、功耗等方面进行全面的测试,以确保设计的可靠性和品质。

电路验证的重要性

电路验证的需要源于现代电子电路设计的复杂性和高度集成度,以及对电子产品的可靠性和性能要求不断提高的趋势。在设计过程中发现并解决电路设计中的错误和缺陷可以节省开发成本、缩短上市时间,同时确保最终产品的品质和性能。
以往的电路开发其实没有电路验证工程师(DV),都是采取自己设计自己验证的方式,但是随着设计的复杂度越来越高我们开始需要花费更多的时间在验证上,通常时采取一个电路设计工程师(DD)搭配一个电路验证工程师(DV)的方式。
在做电路开发时通常会先由系统设计工程师(SD)拟定一份系统规格书,之后DD和DV再依照这份规格书下去做开发,DV的工作除了要确认DD设计的正确性以外,也要确保说设计是符合规格书的。因此多了DV的把关,对于设计的品质是有大幅的提升。
特别强调一下,电路验证(DV)是在设计阶段和设计人员(DD)紧密合作,可以及早的发现设计问题,从而避免在后续的生产和测试阶段引入更大的成本和风险。

电路验证的方法

目前验证的方法和工具有非常多,在进行验证工作需要综合使用多种语言/方法/工具,以下是几种主流的验证方法:

  • 动态模拟(dynamic simulation)
  • 静态检查(formal check)
  • 虚拟模型(virtual prototype)

动态模拟

这是最常见的一种验证方法,是透过Stimulator来给要测试的DUT(Design Under Test)发送信号,判断输出是否符合预期,而按照信号产生的方式以及检查的方法又可以进一步划分为以下几种:

  • 定向测试
  • 随机测试
  • 参考模型检查
  • 断言检查
定向测试

这种方法是我们在模拟之前就把要测试的信号给设定好,就像是人为的去设计题目给DUT作答,但是人为设定的题目总会有漏网之鱼,所以这种方法只适合用来做基本功能的检查

随机测试

与Directed Test相对的是Random Test,这种方法会在模拟时动态的产生随机信号,产生随机信号的方法有很多种,通常我们会需要给它加上一些限制,让产生出来的信号符合设计的协议,除此之外还会去分析覆盖率,来确保有把每个部份有测试到。

参考模型检查

不论是在进行Directed Test或是Random Test的时候,都需要去检查DUT产生的输出是否符合预期,这时候通常会额外建立一个Reference Model来产出正确答案,Reference Model的目的只是为了让DUT去比对答案,因此通常会用高阶语言来实现。

断言检查

上面提到的几个方法都是用来检测DUT产出的结果是否正确,但Assertion Check则是更直接去检验设计本身,它可以检查某一段特定的逻辑,当这段逻辑的行为不符合预期就会回报。

正式支票

跟Dynamic Simulation不同的是,Formal Check不需要进行模拟,而是直接去检查一段设计代码的语法/语意/跨时钟域...

  • 语法检查
  • 绒毛检查
  • 交叉旋塞域检查 (CDC)
  • 形式验证
语法检查

就像大部分的程式语言一样,设计出来的电路也要经过编译之后才可以去跑模拟,而这时候第一个就会去检查语法是否正确,更高阶一点的编译器还可以帮忙检查这段设计是否可以被合成(synthesis)

绒毛检查

与基本的Syntax Check比起来,Linting Check则是更深入的对设计做检查,这个部分会透过专用的工具来帮忙检查,设计人员可以很快速的检查一段设计是否有问题,通常当Syntax/Linting Check通过之后才会交由DV再做进一步的验证。

跨时钟域检查 (CDC)

当设计越来越复杂之后,里面通常会不止有一个Clock,而多个Clock之间就会需要考虑到同步的问题,目前同样的有专门的工具可以帮助我们做CDC的检查。

形式验证

大致上可以分为EC跟PC

  • Equivalence Check (EC)
    可以检查两个设计的行为是不是一致的,通常是检查RTL的设计跟Netlist是否一致
  • Property Check (PC)
    又称为Model Check (MC),透过Assertion来描述一段电路的行为,结合形式验证工具来检查所有的状态空间,一旦它发现实际行为跟Assertion描述的不一致就会回报出来

虚拟样机

开发虚拟模型的目的是为了提前软体的开发时程,以往的开发模式往往是等到硬体开发完成之后才开始开发软体,但这种模式会导致软体开发的时程会受到硬体开发影响,但有了虚拟模型之后可以提早软体的开发,也可以及早的给予硬体开发回馈,比如说透过虚拟模型去测试性能,可以在硬体开发的早期提供数据。
不过多一个虚拟模型的开发无疑时要增加工作量,需要更庞大的团队来协作完成,因此建立TLM (Transaction Level Model)通常不包含在DV的工作内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值