前言
这本书是关于什么的?
这本书应该是您学习SystemVerilog验证语言结构的第一本书。它描述了该语言如何工作,并包含了许多关于如何使用面向对象编程(OOP)构建一个基本的覆盖驱动、约束随机、分层测试平台的测试示例。这本书有许多关于构建testbench的指导方针,帮助您理解如何以及为什么使用类、随机化和函数覆盖。一旦你学会了这门语言,你可以从参考资料部分列出的一些方法论书籍中获得更多关于构建测试平台的信息。
谁应该读这本书?
如果您创建了testbench,您需要这本书。如果您只使用Verilog或VHDL编写测试,并且想学习SystemVerilog,这本书将向您展示如何升级到新的语言特性。Vera和Specman用户可以学习一种语言如何同时用于设计和验证。您可能已经尝试阅读SystemVerilog语言参考手册,但发现它塞满了语法,但没有关于选择哪种结构的指导方针。
Chris最初写这本书的原因是,像他的许多客户一样,他在职业生涯的大部分时间里都在使用C和Verilog等过程性语言来编写测试,而当OOP验证语言出现时,他不得不重新学习所有东西。他犯了所有典型的错误,所以写了这本书,你就不用再重复它们了。
在阅读本书之前,您应该熟悉Verilog-1995。不过您不需要了解Verilog-2001或SystemVerilog设计构造或SystemVerilog断言。
第三版有什么新内容?
这个用于验证的SystemVerilog新版本比分别于2006年和2008年编写的前两个版本有许多改进。
我们的大学需要在验证技术方面培养未来的工程师。这个版本适合教学环境,在每一章的最后有练习问题,以测试你的理解。
有资格的老师可以访问http://extras.springer.com 来获取更多的素材,比如幻灯片、考试、家庭作业、解决方案,以及适合一个学期的课程的教学大纲样本。
2009年版本的IEEE 1800 SystemVerilog语言参考手册(LRM)有很多变化,有大有小。这本书尽量包括最新的相关信息。
Accellera利用来自VMM(验证方法手册)、OVM(开放验证方法)、eRM (e重用方法)和其他方法的思想创建了UVM(通用验证方法)。本书中的许多例子都是基于VMM的,因为如果您是验证新手,那么VMM对阶段的显式调用更容易理解。同时提供了一些新的例子来展示UVM的概念,比如测试注册表和配置数据库。
当寻找一个特定的主题时,工程师从索引开始逆向阅读书籍,所以我们增加了索引的数量。
最后,非常感谢所有在前几版中发现错误的读者,从糟糕的语法到明显是在从亚洲飞往波士顿的18小时飞行后的早晨写的代码,或者更糟糕的是,在换尿布时写的代码。这个版本已经经过多次检查和审核,但再次强调,所有错误都是我们的。
为什么创建SystemVerilog ?
在20世纪90年代后期,Verilog硬件描述语言(HDL)成为用于描述仿真和合成硬件的最广泛的语言。然而,IEEE标准化的前两个版本(1364-1995和1364- 2001)只有简单的结构,用于创建测试。随着设计规模超出了该语言的验证能力,商业化的硬件验证语言(HVLs)如OpenVera和e应运而生。而不想为这些工具付费的公司,花了几百个人年的时间来创建自己的定制工具。
这种生产力危机以及设计方面的类似危机导致了Accellera的成立,这是一个由EDA公司和用户组成的联盟,他们希望创造下一代的Verilog。OpenVera语言的捐赠构成了SystemVerilog的HVL特性的基础。2005年11月,随着IEEE标准1800-2005 for SystemVerilog的通过,Accellera的目标得以实现,IEEE(2005)。2009年12月,最新的Verilog LRM 1364- 2005与上述2005年SystemVerilog标准合并,创建了IEEE标准1800-2009 for SystemVerilog。将这两个标准合并为一个标准,意味着现在设计和验证都只有一种语言——SystemVerilog。
统一语言的重要性
验证通常被视为与设计根本不同的活动。这种分裂导致了用于验证的狭隘语言的发展,并将工程师分成了两个基本上独立的学科。这种专业化在两组之间的交流方面造成了很大的瓶颈。SystemVerilog通过其针对两个阵营的功能解决了这个问题。两个团队都不需要放弃成功所需的任何功能,但是设计和验证工具的语法和语义的统一改善了交流。例如,虽然一个设计工程师可能不能编写一个面向对象的testbench环境,但是阅读这样的测试并理解发生了什么是相当简单的,使设计和验证工程师能够一起工作来识别和修复问题。同样,设计人员了解他或她的模块的内部工作原理,并且是编写有关它的断言的最佳人选,但是验证工程师可能有更广泛的视野来创建模块之间的断言。
在单一语言中包含design、testbench和断言构造的另一个优点是,testbench可以轻松访问环境的所有部分,而不需要专门的应用程序编程接口(API)。HVL的价值在于它能够创建高级的、灵活的测试,而不是它的循环结构或声明风格。SystemVerilog是基于Verilog、VHDL和工程师已经使用了几十年的C/C++结构的。
方法的重要性
学习一门语言的语法和学习如何使用一种工具是有区别的。这本书着重于使用受约束的随机测试的验证技术,该测试使用功能覆盖来度量进度并指导验证。随着章节的展开,语言和方法论的特点被并排显示出来。有关方法论的更多信息,请参见Bergeron等人(2006)。
SystemVerilog最有价值的好处是,它允许用户以一致的语法构建可靠的、可重复的验证环境,可以跨多个项目使用。
本书概述
SystemVerilog语言包括用于设计、验证、断言等功能。本书重点介绍用于验证设计的结构。使用SystemVerilog有许多方法可以解决问题。这本书解释了不同解决方案之间的权衡。
第1章,验证指南,介绍了验证技术作为学习和使用SystemVerilog语言的基础。这些指导方针强调了在分层的testbench环境中覆盖率驱动的随机测试。
第2章,数据类型,介绍了新的SystemVerilog数据类型,如数组、结构、枚举类型以及压缩数组和结构。
第3章,过程语句和例程,展示了新的过程语句以及对任务和函数的改进。
第4章,连接testbench和设计,展示了新的SystemVerilog验证结构,例如程序块、接口和时钟块,以及如何使用它们构建您的测试工作台并将其连接到被测试的设计中。
第5章,基本面向对象编程,介绍面向对象编程,解释如何构建类,构造对象和使用句柄。
第6章,随机化,向您展示了如何使用SystemVerilog中受约束的随机激励产生机制,包括许多技术和示例。
第7章,线程和线程间通信,展示了如何在你的测试台中创建多个线程,使用线程间通信在这些线程之间交换数据并同步它们。
第8章,高级OOP和测试工作台指南,展示了如何用OOP构建一个分层的测试工作台,以便所有测试都可以共享组件。
第9章,功能覆盖率,解释了不同类型的覆盖率,以及在您遵循验证计划时如何使用功能覆盖率来度量您的进度。
第10章,高级接口,展示了如何使用虚拟接口来模拟扩充您的测试工作台代码,连接到多个设计配置,并使用过程代码创建接口,使您的测试工作台和设计可以在更高的抽象级别上工作。
第11章,一个完整的SystemVerilog测试平台,展示了一个使用第8章中所示准则的约束性随机测试平台。本章展示了几个测试,以说明如何在不编辑原始代码的情况下轻松扩展测试本的行为,因为编辑原始代码总是有引入新错误的风险。
第12章,C / C++接口,描述了如何使用直接编程接口将C或C++代码连接到SystemVerilog。
本书中使用的图标
表1 书中的图标
![]() |
这个指南针图标展示了验证方法,以指导您使用SystemVerilog testbench特性。 |
![]() |
这个虫子图标显示了常见的编码错误,如语法错误、逻辑问题或线程问题。 |
关于作者
Chris Spear在ASIC设计和验证领域工作了30年。他的职业生涯始于Digital Equipment Corporation (DEC),担任DECsim的CAD工程师,连接了有史以来第一个Zycad盒子,然后是VAX 8600的硬件验证工程师,以及硬件行为仿真加速器。然后他转到Cadence公司,在那里他是Verilog-XL的应用工程师,随后在Viewlogic工作。Chris目前受雇于Synopsys公司,担任验证顾问,这个职位是他在十几年前开始的。他撰写了《SystemVerilog for Verification》的第一版和第二版。Chris于1981年获得康奈尔大学的BSEE学位。业余时间,Chris喜欢在山区骑公路自行车和与妻子一起旅行。
Greg Tumbush从事ASIC和FPGA的设计和验证已有13年。在空军研究实验室(AFRL)担任研究员后,他搬到美丽的科罗拉多州,在Astek公司担任首席ASIC设计工程师。随后,他在Starkey实验室、AMI半导体和安森美半导体开始了6年的职业生涯,在那里他是SystemC和SystemVerilog的早期使用者。2008年,Greg离开安森美半导体成立了Tumbush公司,在那里他一直为客户提供设计、验证和后端咨询,以确保首次成功。他也是科罗拉多大学科罗拉多斯普林斯分校的兼职讲师,教授高级和研究生级别的数字设计和验证课程。他有许多出版物,可以在www.tumbush.com 找到。Greg于1998年获得辛辛那提大学博士学位。
最后的注解
如果你想了解更多关于SystemVerilog和验证的信息,你可以在以下网站找到许多资源:http://chris.spear.net/systemverilog 。这个网站有本书中许多例子的源代码。想在课堂上使用本书的学者可以在http://extras.springer.com 获取幻灯片、测试、作业题、解决方案和样本大纲。
本书中的大部分代码示例都是用Synopsys公司的Chronologic VCS、Mentor的QuestaSim和Cadence Incisive验证的。任何错误都是由Chris的邪恶双胞胎Skippy造成的。如果你认为你在本书中发现了错误,请查看他的网站上的勘误页面。如果您是第一个发现某一章中的技术错误的人,我们将免费送您一本亲笔签名的书。请在电子邮件的主题行中注明 "SystemVerilog"。
克里斯·斯皮尔,格雷格·唐布什